From 9e7e7d4ef89984f93c470c4430af0ee723b17dab Mon Sep 17 00:00:00 2001 From: Nick G Date: Tue, 9 Apr 2024 11:45:28 -0400 Subject: [PATCH] Updates --- CNAME | 1 - asset-manifest.json | 12 ++++++------ index.html | 2 +- static/css/{main.d2adac17.css => main.5271bbb3.css} | 4 ++-- static/css/main.5271bbb3.css.map | 1 + static/css/main.d2adac17.css.map | 1 - static/js/main.993b0a2f.js.map | 1 - static/js/{main.993b0a2f.js => main.f69d9cc8.js} | 6 +++--- ...f.js.LICENSE.txt => main.f69d9cc8.js.LICENSE.txt} | 0 static/js/main.f69d9cc8.js.map | 1 + 10 files changed, 14 insertions(+), 15 deletions(-) delete mode 100644 CNAME rename static/css/{main.d2adac17.css => main.5271bbb3.css} (97%) create mode 100644 static/css/main.5271bbb3.css.map delete mode 100644 static/css/main.d2adac17.css.map delete mode 100644 static/js/main.993b0a2f.js.map rename static/js/{main.993b0a2f.js => main.f69d9cc8.js} (71%) rename static/js/{main.993b0a2f.js.LICENSE.txt => main.f69d9cc8.js.LICENSE.txt} (100%) create mode 100644 static/js/main.f69d9cc8.js.map diff --git a/CNAME b/CNAME deleted file mode 100644 index b3431a4..0000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -fast.alignmentviewer.org \ No newline at end of file diff --git a/asset-manifest.json b/asset-manifest.json index 282cb2c..5ebaebe 100644 --- a/asset-manifest.json +++ b/asset-manifest.json @@ -1,13 +1,13 @@ { "files": { - "main.css": "/static/css/main.d2adac17.css", - "main.js": "/static/js/main.993b0a2f.js", + "main.css": "/static/css/main.5271bbb3.css", + "main.js": "/static/js/main.f69d9cc8.js", "index.html": "/index.html", - "main.d2adac17.css.map": "/static/css/main.d2adac17.css.map", - "main.993b0a2f.js.map": "/static/js/main.993b0a2f.js.map" + "main.5271bbb3.css.map": "/static/css/main.5271bbb3.css.map", + "main.f69d9cc8.js.map": "/static/js/main.f69d9cc8.js.map" }, "entrypoints": [ - "static/css/main.d2adac17.css", - "static/js/main.993b0a2f.js" + "static/css/main.5271bbb3.css", + "static/js/main.f69d9cc8.js" ] } \ No newline at end of file diff --git a/index.html b/index.html index 857625d..332a4d9 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -AlignmentViewer 2.0
\ No newline at end of file +AlignmentViewer 2.0
\ No newline at end of file diff --git a/static/css/main.d2adac17.css b/static/css/main.5271bbb3.css similarity index 97% rename from static/css/main.d2adac17.css rename to static/css/main.5271bbb3.css index c3be263..b705606 100644 --- a/static/css/main.d2adac17.css +++ b/static/css/main.5271bbb3.css @@ -1,2 +1,2 @@ -body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}body,html{height:100%;overflow:hidden;position:relative}body,html{overscroll-behavior-x:none}body{overscroll-behavior-y:none}#root{display:flex;flex-direction:column;height:100vh}#root .fullscreen-loading-indicator.hidden{display:none}#root .fullscreen-loading-indicator{background-color:#fff;display:grid;inset:0;opacity:.8;place-items:center;position:fixed;z-index:1901}#root .fullscreen-loading-indicator .loader{animation:spin 2s linear infinite;border:3px solid #f3f3f3;border-radius:50%;border-top-color:#3498db;height:48px;position:relative;width:48px}#root .fullscreen-loading-indicator .spinner1{display:grid;grid-auto-flow:column;height:24px;place-items:center;position:relative;width:24px}#root .fullscreen-loading-indicator .spinner1 .circleHolder{display:grid;height:25px;place-items:center;width:25px}#root .fullscreen-loading-indicator .spinner1 .circleHolder .circle1,#root .fullscreen-loading-indicator .spinner1 .circleHolder .circle2,#root .fullscreen-loading-indicator .spinner1 .circleHolder .circle3{background-color:#000;border-radius:50%;display:inline-block;height:25px;width:25px}#root .fullscreen-loading-indicator .spinner1 .circleHolder .spinner_b2T7z{animation:spinner_xe7Qz .8s linear infinite}#root .fullscreen-loading-indicator .spinner1 .circleHolder .spinner_YRVVz{animation-delay:-.65s}#root .fullscreen-loading-indicator .spinner1 .circleHolder .spinner_c9oYz{animation-delay:-.5s}@keyframes spinner_xe7Qz{to{height:25px;width:25px}50%{height:0;width:0}}#root .fullscreen-loading-indicator .spinner_b2T7{animation:spinner_xe7Q .8s linear infinite}#root .fullscreen-loading-indicator .spinner_YRVV{animation-delay:-.65s}#root .fullscreen-loading-indicator .spinner_c9oY{animation-delay:-.5s}@keyframes spinner_xe7Q{93.75%,to{r:3px}46.875%{r:.2px}}#root .fullscreen-loading-indicator .spinner_zWVm{animation:spinner_5QiW 1.2s linear infinite,spinner_PnZo 1.2s linear infinite}#root .fullscreen-loading-indicator .spinner_gfyD{animation:spinner_5QiW 1.2s linear infinite,spinner_4j7o 1.2s linear infinite;animation-delay:.1s}#root .fullscreen-loading-indicator .spinner_T5JJ{animation:spinner_5QiW 1.2s linear infinite,spinner_fLK4 1.2s linear infinite;animation-delay:.1s}#root .fullscreen-loading-indicator .spinner_E3Wz{animation:spinner_5QiW 1.2s linear infinite,spinner_tDji 1.2s linear infinite;animation-delay:.2s}#root .fullscreen-loading-indicator .spinner_g2vs{animation:spinner_5QiW 1.2s linear infinite,spinner_CMiT 1.2s linear infinite;animation-delay:.2s}#root .fullscreen-loading-indicator .spinner_ctYB{animation:spinner_5QiW 1.2s linear infinite,spinner_cHKR 1.2s linear infinite;animation-delay:.2s}#root .fullscreen-loading-indicator .spinner_BDNj{animation:spinner_5QiW 1.2s linear infinite,spinner_Re6e 1.2s linear infinite;animation-delay:.3s}#root .fullscreen-loading-indicator .spinner_rCw3{animation:spinner_5QiW 1.2s linear infinite,spinner_EJmJ 1.2s linear infinite;animation-delay:.3s}#root .fullscreen-loading-indicator .spinner_Rszm{animation:spinner_5QiW 1.2s linear infinite,spinner_YJOP 1.2s linear infinite;animation-delay:.4s}@keyframes spinner_5QiW{0%,50%{height:7.33px;width:7.33px}25%{height:1.33px;width:1.33px}}@keyframes spinner_PnZo{0%,50%{x:1px;y:1px}25%{x:4px;y:4px}}@keyframes spinner_4j7o{0%,50%{x:8.33px;y:1px}25%{x:11.33px;y:4px}}@keyframes spinner_fLK4{0%,50%{x:1px;y:8.33px}25%{x:4px;y:11.33px}}@keyframes spinner_tDji{0%,50%{x:15.66px;y:1px}25%{x:18.66px;y:4px}}@keyframes spinner_CMiT{0%,50%{x:8.33px;y:8.33px}25%{x:11.33px;y:11.33px}}@keyframes spinner_cHKR{0%,50%{x:1px;y:15.66px}25%{x:4px;y:18.66px}}@keyframes spinner_Re6e{0%,50%{x:15.66px;y:8.33px}25%{x:18.66px;y:11.33px}}@keyframes spinner_EJmJ{0%,50%{x:8.33px;y:15.66px}25%{x:11.33px;y:18.66px}}@keyframes spinner_YJOP{0%,50%{x:15.66px;y:15.66px}25%{x:18.66px;y:18.66px}}#root .app-header{display:flex;justify-content:center;padding:0;position:relative}#root .app-header .settings-box{background-color:#fff;font-size:11px;height:30px;padding:8px 8px 16px;width:100%}#root .app-header .settings-box .settings-header{align-items:center;border-bottom:1px solid #e6e6e6;display:flex;flex-direction:row;gap:10px;justify-content:space-between;padding-bottom:8px}#root .app-header .settings-box .settings-header h2{flex-grow:1;font-size:2em;margin:0;order:1}#root .app-header .settings-box .settings-header .settings-alignment-description{display:flex;flex-direction:column;flex-grow:50;font-size:10px;order:2}#root .app-header .settings-box .settings-header .settings-alignment-description h3,#root .app-header .settings-box .settings-header .settings-alignment-description h4{margin:0}#root .app-header .settings-box .settings-header a,#root .app-header .settings-box .settings-header button{border:0;font-size:0;margin:0;order:7;padding:0 2px}#root .app-header .settings-box .settings-header a.github-link{font-size:0;order:3}#root .app-header .settings-box .settings-header button.download{order:4}#root .app-header .settings-box .settings-header button.search-button{order:5}#root .app-header .settings-box .settings-header button.settings-toggle{order:6}#root .app-content{flex:1 1;position:relative}.av2-positional-axis{bottom:0;left:0;overflow-x:hidden;overflow-y:hidden;position:absolute;right:0;top:0;white-space:nowrap}.av2-positional-axis::-webkit-scrollbar{background:#0000;height:0}.av2-virtualized-matrix{inset:0;position:absolute}.av2-virtualized-matrix .scrolled-indicator{inset:0;pointer-events:none;position:absolute;z-index:1001}.av2-virtualized-matrix .av2-wheel-scroller{cursor:default;inset:0;position:absolute}.av2-virtualized-matrix .av2-wheel-scroller .hover-tracker-x,.av2-virtualized-matrix .av2-wheel-scroller .hover-tracker-y{pointer-events:none;position:fixed;z-index:1000}.av2-virtualized-matrix .av2-wheel-scroller .triangle-up{border-bottom:5px solid red;border-left:2.5px solid #0000;border-right:2.5px solid #0000;height:0;width:0}.av2-virtualized-matrix .av2-wheel-scroller .triangle-down{border-left:2.5px solid #0000;border-right:2.5px solid #0000;border-top:5px solid red;height:0;width:0}.av2-virtualized-matrix .av2-wheel-scroller .triangle-left{border-bottom:2.5px solid #0000;border-right:5px solid red;border-top:2.5px solid #0000;height:0;width:0}.av2-virtualized-matrix .av2-wheel-scroller .triangle-right{border-bottom:2.5px solid #0000;border-left:5px solid red;border-top:2.5px solid #0000;height:0;width:0}.av2-virtualized-matrix .av2-data{inset:0;position:absolute}.resize-sensor-holder{left:0;max-width:100%;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.resize-sensor-holder,.vertical-scrollbar-holder{bottom:0;position:absolute;right:0;top:0}.vertical-scrollbar-holder .vertical-scrollbar{background-color:#00000080;border-radius:4px;position:absolute}.vertical-scrollbar-holder .vertical-scrollbar:hover{background-color:#0009}.vertical-scrollbar-holder .vertical-scrollbar:active{background-color:#000c}.vertical-scrollbar-fullpage-drag{bottom:0;left:0;position:fixed;right:0;top:0}.horizontal-scrollbar-holder{bottom:0;left:0;position:absolute;right:0}.horizontal-scrollbar-holder .horizontal-scrollbar{background-color:#00000080;border-radius:4px;position:absolute}.horizontal-scrollbar-holder .horizontal-scrollbar:hover{background-color:#0009}.horizontal-scrollbar-holder .horizontal-scrollbar:active{background-color:#000c}.horizontal-scrollbar-fullpage-drag{bottom:0;left:0;position:fixed;right:0;top:0}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#3c0!important;color:#000!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#3c0;background-color:#ccf2bf;color:#3c0}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#c00!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#c00;background-color:#f2bfbf;color:#c00}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:#60c!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:#60c;background-color:#d9bff2;color:#60c}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:#03f!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:#03f;background-color:#bfccff;color:#03f}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#ff0!important;color:#000!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#ff0;background-color:#ffffbf;color:#ff0}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#60c!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#60c;background-color:#d9bff2;color:#60c}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:#03f!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:#03f;background-color:#bfccff;color:#03f}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#3c0!important;color:#000!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#3c0;background-color:#ccf2bf;color:#3c0}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#090!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#090;background-color:#bfe6bf;color:#090}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#3c0!important;color:#000!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#3c0;background-color:#ccf2bf;color:#3c0}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#3c0!important;color:#000!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#3c0;background-color:#ccf2bf;color:#3c0}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#c00!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#c00;background-color:#f2bfbf;color:#c00}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#3c0!important;color:#000!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#3c0;background-color:#ccf2bf;color:#3c0}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#090!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#090;background-color:#bfe6bf;color:#090}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#3c0!important;color:#000!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#3c0;background-color:#ccf2bf;color:#3c0}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:#09f!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:#09f;background-color:#bfe6ff;color:#09f}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#09f!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#09f;background-color:#bfe6ff;color:#09f}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#090!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#090;background-color:#bfe6bf;color:#090}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#090!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#090;background-color:#bfe6bf;color:#090}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#3c0!important;color:#000!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#3c0;background-color:#ccf2bf;color:#3c0}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#00a35c!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#00a35c;background-color:#bfe8d6;color:#00a35c}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#00fc03!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#00fc03;background-color:#bffec0;color:#00fc03}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:#00eb14!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:#00eb14;background-color:#bffac4;color:#00eb14}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:#00eb14!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:#00eb14;background-color:#bffac4;color:#00eb14}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:blue!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:blue;background-color:#bfbfff;color:blue}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#00f10e!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#00f10e;background-color:#bffcc3;color:#00f10e}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:#00f10e!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:#00f10e;background-color:#bffcc3;color:#00f10e}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#009d62!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#009d62;background-color:#bfe7d8;color:#009d62}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#00d52a!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#00d52a;background-color:#bff5ca;color:#00d52a}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#0054ab!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#0054ab;background-color:#bfd4ea;color:#0054ab}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#007b84!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#007b84;background-color:#bfdee0;color:#007b84}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#009768!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#009768;background-color:#bfe5d9;color:#009768}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#008778!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#008778;background-color:#bfe1dd;color:#008778}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#00e01f!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#00e01f;background-color:#bff7c7;color:#00e01f}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:#00d52a!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:#00d52a;background-color:#bff5ca;color:#00d52a}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#00db24!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#00db24;background-color:#bff6c8;color:#00db24}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#00a857!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#00a857;background-color:#bfe9d5;color:#00a857}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#00e619!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#00e619;background-color:#bff9c6;color:#00e619}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#005fa0!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#005fa0;background-color:#bfd7e7;color:#005fa0}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#00eb14!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#00eb14;background-color:#bffac4;color:#00eb14}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#00f10e!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#00f10e;background-color:#bffcc3;color:#00f10e}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#bbb!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#bbb;background-color:#eee;color:#bbb}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:gray!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:gray;background-color:#dfdfdf;color:gray}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#ff0!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#ff0;background-color:#ffffbf;color:#ff0}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:brown!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:brown;background-color:#e9caca;color:brown}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:aqua!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:aqua;background-color:#bfffff;color:aqua}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#bbb!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#bbb;background-color:#eee;color:#bbb}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_J,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_J.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_J:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_J.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_J:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_J,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_J.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_J:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_J.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_J:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:aqua!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:aqua;background-color:#bfffff;color:aqua}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#bbb!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#bbb;background-color:#eee;color:#bbb}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#bbb!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#bbb;background-color:#eee;color:#bbb}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_O,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_O.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_O:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_O.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_O:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_O,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_O.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_O:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_O.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_O:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:brown!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:brown;background-color:#e9caca;color:brown}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:aqua!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:aqua;background-color:#bfffff;color:aqua}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_U,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_U.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_U.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_U:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_U,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_U.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_U.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_U:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#bbb!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#bbb;background-color:#eee;color:#bbb}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:gray!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:gray;background-color:#dfdfdf;color:gray}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#80a0f0!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#80a0f0;background-color:#dfe7fb;color:#80a0f0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#f01505!important;color:#fff!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#f01505;background-color:#fbc5c1;color:#f01505}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:#c048c0!important;color:#fff!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:#c048c0;background-color:#efd1ef;color:#c048c0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#f08080!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#f08080;background-color:#fbdfdf;color:#f08080}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:#c048c0!important;color:#fff!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:#c048c0;background-color:#efd1ef;color:#c048c0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#f09048!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#f09048;background-color:#fbe3d1;color:#f09048}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#15a4a4!important;color:#fff!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#15a4a4;background-color:#c5e8e8;color:#15a4a4}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#80a0f0!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#80a0f0;background-color:#dfe7fb;color:#80a0f0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#80a0f0!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#80a0f0;background-color:#dfe7fb;color:#80a0f0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#f01505!important;color:#fff!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#f01505;background-color:#fbc5c1;color:#f01505}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#80a0f0!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#80a0f0;background-color:#dfe7fb;color:#80a0f0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#80a0f0!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#80a0f0;background-color:#dfe7fb;color:#80a0f0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#ff0!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#ff0;background-color:#ffffbf;color:#ff0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#80a0f0!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#80a0f0;background-color:#dfe7fb;color:#80a0f0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#15a4a4!important;color:#fff!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#15a4a4;background-color:#c5e8e8;color:#15a4a4}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#80a0f0!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#80a0f0;background-color:#dfe7fb;color:#80a0f0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#e718e7!important;color:#fff!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#e718e7;background-color:#f9c5f9;color:#e718e7}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#6f906f!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#6f906f;background-color:#dbe3db;color:#6f906f}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:#1be41b!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:#1be41b;background-color:#c6f8c6;color:#1be41b}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:#787!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:#787;background-color:#dde1dd;color:#787}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#23dc23!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#23dc23;background-color:#c8f6c8;color:#23dc23}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#926d92!important;color:#fff!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#926d92;background-color:#e4dbe4;color:#926d92}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#758a75!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#758a75;background-color:#dde2dd;color:#758a75}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#8a758a!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#8a758a;background-color:#e2dde2;color:#8a758a}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#ae51ae!important;color:#fff!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#ae51ae;background-color:#ebd4eb;color:#ae51ae}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#a05fa0!important;color:#fff!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#a05fa0;background-color:#e7d7e7;color:#a05fa0}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#ef10ef!important;color:#fff!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#ef10ef;background-color:#fbc3fb;color:#ef10ef}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#986798!important;color:#fff!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#986798;background-color:#e5d9e5;color:#986798}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:#36c936!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:#36c936;background-color:#cdf2cd;color:#36c936}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#47b847!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#47b847;background-color:#d1edd1;color:#47b847}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#8a758a!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#8a758a;background-color:#e2dde2;color:#8a758a}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#21de21!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#21de21;background-color:#c8f7c8;color:#21de21}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#857a85!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#857a85;background-color:#e1dee1;color:#857a85}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#49b649!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#49b649;background-color:#d2edd2;color:#49b649}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#c936c9!important;color:#fff!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#c936c9;background-color:#f2cdf2;color:#c936c9}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#ff0606!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#ff0606;background-color:#ffc1c1;color:#ff0606}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#ff0606!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#ff0606;background-color:#ffc1c1;color:#ff0606}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#ff4c4c!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#ff4c4c;background-color:#ffd2d2;color:#ff4c4c}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#ff5252!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#ff5252;background-color:#ffd4d4;color:#ff5252}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#f77!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#f77;background-color:#fdd;color:#f77}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#ffa5a5!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#ffa5a5;background-color:#ffe9e9;color:#ffa5a5}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#ffc0c0!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#ffc0c0;background-color:#ffefef;color:#ffc0c0}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#e1e1ff!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#e1e1ff;background-color:#f8f8ff;color:#e1e1ff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#d0d0ff!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#d0d0ff;background-color:#f3f3ff;color:#d0d0ff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#b6b6ff!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#b6b6ff;background-color:#ededff;color:#b6b6ff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:#a5a5ff!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:#a5a5ff;background-color:#e9e9ff;color:#a5a5ff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#9595ff!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#9595ff;background-color:#e5e5ff;color:#9595ff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#8787ff!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#8787ff;background-color:#e1e1ff;color:#8787ff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#6969ff!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#6969ff;background-color:#dadaff;color:#6969ff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:#5959ff!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:#5959ff;background-color:#d6d6ff;color:#5959ff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:#4f4fff!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:#4f4fff;background-color:#d3d3ff;color:#4f4fff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#1d1dff!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#1d1dff;background-color:#c7c7ff;color:#1d1dff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:blue!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:blue;background-color:#bfbfff;color:blue}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:orange!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:orange;background-color:#ffe9bf;color:orange}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:orange!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:orange;background-color:#ffe9bf;color:orange}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_J,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_J.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_J:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_J.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_J:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_J,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_J.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_J:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_J.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_J:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_O,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_O.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_O:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_O.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_O:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_O,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_O.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_O:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_O.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_O:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:orange!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:orange;background-color:#ffe9bf;color:orange}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:orange!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:orange;background-color:#ffe9bf;color:orange}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_U,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_U.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_U.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_U:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_U,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_U.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_U.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_U:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#7d8!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#7d8;background-color:#ddf7e1;color:#7d8}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#9e6!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#9e6;background-color:#e6fbd9;color:#9e6}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:#5b3!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:#5b3;background-color:#d5eecc;color:#5b3}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:#5b3!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:#5b3;background-color:#d5eecc;color:#5b3}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#99f!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#99f;background-color:#e6e6ff;color:#99f}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#7d8!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#7d8;background-color:#ddf7e1;color:#7d8}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#55f!important;color:#fff!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#55f;background-color:#d5d5ff;color:#55f}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#6bf!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#6bf;background-color:#d9eeff;color:#6bf}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_J,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_J.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_J:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_J.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_J:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_J,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_J.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_J:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_J.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_J:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#fc7!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#fc7;background-color:#fff2dd;color:#fc7}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#6bf!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#6bf;background-color:#d9eeff;color:#6bf}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#6bf!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#6bf;background-color:#d9eeff;color:#6bf}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:#5b3!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:#5b3;background-color:#d5eecc;color:#5b3}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_O,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_O.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_O:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_O.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_O:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_O,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_O.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_O:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_O.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_O:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#eaa!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#eaa;background-color:#fbeaea;color:#eaa}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#5b3!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#5b3;background-color:#d5eecc;color:#5b3}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#fc7!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#fc7;background-color:#fff2dd;color:#fc7}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:#f45!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:#f45;background-color:#ffd0d5;color:#f45}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#f45!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#f45;background-color:#ffd0d5;color:#f45}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_U,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_U.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_U.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_U:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_U,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_U.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_U.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_U:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#6bf!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#6bf;background-color:#d9eeff;color:#6bf}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#99f!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#99f;background-color:#e6e6ff;color:#99f}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#99f!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#99f;background-color:#e6e6ff;color:#99f}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#5858a7!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#5858a7;background-color:#d5d5e9;color:#5858a7}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#6b6b94!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#6b6b94;background-color:#dadae4;color:#6b6b94}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:#64649b!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:#64649b;background-color:#d8d8e6;color:#64649b}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:#2121de!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:#2121de;background-color:#c8c8f7;color:#2121de}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#9d9d62!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#9d9d62;background-color:#e7e7d8;color:#9d9d62}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#8c8c73!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#8c8c73;background-color:#e2e2dc;color:#8c8c73}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:blue!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:blue;background-color:#bfbfff;color:blue}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#4949b6!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#4949b6;background-color:#d2d2ed;color:#4949b6}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#60609f!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#60609f;background-color:#d7d7e7;color:#60609f}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#ecec13!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#ecec13;background-color:#fafac4;color:#ecec13}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#b2b24d!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#b2b24d;background-color:#ececd3;color:#b2b24d}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#4747b8!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#4747b8;background-color:#d1d1ed;color:#4747b8}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#82827d!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#82827d;background-color:#e0e0df;color:#82827d}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#c2c23d!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#c2c23d;background-color:#f0f0cf;color:#c2c23d}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#2323dc!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#2323dc;background-color:#c8c8f6;color:#2323dc}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:#4949b6!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:#4949b6;background-color:#d2d2ed;color:#4949b6}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#9d9d62!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#9d9d62;background-color:#e7e7d8;color:#9d9d62}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#c0c03f!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#c0c03f;background-color:#efefcf;color:#c0c03f}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#d3d32c!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#d3d32c;background-color:#f4f4ca;color:#d3d32c}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#ff0!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#ff0;background-color:#ffffbf;color:#ff0}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#4343bc!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#4343bc;background-color:#d0d0ee;color:#4343bc}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#4747b8!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#4747b8;background-color:#d1d1ed;color:#4747b8}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#cf0!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#cf0;background-color:#f2ffbf;color:#cf0}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:blue!important;color:#fff!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:blue;background-color:#bfbfff;color:blue}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:#c0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:#c0f;background-color:#f2bfff;color:#c0f}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#ff0!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#ff0;background-color:#ffffbf;color:#ff0}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#f0c!important;color:#fff!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#f0c;background-color:#ffbff2;color:#f0c}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:#f06!important;color:#fff!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:#f06;background-color:#ffbfd9;color:#f06}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#f90!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#f90;background-color:#ffe6bf;color:#f90}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#06f!important;color:#fff!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#06f;background-color:#bfd9ff;color:#06f}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#6f0!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#6f0;background-color:#d9ffbf;color:#6f0}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#3f0!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#3f0;background-color:#ccffbf;color:#3f0}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#60f!important;color:#fff!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#60f;background-color:#d9bfff;color:#60f}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#0f6!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#0f6;background-color:#bfffd9;color:#0f6}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#fc0!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#fc0;background-color:#fff2bf;color:#fc0}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:#f30!important;color:#fff!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:#f30;background-color:#ffccbf;color:#f30}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#f60!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#f60;background-color:#ffd9bf;color:#f60}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#0cf!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#0cf;background-color:#bff2ff;color:#0cf}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#0fc!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#0fc;background-color:#bffff2;color:#0fc}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#9f0!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#9f0;background-color:#e6ffbf;color:#9f0}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#2cd3d3!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#2cd3d3;background-color:#caf4f4;color:#2cd3d3}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#708f8f!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#708f8f;background-color:#dbe3e3;color:#708f8f}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:#e81717!important;color:#fff!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:#e81717;background-color:#f9c5c5;color:#e81717}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#a85757!important;color:#fff!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#a85757;background-color:#e9d5d5;color:#a85757}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#3fc0c0!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#3fc0c0;background-color:#cfefef;color:#3fc0c0}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:#788!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:#788;background-color:#dde1e1;color:#788}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#708f8f!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#708f8f;background-color:#dbe3e3;color:#708f8f}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:aqua!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:aqua;background-color:#bfffff;color:aqua}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#1ce3e3!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#1ce3e3;background-color:#c6f8f8;color:#1ce3e3}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#7e8181!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#7e8181;background-color:#dfe0e0;color:#7e8181}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#1ee1e1!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#1ee1e1;background-color:#c7f8f8;color:#1ee1e1}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#1ee1e1!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#1ee1e1;background-color:#c7f8f8;color:#1ee1e1}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#f60909!important;color:#fff!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#f60909;background-color:#fdc2c2;color:#f60909}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:#e11e1e!important;color:#fff!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:#e11e1e;background-color:#f8c7c7;color:#e11e1e}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#738c8c!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#738c8c;background-color:#dce2e2;color:#738c8c}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#738c8c!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#738c8c;background-color:#dce2e2;color:#738c8c}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#9d6262!important;color:#fff!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#9d6262;background-color:#e7d8d8;color:#9d6262}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#07f8f8!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#07f8f8;background-color:#c1fdfd;color:#07f8f8}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#f30c0c!important;color:#fff!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#f30c0c;background-color:#fcc2c2;color:#f30c0c}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#5ba4a4!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#5ba4a4;background-color:#d6e8e8;color:#5ba4a4}.alignment-aa .resi_line [class^=resi_]{fill:#ccc;color:#ccc}.alignment-aa.letters-only-residues [class^=resi_]{background-color:#0000!important}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#ffafaf!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#ffafaf;background-color:#ffebeb;color:#ffafaf}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#6464ff!important;color:#fff!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#6464ff;background-color:#d8d8ff;color:#6464ff}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#ff0!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#ff0;background-color:#ffffbf;color:#ff0}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#6464ff!important;color:#fff!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#6464ff;background-color:#d8d8ff;color:#6464ff}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#ffafaf!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#ffafaf;background-color:#ffebeb;color:#ffafaf}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#ffafaf!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#ffafaf;background-color:#ffebeb;color:#ffafaf}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#6464ff!important;color:#fff!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#6464ff;background-color:#d8d8ff;color:#6464ff}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#ffafaf!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#ffafaf;background-color:#ffebeb;color:#ffafaf}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#ffc800!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#ffc800;background-color:#fff1bf;color:#ffc800}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#ffc800!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#ffc800;background-color:#fff1bf;color:#ffc800}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#ffc800!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#ffc800;background-color:#fff1bf;color:#ffc800}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#ffafaf!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#ffafaf;background-color:#ffebeb;color:#ffafaf}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-all .resi_A,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_A.c,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query .resi_A.q,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#5050ff!important;color:#fff!important}.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-all .resi_A,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_A.c,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query .resi_A.q,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#5050ff;background-color:#d3d3ff;color:#5050ff}.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-all .resi_C,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_C.c,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query .resi_C.q,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#e00000!important;color:#fff!important}.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-all .resi_C,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_C.c,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query .resi_C.q,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#e00000;background-color:#f7bfbf;color:#e00000}.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-all .resi_G,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_G.c,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query .resi_G.q,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#00c000!important;color:#fff!important}.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-all .resi_G,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_G.c,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query .resi_G.q,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#00c000;background-color:#bfefbf;color:#00c000}.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-all .resi_T,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_T.c,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query .resi_T.q,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#e6e600!important;color:#000!important}.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-all .resi_T,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_T.c,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query .resi_T.q,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#e6e600;background-color:#f9f9bf;color:#e6e600}.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-all .resi_U,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_U.c,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query .resi_U.q,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_U:not(.q){background-color:#c90!important;color:#000!important}.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-all .resi_U,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_U.c,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query .resi_U.q,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_U:not(.q){fill:#c90;background-color:#f2e6bf;color:#c90}.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-all .resi_R,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_R.c,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query .resi_R.q,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#2e8b57!important;color:#fff!important}.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-all .resi_R,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_R.c,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query .resi_R.q,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#2e8b57;background-color:#cbe2d5;color:#2e8b57}.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-all .resi_Y,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query .resi_Y.q,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#ff8c00!important;color:#000!important}.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-all .resi_Y,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query .resi_Y.q,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#ff8c00;background-color:#ffe2bf;color:#ff8c00}.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_A,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_A.c,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_A.q,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#64f73f!important;color:#000!important}.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_A,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_A.c,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_A.q,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#64f73f;background-color:#d8fdcf;color:#64f73f}.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_C,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_C.c,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_C.q,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#ffb340!important;color:#000!important}.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_C,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_C.c,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_C.q,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#ffb340;background-color:#ffeccf;color:#ffb340}.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_G,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_G.c,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_G.q,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#eb413c!important;color:#fff!important}.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_G,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_G.c,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_G.q,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#eb413c;background-color:#fad0ce;color:#eb413c}.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_T,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_T.c,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_T.q,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#3c88ee!important;color:#fff!important}.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_T,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_T.c,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_T.q,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#3c88ee;background-color:#cee1fb;color:#3c88ee}.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_U,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_U.c,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_U.q,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_U:not(.q){background-color:#3c88ee!important;color:#fff!important}.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_U,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_U.c,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_U.q,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_U:not(.q){fill:#3c88ee;background-color:#cee1fb;color:#3c88ee}.alignment-nt .resi_line [class^=resi_]{fill:#ccc;color:#ccc}.alignment-nt.letters-only-residues [class^=resi_]{background-color:#0000!important}.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_A,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_A.c,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_A.q,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#ff83fa!important;color:#000!important}.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_A,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_A.c,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_A.q,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#ff83fa;background-color:#ffe0fe;color:#ff83fa}.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_C,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_C.c,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_C.q,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#40e0d0!important;color:#000!important}.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_C,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_C.c,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_C.q,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#40e0d0;background-color:#cff7f3;color:#40e0d0}.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_G,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_G.c,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_G.q,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#ff83fa!important;color:#000!important}.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_G,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_G.c,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_G.q,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#ff83fa;background-color:#ffe0fe;color:#ff83fa}.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_R,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_R.c,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_R.q,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#ff83fa!important;color:#000!important}.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_R,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_R.c,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_R.q,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#ff83fa;background-color:#ffe0fe;color:#ff83fa}.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_T,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_T.c,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_T.q,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#40e0d0!important;color:#000!important}.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_T,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_T.c,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_T.q,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#40e0d0;background-color:#cff7f3;color:#40e0d0}.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_U,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_U.c,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_U.q,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_U:not(.q){background-color:#40e0d0!important;color:#000!important}.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_U,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_U.c,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_U.q,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_U:not(.q){fill:#40e0d0;background-color:#cff7f3;color:#40e0d0}.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_Y,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_Y.q,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#40e0d0!important;color:#000!important}.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_Y,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_Y.q,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#40e0d0;background-color:#cff7f3;color:#40e0d0}.sequence-logo-holder::-webkit-scrollbar{background:#0000;height:0}.sequence-logo-holder{overflow-x:auto;overflow-y:hidden;position:absolute}.sequence-logo-holder rect.interaction-placeholder{opacity:0}.sequence-logo-holder .sequence-logo-tooltip-container{margin:0;z-index:1002}.sequence-logo-holder .sequence-logo-tooltip-container .logo-tooltip{display:table;font-size:12px;line-height:16px;pointer-events:all;width:auto}.sequence-logo-holder .sequence-logo-tooltip-container .logo-tooltip h1{font-size:13px;margin:0;padding-bottom:4px;text-align:center}.sequence-logo-holder .sequence-logo-tooltip-container .logo-tooltip .row{clear:both;display:table-row;width:auto}.sequence-logo-holder .sequence-logo-tooltip-container .logo-tooltip .col{display:table-column;float:left;line-height:16px;text-align:center;width:60px}.sequence-logo-holder .sequence-logo-tooltip-container .logo-tooltip .col.header{font-weight:700;margin-bottom:5px}.sequence-logo-holder .sequence-logo-tooltip-container .logo-tooltip .legend-square{height:12px;margin-bottom:2px;margin-top:2px;width:12px}.sequence-logo-holder .sequence-logo-tooltip-container .logo-tooltip .name{width:100px}.minimap{display:grid;grid-template-areas:"header" "minimap" "footer";grid-template-rows:10px auto 10px;inset:0;position:absolute;z-index:100}.minimap .minimap-header{font-size:9px;grid-area:header;place-self:center}.minimap .minimap-app-holder{grid-area:minimap;inset:0;position:absolute}.minimap .minimap-app-holder .minimap-canvas-holder{inset:0;position:absolute}.minimap .minimap-app-holder .minimap-canvas-holder canvas{-ms-interpolation-mode:nearest-neighbor;image-rendering:optimizeSpeed;image-rendering:-moz-crisp-edges;image-rendering:-webkit-optimize-contrast;image-rendering:optimize-contrast;image-rendering:pixelated;inset:0;position:absolute}.minimap .minimap-app-holder .minimap-interaction{inset:0;position:absolute}.minimap .minimap-footer{font-size:9px;grid-area:footer;place-self:center}.minimap-dragger{cursor:move;cursor:grab;cursor:-webkit-grab;left:0;position:absolute;right:0}.minimap-full-page-drag-detector{background-color:#fff;cursor:grabbing;cursor:-webkit-grabbing;inset:0;opacity:0;position:fixed;z-index:2001}.barplot::-webkit-scrollbar{background:#0000;height:0}.barplot{bottom:0;left:0;position:absolute;right:0;top:0}.barplot svg .position-container rect.interaction-placeholder,.barplot svg .position-container rect.interaction-placeholder-full{fill-opacity:0;stroke:none}.barplot .barplot-tooltip-holder{margin:0;z-index:1002}.barplot .barplot-tooltip-holder .bar-position-textblock{pointer-events:all}.barplot .barplot-tooltip-holder .bar-position-textblock h1{font-size:14px;margin:0;padding-bottom:4px;text-align:center}.barplot .barplot-tooltip-holder .bar-position-textblock .dataseries-line{font-size:13px;line-height:16px}.barplot .barplot-tooltip-holder .bar-position-textblock .legend-square{display:inline-block;height:8px;margin-right:6px;width:8px}.full-screen-resize-dragger{background-color:#fff;bottom:0;cursor:col-resize;left:0;opacity:0;position:fixed;right:0;top:0;z-index:1800}.full-screen-resize-dragger.horizontal{cursor:col-resize}.full-screen-resize-dragger.vertical{cursor:row-resize}.alignment-viewer-2{align-items:center;display:grid;position:absolute}.alignment-viewer-2 .content{bottom:0;left:0;position:absolute;right:0;top:0}.alignment-viewer-2 .metadata-title{font-size:14px;font-weight:700;position:relative;text-align:right}.alignment-viewer-2 .minimap-content{bottom:0;left:0;position:absolute;right:0;top:0}.alignment-viewer-2 .horizontal-resizer,.alignment-viewer-2 .vertical-resizer{background-color:#f2f2f2}.alignment-viewer-2 .horizontal-resizer{cursor:ew-resize}.alignment-viewer-2 .vertical-resizer{cursor:ns-resize}.alignment-viewer-2 .horizontal-resizer.hovered,.alignment-viewer-2 .vertical-resizer.hovered{background-color:#09f;border-left-color:#09f;border-right-color:#09f;opacity:.2}.alignment-viewer-2 .horizontal-resizer.resizing,.alignment-viewer-2 .vertical-resizer.resizing{background-color:#09f;border-left-color:#09f;border-right-color:#09f}.alignment-viewer-2 .horizontal-resizer{height:100%}.alignment-viewer-2 .vertical-resizer{height:100%;width:100%}.background-behind-search-box{background-color:#fff;inset:0;opacity:.75;position:fixed;transition:opacity .2s ease-in,visibility .2s ease-in;transition:opacity .2s ease-out,visibility 200msms ease-out;visibility:visible;z-index:10000}.search-box-grid{bottom:50px;display:grid;grid-template-areas:"search-area";grid-template-columns:auto;grid-template-rows:1fr;left:100px;position:absolute;right:100px;top:0;z-index:10001}.search-box-grid .search-box-contents{background-color:#fff;border-radius:10px;box-shadow:0 0 10px #00000080;display:grid;font-size:12px;grid-area:search-area;grid-template-areas:". . ." ". search-bar ." ". search-options-bar ." ". search-bar-results-separator ." ". search-results ." ". . .";grid-template-columns:5px 9fr 5px;grid-template-rows:10px 20px 30px 20px 1fr 5px;overflow:hidden;position:relative}.search-box-grid .search-box-contents .search-options-bar{grid-column-gap:5px;display:grid;grid-area:search-options-bar;grid-auto-flow:column;place-items:center;place-self:center}.search-box-grid .search-box-contents .search-options-bar input,.search-box-grid .search-box-contents .search-options-bar label,.search-box-grid .search-box-contents .search-options-bar select{display:inline-block;margin:0}.search-box-grid .search-box-contents .search-options-bar .stepper{display:inline-grid;grid-auto-flow:column;padding:0 12px 0 0;place-items:center}.search-box-grid .search-box-contents .search-options-bar .stepper span{font-size:15px;font-weight:bolder;line-height:20px;padding:0 8px}.search-box-grid .search-box-contents .search-options-bar .stepper button{background-color:#0000;border:1px solid #646464;border-radius:50%;color:#646464;display:inline-block;font-size:15px;font-weight:900;height:20px;line-height:20px;margin:0;padding:0;width:20px}.search-box-grid .search-box-contents .search-options-bar .stepper button:disabled,.search-box-grid .search-box-contents .search-options-bar .stepper button:disabled:hover{background-color:#fff;opacity:.4}.search-box-grid .search-box-contents .search-options-bar .stepper button:hover{background-color:#f1f1f1}.search-box-grid .search-box-contents .search-bar{align-self:start;display:grid;grid-area:search-bar;grid-template-areas:"search-input-label search-input matches";grid-template-columns:1fr 3fr 2fr;grid-template-rows:100%;justify-self:stretch}.search-box-grid .search-box-contents .search-bar label{align-self:center;grid-area:search-input-label;justify-self:end}.search-box-grid .search-box-contents .search-bar input{grid-area:search-input;width:100%}.search-box-grid .search-box-contents .search-bar span{align-self:center;grid-area:matches;justify-self:center}.search-box-grid .search-box-contents .search-bar-results-separator{border-top:2px solid #c2c2c2;grid-area:search-bar-results-separator;margin-top:10px}.search-box-grid .search-box-contents .search-results{grid-area:search-results;overflow:scroll;position:relative}.search-box-grid .search-box-contents button.button-link.close{background:none!important;border:none;color:#069;cursor:pointer;padding:0;position:absolute;right:8px;text-decoration:underline;top:8px}.consensus .av2-blocksandletters::-webkit-scrollbar,.query .av2-blocksandletters::-webkit-scrollbar{background:#0000;height:0}.av2-blocksandletters .av2-blocks.canvas-holder.hidden canvas{display:none}.av2-blocksandletters{inset:0;overflow-x:hidden;overflow-y:hidden;position:absolute}.av2-blocks.canvas-holder{inset:0;overflow:hidden;position:absolute}.av2-blocks.canvas-holder .loader-holder{display:grid;inset:0;place-items:center;position:absolute}.av2-blocks.canvas-holder .loader-holder .loader{animation:spin 2s linear infinite;border:3px solid #f3f3f3;border-radius:50%;border-top-color:#3498db;height:48px;position:relative;width:48px}.av2-blocks.canvas-holder canvas{-ms-interpolation-mode:nearest-neighbor;image-rendering:optimizeSpeed;image-rendering:-moz-crisp-edges;image-rendering:-webkit-optimize-contrast;image-rendering:optimize-contrast;image-rendering:pixelated}.av2-letters.sequence-text-holder{position:absolute;white-space:nowrap}.av2-letters.sequence-text-holder .letters-with-specific-color{left:0;pointer-events:none;position:absolute;top:0;-webkit-user-select:none;user-select:none}.hidden-residues-for-copy-paste{color:#0000;left:0;overflow-x:hidden;overflow-y:hidden;pointer-events:all;position:absolute;top:0;white-space:nowrap}.av2-spreadsheet{display:grid;grid-template-areas:"pinned-table unpinned-table";grid-template-rows:auto;inset:0;position:absolute}.av2-spreadsheet .horizontal-resizer{background-color:#f2f2f2;cursor:ew-resize;height:100%;margin:0;padding:0}.av2-spreadsheet .pinned-table-holder{grid-area:pinned-table;z-index:1}.av2-spreadsheet .unpinned-table-holder{grid-area:unpinned-table}.av2-spreadsheet .pinned-table-holder,.av2-spreadsheet .unpinned-table-holder{position:relative}.av2-spreadsheet .pinned-table-holder .pinned-table.content,.av2-spreadsheet .pinned-table-holder .pinned-table.header,.av2-spreadsheet .unpinned-table-holder .pinned-table.content,.av2-spreadsheet .unpinned-table-holder .pinned-table.header{border:1px solid #686868}.av2-spreadsheet .pinned-table-holder .pinned-table.header,.av2-spreadsheet .pinned-table-holder .unpinned-table.header,.av2-spreadsheet .unpinned-table-holder .pinned-table.header,.av2-spreadsheet .unpinned-table-holder .unpinned-table.header{background-color:#f4f4f4;left:0;right:0}.av2-spreadsheet .pinned-table-holder .content-holder,.av2-spreadsheet .unpinned-table-holder .content-holder{inset:0;overflow-y:clip;position:absolute}.av2-spreadsheet .pinned-table-holder .pinned-table,.av2-spreadsheet .pinned-table-holder .unpinned-table,.av2-spreadsheet .unpinned-table-holder .pinned-table,.av2-spreadsheet .unpinned-table-holder .unpinned-table{background-color:#fff;display:grid;overflow-x:hidden;overflow-y:hidden;position:absolute}.av2-spreadsheet .pinned-table-holder .pinned-table .table-column,.av2-spreadsheet .pinned-table-holder .unpinned-table .table-column,.av2-spreadsheet .unpinned-table-holder .pinned-table .table-column,.av2-spreadsheet .unpinned-table-holder .unpinned-table .table-column{display:grid}.av2-spreadsheet .pinned-table-holder .pinned-table .table-column>*,.av2-spreadsheet .pinned-table-holder .unpinned-table .table-column>*,.av2-spreadsheet .unpinned-table-holder .pinned-table .table-column>*,.av2-spreadsheet .unpinned-table-holder .unpinned-table .table-column>*{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-spreadsheet .pinned-table-holder .pinned-table .column-header,.av2-spreadsheet .pinned-table-holder .unpinned-table .column-header,.av2-spreadsheet .unpinned-table-holder .pinned-table .column-header,.av2-spreadsheet .unpinned-table-holder .unpinned-table .column-header{font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.settings-holder{display:grid;grid-template-areas:". . ." ". settings ." ". . .";grid-template-columns:1fr 1.5afr 1fr;grid-template-rows:1fr 1fr 1fr;inset:0;place-items:center;position:fixed;z-index:1900}.settings-holder .outside-settings-box{background-color:#fff;inset:0;opacity:.5;position:absolute;transition:opacity .2s ease-in,visibility .2s ease-in;transition:opacity .2s ease-out,visibility 200msms ease-out;visibility:visible;z-index:1}.settings-holder .settings{grid-row-gap:10px;background-color:#fff;border-radius:10px;box-shadow:0 0 10px #00000080;display:grid;grid-area:settings;grid-template-areas:". settings-header ." ". settings-content .";grid-template-columns:10px auto 10px;grid-template-rows:30px auto;justify-self:stretch;padding:10px;row-gap:10px;z-index:2}.settings-holder .settings-header{border-bottom:2px solid #c2c2c2;display:grid;grid-area:settings-header;grid-template-areas:"title close-btn";grid-template-columns:1fr auto;grid-template-rows:auto;position:relative}.settings-holder .settings-header h2{align-self:stretch;font-size:20px;grid-area:title;margin:0}.settings-holder .settings-header button.button-link.close{background:none!important;border:none;cursor:pointer;grid-area:close-btn;padding:0}.settings-holder .load-error{border-top:2px solid #c2c2c2;color:red;font-size:13px}.settings-holder .load-error h3{margin:0;padding-top:5px;text-align:center}.settings-holder .load-error ul{margin:5px 0 0}.settings-holder .settings-content{grid-area:settings-content}.settings-holder .settings-content h3.subheader{color:#b5b5b5;font-size:15px;margin:0;padding:0}.settings-holder .settings-content .options-box{align-items:center;display:grid;font-size:13px;grid-auto-rows:auto;grid-template-columns:200px 1fr;padding-bottom:8px;padding-left:10px;padding-top:4px}.settings-holder .settings-content .options-box label{justify-self:end;padding:2px 5px;text-align:end}.settings-holder .settings-content .options-box>div{padding:4px 0}.settings-holder .settings-content .options-box .file-upload-input,.settings-holder .settings-content .options-box .stepper-holder,.settings-holder .settings-content .options-box input[type=checkbox]{display:grid;place-items:center;width:30%}.settings-holder .settings-content .options-box .stepper-holder .stepper{grid-auto-flow:column}.settings-holder .settings-content .options-box .stepper-holder .stepper span{font-size:15px;font-weight:bolder;line-height:20px;padding:0 8px}.settings-holder .settings-content .options-box .stepper-holder .stepper button{background-color:#0000;border:1px solid #646464;border-radius:50%;color:#646464;display:inline-block;font-size:15px;font-weight:900;height:20px;line-height:20px;margin:0;padding:0;width:20px}.settings-holder .settings-content .options-box .stepper-holder .stepper button:disabled,.settings-holder .settings-content .options-box .stepper-holder .stepper button:disabled:hover{background-color:#fff;opacity:.4}.settings-holder .settings-content .options-box .stepper-holder .stepper button:hover{background-color:#f1f1f1}button.button-link{background:none!important;border:none;color:#069;cursor:pointer;text-decoration:underline}.hide{display:none}.loader{animation:spin 2s linear infinite;border:3px solid #f3f3f3;border-radius:50%;border-top-color:#3498db;bottom:0;height:14px;position:absolute;right:0;width:14px}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.av2-hidden-file-input{display:none}.av2-fileloader-fullpage{background-color:#fff;display:grid;grid-template-areas:". . ." ". dropzone ." ". . .";grid-template-columns:100px auto 100px;grid-template-rows:100px auto 100px;inset:0;margin:0;opacity:.9;place-items:center;position:fixed;z-index:2000}.av2-fileloader-fullpage .av2-fileloader-dropbox{border:4px dashed #000;display:grid;font-size:40px;font-weight:600;grid-area:dropzone;height:100%;place-content:center;width:100%} -/*# sourceMappingURL=main.d2adac17.css.map*/ \ No newline at end of file +body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}body,html{height:100%;overflow:hidden;position:relative}body,html{overscroll-behavior-x:none}body{overscroll-behavior-y:none}#root{display:flex;flex-direction:column;height:100vh}#root .fullscreen-loading-indicator.hidden{display:none}#root .fullscreen-loading-indicator{background-color:#fff;display:grid;inset:0;opacity:.8;place-items:center;position:fixed;z-index:1901}#root .fullscreen-loading-indicator .loader{animation:spin 2s linear infinite;border:3px solid #f3f3f3;border-radius:50%;border-top-color:#3498db;height:48px;position:relative;width:48px}#root .fullscreen-loading-indicator .spinner1{display:grid;grid-auto-flow:column;height:24px;place-items:center;position:relative;width:24px}#root .fullscreen-loading-indicator .spinner1 .circleHolder{display:grid;height:25px;place-items:center;width:25px}#root .fullscreen-loading-indicator .spinner1 .circleHolder .circle1,#root .fullscreen-loading-indicator .spinner1 .circleHolder .circle2,#root .fullscreen-loading-indicator .spinner1 .circleHolder .circle3{background-color:#000;border-radius:50%;display:inline-block;height:25px;width:25px}#root .fullscreen-loading-indicator .spinner1 .circleHolder .spinner_b2T7z{animation:spinner_xe7Qz .8s linear infinite}#root .fullscreen-loading-indicator .spinner1 .circleHolder .spinner_YRVVz{animation-delay:-.65s}#root .fullscreen-loading-indicator .spinner1 .circleHolder .spinner_c9oYz{animation-delay:-.5s}@keyframes spinner_xe7Qz{to{height:25px;width:25px}50%{height:0;width:0}}#root .fullscreen-loading-indicator .spinner_b2T7{animation:spinner_xe7Q .8s linear infinite}#root .fullscreen-loading-indicator .spinner_YRVV{animation-delay:-.65s}#root .fullscreen-loading-indicator .spinner_c9oY{animation-delay:-.5s}@keyframes spinner_xe7Q{93.75%,to{r:3px}46.875%{r:.2px}}#root .fullscreen-loading-indicator .spinner_zWVm{animation:spinner_5QiW 1.2s linear infinite,spinner_PnZo 1.2s linear infinite}#root .fullscreen-loading-indicator .spinner_gfyD{animation:spinner_5QiW 1.2s linear infinite,spinner_4j7o 1.2s linear infinite;animation-delay:.1s}#root .fullscreen-loading-indicator .spinner_T5JJ{animation:spinner_5QiW 1.2s linear infinite,spinner_fLK4 1.2s linear infinite;animation-delay:.1s}#root .fullscreen-loading-indicator .spinner_E3Wz{animation:spinner_5QiW 1.2s linear infinite,spinner_tDji 1.2s linear infinite;animation-delay:.2s}#root .fullscreen-loading-indicator .spinner_g2vs{animation:spinner_5QiW 1.2s linear infinite,spinner_CMiT 1.2s linear infinite;animation-delay:.2s}#root .fullscreen-loading-indicator .spinner_ctYB{animation:spinner_5QiW 1.2s linear infinite,spinner_cHKR 1.2s linear infinite;animation-delay:.2s}#root .fullscreen-loading-indicator .spinner_BDNj{animation:spinner_5QiW 1.2s linear infinite,spinner_Re6e 1.2s linear infinite;animation-delay:.3s}#root .fullscreen-loading-indicator .spinner_rCw3{animation:spinner_5QiW 1.2s linear infinite,spinner_EJmJ 1.2s linear infinite;animation-delay:.3s}#root .fullscreen-loading-indicator .spinner_Rszm{animation:spinner_5QiW 1.2s linear infinite,spinner_YJOP 1.2s linear infinite;animation-delay:.4s}@keyframes spinner_5QiW{0%,50%{height:7.33px;width:7.33px}25%{height:1.33px;width:1.33px}}@keyframes spinner_PnZo{0%,50%{x:1px;y:1px}25%{x:4px;y:4px}}@keyframes spinner_4j7o{0%,50%{x:8.33px;y:1px}25%{x:11.33px;y:4px}}@keyframes spinner_fLK4{0%,50%{x:1px;y:8.33px}25%{x:4px;y:11.33px}}@keyframes spinner_tDji{0%,50%{x:15.66px;y:1px}25%{x:18.66px;y:4px}}@keyframes spinner_CMiT{0%,50%{x:8.33px;y:8.33px}25%{x:11.33px;y:11.33px}}@keyframes spinner_cHKR{0%,50%{x:1px;y:15.66px}25%{x:4px;y:18.66px}}@keyframes spinner_Re6e{0%,50%{x:15.66px;y:8.33px}25%{x:18.66px;y:11.33px}}@keyframes spinner_EJmJ{0%,50%{x:8.33px;y:15.66px}25%{x:11.33px;y:18.66px}}@keyframes spinner_YJOP{0%,50%{x:15.66px;y:15.66px}25%{x:18.66px;y:18.66px}}#root .app-header{display:flex;justify-content:center;padding:0;position:relative}#root .app-header .settings-box{background-color:#fff;font-size:11px;height:30px;padding:8px 8px 16px;width:100%}#root .app-header .settings-box .settings-header{align-items:center;border-bottom:1px solid #e6e6e6;display:flex;flex-direction:row;gap:10px;justify-content:space-between;padding-bottom:8px}#root .app-header .settings-box .settings-header h2{flex-grow:1;font-size:2em;margin:0;order:1}#root .app-header .settings-box .settings-header .settings-alignment-description{display:flex;flex-direction:column;flex-grow:50;font-size:10px;order:2}#root .app-header .settings-box .settings-header .settings-alignment-description h3,#root .app-header .settings-box .settings-header .settings-alignment-description h4{margin:0}#root .app-header .settings-box .settings-header a,#root .app-header .settings-box .settings-header button{border:0;font-size:0;margin:0;order:7;padding:0 2px}#root .app-header .settings-box .settings-header a.github-link{font-size:0;order:3}#root .app-header .settings-box .settings-header button.download{order:4}#root .app-header .settings-box .settings-header button.search-button{order:5}#root .app-header .settings-box .settings-header button.settings-toggle{order:6}#root .app-content{flex:1 1;position:relative}.av2-positional-axis{bottom:0;left:0;overflow-x:hidden;overflow-y:hidden;position:absolute;right:0;top:0;white-space:nowrap}.av2-positional-axis::-webkit-scrollbar{background:#0000;height:0}.av2-virtualized-matrix{inset:0;position:absolute}.av2-virtualized-matrix .scrolled-indicator{inset:0;pointer-events:none;position:absolute;z-index:1001}.av2-virtualized-matrix .av2-wheel-scroller{cursor:default;inset:0;position:absolute}.av2-virtualized-matrix .av2-wheel-scroller .hover-tracker-x,.av2-virtualized-matrix .av2-wheel-scroller .hover-tracker-y{pointer-events:none;position:fixed;z-index:1000}.av2-virtualized-matrix .av2-wheel-scroller .triangle-up{border-bottom:5px solid red;border-left:2.5px solid #0000;border-right:2.5px solid #0000;height:0;width:0}.av2-virtualized-matrix .av2-wheel-scroller .triangle-down{border-left:2.5px solid #0000;border-right:2.5px solid #0000;border-top:5px solid red;height:0;width:0}.av2-virtualized-matrix .av2-wheel-scroller .triangle-left{border-bottom:2.5px solid #0000;border-right:5px solid red;border-top:2.5px solid #0000;height:0;width:0}.av2-virtualized-matrix .av2-wheel-scroller .triangle-right{border-bottom:2.5px solid #0000;border-left:5px solid red;border-top:2.5px solid #0000;height:0;width:0}.av2-virtualized-matrix .av2-data{inset:0;position:absolute}.resize-sensor-holder{left:0;max-width:100%;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.resize-sensor-holder,.vertical-scrollbar-holder{bottom:0;position:absolute;right:0;top:0}.vertical-scrollbar-holder .vertical-scrollbar{background-color:#00000080;border-radius:4px;position:absolute}.vertical-scrollbar-holder .vertical-scrollbar:hover{background-color:#0009}.vertical-scrollbar-holder .vertical-scrollbar:active{background-color:#000c}.vertical-scrollbar-fullpage-drag{bottom:0;left:0;position:fixed;right:0;top:0}.horizontal-scrollbar-holder{bottom:0;left:0;position:absolute;right:0}.horizontal-scrollbar-holder .horizontal-scrollbar{background-color:#00000080;border-radius:4px;position:absolute}.horizontal-scrollbar-holder .horizontal-scrollbar:hover{background-color:#0009}.horizontal-scrollbar-holder .horizontal-scrollbar:active{background-color:#000c}.horizontal-scrollbar-fullpage-drag{bottom:0;left:0;position:fixed;right:0;top:0}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#3c0!important;color:#000!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#3c0;background-color:#ccf2bf;color:#3c0}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#c00!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#c00;background-color:#f2bfbf;color:#c00}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:#60c!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:#60c;background-color:#d9bff2;color:#60c}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:#03f!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:#03f;background-color:#bfccff;color:#03f}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#ff0!important;color:#000!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#ff0;background-color:#ffffbf;color:#ff0}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#60c!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#60c;background-color:#d9bff2;color:#60c}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:#03f!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:#03f;background-color:#bfccff;color:#03f}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#3c0!important;color:#000!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#3c0;background-color:#ccf2bf;color:#3c0}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#090!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#090;background-color:#bfe6bf;color:#090}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#3c0!important;color:#000!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#3c0;background-color:#ccf2bf;color:#3c0}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#3c0!important;color:#000!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#3c0;background-color:#ccf2bf;color:#3c0}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#c00!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#c00;background-color:#f2bfbf;color:#c00}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#3c0!important;color:#000!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#3c0;background-color:#ccf2bf;color:#3c0}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#090!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#090;background-color:#bfe6bf;color:#090}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#3c0!important;color:#000!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#3c0;background-color:#ccf2bf;color:#3c0}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:#09f!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:#09f;background-color:#bfe6ff;color:#09f}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#09f!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#09f;background-color:#bfe6ff;color:#09f}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#090!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#090;background-color:#bfe6bf;color:#090}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#090!important;color:#fff!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#090;background-color:#bfe6bf;color:#090}.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#3c0!important;color:#000!important}.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-default.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#3c0;background-color:#ccf2bf;color:#3c0}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#00a35c!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#00a35c;background-color:#bfe8d6;color:#00a35c}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#00fc03!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#00fc03;background-color:#bffec0;color:#00fc03}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:#00eb14!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:#00eb14;background-color:#bffac4;color:#00eb14}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:#00eb14!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:#00eb14;background-color:#bffac4;color:#00eb14}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:blue!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:blue;background-color:#bfbfff;color:blue}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#00f10e!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#00f10e;background-color:#bffcc3;color:#00f10e}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:#00f10e!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:#00f10e;background-color:#bffcc3;color:#00f10e}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#009d62!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#009d62;background-color:#bfe7d8;color:#009d62}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#00d52a!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#00d52a;background-color:#bff5ca;color:#00d52a}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#0054ab!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#0054ab;background-color:#bfd4ea;color:#0054ab}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#007b84!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#007b84;background-color:#bfdee0;color:#007b84}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#009768!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#009768;background-color:#bfe5d9;color:#009768}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#008778!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#008778;background-color:#bfe1dd;color:#008778}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#00e01f!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#00e01f;background-color:#bff7c7;color:#00e01f}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:#00d52a!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:#00d52a;background-color:#bff5ca;color:#00d52a}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#00db24!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#00db24;background-color:#bff6c8;color:#00db24}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#00a857!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#00a857;background-color:#bfe9d5;color:#00a857}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#00e619!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#00e619;background-color:#bff9c6;color:#00e619}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#005fa0!important;color:#fff!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#005fa0;background-color:#bfd7e7;color:#005fa0}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#00eb14!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#00eb14;background-color:#bffac4;color:#00eb14}.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#00f10e!important;color:#000!important}.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-buried.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#00f10e;background-color:#bffcc3;color:#00f10e}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#bbb!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#bbb;background-color:#eee;color:#bbb}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:gray!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:gray;background-color:#dfdfdf;color:gray}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#ff0!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#ff0;background-color:#ffffbf;color:#ff0}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:brown!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:brown;background-color:#e9caca;color:brown}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:aqua!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:aqua;background-color:#bfffff;color:aqua}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#bbb!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#bbb;background-color:#eee;color:#bbb}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_J,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_J.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_J:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_J.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_J:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_J,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_J.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_J:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_J.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_J:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:aqua!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:aqua;background-color:#bfffff;color:aqua}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#bbb!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#bbb;background-color:#eee;color:#bbb}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#bbb!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#bbb;background-color:#eee;color:#bbb}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_O,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_O.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_O:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_O.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_O:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_O,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_O.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_O:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_O.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_O:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:brown!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:brown;background-color:#e9caca;color:brown}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:aqua!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:aqua;background-color:#bfffff;color:aqua}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_U,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_U.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_U.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_U:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_U,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_U.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_U.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_U:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#bbb!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#bbb;background-color:#eee;color:#bbb}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:gray!important;color:#000!important}.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-cinema.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:gray;background-color:#dfdfdf;color:gray}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#80a0f0!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#80a0f0;background-color:#dfe7fb;color:#80a0f0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#f01505!important;color:#fff!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#f01505;background-color:#fbc5c1;color:#f01505}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:#c048c0!important;color:#fff!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:#c048c0;background-color:#efd1ef;color:#c048c0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#f08080!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#f08080;background-color:#fbdfdf;color:#f08080}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:#c048c0!important;color:#fff!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:#c048c0;background-color:#efd1ef;color:#c048c0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#f09048!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#f09048;background-color:#fbe3d1;color:#f09048}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#15a4a4!important;color:#fff!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#15a4a4;background-color:#c5e8e8;color:#15a4a4}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#80a0f0!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#80a0f0;background-color:#dfe7fb;color:#80a0f0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#80a0f0!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#80a0f0;background-color:#dfe7fb;color:#80a0f0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#f01505!important;color:#fff!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#f01505;background-color:#fbc5c1;color:#f01505}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#80a0f0!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#80a0f0;background-color:#dfe7fb;color:#80a0f0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#80a0f0!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#80a0f0;background-color:#dfe7fb;color:#80a0f0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#ff0!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#ff0;background-color:#ffffbf;color:#ff0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#80a0f0!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#80a0f0;background-color:#dfe7fb;color:#80a0f0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#15a4a4!important;color:#fff!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#15a4a4;background-color:#c5e8e8;color:#15a4a4}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#80a0f0!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#80a0f0;background-color:#dfe7fb;color:#80a0f0}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-clustal.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#e718e7!important;color:#fff!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#e718e7;background-color:#f9c5f9;color:#e718e7}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#6f906f!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#6f906f;background-color:#dbe3db;color:#6f906f}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:#1be41b!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:#1be41b;background-color:#c6f8c6;color:#1be41b}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:#787!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:#787;background-color:#dde1dd;color:#787}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#23dc23!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#23dc23;background-color:#c8f6c8;color:#23dc23}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#926d92!important;color:#fff!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#926d92;background-color:#e4dbe4;color:#926d92}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#758a75!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#758a75;background-color:#dde2dd;color:#758a75}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#8a758a!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#8a758a;background-color:#e2dde2;color:#8a758a}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#ae51ae!important;color:#fff!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#ae51ae;background-color:#ebd4eb;color:#ae51ae}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#a05fa0!important;color:#fff!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#a05fa0;background-color:#e7d7e7;color:#a05fa0}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#ef10ef!important;color:#fff!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#ef10ef;background-color:#fbc3fb;color:#ef10ef}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#986798!important;color:#fff!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#986798;background-color:#e5d9e5;color:#986798}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:#36c936!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:#36c936;background-color:#cdf2cd;color:#36c936}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#47b847!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#47b847;background-color:#d1edd1;color:#47b847}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#8a758a!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#8a758a;background-color:#e2dde2;color:#8a758a}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#21de21!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#21de21;background-color:#c8f7c8;color:#21de21}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#857a85!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#857a85;background-color:#e1dee1;color:#857a85}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#49b649!important;color:#000!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#49b649;background-color:#d2edd2;color:#49b649}.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#c936c9!important;color:#fff!important}.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-helix.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#c936c9;background-color:#f2cdf2;color:#c936c9}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#ff0606!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#ff0606;background-color:#ffc1c1;color:#ff0606}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#ff0606!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#ff0606;background-color:#ffc1c1;color:#ff0606}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#ff4c4c!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#ff4c4c;background-color:#ffd2d2;color:#ff4c4c}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#ff5252!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#ff5252;background-color:#ffd4d4;color:#ff5252}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#f77!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#f77;background-color:#fdd;color:#f77}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#ffa5a5!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#ffa5a5;background-color:#ffe9e9;color:#ffa5a5}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#ffc0c0!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#ffc0c0;background-color:#ffefef;color:#ffc0c0}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#e1e1ff!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#e1e1ff;background-color:#f8f8ff;color:#e1e1ff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#d0d0ff!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#d0d0ff;background-color:#f3f3ff;color:#d0d0ff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#b6b6ff!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#b6b6ff;background-color:#ededff;color:#b6b6ff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:#a5a5ff!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:#a5a5ff;background-color:#e9e9ff;color:#a5a5ff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#9595ff!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#9595ff;background-color:#e5e5ff;color:#9595ff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#8787ff!important;color:#000!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#8787ff;background-color:#e1e1ff;color:#8787ff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#6969ff!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#6969ff;background-color:#dadaff;color:#6969ff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:#5959ff!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:#5959ff;background-color:#d6d6ff;color:#5959ff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:#4f4fff!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:#4f4fff;background-color:#d3d3ff;color:#4f4fff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#1d1dff!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#1d1dff;background-color:#c7c7ff;color:#1d1dff}.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:blue!important;color:#fff!important}.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-hydrophobicity.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:blue;background-color:#bfbfff;color:blue}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:orange!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:orange;background-color:#ffe9bf;color:orange}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:orange!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:orange;background-color:#ffe9bf;color:orange}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_J,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_J.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_J:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_J.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_J:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_J,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_J.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_J:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_J.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_J:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_O,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_O.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_O:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_O.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_O:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_O,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_O.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_O:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_O.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_O:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:orange!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:orange;background-color:#ffe9bf;color:orange}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:orange!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:orange;background-color:#ffe9bf;color:orange}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_U,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_U.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_U.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_U:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_U,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_U.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_U.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_U:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:green!important;color:#fff!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:green;background-color:#bfdfbf;color:green}.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-lesk.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#7d8!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#7d8;background-color:#ddf7e1;color:#7d8}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#9e6!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#9e6;background-color:#e6fbd9;color:#9e6}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:#5b3!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:#5b3;background-color:#d5eecc;color:#5b3}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:#5b3!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:#5b3;background-color:#d5eecc;color:#5b3}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#99f!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#99f;background-color:#e6e6ff;color:#99f}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#7d8!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#7d8;background-color:#ddf7e1;color:#7d8}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#55f!important;color:#fff!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#55f;background-color:#d5d5ff;color:#55f}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#6bf!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#6bf;background-color:#d9eeff;color:#6bf}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_J,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_J.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_J:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_J.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_J:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_J,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_J.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_J:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_J.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_J:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#fc7!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#fc7;background-color:#fff2dd;color:#fc7}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#6bf!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#6bf;background-color:#d9eeff;color:#6bf}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#6bf!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#6bf;background-color:#d9eeff;color:#6bf}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:#5b3!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:#5b3;background-color:#d5eecc;color:#5b3}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_O,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_O.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_O:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_O.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_O:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_O,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_O.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_O:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_O.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_O:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#eaa!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#eaa;background-color:#fbeaea;color:#eaa}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#5b3!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#5b3;background-color:#d5eecc;color:#5b3}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#fc7!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#fc7;background-color:#fff2dd;color:#fc7}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:#f45!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:#f45;background-color:#ffd0d5;color:#f45}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#f45!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#f45;background-color:#ffd0d5;color:#f45}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_U,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_U.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_U.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_U:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_U,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_U.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_U.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_U:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#6bf!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#6bf;background-color:#d9eeff;color:#6bf}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#99f!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#99f;background-color:#e6e6ff;color:#99f}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#99f!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#99f;background-color:#e6e6ff;color:#99f}.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-mae.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#5858a7!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#5858a7;background-color:#d5d5e9;color:#5858a7}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#6b6b94!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#6b6b94;background-color:#dadae4;color:#6b6b94}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:#64649b!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:#64649b;background-color:#d8d8e6;color:#64649b}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:#2121de!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:#2121de;background-color:#c8c8f7;color:#2121de}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#9d9d62!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#9d9d62;background-color:#e7e7d8;color:#9d9d62}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#8c8c73!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#8c8c73;background-color:#e2e2dc;color:#8c8c73}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:blue!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:blue;background-color:#bfbfff;color:blue}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#4949b6!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#4949b6;background-color:#d2d2ed;color:#4949b6}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#60609f!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#60609f;background-color:#d7d7e7;color:#60609f}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#ecec13!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#ecec13;background-color:#fafac4;color:#ecec13}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#b2b24d!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#b2b24d;background-color:#ececd3;color:#b2b24d}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#4747b8!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#4747b8;background-color:#d1d1ed;color:#4747b8}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#82827d!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#82827d;background-color:#e0e0df;color:#82827d}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#c2c23d!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#c2c23d;background-color:#f0f0cf;color:#c2c23d}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#2323dc!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#2323dc;background-color:#c8c8f6;color:#2323dc}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:#4949b6!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:#4949b6;background-color:#d2d2ed;color:#4949b6}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#9d9d62!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#9d9d62;background-color:#e7e7d8;color:#9d9d62}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#c0c03f!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#c0c03f;background-color:#efefcf;color:#c0c03f}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#d3d32c!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#d3d32c;background-color:#f4f4ca;color:#d3d32c}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#ff0!important;color:#000!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#ff0;background-color:#ffffbf;color:#ff0}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#4343bc!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#4343bc;background-color:#d0d0ee;color:#4343bc}.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#4747b8!important;color:#fff!important}.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-strand.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#4747b8;background-color:#d1d1ed;color:#4747b8}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#cf0!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#cf0;background-color:#f2ffbf;color:#cf0}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:blue!important;color:#fff!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:blue;background-color:#bfbfff;color:blue}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:#c0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:#c0f;background-color:#f2bfff;color:#c0f}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#ff0!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#ff0;background-color:#ffffbf;color:#ff0}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#f0c!important;color:#fff!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#f0c;background-color:#ffbff2;color:#f0c}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:#f06!important;color:#fff!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:#f06;background-color:#ffbfd9;color:#f06}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#f90!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#f90;background-color:#ffe6bf;color:#f90}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#06f!important;color:#fff!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#06f;background-color:#bfd9ff;color:#06f}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#6f0!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#6f0;background-color:#d9ffbf;color:#6f0}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#3f0!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#3f0;background-color:#ccffbf;color:#3f0}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#60f!important;color:#fff!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#60f;background-color:#d9bfff;color:#60f}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#0f6!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#0f6;background-color:#bfffd9;color:#0f6}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#fc0!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#fc0;background-color:#fff2bf;color:#fc0}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:#f30!important;color:#fff!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:#f30;background-color:#ffccbf;color:#f30}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#f60!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#f60;background-color:#ffd9bf;color:#f60}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#0cf!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#0cf;background-color:#bff2ff;color:#0cf}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#0fc!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#0fc;background-color:#bffff2;color:#0fc}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#9f0!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#9f0;background-color:#e6ffbf;color:#9f0}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-taylor.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#2cd3d3!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#2cd3d3;background-color:#caf4f4;color:#2cd3d3}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#708f8f!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#708f8f;background-color:#dbe3e3;color:#708f8f}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:#e81717!important;color:#fff!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:#e81717;background-color:#f9c5c5;color:#e81717}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#a85757!important;color:#fff!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#a85757;background-color:#e9d5d5;color:#a85757}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:#3fc0c0!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:#3fc0c0;background-color:#cfefef;color:#3fc0c0}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:#788!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:#788;background-color:#dde1e1;color:#788}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#708f8f!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#708f8f;background-color:#dbe3e3;color:#708f8f}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:aqua!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:aqua;background-color:#bfffff;color:aqua}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#1ce3e3!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#1ce3e3;background-color:#c6f8f8;color:#1ce3e3}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#7e8181!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#7e8181;background-color:#dfe0e0;color:#7e8181}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#1ee1e1!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#1ee1e1;background-color:#c7f8f8;color:#1ee1e1}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#1ee1e1!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#1ee1e1;background-color:#c7f8f8;color:#1ee1e1}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#f60909!important;color:#fff!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#f60909;background-color:#fdc2c2;color:#f60909}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:#e11e1e!important;color:#fff!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:#e11e1e;background-color:#f8c7c7;color:#e11e1e}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#738c8c!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#738c8c;background-color:#dce2e2;color:#738c8c}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#738c8c!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#738c8c;background-color:#dce2e2;color:#738c8c}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#9d6262!important;color:#fff!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#9d6262;background-color:#e7d8d8;color:#9d6262}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#07f8f8!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#07f8f8;background-color:#c1fdfd;color:#07f8f8}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#f30c0c!important;color:#fff!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#f30c0c;background-color:#fcc2c2;color:#f30c0c}.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#5ba4a4!important;color:#000!important}.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-turn.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#5ba4a4;background-color:#d6e8e8;color:#5ba4a4}.alignment-aa .resi_line [class^=resi_]{fill:#ccc;color:#ccc}.alignment-aa.letters-only-residues [class^=resi_]{background-color:#0000!important}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_A,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#ffafaf!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_A,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_A.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_A.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#ffafaf;background-color:#ffebeb;color:#ffafaf}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_R,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#6464ff!important;color:#fff!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_R,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_R.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_R.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#6464ff;background-color:#d8d8ff;color:#6464ff}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_N,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_N:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_N,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_N.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_N:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_N.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_N:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_D,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_D:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_D,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_D.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_D:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_D.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_D:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_C,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#ff0!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_C,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_C.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_C.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#ff0;background-color:#ffffbf;color:#ff0}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_Q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_Q:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_Q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_Q.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_Q:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_Q.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_Q:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_E,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_E:not(.q){background-color:red!important;color:#fff!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_E,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_E.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_E:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_E.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_E:not(.q){fill:red;background-color:#ffbfbf;color:red}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_G,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_G,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_G.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_G.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_H,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_H:not(.q){background-color:#6464ff!important;color:#fff!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_H,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_H.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_H:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_H.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_H:not(.q){fill:#6464ff;background-color:#d8d8ff;color:#6464ff}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_I,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_I:not(.q){background-color:#ffafaf!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_I,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_I.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_I:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_I.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_I:not(.q){fill:#ffafaf;background-color:#ffebeb;color:#ffafaf}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_L,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_L:not(.q){background-color:#ffafaf!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_L,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_L.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_L:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_L.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_L:not(.q){fill:#ffafaf;background-color:#ffebeb;color:#ffafaf}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_K,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_K:not(.q){background-color:#6464ff!important;color:#fff!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_K,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_K.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_K:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_K.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_K:not(.q){fill:#6464ff;background-color:#d8d8ff;color:#6464ff}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_M,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_M:not(.q){background-color:#ffafaf!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_M,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_M.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_M:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_M.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_M:not(.q){fill:#ffafaf;background-color:#ffebeb;color:#ffafaf}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_F,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_F:not(.q){background-color:#ffc800!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_F,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_F.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_F:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_F.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_F:not(.q){fill:#ffc800;background-color:#fff1bf;color:#ffc800}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_P,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_P:not(.q){background-color:#f0f!important;color:#fff!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_P,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_P.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_P:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_P.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_P:not(.q){fill:#f0f;background-color:#ffbfff;color:#f0f}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_S,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_S:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_S,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_S.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_S:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_S.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_S:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_T,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:lime!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_T,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_T.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_T.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:lime;background-color:#bfffbf;color:lime}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_W,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_W:not(.q){background-color:#ffc800!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_W,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_W.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_W:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_W.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_W:not(.q){fill:#ffc800;background-color:#fff1bf;color:#ffc800}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_Y,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#ffc800!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_Y,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_Y.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#ffc800;background-color:#fff1bf;color:#ffc800}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_V,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_V:not(.q){background-color:#ffafaf!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_V,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_V.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_V:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_V.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_V:not(.q){fill:#ffafaf;background-color:#ffebeb;color:#ffafaf}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_B,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_B:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_B,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_B.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_B:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_B.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_B:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_Z,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.dark-residues.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_Z:not(.q){background-color:#fff!important;color:#000!important}.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-all .resi_Z,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus .resi_Z.c,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-consensus-diff .resi_Z:not(.c),.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query .resi_Z.q,.alignment-aa.aa-alignment-style-zappo.alignment-positions-tostyle-query-diff .resi_Z:not(.q){fill:#fff;background-color:#fff;color:#fff}.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-all .resi_A,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_A.c,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query .resi_A.q,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#5050ff!important;color:#fff!important}.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-all .resi_A,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_A.c,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query .resi_A.q,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#5050ff;background-color:#d3d3ff;color:#5050ff}.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-all .resi_C,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_C.c,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query .resi_C.q,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#e00000!important;color:#fff!important}.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-all .resi_C,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_C.c,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query .resi_C.q,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#e00000;background-color:#f7bfbf;color:#e00000}.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-all .resi_G,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_G.c,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query .resi_G.q,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#00c000!important;color:#fff!important}.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-all .resi_G,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_G.c,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query .resi_G.q,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#00c000;background-color:#bfefbf;color:#00c000}.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-all .resi_T,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_T.c,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query .resi_T.q,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#e6e600!important;color:#000!important}.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-all .resi_T,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_T.c,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query .resi_T.q,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#e6e600;background-color:#f9f9bf;color:#e6e600}.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-all .resi_U,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_U.c,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query .resi_U.q,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_U:not(.q){background-color:#c90!important;color:#000!important}.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-all .resi_U,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_U.c,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query .resi_U.q,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_U:not(.q){fill:#c90;background-color:#f2e6bf;color:#c90}.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-all .resi_R,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_R.c,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query .resi_R.q,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#2e8b57!important;color:#fff!important}.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-all .resi_R,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_R.c,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query .resi_R.q,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#2e8b57;background-color:#cbe2d5;color:#2e8b57}.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-all .resi_Y,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query .resi_Y.q,.alignment-nt.dark-residues.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#ff8c00!important;color:#000!important}.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-all .resi_Y,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query .resi_Y.q,.alignment-nt.nt-alignment-style-default.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#ff8c00;background-color:#ffe2bf;color:#ff8c00}.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_A,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_A.c,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_A.q,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#64f73f!important;color:#000!important}.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_A,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_A.c,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_A.q,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#64f73f;background-color:#d8fdcf;color:#64f73f}.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_C,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_C.c,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_C.q,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#ffb340!important;color:#000!important}.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_C,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_C.c,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_C.q,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#ffb340;background-color:#ffeccf;color:#ffb340}.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_G,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_G.c,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_G.q,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#eb413c!important;color:#fff!important}.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_G,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_G.c,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_G.q,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#eb413c;background-color:#fad0ce;color:#eb413c}.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_T,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_T.c,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_T.q,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#3c88ee!important;color:#fff!important}.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_T,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_T.c,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_T.q,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#3c88ee;background-color:#cee1fb;color:#3c88ee}.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_U,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_U.c,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_U.q,.alignment-nt.dark-residues.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_U:not(.q){background-color:#3c88ee!important;color:#fff!important}.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-all .resi_U,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus .resi_U.c,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query .resi_U.q,.alignment-nt.nt-alignment-style-nucleotide.alignment-positions-tostyle-query-diff .resi_U:not(.q){fill:#3c88ee;background-color:#cee1fb;color:#3c88ee}.alignment-nt .resi_line [class^=resi_]{fill:#ccc;color:#ccc}.alignment-nt.letters-only-residues [class^=resi_]{background-color:#0000!important}.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_A,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_A.c,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_A.q,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_A:not(.q){background-color:#ff83fa!important;color:#000!important}.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_A,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_A.c,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_A:not(.c),.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_A.q,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_A:not(.q){fill:#ff83fa;background-color:#ffe0fe;color:#ff83fa}.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_C,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_C.c,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_C.q,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_C:not(.q){background-color:#40e0d0!important;color:#000!important}.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_C,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_C.c,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_C:not(.c),.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_C.q,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_C:not(.q){fill:#40e0d0;background-color:#cff7f3;color:#40e0d0}.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_G,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_G.c,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_G.q,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_G:not(.q){background-color:#ff83fa!important;color:#000!important}.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_G,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_G.c,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_G:not(.c),.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_G.q,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_G:not(.q){fill:#ff83fa;background-color:#ffe0fe;color:#ff83fa}.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_R,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_R.c,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_R.q,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_R:not(.q){background-color:#ff83fa!important;color:#000!important}.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_R,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_R.c,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_R:not(.c),.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_R.q,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_R:not(.q){fill:#ff83fa;background-color:#ffe0fe;color:#ff83fa}.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_T,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_T.c,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_T.q,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_T:not(.q){background-color:#40e0d0!important;color:#000!important}.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_T,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_T.c,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_T:not(.c),.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_T.q,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_T:not(.q){fill:#40e0d0;background-color:#cff7f3;color:#40e0d0}.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_U,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_U.c,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_U.q,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_U:not(.q){background-color:#40e0d0!important;color:#000!important}.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_U,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_U.c,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_U:not(.c),.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_U.q,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_U:not(.q){fill:#40e0d0;background-color:#cff7f3;color:#40e0d0}.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_Y,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_Y.q,.alignment-nt.dark-residues.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_Y:not(.q){background-color:#40e0d0!important;color:#000!important}.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-all .resi_Y,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus .resi_Y.c,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-consensus-diff .resi_Y:not(.c),.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query .resi_Y.q,.alignment-nt.nt-alignment-style-purine.alignment-positions-tostyle-query-diff .resi_Y:not(.q){fill:#40e0d0;background-color:#cff7f3;color:#40e0d0}.sequence-logo-holder::-webkit-scrollbar{background:#0000;height:0}.sequence-logo-holder{overflow-x:auto;overflow-y:hidden;position:absolute}.sequence-logo-holder rect.interaction-placeholder{opacity:0}.sequence-logo-holder .sequence-logo-tooltip-container{margin:0;z-index:1002}.sequence-logo-holder .sequence-logo-tooltip-container .logo-tooltip{display:table;font-size:12px;line-height:16px;pointer-events:all;width:auto}.sequence-logo-holder .sequence-logo-tooltip-container .logo-tooltip h1{font-size:13px;margin:0;padding-bottom:4px;text-align:center}.sequence-logo-holder .sequence-logo-tooltip-container .logo-tooltip .row{clear:both;display:table-row;width:auto}.sequence-logo-holder .sequence-logo-tooltip-container .logo-tooltip .col{display:table-column;float:left;line-height:16px;text-align:center;width:60px}.sequence-logo-holder .sequence-logo-tooltip-container .logo-tooltip .col.header{font-weight:700;margin-bottom:5px}.sequence-logo-holder .sequence-logo-tooltip-container .logo-tooltip .legend-square{height:12px;margin-bottom:2px;margin-top:2px;width:12px}.sequence-logo-holder .sequence-logo-tooltip-container .logo-tooltip .name{width:100px}.minimap{display:grid;grid-template-areas:"header" "minimap" "footer";grid-template-rows:10px auto 10px;inset:0;position:absolute;z-index:100}.minimap .minimap-header{font-size:9px;grid-area:header;place-self:center}.minimap .minimap-app-holder{grid-area:minimap;inset:0;position:absolute}.minimap .minimap-app-holder .minimap-canvas-holder{inset:0;position:absolute}.minimap .minimap-app-holder .minimap-canvas-holder canvas{-ms-interpolation-mode:nearest-neighbor;image-rendering:optimizeSpeed;image-rendering:-moz-crisp-edges;image-rendering:-webkit-optimize-contrast;image-rendering:optimize-contrast;image-rendering:pixelated;inset:0;position:absolute}.minimap .minimap-app-holder .minimap-interaction{inset:0;position:absolute}.minimap .minimap-footer{font-size:9px;grid-area:footer;place-self:center}.minimap-dragger{cursor:move;cursor:grab;cursor:-webkit-grab;left:0;position:absolute;right:0}.minimap-full-page-drag-detector{background-color:#fff;cursor:grabbing;cursor:-webkit-grabbing;inset:0;opacity:0;position:fixed;z-index:2001}.barplot::-webkit-scrollbar{background:#0000;height:0}.barplot{bottom:0;left:0;position:absolute;right:0;top:0}.barplot svg .position-container rect.interaction-placeholder,.barplot svg .position-container rect.interaction-placeholder-full{fill-opacity:0;stroke:none}.barplot .barplot-tooltip-holder{margin:0;z-index:1002}.barplot .barplot-tooltip-holder .bar-position-textblock{pointer-events:all}.barplot .barplot-tooltip-holder .bar-position-textblock h1{font-size:14px;margin:0;padding-bottom:4px;text-align:center}.barplot .barplot-tooltip-holder .bar-position-textblock .dataseries-line{font-size:13px;line-height:16px}.barplot .barplot-tooltip-holder .bar-position-textblock .legend-square{display:inline-block;height:8px;margin-right:6px;width:8px}.full-screen-resize-dragger{background-color:#fff;bottom:0;cursor:col-resize;left:0;opacity:0;position:fixed;right:0;top:0;z-index:1800}.full-screen-resize-dragger.horizontal{cursor:col-resize}.full-screen-resize-dragger.vertical{cursor:row-resize}.alignment-viewer-2{align-items:center;display:grid;position:absolute}.alignment-viewer-2 .content{bottom:0;left:0;position:absolute;right:0;top:0}.alignment-viewer-2 .metadata-title{font-size:14px;font-weight:700;position:relative;text-align:right}.alignment-viewer-2 .minimap-content{bottom:0;left:0;position:absolute;right:0;top:0}.alignment-viewer-2 .horizontal-resizer,.alignment-viewer-2 .vertical-resizer{background-color:#f2f2f2}.alignment-viewer-2 .horizontal-resizer{cursor:ew-resize}.alignment-viewer-2 .vertical-resizer{cursor:ns-resize}.alignment-viewer-2 .horizontal-resizer.hovered,.alignment-viewer-2 .vertical-resizer.hovered{background-color:#09f;border-left-color:#09f;border-right-color:#09f;opacity:.2}.alignment-viewer-2 .horizontal-resizer.resizing,.alignment-viewer-2 .vertical-resizer.resizing{background-color:#09f;border-left-color:#09f;border-right-color:#09f}.alignment-viewer-2 .horizontal-resizer{height:100%}.alignment-viewer-2 .vertical-resizer{height:100%;width:100%}.background-behind-search-box{background-color:#fff;inset:0;opacity:.75;position:fixed;transition:opacity .2s ease-in,visibility .2s ease-in;transition:opacity .2s ease-out,visibility 200msms ease-out;visibility:visible;z-index:10000}.search-box-grid{bottom:50px;display:grid;grid-template-areas:"search-area";grid-template-columns:auto;grid-template-rows:1fr;left:100px;position:absolute;right:100px;top:0;z-index:10001}.search-box-grid .search-box-contents{background-color:#fff;border-radius:10px;box-shadow:0 0 10px #00000080;display:grid;font-size:12px;grid-area:search-area;grid-template-areas:". . ." ". search-bar ." ". search-options-bar ." ". search-bar-results-separator ." ". search-results ." ". . .";grid-template-columns:5px 9fr 5px;grid-template-rows:10px 20px 30px 20px 1fr 5px;overflow:hidden;position:relative}.search-box-grid .search-box-contents .search-options-bar{grid-column-gap:5px;display:grid;grid-area:search-options-bar;grid-auto-flow:column;place-items:center;place-self:center}.search-box-grid .search-box-contents .search-options-bar input,.search-box-grid .search-box-contents .search-options-bar label,.search-box-grid .search-box-contents .search-options-bar select{display:inline-block;margin:0}.search-box-grid .search-box-contents .search-options-bar .stepper{display:inline-grid;grid-auto-flow:column;padding:0 12px 0 0;place-items:center}.search-box-grid .search-box-contents .search-options-bar .stepper span{font-size:15px;font-weight:bolder;line-height:20px;padding:0 8px}.search-box-grid .search-box-contents .search-options-bar .stepper button{background-color:#0000;border:1px solid #646464;border-radius:50%;color:#646464;display:inline-block;font-size:15px;font-weight:900;height:20px;line-height:20px;margin:0;padding:0;width:20px}.search-box-grid .search-box-contents .search-options-bar .stepper button:disabled,.search-box-grid .search-box-contents .search-options-bar .stepper button:disabled:hover{background-color:#fff;opacity:.4}.search-box-grid .search-box-contents .search-options-bar .stepper button:hover{background-color:#f1f1f1}.search-box-grid .search-box-contents .search-bar{align-self:start;display:grid;grid-area:search-bar;grid-template-areas:"search-input-label search-input matches";grid-template-columns:1fr 3fr 2fr;grid-template-rows:100%;justify-self:stretch}.search-box-grid .search-box-contents .search-bar label{align-self:center;grid-area:search-input-label;justify-self:end}.search-box-grid .search-box-contents .search-bar input{grid-area:search-input;width:100%}.search-box-grid .search-box-contents .search-bar span{align-self:center;grid-area:matches;justify-self:center}.search-box-grid .search-box-contents .search-bar-results-separator{border-top:2px solid #c2c2c2;grid-area:search-bar-results-separator;margin-top:10px}.search-box-grid .search-box-contents .search-results{grid-area:search-results;overflow:scroll;position:relative}.search-box-grid .search-box-contents button.button-link.close{background:none!important;border:none;color:#069;cursor:pointer;padding:0;position:absolute;right:8px;text-decoration:underline;top:8px}.consensus .av2-blocksandletters::-webkit-scrollbar,.query .av2-blocksandletters::-webkit-scrollbar{background:#0000;height:0}.av2-blocksandletters .av2-blocks.canvas-holder.hidden canvas{display:none}.av2-blocksandletters{inset:0;overflow-x:hidden;overflow-y:hidden;position:absolute}.av2-blocks.canvas-holder{inset:0;overflow:hidden;position:absolute}.av2-blocks.canvas-holder .loader-holder{display:grid;inset:0;place-items:center;position:absolute}.av2-blocks.canvas-holder .loader-holder .loader{animation:spin 2s linear infinite;border:3px solid #f3f3f3;border-radius:50%;border-top-color:#3498db;height:48px;position:relative;width:48px}.av2-blocks.canvas-holder canvas{-ms-interpolation-mode:nearest-neighbor;image-rendering:optimizeSpeed;image-rendering:-moz-crisp-edges;image-rendering:-webkit-optimize-contrast;image-rendering:optimize-contrast;image-rendering:pixelated}.av2-letters.sequence-text-holder{position:absolute;white-space:nowrap}.av2-letters.sequence-text-holder .letters-with-specific-color{left:0;pointer-events:none;position:absolute;top:0;-webkit-user-select:none;user-select:none}.hidden-residues-for-copy-paste{color:#0000;left:0;overflow-x:hidden;overflow-y:hidden;pointer-events:all;position:absolute;top:0;white-space:nowrap}.av2-spreadsheet{display:grid;grid-template-areas:"pinned-table unpinned-table";grid-template-rows:auto;inset:0;position:absolute}.av2-spreadsheet .horizontal-resizer{background-color:#d0d0d0;cursor:ew-resize;height:100%;margin:0;padding:0}.av2-spreadsheet .horizontal-resizer.hovered,.av2-spreadsheet .horizontal-resizer.resizing{background-color:#09f;border-left-color:#09f;border-right-color:#09f;margin-left:-1px;opacity:1;width:3px;z-index:1}.av2-spreadsheet .pinned-table-holder{grid-area:pinned-table;z-index:1}.av2-spreadsheet .unpinned-table-holder{grid-area:unpinned-table}.av2-spreadsheet .pinned-table-holder,.av2-spreadsheet .unpinned-table-holder{position:relative}.av2-spreadsheet .pinned-table-holder .pinned-table.header,.av2-spreadsheet .unpinned-table-holder .pinned-table.header{border:1px solid #686868;box-sizing:border-box}.av2-spreadsheet .pinned-table-holder .pinned-table.content,.av2-spreadsheet .unpinned-table-holder .pinned-table.content{border:1px solid #686868;border-top:none;box-sizing:border-box}.av2-spreadsheet .pinned-table-holder .pinned-table.header,.av2-spreadsheet .pinned-table-holder .unpinned-table.header,.av2-spreadsheet .unpinned-table-holder .pinned-table.header,.av2-spreadsheet .unpinned-table-holder .unpinned-table.header{left:0;right:0}.av2-spreadsheet .pinned-table-holder .pinned-table.header>.column-header,.av2-spreadsheet .pinned-table-holder .unpinned-table.header>.column-header,.av2-spreadsheet .unpinned-table-holder .pinned-table.header>.column-header,.av2-spreadsheet .unpinned-table-holder .unpinned-table.header>.column-header{background-color:#e5e5e5;border-bottom:1px solid #e0e0e0;border-top:1px solid #e0e0e0}.av2-spreadsheet .pinned-table-holder .content-holder,.av2-spreadsheet .unpinned-table-holder .content-holder{inset:0;overflow-y:clip;position:absolute}.av2-spreadsheet .pinned-table-holder .pinned-table,.av2-spreadsheet .pinned-table-holder .unpinned-table,.av2-spreadsheet .unpinned-table-holder .pinned-table,.av2-spreadsheet .unpinned-table-holder .unpinned-table{background-color:#fff;display:grid;overflow-x:hidden;overflow-y:hidden;position:absolute}.av2-spreadsheet .pinned-table-holder .pinned-table .table-column,.av2-spreadsheet .pinned-table-holder .unpinned-table .table-column,.av2-spreadsheet .unpinned-table-holder .pinned-table .table-column,.av2-spreadsheet .unpinned-table-holder .unpinned-table .table-column{display:grid}.av2-spreadsheet .pinned-table-holder .pinned-table .table-column>*,.av2-spreadsheet .pinned-table-holder .unpinned-table .table-column>*,.av2-spreadsheet .unpinned-table-holder .pinned-table .table-column>*,.av2-spreadsheet .unpinned-table-holder .unpinned-table .table-column>*{border-bottom:1px solid #e0e0e0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av2-spreadsheet .pinned-table-holder .pinned-table .table-column:not(.rownum)>:nth-child(2n),.av2-spreadsheet .pinned-table-holder .unpinned-table .table-column:not(.rownum)>:nth-child(2n),.av2-spreadsheet .unpinned-table-holder .pinned-table .table-column:not(.rownum)>:nth-child(2n),.av2-spreadsheet .unpinned-table-holder .unpinned-table .table-column:not(.rownum)>:nth-child(2n){background-color:#f4f4f4}.av2-spreadsheet .pinned-table-holder .pinned-table .table-column.rownum,.av2-spreadsheet .pinned-table-holder .unpinned-table .table-column.rownum,.av2-spreadsheet .unpinned-table-holder .pinned-table .table-column.rownum,.av2-spreadsheet .unpinned-table-holder .unpinned-table .table-column.rownum{background-color:#e5e5e5;color:#707070;font-size:small;text-align:right}.av2-spreadsheet .pinned-table-holder .pinned-table .column-header,.av2-spreadsheet .pinned-table-holder .unpinned-table .column-header,.av2-spreadsheet .unpinned-table-holder .pinned-table .column-header,.av2-spreadsheet .unpinned-table-holder .unpinned-table .column-header{font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.settings-holder{display:grid;grid-template-areas:". . ." ". settings ." ". . .";grid-template-columns:1fr 1.5afr 1fr;grid-template-rows:1fr 1fr 1fr;inset:0;place-items:center;position:fixed;z-index:1900}.settings-holder .outside-settings-box{background-color:#fff;inset:0;opacity:.5;position:absolute;transition:opacity .2s ease-in,visibility .2s ease-in;transition:opacity .2s ease-out,visibility 200msms ease-out;visibility:visible;z-index:1}.settings-holder .settings{grid-row-gap:10px;background-color:#fff;border-radius:10px;box-shadow:0 0 10px #00000080;display:grid;grid-area:settings;grid-template-areas:". settings-header ." ". settings-content .";grid-template-columns:10px auto 10px;grid-template-rows:30px auto;justify-self:stretch;padding:10px;row-gap:10px;z-index:2}.settings-holder .settings-header{border-bottom:2px solid #c2c2c2;display:grid;grid-area:settings-header;grid-template-areas:"title close-btn";grid-template-columns:1fr auto;grid-template-rows:auto;position:relative}.settings-holder .settings-header h2{align-self:stretch;font-size:20px;grid-area:title;margin:0}.settings-holder .settings-header button.button-link.close{background:none!important;border:none;cursor:pointer;grid-area:close-btn;padding:0}.settings-holder .load-error{border-top:2px solid #c2c2c2;color:red;font-size:13px}.settings-holder .load-error h3{margin:0;padding-top:5px;text-align:center}.settings-holder .load-error ul{margin:5px 0 0}.settings-holder .settings-content{grid-area:settings-content}.settings-holder .settings-content h3.subheader{color:#b5b5b5;font-size:15px;margin:0;padding:0}.settings-holder .settings-content .options-box{align-items:center;display:grid;font-size:13px;grid-auto-rows:auto;grid-template-columns:200px 1fr;padding-bottom:8px;padding-left:10px;padding-top:4px}.settings-holder .settings-content .options-box label{justify-self:end;padding:2px 5px;text-align:end}.settings-holder .settings-content .options-box>div{padding:4px 0}.settings-holder .settings-content .options-box .file-upload-input,.settings-holder .settings-content .options-box .stepper-holder,.settings-holder .settings-content .options-box input[type=checkbox]{display:grid;place-items:center;width:30%}.settings-holder .settings-content .options-box .stepper-holder .stepper{grid-auto-flow:column}.settings-holder .settings-content .options-box .stepper-holder .stepper span{font-size:15px;font-weight:bolder;line-height:20px;padding:0 8px}.settings-holder .settings-content .options-box .stepper-holder .stepper button{background-color:#0000;border:1px solid #646464;border-radius:50%;color:#646464;display:inline-block;font-size:15px;font-weight:900;height:20px;line-height:20px;margin:0;padding:0;width:20px}.settings-holder .settings-content .options-box .stepper-holder .stepper button:disabled,.settings-holder .settings-content .options-box .stepper-holder .stepper button:disabled:hover{background-color:#fff;opacity:.4}.settings-holder .settings-content .options-box .stepper-holder .stepper button:hover{background-color:#f1f1f1}button.button-link{background:none!important;border:none;color:#069;cursor:pointer;text-decoration:underline}.hide{display:none}.loader{animation:spin 2s linear infinite;border:3px solid #f3f3f3;border-radius:50%;border-top-color:#3498db;bottom:0;height:14px;position:absolute;right:0;width:14px}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.av2-hidden-file-input{display:none}.av2-fileloader-fullpage{background-color:#fff;display:grid;grid-template-areas:". . ." ". dropzone ." ". . .";grid-template-columns:100px auto 100px;grid-template-rows:100px auto 100px;inset:0;margin:0;opacity:.9;place-items:center;position:fixed;z-index:2000}.av2-fileloader-fullpage .av2-fileloader-dropbox{border:4px dashed #000;display:grid;font-size:40px;font-weight:600;grid-area:dropzone;height:100%;place-content:center;width:100%} +/*# sourceMappingURL=main.5271bbb3.css.map*/ \ No newline at end of file diff --git a/static/css/main.5271bbb3.css.map b/static/css/main.5271bbb3.css.map new file mode 100644 index 0000000..b4a882f --- /dev/null +++ b/static/css/main.5271bbb3.css.map @@ -0,0 +1 @@ +{"version":3,"file":"static/css/main.5271bbb3.css","mappings":"AAAA,KAKE,kCAAmC,CACnC,iCAAkC,CAJlC,mIAEY,CAHZ,QAMF,CAEA,KACE,uEAEF,CCXA,UAEE,YACA,gBACA,iBACA,CAGF,UAHE,0BAYA,CATF,KAKE,0BAIA,CAOF,MAEE,aACA,sBAFA,YAEA,CAEA,2CACE,aAGF,oCAGE,sBAGA,aAJA,QAEA,WAGA,mBANA,eAIA,YAEA,CAEA,4CAME,kCAJA,yBACA,kBADA,yBAGA,YAEA,kBAHA,UAGA,CAGF,8CAIE,aACA,sBAHA,YAIA,mBAHA,kBAFA,UAKA,CAEA,4DAGE,aAFA,YAGA,mBAFA,UAEA,CAEA,+MAGE,sBACA,kBACA,qBAJA,YACA,UAGA,CAIF,2EACE,4CAEF,2EACE,sBAEF,2EACE,qBAEF,yBACE,GACE,YACA,WAEF,IACE,SACA,SAOR,kDACE,0CAA0C,CAE5C,kDACE,sBAEF,kDACE,qBAEF,wBACE,UAAY,KAAK,CAAC,QAAQ,MAAM,CAAC,CAInC,kDACE,6EAA6E,CAE/E,kDACE,6EAA6E,CAAC,mBAAmB,CAEnG,kDACE,6EAA6E,CAAC,mBAAmB,CAEnG,kDACE,6EAA6E,CAAC,mBAAmB,CAEnG,kDACE,6EAA6E,CAAC,mBAAmB,CAEnG,kDACE,6EAA6E,CAAC,mBAAmB,CAEnG,kDACE,6EAA6E,CAAC,mBAAmB,CAEnG,kDACE,6EAA6E,CAAC,mBAAmB,CAEnG,kDACE,6EAA6E,CAAC,mBAAmB,CAEnG,wBACE,OAAoB,aAAY,CAAzB,YAA0B,CAAC,IAAiB,aAAY,CAAzB,YAA0B,CAAC,CAEnE,wBACE,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAErC,wBACE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAE5C,wBACE,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAE5C,wBACE,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAE7C,wBACE,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,CAEnD,wBACE,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAE7C,wBACE,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,CAEpD,wBACE,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,CAEpD,wBACE,OAAO,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,CAIvD,kBAIE,aACA,uBAJA,UACA,iBAGA,CAEA,gCAQE,sBADA,eANA,YAKA,qBAJA,UAMA,CAEA,iDAGE,mBAIA,gCANA,aACA,mBAEA,SACA,8BACA,kBACA,CAEA,oDAGE,YACA,cAHA,SACA,OAEA,CAGF,iFAIE,aACA,sBAFA,aAFA,eACA,OAGA,CAIA,wKACE,SAIJ,2GAKE,QAAO,CAFP,YACA,SAFA,QADA,aAIA,CAEF,+DAEE,WAAU,CADV,OACA,CAEF,iEACE,QAEF,sEACE,QAEF,wEACE,QAMR,mBAEE,SADA,iBACA,CCnPJ,qBAOE,SACA,OALA,kBACA,kBACA,kBAIA,OAAM,CAHN,MALA,kBAQA,CAEF,wCACE,iBACA,SCPF,wBAIE,OAAM,CADN,iBACA,CAEA,4CAEE,QAEA,oBAHA,kBAEA,YACA,CAGF,4CAGE,eADA,QADA,iBAEA,CAEA,0HAIE,oBAFA,eACA,YACA,CAGF,yDAKE,4BAFA,8BACA,+BAFA,SADA,OAIA,CAEF,2DAGE,8BACA,+BACA,yBAHA,SADA,OAIA,CAEF,2DAGE,gCAEA,2BADA,6BAFA,SADA,OAIA,CAEF,4DAGE,gCAEA,0BADA,6BAFA,SADA,OAIA,CAIJ,kCAGE,OAAM,CAFN,iBAEA,CChEJ,sBAGE,OAMA,eAFA,gBADA,oBAIA,kBAFA,UAEA,CCZF,iDDOE,SAJA,kBAGA,QAFA,KCAA,CAGA,+CAGE,2BADA,kBADA,iBAEA,CAEF,qDACE,uBAEF,sDACE,uBAIJ,kCAGE,SACA,OAHA,eAIA,OAAM,CAHN,KAGA,CAGF,6BAIE,QAAO,CADP,OAFA,kBACA,OAEA,CAGA,mDAGE,2BADA,kBADA,iBAEA,CAEF,yDACE,uBAEF,0DACE,uBAIJ,oCAGE,SACA,OAHA,eAIA,OAAM,CAHN,KAGA,CC2mBI,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,sBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,+BADA,oBACA,CAMF,8bAkBI,SAJF,yBADA,SA1CiB,CAMnB,ogBAiBE,+BADA,oBACA,CAMF,8bAkBI,SAJF,yBADA,SA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,iCADA,oBACA,CAMF,8bAkBI,WAJF,yBADA,WA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,sBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,sBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,sBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,sBADA,UA1CiB,CAMnB,ogBAiBE,iCADA,oBACA,CAMF,8bAkBI,WAJF,yBADA,WA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,sBADA,UA1CiB,CAMnB,ogBAiBE,iCADA,oBACA,CAMF,8bAkBI,WAJF,yBADA,WA1CiB,CAMnB,ogBAiBE,iCADA,oBACA,CAMF,8bAkBI,WAJF,yBADA,WA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,iCADA,oBACA,CAMF,8bAkBI,WAJF,yBADA,WA1CiB,CAMnB,ogBAiBE,iCADA,oBACA,CAMF,8bAkBI,WAJF,yBADA,WA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,sBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,sBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,sBADA,UA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,sBADA,UA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,gCADA,oBACA,CAMF,ybAkBI,UAJF,yBADA,UA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,gCADA,oBACA,CAMF,ybAkBI,UAJF,yBADA,UA1CiB,CAMnB,+fAiBE,gCADA,oBACA,CAMF,ybAkBI,UAJF,yBADA,UA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,gCADA,oBACA,CAMF,ybAkBI,UAJF,yBADA,UA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,+BADA,oBACA,CAMF,seAkBI,SAJF,yBADA,SA1CiB,CAMnB,4iBAiBE,+BADA,oBACA,CAMF,seAkBI,SAJF,yBADA,SA1CiB,CAMnB,4iBAiBE,mCADA,oBACA,CAMF,seAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,mCADA,oBACA,CAMF,seAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,mCADA,oBACA,CAMF,seAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,mCADA,oBACA,CAMF,seAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,gCADA,oBACA,CAMF,seAkBI,UAJF,sBADA,UA1CiB,CAMnB,4iBAiBE,mCADA,oBACA,CAMF,seAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,mCADA,oBACA,CAMF,seAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,mCADA,oBACA,CAMF,seAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,mCADA,oBACA,CAMF,seAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,mCADA,oBACA,CAMF,seAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,mCADA,oBACA,CAMF,seAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,mCADA,oBACA,CAMF,seAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,mCADA,oBACA,CAMF,seAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,mCADA,oBACA,CAMF,seAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,mCADA,oBACA,CAMF,seAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,mCADA,oBACA,CAMF,seAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,mCADA,oBACA,CAMF,seAkBI,aAJF,yBADA,aA1CiB,CAMnB,4iBAiBE,gCADA,oBACA,CAMF,seAkBI,UAJF,yBADA,UA1CiB,CAMnB,0fAiBE,kCADA,oBACA,CAMF,obAkBI,YAJF,yBADA,YA1CiB,CAMnB,0fAiBE,gCADA,oBACA,CAMF,obAkBI,UAJF,sBADA,UA1CiB,CAMnB,0fAiBE,iCADA,oBACA,CAMF,obAkBI,WAJF,yBADA,WA1CiB,CAMnB,0fAiBE,+BADA,oBACA,CAMF,obAkBI,SAJF,yBADA,SA1CiB,CAMnB,0fAiBE,+BADA,oBACA,CAMF,obAkBI,SAJF,yBADA,SA1CiB,CAMnB,0fAiBE,iCADA,oBACA,CAMF,obAkBI,WAJF,yBADA,WA1CiB,CAMnB,0fAiBE,kCADA,oBACA,CAMF,obAkBI,YAJF,yBADA,YA1CiB,CAMnB,0fAiBE,gCADA,oBACA,CAMF,obAkBI,UAJF,yBADA,UA1CiB,CAMnB,0fAiBE,iCADA,oBACA,CAMF,obAkBI,WAJF,yBADA,WA1CiB,CAMnB,0fAiBE,gCADA,oBACA,CAMF,obAkBI,UAJF,sBADA,UA1CiB,CAMnB,0fAiBE,+BADA,oBACA,CAMF,obAkBI,SAJF,yBADA,SA1CiB,CAMnB,0fAiBE,iCADA,oBACA,CAMF,obAkBI,WAJF,yBADA,WA1CiB,CAMnB,0fAiBE,iCADA,oBACA,CAMF,obAkBI,WAJF,yBADA,WA1CiB,CAMnB,0fAiBE,gCADA,oBACA,CAMF,obAkBI,UAJF,yBADA,UA1CiB,CAMnB,0fAiBE,gCADA,oBACA,CAMF,obAkBI,UAJF,sBADA,UA1CiB,CAMnB,0fAiBE,iCADA,oBACA,CAMF,obAkBI,WAJF,yBADA,WA1CiB,CAMnB,0fAiBE,gCADA,oBACA,CAMF,obAkBI,UAJF,yBADA,UA1CiB,CAMnB,0fAiBE,+BADA,oBACA,CAMF,obAkBI,SAJF,yBADA,SA1CiB,CAMnB,0fAiBE,kCADA,oBACA,CAMF,obAkBI,YAJF,yBADA,YA1CiB,CAMnB,0fAiBE,kCADA,oBACA,CAMF,obAkBI,YAJF,yBADA,YA1CiB,CAMnB,0fAiBE,gCADA,oBACA,CAMF,obAkBI,UAJF,sBADA,UA1CiB,CAMnB,0fAiBE,iCADA,oBACA,CAMF,obAkBI,WAJF,yBADA,WA1CiB,CAMnB,0fAiBE,iCADA,oBACA,CAMF,obAkBI,WAJF,yBADA,WA1CiB,CAMnB,0fAiBE,iCADA,oBACA,CAMF,obAkBI,WAJF,yBADA,WA1CiB,CAMnB,0fAiBE,gCADA,oBACA,CAMF,obAkBI,UAJF,sBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,sBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,sBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,sBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,sBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,yBADA,UA1CiB,CAMnB,qfAiBE,gCADA,oBACA,CAMF,+aAkBI,UAJF,sBADA,UA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,+BADA,oBACA,CAMF,8bAkBI,SAJF,yBADA,SA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,yBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,sBADA,UA1CiB,CAMnB,ogBAiBE,gCADA,oBACA,CAMF,8bAkBI,UAJF,sBADA,UA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,+BADA,oBACA,CAMF,obAkBI,SAJF,yBADA,SA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,gCADA,oBACA,CAMF,obAkBI,UAJF,yBADA,UA1CiB,CAMnB,0fAiBE,+BADA,oBACA,CAMF,obAkBI,SAJF,yBADA,SA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,gCADA,oBACA,CAMF,obAkBI,UAJF,yBADA,UA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAMnB,0fAiBE,mCADA,oBACA,CAMF,obAkBI,aAJF,yBADA,aA1CiB,CAnBrB,wCAKE,UADA,UALa,CAcf,mDAGE,iCASA,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,gCADA,oBACA,CAMF,ybAkBI,UAJF,yBADA,UA1CiB,CAMnB,+fAiBE,+BADA,oBACA,CAMF,ybAkBI,SAJF,yBADA,SA1CiB,CAMnB,+fAiBE,gCADA,oBACA,CAMF,ybAkBI,UAJF,yBADA,UA1CiB,CAMnB,+fAiBE,gCADA,oBACA,CAMF,ybAkBI,UAJF,yBADA,UA1CiB,CAMnB,+fAiBE,+BADA,oBACA,CAMF,ybAkBI,SAJF,yBADA,SA1CiB,CAMnB,+fAiBE,gCADA,oBACA,CAMF,ybAkBI,UAJF,yBADA,UA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,gCADA,oBACA,CAMF,ybAkBI,UAJF,yBADA,UA1CiB,CAMnB,+fAiBE,gCADA,oBACA,CAMF,ybAkBI,UAJF,yBADA,UA1CiB,CAMnB,+fAiBE,gCADA,oBACA,CAMF,ybAkBI,UAJF,yBADA,UA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,mCADA,oBACA,CAMF,ybAkBI,aAJF,yBADA,aA1CiB,CAMnB,+fAiBE,gCADA,oBACA,CAMF,ybAkBI,UAJF,sBADA,UA1CiB,CAMnB,+fAiBE,gCADA,oBACA,CAMF,ybAkBI,UAJF,sBADA,UA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,gCADA,oBACA,CAMF,mcAkBI,UAJF,yBADA,UA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,ygBAiBE,mCADA,oBACA,CAMF,mcAkBI,aAJF,yBADA,aA1CiB,CAMnB,whBAiBE,mCADA,oBACA,CAMF,kdAkBI,aAJF,yBADA,aA1CiB,CAMnB,whBAiBE,mCADA,oBACA,CAMF,kdAkBI,aAJF,yBADA,aA1CiB,CAMnB,whBAiBE,mCADA,oBACA,CAMF,kdAkBI,aAJF,yBADA,aA1CiB,CAMnB,whBAiBE,mCADA,oBACA,CAMF,kdAkBI,aAJF,yBADA,aA1CiB,CAMnB,whBAiBE,mCADA,oBACA,CAMF,kdAkBI,aAJF,yBADA,aA1CiB,CAnBrB,wCAKE,UADA,UALa,CAcf,mDAGE,iCASA,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CAMnB,ogBAiBE,mCADA,oBACA,CAMF,8bAkBI,aAJF,yBADA,aA1CiB,CCxpBzB,yCACE,iBACA,SAGF,sBACE,gBACA,kBACA,kBAEA,mDACE,UAGF,uDACE,SACA,aAEA,qEAEE,cAGA,eADA,iBAHA,mBAEA,UAEA,CAEA,wEAIE,eADA,SADA,mBADA,iBAGA,CAGF,0EAGE,WAFA,kBACA,UACA,CAGF,0EAEE,qBADA,WAIA,iBAFA,kBACA,UACA,CAGF,iFACE,gBACA,kBAGF,oFAEE,YAEA,kBADA,eAFA,UAGA,CAEF,2EACE,YC1DR,SAKE,aAEA,gDADA,kCAHA,QADA,kBADA,WAMA,CAEA,yBAEE,cADA,iBAEA,kBAEF,6BACE,kBAEA,OAAM,CADN,iBACA,CAEA,oDAEE,OAAM,CADN,iBACA,CAEA,2DAME,wCALA,8BACA,iCACA,0CACA,kCACA,0BAGA,OAAM,CADN,iBACA,CAGJ,kDAEE,OAAM,CADN,iBACA,CAGJ,yBAEE,cADA,iBAEA,kBAIJ,iBAIE,YACA,YAEA,oBALA,OADA,kBAEA,OAIA,CAGF,iCAIE,sBAEA,gBAEA,wBANA,QACA,UAFA,eAIA,YAGA,CChEF,4BACE,iBACA,SAGF,SAGE,SACA,OAHA,kBAIA,OAAM,CAHN,KAGA,CAOE,iIACE,eACA,YAIJ,iCACE,SACA,aAEA,yDACE,mBACA,4DAIE,eADA,SADA,mBADA,iBAGA,CAEF,0EAEE,eADA,gBACA,CAEF,wEAGE,qBADA,WAEA,iBAHA,SAGA,CC3CR,4BAOE,sBAJA,SAMA,kBALA,OAEA,UALA,eAIA,QAHA,MAMA,YACA,CAEF,uCACE,kBAEF,qCACE,kBAGF,oBAGE,mBADA,aADA,iBAEA,CAEA,6BAKE,QAAO,CAFP,OAFA,kBAGA,QAFA,KAGA,CAEF,oCAIE,eADA,gBAFA,kBACA,gBAEA,CAEF,qCAKE,QAAO,CAFP,OAFA,kBAGA,QAFA,KAGA,CAIF,8EAEE,yBAEF,wCACE,iBAEF,sCACE,iBAEF,8FAEE,sBACA,uBACA,wBACA,WAEF,gGAEE,sBACA,uBACA,wBAGF,wCACE,YAEF,sCAEE,YADA,UACA,CC1EJ,8BAGE,sBADA,QAMA,YAPA,eAKA,sDACA,4DAEA,mBALA,aAKA,CAGF,iBAGE,YAIA,aAGA,kCAFA,2BACA,uBALA,WAHA,kBAIA,YAHA,MAIA,aAIA,CAEA,sCAEE,sBAEA,mBACA,8BAGA,aAWA,eAhBA,sBAQA,qIACE,CAHF,kCACA,+CAJA,gBALA,iBAkBA,CAEA,0DAKE,oBAFA,aAFA,6BAGA,sBAEA,mBAJA,iBAIA,CAEA,iMACE,qBACA,SAGF,mEAGE,oBACA,sBAFA,mBAGA,mBAEA,wEAEE,eAEA,mBAHA,iBAEA,aACA,CAEF,0EACE,uBASA,yBAGA,kBAFA,cARA,oBAAoB,CAIpB,cAAc,CACd,gBAHA,YACA,iBAQA,SACA,SAAQ,CAXR,UAWA,CAEF,4KAGE,sBADA,UACA,CAEF,gFACE,yBAKN,kDAGE,iBACA,aAHA,qBAMA,8DAFA,kCACA,wBAJA,oBAME,CAGF,wDAEE,kBADA,6BAEA,iBAEF,wDACE,uBACA,WAEF,uDAEE,kBADA,kBAEA,oBAIJ,oEAGE,6BAFA,uCACA,eACA,CAEF,sDACE,yBACA,gBACA,kBAEF,+DAKE,0BACA,YACA,WAEA,eALA,UAHA,kBAEA,UAKA,0BANA,OAOA,CChJN,oGAEE,iBACA,SAGF,8DACE,aAGF,sBAIE,OAAM,CAHN,kBACA,kBACA,iBACA,CAGF,0BAEE,QACA,gBAFA,iBAEA,CAEA,yCAGE,aADA,QAEA,mBAHA,iBAGA,CACA,iDAME,kCAJA,yBACA,kBADA,yBAGA,YAEA,kBAHA,UAGA,CAIJ,iCAME,wCALA,8BACA,iCACA,0CACA,kCACA,yBACA,CAIJ,kCACE,kBACA,mBAEA,+DAGE,OAQA,oBAVA,kBACA,MAMA,yBAEA,gBACA,CAGJ,gCAQE,YADA,OAHA,kBACA,kBAIA,mBARA,kBAKA,MAJA,kBAOA,CC5EF,iBAGE,aACA,iDACE,CACF,wBAJA,OAAO,CADP,iBAKA,CAQA,qCACE,yBAGA,iBACA,YAHA,SACA,SAEA,CAGF,2FAEE,sBACA,uBACA,wBAGA,iBADA,UADA,UAGA,UAGF,sCACE,uBACA,UAEF,wCACE,yBAGF,8EAEE,kBAEA,wHACE,yBACA,sBAEF,0HAEE,yCACA,sBAGF,oPAEE,OACA,QACA,gTACE,yBAEA,gCADA,4BACA,CAGJ,8GAEE,QACA,gBAFA,iBAEA,CAGF,wNAME,sBAHA,aACA,kBACA,kBAHA,iBAIA,CAEA,gRACE,aACA,wRAIE,gCADA,gBAFA,uBACA,kBAEA,CAKF,gYACE,yBAIJ,4SAIE,yBADA,cAFA,gBACA,gBAEA,CAEF,oRACE,gBAGA,gBAFA,uBACA,kBACA,CC1GR,iBAIE,aAGA,kDACE,CAHF,qCACA,+BAHA,QASA,mBAXA,cAAc,CACd,YAUA,CAEA,uCAGE,sBADA,QAMA,WAPA,kBAKA,sDACA,4DAEA,mBALA,SAKA,CAGF,2BAcE,kBAXA,sBACA,mBAYA,8BATA,aALA,mBASA,gEACE,CAHF,qCACA,6BAFA,qBAHA,aASA,aAbA,SAeA,CAEF,kCAQE,gCAJA,aAHA,0BAMA,sCAFA,+BACA,wBAJA,iBAMA,CAEA,qCAEE,mBACA,eAFA,gBAIA,SAEF,2DAGE,0BACA,YACA,eAJA,oBACA,SAGA,CAIJ,6BAGE,6BAFA,UACA,cACA,CACA,gCAEE,SACA,gBAFA,iBAEA,CAEF,gCACE,eAIJ,mCACE,2BAEA,gDAEE,cADA,eAGA,QAAO,CADP,SACA,CAEF,gDASE,mBAHA,aALA,eAOA,oBADA,gCAHA,mBAFA,kBACA,eAMA,CAEA,sDACE,iBACA,gBACA,eAEF,oDACE,cAGF,wMAIE,aACA,mBAFA,SAEA,CAGA,yEACE,sBAEA,8EAEE,eAEA,mBAHA,iBAEA,aACA,CAEF,gFACE,uBASA,yBAGA,kBAFA,cARA,oBAAoB,CAIpB,cAAc,CACd,gBAHA,YACA,iBAQA,SACA,SAAQ,CAXR,UAWA,CAEF,wLAGE,sBADA,UACA,CAEF,sFACE,yBAQZ,mBACE,0BACA,YACA,WAEA,eADA,yBACA,CAGF,MACE,aAGF,QASE,kCAJA,yBACA,kBADA,yBAHA,SAMA,YAPA,kBAEA,QAIA,UAEA,CAGF,gBACE,GACE,uBAEF,GACE,yBC7LJ,uBACE,aAGF,yBAME,sBACA,aAGA,kDACE,CAHF,uCACA,oCAPA,QAEA,SACA,WASA,mBAbA,eAEA,YAWA,CAEA,iDAGE,uBAMA,aALA,eACA,gBAJA,mBAOA,YAEA,qBAHA,UAGA","sources":["index.css","App.scss","components/PositionalAxis.scss","components/virtualization/VirtualizedMatrixViewer.scss","components/ResizeSensor.scss","components/virtualization/VirtualScrollbars.scss","common/MolecularStyles.module.scss","components/SequenceLogo.scss","components/minimap/MiniMap.scss","components/PositionalBarplot.scss","components/layout/AlignmentViewerLayout.scss","components/search/SequenceSearch.scss","components/msa-blocks-and-letters/MSABlocksAndLetters.scss","components/alignment-metadata/AlignmentSpreadsheet.scss","components/settings/Settings.scss","components/AlignmentFileLoader.scss"],"sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n","/** App.scss */\nhtml, body {\n //prevent safari from bouncing - updated 11/2023\n height : 100%;\n overflow: hidden;\n position: relative;\n overscroll-behavior-x: none; //prevent safari from going back as well\n}\n\nbody {\n //stop the bouncy at the bottom of a scroll - since the webgl component\n //is only showing a fraction of the alignment, this is irritating when\n //trying to \"fake scroll\" through the alignment\n //TODO: figure out if this can be done on the element (like msa viewer)\n overscroll-behavior-y: none;\n\n //stop the back button swipe, which happens often when going to the start of\n //the alignment\n overscroll-behavior-x: none;\n}\n\n//*{ //stop the back button swipe on safari spcifically. It must be working on some specific\n// overscroll-behavior-x: none;\n//}\n\n#root {\n height: 100vh;\n display: flex;\n flex-direction: column;\n\n .fullscreen-loading-indicator.hidden{\n display: none;\n }\n \n .fullscreen-loading-indicator{\n position: fixed;\n inset: 0;\n background-color: white;\n opacity: 0.8;\n z-index: 1901;\n display: grid;\n place-items: center;\n \n .loader {\n border: 3px solid #f3f3f3; /* Light grey */\n border-top: 3px solid #3498db; /* Blue */\n border-radius: 50%;\n width: 48px;\n height: 48px;\n animation: spin 2s linear infinite;\n position: relative;\n }\n\n .spinner1{\n width: 24px;\n height: 24px;\n position: relative;\n display: grid;\n grid-auto-flow: column;\n place-items: center;\n\n .circleHolder{\n height: 25px;\n width: 25px;\n display: grid;\n place-items: center;\n\n .circle1, .circle2, .circle3{\n height: 25px;\n width: 25px;\n background-color: black;\n border-radius: 50%;\n display: inline-block;\n }\n\n //spinner #1\n .spinner_b2T7z{\n animation:spinner_xe7Qz 0.8s linear infinite;\n }\n .spinner_YRVVz{\n animation-delay:-.65s;\n }\n .spinner_c9oYz{\n animation-delay:-.5s;\n }\n @keyframes spinner_xe7Qz{\n 100%{\n height: 25px;\n width: 25px;\n }\n 50%{\n height: 0px;\n width: 0px;\n }\n }\n }\n }\n\n //spinner #1\n .spinner_b2T7{\n animation:spinner_xe7Q .8s linear infinite\n }\n .spinner_YRVV{\n animation-delay:-.65s\n }\n .spinner_c9oY{\n animation-delay:-.5s\n }\n @keyframes spinner_xe7Q{\n 93.75%,100%{r:3px}46.875%{r:.2px}\n }\n\n //spinner #2\n .spinner_zWVm{\n animation:spinner_5QiW 1.2s linear infinite,spinner_PnZo 1.2s linear infinite\n }\n .spinner_gfyD{\n animation:spinner_5QiW 1.2s linear infinite,spinner_4j7o 1.2s linear infinite;animation-delay:.1s\n }\n .spinner_T5JJ{\n animation:spinner_5QiW 1.2s linear infinite,spinner_fLK4 1.2s linear infinite;animation-delay:.1s\n }\n .spinner_E3Wz{\n animation:spinner_5QiW 1.2s linear infinite,spinner_tDji 1.2s linear infinite;animation-delay:.2s\n }\n .spinner_g2vs{\n animation:spinner_5QiW 1.2s linear infinite,spinner_CMiT 1.2s linear infinite;animation-delay:.2s\n }\n .spinner_ctYB{\n animation:spinner_5QiW 1.2s linear infinite,spinner_cHKR 1.2s linear infinite;animation-delay:.2s\n }\n .spinner_BDNj{\n animation:spinner_5QiW 1.2s linear infinite,spinner_Re6e 1.2s linear infinite;animation-delay:.3s\n }\n .spinner_rCw3{\n animation:spinner_5QiW 1.2s linear infinite,spinner_EJmJ 1.2s linear infinite;animation-delay:.3s\n }\n .spinner_Rszm{\n animation:spinner_5QiW 1.2s linear infinite,spinner_YJOP 1.2s linear infinite;animation-delay:.4s\n }\n @keyframes spinner_5QiW{\n 0%,50%{width:7.33px;height:7.33px}25%{width:1.33px;height:1.33px}\n }\n @keyframes spinner_PnZo{\n 0%,50%{x:1px;y:1px}25%{x:4px;y:4px}\n }\n @keyframes spinner_4j7o{\n 0%,50%{x:8.33px;y:1px}25%{x:11.33px;y:4px}\n }\n @keyframes spinner_fLK4{\n 0%,50%{x:1px;y:8.33px}25%{x:4px;y:11.33px}\n }\n @keyframes spinner_tDji{\n 0%,50%{x:15.66px;y:1px}25%{x:18.66px;y:4px}\n }\n @keyframes spinner_CMiT{\n 0%,50%{x:8.33px;y:8.33px}25%{x:11.33px;y:11.33px}\n }\n @keyframes spinner_cHKR{\n 0%,50%{x:1px;y:15.66px}25%{x:4px;y:18.66px}\n }\n @keyframes spinner_Re6e{\n 0%,50%{x:15.66px;y:8.33px}25%{x:18.66px;y:11.33px}\n }\n @keyframes spinner_EJmJ{\n 0%,50%{x:8.33px;y:15.66px}25%{x:11.33px;y:18.66px}\n }\n @keyframes spinner_YJOP{\n 0%,50%{x:15.66px;y:15.66px}25%{x:18.66px;y:18.66px}\n }\n }\n\n .app-header {\n padding: 0;\n position: relative;\n\n display: flex; // make us of Flexbox\n justify-content: center; // horizontally centers single line items\n\n .settings-box {\n height: 30px;\n width: 100%;\n padding-top: 8px;\n padding-bottom: 16px;\n padding-left: 8px;\n padding-right: 8px;\n font-size: 11px;\n background-color: white;\n\n .settings-header {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 10px;\n justify-content: space-between;\n padding-bottom: 8px;\n border-bottom: solid 1px #e6e6e6;\n\n h2 {\n margin: 0;\n order: 1;\n flex-grow: 1;\n font-size: 2em;\n }\n\n .settings-alignment-description{\n font-size: 10px;\n order: 2;\n flex-grow: 50;\n display: flex;\n flex-direction: column;\n h3 {\n margin: 0;\n }\n h4 {\n margin: 0;\n }\n }\n\n a, button {\n padding: 0px 2px;\n order: 7;\n font-size: 0;\n margin: 0;\n border: 0;\n }\n a.github-link {\n order: 3;\n font-size: 0;\n }\n button.download {\n order: 4;\n }\n button.search-button {\n order: 5;\n }\n button.settings-toggle{\n order: 6;\n }\n }\n }\n }\n\n .app-content {\n position: relative;\n flex: 1;\n }\n}\n\nbutton.button-link {\n background: none !important;\n border: none;\n color: #069;\n text-decoration: underline;\n cursor: pointer;\n}\n\n.hide {\n display: none;\n}\n\n.loader {\n position: absolute;\n bottom: 0;\n right: 0;\n border: 3px solid #f3f3f3; /* Light grey */\n border-top: 3px solid #3498db; /* Blue */\n border-radius: 50%;\n width: 14px;\n height: 14px;\n animation: spin 2s linear infinite;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n","/** PositionalAxis.scss */\n\n.av2-positional-axis {\n white-space: nowrap;\n\n overflow-x: hidden;\n overflow-y: hidden;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n}\n.av2-positional-axis::-webkit-scrollbar {\n background: transparent;\n height: 0;\n} \n\n","/** VirtualizedMatrixViewer.scss */\n@use 'sass:math';\n\n$hoverTrackerSize: 5;\n$hoverTrackerSizePx: #{$hoverTrackerSize}px;\n$hoverTrackerSizeHalfPx: #{math.div($hoverTrackerSize, 2)}px;\n\n\n.av2-virtualized-matrix {\n //overflow-x: hidden;\n //overflow-y: hidden;\n position: absolute;\n inset: 0;\n\n .scrolled-indicator{\n position: absolute;\n inset: 0;\n z-index: 1001;\n pointer-events: none;\n }\n\n .av2-wheel-scroller{\n position: absolute;\n inset: 0;\n cursor: default;\n\n .hover-tracker-y,\n .hover-tracker-x{\n position: fixed;\n z-index: 1000;\n pointer-events: none;\n }\n \n .triangle-up{\n width: 0;\n height: 0;\n border-left: $hoverTrackerSizeHalfPx solid transparent;\n border-right: $hoverTrackerSizeHalfPx solid transparent;\n border-bottom: $hoverTrackerSizePx solid red;\n }\n .triangle-down{\n width: 0;\n height: 0;\n border-left: $hoverTrackerSizeHalfPx solid transparent;\n border-right: $hoverTrackerSizeHalfPx solid transparent;\n border-top: $hoverTrackerSizePx solid red;\n }\n .triangle-left{\n width: 0;\n height: 0;\n border-bottom: $hoverTrackerSizeHalfPx solid transparent;\n border-top: $hoverTrackerSizeHalfPx solid transparent;\n border-right: $hoverTrackerSizePx solid red;\n }\n .triangle-right{\n width: 0;\n height: 0;\n border-bottom: $hoverTrackerSizeHalfPx solid transparent;\n border-top: $hoverTrackerSizeHalfPx solid transparent;\n border-left: $hoverTrackerSizePx solid red;\n }\n }\n\n .av2-data {\n position: absolute;\n //pointer-events: none;\n inset: 0;\n }\n}\n\n\n:export{\n hoverTrackerSize: $hoverTrackerSize;\n}","/** ResizeSensor.scss */\n\n.resize-sensor-holder {\n position: absolute;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n pointer-events: none;\n overflow: hidden;\n z-index: -1;\n max-width: 100%;\n visibility: hidden;\n}\n",".vertical-scrollbar-holder {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n //background-color: rgba(255, 255, 255, 0.5);\n\n .vertical-scrollbar {\n position: absolute;\n border-radius: 4px;\n background-color: rgba(0, 0, 0, 0.5);\n }\n .vertical-scrollbar:hover {\n background-color: rgba(0, 0, 0, 0.6);\n }\n .vertical-scrollbar:active {\n background-color: rgba(0, 0, 0, 0.8);\n }\n}\n\n.vertical-scrollbar-fullpage-drag {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n}\n\n.horizontal-scrollbar-holder {\n position: absolute;\n right: 0;\n left: 0;\n bottom: 0;\n //background-color: rgba(150, 0, 0, 0.5);\n\n .horizontal-scrollbar {\n position: absolute;\n border-radius: 4px;\n background-color: rgba(0, 0, 0, 0.5);\n }\n .horizontal-scrollbar:hover {\n background-color: rgba(0, 0, 0, 0.6);\n }\n .horizontal-scrollbar:active {\n background-color: rgba(0, 0, 0, 0.8);\n }\n}\n\n.horizontal-scrollbar-fullpage-drag {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n}\n","/**\n * MolecularStyles.module.scss\n * \n * Style definitions for amino acids and nucleotides in e.g. an alignment or logo.\n * \n * INDIVIDUAL AMINO ACID / NUCLEOTIDE CLASSES\n * The Ace editor prefixes all classes it adds in the alignment mode with \"resi_\". Because\n * of this, any other components (e.g., logo plots) should also apply classes with this\n * prefix. Amino acids and nucleotides will be styled with the single letter upper case\n * character, prefixed with resi_ (e.g., Alanine and Adenine would both be resi_A).\n * \n * Positional modifying classes can be accessed via 4 exported parameters:\n * queryClass: final resi_ prefixed class name to indicate a residue matches \n * the query sequence \n * consensusClass: final resi_ prefixed class name to indicate a residue matches \n * the consensus sequence\n *\n * TOP LEVEL STYLING\n * Style of an alignment or logo are dictated by 3 parent element classes #1, #2, #3.\n * All 3 are required and must be on the same parent element. The top level classes\n * are \"exported\" and should be read by typescript and the value placed as the classes:\n * Class Exported Parameter Description\n * ----- ------------------ -----------\n * #1 aaAlignTypeClass style alignment as amino acid sequences\n * #1 ntAlignTypeClass style alignment as nucleotide sequences\n *\n * #2 styPosAllClass style all positions \n * #2 styPosQueryClass style only positions that have the resi_query class \n * #2 styPosQueryDiffClass style only positions that don't have the resi_query class \n * #2 styPosConsensusClass style only positions that have the resi_consensus class \n * #2 styPosConsensusDiffClass style only positions that don't have the resi_consensus class \n *\n * #3 aaStyClass_{STYLENAME} amino acid style with name {STYLENAME} excluding curly braces\n * #3 aaStyColorOrder_{STYLENAME} order of amino acids in the colors object for this style. this\n * string is comma space (, ) delimited.\n * #3 aaStyColors_{STYLENAME} colors for all amino acids for this style. this string is \n * comma space (, ) delimited.\n * #3 ntStyClass_{STYLENAME} nucleotide style with name {STYLENAME} excluding curly braces\n * #3 ntStyColorOrder_{STYLENAME} order of nucleotides in the colors object for this style. this\n * string is comma space (, ) delimited.\n * #3 ntStyColors_{STYLENAME} colors for all nucleotides for this style. this string is \n * comma space (, ) delimited.\n *\n *\n * Example: e.g.:\n *
\n * || \n *
\n */\n\n@use 'sass:math';\n\n//general props\n$resiPrefix: resi_;\n$queryClass: q;\n$consensusClass: c;\n$residueParentClass: $resiPrefix + line; //directly above residues\n\n//general global propsqueryClass\n$aaStyleClassPrefix: aa-alignment-style-;\n$ntStyleClassPrefix: nt-alignment-style-;\n$styPosClassPrefix: alignment-positions-tostyle-;\n$defaultBackgroundAlpha: 0.25;\n$defaultLetterColor: #cccccc;\n\n//residue style\n$darkHueClass: dark-residues;\n$lightHueClass: light-residues;\n$lettersOnlyHueClass: letters-only-residues;\n\n//which positions should get styled?\n$styPosAll: $styPosClassPrefix + all;\n$styPosQuery: $styPosClassPrefix + query;\n$styPosQueryDiff: $styPosClassPrefix + query-diff;\n$styPosConsensus: $styPosClassPrefix + consensus;\n$styPosConsensusDiff: $styPosClassPrefix + consensus-diff;\n\n/*\n *\n * COLOR SCHEMES\n * most colors taken from / inspired by https://github.com/wilzbach/msa-colorschemes\n * and https://www.jalview.org/help/html/colourSchemes/\n *\n */\n\n//amino acid props\n$aaProps: (\n topLevelAlignmentClass: alignment-aa,\n styles: (\n Default: (\n description: \"Default\",\n topLevelClass: $aaStyleClassPrefix + default,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #33cc00,\n R: #cc0000,\n N: #6600cc,\n D: #0033ff,\n C: #ffff00,\n Q: #6600cc,\n E: #0033ff,\n G: #33cc00,\n H: #009900,\n I: #33cc00,\n L: #33cc00,\n K: #cc0000,\n M: #33cc00,\n F: #009900,\n P: #33cc00,\n S: #0099ff,\n T: #0099ff,\n W: #009900,\n Y: #009900,\n V: #33cc00,\n ),\n ),\n Buried: (\n description: \"Buried Index\",\n topLevelClass: $aaStyleClassPrefix + buried,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #00a35c,\n R: #00fc03,\n N: #00eb14,\n D: #00eb14,\n C: #0000ff,\n Q: #00f10e,\n E: #00f10e,\n G: #009d62,\n H: #00d52a,\n I: #0054ab,\n L: #007b84,\n K: #00ff00,\n M: #009768,\n F: #008778,\n P: #00e01f,\n S: #00d52a,\n T: #00db24,\n W: #00a857,\n Y: #00e619,\n V: #005fa0,\n B: #00eb14,\n //X: #00b649,\n Z: #00f10e,\n ),\n ),\n Cinema: (\n description: \"Cinema\",\n topLevelClass: $aaStyleClassPrefix + cinema,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #bbbbbb,\n B: #808080,\n C: #ffff00,\n D: #ff0000,\n E: #ff0000,\n F: #ff00ff,\n G: #a52a2a,\n H: #00ffff,\n I: #bbbbbb,\n J: #ffffff,\n K: #00ffff,\n L: #bbbbbb,\n M: #bbbbbb,\n N: #008000,\n O: #ffffff,\n P: #a52a2a,\n Q: #008000,\n R: #00ffff,\n S: #008000,\n T: #008000,\n U: #ffffff,\n V: #bbbbbb,\n W: #ff00ff,\n //X: #808080,\n Y: #ff00ff,\n Z: #808080,\n ),\n ),\n /* // WEIRD white background on N and Q\n Clustal: (\n description: \"Clustal\",\n topLevelClass: $aaStyleClassPrefix + clustal,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #ffa500,\n B: #ffffff,\n C: #008000,\n D: #ff0000,\n E: #ff0000,\n F: #0000ff,\n G: #ffa500,\n H: #ff0000,\n I: #008000,\n J: #ffffff,\n K: #ff0000,\n L: #008000,\n M: #008000,\n N: #ffffff,\n O: #ffffff,\n P: #ffa500,\n Q: #ffffff,\n R: #ff0000,\n S: #ffa500,\n T: #ffa500,\n U: #ffffff,\n V: #008000,\n W: #0000ff,\n //X: #ffffff,\n Y: #0000ff,\n Z: #ffffff,\n ),\n ),*/\n Clustal: (\n description: \"Clustal\",\n topLevelClass: $aaStyleClassPrefix + clustal,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #80a0f0,\n R: #f01505,\n N: #00ff00,\n D: #c048c0,\n C: #f08080,\n Q: #00ff00,\n E: #c048c0,\n G: #f09048,\n H: #15a4a4,\n I: #80a0f0,\n L: #80a0f0,\n K: #f01505,\n M: #80a0f0,\n F: #80a0f0,\n P: #ffff00,\n S: #00ff00,\n T: #00ff00,\n W: #80a0f0,\n Y: #15a4a4,\n V: #80a0f0,\n B: #ffffff,\n //X: #ffffff,\n Z: #ffffff,\n ),\n ),\n Helix: (\n description: \"Helix Propensity\",\n topLevelClass: $aaStyleClassPrefix + helix,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #e718e7,\n R: #6f906f,\n N: #1be41b,\n D: #778877,\n C: #23dc23,\n Q: #926d92,\n E: #ff00ff,\n G: #00ff00,\n H: #758a75,\n I: #8a758a,\n L: #ae51ae,\n K: #a05fa0,\n M: #ef10ef,\n F: #986798,\n P: #00ff00,\n S: #36c936,\n T: #47b847,\n W: #8a758a,\n Y: #21de21,\n V: #857a85,\n B: #49b649,\n //X: #758a75,\n Z: #c936c9,\n ),\n ),\n Hydrophobicity: (\n description: \"Hydrophobicity\",\n topLevelClass: $aaStyleClassPrefix + hydrophobicity,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n /*\n colors based on: https://www.sigmaaldrich.com/life-science/metabolomics/learning-center/amino-acid-reference-chart.html\n to get hex in python:\n from matplotlib import cm\n def rgb2hex(r,g,b):\n return \"#{:02x}{:02x}{:02x}\".format(r,g,b)\n\n redBlueColormap = cm.get_cmap('bwr', 155)\n aas = { \n 'F': 100, 'I': 99, 'W': 97, 'L': 97, 'V': 76, 'M': 74, 'Y': 63, \n 'C': 49, 'A': 41, 'T': 13, 'H': 8, 'G': 0, 'S': -5, 'Q': -10, \n 'R': -14, 'K': -23, 'N': -28, 'E': -31, 'P': -46, 'D': -55\n }\n\n //normalize and convert to rgb\n rgba = {}\n for aa in aas.keys(): \n rgba[aa] = redBlueColormap(aas[aa]+55)\n\n hex = {}\n for aa in aas.keys(): \n hex[aa] = rgb2hex(int(rgba[aa][0]*255), int(rgba[aa][1]*255), int(rgba[aa][2]*255))\n\n print(hex);\n */\n colors:\n (\n F: #ff0000,\n I: #ff0000,\n W: #ff0606,\n L: #ff0606,\n V: #ff4c4c,\n M: #ff5252,\n Y: #ff7777,\n C: #ffa5a5,\n A: #ffc0c0,\n T: #e1e1ff,\n H: #d0d0ff,\n G: #b6b6ff,\n S: #a5a5ff,\n Q: #9595ff,\n R: #8787ff,\n K: #6969ff,\n N: #5959ff,\n E: #4f4fff,\n P: #1d1dff,\n D: #0000ff,\n ),\n ),\n Lesk: (\n description: \"Lesk\",\n topLevelClass: $aaStyleClassPrefix + lesk,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #ffa500,\n B: #ffffff,\n C: #008000,\n D: #ff0000,\n E: #ff0000,\n F: #008000,\n G: #ffa500,\n H: #ff00ff,\n I: #008000,\n J: #ffffff,\n K: #ff0000,\n L: #008000,\n M: #008000,\n N: #ff00ff,\n O: #ffffff,\n P: #008000,\n Q: #ff00ff,\n R: #ff0000,\n S: #ffa500,\n T: #ffa500,\n U: #ffffff,\n V: #008000,\n W: #008000,\n // X: #ffffff,\n Y: #008000,\n Z: #ffffff,\n ),\n ),\n MAE: (\n description: \"MAE\",\n topLevelClass: $aaStyleClassPrefix + mae,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #77dd88,\n B: #ffffff,\n C: #99ee66,\n D: #55bb33,\n E: #55bb33,\n F: #9999ff,\n G: #77dd88,\n H: #5555ff,\n I: #66bbff,\n J: #ffffff,\n K: #ffcc77,\n L: #66bbff,\n M: #66bbff,\n N: #55bb33,\n O: #ffffff,\n P: #eeaaaa,\n Q: #55bb33,\n R: #ffcc77,\n S: #ff4455,\n T: #ff4455,\n U: #ffffff,\n V: #66bbff,\n W: #9999ff,\n //X: #ffffff,\n Y: #9999ff,\n Z: #ffffff,\n ),\n ),\n Strand: (\n description: \"Strand Propensity\",\n topLevelClass: $aaStyleClassPrefix + strand,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #5858a7,\n R: #6b6b94,\n N: #64649b,\n D: #2121de,\n C: #9d9d62,\n Q: #8c8c73,\n E: #0000ff,\n G: #4949b6,\n H: #60609f,\n I: #ecec13,\n L: #b2b24d,\n K: #4747b8,\n M: #82827d,\n F: #c2c23d,\n P: #2323dc,\n S: #4949b6,\n T: #9d9d62,\n W: #c0c03f,\n Y: #d3d32c,\n V: #ffff00,\n B: #4343bc,\n //X: #797986,\n Z: #4747b8,\n ),\n ),\n Taylor: (\n description: \"Taylor\",\n topLevelClass: $aaStyleClassPrefix + taylor,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #ccff00,\n R: #0000ff,\n N: #cc00ff,\n D: #ff0000,\n C: #ffff00,\n Q: #ff00cc,\n E: #ff0066,\n G: #ff9900,\n H: #0066ff,\n I: #66ff00,\n L: #33ff00,\n K: #6600ff,\n M: #00ff00,\n F: #00ff66,\n P: #ffcc00,\n S: #ff3300,\n T: #ff6600,\n W: #00ccff,\n Y: #00ffcc,\n V: #99ff00,\n B: #ffffff,\n //X: #ffffff,\n Z: #ffffff,\n ),\n ),\n Turn: (\n description: \"Turn Propensity\",\n topLevelClass: $aaStyleClassPrefix + turn,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #2cd3d3,\n R: #708f8f,\n N: #ff0000,\n D: #e81717,\n C: #a85757,\n Q: #3fc0c0,\n E: #778888,\n G: #ff0000,\n H: #708f8f,\n I: #00ffff,\n L: #1ce3e3,\n K: #7e8181,\n M: #1ee1e1,\n F: #1ee1e1,\n P: #f60909,\n S: #e11e1e,\n T: #738c8c,\n W: #738c8c,\n Y: #9d6262,\n V: #07f8f8,\n B: #f30c0c,\n //X: #7c8383,\n Z: #5ba4a4,\n ),\n ),\n Zappo: (\n description: \"Zappo\",\n topLevelClass: $aaStyleClassPrefix + zappo,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #ffafaf,\n R: #6464ff,\n N: #00ff00,\n D: #ff0000,\n C: #ffff00,\n Q: #00ff00,\n E: #ff0000,\n G: #ff00ff,\n H: #6464ff,\n I: #ffafaf,\n L: #ffafaf,\n K: #6464ff,\n M: #ffafaf,\n F: #ffc800,\n P: #ff00ff,\n S: #00ff00,\n T: #00ff00,\n W: #ffc800,\n Y: #ffc800,\n V: #ffafaf,\n B: #ffffff,\n //X: #ffffff,\n Z: #ffffff,\n ),\n ),\n ),\n);\n\n//amino acid props\n$ntProps: (\n topLevelAlignmentClass: alignment-nt,\n styles: (\n Default: (\n description: \"Default\",\n topLevelClass: $ntStyleClassPrefix + default,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #5050ff,\n C: #e00000,\n G: #00c000,\n T: #e6e600,\n U: #cc9900,\n R: #2e8b57,\n Y: #ff8c00,\n ),\n ),\n Nucleotide: (\n description: \"Nucleotide\",\n topLevelClass: $ntStyleClassPrefix + nucleotide,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #64f73f,\n C: #ffb340,\n G: #eb413c,\n T: #3c88ee,\n U: #3c88ee,\n ),\n ),\n Purine: (\n description: \"Purine/Pyrimidine\",\n topLevelClass: $ntStyleClassPrefix + purine,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #ff83fa,\n C: #40e0d0,\n G: #ff83fa,\n R: #ff83fa,\n T: #40e0d0,\n U: #40e0d0,\n Y: #40e0d0,\n ),\n ),\n ),\n);\n\n/*\n *\n *\n * FUNCTIONS\n *\n *\n */\n\n//get the equivalant hex color of an alpha-transformed hex.\n//see: https://makandracards.com/makandra/42500-sass-how-to-convert-an-rgba-color-to-its-rgb-look-alike\n@function getNonTransparantAlphaEquivalant($color, $alpha) {\n @return mix($color, #fff, $alpha * 100%);\n}\n\n//same as getNonTransparantAlphaEquivalant but in bulk (takes a list rather\n//than a single color)\n@function getNonTransparantAlphaEquivalantList($colorsArr, $alpha) {\n $toReturn: ();\n @each $color in $colorsArr {\n $toReturn: append(\n $toReturn,\n getNonTransparantAlphaEquivalant($color, $alpha),\n $separator: comma\n );\n }\n @return $toReturn;\n}\n\n//see https://stackoverflow.com/questions/11867545\n@function brightness($color) {\n @return math.div((red($color) * 299) + (green($color) * 587) + (blue($color) * 114), 1000);\n //@return ((red($color) * 299) + (green($color) * 587) + (blue($color) * 114)) /\n // 1000;\n}\n\n//get the letter color for the dark color scheme depending on the lightness\n//of the background: will return black if the background color is light and\n//white if the background color is dark\n@function getLetterColor($bgColor) {\n $letterColor: white;\n @if brightness($bgColor) > 125 {\n $letterColor: black;\n }\n @return $letterColor;\n}\n\n//same as getLetterColor but in bulk (takes a list rather\n//than a single color)\n@function getLetterColors($bgColorsArr) {\n $toReturn: ();\n @each $bgColor in $bgColorsArr {\n $toReturn: append($toReturn, getLetterColor($bgColor), $separator: comma);\n }\n @return $toReturn;\n}\n\n//\n//Output all selectors for nt and aa props.\n//\n@mixin outputMajorSelectors($propsObj) {\n $alignmentClass: map-get($propsObj, topLevelAlignmentClass);\n\n @each $styleName, $styleObj in map-get($propsObj, styles) {\n $styleClass: map-get($styleObj, topLevelClass);\n $backgroundAlpha: map-get($styleObj, backgroundAlpha);\n\n //set default letter color for letters - used for unstyled residues\n // (i.e., dashes, dots, unrecognized letters, lowercase letters)\n $defaultColor: map-get($styleObj, defaultLetterColor);\n :global\n .#{$alignmentClass}\n .#{$residueParentClass}\n [class^=\"#{$resiPrefix}\"] {\n color: $defaultColor;\n fill: $defaultColor;\n }\n\n //\n // letters only class - this is a trick that relies on the the\n // default \"light hue\" class to actually color the residues, then\n // using lettersOnlyHueClass only removes the background\n //\n :global\n .#{$alignmentClass}.#{$lettersOnlyHueClass}\n [class^=\"#{$resiPrefix}\"] {\n background-color: transparent !important;\n }\n\n @each $aa, $color in map-get($styleObj, colors) {\n $aaClass: $resiPrefix + $aa;\n\n //\n // dark hues\n //\n :global\n .#{$alignmentClass}.#{$darkHueClass}.#{$styleClass}.#{$styPosAll}\n .#{$aaClass},\n :global\n .#{$alignmentClass}.#{$darkHueClass}.#{$styleClass}.#{$styPosConsensus}\n .#{$aaClass}.#{$consensusClass},\n :global\n .#{$alignmentClass}.#{$darkHueClass}.#{$styleClass}.#{$styPosConsensusDiff}\n .#{$aaClass}:not(.#{$consensusClass}),\n :global\n .#{$alignmentClass}.#{$darkHueClass}.#{$styleClass}.#{$styPosQuery}\n .#{$aaClass}.#{$queryClass},\n :global\n .#{$alignmentClass}.#{$darkHueClass}.#{$styleClass}.#{$styPosQueryDiff}\n .#{$aaClass}:not(.#{$queryClass}) {\n //set letter color based on brightness of background color\n color: getLetterColor($color) !important;\n background-color: $color !important;\n }\n\n //\n // light hues - default of no class is added and also for logo\n //\n :global .#{$alignmentClass}.#{$styleClass}.#{$styPosAll} .#{$aaClass},\n :global\n .#{$alignmentClass}.#{$styleClass}.#{$styPosConsensus}\n .#{$aaClass}.#{$consensusClass},\n :global\n .#{$alignmentClass}.#{$styleClass}.#{$styPosConsensusDiff}\n .#{$aaClass}:not(.#{$consensusClass}),\n :global\n .#{$alignmentClass}.#{$styleClass}.#{$styPosQuery}\n .#{$aaClass}.#{$queryClass},\n :global\n .#{$alignmentClass}.#{$styleClass}.#{$styPosQueryDiff}\n .#{$aaClass}:not(.#{$queryClass}) {\n color: $color;\n background-color: getNonTransparantAlphaEquivalant(\n $color,\n $backgroundAlpha\n );\n fill: $color;\n }\n }\n }\n}\n\n/*\n *\n *\n * OUTPUT CSS\n *\n *\n */\n@include outputMajorSelectors($aaProps);\n@include outputMajorSelectors($ntProps);\n\n/*\n *\n * EXPORT\n * export alignment type classes, color scheme classes, position coloring classes,\n * and then individual colors for use in javascript.\n *\n */\n:export {\n resiPrefix: $resiPrefix;\n queryClass: $queryClass;\n consensusClass: $consensusClass;\n queryClass: $queryClass;\n consensusClass: $consensusClass;\n residueParentClass: $residueParentClass;\n darkHueClass: $darkHueClass;\n lightHueClass: $lightHueClass;\n lettersOnlyHueClass: $lettersOnlyHueClass;\n\n aaAlignTypeClass: map-get($aaProps, topLevelAlignmentClass);\n ntAlignTypeClass: map-get($ntProps, topLevelAlignmentClass);\n\n styPosAllClass: $styPosAll;\n styPosQueryClass: $styPosQuery;\n styPosQueryDiffClass: $styPosQueryDiff;\n styPosConsensusClass: $styPosConsensus;\n styPosConsensusDiffClass: $styPosConsensusDiff;\n}\n\n//export colors for amino acids\n:export {\n @each $styleName, $styleObj in map-get($aaProps, styles) {\n #{unquote(\"aaStyClass_\"+$styleName)}: map-get($styleObj, topLevelClass);\n #{unquote(\"aaStyDesc_\"+$styleName)}: unquote(\n map-get($styleObj, description)\n );\n #{unquote(\"aaStyDefaultLetterColor_\"+$styleName)}: map-get(\n $styleObj,\n defaultLetterColor\n );\n #{unquote(\"aaStyBackgroundAlpha_\"+$styleName)}: map-get(\n $styleObj,\n backgroundAlpha\n );\n #{unquote(\"aaStyColorOrder_\"+$styleName)}: map-keys(\n map-get($styleObj, colors)\n );\n #{unquote(\"aaStyColors_\"+$styleName)}: map-values(\n map-get($styleObj, colors)\n );\n #{unquote(\"aaStyBackgroundColorsLightTheme_\"+$styleName)}: getNonTransparantAlphaEquivalantList(\n map-values(map-get($styleObj, colors)),\n map-get($styleObj, backgroundAlpha)\n );\n #{unquote(\"aaStyLetterColorsDarkTheme_\"+$styleName)}: getLetterColors(\n map-values(map-get($styleObj, colors))\n );\n }\n}\n//export colors for nucleotides\n:export {\n @each $styleName, $styleObj in map-get($ntProps, styles) {\n #{unquote(\"ntStyClass_\"+$styleName)}: map-get($styleObj, topLevelClass);\n #{unquote(\"ntStyDesc_\"+$styleName)}: unquote(\n map-get($styleObj, description)\n );\n #{unquote(\"ntStyDefaultLetterColor_\"+$styleName)}: map-get(\n $styleObj,\n defaultLetterColor\n );\n #{unquote(\"ntStyBackgroundAlpha_\"+$styleName)}: map-get(\n $styleObj,\n backgroundAlpha\n );\n #{unquote(\"ntStyColorOrder_\"+$styleName)}: map-keys(\n map-get($styleObj, colors)\n );\n #{unquote(\"ntStyColors_\"+$styleName)}: map-values(\n map-get($styleObj, colors)\n );\n #{unquote(\"ntStyBackgroundColorsLightTheme_\"+$styleName)}: getNonTransparantAlphaEquivalantList(\n map-values(map-get($styleObj, colors)),\n map-get($styleObj, backgroundAlpha)\n );\n #{unquote(\"ntStyLetterColorsDarkTheme_\"+$styleName)}: getLetterColors(\n map-values(map-get($styleObj, colors))\n );\n }\n}\n","/** SequenceLogo.scss */\n\n.sequence-logo-holder::-webkit-scrollbar {\n background: transparent; // make scrollbar transparent\n height: 0;\n}\n\n.sequence-logo-holder {\n overflow-x: auto;\n overflow-y: hidden;\n position: absolute;\n\n rect.interaction-placeholder {\n opacity: 0;\n }\n\n .sequence-logo-tooltip-container {\n margin: 0;\n z-index: 1002;\n\n .logo-tooltip {\n pointer-events: all;\n display: table;\n width: auto;\n line-height: 16px;\n font-size: 12px;\n\n h1 {\n text-align: center;\n padding-bottom: 4px;\n margin: 0;\n font-size: 13px;\n }\n\n .row {\n display: table-row;\n width: auto;\n clear: both;\n }\n\n .col {\n float: left;\n display: table-column;\n text-align: center;\n width: 60px;\n line-height: 16px;\n }\n\n .col.header {\n font-weight: bold;\n margin-bottom: 5px;\n }\n\n .legend-square {\n width: 12px;\n height: 12px;\n margin-top: 2px;\n margin-bottom: 2px;\n }\n .name {\n width: 100px;\n }\n }\n }\n}\n","/** MiniMap.scss */\n\n.minimap{\n z-index: 100;\n position: absolute;\n inset: 0;\n \n display: grid;\n grid-template-rows: 10px auto 10px;\n grid-template-areas: \"header\" \"minimap\" \"footer\";\n\n .minimap-header{\n grid-area: header;\n font-size: 9px;\n place-self: center;\n }\n .minimap-app-holder{\n grid-area: minimap;\n position: absolute;\n inset: 0;\n \n .minimap-canvas-holder{\n position: absolute;\n inset: 0;\n\n canvas{\n image-rendering: optimizeSpeed;\n image-rendering: -moz-crisp-edges;\n image-rendering: -webkit-optimize-contrast;\n image-rendering: optimize-contrast;\n image-rendering: pixelated;\n -ms-interpolation-mode: nearest-neighbor;\n position: absolute;\n inset: 0;\n }\n }\n .minimap-interaction{\n position: absolute;\n inset: 0;\n }\n }\n .minimap-footer{\n grid-area: footer;\n font-size: 9px;\n place-self: center;\n }\n}\n\n.minimap-dragger{\n position: absolute;\n left: 0; \n right:0;\n cursor: move; // fallback if grab cursor is unsupported\n cursor: grab;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n}\n\n.minimap-full-page-drag-detector{\n position: fixed;\n inset: 0;\n opacity: 0;\n background-color: white;\n z-index: 2001;\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n}\n","/** PositionalBarplot.scss */\n\n.barplot::-webkit-scrollbar {\n background: transparent; // make scrollbar transparent\n height: 0;\n}\n\n.barplot {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n\n svg {\n .position-container rect.interaction-placeholder {\n fill-opacity: 0;\n stroke: none;\n }\n .position-container rect.interaction-placeholder-full {\n fill-opacity: 0;\n stroke: none;\n }\n }\n\n .barplot-tooltip-holder{\n margin: 0;\n z-index: 1002;\n \n .bar-position-textblock {\n pointer-events: all;\n h1 {\n text-align: center;\n padding-bottom: 4px;\n margin: 0;\n font-size: 14px;\n }\n .dataseries-line {\n line-height: 16px;\n font-size: 13px;\n }\n .legend-square {\n width: 8px;\n height: 8px;\n display: inline-block;\n margin-right: 6px;\n }\n }\n }\n}\n","/** AlignmentViewerLayout.scss */\n\n.full-screen-resize-dragger{\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n opacity: 0;\n background-color: white;\n z-index: 1800;\n cursor: col-resize;\n}\n.full-screen-resize-dragger.horizontal{\n cursor: col-resize;\n}\n.full-screen-resize-dragger.vertical{\n cursor: row-resize;\n}\n\n.alignment-viewer-2{\n position: absolute;\n display: grid;\n align-items: center;\n\n .content{\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n .metadata-title{\n position: relative;\n text-align: right;\n font-weight: bold;\n font-size: 14px; \n }\n .minimap-content{\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n //resizers\n .horizontal-resizer,\n .vertical-resizer{\n background-color: #f2f2f2;\n }\n .horizontal-resizer{\n cursor: ew-resize;\n }\n .vertical-resizer{\n cursor: ns-resize;\n }\n .horizontal-resizer.hovered,\n .vertical-resizer.hovered{\n background-color: #0099ff;\n border-left-color: #0099ff;\n border-right-color: #0099ff;\n opacity: 0.2;\n }\n .horizontal-resizer.resizing,\n .vertical-resizer.resizing{\n background-color: #0099ff;\n border-left-color: #0099ff;\n border-right-color: #0099ff;\n }\n\n .horizontal-resizer{\n height: 100%;\n }\n .vertical-resizer{\n width: 100%;\n height: 100%;\n }\n}\n","/** SequenceSearch.scss */\n\n.background-behind-search-box{\n position: fixed;\n inset: 0;\n background-color: white;\n z-index: 10000;\n \n transition: opacity 200ms ease-in, visibility 200ms ease-in;\n transition: opacity 200ms ease-out, visibility 200msms ease-out;\n opacity: 0.75;\n visibility: visible;\n}\n\n.search-box-grid{\n position: absolute;\n top: 0;\n bottom: 50px;\n left: 100px;\n right: 100px;\n z-index: 10001;\n display: grid;\n grid-template-columns: auto;\n grid-template-rows: 1fr;\n grid-template-areas: \"search-area\";\n\n .search-box-contents{\n position: relative;\n background-color: white;\n grid-area: search-area;\n border-radius: 10px;\n box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5);\n overflow: hidden;\n\n display: grid;\n grid-template-columns: 5px 9fr 5px;\n grid-template-rows: 10px 20px 30px 20px 1fr 5px;\n grid-template-areas: \n \". . .\"\n \". search-bar .\"\n \". search-options-bar .\"\n \". search-bar-results-separator .\"\n \". search-results .\"\n \". . .\"\n ;\n font-size: 12px;\n\n .search-options-bar{\n grid-area: search-options-bar;\n place-self: center;\n display: grid;\n grid-auto-flow: column;\n grid-column-gap: 5px;\n place-items: center;\n\n select, input, label{\n display: inline-block;\n margin: 0;\n }\n \n .stepper{\n //border: solid 1px gray;\n padding: 0 12px 0 0;\n display: inline-grid;\n grid-auto-flow: column;\n place-items: center;\n\n span{\n line-height: 20px;\n font-size: 15px;\n padding: 0 8px;\n font-weight: bolder;\n }\n button{\n background-color: transparent;\n\n display:inline-block;\n width: 20px;\n height: 20px;\n line-height: 20px; // border is the extra 2 px\n font-size:15px; \n font-weight: 900;\n\n border: solid rgb(100, 100, 100) 1px;\n color: rgb(100, 100, 100);\n\n border-radius: 50%;\n margin: 0;\n padding: 0;\n }\n button:disabled,\n button:disabled:hover{\n opacity: 0.4;\n background-color: white;\n }\n button:hover{\n background-color: rgb(241, 241, 241);\n }\n }\n }\n \n .search-bar{\n grid-area: search-bar;\n justify-self: stretch;\n align-self: start;\n display: grid;\n grid-template-columns: 1fr 3fr 2fr;\n grid-template-rows: 100%;\n grid-template-areas: \n \"search-input-label search-input matches\";\n \n\n label{\n grid-area: search-input-label;\n align-self: center;\n justify-self: end;\n }\n input{\n grid-area: search-input;\n width: 100%;\n }\n span{\n grid-area: matches;\n align-self: center;\n justify-self: center;\n }\n }\n\n .search-bar-results-separator{\n grid-area: search-bar-results-separator;\n margin-top: 10px;\n border-top: solid 2px #c2c2c2;\n }\n .search-results{\n grid-area: search-results;\n overflow: scroll;\n position: relative;\n }\n button.button-link.close{\n position: absolute;\n top: 8px;\n right: 8px;\n padding: 0;\n background: none !important;\n border: none;\n color: #069;\n text-decoration: underline;\n cursor: pointer;\n }\n }\n}","/** WebGLAlignmentComponent.scss */\n\n// make scrollbar transparent on query and consensus sequences\n.query .av2-blocksandletters::-webkit-scrollbar,\n.consensus .av2-blocksandletters::-webkit-scrollbar {\n background: transparent;\n height: 0;\n}\n\n.av2-blocksandletters .av2-blocks.canvas-holder.hidden canvas {\n display: none;\n}\n\n.av2-blocksandletters {\n overflow-x: hidden;\n overflow-y: hidden;\n position: absolute;\n inset: 0;\n}\n\n.av2-blocks.canvas-holder{\n position: absolute;\n inset: 0;\n overflow: hidden;\n\n .loader-holder {\n position: absolute;\n inset: 0;\n display: grid;\n place-items: center;\n .loader{\n border: 3px solid #f3f3f3; /* Light grey */\n border-top: 3px solid #3498db; /* Blue */\n border-radius: 50%;\n width: 48px;\n height: 48px;\n animation: spin 2s linear infinite;\n position: relative;\n }\n }\n\n canvas {\n image-rendering: optimizeSpeed;\n image-rendering: -moz-crisp-edges;\n image-rendering: -webkit-optimize-contrast;\n image-rendering: optimize-contrast;\n image-rendering: pixelated;\n -ms-interpolation-mode: nearest-neighbor;\n }\n}\n\n.av2-letters.sequence-text-holder {\n position: absolute;\n white-space: nowrap;\n\n .letters-with-specific-color {\n position: absolute;\n top: 0;\n left: 0;\n\n //disallow selection: https://stackoverflow.com/questions/826782/how-to-disable-text-selection-highlighting\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n pointer-events: none;\n }\n}\n.hidden-residues-for-copy-paste {\n position: absolute;\n white-space: nowrap;\n \n overflow-x: hidden;\n overflow-y: hidden;\n top: 0;\n left: 0;\n color: rgba(0, 0, 0, 0);\n pointer-events: all;\n}\n","/** AlignmentSpreadsheet.scss */\n\n.av2-spreadsheet{\n position: absolute;\n inset:0;\n display: grid;\n grid-template-areas:\n \"pinned-table unpinned-table\";\n grid-template-rows: auto;\n //overflow: clip;\n\n //grid-template-columns: 100px 300px;\n //grid-template-areas: \"pinned-columns unpinned-columns\";\n //grid-template-rows: auto;\n //overflow-x: hidden;\n //overflow-y: hidden;\n .horizontal-resizer{\n background-color: #d0d0d0; \n margin: 0;\n padding: 0;\n cursor: ew-resize;\n height: 100%;\n }\n \n .horizontal-resizer.hovered, \n .horizontal-resizer.resizing {\n background-color: #0099ff;\n border-left-color: #0099ff;\n border-right-color: #0099ff;\n width: 3px;\n opacity: 1;\n margin-left: -1px;\n z-index: 1;\n }\n\n .pinned-table-holder{ \n grid-area: pinned-table;\n z-index: 1;\n }\n .unpinned-table-holder{ \n grid-area: unpinned-table;\n }\n \n .pinned-table-holder,\n .unpinned-table-holder{\n position: relative;\n\n .pinned-table.header{\n border: solid 1px rgb(104, 104, 104);\n box-sizing: border-box;\n }\n .pinned-table.content{\n border: solid 1px rgb(104, 104, 104);\n border-top: none;\n box-sizing: border-box;\n }\n\n .unpinned-table.header,\n .pinned-table.header{\n left: 0;\n right: 0;\n > *.column-header {\n background-color: #e5e5e5;\n border-top: 1px solid #e0e0e0;\n border-bottom: 1px solid #e0e0e0;\n }\n }\n .content-holder{\n position: absolute;\n inset: 0;\n overflow-y: clip;\n }\n\n .unpinned-table,\n .pinned-table{\n position: absolute;\n display: grid;\n overflow-x: hidden;\n overflow-y: hidden;\n background-color: white;\n\n .table-column{\n display: grid;\n > * {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n border-bottom: 1px solid #e0e0e0;\n }\n }\n\n .table-column:not(.rownum){\n > *:nth-child(even) {\n background-color: #f4f4f4;\n }\n }\n\n .table-column.rownum {\n font-size: small;\n text-align: right;\n color: #707070;\n background-color: #e5e5e5;\n }\n .column-header{\n font-weight: bold;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n }\n }\n\n}\n","/** Settings.scss */\n.settings-holder{\n position:fixed;\n z-index: 1900;\n inset: 0;\n display: grid;\n grid-template-columns: 1fr 1.5afr 1fr;\n grid-template-rows: 1fr 1fr 1fr;\n grid-template-areas: \n \". . .\"\n \". settings .\"\n \". . .\";\n\n place-items: center;\n\n .outside-settings-box{\n position: absolute;\n inset: 0;\n background-color: white;\n z-index: 1;\n \n transition: opacity 200ms ease-in, visibility 200ms ease-in;\n transition: opacity 200ms ease-out, visibility 200msms ease-out;\n opacity: 0.5;\n visibility: visible;\n }\n\n .settings{\n z-index: 2;\n grid-area: settings;\n background-color: white;\n border-radius: 10px;\n padding: 10px;\n \n display: grid;\n justify-self: stretch;\n grid-template-columns: 10px auto 10px;\n grid-template-rows: 30px auto;\n grid-template-areas: \n \". settings-header .\"\n \". settings-content .\";\n row-gap: 10px;\n\n box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5);\n }\n .settings-header{\n grid-area: settings-header;\n position: relative;\n\n display: grid;\n grid-template-columns: 1fr auto;\n grid-template-rows: auto;\n grid-template-areas: \"title close-btn\";\n border-bottom: solid #c2c2c2 2px;\n\n h2{\n grid-area: title;\n align-self: stretch;\n font-size: 20px;\n margin: 0;\n margin-bottom: 0;\n }\n button.button-link.close{\n grid-area: close-btn;\n padding: 0;\n background: none !important;\n border: none;\n cursor: pointer;\n }\n }\n\n .load-error {\n color: red;\n font-size: 13px;\n border-top: solid #c2c2c2 2px;\n h3{\n text-align: center;\n margin: 0;\n padding-top: 5px;\n }\n ul{\n margin: 5px 0 0 0;\n }\n }\n\n .settings-content{\n grid-area: settings-content;\n\n h3.subheader{\n font-size: 15px;\n color: rgb(181, 181, 181);\n padding: 0;\n margin: 0;\n }\n .options-box{\n font-size: 13px;\n padding-left: 10px;\n padding-top: 4px;\n padding-bottom: 8px;\n\n display: grid;\n grid-template-columns: 200px 1fr;\n grid-auto-rows: auto;\n align-items: center;\n \n label{\n justify-self: end;\n padding: 2px 5px;\n text-align: end;\n }\n > div{\n padding: 4px 0;\n }\n\n .file-upload-input,\n .stepper-holder,\n input[type=checkbox] {\n width: 30%;\n display: grid;\n place-items: center;\n }\n .stepper-holder{\n .stepper{\n grid-auto-flow: column;\n\n span{\n line-height: 20px;\n font-size: 15px;\n padding: 0 8px;\n font-weight: bolder;\n }\n button{\n background-color: transparent;\n\n display:inline-block;\n width: 20px;\n height: 20px;\n line-height: 20px; // border is the extra 2 px\n font-size:15px; \n font-weight: 900;\n\n border: solid rgb(100, 100, 100) 1px;\n color: rgb(100, 100, 100);\n\n border-radius: 50%;\n margin: 0;\n padding: 0;\n }\n button:disabled,\n button:disabled:hover{\n opacity: 0.4;\n background-color: white;\n }\n button:hover{\n background-color: rgb(241, 241, 241);\n }\n }\n }\n }\n }\n}\n\nbutton.button-link {\n background: none !important;\n border: none;\n color: #069;\n text-decoration: underline;\n cursor: pointer;\n}\n\n.hide {\n display: none;\n}\n\n.loader {\n position: absolute;\n bottom: 0;\n right: 0;\n border: 3px solid #f3f3f3; /* Light grey */\n border-top: 3px solid #3498db; /* Blue */\n border-radius: 50%;\n width: 14px;\n height: 14px;\n animation: spin 2s linear infinite;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n","/** FileInput.scss */\n\n.av2-hidden-file-input {\n display: none;\n}\n\n.av2-fileloader-fullpage{\n position: fixed;\n inset: 0;\n z-index: 2000;\n margin: 0;\n opacity: 0.9;\n background-color: white;\n display: grid;\n grid-template-columns: 100px auto 100px;\n grid-template-rows: 100px auto 100px; \n grid-template-areas:\n \". . .\"\n \". dropzone .\"\n \". . .\";\n place-items: center;\n\n .av2-fileloader-dropbox{\n grid-area: dropzone;\n\n border: 4px dashed black;\n font-size: 40px;\n font-weight: 600;\n\n width: 100%;\n height: 100%;\n display: grid;\n place-content: center;\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/static/css/main.d2adac17.css.map b/static/css/main.d2adac17.css.map deleted file mode 100644 index 4ce1b1c..0000000 --- a/static/css/main.d2adac17.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/css/main.d2adac17.css","mappings":"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","sources":["index.css","App.scss","components/PositionalAxis.scss","components/virtualization/VirtualizedMatrixViewer.scss","components/ResizeSensor.scss","components/virtualization/VirtualScrollbars.scss","common/MolecularStyles.module.scss","components/SequenceLogo.scss","components/minimap/MiniMap.scss","components/PositionalBarplot.scss","components/layout/AlignmentViewerLayout.scss","components/search/SequenceSearch.scss","components/msa-blocks-and-letters/MSABlocksAndLetters.scss","components/alignment-metadata/AlignmentSpreadsheet.scss","components/settings/Settings.scss","components/AlignmentFileLoader.scss"],"sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n","/** App.scss */\nhtml, body {\n //prevent safari from bouncing - updated 11/2023\n height : 100%;\n overflow: hidden;\n position: relative;\n overscroll-behavior-x: none; //prevent safari from going back as well\n}\n\nbody {\n //stop the bouncy at the bottom of a scroll - since the webgl component\n //is only showing a fraction of the alignment, this is irritating when\n //trying to \"fake scroll\" through the alignment\n //TODO: figure out if this can be done on the element (like msa viewer)\n overscroll-behavior-y: none;\n\n //stop the back button swipe, which happens often when going to the start of\n //the alignment\n overscroll-behavior-x: none;\n}\n\n//*{ //stop the back button swipe on safari spcifically. It must be working on some specific\n// overscroll-behavior-x: none;\n//}\n\n#root {\n height: 100vh;\n display: flex;\n flex-direction: column;\n\n .fullscreen-loading-indicator.hidden{\n display: none;\n }\n \n .fullscreen-loading-indicator{\n position: fixed;\n inset: 0;\n background-color: white;\n opacity: 0.8;\n z-index: 1901;\n display: grid;\n place-items: center;\n \n .loader {\n border: 3px solid #f3f3f3; /* Light grey */\n border-top: 3px solid #3498db; /* Blue */\n border-radius: 50%;\n width: 48px;\n height: 48px;\n animation: spin 2s linear infinite;\n position: relative;\n }\n\n .spinner1{\n width: 24px;\n height: 24px;\n position: relative;\n display: grid;\n grid-auto-flow: column;\n place-items: center;\n\n .circleHolder{\n height: 25px;\n width: 25px;\n display: grid;\n place-items: center;\n\n .circle1, .circle2, .circle3{\n height: 25px;\n width: 25px;\n background-color: black;\n border-radius: 50%;\n display: inline-block;\n }\n\n //spinner #1\n .spinner_b2T7z{\n animation:spinner_xe7Qz 0.8s linear infinite;\n }\n .spinner_YRVVz{\n animation-delay:-.65s;\n }\n .spinner_c9oYz{\n animation-delay:-.5s;\n }\n @keyframes spinner_xe7Qz{\n 100%{\n height: 25px;\n width: 25px;\n }\n 50%{\n height: 0px;\n width: 0px;\n }\n }\n }\n }\n\n //spinner #1\n .spinner_b2T7{\n animation:spinner_xe7Q .8s linear infinite\n }\n .spinner_YRVV{\n animation-delay:-.65s\n }\n .spinner_c9oY{\n animation-delay:-.5s\n }\n @keyframes spinner_xe7Q{\n 93.75%,100%{r:3px}46.875%{r:.2px}\n }\n\n //spinner #2\n .spinner_zWVm{\n animation:spinner_5QiW 1.2s linear infinite,spinner_PnZo 1.2s linear infinite\n }\n .spinner_gfyD{\n animation:spinner_5QiW 1.2s linear infinite,spinner_4j7o 1.2s linear infinite;animation-delay:.1s\n }\n .spinner_T5JJ{\n animation:spinner_5QiW 1.2s linear infinite,spinner_fLK4 1.2s linear infinite;animation-delay:.1s\n }\n .spinner_E3Wz{\n animation:spinner_5QiW 1.2s linear infinite,spinner_tDji 1.2s linear infinite;animation-delay:.2s\n }\n .spinner_g2vs{\n animation:spinner_5QiW 1.2s linear infinite,spinner_CMiT 1.2s linear infinite;animation-delay:.2s\n }\n .spinner_ctYB{\n animation:spinner_5QiW 1.2s linear infinite,spinner_cHKR 1.2s linear infinite;animation-delay:.2s\n }\n .spinner_BDNj{\n animation:spinner_5QiW 1.2s linear infinite,spinner_Re6e 1.2s linear infinite;animation-delay:.3s\n }\n .spinner_rCw3{\n animation:spinner_5QiW 1.2s linear infinite,spinner_EJmJ 1.2s linear infinite;animation-delay:.3s\n }\n .spinner_Rszm{\n animation:spinner_5QiW 1.2s linear infinite,spinner_YJOP 1.2s linear infinite;animation-delay:.4s\n }\n @keyframes spinner_5QiW{\n 0%,50%{width:7.33px;height:7.33px}25%{width:1.33px;height:1.33px}\n }\n @keyframes spinner_PnZo{\n 0%,50%{x:1px;y:1px}25%{x:4px;y:4px}\n }\n @keyframes spinner_4j7o{\n 0%,50%{x:8.33px;y:1px}25%{x:11.33px;y:4px}\n }\n @keyframes spinner_fLK4{\n 0%,50%{x:1px;y:8.33px}25%{x:4px;y:11.33px}\n }\n @keyframes spinner_tDji{\n 0%,50%{x:15.66px;y:1px}25%{x:18.66px;y:4px}\n }\n @keyframes spinner_CMiT{\n 0%,50%{x:8.33px;y:8.33px}25%{x:11.33px;y:11.33px}\n }\n @keyframes spinner_cHKR{\n 0%,50%{x:1px;y:15.66px}25%{x:4px;y:18.66px}\n }\n @keyframes spinner_Re6e{\n 0%,50%{x:15.66px;y:8.33px}25%{x:18.66px;y:11.33px}\n }\n @keyframes spinner_EJmJ{\n 0%,50%{x:8.33px;y:15.66px}25%{x:11.33px;y:18.66px}\n }\n @keyframes spinner_YJOP{\n 0%,50%{x:15.66px;y:15.66px}25%{x:18.66px;y:18.66px}\n }\n }\n\n .app-header {\n padding: 0;\n position: relative;\n\n display: flex; // make us of Flexbox\n justify-content: center; // horizontally centers single line items\n\n .settings-box {\n height: 30px;\n width: 100%;\n padding-top: 8px;\n padding-bottom: 16px;\n padding-left: 8px;\n padding-right: 8px;\n font-size: 11px;\n background-color: white;\n\n .settings-header {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 10px;\n justify-content: space-between;\n padding-bottom: 8px;\n border-bottom: solid 1px #e6e6e6;\n\n h2 {\n margin: 0;\n order: 1;\n flex-grow: 1;\n font-size: 2em;\n }\n\n .settings-alignment-description{\n font-size: 10px;\n order: 2;\n flex-grow: 50;\n display: flex;\n flex-direction: column;\n h3 {\n margin: 0;\n }\n h4 {\n margin: 0;\n }\n }\n\n a, button {\n padding: 0px 2px;\n order: 7;\n font-size: 0;\n margin: 0;\n border: 0;\n }\n a.github-link {\n order: 3;\n font-size: 0;\n }\n button.download {\n order: 4;\n }\n button.search-button {\n order: 5;\n }\n button.settings-toggle{\n order: 6;\n }\n }\n }\n }\n\n .app-content {\n position: relative;\n flex: 1;\n }\n}\n\nbutton.button-link {\n background: none !important;\n border: none;\n color: #069;\n text-decoration: underline;\n cursor: pointer;\n}\n\n.hide {\n display: none;\n}\n\n.loader {\n position: absolute;\n bottom: 0;\n right: 0;\n border: 3px solid #f3f3f3; /* Light grey */\n border-top: 3px solid #3498db; /* Blue */\n border-radius: 50%;\n width: 14px;\n height: 14px;\n animation: spin 2s linear infinite;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n","/** PositionalAxis.scss */\n\n.av2-positional-axis {\n white-space: nowrap;\n\n overflow-x: hidden;\n overflow-y: hidden;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n}\n.av2-positional-axis::-webkit-scrollbar {\n background: transparent;\n height: 0;\n} \n\n","/** VirtualizedMatrixViewer.scss */\n@use 'sass:math';\n\n$hoverTrackerSize: 5;\n$hoverTrackerSizePx: #{$hoverTrackerSize}px;\n$hoverTrackerSizeHalfPx: #{math.div($hoverTrackerSize, 2)}px;\n\n\n.av2-virtualized-matrix {\n //overflow-x: hidden;\n //overflow-y: hidden;\n position: absolute;\n inset: 0;\n\n .scrolled-indicator{\n position: absolute;\n inset: 0;\n z-index: 1001;\n pointer-events: none;\n }\n\n .av2-wheel-scroller{\n position: absolute;\n inset: 0;\n cursor: default;\n\n .hover-tracker-y,\n .hover-tracker-x{\n position: fixed;\n z-index: 1000;\n pointer-events: none;\n }\n \n .triangle-up{\n width: 0;\n height: 0;\n border-left: $hoverTrackerSizeHalfPx solid transparent;\n border-right: $hoverTrackerSizeHalfPx solid transparent;\n border-bottom: $hoverTrackerSizePx solid red;\n }\n .triangle-down{\n width: 0;\n height: 0;\n border-left: $hoverTrackerSizeHalfPx solid transparent;\n border-right: $hoverTrackerSizeHalfPx solid transparent;\n border-top: $hoverTrackerSizePx solid red;\n }\n .triangle-left{\n width: 0;\n height: 0;\n border-bottom: $hoverTrackerSizeHalfPx solid transparent;\n border-top: $hoverTrackerSizeHalfPx solid transparent;\n border-right: $hoverTrackerSizePx solid red;\n }\n .triangle-right{\n width: 0;\n height: 0;\n border-bottom: $hoverTrackerSizeHalfPx solid transparent;\n border-top: $hoverTrackerSizeHalfPx solid transparent;\n border-left: $hoverTrackerSizePx solid red;\n }\n }\n\n .av2-data {\n position: absolute;\n //pointer-events: none;\n inset: 0;\n }\n}\n\n\n:export{\n hoverTrackerSize: $hoverTrackerSize;\n}","/** ResizeSensor.scss */\n\n.resize-sensor-holder {\n position: absolute;\n top: 0px;\n left: 0px;\n right: 0px;\n bottom: 0px;\n pointer-events: none;\n overflow: hidden;\n z-index: -1;\n max-width: 100%;\n visibility: hidden;\n}\n",".vertical-scrollbar-holder {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n //background-color: rgba(255, 255, 255, 0.5);\n\n .vertical-scrollbar {\n position: absolute;\n border-radius: 4px;\n background-color: rgba(0, 0, 0, 0.5);\n }\n .vertical-scrollbar:hover {\n background-color: rgba(0, 0, 0, 0.6);\n }\n .vertical-scrollbar:active {\n background-color: rgba(0, 0, 0, 0.8);\n }\n}\n\n.vertical-scrollbar-fullpage-drag {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n}\n\n.horizontal-scrollbar-holder {\n position: absolute;\n right: 0;\n left: 0;\n bottom: 0;\n //background-color: rgba(150, 0, 0, 0.5);\n\n .horizontal-scrollbar {\n position: absolute;\n border-radius: 4px;\n background-color: rgba(0, 0, 0, 0.5);\n }\n .horizontal-scrollbar:hover {\n background-color: rgba(0, 0, 0, 0.6);\n }\n .horizontal-scrollbar:active {\n background-color: rgba(0, 0, 0, 0.8);\n }\n}\n\n.horizontal-scrollbar-fullpage-drag {\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n}\n","/**\n * MolecularStyles.module.scss\n * \n * Style definitions for amino acids and nucleotides in e.g. an alignment or logo.\n * \n * INDIVIDUAL AMINO ACID / NUCLEOTIDE CLASSES\n * The Ace editor prefixes all classes it adds in the alignment mode with \"resi_\". Because\n * of this, any other components (e.g., logo plots) should also apply classes with this\n * prefix. Amino acids and nucleotides will be styled with the single letter upper case\n * character, prefixed with resi_ (e.g., Alanine and Adenine would both be resi_A).\n * \n * Positional modifying classes can be accessed via 4 exported parameters:\n * queryClass: final resi_ prefixed class name to indicate a residue matches \n * the query sequence \n * consensusClass: final resi_ prefixed class name to indicate a residue matches \n * the consensus sequence\n *\n * TOP LEVEL STYLING\n * Style of an alignment or logo are dictated by 3 parent element classes #1, #2, #3.\n * All 3 are required and must be on the same parent element. The top level classes\n * are \"exported\" and should be read by typescript and the value placed as the classes:\n * Class Exported Parameter Description\n * ----- ------------------ -----------\n * #1 aaAlignTypeClass style alignment as amino acid sequences\n * #1 ntAlignTypeClass style alignment as nucleotide sequences\n *\n * #2 styPosAllClass style all positions \n * #2 styPosQueryClass style only positions that have the resi_query class \n * #2 styPosQueryDiffClass style only positions that don't have the resi_query class \n * #2 styPosConsensusClass style only positions that have the resi_consensus class \n * #2 styPosConsensusDiffClass style only positions that don't have the resi_consensus class \n *\n * #3 aaStyClass_{STYLENAME} amino acid style with name {STYLENAME} excluding curly braces\n * #3 aaStyColorOrder_{STYLENAME} order of amino acids in the colors object for this style. this\n * string is comma space (, ) delimited.\n * #3 aaStyColors_{STYLENAME} colors for all amino acids for this style. this string is \n * comma space (, ) delimited.\n * #3 ntStyClass_{STYLENAME} nucleotide style with name {STYLENAME} excluding curly braces\n * #3 ntStyColorOrder_{STYLENAME} order of nucleotides in the colors object for this style. this\n * string is comma space (, ) delimited.\n * #3 ntStyColors_{STYLENAME} colors for all nucleotides for this style. this string is \n * comma space (, ) delimited.\n *\n *\n * Example: e.g.:\n *
\n * || \n *
\n */\n\n@use 'sass:math';\n\n//general props\n$resiPrefix: resi_;\n$queryClass: q;\n$consensusClass: c;\n$residueParentClass: $resiPrefix + line; //directly above residues\n\n//general global propsqueryClass\n$aaStyleClassPrefix: aa-alignment-style-;\n$ntStyleClassPrefix: nt-alignment-style-;\n$styPosClassPrefix: alignment-positions-tostyle-;\n$defaultBackgroundAlpha: 0.25;\n$defaultLetterColor: #cccccc;\n\n//residue style\n$darkHueClass: dark-residues;\n$lightHueClass: light-residues;\n$lettersOnlyHueClass: letters-only-residues;\n\n//which positions should get styled?\n$styPosAll: $styPosClassPrefix + all;\n$styPosQuery: $styPosClassPrefix + query;\n$styPosQueryDiff: $styPosClassPrefix + query-diff;\n$styPosConsensus: $styPosClassPrefix + consensus;\n$styPosConsensusDiff: $styPosClassPrefix + consensus-diff;\n\n/*\n *\n * COLOR SCHEMES\n * most colors taken from / inspired by https://github.com/wilzbach/msa-colorschemes\n * and https://www.jalview.org/help/html/colourSchemes/\n *\n */\n\n//amino acid props\n$aaProps: (\n topLevelAlignmentClass: alignment-aa,\n styles: (\n Default: (\n description: \"Default\",\n topLevelClass: $aaStyleClassPrefix + default,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #33cc00,\n R: #cc0000,\n N: #6600cc,\n D: #0033ff,\n C: #ffff00,\n Q: #6600cc,\n E: #0033ff,\n G: #33cc00,\n H: #009900,\n I: #33cc00,\n L: #33cc00,\n K: #cc0000,\n M: #33cc00,\n F: #009900,\n P: #33cc00,\n S: #0099ff,\n T: #0099ff,\n W: #009900,\n Y: #009900,\n V: #33cc00,\n ),\n ),\n Buried: (\n description: \"Buried Index\",\n topLevelClass: $aaStyleClassPrefix + buried,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #00a35c,\n R: #00fc03,\n N: #00eb14,\n D: #00eb14,\n C: #0000ff,\n Q: #00f10e,\n E: #00f10e,\n G: #009d62,\n H: #00d52a,\n I: #0054ab,\n L: #007b84,\n K: #00ff00,\n M: #009768,\n F: #008778,\n P: #00e01f,\n S: #00d52a,\n T: #00db24,\n W: #00a857,\n Y: #00e619,\n V: #005fa0,\n B: #00eb14,\n //X: #00b649,\n Z: #00f10e,\n ),\n ),\n Cinema: (\n description: \"Cinema\",\n topLevelClass: $aaStyleClassPrefix + cinema,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #bbbbbb,\n B: #808080,\n C: #ffff00,\n D: #ff0000,\n E: #ff0000,\n F: #ff00ff,\n G: #a52a2a,\n H: #00ffff,\n I: #bbbbbb,\n J: #ffffff,\n K: #00ffff,\n L: #bbbbbb,\n M: #bbbbbb,\n N: #008000,\n O: #ffffff,\n P: #a52a2a,\n Q: #008000,\n R: #00ffff,\n S: #008000,\n T: #008000,\n U: #ffffff,\n V: #bbbbbb,\n W: #ff00ff,\n //X: #808080,\n Y: #ff00ff,\n Z: #808080,\n ),\n ),\n /* // WEIRD white background on N and Q\n Clustal: (\n description: \"Clustal\",\n topLevelClass: $aaStyleClassPrefix + clustal,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #ffa500,\n B: #ffffff,\n C: #008000,\n D: #ff0000,\n E: #ff0000,\n F: #0000ff,\n G: #ffa500,\n H: #ff0000,\n I: #008000,\n J: #ffffff,\n K: #ff0000,\n L: #008000,\n M: #008000,\n N: #ffffff,\n O: #ffffff,\n P: #ffa500,\n Q: #ffffff,\n R: #ff0000,\n S: #ffa500,\n T: #ffa500,\n U: #ffffff,\n V: #008000,\n W: #0000ff,\n //X: #ffffff,\n Y: #0000ff,\n Z: #ffffff,\n ),\n ),*/\n Clustal: (\n description: \"Clustal\",\n topLevelClass: $aaStyleClassPrefix + clustal,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #80a0f0,\n R: #f01505,\n N: #00ff00,\n D: #c048c0,\n C: #f08080,\n Q: #00ff00,\n E: #c048c0,\n G: #f09048,\n H: #15a4a4,\n I: #80a0f0,\n L: #80a0f0,\n K: #f01505,\n M: #80a0f0,\n F: #80a0f0,\n P: #ffff00,\n S: #00ff00,\n T: #00ff00,\n W: #80a0f0,\n Y: #15a4a4,\n V: #80a0f0,\n B: #ffffff,\n //X: #ffffff,\n Z: #ffffff,\n ),\n ),\n Helix: (\n description: \"Helix Propensity\",\n topLevelClass: $aaStyleClassPrefix + helix,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #e718e7,\n R: #6f906f,\n N: #1be41b,\n D: #778877,\n C: #23dc23,\n Q: #926d92,\n E: #ff00ff,\n G: #00ff00,\n H: #758a75,\n I: #8a758a,\n L: #ae51ae,\n K: #a05fa0,\n M: #ef10ef,\n F: #986798,\n P: #00ff00,\n S: #36c936,\n T: #47b847,\n W: #8a758a,\n Y: #21de21,\n V: #857a85,\n B: #49b649,\n //X: #758a75,\n Z: #c936c9,\n ),\n ),\n Hydrophobicity: (\n description: \"Hydrophobicity\",\n topLevelClass: $aaStyleClassPrefix + hydrophobicity,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n /*\n colors based on: https://www.sigmaaldrich.com/life-science/metabolomics/learning-center/amino-acid-reference-chart.html\n to get hex in python:\n from matplotlib import cm\n def rgb2hex(r,g,b):\n return \"#{:02x}{:02x}{:02x}\".format(r,g,b)\n\n redBlueColormap = cm.get_cmap('bwr', 155)\n aas = { \n 'F': 100, 'I': 99, 'W': 97, 'L': 97, 'V': 76, 'M': 74, 'Y': 63, \n 'C': 49, 'A': 41, 'T': 13, 'H': 8, 'G': 0, 'S': -5, 'Q': -10, \n 'R': -14, 'K': -23, 'N': -28, 'E': -31, 'P': -46, 'D': -55\n }\n\n //normalize and convert to rgb\n rgba = {}\n for aa in aas.keys(): \n rgba[aa] = redBlueColormap(aas[aa]+55)\n\n hex = {}\n for aa in aas.keys(): \n hex[aa] = rgb2hex(int(rgba[aa][0]*255), int(rgba[aa][1]*255), int(rgba[aa][2]*255))\n\n print(hex);\n */\n colors:\n (\n F: #ff0000,\n I: #ff0000,\n W: #ff0606,\n L: #ff0606,\n V: #ff4c4c,\n M: #ff5252,\n Y: #ff7777,\n C: #ffa5a5,\n A: #ffc0c0,\n T: #e1e1ff,\n H: #d0d0ff,\n G: #b6b6ff,\n S: #a5a5ff,\n Q: #9595ff,\n R: #8787ff,\n K: #6969ff,\n N: #5959ff,\n E: #4f4fff,\n P: #1d1dff,\n D: #0000ff,\n ),\n ),\n Lesk: (\n description: \"Lesk\",\n topLevelClass: $aaStyleClassPrefix + lesk,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #ffa500,\n B: #ffffff,\n C: #008000,\n D: #ff0000,\n E: #ff0000,\n F: #008000,\n G: #ffa500,\n H: #ff00ff,\n I: #008000,\n J: #ffffff,\n K: #ff0000,\n L: #008000,\n M: #008000,\n N: #ff00ff,\n O: #ffffff,\n P: #008000,\n Q: #ff00ff,\n R: #ff0000,\n S: #ffa500,\n T: #ffa500,\n U: #ffffff,\n V: #008000,\n W: #008000,\n // X: #ffffff,\n Y: #008000,\n Z: #ffffff,\n ),\n ),\n MAE: (\n description: \"MAE\",\n topLevelClass: $aaStyleClassPrefix + mae,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #77dd88,\n B: #ffffff,\n C: #99ee66,\n D: #55bb33,\n E: #55bb33,\n F: #9999ff,\n G: #77dd88,\n H: #5555ff,\n I: #66bbff,\n J: #ffffff,\n K: #ffcc77,\n L: #66bbff,\n M: #66bbff,\n N: #55bb33,\n O: #ffffff,\n P: #eeaaaa,\n Q: #55bb33,\n R: #ffcc77,\n S: #ff4455,\n T: #ff4455,\n U: #ffffff,\n V: #66bbff,\n W: #9999ff,\n //X: #ffffff,\n Y: #9999ff,\n Z: #ffffff,\n ),\n ),\n Strand: (\n description: \"Strand Propensity\",\n topLevelClass: $aaStyleClassPrefix + strand,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #5858a7,\n R: #6b6b94,\n N: #64649b,\n D: #2121de,\n C: #9d9d62,\n Q: #8c8c73,\n E: #0000ff,\n G: #4949b6,\n H: #60609f,\n I: #ecec13,\n L: #b2b24d,\n K: #4747b8,\n M: #82827d,\n F: #c2c23d,\n P: #2323dc,\n S: #4949b6,\n T: #9d9d62,\n W: #c0c03f,\n Y: #d3d32c,\n V: #ffff00,\n B: #4343bc,\n //X: #797986,\n Z: #4747b8,\n ),\n ),\n Taylor: (\n description: \"Taylor\",\n topLevelClass: $aaStyleClassPrefix + taylor,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #ccff00,\n R: #0000ff,\n N: #cc00ff,\n D: #ff0000,\n C: #ffff00,\n Q: #ff00cc,\n E: #ff0066,\n G: #ff9900,\n H: #0066ff,\n I: #66ff00,\n L: #33ff00,\n K: #6600ff,\n M: #00ff00,\n F: #00ff66,\n P: #ffcc00,\n S: #ff3300,\n T: #ff6600,\n W: #00ccff,\n Y: #00ffcc,\n V: #99ff00,\n B: #ffffff,\n //X: #ffffff,\n Z: #ffffff,\n ),\n ),\n Turn: (\n description: \"Turn Propensity\",\n topLevelClass: $aaStyleClassPrefix + turn,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #2cd3d3,\n R: #708f8f,\n N: #ff0000,\n D: #e81717,\n C: #a85757,\n Q: #3fc0c0,\n E: #778888,\n G: #ff0000,\n H: #708f8f,\n I: #00ffff,\n L: #1ce3e3,\n K: #7e8181,\n M: #1ee1e1,\n F: #1ee1e1,\n P: #f60909,\n S: #e11e1e,\n T: #738c8c,\n W: #738c8c,\n Y: #9d6262,\n V: #07f8f8,\n B: #f30c0c,\n //X: #7c8383,\n Z: #5ba4a4,\n ),\n ),\n Zappo: (\n description: \"Zappo\",\n topLevelClass: $aaStyleClassPrefix + zappo,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #ffafaf,\n R: #6464ff,\n N: #00ff00,\n D: #ff0000,\n C: #ffff00,\n Q: #00ff00,\n E: #ff0000,\n G: #ff00ff,\n H: #6464ff,\n I: #ffafaf,\n L: #ffafaf,\n K: #6464ff,\n M: #ffafaf,\n F: #ffc800,\n P: #ff00ff,\n S: #00ff00,\n T: #00ff00,\n W: #ffc800,\n Y: #ffc800,\n V: #ffafaf,\n B: #ffffff,\n //X: #ffffff,\n Z: #ffffff,\n ),\n ),\n ),\n);\n\n//amino acid props\n$ntProps: (\n topLevelAlignmentClass: alignment-nt,\n styles: (\n Default: (\n description: \"Default\",\n topLevelClass: $ntStyleClassPrefix + default,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #5050ff,\n C: #e00000,\n G: #00c000,\n T: #e6e600,\n U: #cc9900,\n R: #2e8b57,\n Y: #ff8c00,\n ),\n ),\n Nucleotide: (\n description: \"Nucleotide\",\n topLevelClass: $ntStyleClassPrefix + nucleotide,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #64f73f,\n C: #ffb340,\n G: #eb413c,\n T: #3c88ee,\n U: #3c88ee,\n ),\n ),\n Purine: (\n description: \"Purine/Pyrimidine\",\n topLevelClass: $ntStyleClassPrefix + purine,\n backgroundAlpha: $defaultBackgroundAlpha,\n defaultLetterColor: $defaultLetterColor,\n colors: (\n A: #ff83fa,\n C: #40e0d0,\n G: #ff83fa,\n R: #ff83fa,\n T: #40e0d0,\n U: #40e0d0,\n Y: #40e0d0,\n ),\n ),\n ),\n);\n\n/*\n *\n *\n * FUNCTIONS\n *\n *\n */\n\n//get the equivalant hex color of an alpha-transformed hex.\n//see: https://makandracards.com/makandra/42500-sass-how-to-convert-an-rgba-color-to-its-rgb-look-alike\n@function getNonTransparantAlphaEquivalant($color, $alpha) {\n @return mix($color, #fff, $alpha * 100%);\n}\n\n//same as getNonTransparantAlphaEquivalant but in bulk (takes a list rather\n//than a single color)\n@function getNonTransparantAlphaEquivalantList($colorsArr, $alpha) {\n $toReturn: ();\n @each $color in $colorsArr {\n $toReturn: append(\n $toReturn,\n getNonTransparantAlphaEquivalant($color, $alpha),\n $separator: comma\n );\n }\n @return $toReturn;\n}\n\n//see https://stackoverflow.com/questions/11867545\n@function brightness($color) {\n @return math.div((red($color) * 299) + (green($color) * 587) + (blue($color) * 114), 1000);\n //@return ((red($color) * 299) + (green($color) * 587) + (blue($color) * 114)) /\n // 1000;\n}\n\n//get the letter color for the dark color scheme depending on the lightness\n//of the background: will return black if the background color is light and\n//white if the background color is dark\n@function getLetterColor($bgColor) {\n $letterColor: white;\n @if brightness($bgColor) > 125 {\n $letterColor: black;\n }\n @return $letterColor;\n}\n\n//same as getLetterColor but in bulk (takes a list rather\n//than a single color)\n@function getLetterColors($bgColorsArr) {\n $toReturn: ();\n @each $bgColor in $bgColorsArr {\n $toReturn: append($toReturn, getLetterColor($bgColor), $separator: comma);\n }\n @return $toReturn;\n}\n\n//\n//Output all selectors for nt and aa props.\n//\n@mixin outputMajorSelectors($propsObj) {\n $alignmentClass: map-get($propsObj, topLevelAlignmentClass);\n\n @each $styleName, $styleObj in map-get($propsObj, styles) {\n $styleClass: map-get($styleObj, topLevelClass);\n $backgroundAlpha: map-get($styleObj, backgroundAlpha);\n\n //set default letter color for letters - used for unstyled residues\n // (i.e., dashes, dots, unrecognized letters, lowercase letters)\n $defaultColor: map-get($styleObj, defaultLetterColor);\n :global\n .#{$alignmentClass}\n .#{$residueParentClass}\n [class^=\"#{$resiPrefix}\"] {\n color: $defaultColor;\n fill: $defaultColor;\n }\n\n //\n // letters only class - this is a trick that relies on the the\n // default \"light hue\" class to actually color the residues, then\n // using lettersOnlyHueClass only removes the background\n //\n :global\n .#{$alignmentClass}.#{$lettersOnlyHueClass}\n [class^=\"#{$resiPrefix}\"] {\n background-color: transparent !important;\n }\n\n @each $aa, $color in map-get($styleObj, colors) {\n $aaClass: $resiPrefix + $aa;\n\n //\n // dark hues\n //\n :global\n .#{$alignmentClass}.#{$darkHueClass}.#{$styleClass}.#{$styPosAll}\n .#{$aaClass},\n :global\n .#{$alignmentClass}.#{$darkHueClass}.#{$styleClass}.#{$styPosConsensus}\n .#{$aaClass}.#{$consensusClass},\n :global\n .#{$alignmentClass}.#{$darkHueClass}.#{$styleClass}.#{$styPosConsensusDiff}\n .#{$aaClass}:not(.#{$consensusClass}),\n :global\n .#{$alignmentClass}.#{$darkHueClass}.#{$styleClass}.#{$styPosQuery}\n .#{$aaClass}.#{$queryClass},\n :global\n .#{$alignmentClass}.#{$darkHueClass}.#{$styleClass}.#{$styPosQueryDiff}\n .#{$aaClass}:not(.#{$queryClass}) {\n //set letter color based on brightness of background color\n color: getLetterColor($color) !important;\n background-color: $color !important;\n }\n\n //\n // light hues - default of no class is added and also for logo\n //\n :global .#{$alignmentClass}.#{$styleClass}.#{$styPosAll} .#{$aaClass},\n :global\n .#{$alignmentClass}.#{$styleClass}.#{$styPosConsensus}\n .#{$aaClass}.#{$consensusClass},\n :global\n .#{$alignmentClass}.#{$styleClass}.#{$styPosConsensusDiff}\n .#{$aaClass}:not(.#{$consensusClass}),\n :global\n .#{$alignmentClass}.#{$styleClass}.#{$styPosQuery}\n .#{$aaClass}.#{$queryClass},\n :global\n .#{$alignmentClass}.#{$styleClass}.#{$styPosQueryDiff}\n .#{$aaClass}:not(.#{$queryClass}) {\n color: $color;\n background-color: getNonTransparantAlphaEquivalant(\n $color,\n $backgroundAlpha\n );\n fill: $color;\n }\n }\n }\n}\n\n/*\n *\n *\n * OUTPUT CSS\n *\n *\n */\n@include outputMajorSelectors($aaProps);\n@include outputMajorSelectors($ntProps);\n\n/*\n *\n * EXPORT\n * export alignment type classes, color scheme classes, position coloring classes,\n * and then individual colors for use in javascript.\n *\n */\n:export {\n resiPrefix: $resiPrefix;\n queryClass: $queryClass;\n consensusClass: $consensusClass;\n queryClass: $queryClass;\n consensusClass: $consensusClass;\n residueParentClass: $residueParentClass;\n darkHueClass: $darkHueClass;\n lightHueClass: $lightHueClass;\n lettersOnlyHueClass: $lettersOnlyHueClass;\n\n aaAlignTypeClass: map-get($aaProps, topLevelAlignmentClass);\n ntAlignTypeClass: map-get($ntProps, topLevelAlignmentClass);\n\n styPosAllClass: $styPosAll;\n styPosQueryClass: $styPosQuery;\n styPosQueryDiffClass: $styPosQueryDiff;\n styPosConsensusClass: $styPosConsensus;\n styPosConsensusDiffClass: $styPosConsensusDiff;\n}\n\n//export colors for amino acids\n:export {\n @each $styleName, $styleObj in map-get($aaProps, styles) {\n #{unquote(\"aaStyClass_\"+$styleName)}: map-get($styleObj, topLevelClass);\n #{unquote(\"aaStyDesc_\"+$styleName)}: unquote(\n map-get($styleObj, description)\n );\n #{unquote(\"aaStyDefaultLetterColor_\"+$styleName)}: map-get(\n $styleObj,\n defaultLetterColor\n );\n #{unquote(\"aaStyBackgroundAlpha_\"+$styleName)}: map-get(\n $styleObj,\n backgroundAlpha\n );\n #{unquote(\"aaStyColorOrder_\"+$styleName)}: map-keys(\n map-get($styleObj, colors)\n );\n #{unquote(\"aaStyColors_\"+$styleName)}: map-values(\n map-get($styleObj, colors)\n );\n #{unquote(\"aaStyBackgroundColorsLightTheme_\"+$styleName)}: getNonTransparantAlphaEquivalantList(\n map-values(map-get($styleObj, colors)),\n map-get($styleObj, backgroundAlpha)\n );\n #{unquote(\"aaStyLetterColorsDarkTheme_\"+$styleName)}: getLetterColors(\n map-values(map-get($styleObj, colors))\n );\n }\n}\n//export colors for nucleotides\n:export {\n @each $styleName, $styleObj in map-get($ntProps, styles) {\n #{unquote(\"ntStyClass_\"+$styleName)}: map-get($styleObj, topLevelClass);\n #{unquote(\"ntStyDesc_\"+$styleName)}: unquote(\n map-get($styleObj, description)\n );\n #{unquote(\"ntStyDefaultLetterColor_\"+$styleName)}: map-get(\n $styleObj,\n defaultLetterColor\n );\n #{unquote(\"ntStyBackgroundAlpha_\"+$styleName)}: map-get(\n $styleObj,\n backgroundAlpha\n );\n #{unquote(\"ntStyColorOrder_\"+$styleName)}: map-keys(\n map-get($styleObj, colors)\n );\n #{unquote(\"ntStyColors_\"+$styleName)}: map-values(\n map-get($styleObj, colors)\n );\n #{unquote(\"ntStyBackgroundColorsLightTheme_\"+$styleName)}: getNonTransparantAlphaEquivalantList(\n map-values(map-get($styleObj, colors)),\n map-get($styleObj, backgroundAlpha)\n );\n #{unquote(\"ntStyLetterColorsDarkTheme_\"+$styleName)}: getLetterColors(\n map-values(map-get($styleObj, colors))\n );\n }\n}\n","/** SequenceLogo.scss */\n\n.sequence-logo-holder::-webkit-scrollbar {\n background: transparent; // make scrollbar transparent\n height: 0;\n}\n\n.sequence-logo-holder {\n overflow-x: auto;\n overflow-y: hidden;\n position: absolute;\n\n rect.interaction-placeholder {\n opacity: 0;\n }\n\n .sequence-logo-tooltip-container {\n margin: 0;\n z-index: 1002;\n\n .logo-tooltip {\n pointer-events: all;\n display: table;\n width: auto;\n line-height: 16px;\n font-size: 12px;\n\n h1 {\n text-align: center;\n padding-bottom: 4px;\n margin: 0;\n font-size: 13px;\n }\n\n .row {\n display: table-row;\n width: auto;\n clear: both;\n }\n\n .col {\n float: left;\n display: table-column;\n text-align: center;\n width: 60px;\n line-height: 16px;\n }\n\n .col.header {\n font-weight: bold;\n margin-bottom: 5px;\n }\n\n .legend-square {\n width: 12px;\n height: 12px;\n margin-top: 2px;\n margin-bottom: 2px;\n }\n .name {\n width: 100px;\n }\n }\n }\n}\n","/** MiniMap.scss */\n\n.minimap{\n z-index: 100;\n position: absolute;\n inset: 0;\n \n display: grid;\n grid-template-rows: 10px auto 10px;\n grid-template-areas: \"header\" \"minimap\" \"footer\";\n\n .minimap-header{\n grid-area: header;\n font-size: 9px;\n place-self: center;\n }\n .minimap-app-holder{\n grid-area: minimap;\n position: absolute;\n inset: 0;\n \n .minimap-canvas-holder{\n position: absolute;\n inset: 0;\n\n canvas{\n image-rendering: optimizeSpeed;\n image-rendering: -moz-crisp-edges;\n image-rendering: -webkit-optimize-contrast;\n image-rendering: optimize-contrast;\n image-rendering: pixelated;\n -ms-interpolation-mode: nearest-neighbor;\n position: absolute;\n inset: 0;\n }\n }\n .minimap-interaction{\n position: absolute;\n inset: 0;\n }\n }\n .minimap-footer{\n grid-area: footer;\n font-size: 9px;\n place-self: center;\n }\n}\n\n.minimap-dragger{\n position: absolute;\n left: 0; \n right:0;\n cursor: move; // fallback if grab cursor is unsupported\n cursor: grab;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n}\n\n.minimap-full-page-drag-detector{\n position: fixed;\n inset: 0;\n opacity: 0;\n background-color: white;\n z-index: 2001;\n cursor: grabbing;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n}\n","/** PositionalBarplot.scss */\n\n.barplot::-webkit-scrollbar {\n background: transparent; // make scrollbar transparent\n height: 0;\n}\n\n.barplot {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n\n svg {\n .position-container rect.interaction-placeholder {\n fill-opacity: 0;\n stroke: none;\n }\n .position-container rect.interaction-placeholder-full {\n fill-opacity: 0;\n stroke: none;\n }\n }\n\n .barplot-tooltip-holder{\n margin: 0;\n z-index: 1002;\n \n .bar-position-textblock {\n pointer-events: all;\n h1 {\n text-align: center;\n padding-bottom: 4px;\n margin: 0;\n font-size: 14px;\n }\n .dataseries-line {\n line-height: 16px;\n font-size: 13px;\n }\n .legend-square {\n width: 8px;\n height: 8px;\n display: inline-block;\n margin-right: 6px;\n }\n }\n }\n}\n","/** AlignmentViewerLayout.scss */\n\n.full-screen-resize-dragger{\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n opacity: 0;\n background-color: white;\n z-index: 1800;\n cursor: col-resize;\n}\n.full-screen-resize-dragger.horizontal{\n cursor: col-resize;\n}\n.full-screen-resize-dragger.vertical{\n cursor: row-resize;\n}\n\n.alignment-viewer-2{\n position: absolute;\n display: grid;\n align-items: center;\n\n .content{\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n .metadata-title{\n position: relative;\n text-align: right;\n font-weight: bold;\n font-size: 14px; \n }\n .minimap-content{\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n //resizers\n .horizontal-resizer,\n .vertical-resizer{\n background-color: #f2f2f2;\n }\n .horizontal-resizer{\n cursor: ew-resize;\n }\n .vertical-resizer{\n cursor: ns-resize;\n }\n .horizontal-resizer.hovered,\n .vertical-resizer.hovered{\n background-color: #0099ff;\n border-left-color: #0099ff;\n border-right-color: #0099ff;\n opacity: 0.2;\n }\n .horizontal-resizer.resizing,\n .vertical-resizer.resizing{\n background-color: #0099ff;\n border-left-color: #0099ff;\n border-right-color: #0099ff;\n }\n\n .horizontal-resizer{\n height: 100%;\n }\n .vertical-resizer{\n width: 100%;\n height: 100%;\n }\n}\n","/** SequenceSearch.scss */\n\n.background-behind-search-box{\n position: fixed;\n inset: 0;\n background-color: white;\n z-index: 10000;\n \n transition: opacity 200ms ease-in, visibility 200ms ease-in;\n transition: opacity 200ms ease-out, visibility 200msms ease-out;\n opacity: 0.75;\n visibility: visible;\n}\n\n.search-box-grid{\n position: absolute;\n top: 0;\n bottom: 50px;\n left: 100px;\n right: 100px;\n z-index: 10001;\n display: grid;\n grid-template-columns: auto;\n grid-template-rows: 1fr;\n grid-template-areas: \"search-area\";\n\n .search-box-contents{\n position: relative;\n background-color: white;\n grid-area: search-area;\n border-radius: 10px;\n box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5);\n overflow: hidden;\n\n display: grid;\n grid-template-columns: 5px 9fr 5px;\n grid-template-rows: 10px 20px 30px 20px 1fr 5px;\n grid-template-areas: \n \". . .\"\n \". search-bar .\"\n \". search-options-bar .\"\n \". search-bar-results-separator .\"\n \". search-results .\"\n \". . .\"\n ;\n font-size: 12px;\n\n .search-options-bar{\n grid-area: search-options-bar;\n place-self: center;\n display: grid;\n grid-auto-flow: column;\n grid-column-gap: 5px;\n place-items: center;\n\n select, input, label{\n display: inline-block;\n margin: 0;\n }\n \n .stepper{\n //border: solid 1px gray;\n padding: 0 12px 0 0;\n display: inline-grid;\n grid-auto-flow: column;\n place-items: center;\n\n span{\n line-height: 20px;\n font-size: 15px;\n padding: 0 8px;\n font-weight: bolder;\n }\n button{\n background-color: transparent;\n\n display:inline-block;\n width: 20px;\n height: 20px;\n line-height: 20px; // border is the extra 2 px\n font-size:15px; \n font-weight: 900;\n\n border: solid rgb(100, 100, 100) 1px;\n color: rgb(100, 100, 100);\n\n border-radius: 50%;\n margin: 0;\n padding: 0;\n }\n button:disabled,\n button:disabled:hover{\n opacity: 0.4;\n background-color: white;\n }\n button:hover{\n background-color: rgb(241, 241, 241);\n }\n }\n }\n \n .search-bar{\n grid-area: search-bar;\n justify-self: stretch;\n align-self: start;\n display: grid;\n grid-template-columns: 1fr 3fr 2fr;\n grid-template-rows: 100%;\n grid-template-areas: \n \"search-input-label search-input matches\";\n \n\n label{\n grid-area: search-input-label;\n align-self: center;\n justify-self: end;\n }\n input{\n grid-area: search-input;\n width: 100%;\n }\n span{\n grid-area: matches;\n align-self: center;\n justify-self: center;\n }\n }\n\n .search-bar-results-separator{\n grid-area: search-bar-results-separator;\n margin-top: 10px;\n border-top: solid 2px #c2c2c2;\n }\n .search-results{\n grid-area: search-results;\n overflow: scroll;\n position: relative;\n }\n button.button-link.close{\n position: absolute;\n top: 8px;\n right: 8px;\n padding: 0;\n background: none !important;\n border: none;\n color: #069;\n text-decoration: underline;\n cursor: pointer;\n }\n }\n}","/** WebGLAlignmentComponent.scss */\n\n// make scrollbar transparent on query and consensus sequences\n.query .av2-blocksandletters::-webkit-scrollbar,\n.consensus .av2-blocksandletters::-webkit-scrollbar {\n background: transparent;\n height: 0;\n}\n\n.av2-blocksandletters .av2-blocks.canvas-holder.hidden canvas {\n display: none;\n}\n\n.av2-blocksandletters {\n overflow-x: hidden;\n overflow-y: hidden;\n position: absolute;\n inset: 0;\n}\n\n.av2-blocks.canvas-holder{\n position: absolute;\n inset: 0;\n overflow: hidden;\n\n .loader-holder {\n position: absolute;\n inset: 0;\n display: grid;\n place-items: center;\n .loader{\n border: 3px solid #f3f3f3; /* Light grey */\n border-top: 3px solid #3498db; /* Blue */\n border-radius: 50%;\n width: 48px;\n height: 48px;\n animation: spin 2s linear infinite;\n position: relative;\n }\n }\n\n canvas {\n image-rendering: optimizeSpeed;\n image-rendering: -moz-crisp-edges;\n image-rendering: -webkit-optimize-contrast;\n image-rendering: optimize-contrast;\n image-rendering: pixelated;\n -ms-interpolation-mode: nearest-neighbor;\n }\n}\n\n.av2-letters.sequence-text-holder {\n position: absolute;\n white-space: nowrap;\n\n .letters-with-specific-color {\n position: absolute;\n top: 0;\n left: 0;\n\n //disallow selection: https://stackoverflow.com/questions/826782/how-to-disable-text-selection-highlighting\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n pointer-events: none;\n }\n}\n.hidden-residues-for-copy-paste {\n position: absolute;\n white-space: nowrap;\n \n overflow-x: hidden;\n overflow-y: hidden;\n top: 0;\n left: 0;\n color: rgba(0, 0, 0, 0);\n pointer-events: all;\n}\n","/** AlignmentSpreadsheet.scss */\n\n.av2-spreadsheet{\n position: absolute;\n inset:0;\n display: grid;\n grid-template-areas:\n \"pinned-table unpinned-table\";\n grid-template-rows: auto;\n //overflow: clip;\n\n //grid-template-columns: 100px 300px;\n //grid-template-areas: \"pinned-columns unpinned-columns\";\n //grid-template-rows: auto;\n //overflow-x: hidden;\n //overflow-y: hidden;\n .horizontal-resizer{\n background-color: #f2f2f2; \n margin: 0;\n padding: 0;\n cursor: ew-resize;\n height: 100%;\n }\n \n .pinned-table-holder{ \n grid-area: pinned-table;\n z-index: 1;\n }\n .unpinned-table-holder{ \n grid-area: unpinned-table;\n }\n \n .pinned-table-holder,\n .unpinned-table-holder{\n position: relative;\n\n .pinned-table.header{\n border: solid 1px rgb(104, 104, 104);\n }\n .pinned-table.content{\n border: solid 1px rgb(104, 104, 104);\n }\n\n .unpinned-table.header,\n .pinned-table.header{\n left: 0;\n right: 0;\n background-color: #f4f4f4;\n }\n .content-holder{\n position: absolute;\n inset: 0;\n overflow-y: clip;\n }\n\n .unpinned-table,\n .pinned-table{\n position: absolute;\n display: grid;\n overflow-x: hidden;\n overflow-y: hidden;\n background-color: white;\n\n .table-column{\n display: grid;\n > * {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n }\n\n .column-header{\n font-weight: bold;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n }\n }\n\n}\n","/** Settings.scss */\n.settings-holder{\n position:fixed;\n z-index: 1900;\n inset: 0;\n display: grid;\n grid-template-columns: 1fr 1.5afr 1fr;\n grid-template-rows: 1fr 1fr 1fr;\n grid-template-areas: \n \". . .\"\n \". settings .\"\n \". . .\";\n\n place-items: center;\n\n .outside-settings-box{\n position: absolute;\n inset: 0;\n background-color: white;\n z-index: 1;\n \n transition: opacity 200ms ease-in, visibility 200ms ease-in;\n transition: opacity 200ms ease-out, visibility 200msms ease-out;\n opacity: 0.5;\n visibility: visible;\n }\n\n .settings{\n z-index: 2;\n grid-area: settings;\n background-color: white;\n border-radius: 10px;\n padding: 10px;\n \n display: grid;\n justify-self: stretch;\n grid-template-columns: 10px auto 10px;\n grid-template-rows: 30px auto;\n grid-template-areas: \n \". settings-header .\"\n \". settings-content .\";\n row-gap: 10px;\n\n box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5);\n }\n .settings-header{\n grid-area: settings-header;\n position: relative;\n\n display: grid;\n grid-template-columns: 1fr auto;\n grid-template-rows: auto;\n grid-template-areas: \"title close-btn\";\n border-bottom: solid #c2c2c2 2px;\n\n h2{\n grid-area: title;\n align-self: stretch;\n font-size: 20px;\n margin: 0;\n margin-bottom: 0;\n }\n button.button-link.close{\n grid-area: close-btn;\n padding: 0;\n background: none !important;\n border: none;\n cursor: pointer;\n }\n }\n\n .load-error {\n color: red;\n font-size: 13px;\n border-top: solid #c2c2c2 2px;\n h3{\n text-align: center;\n margin: 0;\n padding-top: 5px;\n }\n ul{\n margin: 5px 0 0 0;\n }\n }\n\n .settings-content{\n grid-area: settings-content;\n\n h3.subheader{\n font-size: 15px;\n color: rgb(181, 181, 181);\n padding: 0;\n margin: 0;\n }\n .options-box{\n font-size: 13px;\n padding-left: 10px;\n padding-top: 4px;\n padding-bottom: 8px;\n\n display: grid;\n grid-template-columns: 200px 1fr;\n grid-auto-rows: auto;\n align-items: center;\n \n label{\n justify-self: end;\n padding: 2px 5px;\n text-align: end;\n }\n > div{\n padding: 4px 0;\n }\n\n .file-upload-input,\n .stepper-holder,\n input[type=checkbox] {\n width: 30%;\n display: grid;\n place-items: center;\n }\n .stepper-holder{\n .stepper{\n grid-auto-flow: column;\n\n span{\n line-height: 20px;\n font-size: 15px;\n padding: 0 8px;\n font-weight: bolder;\n }\n button{\n background-color: transparent;\n\n display:inline-block;\n width: 20px;\n height: 20px;\n line-height: 20px; // border is the extra 2 px\n font-size:15px; \n font-weight: 900;\n\n border: solid rgb(100, 100, 100) 1px;\n color: rgb(100, 100, 100);\n\n border-radius: 50%;\n margin: 0;\n padding: 0;\n }\n button:disabled,\n button:disabled:hover{\n opacity: 0.4;\n background-color: white;\n }\n button:hover{\n background-color: rgb(241, 241, 241);\n }\n }\n }\n }\n }\n}\n\nbutton.button-link {\n background: none !important;\n border: none;\n color: #069;\n text-decoration: underline;\n cursor: pointer;\n}\n\n.hide {\n display: none;\n}\n\n.loader {\n position: absolute;\n bottom: 0;\n right: 0;\n border: 3px solid #f3f3f3; /* Light grey */\n border-top: 3px solid #3498db; /* Blue */\n border-radius: 50%;\n width: 14px;\n height: 14px;\n animation: spin 2s linear infinite;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n","/** FileInput.scss */\n\n.av2-hidden-file-input {\n display: none;\n}\n\n.av2-fileloader-fullpage{\n position: fixed;\n inset: 0;\n z-index: 2000;\n margin: 0;\n opacity: 0.9;\n background-color: white;\n display: grid;\n grid-template-columns: 100px auto 100px;\n grid-template-rows: 100px auto 100px; \n grid-template-areas:\n \". . .\"\n \". dropzone .\"\n \". . .\";\n place-items: center;\n\n .av2-fileloader-dropbox{\n grid-area: dropzone;\n\n border: 4px dashed black;\n font-size: 40px;\n font-weight: 600;\n\n width: 100%;\n height: 100%;\n display: grid;\n place-content: center;\n }\n}\n"],"names":[],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/main.993b0a2f.js.map b/static/js/main.993b0a2f.js.map deleted file mode 100644 index e053f36..0000000 --- a/static/js/main.993b0a2f.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"static/js/main.993b0a2f.js","mappings":"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KC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,IACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,MAAO,GACrC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,OAAQ,GACtC,CAAEF,QAAS,IAAKC,QAAS,IAAKC,O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","sources":["../node_modules/call-bind/callBound.js","../node_modules/call-bind/index.js","../node_modules/classnames/index.js","../node_modules/define-data-property/index.js","../node_modules/earcut/src/earcut.js","../node_modules/eventemitter3/index.js","../node_modules/function-bind/implementation.js","../node_modules/function-bind/index.js","../node_modules/get-intrinsic/index.js","../node_modules/gopd/index.js","../node_modules/has-property-descriptors/index.js","../node_modules/has-proto/index.js","../node_modules/has-symbols/index.js","../node_modules/has-symbols/shams.js","../node_modules/hasown/index.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/object-inspect/index.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/set-function-length/index.js","../node_modules/side-channel/index.js","../node_modules/url/node_modules/punycode/punycode.js","../node_modules/url/node_modules/qs/lib/formats.js","../node_modules/url/node_modules/qs/lib/index.js","../node_modules/url/node_modules/qs/lib/parse.js","../node_modules/url/node_modules/qs/lib/stringify.js","../node_modules/url/node_modules/qs/lib/utils.js","../node_modules/url/url.js","../node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.min.js","../node_modules/use-sync-external-store/with-selector.js","../webpack/bootstrap","../webpack/runtime/create fake namespace object","../webpack/runtime/define property getters","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/make namespace object","../webpack/runtime/node module decorator","common/Utils.ts","components/virtualization/VirtualizationTypes.ts","webpack://alignment-viewer-2/./src/components/virtualization/VirtualizedMatrixViewer.scss?534d","../node_modules/@pixi/constants/src/index.ts","../node_modules/@pixi/settings/src/adapter.ts","../node_modules/@pixi/settings/src/settings.ts","../node_modules/ismobilejs/src/isMobile.ts","../node_modules/@pixi/settings/src/utils/isMobile.ts","../node_modules/@pixi/utils/src/settings.ts","../node_modules/@pixi/utils/src/logging/deprecation.ts","../node_modules/@pixi/utils/src/path.ts","../node_modules/@pixi/utils/src/browser/detectVideoAlphaMode.ts","../node_modules/@pixi/utils/src/browser/isWebGLSupported.ts","../node_modules/@pixi/colord/index.mjs","../node_modules/@pixi/color/src/Color.ts","../node_modules/@pixi/colord/plugins/names.mjs","../node_modules/@pixi/utils/src/color/premultiply.ts","../node_modules/@pixi/utils/src/data/getBufferType.ts","../node_modules/@pixi/utils/src/data/interleaveTypedArrays.ts","../node_modules/@pixi/utils/src/data/pow2.ts","../node_modules/@pixi/utils/src/data/removeItems.ts","../node_modules/@pixi/utils/src/data/sign.ts","../node_modules/@pixi/utils/src/data/uid.ts","../node_modules/@pixi/utils/src/media/BoundingBox.ts","../node_modules/@pixi/utils/src/media/caches.ts","../node_modules/@pixi/utils/src/media/CanvasRenderTarget.ts","../node_modules/@pixi/utils/src/media/getCanvasBoundingBox.ts","../node_modules/@pixi/utils/src/media/trimCanvas.ts","../node_modules/@pixi/utils/src/network/getResolutionOfUrl.ts","../node_modules/@pixi/extensions/src/index.ts","../node_modules/@pixi/core/src/geometry/ViewableBuffer.ts","../node_modules/@pixi/core/src/shader/utils/checkMaxIfStatementsInShader.ts","../node_modules/@pixi/core/src/state/State.ts","../node_modules/@pixi/core/src/textures/resources/autoDetectResource.ts","../node_modules/@pixi/runner/src/Runner.ts","../node_modules/@pixi/core/src/textures/resources/Resource.ts","../node_modules/@pixi/core/src/textures/resources/BufferResource.ts","../node_modules/@pixi/core/src/textures/BaseTexture.ts","../node_modules/@pixi/core/src/batch/BatchDrawCall.ts","../node_modules/@pixi/core/src/geometry/Buffer.ts","../node_modules/@pixi/core/src/geometry/Attribute.ts","../node_modules/@pixi/core/src/geometry/utils/interleaveTypedArrays.ts","../node_modules/@pixi/core/src/geometry/Geometry.ts","../node_modules/@pixi/core/src/batch/BatchGeometry.ts","../node_modules/@pixi/math/src/const.ts","../node_modules/@pixi/math/src/Point.ts","../node_modules/@pixi/math/src/shapes/Rectangle.ts","../node_modules/@pixi/math/src/shapes/Circle.ts","../node_modules/@pixi/math/src/shapes/Ellipse.ts","../node_modules/@pixi/math/src/shapes/Polygon.ts","../node_modules/@pixi/math/src/shapes/RoundedRectangle.ts","../node_modules/@pixi/math/src/Matrix.ts","../node_modules/@pixi/math/src/groupD8.ts","../node_modules/@pixi/math/src/ObservablePoint.ts","../node_modules/@pixi/math/src/Transform.ts","../node_modules/@pixi/core/src/shader/utils/uniformParsers.ts","../node_modules/@pixi/core/src/shader/utils/generateUniformsSync.ts","../node_modules/@pixi/core/src/shader/utils/getTestContext.ts","../node_modules/@pixi/core/src/shader/utils/getMaxFragmentPrecision.ts","../node_modules/@pixi/core/src/shader/utils/mapSize.ts","../node_modules/@pixi/core/src/shader/utils/mapType.ts","../node_modules/@pixi/core/src/shader/utils/setPrecision.ts","../node_modules/@pixi/core/src/shader/Program.ts","../node_modules/@pixi/core/src/shader/UniformGroup.ts","../node_modules/@pixi/core/src/shader/Shader.ts","../node_modules/@pixi/core/src/batch/BatchShaderGenerator.ts","../node_modules/@pixi/core/src/batch/BatchTextureArray.ts","../node_modules/@pixi/core/src/batch/ObjectRenderer.ts","../node_modules/@pixi/core/src/batch/BatchRenderer.ts","../node_modules/@pixi/core/src/batch/maxRecommendedTextures.ts","../node_modules/@pixi/core/src/batch/canUploadSameBuffer.ts","../node_modules/@pixi/core/src/filters/Filter.ts","../node_modules/@pixi/core/src/background/BackgroundSystem.ts","../node_modules/@pixi/core/src/batch/BatchSystem.ts","../node_modules/@pixi/core/src/context/ContextSystem.ts","../node_modules/@pixi/core/src/framebuffer/Framebuffer.ts","../node_modules/@pixi/core/src/renderTexture/BaseRenderTexture.ts","../node_modules/@pixi/core/src/textures/resources/BaseImageResource.ts","../node_modules/@pixi/utils/src/network/determineCrossOrigin.ts","../node_modules/@pixi/core/src/textures/resources/ImageResource.ts","../node_modules/@pixi/core/src/textures/TextureUvs.ts","../node_modules/@pixi/core/src/textures/Texture.ts","../node_modules/@pixi/core/src/renderTexture/RenderTexture.ts","../node_modules/@pixi/core/src/renderTexture/RenderTexturePool.ts","../node_modules/@pixi/core/src/utils/Quad.ts","../node_modules/@pixi/core/src/utils/QuadUv.ts","../node_modules/@pixi/core/src/filters/FilterState.ts","../node_modules/@pixi/core/src/filters/FilterSystem.ts","../node_modules/@pixi/core/src/framebuffer/GLFramebuffer.ts","../node_modules/@pixi/core/src/framebuffer/FramebufferSystem.ts","../node_modules/@pixi/core/src/geometry/GeometrySystem.ts","../node_modules/@pixi/core/src/textures/TextureMatrix.ts","../node_modules/@pixi/core/src/filters/spriteMask/SpriteMaskFilter.ts","../node_modules/@pixi/core/src/mask/MaskData.ts","../node_modules/@pixi/core/src/mask/MaskSystem.ts","../node_modules/@pixi/core/src/mask/AbstractMaskSystem.ts","../node_modules/@pixi/core/src/mask/ScissorSystem.ts","../node_modules/@pixi/core/src/mask/StencilSystem.ts","../node_modules/@pixi/core/src/plugin/PluginSystem.ts","../node_modules/@pixi/core/src/projection/ProjectionSystem.ts","../node_modules/@pixi/core/src/renderTexture/GenerateTextureSystem.ts","../node_modules/@pixi/core/src/renderTexture/RenderTextureSystem.ts","../node_modules/@pixi/core/src/shader/GLProgram.ts","../node_modules/@pixi/core/src/shader/utils/compileShader.ts","../node_modules/@pixi/core/src/shader/utils/defaultValue.ts","../node_modules/@pixi/core/src/shader/utils/logProgramError.ts","../node_modules/@pixi/core/src/shader/utils/generateProgram.ts","../node_modules/@pixi/core/src/shader/utils/getAttributeData.ts","../node_modules/@pixi/core/src/shader/utils/getUniformData.ts","../node_modules/@pixi/core/src/shader/utils/generateUniformBufferSync.ts","../node_modules/@pixi/core/src/shader/utils/unsafeEvalSupported.ts","../node_modules/@pixi/core/src/shader/ShaderSystem.ts","../node_modules/@pixi/core/src/startup/StartupSystem.ts","../node_modules/@pixi/core/src/state/StateSystem.ts","../node_modules/@pixi/core/src/state/utils/mapWebGLBlendModesToPixi.ts","../node_modules/@pixi/core/src/system/SystemManager.ts","../node_modules/@pixi/core/src/textures/TextureGCSystem.ts","../node_modules/@pixi/core/src/textures/GLTexture.ts","../node_modules/@pixi/core/src/textures/TextureSystem.ts","../node_modules/@pixi/core/src/textures/utils/mapTypeAndFormatToInternalFormat.ts","../node_modules/@pixi/core/src/textures/utils/mapInternalFormatToSamplerType.ts","../node_modules/@pixi/core/src/transformFeedback/TransformFeedbackSystem.ts","../node_modules/@pixi/core/src/view/ViewSystem.ts","../node_modules/@pixi/core/src/settings.ts","../node_modules/@pixi/ticker/src/const.ts","../node_modules/@pixi/ticker/src/TickerListener.ts","../node_modules/@pixi/ticker/src/Ticker.ts","../node_modules/@pixi/ticker/src/settings.ts","../node_modules/@pixi/ticker/src/TickerPlugin.ts","../node_modules/@pixi/core/src/autoDetectRenderer.ts","../node_modules/@pixi/core/src/fragments/index.ts","../node_modules/@pixi/core/src/framebuffer/MultisampleSystem.ts","../node_modules/@pixi/core/src/geometry/GLBuffer.ts","../node_modules/@pixi/core/src/geometry/BufferSystem.ts","../node_modules/@pixi/core/src/render/ObjectRendererSystem.ts","../node_modules/@pixi/core/src/Renderer.ts","../node_modules/@pixi/core/src/textures/resources/AbstractMultiResource.ts","../node_modules/@pixi/core/src/textures/resources/CubeResource.ts","../node_modules/@pixi/core/src/textures/resources/ImageBitmapResource.ts","../node_modules/@pixi/core/src/textures/resources/SVGResource.ts","../node_modules/@pixi/core/src/textures/resources/VideoResource.ts","../node_modules/@pixi/core/src/textures/resources/index.ts","../node_modules/@pixi/core/src/textures/resources/CanvasResource.ts","../node_modules/@pixi/core/src/textures/resources/ArrayResource.ts","../node_modules/@pixi/display/src/Bounds.ts","../node_modules/@pixi/display/src/DisplayObject.ts","../node_modules/@pixi/display/src/Container.ts","../node_modules/@pixi/display/src/settings.ts","../node_modules/@pixi/sprite/src/Sprite.ts","../node_modules/@pixi/mixin-cache-as-bitmap/src/index.ts","../node_modules/@pixi/mixin-get-child-by-name/src/index.ts","../node_modules/@pixi/mixin-get-global-position/src/index.ts","../node_modules/@pixi/filter-blur/src/generateBlurFragSource.ts","../node_modules/@pixi/filter-blur/src/BlurFilterPass.ts","../node_modules/@pixi/filter-blur/src/generateBlurVertSource.ts","../node_modules/@pixi/filter-color-matrix/src/ColorMatrixFilter.ts","../node_modules/pixi.js/src/filters.ts","../node_modules/@pixi/filter-alpha/src/AlphaFilter.ts","../node_modules/@pixi/filter-blur/src/BlurFilter.ts","../node_modules/@pixi/filter-displacement/src/DisplacementFilter.ts","../node_modules/@pixi/filter-fxaa/src/FXAAFilter.ts","../node_modules/@pixi/filter-noise/src/NoiseFilter.ts","../node_modules/@pixi/events/src/EventTicker.ts","../node_modules/@pixi/events/src/FederatedEvent.ts","../node_modules/@pixi/events/src/FederatedMouseEvent.ts","../node_modules/@pixi/events/src/FederatedPointerEvent.ts","../node_modules/@pixi/events/src/FederatedWheelEvent.ts","../node_modules/@pixi/events/src/EventBoundary.ts","../node_modules/@pixi/events/src/EventSystem.ts","../node_modules/@pixi/events/src/FederatedEventTarget.ts","../node_modules/@pixi/accessibility/src/AccessibilityManager.ts","../node_modules/@pixi/accessibility/src/accessibleTarget.ts","../node_modules/@pixi/app/src/Application.ts","../node_modules/@pixi/app/src/ResizePlugin.ts","../node_modules/@pixi/assets/src/AssetExtension.ts","../node_modules/@pixi/assets/src/BackgroundLoader.ts","../node_modules/@pixi/assets/src/utils/checkExtension.ts","../node_modules/@pixi/assets/src/utils/convertToList.ts","../node_modules/@pixi/assets/src/cache/Cache.ts","../node_modules/@pixi/assets/src/utils/isSingleItem.ts","../node_modules/@pixi/assets/src/loader/Loader.ts","../node_modules/@pixi/assets/src/loader/parsers/LoaderParser.ts","../node_modules/@pixi/assets/src/utils/checkDataUrl.ts","../node_modules/@pixi/assets/src/loader/parsers/loadJson.ts","../node_modules/@pixi/assets/src/loader/parsers/loadTxt.ts","../node_modules/@pixi/assets/src/loader/parsers/loadWebFont.ts","../node_modules/@pixi/assets/src/loader/parsers/WorkerManager.ts","../node_modules/@pixi/assets/src/loader/parsers/textures/utils/createTexture.ts","../node_modules/@pixi/assets/src/loader/parsers/textures/loadTextures.ts","../node_modules/@pixi/assets/src/loader/parsers/textures/loadSVG.ts","../node_modules/@pixi/assets/src/loader/parsers/textures/loadVideo.ts","../node_modules/@pixi/assets/src/utils/createStringVariations.ts","../node_modules/@pixi/assets/src/resolver/Resolver.ts","../node_modules/@pixi/assets/src/Assets.ts","../node_modules/@pixi/assets/src/cache/parsers/cacheTextureArray.ts","../node_modules/@pixi/assets/src/detections/utils/testImageFormat.ts","../node_modules/@pixi/assets/src/detections/parsers/detectAvif.ts","../node_modules/@pixi/assets/src/detections/parsers/detectWebp.ts","../node_modules/@pixi/assets/src/detections/parsers/detectDefaults.ts","../node_modules/@pixi/assets/src/detections/utils/testVideoFormat.ts","../node_modules/@pixi/assets/src/detections/parsers/detectWebm.ts","../node_modules/@pixi/assets/src/detections/parsers/detectMp4.ts","../node_modules/@pixi/assets/src/detections/parsers/detectOgv.ts","../node_modules/@pixi/assets/src/resolver/parsers/resolveTextureUrl.ts","../node_modules/@pixi/assets/src/utils/copySearchParams.ts","../node_modules/@pixi/compressed-textures/src/const.ts","../node_modules/@pixi/compressed-textures/src/loaders/detectCompressedTextures.ts","../node_modules/@pixi/compressed-textures/src/resources/BlobResource.ts","../node_modules/@pixi/compressed-textures/src/resources/CompressedTextureResource.ts","../node_modules/@pixi/compressed-textures/src/parsers/parseDDS.ts","../node_modules/@pixi/compressed-textures/src/parsers/parseKTX.ts","../node_modules/@pixi/compressed-textures/src/loaders/loadDDS.ts","../node_modules/@pixi/compressed-textures/src/loaders/loadKTX.ts","../node_modules/@pixi/compressed-textures/src/loaders/resolveCompressedTextureUrl.ts","../node_modules/@pixi/extract/src/Extract.ts","../node_modules/@pixi/graphics/src/utils/buildCircle.ts","../node_modules/@pixi/graphics/src/utils/buildPoly.ts","../node_modules/@pixi/graphics/src/utils/buildRectangle.ts","../node_modules/@pixi/graphics/src/utils/buildRoundedRectangle.ts","../node_modules/@pixi/graphics/src/const.ts","../node_modules/@pixi/graphics/src/utils/ArcUtils.ts","../node_modules/@pixi/graphics/src/utils/BezierUtils.ts","../node_modules/@pixi/graphics/src/utils/buildLine.ts","../node_modules/@pixi/graphics/src/utils/QuadraticUtils.ts","../node_modules/@pixi/graphics/src/utils/index.ts","../node_modules/@pixi/graphics/src/GraphicsData.ts","../node_modules/@pixi/graphics/src/utils/BatchPart.ts","../node_modules/@pixi/graphics/src/GraphicsGeometry.ts","../node_modules/@pixi/graphics/src/styles/FillStyle.ts","../node_modules/@pixi/graphics/src/styles/LineStyle.ts","../node_modules/@pixi/graphics/src/Graphics.ts","../node_modules/@pixi/mesh/src/MeshBatchUvs.ts","../node_modules/@pixi/mesh/src/Mesh.ts","../node_modules/@pixi/mesh/src/MeshGeometry.ts","../node_modules/@pixi/mesh/src/MeshMaterial.ts","../node_modules/@pixi/particle-container/src/ParticleBuffer.ts","../node_modules/@pixi/utils/src/data/createIndicesForQuads.ts","../node_modules/@pixi/particle-container/src/ParticleRenderer.ts","../node_modules/@pixi/text/src/const.ts","../node_modules/@pixi/text/src/TextMetrics.ts","../node_modules/@pixi/text/src/TextStyle.ts","../node_modules/@pixi/text/src/Text.ts","../node_modules/@pixi/prepare/src/CountLimiter.ts","../node_modules/@pixi/prepare/src/BasePrepare.ts","../node_modules/@pixi/prepare/src/Prepare.ts","../node_modules/@pixi/prepare/src/settings.ts","../node_modules/@pixi/sprite-tiling/src/TilingSprite.ts","../node_modules/@pixi/sprite-tiling/src/TilingSpriteRenderer.ts","../node_modules/@pixi/spritesheet/src/Spritesheet.ts","../node_modules/@pixi/spritesheet/src/spritesheetAsset.ts","../node_modules/@pixi/text-bitmap/src/BitmapFontData.ts","../node_modules/@pixi/text-bitmap/src/formats/TextFormat.ts","../node_modules/@pixi/text-bitmap/src/formats/XMLFormat.ts","../node_modules/@pixi/text-bitmap/src/formats/XMLStringFormat.ts","../node_modules/@pixi/text-bitmap/src/formats/index.ts","../node_modules/@pixi/text-bitmap/src/utils/drawGlyph.ts","../node_modules/@pixi/text-bitmap/src/utils/generateFillStyle.ts","../node_modules/@pixi/text-bitmap/src/utils/splitTextToCharacters.ts","../node_modules/@pixi/text-bitmap/src/utils/extractCharCode.ts","../node_modules/@pixi/text-bitmap/src/BitmapFont.ts","../node_modules/@pixi/text-bitmap/src/utils/resolveCharacters.ts","../node_modules/@pixi/text-bitmap/src/BitmapText.ts","../node_modules/@pixi/text-bitmap/src/loadBitmapFont.ts","../node_modules/@pixi/text-html/src/HTMLTextStyle.ts","../node_modules/@pixi/utils/src/color/hex.ts","../node_modules/@pixi/text-html/src/HTMLText.ts","../node_modules/@juggle/resize-observer/lib/utils/resizeObservers.js","../node_modules/@juggle/resize-observer/lib/ResizeObserverBoxOptions.js","../node_modules/@juggle/resize-observer/lib/algorithms/deliverResizeLoopError.js","../node_modules/@juggle/resize-observer/lib/utils/freeze.js","../node_modules/@juggle/resize-observer/lib/utils/queueMicroTask.js","../node_modules/@juggle/resize-observer/lib/ResizeObserverSize.js","../node_modules/@juggle/resize-observer/lib/DOMRectReadOnly.js","../node_modules/@juggle/resize-observer/lib/utils/element.js","../node_modules/@juggle/resize-observer/lib/utils/global.js","../node_modules/@juggle/resize-observer/lib/algorithms/calculateBoxSize.js","../node_modules/@juggle/resize-observer/lib/ResizeObserverEntry.js","../node_modules/@juggle/resize-observer/lib/algorithms/calculateDepthForNode.js","../node_modules/@juggle/resize-observer/lib/algorithms/broadcastActiveObservations.js","../node_modules/@juggle/resize-observer/lib/algorithms/gatherActiveObservationsAtDepth.js","../node_modules/@juggle/resize-observer/lib/utils/process.js","../node_modules/@juggle/resize-observer/lib/algorithms/hasActiveObservations.js","../node_modules/@juggle/resize-observer/lib/algorithms/hasSkippedObservations.js","../node_modules/@juggle/resize-observer/lib/utils/scheduler.js","../node_modules/@juggle/resize-observer/lib/utils/queueResizeObserver.js","../node_modules/@juggle/resize-observer/lib/ResizeObservation.js","../node_modules/@juggle/resize-observer/lib/ResizeObserverDetail.js","../node_modules/@juggle/resize-observer/lib/ResizeObserverController.js","../node_modules/@juggle/resize-observer/lib/ResizeObserver.js","../node_modules/@react-hook/passive-layout-effect/dist/module/index.js","../node_modules/@react-hook/latest/dist/module/index.js","../node_modules/@react-hook/resize-observer/dist/module/index.js","../node_modules/@react-hook/size/dist/module/index.js","components/ResizeSensorHook.tsx","../node_modules/immer/src/utils/env.ts","../node_modules/immer/src/utils/errors.ts","../node_modules/immer/src/utils/common.ts","../node_modules/immer/src/utils/plugins.ts","../node_modules/immer/src/core/scope.ts","../node_modules/immer/src/core/finalize.ts","../node_modules/immer/src/core/proxy.ts","../node_modules/immer/src/core/immerClass.ts","../node_modules/immer/src/core/current.ts","../node_modules/immer/src/immer.ts","../node_modules/reselect/src/utils.ts","../node_modules/reselect/src/autotrackMemoize/proxy.ts","../node_modules/reselect/src/weakMapMemoize.ts","../node_modules/reselect/src/createSelectorCreator.ts","../node_modules/redux/src/utils/formatProdErrorMessage.ts","../node_modules/redux/src/utils/symbol-observable.ts","../node_modules/redux/src/utils/actionTypes.ts","../node_modules/redux/src/utils/isPlainObject.ts","../node_modules/redux/src/createStore.ts","../node_modules/redux/src/combineReducers.ts","../node_modules/redux/src/compose.ts","../node_modules/redux-thunk/dist/redux-thunk.mjs","../node_modules/@reduxjs/toolkit/src/devtoolsExtension.ts","../node_modules/@reduxjs/toolkit/src/createDraftSafeSelector.ts","../node_modules/@reduxjs/toolkit/src/createAction.ts","../node_modules/redux/src/utils/isAction.ts","../node_modules/@reduxjs/toolkit/src/utils.ts","../node_modules/@reduxjs/toolkit/src/getDefaultMiddleware.ts","../node_modules/@reduxjs/toolkit/src/autoBatchEnhancer.ts","../node_modules/@reduxjs/toolkit/src/getDefaultEnhancers.ts","../node_modules/@reduxjs/toolkit/src/mapBuilders.ts","../node_modules/@reduxjs/toolkit/src/createSlice.ts","../node_modules/@reduxjs/toolkit/src/createReducer.ts","../node_modules/@reduxjs/toolkit/src/listenerMiddleware/utils.ts","../node_modules/@reduxjs/toolkit/src/listenerMiddleware/exceptions.ts","../node_modules/@reduxjs/toolkit/src/listenerMiddleware/task.ts","../node_modules/@reduxjs/toolkit/src/listenerMiddleware/index.ts","../node_modules/@reduxjs/toolkit/src/combineSlices.ts","../node_modules/@reduxjs/toolkit/src/formatProdErrorMessage.ts","redux/VirtualizationReducers.ts","../node_modules/react-redux/src/utils/react.ts","../node_modules/react-redux/src/components/Context.ts","../node_modules/react-redux/src/utils/useSyncExternalStore.ts","../node_modules/react-redux/src/hooks/useReduxContext.ts","../node_modules/react-redux/src/hooks/useSelector.ts","../node_modules/react-redux/src/utils/react-is.ts","../node_modules/react-redux/src/utils/batch.ts","../node_modules/react-redux/src/utils/Subscription.ts","../node_modules/react-redux/src/utils/useIsomorphicLayoutEffect.ts","../node_modules/react-redux/src/utils/shallowEqual.ts","../node_modules/react-redux/src/utils/hoistStatics.ts","../node_modules/react-redux/src/components/Provider.tsx","../node_modules/react-redux/src/hooks/useStore.ts","../node_modules/react-redux/src/hooks/useDispatch.ts","../node_modules/react-redux/src/index.ts","../node_modules/react-redux/src/components/connect.tsx","redux/ReduxStore.ts","../node_modules/@reduxjs/toolkit/src/configureStore.ts","../node_modules/redux/src/applyMiddleware.ts","components/virtualization/VirtualizedMatrixReduxHook.tsx","components/virtualization/VirtualScrollbarHook.tsx","components/virtualization/VirtualizedMatrixViewerHook.tsx","common/FontUtils.ts","components/PositionalAxisHook.tsx","common/GlobalEnumObject.ts","webpack://alignment-viewer-2/./src/common/MolecularStyles.module.scss?ef67","common/MolecularStyles.ts","common/Residues.ts","common/FileExporter.tsx","../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../node_modules/@floating-ui/utils/dom/dist/floating-ui.utils.dom.mjs","../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/react-tooltip/dist/react-tooltip.min.mjs","common/SequenceLogoGlyphs.tsx","components/SequenceLogoHook.tsx","common/BLOSUM.ts","common/AlignmentSorter.ts","common/Alignment.ts","components/msa-blocks-and-letters/MSABlocks.tsx","components/minimap/MiniMapHook.tsx","components/PositionalBarplotHook.tsx","components/layout/ResizeGridHook.tsx","components/layout/AlignmentViewerLayoutHook.tsx","webworkers/MSAGenerationWorker.ts","webworkers/WebWorkerFactory.ts","common/Observable.ts","components/msa-blocks-and-letters/MSABlockGenerator.ts","components/search/SequenceSearchHook.tsx","components/msa-blocks-and-letters/MSALetters.tsx","components/msa-blocks-and-letters/MSABlocksAndLetters.tsx","components/alignment-metadata/AlignmentSpreadsheetTableHook.tsx","components/alignment-metadata/AlignmentSpreadsheetHook.tsx","components/AlignmentViewerHook.tsx","components/search/SearchKeysListenerHook.tsx","common/FastaAlignment.ts","common/StockholmAlignment.ts","common/AlignmentLoader.ts","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/react-select/dist/useStateManager-7e1e8489.esm.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/iterableToArray.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","../node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Parser.js","../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../node_modules/stylis/src/Middleware.js","../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js","../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","../node_modules/@emotion/react/dist/emotion-element-c39617d8.browser.esm.js","../node_modules/@emotion/react/dist/emotion-react.browser.esm.js","../node_modules/react-select/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/react-select/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../node_modules/react-select/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js","../node_modules/memoize-one/dist/memoize-one.esm.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/react-select/node_modules/@babel/runtime/helpers/esm/classCallCheck.js","../node_modules/react-select/dist/react-select.esm.js","components/settings/LocalStorageAndURLManager.tsx","components/AlignmentFileLoaderHook.tsx","App.tsx","components/settings/Settings.tsx","serviceWorker.js","index.js"],"sourcesContent":["'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\nvar setFunctionLength = require('set-function-length');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tif (typeof originalFunction !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\tvar func = $reflectApply(bind, $call, arguments);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\t1 + $max(0, originalFunction.length - (arguments.length - 1)),\n\t\ttrue\n\t);\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","'use strict';\n\nvar hasPropertyDescriptors = require('has-property-descriptors')();\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = hasPropertyDescriptors && GetIntrinsic('%Object.defineProperty%', true);\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar gopd = require('gopd');\n\n/** @type {(obj: Record, property: PropertyKey, value: unknown, nonEnumerable?: boolean | null, nonWritable?: boolean | null, nonConfigurable?: boolean | null, loose?: boolean) => void} */\nmodule.exports = function defineDataProperty(\n\tobj,\n\tproperty,\n\tvalue\n) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\tthrow new $TypeError('`obj` must be an object or a function`');\n\t}\n\tif (typeof property !== 'string' && typeof property !== 'symbol') {\n\t\tthrow new $TypeError('`property` must be a string or a symbol`');\n\t}\n\tif (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {\n\t\tthrow new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {\n\t\tthrow new $TypeError('`nonWritable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {\n\t\tthrow new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 6 && typeof arguments[6] !== 'boolean') {\n\t\tthrow new $TypeError('`loose`, if provided, must be a boolean');\n\t}\n\n\tvar nonEnumerable = arguments.length > 3 ? arguments[3] : null;\n\tvar nonWritable = arguments.length > 4 ? arguments[4] : null;\n\tvar nonConfigurable = arguments.length > 5 ? arguments[5] : null;\n\tvar loose = arguments.length > 6 ? arguments[6] : false;\n\n\t/* @type {false | TypedPropertyDescriptor} */\n\tvar desc = !!gopd && gopd(obj, property);\n\n\tif ($defineProperty) {\n\t\t$defineProperty(obj, property, {\n\t\t\tconfigurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,\n\t\t\tenumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,\n\t\t\tvalue: value,\n\t\t\twritable: nonWritable === null && desc ? desc.writable : !nonWritable\n\t\t});\n\t} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {\n\t\t// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable\n\t\tobj[property] = value; // eslint-disable-line no-param-reassign\n\t} else {\n\t\tthrow new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');\n\t}\n};\n","'use strict';\n\nmodule.exports = earcut;\nmodule.exports.default = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 32767 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim | 0);\n triangles.push(ear.i / dim | 0);\n triangles.push(next.i / dim | 0);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n var p = c.next;\n while (p !== a) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(x0, y0, minX, minY, invSize),\n maxZ = zOrder(x1, y1, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim | 0);\n triangles.push(p.i / dim | 0);\n triangles.push(b.i / dim | 0);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize, 0);\n earcutLinked(c, triangles, dim, minX, minY, invSize, 0);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n var bridge = findHoleBridge(hole, outerNode);\n if (!bridge) {\n return outerNode;\n }\n\n var bridgeReverse = splitPolygon(bridge, hole);\n\n // filter collinear points around the cuts\n filterPoints(bridgeReverse, bridgeReverse.next);\n return filterPoints(bridge, bridge.next);\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n m = p.x < p.next.x ? p : p.next;\n if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = (x - minX) * invSize | 0;\n y = (y - minY) * invSize | 0;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) >= (ax - px) * (cy - py) &&\n (ax - px) * (by - py) >= (bx - px) * (ay - py) &&\n (bx - px) * (cy - py) >= (cx - px) * (by - py);\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = 0;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\nvar hasProto = require('has-proto')();\n\nvar getProto = Object.getPrototypeOf || (\n\thasProto\n\t\t? function (x) { return x.__proto__; } // eslint-disable-line no-proto\n\t\t: null\n);\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\tif ($defineProperty) {\n\t\ttry {\n\t\t\t$defineProperty({}, 'a', { value: 1 });\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\t// IE 8 has a broken defineProperty\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn false;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!hasPropertyDescriptors()) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n","'use strict';\n\nvar test = {\n\tfoo: {}\n};\n\nvar $Object = Object;\n\nmodule.exports = function hasProto() {\n\treturn { __proto__: test }.foo === test.foo && !({ __proto__: null } instanceof $Object);\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {(o: {}, p: PropertyKey) => p is keyof o} */\nmodule.exports = bind.call(call, $hasOwn);\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n ? Symbol.toStringTag\n : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n [].__proto__ === Array.prototype // eslint-disable-line no-proto\n ? function (O) {\n return O.__proto__; // eslint-disable-line no-proto\n }\n : null\n);\n\nfunction addNumericSeparator(num, str) {\n if (\n num === Infinity\n || num === -Infinity\n || num !== num\n || (num && num > -1000 && num < 1000)\n || $test.call(/e/, str)\n ) {\n return str;\n }\n var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n if (typeof num === 'number') {\n var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n if (int !== num) {\n var intStr = String(int);\n var dec = $slice.call(str, intStr.length + 1);\n return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n }\n }\n return $replace.call(str, sepRegex, '$&_');\n}\n\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n var opts = options || {};\n\n if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n }\n if (\n has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n : opts.maxStringLength !== null\n )\n ) {\n throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n }\n var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n }\n\n if (\n has(opts, 'indent')\n && opts.indent !== null\n && opts.indent !== '\\t'\n && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n ) {\n throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n }\n if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n }\n var numericSeparator = opts.numericSeparator;\n\n if (typeof obj === 'undefined') {\n return 'undefined';\n }\n if (obj === null) {\n return 'null';\n }\n if (typeof obj === 'boolean') {\n return obj ? 'true' : 'false';\n }\n\n if (typeof obj === 'string') {\n return inspectString(obj, opts);\n }\n if (typeof obj === 'number') {\n if (obj === 0) {\n return Infinity / obj > 0 ? '0' : '-0';\n }\n var str = String(obj);\n return numericSeparator ? addNumericSeparator(obj, str) : str;\n }\n if (typeof obj === 'bigint') {\n var bigIntStr = String(obj) + 'n';\n return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n }\n\n var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n if (typeof depth === 'undefined') { depth = 0; }\n if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n return isArray(obj) ? '[Array]' : '[Object]';\n }\n\n var indent = getIndent(opts, depth);\n\n if (typeof seen === 'undefined') {\n seen = [];\n } else if (indexOf(seen, obj) >= 0) {\n return '[Circular]';\n }\n\n function inspect(value, from, noIndent) {\n if (from) {\n seen = $arrSlice.call(seen);\n seen.push(from);\n }\n if (noIndent) {\n var newOpts = {\n depth: opts.depth\n };\n if (has(opts, 'quoteStyle')) {\n newOpts.quoteStyle = opts.quoteStyle;\n }\n return inspect_(value, newOpts, depth + 1, seen);\n }\n return inspect_(value, opts, depth + 1, seen);\n }\n\n if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable\n var name = nameOf(obj);\n var keys = arrObjKeys(obj, inspect);\n return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n }\n if (isSymbol(obj)) {\n var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n }\n if (isElement(obj)) {\n var s = '<' + $toLowerCase.call(String(obj.nodeName));\n var attrs = obj.attributes || [];\n for (var i = 0; i < attrs.length; i++) {\n s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n }\n s += '>';\n if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n s += '';\n return s;\n }\n if (isArray(obj)) {\n if (obj.length === 0) { return '[]'; }\n var xs = arrObjKeys(obj, inspect);\n if (indent && !singleLineValues(xs)) {\n return '[' + indentedJoin(xs, indent) + ']';\n }\n return '[ ' + $join.call(xs, ', ') + ' ]';\n }\n if (isError(obj)) {\n var parts = arrObjKeys(obj, inspect);\n if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n }\n if (parts.length === 0) { return '[' + String(obj) + ']'; }\n return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n }\n if (typeof obj === 'object' && customInspect) {\n if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n return utilInspect(obj, { depth: maxDepth - depth });\n } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n return obj.inspect();\n }\n }\n if (isMap(obj)) {\n var mapParts = [];\n if (mapForEach) {\n mapForEach.call(obj, function (value, key) {\n mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n });\n }\n return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n }\n if (isSet(obj)) {\n var setParts = [];\n if (setForEach) {\n setForEach.call(obj, function (value) {\n setParts.push(inspect(value, obj));\n });\n }\n return collectionOf('Set', setSize.call(obj), setParts, indent);\n }\n if (isWeakMap(obj)) {\n return weakCollectionOf('WeakMap');\n }\n if (isWeakSet(obj)) {\n return weakCollectionOf('WeakSet');\n }\n if (isWeakRef(obj)) {\n return weakCollectionOf('WeakRef');\n }\n if (isNumber(obj)) {\n return markBoxed(inspect(Number(obj)));\n }\n if (isBigInt(obj)) {\n return markBoxed(inspect(bigIntValueOf.call(obj)));\n }\n if (isBoolean(obj)) {\n return markBoxed(booleanValueOf.call(obj));\n }\n if (isString(obj)) {\n return markBoxed(inspect(String(obj)));\n }\n // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other\n /* eslint-env browser */\n if (typeof window !== 'undefined' && obj === window) {\n return '{ [object Window] }';\n }\n if (obj === global) {\n return '{ [object globalThis] }';\n }\n if (!isDate(obj) && !isRegExp(obj)) {\n var ys = arrObjKeys(obj, inspect);\n var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n var protoTag = obj instanceof Object ? '' : 'null prototype';\n var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n if (ys.length === 0) { return tag + '{}'; }\n if (indent) {\n return tag + '{' + indentedJoin(ys, indent) + '}';\n }\n return tag + '{ ' + $join.call(ys, ', ') + ' }';\n }\n return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n return $replace.call(String(s), /\"/g, '"');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n if (hasShammedSymbols) {\n return obj && typeof obj === 'object' && obj instanceof Symbol;\n }\n if (typeof obj === 'symbol') {\n return true;\n }\n if (!obj || typeof obj !== 'object' || !symToString) {\n return false;\n }\n try {\n symToString.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isBigInt(obj) {\n if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n return false;\n }\n try {\n bigIntValueOf.call(obj);\n return true;\n } catch (e) {}\n return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n if (f.name) { return f.name; }\n var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n if (m) { return m[1]; }\n return null;\n}\n\nfunction indexOf(xs, x) {\n if (xs.indexOf) { return xs.indexOf(x); }\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) { return i; }\n }\n return -1;\n}\n\nfunction isMap(x) {\n if (!mapSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n mapSize.call(x);\n try {\n setSize.call(x);\n } catch (s) {\n return true;\n }\n return x instanceof Map; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakMap(x) {\n if (!weakMapHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakMapHas.call(x, weakMapHas);\n try {\n weakSetHas.call(x, weakSetHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakRef(x) {\n if (!weakRefDeref || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakRefDeref.call(x);\n return true;\n } catch (e) {}\n return false;\n}\n\nfunction isSet(x) {\n if (!setSize || !x || typeof x !== 'object') {\n return false;\n }\n try {\n setSize.call(x);\n try {\n mapSize.call(x);\n } catch (m) {\n return true;\n }\n return x instanceof Set; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isWeakSet(x) {\n if (!weakSetHas || !x || typeof x !== 'object') {\n return false;\n }\n try {\n weakSetHas.call(x, weakSetHas);\n try {\n weakMapHas.call(x, weakMapHas);\n } catch (s) {\n return true;\n }\n return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n } catch (e) {}\n return false;\n}\n\nfunction isElement(x) {\n if (!x || typeof x !== 'object') { return false; }\n if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n return true;\n }\n return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n if (str.length > opts.maxStringLength) {\n var remaining = str.length - opts.maxStringLength;\n var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n }\n // eslint-disable-next-line no-control-regex\n var s = $replace.call($replace.call(str, /(['\\\\])/g, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n var n = c.charCodeAt(0);\n var x = {\n 8: 'b',\n 9: 't',\n 10: 'n',\n 12: 'f',\n 13: 'r'\n }[n];\n if (x) { return '\\\\' + x; }\n return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n for (var i = 0; i < xs.length; i++) {\n if (indexOf(xs[i], '\\n') >= 0) {\n return false;\n }\n }\n return true;\n}\n\nfunction getIndent(opts, depth) {\n var baseIndent;\n if (opts.indent === '\\t') {\n baseIndent = '\\t';\n } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n baseIndent = $join.call(Array(opts.indent + 1), ' ');\n } else {\n return null;\n }\n return {\n base: baseIndent,\n prev: $join.call(Array(depth + 1), baseIndent)\n };\n}\n\nfunction indentedJoin(xs, indent) {\n if (xs.length === 0) { return ''; }\n var lineJoiner = '\\n' + indent.prev + indent.base;\n return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n var isArr = isArray(obj);\n var xs = [];\n if (isArr) {\n xs.length = obj.length;\n for (var i = 0; i < obj.length; i++) {\n xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n }\n }\n var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n var symMap;\n if (hasShammedSymbols) {\n symMap = {};\n for (var k = 0; k < syms.length; k++) {\n symMap['$' + syms[k]] = syms[k];\n }\n }\n\n for (var key in obj) { // eslint-disable-line no-restricted-syntax\n if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n continue; // eslint-disable-line no-restricted-syntax, no-continue\n } else if ($test.call(/[^\\w$]/, key)) {\n xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n } else {\n xs.push(key + ': ' + inspect(obj[key], obj));\n }\n }\n if (typeof gOPS === 'function') {\n for (var j = 0; j < syms.length; j++) {\n if (isEnumerable.call(obj, syms[j])) {\n xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n }\n }\n }\n return xs;\n}\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&uh(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=sh(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Ah(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=yh(f.type,f.key,f.props,null,a.mode,h),h.ref=sh(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=zh(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);th(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=xh(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Bh=vh(!0),Ch=vh(!1),Dh={},Eh=Uf(Dh),Fh=Uf(Dh),Gh=Uf(Dh);function Hh(a){if(a===Dh)throw Error(p(174));return a}function Ih(a,b){G(Gh,b);G(Fh,a);G(Eh,Dh);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(Eh);G(Eh,b)}function Jh(){E(Eh);E(Fh);E(Gh)}\nfunction Kh(a){Hh(Gh.current);var b=Hh(Eh.current);var c=lb(b,a.type);b!==c&&(G(Fh,a),G(Eh,c))}function Lh(a){Fh.current===a&&(E(Eh),E(Fh))}var M=Uf(0);\nfunction Mh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Nh=[];\nfunction Oh(){for(var a=0;ac?c:4;a(!0);var d=Qh.transition;Qh.transition={};try{a(!1),b()}finally{C=c,Qh.transition=d}}function Fi(){return di().memoizedState}\nfunction Gi(a,b,c){var d=lh(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,c);else if(c=Yg(a,b,c,d),null!==c){var e=L();mh(c,a,d,e);Ji(c,b,d)}}\nfunction ri(a,b,c){var d=lh(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,Xg(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=Yg(a,b,e,d);null!==c&&(e=L(),mh(c,a,d,e),Ji(c,b,d))}}\nfunction Hi(a){var b=a.alternate;return a===N||null!==b&&b===N}function Ii(a,b){Th=Sh=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Ji(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar ai={readContext:Vg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useInsertionEffect:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useDeferredValue:Q,useTransition:Q,useMutableSource:Q,useSyncExternalStore:Q,useId:Q,unstable_isNewReconciler:!1},Yh={readContext:Vg,useCallback:function(a,b){ci().memoizedState=[a,void 0===b?null:b];return a},useContext:Vg,useEffect:vi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ti(4194308,\n4,yi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ti(4194308,4,a,b)},useInsertionEffect:function(a,b){return ti(4,2,a,b)},useMemo:function(a,b){var c=ci();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=ci();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=Gi.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=\nci();a={current:a};return b.memoizedState=a},useState:qi,useDebugValue:Ai,useDeferredValue:function(a){return ci().memoizedState=a},useTransition:function(){var a=qi(!1),b=a[0];a=Ei.bind(null,a[1]);ci().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=N,e=ci();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===R)throw Error(p(349));0!==(Rh&30)||ni(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;vi(ki.bind(null,d,\nf,a),[a]);d.flags|=2048;li(9,mi.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=ci(),b=R.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Uh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;Aj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eHj&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304)}else{if(!d)if(a=Mh(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Ej(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Hj&&1073741824!==c&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=M.current,G(M,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Ij(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(gj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Jj(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return Jh(),E(Wf),E(H),Oh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Lh(b),null;case 13:E(M);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(M),null;case 4:return Jh(),null;case 10:return Rg(b.type._context),null;case 22:case 23:return Ij(),\nnull;case 24:return null;default:return null}}var Kj=!1,U=!1,Lj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Mj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Nj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Oj=!1;\nfunction Pj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Lg(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Oj;Oj=!1;return n}\nfunction Qj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Nj(b,c,f)}e=e.next}while(e!==d)}}function Rj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Sj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Tj(a){var b=a.alternate;null!==b&&(a.alternate=null,Tj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Uj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Vj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Uj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}\nfunction Xj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Xj(a,b,c),a=a.sibling;null!==a;)Xj(a,b,c),a=a.sibling}var X=null,Yj=!1;function Zj(a,b,c){for(c=c.child;null!==c;)ak(a,b,c),c=c.sibling}\nfunction ak(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Mj(c,b);case 6:var d=X,e=Yj;X=null;Zj(a,b,c);X=d;Yj=e;null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Yj;X=c.stateNode.containerInfo;Yj=!0;\nZj(a,b,c);X=d;Yj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Nj(c,b,g):0!==(f&4)&&Nj(c,b,g));e=e.next}while(e!==d)}Zj(a,b,c);break;case 1:if(!U&&(Mj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Zj(a,b,c);break;case 21:Zj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Zj(a,b,c),U=d):Zj(a,b,c);break;default:Zj(a,b,c)}}function bk(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Lj);b.forEach(function(b){var d=ck.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction dk(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*mk(d/1960))-d;if(10a?16:a;if(null===xk)var d=!1;else{a=xk;xk=null;yk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-gk?Lk(a,0):sk|=c);Ek(a,b)}function Zk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=L();a=Zg(a,b);null!==a&&(Ac(a,b,c),Ek(a,c))}function vj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Zk(a,c)}\nfunction ck(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Zk(a,c)}var Wk;\nWk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)Ug=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return Ug=!1,zj(a,b,c);Ug=0!==(a.flags&131072)?!0:!1}else Ug=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;jj(a,b);a=b.pendingProps;var e=Yf(b,H.current);Tg(b,c);e=Xh(null,b,d,a,e,c);var f=bi();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,ah(b),e.updater=nh,b.stateNode=e,e._reactInternals=b,rh(b,d,a,c),b=kj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Yi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{jj(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=$k(d);a=Lg(d,a);switch(e){case 0:b=dj(null,b,d,a,c);break a;case 1:b=ij(null,b,d,a,c);break a;case 11:b=Zi(null,b,d,a,c);break a;case 14:b=aj(null,b,d,Lg(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),dj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),ij(a,b,d,e,c);case 3:a:{lj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;bh(a,b);gh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ki(Error(p(423)),b);b=mj(a,b,d,c,e);break a}else if(d!==e){e=Ki(Error(p(424)),b);b=mj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Ch(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=$i(a,b,c);break a}Yi(a,b,d,c)}b=b.child}return b;case 5:return Kh(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\nhj(a,b),Yi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return pj(a,b,c);case 4:return Ih(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Bh(b,null,d,c):Yi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),Zi(a,b,d,e,c);case 7:return Yi(a,b,b.pendingProps,c),b.child;case 8:return Yi(a,b,b.pendingProps.children,c),b.child;case 12:return Yi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Mg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=$i(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=ch(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);Sg(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);Sg(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Yi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,Tg(b,c),e=Vg(e),d=d(e),b.flags|=1,Yi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Lg(d,b.pendingProps),e=Lg(d.type,e),aj(a,b,d,e,c);case 15:return cj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),jj(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,Tg(b,c),ph(b,d,e),rh(b,d,e,c),kj(null,b,d,!0,a,c);case 19:return yj(a,b,c);case 22:return ej(a,b,c)}throw Error(p(156,b.tag));};function Gk(a,b){return ac(a,b)}\nfunction al(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new al(a,b,c,d)}function bj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction $k(a){if(\"function\"===typeof a)return bj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction wh(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction yh(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Ah(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return qj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Ah(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function qj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function xh(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction zh(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction bl(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function cl(a,b,c,d,e,f,g,h,k){a=new bl(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};ah(f);return a}function dl(a,b,c){var d=3>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $floor = GetIntrinsic('%Math.floor%');\n\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(fn, 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(fn, 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n","/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n RFC1738: 'RFC1738',\n RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n 'default': Format.RFC3986,\n formatters: {\n RFC1738: function (value) {\n return replace.call(value, percentTwenties, '+');\n },\n RFC3986: function (value) {\n return String(value);\n }\n },\n RFC1738: Format.RFC1738,\n RFC3986: Format.RFC3986\n};\n","'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n formats: formats,\n parse: parse,\n stringify: stringify\n};\n","'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n allowDots: false,\n allowPrototypes: false,\n allowSparse: false,\n arrayLimit: 20,\n charset: 'utf-8',\n charsetSentinel: false,\n comma: false,\n decoder: utils.decode,\n delimiter: '&',\n depth: 5,\n ignoreQueryPrefix: false,\n interpretNumericEntities: false,\n parameterLimit: 1000,\n parseArrays: true,\n plainObjects: false,\n strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n return String.fromCharCode(parseInt(numberStr, 10));\n });\n};\n\nvar parseArrayValue = function (val, options) {\n if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n return val.split(',');\n }\n\n return val;\n};\n\n// This is what browsers will submit when the ✓ character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the ✓ character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n var obj = { __proto__: null };\n\n var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n var parts = cleanStr.split(options.delimiter, limit);\n var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n var i;\n\n var charset = options.charset;\n if (options.charsetSentinel) {\n for (i = 0; i < parts.length; ++i) {\n if (parts[i].indexOf('utf8=') === 0) {\n if (parts[i] === charsetSentinel) {\n charset = 'utf-8';\n } else if (parts[i] === isoSentinel) {\n charset = 'iso-8859-1';\n }\n skipIndex = i;\n i = parts.length; // The eslint settings do not allow break;\n }\n }\n }\n\n for (i = 0; i < parts.length; ++i) {\n if (i === skipIndex) {\n continue;\n }\n var part = parts[i];\n\n var bracketEqualsPos = part.indexOf(']=');\n var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n var key, val;\n if (pos === -1) {\n key = options.decoder(part, defaults.decoder, charset, 'key');\n val = options.strictNullHandling ? null : '';\n } else {\n key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n val = utils.maybeMap(\n parseArrayValue(part.slice(pos + 1), options),\n function (encodedVal) {\n return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n }\n );\n }\n\n if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n val = interpretNumericEntities(val);\n }\n\n if (part.indexOf('[]=') > -1) {\n val = isArray(val) ? [val] : val;\n }\n\n if (has.call(obj, key)) {\n obj[key] = utils.combine(obj[key], val);\n } else {\n obj[key] = val;\n }\n }\n\n return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n var leaf = valuesParsed ? val : parseArrayValue(val, options);\n\n for (var i = chain.length - 1; i >= 0; --i) {\n var obj;\n var root = chain[i];\n\n if (root === '[]' && options.parseArrays) {\n obj = [].concat(leaf);\n } else {\n obj = options.plainObjects ? Object.create(null) : {};\n var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n var index = parseInt(cleanRoot, 10);\n if (!options.parseArrays && cleanRoot === '') {\n obj = { 0: leaf };\n } else if (\n !isNaN(index)\n && root !== cleanRoot\n && String(index) === cleanRoot\n && index >= 0\n && (options.parseArrays && index <= options.arrayLimit)\n ) {\n obj = [];\n obj[index] = leaf;\n } else if (cleanRoot !== '__proto__') {\n obj[cleanRoot] = leaf;\n }\n }\n\n leaf = obj;\n }\n\n return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n if (!givenKey) {\n return;\n }\n\n // Transform dot notation to bracket notation\n var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n // The regex chunks\n\n var brackets = /(\\[[^[\\]]*])/;\n var child = /(\\[[^[\\]]*])/g;\n\n // Get the parent\n\n var segment = options.depth > 0 && brackets.exec(key);\n var parent = segment ? key.slice(0, segment.index) : key;\n\n // Stash the parent if it exists\n\n var keys = [];\n if (parent) {\n // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n if (!options.plainObjects && has.call(Object.prototype, parent)) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n\n keys.push(parent);\n }\n\n // Loop through children appending to the array until we hit depth\n\n var i = 0;\n while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n i += 1;\n if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n if (!options.allowPrototypes) {\n return;\n }\n }\n keys.push(segment[1]);\n }\n\n // If there's a remainder, just add whatever is left\n\n if (segment) {\n keys.push('[' + key.slice(segment.index) + ']');\n }\n\n return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') {\n throw new TypeError('Decoder has to be a function.');\n }\n\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n return {\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n parseArrays: opts.parseArrays !== false,\n plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (str, opts) {\n var options = normalizeParseOptions(opts);\n\n if (str === '' || str === null || typeof str === 'undefined') {\n return options.plainObjects ? Object.create(null) : {};\n }\n\n var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n var obj = options.plainObjects ? Object.create(null) : {};\n\n // Iterate over the keys and setup the new object\n\n var keys = Object.keys(tempObj);\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n obj = utils.merge(obj, newObj, options);\n }\n\n if (options.allowSparse === true) {\n return obj;\n }\n\n return utils.compact(obj);\n};\n","'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n brackets: function brackets(prefix) {\n return prefix + '[]';\n },\n comma: 'comma',\n indices: function indices(prefix, key) {\n return prefix + '[' + key + ']';\n },\n repeat: function repeat(prefix) {\n return prefix;\n }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n addQueryPrefix: false,\n allowDots: false,\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encoder: utils.encode,\n encodeValuesOnly: false,\n format: defaultFormat,\n formatter: formats.formatters[defaultFormat],\n // deprecated\n indices: false,\n serializeDate: function serializeDate(date) {\n return toISO.call(date);\n },\n skipNulls: false,\n strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n return typeof v === 'string'\n || typeof v === 'number'\n || typeof v === 'boolean'\n || typeof v === 'symbol'\n || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n object,\n prefix,\n generateArrayPrefix,\n commaRoundTrip,\n strictNullHandling,\n skipNulls,\n encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n sideChannel\n) {\n var obj = object;\n\n var tmpSc = sideChannel;\n var step = 0;\n var findFlag = false;\n while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n // Where object last appeared in the ref tree\n var pos = tmpSc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n } else {\n findFlag = true; // Break while\n }\n }\n if (typeof tmpSc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n } else if (obj instanceof Date) {\n obj = serializeDate(obj);\n } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = utils.maybeMap(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate(value);\n }\n return value;\n });\n }\n\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n }\n\n obj = '';\n }\n\n if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n if (encoder) {\n var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n }\n return [formatter(prefix) + '=' + formatter(String(obj))];\n }\n\n var values = [];\n\n if (typeof obj === 'undefined') {\n return values;\n }\n\n var objKeys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n obj = utils.maybeMap(obj, encoder);\n }\n objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n } else if (isArray(filter)) {\n objKeys = filter;\n } else {\n var keys = Object.keys(obj);\n objKeys = sort ? keys.sort(sort) : keys;\n }\n\n var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? prefix + '[]' : prefix;\n\n for (var j = 0; j < objKeys.length; ++j) {\n var key = objKeys[j];\n var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n\n if (skipNulls && value === null) {\n continue;\n }\n\n var keyPrefix = isArray(obj)\n ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, key) : adjustedPrefix\n : adjustedPrefix + (allowDots ? '.' + key : '[' + key + ']');\n\n sideChannel.set(object, step);\n var valueSideChannel = getSideChannel();\n valueSideChannel.set(sentinel, sideChannel);\n pushToArray(values, stringify(\n value,\n keyPrefix,\n generateArrayPrefix,\n commaRoundTrip,\n strictNullHandling,\n skipNulls,\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n filter,\n sort,\n allowDots,\n serializeDate,\n format,\n formatter,\n encodeValuesOnly,\n charset,\n valueSideChannel\n ));\n }\n\n return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n if (!opts) {\n return defaults;\n }\n\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n\n var charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n\n var format = formats['default'];\n if (typeof opts.format !== 'undefined') {\n if (!has.call(formats.formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n var formatter = formats.formatters[format];\n\n var filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n };\n};\n\nmodule.exports = function (object, opts) {\n var obj = object;\n var options = normalizeStringifyOptions(opts);\n\n var objKeys;\n var filter;\n\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n } else if (isArray(options.filter)) {\n filter = options.filter;\n objKeys = filter;\n }\n\n var keys = [];\n\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n\n var arrayFormat;\n if (opts && opts.arrayFormat in arrayPrefixGenerators) {\n arrayFormat = opts.arrayFormat;\n } else if (opts && 'indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n } else {\n arrayFormat = 'indices';\n }\n\n var generateArrayPrefix = arrayPrefixGenerators[arrayFormat];\n if (opts && 'commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n var commaRoundTrip = generateArrayPrefix === 'comma' && opts && opts.commaRoundTrip;\n\n if (!objKeys) {\n objKeys = Object.keys(obj);\n }\n\n if (options.sort) {\n objKeys.sort(options.sort);\n }\n\n var sideChannel = getSideChannel();\n for (var i = 0; i < objKeys.length; ++i) {\n var key = objKeys[i];\n\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n pushToArray(keys, stringify(\n obj[key],\n key,\n generateArrayPrefix,\n commaRoundTrip,\n options.strictNullHandling,\n options.skipNulls,\n options.encode ? options.encoder : null,\n options.filter,\n options.sort,\n options.allowDots,\n options.serializeDate,\n options.format,\n options.formatter,\n options.encodeValuesOnly,\n options.charset,\n sideChannel\n ));\n }\n\n var joined = keys.join(options.delimiter);\n var prefix = options.addQueryPrefix === true ? '?' : '';\n\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n } else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n\n return joined.length > 0 ? prefix + joined : '';\n};\n","'use strict';\n\nvar formats = require('./formats');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar hexTable = (function () {\n var array = [];\n for (var i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n\n return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n while (queue.length > 1) {\n var item = queue.pop();\n var obj = item.obj[item.prop];\n\n if (isArray(obj)) {\n var compacted = [];\n\n for (var j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n\n item.obj[item.prop] = compacted;\n }\n }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n var obj = options && options.plainObjects ? Object.create(null) : {};\n for (var i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n\n return obj;\n};\n\nvar merge = function merge(target, source, options) {\n /* eslint no-param-reassign: 0 */\n if (!source) {\n return target;\n }\n\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n } else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n target[source] = true;\n }\n } else {\n return [target, source];\n }\n\n return target;\n }\n\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n\n var mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n mergeTarget = arrayToObject(target, options);\n }\n\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has.call(target, i)) {\n var targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n } else {\n target.push(item);\n }\n } else {\n target[i] = item;\n }\n });\n return target;\n }\n\n return Object.keys(source).reduce(function (acc, key) {\n var value = source[key];\n\n if (has.call(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n } else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n};\n\nvar decode = function (str, decoder, charset) {\n var strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n } catch (e) {\n return strWithoutPlus;\n }\n};\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n\n var string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n } else if (typeof str !== 'string') {\n string = String(str);\n }\n\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n\n var out = '';\n for (var i = 0; i < string.length; ++i) {\n var c = string.charCodeAt(i);\n\n if (\n c === 0x2D // -\n || c === 0x2E // .\n || c === 0x5F // _\n || c === 0x7E // ~\n || (c >= 0x30 && c <= 0x39) // 0-9\n || (c >= 0x41 && c <= 0x5A) // a-z\n || (c >= 0x61 && c <= 0x7A) // A-Z\n || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n out += string.charAt(i);\n continue;\n }\n\n if (c < 0x80) {\n out = out + hexTable[c];\n continue;\n }\n\n if (c < 0x800) {\n out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n if (c < 0xD800 || c >= 0xE000) {\n out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n i += 1;\n c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n /* eslint operator-linebreak: [2, \"before\"] */\n out += hexTable[0xF0 | (c >> 18)]\n + hexTable[0x80 | ((c >> 12) & 0x3F)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n }\n\n return out;\n};\n\nvar compact = function compact(value) {\n var queue = [{ obj: { o: value }, prop: 'o' }];\n var refs = [];\n\n for (var i = 0; i < queue.length; ++i) {\n var item = queue[i];\n var obj = item.obj[item.prop];\n\n var keys = Object.keys(obj);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n var val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n\n compactQueue(queue);\n\n return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n return [].concat(a, b);\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n if (isArray(val)) {\n var mapped = [];\n for (var i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n};\n\nmodule.exports = {\n arrayToObject: arrayToObject,\n assign: assign,\n combine: combine,\n compact: compact,\n decode: decode,\n encode: encode,\n isBuffer: isBuffer,\n isRegExp: isRegExp,\n maybeMap: maybeMap,\n merge: merge\n};\n","/*\n * Copyright Joyent, Inc. and other Node contributors.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to permit\n * persons to whom the Software is furnished to do so, subject to the\n * following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n * USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n'use strict';\n\nvar punycode = require('punycode');\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n/*\n * define these here so at least they only have to be\n * compiled once on the first module load.\n */\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^?\\s]*)(\\?[^\\s]*)?$/,\n\n /*\n * RFC 2396: characters reserved for delimiting URLs.\n * We actually just auto-escape these.\n */\n delims = [\n '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'\n ],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = [\n '{', '}', '|', '\\\\', '^', '`'\n ].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n /*\n * Characters that are never ever allowed in a hostname.\n * Note that any invalid chars are also handled, but these\n * are the ones that are *expected* to be seen, so we fast-path\n * them.\n */\n nonHostChars = [\n '%', '/', '?', ';', '#'\n ].concat(autoEscape),\n hostEndingChars = [\n '/', '?', '#'\n ],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n javascript: true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n javascript: true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n http: true,\n https: true,\n ftp: true,\n gopher: true,\n file: true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('qs');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && typeof url === 'object' && url instanceof Url) { return url; }\n\n var u = new Url();\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function (url, parseQueryString, slashesDenoteHost) {\n if (typeof url !== 'string') {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n /*\n * Copy chrome, IE, opera backslash-handling behavior.\n * Back slashes before the query string get converted to forward slashes\n * See: https://code.google.com/p/chromium/issues/detail?id=25916\n */\n var queryIndex = url.indexOf('?'),\n splitter = queryIndex !== -1 && queryIndex < url.indexOf('#') ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n /*\n * trim before proceeding.\n * This is to support parse stuff like \" http://foo.com \\n\"\n */\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n /*\n * figure out if it's got a host\n * user@server is *always* interpreted as a hostname, and url\n * resolution will treat //foo/bar as host=foo,path=bar because that's\n * how the browser resolves relative URLs.\n */\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@/]+@[^@/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] && (slashes || (proto && !slashedProtocol[proto]))) {\n\n /*\n * there's a hostname.\n * the first instance of /, ?, ;, or # ends the host.\n *\n * If there is an @ in the hostname, then non-host chars *are* allowed\n * to the left of the last @ sign, unless some host-ending character\n * comes *before* the @-sign.\n * URLs are obnoxious.\n *\n * ex:\n * http://a@b@c/ => user:a@b host:c\n * http://a@b?@c => user:a host:c path:/?@c\n */\n\n /*\n * v0.12 TODO(isaacs): This is not quite how Chrome does things.\n * Review our test case against browsers more comprehensively.\n */\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; }\n }\n\n /*\n * at this point, either we have an explicit point where the\n * auth portion cannot go past, or the last @ char is the decider.\n */\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n /*\n * atSign must be in auth portion.\n * http://a@b/c@d => host:b auth:a path:/c@d\n */\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n /*\n * Now we have a portion which is definitely the auth.\n * Pull that off.\n */\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; }\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1) { hostEnd = rest.length; }\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n /*\n * we've indicated that there is a hostname,\n * so even if it's empty, it has to be present.\n */\n this.hostname = this.hostname || '';\n\n /*\n * if hostname begins with [ and ends with ]\n * assume that it's an IPv6 address.\n */\n var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) { continue; }\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n /*\n * we replace non-ASCII char with a temporary placeholder\n * we need this to make sure size of hostname is not\n * broken by replacing non-ASCII by nothing\n */\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n /*\n * IDNA Support: Returns a punycoded representation of \"domain\".\n * It only converts parts of the domain name that\n * have non-ASCII characters, i.e. it doesn't matter if\n * you call it with a domain that already is ASCII-only.\n */\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n /*\n * strip [ and ] from the hostname\n * the host field still retains them, though\n */\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n /*\n * now rest is set to the post-host stuff.\n * chop off any delim chars.\n */\n if (!unsafeProtocol[lowerProto]) {\n\n /*\n * First, make 100% sure that any \"autoEscape\" chars get\n * escaped, even if encodeURIComponent doesn't think they\n * need to be.\n */\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1) { continue; }\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) { this.pathname = rest; }\n if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n // to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n /*\n * ensure it's an object, and not a string url.\n * If it's an obj, this is a no-op.\n * this way, you can call url_format() on strings\n * to clean up potentially wonky urls.\n */\n if (typeof obj === 'string') { obj = urlParse(obj); }\n if (!(obj instanceof Url)) { return Url.prototype.format.call(obj); }\n return obj.format();\n}\n\nUrl.prototype.format = function () {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ? this.hostname : '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query && typeof this.query === 'object' && Object.keys(this.query).length) {\n query = querystring.stringify(this.query, {\n arrayFormat: 'repeat',\n addQueryPrefix: false\n });\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') { protocol += ':'; }\n\n /*\n * only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n * unless they had them to begin with.\n */\n if (this.slashes || (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') { pathname = '/' + pathname; }\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') { hash = '#' + hash; }\n if (search && search.charAt(0) !== '?') { search = '?' + search; }\n\n pathname = pathname.replace(/[?#]/g, function (match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function (relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) { return relative; }\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function (relative) {\n if (typeof relative === 'string') {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n /*\n * hash is always overridden, no matter what.\n * even href=\"\" will remove it.\n */\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol') { result[rkey] = relative[rkey]; }\n }\n\n // urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] && result.hostname && !result.pathname) {\n result.pathname = '/';\n result.path = result.pathname;\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n /*\n * if it's a known url protocol, then changing\n * the protocol does weird things\n * first, if it's not file:, then we MUST have a host,\n * and if there was a path\n * to begin with, then we MUST have a path.\n * if it is file:, then the host is dropped,\n * because that's known to be hostless.\n * anything else is assumed to be absolute.\n */\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift())) { }\n if (!relative.host) { relative.host = ''; }\n if (!relative.hostname) { relative.hostname = ''; }\n if (relPath[0] !== '') { relPath.unshift(''); }\n if (relPath.length < 2) { relPath.unshift(''); }\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = result.pathname && result.pathname.charAt(0) === '/',\n isRelAbs = relative.host || relative.pathname && relative.pathname.charAt(0) === '/',\n mustEndAbs = isRelAbs || isSourceAbs || (result.host && relative.pathname),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n /*\n * if the url is a non-slashed url, then relative\n * links like ../.. should be able\n * to crawl up to the hostname, as well. This is strange.\n * result.protocol has already been set by now.\n * Later on, put the first path part into the host field.\n */\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') { srcPath[0] = result.host; } else { srcPath.unshift(result.host); }\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') { relPath[0] = relative.host; } else { relPath.unshift(relative.host); }\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = relative.host || relative.host === '' ? relative.host : result.host;\n result.hostname = relative.hostname || relative.hostname === '' ? relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n /*\n * it's relative\n * throw away the existing file, and take the new path instead.\n */\n if (!srcPath) { srcPath = []; }\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (relative.search != null) {\n /*\n * just pull out the search.\n * like href='?foo'.\n * Put this after the other two cases because it simplifies the booleans\n */\n if (psychotic) {\n result.host = srcPath.shift();\n result.hostname = result.host;\n /*\n * occationaly the auth can get stuck only in host\n * this especially happens in cases like\n * url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n */\n var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.hostname = authInHost.shift();\n result.host = result.hostname;\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n // to support http.request\n if (result.pathname !== null || result.search !== null) {\n result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n /*\n * no path at all. easy.\n * we've already handled the other stuff above.\n */\n result.pathname = null;\n // to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n /*\n * if a url ENDs in . or .., then it must get a trailing slash.\n * however, if it ends in anything else non-slashy,\n * then it must NOT get a trailing slash.\n */\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (result.host || relative.host || srcPath.length > 1) && (last === '.' || last === '..') || last === '';\n\n /*\n * strip single dots, resolve double dots to parent dir\n * if the path tries to go above the root, `up` ends up > 0\n */\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' && (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' || (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = isAbsolute ? '' : srcPath.length ? srcPath.shift() : '';\n result.host = result.hostname;\n /*\n * occationaly the auth can get stuck only in host\n * this especially happens in cases like\n * url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n */\n var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.hostname = authInHost.shift();\n result.host = result.hostname;\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (srcPath.length > 0) {\n result.pathname = srcPath.join('/');\n } else {\n result.pathname = null;\n result.path = null;\n }\n\n // to support request.http\n if (result.pathname !== null || result.search !== null) {\n result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function () {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) { this.hostname = host; }\n};\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n","/**\n * @license React\n * use-sync-external-store-with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var g=require(\"react\");function n(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var p=\"function\"===typeof Object.is?Object.is:n,q=g.useSyncExternalStore,r=g.useRef,t=g.useEffect,u=g.useMemo,v=g.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,h){var c=r(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=u(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==h&&f.hasValue){var b=f.value;if(h(b,a))return k=b}return k=a}b=k;if(p(d,a))return b;var e=l(a);if(void 0!==h&&h(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,h]);var d=q(a,c[0],c[1]);\nt(function(){f.hasValue=!0;f.value=d},[d]);v(d);return d};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/use-sync-external-store-with-selector.production.min.js');\n} else {\n module.exports = require('./cjs/use-sync-external-store-with-selector.development.js');\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","import { useCallback, useEffect, useRef, useState } from \"react\";\n\n/**\n * Convert any valid color string into a hex code and RGB\n * value using the built in browser converter.\n * taken from\n * https://stackoverflow.com/questions/1573053/\n * and\n * https://stackoverflow.com/questions/5623838/\n * @param str The string to convert\n * @returns An object that contains the hex and rgb values for that string\n * Default to black (#000000) if the string is not recognized.\n */\nexport function stringToColor(str: string) {\n const ctx = document.createElement(\"canvas\").getContext(\"2d\");\n ctx!.fillStyle = str;\n let hex = ctx!.fillStyle!;\n\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n // https://stackoverflow.com/questions/5623838\n // (I think only necessary in testing, but might catch odd browser behavior)\n var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, function (m, r, g, b) {\n return \"#\" + r + r + g + g + b + b;\n });\n\n var rgbaResult = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)!;\n return {\n hexString: hex,\n rgb: {\n red: parseInt(rgbaResult[1], 16),\n green: parseInt(rgbaResult[2], 16),\n blue: parseInt(rgbaResult[3], 16),\n },\n };\n}\n\n/**\n * Generate a UUID. Modified from:\n * https://stackoverflow.com/questions/105034\n */\nexport function generateUUIDv4() {\n const x = (([1e7] as any) + -1e3 + -4e3 + -8e3 + -1e11) as string;\n return x.replace(/[018]/g, function (c: string) {\n return (\n parseInt(c) ^\n (window.crypto.getRandomValues(new Uint8Array(1))[0] &\n (15 >> (parseInt(c) / 4)))\n ).toString(16);\n });\n}\n\n/**\n * Custom state function that enables a function call only\n * after the state has been updated. Necessary when attempting\n * to track the mouse movement in e.g., the minimap - otherwise \n * redux store is updated and new props are generated / passed \n * before the state registers.\n * taken directly from https://stackoverflow.com/questions/54954091\n * @param initialState \n * @returns \n */\nexport function useStateCallback(\n initialState: T\n): [T, (state: T, cb?: (state: T) => void) => void] {\n const [state, setState] = useState(initialState);\n const cbRef = useRef<((state: T) => void) | undefined>(undefined); // init mutable ref container for callbacks\n\n const setStateCallback = useCallback((state: T, cb?: (state: T) => void) => {\n cbRef.current = cb; // store current, passed callback in ref\n setState(state);\n }, []); // keep object reference stable, exactly like `useState`\n\n useEffect(() => {\n // cb.current is `undefined` on initial render,\n // so we only invoke callback on state *updates*\n if (cbRef.current) {\n cbRef.current(state);\n cbRef.current = undefined; // reset callback after execution\n }\n }, [state]);\n\n return [state, setStateCallback];\n}\n\n/**\n * Creates an object composed of keys generated from the results of\n * running each element of collection through fn. The corresponding\n * value of each key is an array of the elements responsible for\n * generating the key. (description taken from lodash documentation)\n *\n * The difference between this function and the lodash \"groupBy\",\n * function is that this returns a Map object, allowing for more complex\n * keys.\n *\n * @param items\n * @param fn\n */\nexport function mapGroupBy(\n items: T1[],\n fn: (item: T1) => T2\n): Map {\n //{ [key: string]: T[] } {\n return items.reduce((acc, item) => {\n const key = fn(item);\n const existing = acc.get(key) ? acc.get(key)! : [];\n acc.set(key, [...existing, item]);\n return acc;\n }, new Map());\n}\n\n/**\n * Array type that requires at least one array element.\n * https://stackoverflow.com/questions/49910889\n */\nexport type ArrayOneOrMore = {\n 0: T;\n} & Array;\n\n/**\n * Convert a string to a boolean or number if possible, otherwise\n * return the string.\n * @param val \n * @returns \n */\nfunction strToNumberBooleanString(val: string){\n if (['TRUE', 'FALSE'].includes(val.toUpperCase())){\n return val.toUpperCase() === 'TRUE';\n }\n if(+val){ return +val; }\n return val;\n}\n\n/**\n * Get all the parameters in the URL. Taken from:\n * https://stackoverflow.com/questions/979975\n */\nexport function getURLParameters() {\n return window.location.search\n .substring(1)\n .split(\"&\")\n .map((v) => v.split(\"=\"))\n .reduce(\n (map, [key, value]) => map.set(\n key, decodeURIComponent(value))//strToNumberBooleanString( decodeURIComponent(value)) )\n ,\n new Map()// | boolean | number>()\n );\n}\n\n/**\n * Get an Error that represents a parser problem\n */\nexport function getParseError(parserName: string, errorMessage: string): Error {\n const toReturn = new Error(errorMessage);\n toReturn.name = parserName + \" Parse Error\";\n return toReturn;\n}\n\n/**\n * Create an array of indicies from a start and end index (inclusive of start and end)\n * see https://stackoverflow.com/questions/66858701/\n * @param startIdx \n * @param endIdx \n * @returns \n */\nexport function startEndIdxToArray(startIdx: number, endIdx: number){\n return Array.from(\n { length: endIdx - startIdx + 1 },\n (_, i) => startIdx + i\n );\n}","\n//\n// general\n\nimport { IBounds } from \"../ResizeSensorHook\";\n\n//\nexport enum VirtualizationStrategy {\n //fully render all rows/columns (offset = worldShiftPx)\n ShiftOnlyFullyRendered,\n\n //render of only requested rows/columns (offset = renderShiftPx)\n Virtualize,\n\n //virtualizedmatrix should not perform the offset at all - it will be\n //done manually by the caller\n Manual\n};\n\n\nexport enum ScrollbarOptions{\n //no scrollbar\n NeverOn = \"NeverOn\", \n\n //show the scrollbar at all times if overflowed (other component hovered)\n AlwaysOnWhenOverflowed = \"AlwaysOnWhenOverflowed\", \n\n //show the scrollbar when hovered over the virtualization\n OnHoverWhenOverflowed = \"AlwaysOnWOnHoverWhenOverflowedhenOverflowed\", \n}\n\nexport enum VirtualizationRole{\n Controller, //sets the container sizing, initializes the axis\n Responder\n}\n\n\n//\n// inteface for passing props from parent AlignmentViewer component to\n// component classes like AlignmentDetails, PositionalAxis, PositionalBarplot,\n// SequenceLogo, MiniMap\n//\ninterface IVirtualizationBasics {\n virtualizationId: string;\n}\nexport interface IControllerRole extends IVirtualizationBasics{\n role: VirtualizationRole.Controller;\n cellCount: number;\n cellSizePx: number;\n}\nexport interface IResponderRole extends IVirtualizationBasics{\n role: VirtualizationRole.Responder;\n cellCount: never;\n cellSizePx: never;\n}\n\n\n//\n// Interfaces for the getMatrixContent, getRowContent, getColumnContent that\n// clients must implement\n//\nexport interface IVirtualizedHorizontalContents {\n firstColIdxToRender: number;\n lastColIdxToRender: number;\n renderWidthPx: number;\n renderShiftLeftPx: number;\n worldWidthPx: number;\n worldShiftLeftPx: number;\n}\nexport interface IVirtualizedVerticalContents {\n firstRowIdxToRender: number;\n lastRowIdxToRender: number;\n renderHeightPx: number;\n renderShiftTopPx: number;\n worldHeightPx: number;\n worldShiftTopPx: number;\n}\nexport interface IVirtualizedMatrixContent extends \n IVirtualizedHorizontalContents, IVirtualizedVerticalContents{}\n\n \n//\n// Interfaces passed to VirtualizedMatrix components\n//\nexport interface IVirtualizeParamBasics {\n virtualizationId: string; //for redux\n\n //misc params - omitted from \n virtualizationStrategy: VirtualizationStrategy;\n\n //params omitted from the redux simplification\n scrollbar: ScrollbarOptions;\n hoverTracker: undefined | \"start\" | \"end\" | \"both\"; //start=left or top, end = right or bottom\n containerBoundsUpdated?: (bounds: IBounds)=>void;\n overflowVisible?: boolean; // allow caller to deal with overflow themselves\n\n startScrolledIndicatorStyleAttr?: React.CSSProperties;\n endScrolledIndicatorStyleAttr?: React.CSSProperties;\n}\nexport interface IResponderVirtualizeParams extends IVirtualizeParamBasics{\n //is the caller the owner of the axis? and should this virtualization\n //be in charge of updating sizing in the redux store?\n role: VirtualizationRole.Responder;\n cellCount: never;\n cellSizePx: never;\n}\nexport interface IControllerVirtualizeParams extends IVirtualizeParamBasics{\n //is the caller the owner of the axis? and should this virtualization\n //be in charge of updating sizing in the redux store?\n role: VirtualizationRole.Controller;\n cellCount: number;\n cellSizePx: number;\n}\nexport type IVirtualizeParams = IResponderVirtualizeParams | IControllerVirtualizeParams;\n\n//slighly simpler for redux\nexport type IResponderVirtualizeReduxParams = \n Omit;\nexport type IControllerVirtualizeReduxParams = \n Omit;\nexport type IVirtualizeReduxParams = \n IResponderVirtualizeReduxParams | IControllerVirtualizeReduxParams\n\n//\n// Primary entry points to create a virtualization.\n//\nexport interface IVirtualizedVerticalViewer {\n getContentForRows(params: IVirtualizedVerticalContents): JSX.Element;\n verticalParams: IVirtualizeParams;\n}\nexport interface IVirtualizedHorizontalViewer {\n getContentForColumns(params: IVirtualizedHorizontalContents): JSX.Element;\n horizontalParams: IVirtualizeParams;\n}\nexport interface IVirtualizedMatrixViewer {\n getMatrixContent(params: IVirtualizedMatrixContent): JSX.Element;\n horizontalParams: IVirtualizeParams;\n verticalParams: IVirtualizeParams;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"hoverTrackerSize\":\"5\"};","/**\n * Different types of environments for WebGL.\n * @static\n * @memberof PIXI\n * @enum {number}\n */\nexport enum ENV\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * Used for older v1 WebGL devices. PixiJS will aim to ensure compatibility\n * with older / less advanced devices. If you experience unexplained flickering prefer this environment.\n * @default 0\n */\n WEBGL_LEGACY,\n /**\n * Version 1 of WebGL\n * @default 1\n */\n WEBGL,\n /**\n * Version 2 of WebGL\n * @default 2\n */\n WEBGL2,\n}\n\n/**\n * Constant to identify the Renderer Type.\n * @static\n * @memberof PIXI\n * @enum {number}\n */\nexport enum RENDERER_TYPE\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * Unknown render type.\n * @default 0\n */\n UNKNOWN,\n /**\n * WebGL render type.\n * @default 1\n */\n WEBGL,\n /**\n * Canvas render type.\n * @default 2\n */\n CANVAS,\n}\n\n/**\n * Bitwise OR of masks that indicate the buffers to be cleared.\n * @static\n * @memberof PIXI\n * @enum {number}\n */\nexport enum BUFFER_BITS\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * Indicates the buffers currently enabled for color writing.\n * @default 0x00004000\n */\n COLOR = 0x00004000,\n /**\n * Indicates the depth buffer.\n * @default 0x00000100\n */\n DEPTH = 0x00000100,\n /**\n * Indicates the stencil buffer.\n * @default 0x00000400\n */\n STENCIL = 0x00000400\n}\n\n/**\n * Various blend modes supported by PIXI.\n *\n * IMPORTANT - The WebGL renderer only supports the NORMAL, ADD, MULTIPLY and SCREEN blend modes.\n * Anything else will silently act like NORMAL.\n * @memberof PIXI\n * @enum {number}\n */\nexport enum BLEND_MODES\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * @default 0\n */\n NORMAL = 0,\n /**\n * @default 1\n */\n ADD = 1,\n /**\n * The pixels of the top layer are multiplied with the corresponding pixel of the bottom layer.\n * A darker picture is the result.\n * @default 2\n */\n MULTIPLY = 2,\n /**\n * The pixels are inverted, multiplied, and inverted again. A lighter picture is the result (opposite of multiply)\n * @default 3\n */\n SCREEN = 3,\n /**\n * A combination of multiply and screen. Dark parts on the base layer become darker, and light parts become lighter.\n *\n * Canvas Renderer only.\n * @default 4\n */\n OVERLAY = 4,\n /**\n * Retains the darkest pixels of both layers.\n *\n * Canvas Renderer only.\n * @default 5\n */\n DARKEN = 5,\n /**\n * Retains the lightest pixels of both layers.\n *\n * Canvas Renderer only.\n * @default 6\n */\n LIGHTEN = 6,\n /**\n * Divides the bottom layer by the inverted top layer.\n *\n * Canvas Renderer only.\n * @default 7\n */\n COLOR_DODGE = 7,\n /**\n * Divides the inverted bottom layer by the top layer, and then inverts the result.\n *\n * Canvas Renderer only.\n * @default 8\n */\n COLOR_BURN = 8,\n /**\n * A combination of multiply and screen like overlay, but with top and bottom layer swapped.\n *\n * Canvas Renderer only.\n * @default 9\n */\n HARD_LIGHT = 9,\n /**\n * A softer version of hard-light. Pure black or white does not result in pure black or white.\n *\n * Canvas Renderer only.\n * @default 10\n */\n SOFT_LIGHT = 10,\n /**\n * Subtracts the bottom layer from the top layer or the other way round to always get a positive value.\n *\n * Canvas Renderer only.\n * @default 11\n */\n DIFFERENCE = 11,\n /**\n * Like difference, but with lower contrast.\n *\n * Canvas Renderer only.\n * @default 12\n */\n EXCLUSION = 12,\n /**\n * Preserves the luma and chroma of the bottom layer, while adopting the hue of the top layer.\n *\n * Canvas Renderer only.\n * @default 13\n */\n HUE = 13,\n /**\n * Preserves the luma and hue of the bottom layer, while adopting the chroma of the top layer.\n *\n * Canvas Renderer only.\n * @default 14\n */\n SATURATION = 14,\n /**\n * Preserves the luma of the bottom layer, while adopting the hue and chroma of the top layer.\n *\n * Canvas Renderer only.\n * @default 15\n */\n COLOR = 15,\n /**\n * Preserves the hue and chroma of the bottom layer, while adopting the luma of the top layer.\n *\n * Canvas Renderer only.\n * @default 16\n */\n LUMINOSITY = 16,\n /**\n * @default 17\n */\n NORMAL_NPM = 17,\n /**\n * @default 18\n */\n ADD_NPM = 18,\n /**\n * @default 19\n */\n SCREEN_NPM = 19,\n /**\n * @default 20\n */\n NONE = 20,\n\n /**\n * Draws new shapes on top of the existing canvas content.\n * @default 0\n */\n SRC_OVER = 0,\n /**\n * The new shape is drawn only where both the new shape and the destination canvas overlap.\n * Everything else is made transparent.\n * @default 21\n */\n SRC_IN = 21,\n /**\n * The new shape is drawn where it doesn't overlap the existing canvas content.\n * @default 22\n */\n SRC_OUT = 22,\n /**\n * The new shape is only drawn where it overlaps the existing canvas content.\n * @default 23\n */\n SRC_ATOP = 23,\n /**\n * New shapes are drawn behind the existing canvas content.\n * @default 24\n */\n DST_OVER = 24,\n /**\n * The existing canvas content is kept where both the new shape and existing canvas content overlap.\n * Everything else is made transparent.\n * @default 25\n */\n DST_IN = 25,\n /**\n * The existing content is kept where it doesn't overlap the new shape.\n * @default 26\n */\n DST_OUT = 26,\n /**\n * The existing canvas is only kept where it overlaps the new shape. The new shape is drawn behind the canvas content.\n * @default 27\n */\n DST_ATOP = 27,\n /**\n * @default 26\n */\n ERASE = 26,\n /**\n * @default 28\n */\n SUBTRACT = 28,\n /**\n * Shapes are made transparent where both overlap and drawn normal everywhere else.\n * @default 29\n */\n XOR = 29,\n}\n\n/**\n * Various webgl draw modes. These can be used to specify which GL drawMode to use\n * under certain situations and renderers.\n * @memberof PIXI\n * @static\n * @enum {number}\n */\nexport enum DRAW_MODES\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * To draw a series of points.\n * @default 0\n */\n POINTS,\n /**\n * To draw a series of unconnected line segments (individual lines).\n * @default 1\n */\n LINES,\n /**\n * To draw a series of connected line segments. It also joins the first and last vertices to form a loop.\n * @default 2\n */\n LINE_LOOP,\n /**\n * To draw a series of connected line segments.\n * @default 3\n */\n LINE_STRIP,\n /**\n * To draw a series of separate triangles.\n * @default 4\n */\n TRIANGLES,\n /**\n * To draw a series of connected triangles in strip fashion.\n * @default 5\n */\n TRIANGLE_STRIP,\n /**\n * To draw a series of connected triangles sharing the first vertex in a fan-like fashion.\n * @default 6\n */\n TRIANGLE_FAN,\n}\n\n/**\n * Various GL texture/resources formats.\n * @memberof PIXI\n * @static\n * @name FORMATS\n * @enum {number}\n */\nexport enum FORMATS\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * @default 6408\n */\n RGBA = 6408,\n /**\n * @default 6407\n */\n RGB = 6407,\n /**\n * @default 33319\n */\n RG = 33319,\n /**\n * @default 6403\n */\n RED = 6403,\n /**\n * @default 36249\n */\n RGBA_INTEGER = 36249,\n /**\n * @default 36248\n */\n RGB_INTEGER = 36248,\n /**\n * @default 33320\n */\n RG_INTEGER = 33320,\n /**\n * @default 36244\n */\n RED_INTEGER = 36244,\n /**\n * @default 6406\n */\n ALPHA = 6406,\n /**\n * @default 6409\n */\n LUMINANCE = 6409,\n /**\n * @default 6410\n */\n LUMINANCE_ALPHA = 6410,\n /**\n * @default 6402\n */\n DEPTH_COMPONENT = 6402,\n /**\n * @default 34041\n */\n DEPTH_STENCIL = 34041,\n}\n\n/**\n * Various GL target types.\n * @memberof PIXI\n * @static\n * @enum {number}\n */\nexport enum TARGETS\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * A two-dimensional texture\n * @default 3553\n */\n TEXTURE_2D = 3553,\n /**\n * A cube-mapped texture. When using a WebGL 2 context, the following values are available additionally:\n * - gl.TEXTURE_3D: A three-dimensional texture.\n * - gl.TEXTURE_2D_ARRAY: A two-dimensional array texture.\n * @default 34067\n */\n TEXTURE_CUBE_MAP = 34067,\n /**\n * A two-dimensional array texture.\n * @default 35866\n */\n TEXTURE_2D_ARRAY = 35866,\n /**\n * Positive X face for a cube-mapped texture.\n * @default 34069\n */\n TEXTURE_CUBE_MAP_POSITIVE_X = 34069,\n /**\n * Negative X face for a cube-mapped texture.\n * @default 34070\n */\n TEXTURE_CUBE_MAP_NEGATIVE_X = 34070,\n /**\n * Positive Y face for a cube-mapped texture.\n * @default 34071\n */\n TEXTURE_CUBE_MAP_POSITIVE_Y = 34071,\n /**\n * Negative Y face for a cube-mapped texture.\n * @default 34072\n */\n TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072,\n /**\n * Positive Z face for a cube-mapped texture.\n * @default 34073\n */\n TEXTURE_CUBE_MAP_POSITIVE_Z = 34073,\n /**\n * Negative Z face for a cube-mapped texture.\n * @default 34074\n */\n TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074,\n}\n\n/**\n * Various GL data format types.\n * @memberof PIXI\n * @static\n * @enum {number}\n */\nexport enum TYPES\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * 8 bits per channel for gl.RGBA\n * @default 5121\n */\n UNSIGNED_BYTE = 5121,\n /**\n * @default 5123\n */\n UNSIGNED_SHORT = 5123,\n /**\n * 5 red bits, 6 green bits, 5 blue bits.\n * @default 33635\n */\n UNSIGNED_SHORT_5_6_5 = 33635,\n /**\n * 4 red bits, 4 green bits, 4 blue bits, 4 alpha bits.\n * @default 32819\n */\n UNSIGNED_SHORT_4_4_4_4 = 32819,\n /**\n * 5 red bits, 5 green bits, 5 blue bits, 1 alpha bit.\n * @default 32820\n */\n UNSIGNED_SHORT_5_5_5_1 = 32820,\n /**\n * @default 5125\n */\n UNSIGNED_INT = 5125,\n /**\n * @default 35899\n */\n UNSIGNED_INT_10F_11F_11F_REV = 35899,\n /**\n * @default 33640\n */\n UNSIGNED_INT_2_10_10_10_REV = 33640,\n /**\n * @default 34042\n */\n UNSIGNED_INT_24_8 = 34042,\n /**\n * @default 35902\n */\n UNSIGNED_INT_5_9_9_9_REV = 35902,\n /**\n * @default 5120\n */\n BYTE = 5120,\n /**\n * @default 5122\n */\n SHORT = 5122,\n /**\n * @default 5124\n */\n INT = 5124,\n /**\n * @default 5126\n */\n FLOAT = 5126,\n /**\n * @default 36269\n */\n FLOAT_32_UNSIGNED_INT_24_8_REV = 36269,\n /**\n * @default 36193\n */\n HALF_FLOAT = 36193,\n}\n\n/**\n * Various sampler types. Correspond to `sampler`, `isampler`, `usampler` GLSL types respectively.\n * WebGL1 works only with FLOAT.\n * @memberof PIXI\n * @static\n * @enum {number}\n */\nexport enum SAMPLER_TYPES\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * @default 0\n */\n FLOAT = 0,\n /**\n * @default 1\n */\n INT = 1,\n /**\n * @default 2\n */\n UINT = 2,\n}\n\n/**\n * The scale modes that are supported by pixi.\n *\n * The {@link PIXI.BaseTexture.defaultOptions.scaleMode} scale mode affects the default scaling mode of future operations.\n * It can be re-assigned to either LINEAR or NEAREST, depending upon suitability.\n * @memberof PIXI\n * @static\n * @enum {number}\n */\nexport enum SCALE_MODES\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * Pixelating scaling\n * @default 0\n */\n NEAREST,\n /**\n * Smooth scaling\n * @default 1\n */\n LINEAR,\n}\n\n/**\n * The wrap modes that are supported by pixi.\n *\n * The wrap mode affects the default wrapping mode of future operations.\n * It can be re-assigned to either CLAMP or REPEAT, depending upon suitability.\n * If the texture is non power of two then clamp will be used regardless as WebGL can\n * only use REPEAT if the texture is po2.\n *\n * This property only affects WebGL.\n * @memberof PIXI\n * @static\n * @enum {number}\n */\nexport enum WRAP_MODES\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * The textures uvs are clamped\n * @default 33071\n */\n CLAMP = 33071,\n /**\n * The texture uvs tile and repeat\n * @default 10497\n */\n REPEAT = 10497,\n /**\n * The texture uvs tile and repeat with mirroring\n * @default 33648\n */\n MIRRORED_REPEAT = 33648,\n}\n\n/**\n * Mipmap filtering modes that are supported by pixi.\n *\n * The {@link PIXI.BaseTexture.defaultOptions.mipmap} affects default texture filtering.\n * Mipmaps are generated for a baseTexture if its `mipmap` field is `ON`,\n * or its `POW2` and texture dimensions are powers of 2.\n * Since WebGL 1 don't support mipmap for non-power-of-two textures,\n * `ON` option will work like `POW2` for WebGL 1.\n *\n * This property only affects WebGL.\n * @memberof PIXI\n * @static\n * @enum {number}\n */\nexport enum MIPMAP_MODES\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * No mipmaps.\n * @default 0\n */\n OFF,\n /**\n * Generate mipmaps if texture dimensions are powers of 2.\n * @default 1\n */\n POW2,\n /**\n * Always generate mipmaps.\n * @default 2\n */\n ON,\n /**\n * Use mipmaps, but do not auto-generate them.\n * this is used with a resource that supports buffering each level-of-detail.\n * @default 3\n */\n ON_MANUAL,\n}\n\n/**\n * How to treat textures with premultiplied alpha\n * @memberof PIXI\n * @static\n * @enum {number}\n */\nexport enum ALPHA_MODES\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * Alias for NO_PREMULTIPLIED_ALPHA.\n * @type {number}\n * @default 0\n */\n NPM = 0,\n /**\n * Default option, alias for PREMULTIPLY_ON_UPLOAD.\n * @type {number}\n * @default 1\n */\n UNPACK = 1,\n /**\n * Alias for PREMULTIPLIED_ALPHA.\n * @type {number}\n * @default 2\n */\n PMA = 2,\n /**\n * Source is not premultiplied, leave it like that.\n * Option for compressed and data textures that are created from typed arrays.\n * @type {number}\n * @default 0\n */\n NO_PREMULTIPLIED_ALPHA = 0,\n /**\n * Source is not premultiplied, premultiply on upload.\n * Default option, used for all loaded images.\n * @type {number}\n * @default 1\n */\n PREMULTIPLY_ON_UPLOAD = 1,\n /**\n * Source is already premultiplied. Example: spine atlases with `_pma` suffix.\n * @type {number}\n * @default 2\n */\n PREMULTIPLIED_ALPHA = 2,\n}\n\n/**\n * Configure whether filter textures are cleared after binding.\n *\n * Filter textures need not be cleared if the filter does not use pixel blending. {@link PIXI.CLEAR_MODES.BLIT} will detect\n * this and skip clearing as an optimization.\n * @memberof PIXI\n * @static\n * @enum {number}\n */\nexport enum CLEAR_MODES\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * Alias for BLEND, same as `false` in earlier versions\n * @default 0\n */\n NO = 0,\n /**\n * Alias for CLEAR, same as `true` in earlier versions\n * @default 1\n */\n YES = 1,\n /**\n * Alias for BLIT\n * @default 2\n */\n AUTO = 2,\n /**\n * Do not clear the filter texture. The filter's output will blend on top of the output texture.\n * @default 0\n */\n BLEND = 0,\n /**\n * Always clear the filter texture.\n * @default 1\n */\n CLEAR = 1,\n /**\n * Clear only if {@link PIXI.FilterSystem.forceClear} is set or if the filter uses pixel blending.\n * @default 2\n */\n BLIT = 2,\n}\n\n/**\n * The gc modes that are supported by pixi.\n *\n * The {@link PIXI.TextureGCSystem.defaultMode} Garbage Collection mode for PixiJS textures is AUTO\n * If set to GC_MODE, the renderer will occasionally check textures usage. If they are not\n * used for a specified period of time they will be removed from the GPU. They will of course\n * be uploaded again when they are required. This is a silent behind the scenes process that\n * should ensure that the GPU does not get filled up.\n *\n * Handy for mobile devices!\n * This property only affects WebGL.\n * @enum {number}\n * @static\n * @memberof PIXI\n */\nexport enum GC_MODES\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * Garbage collection will happen periodically automatically\n * @default 0\n */\n AUTO,\n /**\n * Garbage collection will need to be called manually\n * @default 1\n */\n MANUAL,\n}\n\n/**\n * Constants that specify float precision in shaders.\n * @memberof PIXI\n * @static\n * @enum {string}\n */\nexport enum PRECISION\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * lowp is at least an 9 bit value.\n * For floating point values they can range from: -2 to +2,\n * for integer values they are similar to Uint8Array or Int8Array\n * @default lowp\n */\n LOW = 'lowp',\n /**\n * mediump is at least a 16 bit value.\n * For floating point values they can range from: -2^14 to +2^14,\n * for integer values they are similar to Uint16Array or Int16Array\n * @default mediump\n */\n MEDIUM = 'mediump',\n /**\n * highp is at least a 32 bit value.\n * For floating point values they can range from: -2^62 to +2^62,\n * for integer values they are similar to Uint32Array or Int32Array\n * @default highp\n */\n HIGH = 'highp',\n}\n\n/**\n * Constants for mask implementations.\n * We use `type` suffix because it leads to very different behaviours\n * @memberof PIXI\n * @static\n * @enum {number}\n */\nexport enum MASK_TYPES\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * Mask is ignored\n * @default 0\n */\n NONE = 0,\n /**\n * Scissor mask, rectangle on screen, cheap\n * @default 1\n */\n SCISSOR = 1,\n /**\n * Stencil mask, 1-bit, medium, works only if renderer supports stencil\n * @default 2\n */\n STENCIL = 2,\n /**\n * Mask that uses SpriteMaskFilter, uses temporary RenderTexture\n * @default 3\n */\n SPRITE = 3,\n /**\n * Color mask (RGBA)\n * @default 4\n */\n COLOR = 4,\n}\n\n/**\n * Bitwise OR of masks that indicate the color channels that are rendered to.\n * @static\n * @memberof PIXI\n * @enum {number}\n */\nexport enum COLOR_MASK_BITS\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * Red channel.\n * @default 0x1\n */\n RED = 0x1,\n /**\n * Green channel\n * @default 0x2\n */\n GREEN = 0x2,\n /**\n * Blue channel.\n * @default 0x4\n */\n BLUE = 0x4,\n /**\n * Alpha channel.\n * @default 0x\n */\n ALPHA = 0x8\n}\n\n/**\n * Constants for multi-sampling antialiasing.\n * @see PIXI.Framebuffer#multisample\n * @memberof PIXI\n * @static\n * @enum {number}\n */\nexport enum MSAA_QUALITY\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * No multisampling for this renderTexture\n * @default 0\n */\n NONE = 0,\n /**\n * Try 2 samples\n * @default 2\n */\n LOW = 2,\n /**\n * Try 4 samples\n * @default 4\n */\n MEDIUM = 4,\n /**\n * Try 8 samples\n * @default 8\n */\n HIGH = 8\n}\n\n/**\n * Constants for various buffer types in Pixi\n * @see PIXI.BUFFER_TYPE\n * @memberof PIXI\n * @static\n * @enum {number}\n */\nexport enum BUFFER_TYPE\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * buffer type for using as an index buffer\n * @default 34963\n */\n ELEMENT_ARRAY_BUFFER = 34963,\n /**\n * buffer type for using attribute data\n * @default 34962\n */\n ARRAY_BUFFER = 34962,\n /**\n * the buffer type is for uniform buffer objects\n * @default 35345\n */\n UNIFORM_BUFFER = 35345,\n}\n","import type { ICanvas } from './ICanvas';\nimport type { ICanvasRenderingContext2D } from './ICanvasRenderingContext2D';\n\n/**\n * This interface describes all the DOM dependent calls that Pixi makes throughout its codebase.\n * Implementations of this interface can be used to make sure Pixi will work in any environment,\n * such as browser, Web Workers, and Node.js.\n * @memberof PIXI\n */\nexport interface IAdapter\n{\n /** Returns a canvas object that can be used to create a webgl context. */\n createCanvas: (width?: number, height?: number) => ICanvas;\n /** Returns a 2D rendering context. */\n getCanvasRenderingContext2D: () => { prototype: ICanvasRenderingContext2D; };\n /** Returns a WebGL rendering context. */\n getWebGLRenderingContext: () => typeof WebGLRenderingContext;\n /** Returns a partial implementation of the browsers window.navigator */\n getNavigator: () => { userAgent: string };\n /** Returns the current base URL For browser environments this is either the document.baseURI or window.location.href */\n getBaseUrl: () => string;\n getFontFaceSet: () => FontFaceSet | null;\n fetch: (url: RequestInfo, options?: RequestInit) => Promise;\n parseXML: (xml: string) => Document;\n}\n\nexport const BrowserAdapter = {\n /**\n * Creates a canvas element of the given size.\n * This canvas is created using the browser's native canvas element.\n * @param width - width of the canvas\n * @param height - height of the canvas\n */\n createCanvas: (width: number, height: number): HTMLCanvasElement =>\n {\n const canvas = document.createElement('canvas');\n\n canvas.width = width;\n canvas.height = height;\n\n return canvas;\n },\n getCanvasRenderingContext2D: () => CanvasRenderingContext2D,\n getWebGLRenderingContext: () => WebGLRenderingContext,\n getNavigator: () => navigator,\n getBaseUrl: () => (document.baseURI ?? window.location.href),\n getFontFaceSet: () => document.fonts,\n fetch: (url: RequestInfo, options?: RequestInit) => fetch(url, options),\n parseXML: (xml: string) =>\n {\n const parser = new DOMParser();\n\n return parser.parseFromString(xml, 'text/xml');\n },\n} as IAdapter;\n","import { BrowserAdapter } from './adapter';\n\nimport type { IAdapter } from './adapter';\n\ninterface ISettings\n{\n ADAPTER: IAdapter;\n RESOLUTION: number;\n CREATE_IMAGE_BITMAP: boolean;\n ROUND_PIXELS: boolean;\n}\n\n/**\n * User's customizable globals for overriding the default PIXI settings, such\n * as a renderer's default resolution, framerate, float precision, etc.\n * @example\n * import { settings, ENV } from 'pixi.js';\n *\n * // Use the native window resolution as the default resolution\n * // will support high-density displays when rendering\n * settings.RESOLUTION = window.devicePixelRatio;\n *\n * // Used for older v1 WebGL devices for backwards compatibility\n * settings.PREFER_ENV = ENV.WEBGL_LEGACY;\n * @namespace PIXI.settings\n */\nexport const settings: ISettings & Partial = {\n /**\n * This adapter is used to call methods that are platform dependent.\n * For example `document.createElement` only runs on the web but fails in node environments.\n * This allows us to support more platforms by abstracting away specific implementations per platform.\n *\n * By default the adapter is set to work in the browser. However you can create your own\n * by implementing the `IAdapter` interface. See `IAdapter` for more information.\n * @name ADAPTER\n * @memberof PIXI.settings\n * @type {PIXI.IAdapter}\n * @default PIXI.BrowserAdapter\n */\n ADAPTER: BrowserAdapter,\n\n /**\n * Default resolution / device pixel ratio of the renderer.\n * @static\n * @name RESOLUTION\n * @memberof PIXI.settings\n * @type {number}\n * @default 1\n */\n RESOLUTION: 1,\n\n /**\n * Enables bitmap creation before image load. This feature is experimental.\n * @static\n * @name CREATE_IMAGE_BITMAP\n * @memberof PIXI.settings\n * @type {boolean}\n * @default false\n */\n CREATE_IMAGE_BITMAP: false,\n\n /**\n * If true PixiJS will Math.floor() x/y values when rendering, stopping pixel interpolation.\n * Advantages can include sharper image quality (like text) and faster rendering on canvas.\n * The main disadvantage is movement of objects may appear less smooth.\n * @static\n * @memberof PIXI.settings\n * @type {boolean}\n * @default false\n */\n ROUND_PIXELS: false,\n};\n","const appleIphone = /iPhone/i;\nconst appleIpod = /iPod/i;\nconst appleTablet = /iPad/i;\nconst appleUniversal = /\\biOS-universal(?:.+)Mac\\b/i;\nconst androidPhone = /\\bAndroid(?:.+)Mobile\\b/i; // Match 'Android' AND 'Mobile'\nconst androidTablet = /Android/i;\nconst amazonPhone = /(?:SD4930UR|\\bSilk(?:.+)Mobile\\b)/i; // Match 'Silk' AND 'Mobile'\nconst amazonTablet = /Silk/i;\nconst windowsPhone = /Windows Phone/i;\nconst windowsTablet = /\\bWindows(?:.+)ARM\\b/i; // Match 'Windows' AND 'ARM'\nconst otherBlackBerry = /BlackBerry/i;\nconst otherBlackBerry10 = /BB10/i;\nconst otherOpera = /Opera Mini/i;\nconst otherChrome = /\\b(CriOS|Chrome)(?:.+)Mobile/i;\nconst otherFirefox = /Mobile(?:.+)Firefox\\b/i; // Match 'Mobile' AND 'Firefox'\n\nexport type UserAgent = string;\nexport type Navigator = {\n userAgent: string;\n platform: string;\n maxTouchPoints?: number;\n};\n\nconst isAppleTabletOnIos13 = (navigator?: Navigator): boolean => {\n return (\n typeof navigator !== 'undefined' &&\n navigator.platform === 'MacIntel' &&\n typeof navigator.maxTouchPoints === 'number' &&\n navigator.maxTouchPoints > 1 &&\n typeof MSStream === 'undefined'\n );\n};\n\nfunction createMatch(userAgent: UserAgent): (regex: RegExp) => boolean {\n return (regex: RegExp): boolean => regex.test(userAgent);\n}\n\nexport type isMobileResult = {\n apple: {\n phone: boolean;\n ipod: boolean;\n tablet: boolean;\n universal: boolean;\n device: boolean;\n };\n amazon: {\n phone: boolean;\n tablet: boolean;\n device: boolean;\n };\n android: {\n phone: boolean;\n tablet: boolean;\n device: boolean;\n };\n windows: {\n phone: boolean;\n tablet: boolean;\n device: boolean;\n };\n other: {\n blackberry: boolean;\n blackberry10: boolean;\n opera: boolean;\n firefox: boolean;\n chrome: boolean;\n device: boolean;\n };\n phone: boolean;\n tablet: boolean;\n any: boolean;\n};\n\nexport type IsMobileParameter = UserAgent | Navigator;\n\nexport default function isMobile(param?: IsMobileParameter): isMobileResult {\n let nav: Navigator = {\n userAgent: '',\n platform: '',\n maxTouchPoints: 0,\n };\n\n if (!param && typeof navigator !== 'undefined') {\n nav = {\n userAgent: navigator.userAgent,\n platform: navigator.platform,\n maxTouchPoints: navigator.maxTouchPoints || 0,\n };\n } else if (typeof param === 'string') {\n nav.userAgent = param;\n } else if (param && param.userAgent) {\n nav = {\n userAgent: param.userAgent,\n platform: param.platform,\n maxTouchPoints: param.maxTouchPoints || 0,\n };\n }\n\n let userAgent = nav.userAgent;\n\n // Facebook mobile app's integrated browser adds a bunch of strings that\n // match everything. Strip it out if it exists.\n let tmp = userAgent.split('[FBAN');\n if (typeof tmp[1] !== 'undefined') {\n userAgent = tmp[0];\n }\n\n // Twitter mobile app's integrated browser on iPad adds a \"Twitter for\n // iPhone\" string. Same probably happens on other tablet platforms.\n // This will confuse detection so strip it out if it exists.\n tmp = userAgent.split('Twitter');\n if (typeof tmp[1] !== 'undefined') {\n userAgent = tmp[0];\n }\n\n const match = createMatch(userAgent);\n\n const result: isMobileResult = {\n apple: {\n phone: match(appleIphone) && !match(windowsPhone),\n ipod: match(appleIpod),\n tablet:\n !match(appleIphone) &&\n (match(appleTablet) || isAppleTabletOnIos13(nav)) &&\n !match(windowsPhone),\n universal: match(appleUniversal),\n device:\n (match(appleIphone) ||\n match(appleIpod) ||\n match(appleTablet) ||\n match(appleUniversal) ||\n isAppleTabletOnIos13(nav)) &&\n !match(windowsPhone),\n },\n amazon: {\n phone: match(amazonPhone),\n tablet: !match(amazonPhone) && match(amazonTablet),\n device: match(amazonPhone) || match(amazonTablet),\n },\n android: {\n phone:\n (!match(windowsPhone) && match(amazonPhone)) ||\n (!match(windowsPhone) && match(androidPhone)),\n tablet:\n !match(windowsPhone) &&\n !match(amazonPhone) &&\n !match(androidPhone) &&\n (match(amazonTablet) || match(androidTablet)),\n device:\n (!match(windowsPhone) &&\n (match(amazonPhone) ||\n match(amazonTablet) ||\n match(androidPhone) ||\n match(androidTablet))) ||\n match(/\\bokhttp\\b/i),\n },\n windows: {\n phone: match(windowsPhone),\n tablet: match(windowsTablet),\n device: match(windowsPhone) || match(windowsTablet),\n },\n other: {\n blackberry: match(otherBlackBerry),\n blackberry10: match(otherBlackBerry10),\n opera: match(otherOpera),\n firefox: match(otherFirefox),\n chrome: match(otherChrome),\n device:\n match(otherBlackBerry) ||\n match(otherBlackBerry10) ||\n match(otherOpera) ||\n match(otherFirefox) ||\n match(otherChrome),\n },\n any: false,\n phone: false,\n tablet: false,\n };\n\n result.any =\n result.apple.device ||\n result.android.device ||\n result.windows.device ||\n result.other.device;\n // excludes 'other' devices and ipods, targeting touchscreen phones\n result.phone =\n result.apple.phone || result.android.phone || result.windows.phone;\n result.tablet =\n result.apple.tablet || result.android.tablet || result.windows.tablet;\n\n return result;\n}\n","import isMobileJs from 'ismobilejs';\n\n// ismobilejs have different import behavior for CJS and ESM, so here is the hack\ntype isMobileJsType = typeof isMobileJs & { default?: typeof isMobileJs };\nconst isMobileCall = (isMobileJs as isMobileJsType).default ?? isMobileJs;\n\nexport type isMobileResult = {\n apple: {\n phone: boolean;\n ipod: boolean;\n tablet: boolean;\n universal: boolean;\n device: boolean;\n };\n amazon: {\n phone: boolean;\n tablet: boolean;\n device: boolean;\n };\n android: {\n phone: boolean;\n tablet: boolean;\n device: boolean;\n };\n windows: {\n phone: boolean;\n tablet: boolean;\n device: boolean;\n };\n other: {\n blackberry: boolean;\n blackberry10: boolean;\n opera: boolean;\n firefox: boolean;\n chrome: boolean;\n device: boolean;\n };\n phone: boolean;\n tablet: boolean;\n any: boolean;\n};\n\nexport const isMobile: isMobileResult = isMobileCall(globalThis.navigator);\n","import { settings } from '@pixi/settings';\n\n/**\n * The prefix that denotes a URL is for a retina asset.\n * @static\n * @name RETINA_PREFIX\n * @memberof PIXI.settings\n * @type {RegExp}\n * @default /@([0-9\\.]+)x/\n * @example `@2x`\n */\nsettings.RETINA_PREFIX = /@([0-9\\.]+)x/;\n\n/**\n * Should the `failIfMajorPerformanceCaveat` flag be enabled as a context option used in the `isWebGLSupported` function.\n * If set to true, a WebGL renderer can fail to be created if the browser thinks there could be performance issues when\n * using WebGL.\n *\n * In PixiJS v6 this has changed from true to false by default, to allow WebGL to work in as many scenarios as possible.\n * However, some users may have a poor experience, for example, if a user has a gpu or driver version blacklisted by the\n * browser.\n *\n * If your application requires high performance rendering, you may wish to set this to false.\n * We recommend one of two options if you decide to set this flag to false:\n *\n * 1: Use the `pixi.js-legacy` package, which includes a Canvas renderer as a fallback in case high performance WebGL is\n * not supported.\n *\n * 2: Call `isWebGLSupported` (which if found in the PIXI.utils package) in your code before attempting to create a PixiJS\n * renderer, and show an error message to the user if the function returns false, explaining that their device & browser\n * combination does not support high performance WebGL.\n * This is a much better strategy than trying to create a PixiJS renderer and finding it then fails.\n * @static\n * @name FAIL_IF_MAJOR_PERFORMANCE_CAVEAT\n * @memberof PIXI.settings\n * @type {boolean}\n * @default false\n */\nsettings.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT = false;\n\nexport { settings };\n","import type { Dict } from '../types';\n\n// A map of warning messages already fired\nconst warnings: Dict = {};\n\n/**\n * Helper for warning developers about deprecated features & settings.\n * A stack track for warnings is given; useful for tracking-down where\n * deprecated methods/properties/classes are being used within the code.\n * @memberof PIXI.utils\n * @function deprecation\n * @param {string} version - The version where the feature became deprecated\n * @param {string} message - Message should include what is deprecated, where, and the new solution\n * @param {number} [ignoreDepth=3] - The number of steps to ignore at the top of the error stack\n * this is mostly to ignore internal deprecation calls.\n */\nexport function deprecation(version: string, message: string, ignoreDepth = 3): void\n{\n // Ignore duplicat\n if (warnings[message])\n {\n return;\n }\n\n /* eslint-disable no-console */\n let stack = new Error().stack;\n\n // Handle IE < 10 and Safari < 6\n if (typeof stack === 'undefined')\n {\n console.warn('PixiJS Deprecation Warning: ', `${message}\\nDeprecated since v${version}`);\n }\n else\n {\n // chop off the stack trace which includes PixiJS internal calls\n stack = stack.split('\\n').splice(ignoreDepth).join('\\n');\n\n if (console.groupCollapsed)\n {\n console.groupCollapsed(\n '%cPixiJS Deprecation Warning: %c%s',\n 'color:#614108;background:#fffbe6',\n 'font-weight:normal;color:#614108;background:#fffbe6',\n `${message}\\nDeprecated since v${version}`\n );\n console.warn(stack);\n console.groupEnd();\n }\n else\n {\n console.warn('PixiJS Deprecation Warning: ', `${message}\\nDeprecated since v${version}`);\n console.warn(stack);\n }\n }\n /* eslint-enable no-console */\n\n warnings[message] = true;\n}\n","import { settings } from '@pixi/settings';\n\nfunction assertPath(path: string)\n{\n if (typeof path !== 'string')\n {\n throw new TypeError(`Path must be a string. Received ${JSON.stringify(path)}`);\n }\n}\n\nfunction removeUrlParams(url: string): string\n{\n const re = url.split('?')[0];\n\n return re.split('#')[0];\n}\n\nfunction escapeRegExp(string: string)\n{\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n}\n\nfunction replaceAll(str: string, find: string, replace: string)\n{\n return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path: string, allowAboveRoot: boolean)\n{\n let res = '';\n let lastSegmentLength = 0;\n let lastSlash = -1;\n let dots = 0;\n let code = -1;\n\n for (let i = 0; i <= path.length; ++i)\n {\n if (i < path.length)\n {\n code = path.charCodeAt(i);\n }\n else if (code === 47)\n {\n break;\n }\n else\n {\n code = 47;\n }\n if (code === 47)\n {\n if (lastSlash === i - 1 || dots === 1)\n {\n // NOOP\n }\n else if (lastSlash !== i - 1 && dots === 2)\n {\n if (\n res.length < 2\n || lastSegmentLength !== 2\n || res.charCodeAt(res.length - 1) !== 46\n || res.charCodeAt(res.length - 2) !== 46\n )\n {\n if (res.length > 2)\n {\n const lastSlashIndex = res.lastIndexOf('/');\n\n if (lastSlashIndex !== res.length - 1)\n {\n if (lastSlashIndex === -1)\n {\n res = '';\n lastSegmentLength = 0;\n }\n else\n {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n else if (res.length === 2 || res.length === 1)\n {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot)\n {\n if (res.length > 0)\n { res += '/..'; }\n else\n { res = '..'; }\n lastSegmentLength = 2;\n }\n }\n else\n {\n if (res.length > 0)\n {\n res += `/${path.slice(lastSlash + 1, i)}`;\n }\n else\n {\n res = path.slice(lastSlash + 1, i);\n }\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n }\n else if (code === 46 && dots !== -1)\n {\n ++dots;\n }\n else\n {\n dots = -1;\n }\n }\n\n return res;\n}\n\nexport interface Path\n{\n toPosix: (path: string) => string;\n toAbsolute: (url: string, baseUrl?: string, rootUrl?: string) => string;\n isUrl: (path: string) => boolean;\n isDataUrl: (path: string) => boolean;\n isBlobUrl: (path: string) => boolean;\n hasProtocol: (path: string) => boolean;\n getProtocol: (path: string) => string;\n normalize: (path: string) => string;\n join: (...paths: string[]) => string;\n isAbsolute: (path: string) => boolean;\n dirname: (path: string) => string;\n rootname: (path: string) => string;\n basename: (path: string, ext?: string) => string;\n extname: (path: string) => string;\n parse: (path: string) => { root?: string, dir?: string, base?: string, ext?: string, name?: string };\n sep: string,\n delimiter: string,\n joinExtensions: string[],\n}\n\nexport const path: Path = {\n /**\n * Converts a path to posix format.\n * @param path - The path to convert to posix\n */\n toPosix(path: string) { return replaceAll(path, '\\\\', '/'); },\n /**\n * Checks if the path is a URL e.g. http://, https://\n * @param path - The path to check\n */\n isUrl(path: string) { return (/^https?:/).test(this.toPosix(path)); },\n /**\n * Checks if the path is a data URL\n * @param path - The path to check\n */\n isDataUrl(path: string)\n {\n // eslint-disable-next-line max-len\n return (/^data:([a-z]+\\/[a-z0-9-+.]+(;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}()_|~`]+)*)?(;base64)?,([a-z0-9!$&',()*+;=\\-._~:@\\/?%\\s<>]*?)$/i)\n .test(path);\n },\n /**\n * Checks if the path is a blob URL\n * @param path - The path to check\n */\n isBlobUrl(path: string)\n {\n // Not necessary to have an exact regex to match the blob URLs\n return path.startsWith('blob:');\n },\n /**\n * Checks if the path has a protocol e.g. http://, https://, file:///, data:, blob:, C:/\n * This will return true for windows file paths\n * @param path - The path to check\n */\n hasProtocol(path: string) { return (/^[^/:]+:/).test(this.toPosix(path)); },\n /**\n * Returns the protocol of the path e.g. http://, https://, file:///, data:, blob:, C:/\n * @param path - The path to get the protocol from\n */\n getProtocol(path: string)\n {\n assertPath(path);\n path = this.toPosix(path);\n\n const matchFile = (/^file:\\/\\/\\//).exec(path);\n\n if (matchFile)\n {\n return matchFile[0];\n }\n\n const matchProtocol = (/^[^/:]+:\\/{0,2}/).exec(path);\n\n if (matchProtocol)\n {\n return matchProtocol[0];\n }\n\n return '';\n },\n\n /**\n * Converts URL to an absolute path.\n * When loading from a Web Worker, we must use absolute paths.\n * If the URL is already absolute we return it as is\n * If it's not, we convert it\n * @param url - The URL to test\n * @param customBaseUrl - The base URL to use\n * @param customRootUrl - The root URL to use\n */\n toAbsolute(url: string, customBaseUrl?: string, customRootUrl?: string)\n {\n assertPath(url);\n\n if (this.isDataUrl(url) || this.isBlobUrl(url)) return url;\n\n const baseUrl = removeUrlParams(this.toPosix(customBaseUrl ?? settings.ADAPTER.getBaseUrl()));\n const rootUrl = removeUrlParams(this.toPosix(customRootUrl ?? this.rootname(baseUrl)));\n\n url = this.toPosix(url);\n\n // root relative url\n if (url.startsWith('/'))\n {\n return path.join(rootUrl, url.slice(1));\n }\n\n const absolutePath = this.isAbsolute(url) ? url : this.join(baseUrl, url);\n\n return absolutePath;\n },\n\n /**\n * Normalizes the given path, resolving '..' and '.' segments\n * @param path - The path to normalize\n */\n normalize(path: string)\n {\n assertPath(path);\n\n if (path.length === 0) return '.';\n if (this.isDataUrl(path) || this.isBlobUrl(path)) return path;\n\n path = this.toPosix(path);\n\n let protocol = '';\n const isAbsolute = path.startsWith('/');\n\n if (this.hasProtocol(path))\n {\n protocol = this.rootname(path);\n path = path.slice(protocol.length);\n }\n\n const trailingSeparator = path.endsWith('/');\n\n // Normalize the path\n path = normalizeStringPosix(path, false);\n\n if (path.length > 0 && trailingSeparator) path += '/';\n if (isAbsolute) return `/${path}`;\n\n return protocol + path;\n },\n\n /**\n * Determines if path is an absolute path.\n * Absolute paths can be urls, data urls, or paths on disk\n * @param path - The path to test\n */\n isAbsolute(path: string)\n {\n assertPath(path);\n path = this.toPosix(path);\n\n if (this.hasProtocol(path)) return true;\n\n return path.startsWith('/');\n },\n\n /**\n * Joins all given path segments together using the platform-specific separator as a delimiter,\n * then normalizes the resulting path\n * @param segments - The segments of the path to join\n */\n join(...segments: string[])\n {\n if (segments.length === 0)\n { return '.'; }\n let joined;\n\n for (let i = 0; i < segments.length; ++i)\n {\n const arg = segments[i];\n\n assertPath(arg);\n if (arg.length > 0)\n {\n if (joined === undefined) joined = arg;\n else\n {\n const prevArg = segments[i - 1] ?? '';\n\n if (this.joinExtensions.includes(this.extname(prevArg).toLowerCase()))\n {\n joined += `/../${arg}`;\n }\n else\n {\n joined += `/${arg}`;\n }\n }\n }\n }\n if (joined === undefined) { return '.'; }\n\n return this.normalize(joined);\n },\n\n /**\n * Returns the directory name of a path\n * @param path - The path to parse\n */\n dirname(path: string)\n {\n assertPath(path);\n if (path.length === 0) return '.';\n path = this.toPosix(path);\n let code = path.charCodeAt(0);\n const hasRoot = code === 47;\n let end = -1;\n let matchedSlash = true;\n\n const proto = this.getProtocol(path);\n const origpath = path;\n\n path = path.slice(proto.length);\n\n for (let i = path.length - 1; i >= 1; --i)\n {\n code = path.charCodeAt(i);\n if (code === 47)\n {\n if (!matchedSlash)\n {\n end = i;\n break;\n }\n }\n else\n {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n\n // if end is -1 and its a url then we need to add the path back\n // eslint-disable-next-line no-nested-ternary\n if (end === -1) return hasRoot ? '/' : this.isUrl(origpath) ? proto + path : proto;\n if (hasRoot && end === 1) return '//';\n\n return proto + path.slice(0, end);\n },\n\n /**\n * Returns the root of the path e.g. /, C:/, file:///, http://domain.com/\n * @param path - The path to parse\n */\n rootname(path: string)\n {\n assertPath(path);\n path = this.toPosix(path);\n\n let root = '';\n\n if (path.startsWith('/')) root = '/';\n else\n {\n root = this.getProtocol(path);\n }\n\n if (this.isUrl(path))\n {\n // need to find the first path separator\n const index = path.indexOf('/', root.length);\n\n if (index !== -1)\n {\n root = path.slice(0, index);\n }\n else root = path;\n\n if (!root.endsWith('/')) root += '/';\n }\n\n return root;\n },\n\n /**\n * Returns the last portion of a path\n * @param path - The path to test\n * @param ext - Optional extension to remove\n */\n basename(path: string, ext?: string)\n {\n assertPath(path);\n if (ext) assertPath(ext);\n\n path = removeUrlParams(this.toPosix(path));\n\n let start = 0;\n let end = -1;\n let matchedSlash = true;\n let i: number;\n\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length)\n {\n if (ext.length === path.length && ext === path) return '';\n let extIdx = ext.length - 1;\n let firstNonSlashEnd = -1;\n\n for (i = path.length - 1; i >= 0; --i)\n {\n const code = path.charCodeAt(i);\n\n if (code === 47)\n {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash)\n {\n start = i + 1;\n break;\n }\n }\n else\n {\n if (firstNonSlashEnd === -1)\n {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0)\n {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx))\n {\n if (--extIdx === -1)\n {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n }\n else\n {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n\n if (start === end) end = firstNonSlashEnd; else if (end === -1) end = path.length;\n\n return path.slice(start, end);\n }\n for (i = path.length - 1; i >= 0; --i)\n {\n if (path.charCodeAt(i) === 47)\n {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash)\n {\n start = i + 1;\n break;\n }\n }\n else if (end === -1)\n {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n\n if (end === -1) return '';\n\n return path.slice(start, end);\n },\n\n /**\n * Returns the extension of the path, from the last occurrence of the . (period) character to end of string in the last\n * portion of the path. If there is no . in the last portion of the path, or if there are no . characters other than\n * the first character of the basename of path, an empty string is returned.\n * @param path - The path to parse\n */\n extname(path: string)\n {\n assertPath(path);\n path = removeUrlParams(this.toPosix(path));\n\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n let preDotState = 0;\n\n for (let i = path.length - 1; i >= 0; --i)\n {\n const code = path.charCodeAt(i);\n\n if (code === 47)\n {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash)\n {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1)\n {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46)\n {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;\n else if (preDotState !== 1) preDotState = 1;\n }\n else if (startDot !== -1)\n {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (\n startDot === -1 || end === -1\n // We saw a non-dot character immediately before the dot\n || preDotState === 0\n // The (right-most) trimmed path component is exactly '..'\n // eslint-disable-next-line no-mixed-operators\n || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1\n )\n {\n return '';\n }\n\n return path.slice(startDot, end);\n },\n\n /**\n * Parses a path into an object containing the 'root', `dir`, `base`, `ext`, and `name` properties.\n * @param path - The path to parse\n */\n parse(path: string)\n {\n assertPath(path);\n\n const ret = { root: '', dir: '', base: '', ext: '', name: '' };\n\n if (path.length === 0) return ret;\n path = removeUrlParams(this.toPosix(path));\n\n let code = path.charCodeAt(0);\n const isAbsolute = this.isAbsolute(path);\n let start: number;\n const protocol = '';\n\n ret.root = this.rootname(path);\n\n if (isAbsolute || this.hasProtocol(path))\n {\n start = 1;\n }\n else\n {\n start = 0;\n }\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n let i = path.length - 1;\n\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n let preDotState = 0;\n\n // Get non-dir info\n for (; i >= start; --i)\n {\n code = path.charCodeAt(i);\n if (code === 47)\n {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash)\n {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1)\n {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46)\n {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) startDot = i;\n else if (preDotState !== 1) preDotState = 1;\n }\n else if (startDot !== -1)\n {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n\n if (\n startDot === -1 || end === -1\n // We saw a non-dot character immediately before the dot\n || preDotState === 0\n // The (right-most) trimmed path component is exactly '..'\n // eslint-disable-next-line no-mixed-operators\n || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1\n )\n {\n if (end !== -1)\n {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);\n else ret.base = ret.name = path.slice(startPart, end);\n }\n }\n else\n {\n if (startPart === 0 && isAbsolute)\n {\n ret.name = path.slice(1, startDot);\n ret.base = path.slice(1, end);\n }\n else\n {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n }\n ret.ext = path.slice(startDot, end);\n }\n\n ret.dir = this.dirname(path);\n if (protocol) ret.dir = protocol + ret.dir;\n\n return ret;\n },\n\n sep: '/',\n delimiter: ':',\n joinExtensions: ['.html'],\n} as Path;\n","import { ALPHA_MODES } from '@pixi/constants';\n\nlet promise: Promise | undefined;\n\n/**\n * Helper for detecting the correct alpha mode for video textures.\n * For some reason, some browsers/devices/WebGL implementations premultiply the alpha\n * of a video before and then a second time if `UNPACK_PREMULTIPLY_ALPHA_WEBGL`\n * is true. So the video is premultiplied twice if the alpha mode is `UNPACK`.\n * In this case we need the alpha mode to be `PMA`. This function detects\n * the upload behavior by uploading a white 2x2 webm with 50% alpha\n * without `UNPACK_PREMULTIPLY_ALPHA_WEBGL` and then checking whether\n * the uploaded pixels are premultiplied.\n * @memberof PIXI.utils\n * @function detectVideoAlphaMode\n * @returns {Promise} The correct alpha mode for video textures.\n */\nexport async function detectVideoAlphaMode(): Promise\n{\n promise ??= (async () =>\n {\n const canvas = document.createElement('canvas');\n const gl = canvas.getContext('webgl');\n\n if (!gl)\n {\n return ALPHA_MODES.UNPACK;\n }\n\n const video = await new Promise((resolve) =>\n {\n const video = document.createElement('video');\n\n video.onloadeddata = () => resolve(video);\n video.onerror = () => resolve(null);\n video.autoplay = false;\n video.crossOrigin = 'anonymous';\n video.preload = 'auto';\n // eslint-disable-next-line max-len\n video.src = 'data:video/webm;base64,GkXfo59ChoEBQveBAULygQRC84EIQoKEd2VibUKHgQJChYECGFOAZwEAAAAAAAHTEU2bdLpNu4tTq4QVSalmU6yBoU27i1OrhBZUrmtTrIHGTbuMU6uEElTDZ1OsggEXTbuMU6uEHFO7a1OsggG97AEAAAAAAABZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmoCrXsYMPQkBNgIRMYXZmV0GETGF2ZkSJiEBEAAAAAAAAFlSua8yuAQAAAAAAAEPXgQFzxYgAAAAAAAAAAZyBACK1nIN1bmSIgQCGhVZfVlA5g4EBI+ODhAJiWgDglLCBArqBApqBAlPAgQFVsIRVuYEBElTDZ9Vzc9JjwItjxYgAAAAAAAAAAWfInEWjh0VOQ09ERVJEh49MYXZjIGxpYnZweC12cDlnyKJFo4hEVVJBVElPTkSHlDAwOjAwOjAwLjA0MDAwMDAwMAAAH0O2dcfngQCgwqGggQAAAIJJg0IAABAAFgA4JBwYSgAAICAAEb///4r+AAB1oZ2mm+6BAaWWgkmDQgAAEAAWADgkHBhKAAAgIABIQBxTu2uRu4+zgQC3iveBAfGCAXHwgQM=';\n video.load();\n });\n\n if (!video)\n {\n return ALPHA_MODES.UNPACK;\n }\n\n const texture = gl.createTexture();\n\n gl.bindTexture(gl.TEXTURE_2D, texture);\n\n const framebuffer = gl.createFramebuffer();\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0\n );\n\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, video);\n\n const pixel = new Uint8Array(4);\n\n gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixel);\n\n gl.deleteFramebuffer(framebuffer);\n gl.deleteTexture(texture);\n gl.getExtension('WEBGL_lose_context')?.loseContext();\n\n return pixel[0] <= pixel[3] ? ALPHA_MODES.PMA : ALPHA_MODES.UNPACK;\n })();\n\n return promise;\n}\n","import { settings } from '../settings';\n\nlet supported: boolean | undefined;\n\n/**\n * Helper for checking for WebGL support.\n * @memberof PIXI.utils\n * @function isWebGLSupported\n * @returns {boolean} Is WebGL supported.\n */\nexport function isWebGLSupported(): boolean\n{\n if (typeof supported === 'undefined')\n {\n supported = (function supported(): boolean\n {\n const contextOptions = {\n stencil: true,\n failIfMajorPerformanceCaveat: settings.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT,\n };\n\n try\n {\n if (!settings.ADAPTER.getWebGLRenderingContext())\n {\n return false;\n }\n\n const canvas = settings.ADAPTER.createCanvas();\n let gl = (\n canvas.getContext('webgl', contextOptions)\n || canvas.getContext('experimental-webgl', contextOptions)\n ) as WebGLRenderingContext | null;\n\n const success = !!gl?.getContextAttributes()?.stencil;\n\n if (gl)\n {\n const loseContext = gl.getExtension('WEBGL_lose_context');\n\n if (loseContext)\n {\n loseContext.loseContext();\n }\n }\n\n gl = null;\n\n return success;\n }\n catch (e)\n {\n return false;\n }\n })();\n }\n\n return supported;\n}\n","var r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return\"string\"==typeof r?r.length>0:\"number\"==typeof r},n=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*r)/n+0},e=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),r>n?n:r>t?r:t},u=function(r){return(r=isFinite(r)?r%360:0)>0?r:r+360},a=function(r){return{r:e(r.r,0,255),g:e(r.g,0,255),b:e(r.b,0,255),a:e(r.a)}},o=function(r){return{r:n(r.r),g:n(r.g),b:n(r.b),a:n(r.a,3)}},i=/^#([0-9a-f]{3,8})$/i,s=function(r){var t=r.toString(16);return t.length<2?\"0\"+t:t},h=function(r){var t=r.r,n=r.g,e=r.b,u=r.a,a=Math.max(t,n,e),o=a-Math.min(t,n,e),i=o?a===t?(n-e)/o:a===n?2+(e-t)/o:4+(t-n)/o:0;return{h:60*(i<0?i+6:i),s:a?o/a*100:0,v:a/255*100,a:u}},b=function(r){var t=r.h,n=r.s,e=r.v,u=r.a;t=t/360*6,n/=100,e/=100;var a=Math.floor(t),o=e*(1-n),i=e*(1-(t-a)*n),s=e*(1-(1-t+a)*n),h=a%6;return{r:255*[e,i,o,o,s,e][h],g:255*[s,e,e,i,o,o][h],b:255*[o,o,s,e,e,i][h],a:u}},g=function(r){return{h:u(r.h),s:e(r.s,0,100),l:e(r.l,0,100),a:e(r.a)}},d=function(r){return{h:n(r.h),s:n(r.s),l:n(r.l),a:n(r.a,3)}},f=function(r){return b((n=(t=r).s,{h:t.h,s:(n*=((e=t.l)<50?e:100-e)/100)>0?2*n/(e+n)*100:0,v:e+n,a:t.a}));var t,n,e},c=function(r){return{h:(t=h(r)).h,s:(u=(200-(n=t.s))*(e=t.v)/100)>0&&u<200?n*e/100/(u<=100?u:200-u)*100:0,l:u/2,a:t.a};var t,n,e,u},l=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,p=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s+([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)%\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,v=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,m=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,y={string:[[function(r){var t=i.exec(r);return t?(r=t[1]).length<=4?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:4===r.length?n(parseInt(r[3]+r[3],16)/255,2):1}:6===r.length||8===r.length?{r:parseInt(r.substr(0,2),16),g:parseInt(r.substr(2,2),16),b:parseInt(r.substr(4,2),16),a:8===r.length?n(parseInt(r.substr(6,2),16)/255,2):1}:null:null},\"hex\"],[function(r){var t=v.exec(r)||m.exec(r);return t?t[2]!==t[4]||t[4]!==t[6]?null:a({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},\"rgb\"],[function(t){var n=l.exec(t)||p.exec(t);if(!n)return null;var e,u,a=g({h:(e=n[1],u=n[2],void 0===u&&(u=\"deg\"),Number(e)*(r[u]||1)),s:Number(n[3]),l:Number(n[4]),a:void 0===n[5]?1:Number(n[5])/(n[6]?100:1)});return f(a)},\"hsl\"]],object:[[function(r){var n=r.r,e=r.g,u=r.b,o=r.a,i=void 0===o?1:o;return t(n)&&t(e)&&t(u)?a({r:Number(n),g:Number(e),b:Number(u),a:Number(i)}):null},\"rgb\"],[function(r){var n=r.h,e=r.s,u=r.l,a=r.a,o=void 0===a?1:a;if(!t(n)||!t(e)||!t(u))return null;var i=g({h:Number(n),s:Number(e),l:Number(u),a:Number(o)});return f(i)},\"hsl\"],[function(r){var n=r.h,a=r.s,o=r.v,i=r.a,s=void 0===i?1:i;if(!t(n)||!t(a)||!t(o))return null;var h=function(r){return{h:u(r.h),s:e(r.s,0,100),v:e(r.v,0,100),a:e(r.a)}}({h:Number(n),s:Number(a),v:Number(o),a:Number(s)});return b(h)},\"hsv\"]]},N=function(r,t){for(var n=0;n=.5},r.prototype.toHex=function(){return r=o(this.rgba),t=r.r,e=r.g,u=r.b,i=(a=r.a)<1?s(n(255*a)):\"\",\"#\"+s(t)+s(e)+s(u)+i;var r,t,e,u,a,i},r.prototype.toRgb=function(){return o(this.rgba)},r.prototype.toRgbString=function(){return r=o(this.rgba),t=r.r,n=r.g,e=r.b,(u=r.a)<1?\"rgba(\"+t+\", \"+n+\", \"+e+\", \"+u+\")\":\"rgb(\"+t+\", \"+n+\", \"+e+\")\";var r,t,n,e,u},r.prototype.toHsl=function(){return d(c(this.rgba))},r.prototype.toHslString=function(){return r=d(c(this.rgba)),t=r.h,n=r.s,e=r.l,(u=r.a)<1?\"hsla(\"+t+\", \"+n+\"%, \"+e+\"%, \"+u+\")\":\"hsl(\"+t+\", \"+n+\"%, \"+e+\"%)\";var r,t,n,e,u},r.prototype.toHsv=function(){return r=h(this.rgba),{h:n(r.h),s:n(r.s),v:n(r.v),a:n(r.a,3)};var r},r.prototype.invert=function(){return w({r:255-(r=this.rgba).r,g:255-r.g,b:255-r.b,a:r.a});var r},r.prototype.saturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,r))},r.prototype.desaturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,-r))},r.prototype.grayscale=function(){return w(M(this.rgba,-1))},r.prototype.lighten=function(r){return void 0===r&&(r=.1),w($(this.rgba,r))},r.prototype.darken=function(r){return void 0===r&&(r=.1),w($(this.rgba,-r))},r.prototype.rotate=function(r){return void 0===r&&(r=15),this.hue(this.hue()+r)},r.prototype.alpha=function(r){return\"number\"==typeof r?w({r:(t=this.rgba).r,g:t.g,b:t.b,a:r}):n(this.rgba.a,3);var t},r.prototype.hue=function(r){var t=c(this.rgba);return\"number\"==typeof r?w({h:r,s:t.s,l:t.l,a:t.a}):n(t.h)},r.prototype.isEqual=function(r){return this.toHex()===w(r).toHex()},r}(),w=function(r){return r instanceof j?r:new j(r)},S=[],k=function(r){r.forEach(function(r){S.indexOf(r)<0&&(r(j,y),S.push(r))})},E=function(){return new j({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})};export{j as Colord,w as colord,k as extend,I as getFormat,E as random};\n","import { colord, extend } from '@pixi/colord';\nimport namesPlugin from '@pixi/colord/plugins/names';\n\nimport type {\n AnyColor,\n HslaColor,\n HslColor,\n HsvaColor,\n HsvColor,\n RgbaColor,\n RgbColor\n} from '@pixi/colord';\n\nextend([namesPlugin]);\n\n/**\n * Value types for the constructor of {@link PIXI.Color}.\n * These types are extended from [colord](https://www.npmjs.com/package/colord) with some PixiJS-specific extensions.\n *\n * Possible value types are:\n * - [Color names](https://www.w3.org/TR/css-color-4/#named-colors):\n * `'red'`, `'green'`, `'blue'`, `'white'`, etc.\n * - RGB hex integers (`0xRRGGBB`):\n * `0xff0000`, `0x00ff00`, `0x0000ff`, etc.\n * - [RGB(A) hex strings](https://www.w3.org/TR/css-color-4/#hex-notation):\n * - 6 digits (`RRGGBB`): `'ff0000'`, `'#00ff00'`, `'0x0000ff'`, etc.\n * - 3 digits (`RGB`): `'f00'`, `'#0f0'`, `'0x00f'`, etc.\n * - 8 digits (`RRGGBBAA`): `'ff000080'`, `'#00ff0080'`, `'0x0000ff80'`, etc.\n * - 4 digits (`RGBA`): `'f008'`, `'#0f08'`, `'0x00f8'`, etc.\n * - RGB(A) objects:\n * `{ r: 255, g: 0, b: 0 }`, `{ r: 255, g: 0, b: 0, a: 0.5 }`, etc.\n * - [RGB(A) strings](https://www.w3.org/TR/css-color-4/#rgb-functions):\n * `'rgb(255, 0, 0)'`, `'rgb(100% 0% 0%)'`, `'rgba(255, 0, 0, 0.5)'`, `'rgba(100% 0% 0% / 50%)'`, etc.\n * - RGB(A) arrays:\n * `[1, 0, 0]`, `[1, 0, 0, 0.5]`, etc.\n * - RGB(A) Float32Array:\n * `new Float32Array([1, 0, 0])`, `new Float32Array([1, 0, 0, 0.5])`, etc.\n * - RGB(A) Uint8Array:\n * `new Uint8Array([255, 0, 0])`, `new Uint8Array([255, 0, 0, 128])`, etc.\n * - RGB(A) Uint8ClampedArray:\n * `new Uint8ClampedArray([255, 0, 0])`, `new Uint8ClampedArray([255, 0, 0, 128])`, etc.\n * - HSL(A) objects:\n * `{ h: 0, s: 100, l: 50 }`, `{ h: 0, s: 100, l: 50, a: 0.5 }`, etc.\n * - [HSL(A) strings](https://www.w3.org/TR/css-color-4/#the-hsl-notation):\n * `'hsl(0, 100%, 50%)'`, `'hsl(0deg 100% 50%)'`, `'hsla(0, 100%, 50%, 0.5)'`, `'hsla(0deg 100% 50% / 50%)'`, etc.\n * - HSV(A) objects:\n * `{ h: 0, s: 100, v: 100 }`, `{ h: 0, s: 100, v: 100, a: 0.5 }`, etc.\n * - {@link PIXI.Color} objects.\n * @memberof PIXI\n * @since 7.2.0\n */\nexport type ColorSource = string | number | number[] | Float32Array | Uint8Array | Uint8ClampedArray\n| HslColor | HslaColor | HsvColor | HsvaColor | RgbColor | RgbaColor | Color |\n// eslint-disable-next-line @typescript-eslint/ban-types\nNumber;\n\ntype ColorSourceTypedArray = Float32Array | Uint8Array | Uint8ClampedArray;\n\n/**\n * Color utility class.\n * @example\n * import { Color } from 'pixi.js';\n * new Color('red').toArray(); // [1, 0, 0, 1]\n * new Color(0xff0000).toArray(); // [1, 0, 0, 1]\n * new Color('ff0000').toArray(); // [1, 0, 0, 1]\n * new Color('#f00').toArray(); // [1, 0, 0, 1]\n * new Color('0xff0000ff').toArray(); // [1, 0, 0, 1]\n * new Color('#f00f').toArray(); // [1, 0, 0, 1]\n * new Color({ r: 255, g: 0, b: 0, a: 0.5 }).toArray(); // [1, 0, 0, 0.5]\n * new Color('rgb(255, 0, 0, 0.5)').toArray(); // [1, 0, 0, 0.5]\n * new Color([1, 1, 1]).toArray(); // [1, 1, 1, 1]\n * new Color([1, 0, 0, 0.5]).toArray(); // [1, 0, 0, 0.5]\n * new Color(new Float32Array([1, 0, 0, 0.5])).toArray(); // [1, 0, 0, 0.5]\n * new Color(new Uint8Array([255, 0, 0, 255])).toArray(); // [1, 0, 0, 1]\n * new Color(new Uint8ClampedArray([255, 0, 0, 255])).toArray(); // [1, 0, 0, 1]\n * new Color({ h: 0, s: 100, l: 50, a: 0.5 }).toArray(); // [1, 0, 0, 0.5]\n * new Color('hsl(0, 100%, 50%, 50%)').toArray(); // [1, 0, 0, 0.5]\n * new Color({ h: 0, s: 100, v: 100, a: 0.5 }).toArray(); // [1, 0, 0, 0.5]\n * @memberof PIXI\n * @since 7.2.0\n */\nexport class Color\n{\n /**\n * Default Color object for static uses\n * @example\n * import { Color } from 'pixi.js';\n * Color.shared.setValue(0xffffff).toHex(); // '#ffffff'\n */\n static readonly shared = new Color();\n\n /**\n * Temporary Color object for static uses internally.\n * As to not conflict with Color.shared.\n * @ignore\n */\n private static readonly temp = new Color();\n\n /** Pattern for hex strings */\n private static readonly HEX_PATTERN = /^(#|0x)?(([a-f0-9]{3}){1,2}([a-f0-9]{2})?)$/i;\n\n /** Internal color source, from constructor or set value */\n private _value: Exclude | null;\n\n /** Normalized rgba component, floats from 0-1 */\n private _components: Float32Array;\n\n /** Cache color as number */\n private _int: number;\n\n /**\n * @param {PIXI.ColorSource} value - Optional value to use, if not provided, white is used.\n */\n constructor(value: ColorSource = 0xffffff)\n {\n this._value = null;\n this._components = new Float32Array(4);\n this._components.fill(1);\n this._int = 0xffffff;\n this.value = value;\n }\n\n /** Get red component (0 - 1) */\n get red(): number\n {\n return this._components[0];\n }\n\n /** Get green component (0 - 1) */\n get green(): number\n {\n return this._components[1];\n }\n\n /** Get blue component (0 - 1) */\n get blue(): number\n {\n return this._components[2];\n }\n\n /** Get alpha component (0 - 1) */\n get alpha(): number\n {\n return this._components[3];\n }\n\n /**\n * Set the value, suitable for chaining\n * @param value\n * @see PIXI.Color.value\n */\n setValue(value: ColorSource): this\n {\n this.value = value;\n\n return this;\n }\n\n /**\n * The current color source.\n *\n * When setting:\n * - Setting to an instance of `Color` will copy its color source and components.\n * - Otherwise, `Color` will try to normalize the color source and set the components.\n * If the color source is invalid, an `Error` will be thrown and the `Color` will left unchanged.\n *\n * Note: The `null` in the setter's parameter type is added to match the TypeScript rule: return type of getter\n * must be assignable to its setter's parameter type. Setting `value` to `null` will throw an `Error`.\n *\n * When getting:\n * - A return value of `null` means the previous value was overridden (e.g., {@link PIXI.Color.multiply multiply},\n * {@link PIXI.Color.premultiply premultiply} or {@link PIXI.Color.round round}).\n * - Otherwise, the color source used when setting is returned.\n * @type {PIXI.ColorSource}\n */\n set value(value: ColorSource | null)\n {\n // Support copying from other Color objects\n if (value instanceof Color)\n {\n this._value = this.cloneSource(value._value);\n this._int = value._int;\n this._components.set(value._components);\n }\n else if (value === null)\n {\n throw new Error('Cannot set PIXI.Color#value to null');\n }\n else if (this._value === null || !this.isSourceEqual(this._value, value))\n {\n this.normalize(value);\n this._value = this.cloneSource(value);\n }\n }\n get value(): Exclude | null\n {\n return this._value;\n }\n\n /**\n * Copy a color source internally.\n * @param value - Color source\n */\n private cloneSource(value: Exclude | null): Exclude | null\n {\n if (typeof value === 'string' || typeof value === 'number' || value instanceof Number || value === null)\n {\n return value;\n }\n else if (Array.isArray(value) || ArrayBuffer.isView(value))\n {\n return value.slice(0);\n }\n else if (typeof value === 'object' && value !== null)\n {\n return { ...value };\n }\n\n return value;\n }\n\n /**\n * Equality check for color sources.\n * @param value1 - First color source\n * @param value2 - Second color source\n * @returns `true` if the color sources are equal, `false` otherwise.\n */\n private isSourceEqual(value1: Exclude, value2: Exclude): boolean\n {\n const type1 = typeof value1;\n const type2 = typeof value2;\n\n // Mismatched types\n if (type1 !== type2)\n {\n return false;\n }\n // Handle numbers/strings and things that extend Number\n // important to do the instanceof Number first, as this is \"object\" type\n else if (type1 === 'number' || type1 === 'string' || value1 instanceof Number)\n {\n return value1 === value2;\n }\n // Handle Arrays and TypedArrays\n else if ((Array.isArray(value1) && Array.isArray(value2))\n || (ArrayBuffer.isView(value1) && ArrayBuffer.isView(value2)))\n {\n if (value1.length !== value2.length)\n {\n return false;\n }\n\n return value1.every((v, i) => v === value2[i]);\n }\n // Handle Objects\n else if (value1 !== null && value2 !== null)\n {\n const keys1 = Object.keys(value1) as (keyof typeof value1)[];\n const keys2 = Object.keys(value2) as (keyof typeof value2)[];\n\n if (keys1.length !== keys2.length)\n {\n return false;\n }\n\n return keys1.every((key) => value1[key] === value2[key]);\n }\n\n return value1 === value2;\n }\n\n /**\n * Convert to a RGBA color object.\n * @example\n * import { Color } from 'pixi.js';\n * new Color('white').toRgb(); // returns { r: 1, g: 1, b: 1, a: 1 }\n */\n toRgba(): RgbaColor\n {\n const [r, g, b, a] = this._components;\n\n return { r, g, b, a };\n }\n\n /**\n * Convert to a RGB color object.\n * @example\n * import { Color } from 'pixi.js';\n * new Color('white').toRgb(); // returns { r: 1, g: 1, b: 1 }\n */\n toRgb(): RgbColor\n {\n const [r, g, b] = this._components;\n\n return { r, g, b };\n }\n\n /** Convert to a CSS-style rgba string: `rgba(255,255,255,1.0)`. */\n toRgbaString(): string\n {\n const [r, g, b] = this.toUint8RgbArray();\n\n return `rgba(${r},${g},${b},${this.alpha})`;\n }\n\n /**\n * Convert to an [R, G, B] array of clamped uint8 values (0 to 255).\n * @example\n * import { Color } from 'pixi.js';\n * new Color('white').toUint8RgbArray(); // returns [255, 255, 255]\n * @param {number[]|Uint8Array|Uint8ClampedArray} [out] - Output array\n */\n toUint8RgbArray(): number[];\n toUint8RgbArray(out: T): T;\n toUint8RgbArray(out?: T): T\n {\n const [r, g, b] = this._components;\n\n out = out ?? [] as number[] as T;\n\n out[0] = Math.round(r * 255);\n out[1] = Math.round(g * 255);\n out[2] = Math.round(b * 255);\n\n return out;\n }\n\n /**\n * Convert to an [R, G, B] array of normalized floats (numbers from 0.0 to 1.0).\n * @example\n * import { Color } from 'pixi.js';\n * new Color('white').toRgbArray(); // returns [1, 1, 1]\n * @param {number[]|Float32Array} [out] - Output array\n */\n toRgbArray(): number[];\n toRgbArray(out: T): T;\n toRgbArray(out?: T): T\n {\n out = out ?? [] as number[] as T;\n const [r, g, b] = this._components;\n\n out[0] = r;\n out[1] = g;\n out[2] = b;\n\n return out;\n }\n\n /**\n * Convert to a hexadecimal number.\n * @example\n * import { Color } from 'pixi.js';\n * new Color('white').toNumber(); // returns 16777215\n */\n toNumber(): number\n {\n return this._int;\n }\n\n /**\n * Convert to a hexadecimal number in little endian format (e.g., BBGGRR).\n * @example\n * import { Color } from 'pixi.js';\n * new Color(0xffcc99).toLittleEndianNumber(); // returns 0x99ccff\n * @returns {number} - The color as a number in little endian format.\n */\n toLittleEndianNumber(): number\n {\n const value = this._int;\n\n return (value >> 16) + (value & 0xff00) + ((value & 0xff) << 16);\n }\n\n /**\n * Multiply with another color. This action is destructive, and will\n * override the previous `value` property to be `null`.\n * @param {PIXI.ColorSource} value - The color to multiply by.\n */\n multiply(value: ColorSource): this\n {\n const [r, g, b, a] = Color.temp.setValue(value)._components;\n\n this._components[0] *= r;\n this._components[1] *= g;\n this._components[2] *= b;\n this._components[3] *= a;\n\n this.refreshInt();\n this._value = null;\n\n return this;\n }\n\n /**\n * Converts color to a premultiplied alpha format. This action is destructive, and will\n * override the previous `value` property to be `null`.\n * @param alpha - The alpha to multiply by.\n * @param {boolean} [applyToRGB=true] - Whether to premultiply RGB channels.\n * @returns {PIXI.Color} - Itself.\n */\n premultiply(alpha: number, applyToRGB = true): this\n {\n if (applyToRGB)\n {\n this._components[0] *= alpha;\n this._components[1] *= alpha;\n this._components[2] *= alpha;\n }\n this._components[3] = alpha;\n\n this.refreshInt();\n this._value = null;\n\n return this;\n }\n\n /**\n * Premultiplies alpha with current color.\n * @param {number} alpha - The alpha to multiply by.\n * @param {boolean} [applyToRGB=true] - Whether to premultiply RGB channels.\n * @returns {number} tint multiplied by alpha\n */\n toPremultiplied(alpha: number, applyToRGB = true): number\n {\n if (alpha === 1.0)\n {\n return (0xFF << 24) + this._int;\n }\n if (alpha === 0.0)\n {\n return applyToRGB ? 0 : this._int;\n }\n let r = ((this._int >> 16) & 0xFF);\n let g = ((this._int >> 8) & 0xFF);\n let b = (this._int & 0xFF);\n\n if (applyToRGB)\n {\n r = ((r * alpha) + 0.5) | 0;\n g = ((g * alpha) + 0.5) | 0;\n b = ((b * alpha) + 0.5) | 0;\n }\n\n return (alpha * 255 << 24) + (r << 16) + (g << 8) + b;\n }\n\n /**\n * Convert to a hexidecimal string.\n * @example\n * import { Color } from 'pixi.js';\n * new Color('white').toHex(); // returns \"#ffffff\"\n */\n toHex(): string\n {\n const hexString = this._int.toString(16);\n\n return `#${'000000'.substring(0, 6 - hexString.length) + hexString}`;\n }\n\n /**\n * Convert to a hexidecimal string with alpha.\n * @example\n * import { Color } from 'pixi.js';\n * new Color('white').toHexa(); // returns \"#ffffffff\"\n */\n toHexa(): string\n {\n const alphaValue = Math.round(this._components[3] * 255);\n const alphaString = alphaValue.toString(16);\n\n return this.toHex() + '00'.substring(0, 2 - alphaString.length) + alphaString;\n }\n\n /**\n * Set alpha, suitable for chaining.\n * @param alpha\n */\n setAlpha(alpha: number): this\n {\n this._components[3] = this._clamp(alpha);\n\n return this;\n }\n\n /**\n * Rounds the specified color according to the step. This action is destructive, and will\n * override the previous `value` property to be `null`. The alpha component is not rounded.\n * @param steps - Number of steps which will be used as a cap when rounding colors\n * @deprecated since 7.3.0\n */\n round(steps: number): this\n {\n const [r, g, b] = this._components;\n\n this._components[0] = Math.round(r * steps) / steps;\n this._components[1] = Math.round(g * steps) / steps;\n this._components[2] = Math.round(b * steps) / steps;\n this.refreshInt();\n this._value = null;\n\n return this;\n }\n\n /**\n * Convert to an [R, G, B, A] array of normalized floats (numbers from 0.0 to 1.0).\n * @example\n * import { Color } from 'pixi.js';\n * new Color('white').toArray(); // returns [1, 1, 1, 1]\n * @param {number[]|Float32Array} [out] - Output array\n */\n toArray(): number[];\n toArray(out: T): T;\n toArray(out?: T): T\n {\n out = out ?? [] as number[] as T;\n const [r, g, b, a] = this._components;\n\n out[0] = r;\n out[1] = g;\n out[2] = b;\n out[3] = a;\n\n return out;\n }\n\n /**\n * Normalize the input value into rgba\n * @param value - Input value\n */\n private normalize(value: Exclude): void\n {\n let r: number | undefined;\n let g: number | undefined;\n let b: number | undefined;\n let a: number | undefined;\n\n // Number is a primative so typeof works fine, but in the case\n // that someone creates a class that extends Number, we also\n // need to check for instanceof Number\n if ((typeof value === 'number' || value instanceof Number)\n && (value as number) >= 0\n && (value as number) <= 0xffffff)\n {\n const int = value as number; // cast required because instanceof Number is ambiguous for TS\n\n r = ((int >> 16) & 0xFF) / 255;\n g = ((int >> 8) & 0xFF) / 255;\n b = (int & 0xFF) / 255;\n a = 1.0;\n }\n else if ((Array.isArray(value) || value instanceof Float32Array)\n // Can be rgb or rgba\n && value.length >= 3 && value.length <= 4)\n {\n // make sure all values are 0 - 1\n value = this._clamp(value);\n [r, g, b, a = 1.0] = value;\n }\n else if ((value instanceof Uint8Array || value instanceof Uint8ClampedArray)\n // Can be rgb or rgba\n && value.length >= 3 && value.length <= 4)\n {\n // make sure all values are 0 - 255\n value = this._clamp(value, 0, 255);\n [r, g, b, a = 255] = value;\n r /= 255;\n g /= 255;\n b /= 255;\n a /= 255;\n }\n else if (typeof value === 'string' || typeof value === 'object')\n {\n if (typeof value === 'string')\n {\n const match = Color.HEX_PATTERN.exec(value);\n\n if (match)\n {\n // Normalize hex string, remove 0x or # prefix\n value = `#${match[2]}`;\n }\n }\n\n const color = colord(value as AnyColor);\n\n if (color.isValid())\n {\n ({ r, g, b, a } = color.rgba);\n r /= 255;\n g /= 255;\n b /= 255;\n }\n }\n\n // Cache normalized values for rgba and hex integer\n if (r !== undefined)\n {\n this._components[0] = r as number;\n this._components[1] = g as number;\n this._components[2] = b as number;\n this._components[3] = a as number;\n this.refreshInt();\n }\n else\n {\n throw new Error(`Unable to convert color ${value}`);\n }\n }\n\n /** Refresh the internal color rgb number */\n private refreshInt(): void\n {\n // Clamp values to 0 - 1\n this._clamp(this._components);\n\n const [r, g, b] = this._components;\n\n this._int = (((r * 255) << 16) + ((g * 255) << 8) + (b * 255 | 0));\n }\n\n /**\n * Clamps values to a range. Will override original values\n * @param value - Value(s) to clamp\n * @param min - Minimum value\n * @param max - Maximum value\n */\n private _clamp(value: T, min = 0, max = 1): T\n {\n if (typeof value === 'number')\n {\n return Math.min(Math.max(value, min), max) as T;\n }\n\n value.forEach((v, i) =>\n {\n value[i] = Math.min(Math.max(v, min), max);\n });\n\n return value;\n }\n}\n","export default function(e,f){var a={white:\"#ffffff\",bisque:\"#ffe4c4\",blue:\"#0000ff\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",azure:\"#f0ffff\",whitesmoke:\"#f5f5f5\",papayawhip:\"#ffefd5\",plum:\"#dda0dd\",blanchedalmond:\"#ffebcd\",black:\"#000000\",gold:\"#ffd700\",goldenrod:\"#daa520\",gainsboro:\"#dcdcdc\",cornsilk:\"#fff8dc\",cornflowerblue:\"#6495ed\",burlywood:\"#deb887\",aquamarine:\"#7fffd4\",beige:\"#f5f5dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkkhaki:\"#bdb76b\",darkgray:\"#a9a9a9\",darkgreen:\"#006400\",darkgrey:\"#a9a9a9\",peachpuff:\"#ffdab9\",darkmagenta:\"#8b008b\",darkred:\"#8b0000\",darkorchid:\"#9932cc\",darkorange:\"#ff8c00\",darkslateblue:\"#483d8b\",gray:\"#808080\",darkslategray:\"#2f4f4f\",darkslategrey:\"#2f4f4f\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",wheat:\"#f5deb3\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",ghostwhite:\"#f8f8ff\",darkviolet:\"#9400d3\",magenta:\"#ff00ff\",green:\"#008000\",dodgerblue:\"#1e90ff\",grey:\"#808080\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",blueviolet:\"#8a2be2\",forestgreen:\"#228b22\",lawngreen:\"#7cfc00\",indianred:\"#cd5c5c\",indigo:\"#4b0082\",fuchsia:\"#ff00ff\",brown:\"#a52a2a\",maroon:\"#800000\",mediumblue:\"#0000cd\",lightcoral:\"#f08080\",darkturquoise:\"#00ced1\",lightcyan:\"#e0ffff\",ivory:\"#fffff0\",lightyellow:\"#ffffe0\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",linen:\"#faf0e6\",mediumaquamarine:\"#66cdaa\",lemonchiffon:\"#fffacd\",lime:\"#00ff00\",khaki:\"#f0e68c\",mediumseagreen:\"#3cb371\",limegreen:\"#32cd32\",mediumspringgreen:\"#00fa9a\",lightskyblue:\"#87cefa\",lightblue:\"#add8e6\",midnightblue:\"#191970\",lightpink:\"#ffb6c1\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",mintcream:\"#f5fffa\",lightslategray:\"#778899\",lightslategrey:\"#778899\",navajowhite:\"#ffdead\",navy:\"#000080\",mediumvioletred:\"#c71585\",powderblue:\"#b0e0e6\",palegoldenrod:\"#eee8aa\",oldlace:\"#fdf5e6\",paleturquoise:\"#afeeee\",mediumturquoise:\"#48d1cc\",mediumorchid:\"#ba55d3\",rebeccapurple:\"#663399\",lightsteelblue:\"#b0c4de\",mediumslateblue:\"#7b68ee\",thistle:\"#d8bfd8\",tan:\"#d2b48c\",orchid:\"#da70d6\",mediumpurple:\"#9370db\",purple:\"#800080\",pink:\"#ffc0cb\",skyblue:\"#87ceeb\",springgreen:\"#00ff7f\",palegreen:\"#98fb98\",red:\"#ff0000\",yellow:\"#ffff00\",slateblue:\"#6a5acd\",lavenderblush:\"#fff0f5\",peru:\"#cd853f\",palevioletred:\"#db7093\",violet:\"#ee82ee\",teal:\"#008080\",slategray:\"#708090\",slategrey:\"#708090\",aliceblue:\"#f0f8ff\",darkseagreen:\"#8fbc8f\",darkolivegreen:\"#556b2f\",greenyellow:\"#adff2f\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",tomato:\"#ff6347\",silver:\"#c0c0c0\",sienna:\"#a0522d\",lavender:\"#e6e6fa\",lightgreen:\"#90ee90\",orange:\"#ffa500\",orangered:\"#ff4500\",steelblue:\"#4682b4\",royalblue:\"#4169e1\",turquoise:\"#40e0d0\",yellowgreen:\"#9acd32\",salmon:\"#fa8072\",saddlebrown:\"#8b4513\",sandybrown:\"#f4a460\",rosybrown:\"#bc8f8f\",darksalmon:\"#e9967a\",lightgoldenrodyellow:\"#fafad2\",snow:\"#fffafa\",lightgrey:\"#d3d3d3\",lightgray:\"#d3d3d3\",dimgray:\"#696969\",dimgrey:\"#696969\",olivedrab:\"#6b8e23\",olive:\"#808000\"},r={};for(var d in a)r[a[d]]=d;var l={};e.prototype.toName=function(f){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return\"transparent\";var d,i,n=r[this.toHex()];if(n)return n;if(null==f?void 0:f.closest){var o=this.toRgb(),t=1/0,b=\"black\";if(!l.length)for(var c in a)l[c]=new e(a[c]).toRgb();for(var g in a){var u=(d=o,i=l[g],Math.pow(d.r-i.r,2)+Math.pow(d.g-i.g,2)+Math.pow(d.b-i.b,2));u} Mapped modes.\n */\nfunction mapPremultipliedBlendModes(): number[][]\n{\n const pm = [];\n const npm = [];\n\n for (let i = 0; i < 32; i++)\n {\n pm[i] = i;\n npm[i] = i;\n }\n\n pm[BLEND_MODES.NORMAL_NPM] = BLEND_MODES.NORMAL;\n pm[BLEND_MODES.ADD_NPM] = BLEND_MODES.ADD;\n pm[BLEND_MODES.SCREEN_NPM] = BLEND_MODES.SCREEN;\n\n npm[BLEND_MODES.NORMAL] = BLEND_MODES.NORMAL_NPM;\n npm[BLEND_MODES.ADD] = BLEND_MODES.ADD_NPM;\n npm[BLEND_MODES.SCREEN] = BLEND_MODES.SCREEN_NPM;\n\n const array: number[][] = [];\n\n array.push(npm);\n array.push(pm);\n\n return array;\n}\n\n/**\n * maps premultiply flag and blendMode to adjusted blendMode\n * @memberof PIXI.utils\n * @type {Array}\n */\nexport const premultiplyBlendMode = mapPremultipliedBlendModes();\n\n/**\n * changes blendMode according to texture format\n * @memberof PIXI.utils\n * @function correctBlendMode\n * @param {number} blendMode - supposed blend mode\n * @param {boolean} premultiplied - whether source is premultiplied\n * @returns {number} true blend mode for this texture\n */\nexport function correctBlendMode(blendMode: number, premultiplied: boolean): number\n{\n return premultiplyBlendMode[premultiplied ? 1 : 0][blendMode];\n}\n\n/**\n * @memberof PIXI.utils\n * @function premultiplyRgba\n * @deprecated since 7.2.0\n * @see PIXI.Color.premultiply\n * @param {Float32Array|number[]} rgb -\n * @param {number} alpha -\n * @param {Float32Array} [out] -\n * @param {boolean} [premultiply=true] -\n */\nexport function premultiplyRgba(\n rgb: Float32Array | number[],\n alpha: number,\n out?: Float32Array,\n premultiply = true\n): Float32Array\n{\n if (process.env.DEBUG)\n {\n deprecation('7.2.0', `utils.premultiplyRgba has moved to Color.premultiply`);\n }\n\n return Color.shared\n .setValue(rgb)\n .premultiply(alpha, premultiply)\n .toArray(out ?? new Float32Array(4));\n}\n\n/**\n * @memberof PIXI.utils\n * @function premultiplyTint\n * @deprecated since 7.2.0\n * @see PIXI.Color.toPremultiplied\n * @param {number} tint -\n * @param {number} alpha -\n */\nexport function premultiplyTint(tint: number, alpha: number): number\n{\n if (process.env.DEBUG)\n {\n deprecation('7.2.0', `utils.premultiplyTint has moved to Color.toPremultiplied`);\n }\n\n return Color.shared\n .setValue(tint)\n .toPremultiplied(alpha);\n}\n\n/**\n * @memberof PIXI.utils\n * @function premultiplyTintToRgba\n * @deprecated since 7.2.0\n * @see PIXI.Color.premultiply\n * @param {number} tint -\n * @param {number} alpha -\n * @param {Float32Array} [out] -\n * @param {boolean} [premultiply=true] -\n */\nexport function premultiplyTintToRgba(tint: number, alpha: number, out?: Float32Array, premultiply = true): Float32Array\n{\n if (process.env.DEBUG)\n {\n deprecation('7.2.0', `utils.premultiplyTintToRgba has moved to Color.premultiply`);\n }\n\n return Color.shared\n .setValue(tint)\n .premultiply(alpha, premultiply)\n .toArray(out ?? new Float32Array(4));\n}\n","import type { ITypedArray } from '@pixi/core';\n\nexport function getBufferType(\n array: ITypedArray\n): 'Float32Array' | 'Uint32Array' | 'Int32Array' | 'Uint16Array' | 'Uint8Array' | null\n{\n if (array.BYTES_PER_ELEMENT === 4)\n {\n if (array instanceof Float32Array)\n {\n return 'Float32Array';\n }\n else if (array instanceof Uint32Array)\n {\n return 'Uint32Array';\n }\n\n return 'Int32Array';\n }\n else if (array.BYTES_PER_ELEMENT === 2)\n {\n if (array instanceof Uint16Array)\n {\n return 'Uint16Array';\n }\n }\n else if (array.BYTES_PER_ELEMENT === 1)\n {\n if (array instanceof Uint8Array)\n {\n return 'Uint8Array';\n }\n }\n\n // TODO map out the rest of the array elements!\n return null;\n}\n","import { getBufferType } from './getBufferType';\n\n/* eslint-disable object-shorthand */\nconst map = { Float32Array: Float32Array, Uint32Array: Uint32Array, Int32Array: Int32Array, Uint8Array: Uint8Array };\n\ntype PackedArray = Float32Array | Uint32Array | Int32Array | Uint8Array;\n\nexport function interleaveTypedArrays(arrays: PackedArray[], sizes: number[]): Float32Array\n{\n let outSize = 0;\n let stride = 0;\n const views: {[key: string]: PackedArray} = {};\n\n for (let i = 0; i < arrays.length; i++)\n {\n stride += sizes[i];\n outSize += arrays[i].length;\n }\n\n const buffer = new ArrayBuffer(outSize * 4);\n\n let out = null;\n let littleOffset = 0;\n\n for (let i = 0; i < arrays.length; i++)\n {\n const size = sizes[i];\n const array = arrays[i];\n\n /*\n @todo This is unsafe casting but consistent with how the code worked previously. Should it stay this way\n or should and `getBufferTypeUnsafe` function be exposed that throws an Error if unsupported type is passed?\n */\n const type = getBufferType(array) as keyof typeof map;\n\n if (!views[type])\n {\n views[type] = new map[type](buffer);\n }\n\n out = views[type];\n\n for (let j = 0; j < array.length; j++)\n {\n const indexStart = ((j / size | 0) * stride) + littleOffset;\n const index = j % size;\n\n out[indexStart + index] = array[j];\n }\n\n littleOffset += size;\n }\n\n return new Float32Array(buffer);\n}\n","// Taken from the bit-twiddle package\n\n/**\n * Rounds to next power of two.\n * @function nextPow2\n * @memberof PIXI.utils\n * @param {number} v - input value\n * @returns {number} - next rounded power of two\n */\nexport function nextPow2(v: number): number\n{\n v += v === 0 ? 1 : 0;\n --v;\n v |= v >>> 1;\n v |= v >>> 2;\n v |= v >>> 4;\n v |= v >>> 8;\n v |= v >>> 16;\n\n return v + 1;\n}\n\n/**\n * Checks if a number is a power of two.\n * @function isPow2\n * @memberof PIXI.utils\n * @param {number} v - input value\n * @returns {boolean} `true` if value is power of two\n */\nexport function isPow2(v: number): boolean\n{\n return !(v & (v - 1)) && (!!v);\n}\n\n/**\n * Computes ceil of log base 2\n * @function log2\n * @memberof PIXI.utils\n * @param {number} v - input value\n * @returns {number} logarithm base 2\n */\nexport function log2(v: number): number\n{\n let r = (v > 0xFFFF ? 1 : 0) << 4;\n\n v >>>= r;\n\n let shift = (v > 0xFF ? 1 : 0) << 3;\n\n v >>>= shift; r |= shift;\n shift = (v > 0xF ? 1 : 0) << 2;\n v >>>= shift; r |= shift;\n shift = (v > 0x3 ? 1 : 0) << 1;\n v >>>= shift; r |= shift;\n\n return r | (v >> 1);\n}\n","/**\n * Remove items from a javascript array without generating garbage\n * @function removeItems\n * @memberof PIXI.utils\n * @param {Array} arr - Array to remove elements from\n * @param {number} startIdx - starting index\n * @param {number} removeCount - how many to remove\n */\nexport function removeItems(arr: any[], startIdx: number, removeCount: number): void\n{\n const length = arr.length;\n let i;\n\n if (startIdx >= length || removeCount === 0)\n {\n return;\n }\n\n removeCount = (startIdx + removeCount > length ? length - startIdx : removeCount);\n\n const len = length - removeCount;\n\n for (i = startIdx; i < len; ++i)\n {\n arr[i] = arr[i + removeCount];\n }\n\n arr.length = len;\n}\n","/**\n * Returns sign of number\n * @memberof PIXI.utils\n * @function sign\n * @param {number} n - the number to check the sign of\n * @returns {number} 0 if `n` is 0, -1 if `n` is negative, 1 if `n` is positive\n */\nexport function sign(n: number): -1 | 0 | 1\n{\n if (n === 0) return 0;\n\n return n < 0 ? -1 : 1;\n}\n","let nextUid = 0;\n\n/**\n * Gets the next unique identifier\n * @memberof PIXI.utils\n * @function uid\n * @returns {number} The next unique identifier to use.\n */\nexport function uid(): number\n{\n return ++nextUid;\n}\n","/**\n * A rectangular bounding box describing the boundary of an area.\n * @memberof PIXI.utils\n * @since 7.1.0\n */\nexport class BoundingBox\n{\n /** The left coordinate value of the bounding box. */\n left: number;\n /** The top coordinate value of the bounding box. */\n top: number;\n /** The right coordinate value of the bounding box. */\n right: number;\n /** The bottom coordinate value of the bounding box. */\n bottom: number;\n\n /**\n * @param left - The left coordinate value of the bounding box.\n * @param top - The top coordinate value of the bounding box.\n * @param right - The right coordinate value of the bounding box.\n * @param bottom - The bottom coordinate value of the bounding box.\n */\n constructor(left: number, top: number, right: number, bottom: number)\n {\n this.left = left;\n this.top = top;\n this.right = right;\n this.bottom = bottom;\n }\n\n /** The width of the bounding box. */\n get width(): number { return this.right - this.left; }\n /** The height of the bounding box. */\n get height(): number { return this.bottom - this.top; }\n\n /** Determines whether the BoundingBox is empty. */\n isEmpty(): boolean\n {\n return this.left === this.right || this.top === this.bottom;\n }\n\n /**\n * An empty BoundingBox.\n * @type {PIXI.utils.BoundingBox}\n */\n public static readonly EMPTY = new BoundingBox(0, 0, 0, 0);\n}\n","import type { BaseTexture, Program, Texture } from '@pixi/core';\n\n/**\n * @todo Describe property usage\n * @static\n * @name ProgramCache\n * @memberof PIXI.utils\n * @type {Record}\n */\nexport const ProgramCache: {[key: string]: Program} = {};\n\n/**\n * @todo Describe property usage\n * @static\n * @name TextureCache\n * @memberof PIXI.utils\n * @type {Record}\n */\nexport const TextureCache: {[key: string]: Texture} = Object.create(null);\n\n/**\n * @todo Describe property usage\n * @static\n * @name BaseTextureCache\n * @memberof PIXI.utils\n * @type {Record}\n */\nexport const BaseTextureCache: {[key: string]: BaseTexture} = Object.create(null);\n\n/**\n * Destroys all texture in the cache\n * @memberof PIXI.utils\n * @function destroyTextureCache\n */\nexport function destroyTextureCache(): void\n{\n let key;\n\n for (key in TextureCache)\n {\n TextureCache[key].destroy();\n }\n for (key in BaseTextureCache)\n {\n BaseTextureCache[key].destroy();\n }\n}\n\n/**\n * Removes all textures from cache, but does not destroy them\n * @memberof PIXI.utils\n * @function clearTextureCache\n */\nexport function clearTextureCache(): void\n{\n let key;\n\n for (key in TextureCache)\n {\n delete TextureCache[key];\n }\n for (key in BaseTextureCache)\n {\n delete BaseTextureCache[key];\n }\n}\n","import { settings } from '@pixi/settings';\n\nimport type { ICanvas, ICanvasRenderingContext2D } from '@pixi/settings';\n\n/**\n * Creates a Canvas element of the given size to be used as a target for rendering to.\n * @class\n * @memberof PIXI.utils\n */\nexport class CanvasRenderTarget\n{\n protected _canvas: ICanvas | null;\n\n protected _context: ICanvasRenderingContext2D | null;\n\n /**\n * The resolution / device pixel ratio of the canvas\n * @default 1\n */\n public resolution: number;\n\n /**\n * @param width - the width for the newly created canvas\n * @param height - the height for the newly created canvas\n * @param {number} [resolution=PIXI.settings.RESOLUTION] - The resolution / device pixel ratio of the canvas\n */\n constructor(width: number, height: number, resolution?: number)\n {\n this._canvas = settings.ADAPTER.createCanvas();\n\n this._context = this._canvas.getContext('2d');\n\n this.resolution = resolution || settings.RESOLUTION;\n\n this.resize(width, height);\n }\n\n /**\n * Clears the canvas that was created by the CanvasRenderTarget class.\n * @private\n */\n clear(): void\n {\n this._checkDestroyed();\n\n this._context.setTransform(1, 0, 0, 1, 0, 0);\n this._context.clearRect(0, 0, this._canvas.width, this._canvas.height);\n }\n\n /**\n * Resizes the canvas to the specified width and height.\n * @param desiredWidth - the desired width of the canvas\n * @param desiredHeight - the desired height of the canvas\n */\n resize(desiredWidth: number, desiredHeight: number): void\n {\n this._checkDestroyed();\n\n this._canvas.width = Math.round(desiredWidth * this.resolution);\n this._canvas.height = Math.round(desiredHeight * this.resolution);\n }\n\n /** Destroys this canvas. */\n destroy(): void\n {\n this._context = null;\n this._canvas = null;\n }\n\n /**\n * The width of the canvas buffer in pixels.\n * @member {number}\n */\n get width(): number\n {\n this._checkDestroyed();\n\n return this._canvas.width;\n }\n\n set width(val: number)\n {\n this._checkDestroyed();\n\n this._canvas.width = Math.round(val);\n }\n\n /**\n * The height of the canvas buffer in pixels.\n * @member {number}\n */\n get height(): number\n {\n this._checkDestroyed();\n\n return this._canvas.height;\n }\n\n set height(val: number)\n {\n this._checkDestroyed();\n\n this._canvas.height = Math.round(val);\n }\n\n /** The Canvas object that belongs to this CanvasRenderTarget. */\n public get canvas(): ICanvas\n {\n this._checkDestroyed();\n\n return this._canvas;\n }\n\n /** A CanvasRenderingContext2D object representing a two-dimensional rendering context. */\n public get context(): ICanvasRenderingContext2D\n {\n this._checkDestroyed();\n\n return this._context;\n }\n\n private _checkDestroyed(): asserts this is this & { _canvas: ICanvas; _context: ICanvasRenderingContext2D }\n {\n if (this._canvas === null)\n {\n if (process.env.DEBUG)\n {\n throw new TypeError('The CanvasRenderTarget has already been destroyed');\n }\n }\n }\n}\n","import { BoundingBox } from './BoundingBox';\n\nimport type { ICanvas } from '@pixi/settings';\n\nfunction checkRow(data: Uint8ClampedArray, width: number, y: number)\n{\n for (let x = 0, index = 4 * y * width; x < width; ++x, index += 4)\n {\n if (data[index + 3] !== 0) return false;\n }\n\n return true;\n}\n\nfunction checkColumn(data: Uint8ClampedArray, width: number, x: number, top: number, bottom: number)\n{\n const stride = 4 * width;\n\n for (let y = top, index = (top * stride) + (4 * x); y <= bottom; ++y, index += stride)\n {\n if (data[index + 3] !== 0) return false;\n }\n\n return true;\n}\n\n/**\n * Measuring the bounds of a canvas' visible (non-transparent) pixels.\n * @memberof PIXI.utils\n * @param {PIXI.ICanvas} canvas - The canvas to measure.\n * @returns {PIXI.utils.BoundingBox} The bounding box of the canvas' visible pixels.\n * @since 7.1.0\n */\nexport function getCanvasBoundingBox(canvas: ICanvas): BoundingBox\n{\n // https://gist.github.com/timdown/021d9c8f2aabc7092df564996f5afbbf\n\n const { width, height } = canvas;\n\n const context = canvas.getContext('2d', {\n willReadFrequently: true,\n });\n\n if (context === null)\n {\n throw new TypeError('Failed to get canvas 2D context');\n }\n\n const imageData = context.getImageData(0, 0, width, height);\n const data = imageData.data;\n\n let left = 0;\n let top = 0;\n let right = width - 1;\n let bottom = height - 1;\n\n while (top < height && checkRow(data, width, top)) ++top;\n if (top === height) return BoundingBox.EMPTY;\n while (checkRow(data, width, bottom)) --bottom;\n while (checkColumn(data, width, left, top, bottom)) ++left;\n while (checkColumn(data, width, right, top, bottom)) --right;\n\n ++right;\n ++bottom;\n\n return new BoundingBox(left, top, right, bottom);\n}\n","import { getCanvasBoundingBox } from './getCanvasBoundingBox';\n\nimport type { ICanvas } from '@pixi/settings';\n\n/**\n * Trim transparent borders from a canvas.\n * @memberof PIXI.utils\n * @param {PIXI.ICanvas} canvas - The canvas to trim.\n * @returns The trimmed canvas data.\n */\nexport function trimCanvas(canvas: ICanvas): { width: number, height: number, data: ImageData | null }\n{\n const boundingBox = getCanvasBoundingBox(canvas);\n const { width, height } = boundingBox;\n let data = null;\n\n if (!boundingBox.isEmpty())\n {\n const context = canvas.getContext('2d');\n\n if (context === null)\n {\n throw new TypeError('Failed to get canvas 2D context');\n }\n\n data = context.getImageData(\n boundingBox.left,\n boundingBox.top,\n width,\n height\n );\n }\n\n return { width, height, data };\n}\n","import { settings } from '../settings';\n\n/**\n * get the resolution / device pixel ratio of an asset by looking for the prefix\n * used by spritesheets and image urls\n * @memberof PIXI.utils\n * @function getResolutionOfUrl\n * @param {string} url - the image path\n * @param {number} [defaultValue=1] - the defaultValue if no filename prefix is set.\n * @returns {number} resolution / device pixel ratio of an asset\n */\nexport function getResolutionOfUrl(url: string, defaultValue = 1): number\n{\n const resolution = settings.RETINA_PREFIX?.exec(url);\n\n if (resolution)\n {\n return parseFloat(resolution[1]);\n }\n\n return defaultValue;\n}\n","/**\n * Collection of valid extension types.\n * @memberof PIXI\n * @property {string} Application - Application plugins\n * @property {string} RendererPlugin - Plugins for Renderer\n * @property {string} CanvasRendererPlugin - Plugins for CanvasRenderer\n * @property {string} Loader - Plugins to use with Loader\n * @property {string} LoadParser - Parsers for Assets loader.\n * @property {string} ResolveParser - Parsers for Assets resolvers.\n * @property {string} CacheParser - Parsers for Assets cache.\n */\nenum ExtensionType\n// eslint-disable-next-line @typescript-eslint/indent\n{\n Renderer = 'renderer',\n Application = 'application',\n RendererSystem = 'renderer-webgl-system',\n RendererPlugin = 'renderer-webgl-plugin',\n CanvasRendererSystem = 'renderer-canvas-system',\n CanvasRendererPlugin = 'renderer-canvas-plugin',\n Asset = 'asset',\n LoadParser = 'load-parser',\n ResolveParser = 'resolve-parser',\n CacheParser = 'cache-parser',\n DetectionParser = 'detection-parser',\n}\n\ninterface ExtensionMetadataDetails\n{\n type: ExtensionType | ExtensionType[];\n name?: string;\n priority?: number;\n}\n\ntype ExtensionMetadata = ExtensionType | ExtensionMetadataDetails;\n\n/**\n * Format when registering an extension. Generally, the extension\n * should have these values as `extension` static property,\n * but you can override name or type by providing an object.\n * @memberof PIXI\n */\ninterface ExtensionFormatLoose\n{\n /** The extension type, can be multiple types */\n type: ExtensionType | ExtensionType[];\n /** Optional. Some plugins provide an API name/property, such as Renderer plugins */\n name?: string;\n /** Optional, used for sorting the plugins in a particular order */\n priority?: number;\n /** Reference to the plugin object/class */\n ref: any;\n}\n\n/**\n * Strict extension format that is used internally for registrations.\n * @memberof PIXI\n */\ninterface ExtensionFormat extends ExtensionFormatLoose\n{\n /** The extension type, always expressed as multiple, even if a single */\n type: ExtensionType[];\n}\n\ntype ExtensionHandler = (extension: ExtensionFormat) => void;\n\n/**\n * Convert input into extension format data.\n * @ignore\n */\nconst normalizeExtension = (ext: ExtensionFormatLoose | any): ExtensionFormat =>\n{\n // Class/Object submission, use extension object\n if (typeof ext === 'function' || (typeof ext === 'object' && ext.extension))\n {\n if (process.env.DEBUG)\n {\n if (!ext.extension)\n {\n throw new Error('Extension class must have an extension object');\n }\n }\n const metadata: ExtensionMetadataDetails = (typeof ext.extension !== 'object')\n ? { type: ext.extension }\n : ext.extension;\n\n ext = { ...metadata, ref: ext };\n }\n if (typeof ext === 'object')\n {\n ext = { ...ext };\n }\n else\n {\n throw new Error('Invalid extension type');\n }\n\n if (typeof ext.type === 'string')\n {\n ext.type = [ext.type];\n }\n\n return ext;\n};\n\n/**\n * Get the priority for an extension.\n * @ignore\n * @param ext - Any extension\n * @param defaultPriority - Fallback priority if none is defined.\n * @returns The priority for the extension.\n */\nconst normalizePriority = (ext: ExtensionFormatLoose | any, defaultPriority: number): number =>\n normalizeExtension(ext).priority ?? defaultPriority;\n\n/**\n * Global registration of all PixiJS extensions. One-stop-shop for extensibility.\n * @memberof PIXI\n * @namespace extensions\n */\nconst extensions = {\n\n /** @ignore */\n _addHandlers: {} as Record,\n\n /** @ignore */\n _removeHandlers: {} as Record,\n\n /** @ignore */\n _queue: {} as Record,\n\n /**\n * Remove extensions from PixiJS.\n * @param extensions - Extensions to be removed.\n * @returns {PIXI.extensions} For chaining.\n */\n remove(...extensions: Array)\n {\n extensions.map(normalizeExtension).forEach((ext) =>\n {\n ext.type.forEach((type) => this._removeHandlers[type]?.(ext));\n });\n\n return this;\n },\n\n /**\n * Register new extensions with PixiJS.\n * @param extensions - The spread of extensions to add to PixiJS.\n * @returns {PIXI.extensions} For chaining.\n */\n add(...extensions: Array)\n {\n // Handle any extensions either passed as class w/ data or as data\n extensions.map(normalizeExtension).forEach((ext) =>\n {\n ext.type.forEach((type) =>\n {\n const handlers = this._addHandlers;\n const queue = this._queue;\n\n if (!handlers[type])\n {\n queue[type] = queue[type] || [];\n queue[type].push(ext);\n }\n else\n {\n handlers[type](ext);\n }\n });\n });\n\n return this;\n },\n\n /**\n * Internal method to handle extensions by name.\n * @param type - The extension type.\n * @param onAdd - Function for handling when extensions are added/registered passes {@link PIXI.ExtensionFormat}.\n * @param onRemove - Function for handling when extensions are removed/unregistered passes {@link PIXI.ExtensionFormat}.\n * @returns {PIXI.extensions} For chaining.\n */\n handle(type: ExtensionType, onAdd: ExtensionHandler, onRemove: ExtensionHandler)\n {\n const addHandlers = this._addHandlers;\n const removeHandlers = this._removeHandlers;\n\n if (process.env.DEBUG)\n {\n if (addHandlers[type] || removeHandlers[type])\n {\n throw new Error(`Extension type ${type} already has a handler`);\n }\n }\n\n addHandlers[type] = onAdd;\n removeHandlers[type] = onRemove;\n\n // Process the queue\n const queue = this._queue;\n\n // Process any plugins that have been registered before the handler\n if (queue[type])\n {\n queue[type].forEach((ext) => onAdd(ext));\n delete queue[type];\n }\n\n return this;\n },\n\n /**\n * Handle a type, but using a map by `name` property.\n * @param type - Type of extension to handle.\n * @param map - The object map of named extensions.\n * @returns {PIXI.extensions} For chaining.\n */\n handleByMap(type: ExtensionType, map: Record)\n {\n return this.handle(type,\n (extension) =>\n {\n map[extension.name] = extension.ref;\n },\n (extension) =>\n {\n delete map[extension.name];\n }\n );\n },\n\n /**\n * Handle a type, but using a list of extensions.\n * @param type - Type of extension to handle.\n * @param list - The list of extensions.\n * @param defaultPriority - The default priority to use if none is specified.\n * @returns {PIXI.extensions} For chaining.\n */\n handleByList(type: ExtensionType, list: any[], defaultPriority = -1)\n {\n return this.handle(\n type,\n (extension) =>\n {\n if (list.includes(extension.ref))\n {\n return;\n }\n\n list.push(extension.ref);\n list.sort((a, b) => normalizePriority(b, defaultPriority) - normalizePriority(a, defaultPriority));\n },\n (extension) =>\n {\n const index = list.indexOf(extension.ref);\n\n if (index !== -1)\n {\n list.splice(index, 1);\n }\n }\n );\n },\n};\n\nexport {\n extensions,\n ExtensionType,\n};\nexport type {\n ExtensionFormat,\n ExtensionFormatLoose,\n ExtensionHandler,\n ExtensionMetadata,\n};\n","import type { ITypedArray } from './Buffer';\n\n/**\n * Flexible wrapper around `ArrayBuffer` that also provides typed array views on demand.\n * @memberof PIXI\n */\nexport class ViewableBuffer\n{\n public size: number;\n\n /** Underlying `ArrayBuffer` that holds all the data and is of capacity `this.size`. */\n public rawBinaryData: ArrayBuffer;\n\n /** View on the raw binary data as a `Uint32Array`. */\n public uint32View: Uint32Array;\n\n /** View on the raw binary data as a `Float32Array`. */\n public float32View: Float32Array;\n\n private _int8View: Int8Array;\n private _uint8View: Uint8Array;\n private _int16View: Int16Array;\n private _uint16View: Uint16Array;\n private _int32View: Int32Array;\n\n /**\n * @param length - The size of the buffer in bytes.\n */\n constructor(length: number);\n\n /**\n * @param arrayBuffer - The source array buffer.\n */\n constructor(arrayBuffer: ArrayBuffer);\n\n constructor(sizeOrBuffer: number | ArrayBuffer | Uint8Array)\n {\n if (typeof sizeOrBuffer === 'number')\n {\n this.rawBinaryData = new ArrayBuffer(sizeOrBuffer);\n }\n else if (sizeOrBuffer instanceof Uint8Array)\n {\n this.rawBinaryData = sizeOrBuffer.buffer;\n }\n else\n {\n this.rawBinaryData = sizeOrBuffer;\n }\n\n this.uint32View = new Uint32Array(this.rawBinaryData);\n this.float32View = new Float32Array(this.rawBinaryData);\n }\n\n /** View on the raw binary data as a `Int8Array`. */\n get int8View(): Int8Array\n {\n if (!this._int8View)\n {\n this._int8View = new Int8Array(this.rawBinaryData);\n }\n\n return this._int8View;\n }\n\n /** View on the raw binary data as a `Uint8Array`. */\n get uint8View(): Uint8Array\n {\n if (!this._uint8View)\n {\n this._uint8View = new Uint8Array(this.rawBinaryData);\n }\n\n return this._uint8View;\n }\n\n /** View on the raw binary data as a `Int16Array`. */\n get int16View(): Int16Array\n {\n if (!this._int16View)\n {\n this._int16View = new Int16Array(this.rawBinaryData);\n }\n\n return this._int16View;\n }\n\n /** View on the raw binary data as a `Uint16Array`. */\n get uint16View(): Uint16Array\n {\n if (!this._uint16View)\n {\n this._uint16View = new Uint16Array(this.rawBinaryData);\n }\n\n return this._uint16View;\n }\n\n /** View on the raw binary data as a `Int32Array`. */\n get int32View(): Int32Array\n {\n if (!this._int32View)\n {\n this._int32View = new Int32Array(this.rawBinaryData);\n }\n\n return this._int32View;\n }\n\n /**\n * Returns the view of the given type.\n * @param type - One of `int8`, `uint8`, `int16`,\n * `uint16`, `int32`, `uint32`, and `float32`.\n * @returns - typed array of given type\n */\n view(type: string): ITypedArray\n {\n return (this as any)[`${type}View`];\n }\n\n /** Destroys all buffer references. Do not use after calling this. */\n destroy(): void\n {\n this.rawBinaryData = null;\n this._int8View = null;\n this._uint8View = null;\n this._int16View = null;\n this._uint16View = null;\n this._int32View = null;\n this.uint32View = null;\n this.float32View = null;\n }\n\n static sizeOf(type: string): number\n {\n switch (type)\n {\n case 'int8':\n case 'uint8':\n return 1;\n case 'int16':\n case 'uint16':\n return 2;\n case 'int32':\n case 'uint32':\n case 'float32':\n return 4;\n default:\n throw new Error(`${type} isn't a valid view type`);\n }\n }\n}\n","import type { IRenderingContext } from '../../IRenderer';\n\nconst fragTemplate = [\n 'precision mediump float;',\n 'void main(void){',\n 'float test = 0.1;',\n '%forloop%',\n 'gl_FragColor = vec4(0.0);',\n '}',\n].join('\\n');\n\nfunction generateIfTestSrc(maxIfs: number): string\n{\n let src = '';\n\n for (let i = 0; i < maxIfs; ++i)\n {\n if (i > 0)\n {\n src += '\\nelse ';\n }\n\n if (i < maxIfs - 1)\n {\n src += `if(test == ${i}.0){}`;\n }\n }\n\n return src;\n}\n\nexport function checkMaxIfStatementsInShader(maxIfs: number, gl: IRenderingContext): number\n{\n if (maxIfs === 0)\n {\n throw new Error('Invalid value of `0` passed to `checkMaxIfStatementsInShader`');\n }\n\n const shader = gl.createShader(gl.FRAGMENT_SHADER);\n\n while (true) // eslint-disable-line no-constant-condition\n {\n const fragmentSrc = fragTemplate.replace(/%forloop%/gi, generateIfTestSrc(maxIfs));\n\n gl.shaderSource(shader, fragmentSrc);\n gl.compileShader(shader);\n\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS))\n {\n maxIfs = (maxIfs / 2) | 0;\n }\n else\n {\n // valid!\n break;\n }\n }\n\n return maxIfs;\n}\n","import { BLEND_MODES } from '@pixi/constants';\n\n/* eslint-disable max-len */\n\nconst BLEND = 0;\nconst OFFSET = 1;\nconst CULLING = 2;\nconst DEPTH_TEST = 3;\nconst WINDING = 4;\nconst DEPTH_MASK = 5;\n\n/**\n * This is a WebGL state, and is is passed to {@link PIXI.StateSystem}.\n *\n * Each mesh rendered may require WebGL to be in a different state.\n * For example you may want different blend mode or to enable polygon offsets\n * @memberof PIXI\n */\nexport class State\n{\n data: number;\n _blendMode: BLEND_MODES;\n _polygonOffset: number;\n\n constructor()\n {\n this.data = 0;\n\n this.blendMode = BLEND_MODES.NORMAL;\n this.polygonOffset = 0;\n\n this.blend = true;\n this.depthMask = true;\n // this.depthTest = true;\n }\n\n /**\n * Activates blending of the computed fragment color values.\n * @default true\n */\n get blend(): boolean\n {\n return !!(this.data & (1 << BLEND));\n }\n\n set blend(value: boolean)\n {\n if (!!(this.data & (1 << BLEND)) !== value)\n {\n this.data ^= (1 << BLEND);\n }\n }\n\n /**\n * Activates adding an offset to depth values of polygon's fragments\n * @default false\n */\n get offsets(): boolean\n {\n return !!(this.data & (1 << OFFSET));\n }\n\n set offsets(value: boolean)\n {\n if (!!(this.data & (1 << OFFSET)) !== value)\n {\n this.data ^= (1 << OFFSET);\n }\n }\n\n /**\n * Activates culling of polygons.\n * @default false\n */\n get culling(): boolean\n {\n return !!(this.data & (1 << CULLING));\n }\n\n set culling(value: boolean)\n {\n if (!!(this.data & (1 << CULLING)) !== value)\n {\n this.data ^= (1 << CULLING);\n }\n }\n\n /**\n * Activates depth comparisons and updates to the depth buffer.\n * @default false\n */\n get depthTest(): boolean\n {\n return !!(this.data & (1 << DEPTH_TEST));\n }\n\n set depthTest(value: boolean)\n {\n if (!!(this.data & (1 << DEPTH_TEST)) !== value)\n {\n this.data ^= (1 << DEPTH_TEST);\n }\n }\n\n /**\n * Enables or disables writing to the depth buffer.\n * @default true\n */\n get depthMask(): boolean\n {\n return !!(this.data & (1 << DEPTH_MASK));\n }\n\n set depthMask(value: boolean)\n {\n if (!!(this.data & (1 << DEPTH_MASK)) !== value)\n {\n this.data ^= (1 << DEPTH_MASK);\n }\n }\n\n /**\n * Specifies whether or not front or back-facing polygons can be culled.\n * @default false\n */\n get clockwiseFrontFace(): boolean\n {\n return !!(this.data & (1 << WINDING));\n }\n\n set clockwiseFrontFace(value: boolean)\n {\n if (!!(this.data & (1 << WINDING)) !== value)\n {\n this.data ^= (1 << WINDING);\n }\n }\n\n /**\n * The blend mode to be applied when this state is set. Apply a value of `PIXI.BLEND_MODES.NORMAL` to reset the blend mode.\n * Setting this mode to anything other than NO_BLEND will automatically switch blending on.\n * @default PIXI.BLEND_MODES.NORMAL\n */\n get blendMode(): BLEND_MODES\n {\n return this._blendMode;\n }\n\n set blendMode(value: BLEND_MODES)\n {\n this.blend = (value !== BLEND_MODES.NONE);\n this._blendMode = value;\n }\n\n /**\n * The polygon offset. Setting this property to anything other than 0 will automatically enable polygon offset fill.\n * @default 0\n */\n get polygonOffset(): number\n {\n return this._polygonOffset;\n }\n\n set polygonOffset(value: number)\n {\n this.offsets = !!value;\n this._polygonOffset = value;\n }\n\n static for2d(): State\n {\n const state = new State();\n\n state.depthTest = false;\n state.blend = true;\n\n return state;\n }\n}\n\nif (process.env.DEBUG)\n{\n State.prototype.toString = function toString(): string\n {\n return `[@pixi/core:State `\n + `blendMode=${this.blendMode} `\n + `clockwiseFrontFace=${this.clockwiseFrontFace} `\n + `culling=${this.culling} `\n + `depthMask=${this.depthMask} `\n + `polygonOffset=${this.polygonOffset}`\n + `]`;\n };\n}\n\n","import type { ISize } from '@pixi/math';\nimport type { ICubeResourceOptions } from './CubeResource';\nimport type { IImageResourceOptions } from './ImageResource';\nimport type { Resource } from './Resource';\nimport type { ISVGResourceOptions } from './SVGResource';\nimport type { IVideoResourceOptions } from './VideoResource';\n\n/*\n * Allow flexible options for resource plugins\n */\nexport type IResourcePluginOptions = { [key: string]: any };\n\n/*\n * All allowable options for autoDetectResource\n */\nexport type IAutoDetectOptions = ISize\n| ICubeResourceOptions\n| IImageResourceOptions\n| ISVGResourceOptions\n| IVideoResourceOptions\n| IResourcePluginOptions;\n\n/**\n * Shape of supported resource plugins\n * @memberof PIXI\n */\nexport interface IResourcePlugin\n{\n test(source: unknown, extension: string): boolean;\n new (source: any, options?: RO): R;\n}\n\n/**\n * Collection of installed resource types, class must extend {@link PIXI.Resource}.\n * @example\n * class CustomResource extends PIXI.Resource {\n * // MUST have source, options constructor signature\n * // for auto-detected resources to be created.\n * constructor(source, options) {\n * super();\n * }\n * upload(renderer, baseTexture, glTexture) {\n * // Upload with GL\n * return true;\n * }\n * // Used to auto-detect resource\n * static test(source, extension) {\n * return extension === 'xyz' || source instanceof SomeClass;\n * }\n * }\n * // Install the new resource type\n * PIXI.INSTALLED.push(CustomResource);\n * @memberof PIXI\n * @type {Array}\n * @static\n * @readonly\n */\nexport const INSTALLED: Array> = [];\n\n/**\n * Create a resource element from a single source element. This\n * auto-detects which type of resource to create. All resources that\n * are auto-detectable must have a static `test` method and a constructor\n * with the arguments `(source, options?)`. Currently, the supported\n * resources for auto-detection include:\n * - {@link PIXI.ImageResource}\n * - {@link PIXI.CanvasResource}\n * - {@link PIXI.VideoResource}\n * - {@link PIXI.SVGResource}\n * - {@link PIXI.BufferResource}\n * @static\n * @memberof PIXI\n * @function autoDetectResource\n * @param {string|*} source - Resource source, this can be the URL to the resource,\n * a typed-array (for BufferResource), HTMLVideoElement, SVG data-uri\n * or any other resource that can be auto-detected. If not resource is\n * detected, it's assumed to be an ImageResource.\n * @param {object} [options] - Pass-through options to use for Resource\n * @param {number} [options.width] - Width of BufferResource or SVG rasterization\n * @param {number} [options.height] - Height of BufferResource or SVG rasterization\n * @param {boolean} [options.autoLoad=true] - Image, SVG and Video flag to start loading\n * @param {number} [options.scale=1] - SVG source scale. Overridden by width, height\n * @param {boolean} [options.createBitmap=PIXI.settings.CREATE_IMAGE_BITMAP] - Image option to create Bitmap object\n * @param {boolean} [options.crossorigin=true] - Image and Video option to set crossOrigin\n * @param {boolean} [options.autoPlay=true] - Video option to start playing video immediately\n * @param {number} [options.updateFPS=0] - Video option to update how many times a second the\n * texture should be updated from the video. Leave at 0 to update at every render\n * @returns {PIXI.Resource} The created resource.\n */\nexport function autoDetectResource(source: unknown, options?: RO): R\n{\n if (!source)\n {\n return null;\n }\n\n let extension = '';\n\n if (typeof source === 'string')\n {\n // search for file extension: period, 3-4 chars, then ?, # or EOL\n const result = (/\\.(\\w{3,4})(?:$|\\?|#)/i).exec(source);\n\n if (result)\n {\n extension = result[1].toLowerCase();\n }\n }\n\n for (let i = INSTALLED.length - 1; i >= 0; --i)\n {\n const ResourcePlugin = INSTALLED[i] as IResourcePlugin;\n\n if (ResourcePlugin.test && ResourcePlugin.test(source, extension))\n {\n return new ResourcePlugin(source, options);\n }\n }\n\n throw new Error('Unrecognized source type to auto-detect Resource');\n}\n","/**\n * A Runner is a highly performant and simple alternative to signals. Best used in situations\n * where events are dispatched to many objects at high frequency (say every frame!)\n *\n * Like a signal:\n *\n * ```js\n * import { Runner } from '@pixi/runner';\n *\n * const myObject = {\n * loaded: new Runner('loaded'),\n * };\n *\n * const listener = {\n * loaded: function() {\n * // Do something when loaded\n * }\n * };\n *\n * myObject.loaded.add(listener);\n *\n * myObject.loaded.emit();\n * ```\n *\n * Or for handling calling the same function on many items:\n *\n * ```js\n * import { Runner } from '@pixi/runner';\n *\n * const myGame = {\n * update: new Runner('update'),\n * };\n *\n * const gameObject = {\n * update: function(time) {\n * // Update my gamey state\n * },\n * };\n *\n * myGame.update.add(gameObject);\n *\n * myGame.update.emit(time);\n * ```\n * @memberof PIXI\n */\nexport class Runner\n{\n public items: any[];\n private _name: string;\n private _aliasCount: number;\n\n /**\n * @param name - The function name that will be executed on the listeners added to this Runner.\n */\n constructor(name: string)\n {\n this.items = [];\n this._name = name;\n this._aliasCount = 0;\n }\n\n /* eslint-disable jsdoc/require-param, jsdoc/check-param-names */\n /**\n * Dispatch/Broadcast Runner to all listeners added to the queue.\n * @param {...any} params - (optional) parameters to pass to each listener\n */\n /* eslint-enable jsdoc/require-param, jsdoc/check-param-names */\n public emit(a0?: unknown, a1?: unknown, a2?: unknown, a3?: unknown,\n a4?: unknown, a5?: unknown, a6?: unknown, a7?: unknown): this\n {\n if (arguments.length > 8)\n {\n throw new Error('max arguments reached');\n }\n\n const { name, items } = this;\n\n this._aliasCount++;\n\n for (let i = 0, len = items.length; i < len; i++)\n {\n items[i][name](a0, a1, a2, a3, a4, a5, a6, a7);\n }\n\n if (items === this.items)\n {\n this._aliasCount--;\n }\n\n return this;\n }\n\n private ensureNonAliasedItems(): void\n {\n if (this._aliasCount > 0 && this.items.length > 1)\n {\n this._aliasCount = 0;\n this.items = this.items.slice(0);\n }\n }\n\n /**\n * Add a listener to the Runner\n *\n * Runners do not need to have scope or functions passed to them.\n * All that is required is to pass the listening object and ensure that it has contains a function that has the same name\n * as the name provided to the Runner when it was created.\n *\n * E.g. A listener passed to this Runner will require a 'complete' function.\n *\n * ```js\n * import { Runner } from '@pixi/runner';\n *\n * const complete = new Runner('complete');\n * ```\n *\n * The scope used will be the object itself.\n * @param {any} item - The object that will be listening.\n */\n public add(item: unknown): this\n {\n if ((item as any)[this._name])\n {\n this.ensureNonAliasedItems();\n this.remove(item);\n this.items.push(item);\n }\n\n return this;\n }\n\n /**\n * Remove a single listener from the dispatch queue.\n * @param {any} item - The listener that you would like to remove.\n */\n public remove(item: unknown): this\n {\n const index = this.items.indexOf(item);\n\n if (index !== -1)\n {\n this.ensureNonAliasedItems();\n this.items.splice(index, 1);\n }\n\n return this;\n }\n\n /**\n * Check to see if the listener is already in the Runner\n * @param {any} item - The listener that you would like to check.\n */\n public contains(item: unknown): boolean\n {\n return this.items.includes(item);\n }\n\n /** Remove all listeners from the Runner */\n public removeAll(): this\n {\n this.ensureNonAliasedItems();\n this.items.length = 0;\n\n return this;\n }\n\n /** Remove all references, don't use after this. */\n public destroy(): void\n {\n this.removeAll();\n this.items = null;\n this._name = null;\n }\n\n /**\n * `true` if there are no this Runner contains no listeners\n * @readonly\n */\n public get empty(): boolean\n {\n return this.items.length === 0;\n }\n\n /**\n * The name of the runner.\n * @readonly\n */\n public get name(): string\n {\n return this._name;\n }\n}\n\nObject.defineProperties(Runner.prototype, {\n /**\n * Alias for `emit`\n * @memberof PIXI.Runner#\n * @method dispatch\n * @see PIXI.Runner#emit\n */\n dispatch: { value: Runner.prototype.emit },\n /**\n * Alias for `emit`\n * @memberof PIXI.Runner#\n * @method run\n * @see PIXI.Runner#emit\n */\n run: { value: Runner.prototype.emit },\n});\n","import { Runner } from '@pixi/runner';\n\nimport type { Renderer } from '../../Renderer';\nimport type { BaseTexture } from '../BaseTexture';\nimport type { GLTexture } from '../GLTexture';\n\n/**\n * Base resource class for textures that manages validation and uploading, depending on its type.\n *\n * Uploading of a base texture to the GPU is required.\n * @memberof PIXI\n */\nexport abstract class Resource\n{\n /** The url of the resource */\n public src: string;\n\n /**\n * If resource has been destroyed.\n * @readonly\n * @default false\n */\n public destroyed: boolean;\n\n /**\n * `true` if resource is created by BaseTexture\n * useful for doing cleanup with BaseTexture destroy\n * and not cleaning up resources that were created\n * externally.\n */\n public internal: boolean;\n\n /** Internal width of the resource. */\n protected _width: number;\n\n /** Internal height of the resource. */\n protected _height: number;\n\n /**\n * Mini-runner for handling resize events\n * accepts 2 parameters: width, height\n * @member {Runner}\n * @private\n */\n protected onResize: Runner; // TODO: Should this be private? It doesn't seem to be used anywhere else.\n\n /**\n * Mini-runner for handling update events\n * @member {Runner}\n * @private\n */\n protected onUpdate: Runner;\n\n /**\n * Handle internal errors, such as loading errors\n * accepts 1 param: error\n * @member {Runner}\n * @private\n */\n protected onError: Runner;\n\n /**\n * @param width - Width of the resource\n * @param height - Height of the resource\n */\n constructor(width = 0, height = 0)\n {\n this._width = width;\n this._height = height;\n\n this.destroyed = false;\n this.internal = false;\n\n this.onResize = new Runner('setRealSize');\n this.onUpdate = new Runner('update');\n this.onError = new Runner('onError');\n }\n\n /**\n * Bind to a parent BaseTexture\n * @param baseTexture - Parent texture\n */\n bind(baseTexture: BaseTexture): void\n {\n this.onResize.add(baseTexture);\n this.onUpdate.add(baseTexture);\n this.onError.add(baseTexture);\n\n // Call a resize immediate if we already\n // have the width and height of the resource\n if (this._width || this._height)\n {\n this.onResize.emit(this._width, this._height);\n }\n }\n\n /**\n * Unbind to a parent BaseTexture\n * @param baseTexture - Parent texture\n */\n unbind(baseTexture: BaseTexture): void\n {\n this.onResize.remove(baseTexture);\n this.onUpdate.remove(baseTexture);\n this.onError.remove(baseTexture);\n }\n\n /**\n * Trigger a resize event\n * @param width - X dimension\n * @param height - Y dimension\n */\n resize(width: number, height: number): void\n {\n if (width !== this._width || height !== this._height)\n {\n this._width = width;\n this._height = height;\n this.onResize.emit(width, height);\n }\n }\n\n /**\n * Has been validated\n * @readonly\n */\n get valid(): boolean\n {\n return !!this._width && !!this._height;\n }\n\n /** Has been updated trigger event. */\n update(): void\n {\n if (!this.destroyed)\n {\n this.onUpdate.emit();\n }\n }\n\n /**\n * This can be overridden to start preloading a resource\n * or do any other prepare step.\n * @protected\n * @returns Handle the validate event\n */\n load(): Promise\n {\n return Promise.resolve(this);\n }\n\n /**\n * The width of the resource.\n * @readonly\n */\n get width(): number\n {\n return this._width;\n }\n\n /**\n * The height of the resource.\n * @readonly\n */\n get height(): number\n {\n return this._height;\n }\n\n /**\n * Uploads the texture or returns false if it cant for some reason. Override this.\n * @param renderer - yeah, renderer!\n * @param baseTexture - the texture\n * @param glTexture - texture instance for this webgl context\n * @returns - true is success\n */\n abstract upload(renderer: Renderer, baseTexture: BaseTexture, glTexture: GLTexture): boolean;\n\n /**\n * Set the style, optional to override\n * @param _renderer - yeah, renderer!\n * @param _baseTexture - the texture\n * @param _glTexture - texture instance for this webgl context\n * @returns - `true` is success\n */\n style(_renderer: Renderer, _baseTexture: BaseTexture, _glTexture: GLTexture): boolean\n {\n return false;\n }\n\n /** Clean up anything, this happens when destroying is ready. */\n dispose(): void\n {\n // override\n }\n\n /**\n * Call when destroying resource, unbind any BaseTexture object\n * before calling this method, as reference counts are maintained\n * internally.\n */\n destroy(): void\n {\n if (!this.destroyed)\n {\n this.destroyed = true;\n this.dispose();\n this.onError.removeAll();\n this.onError = null;\n this.onResize.removeAll();\n this.onResize = null;\n this.onUpdate.removeAll();\n this.onUpdate = null;\n }\n }\n\n /**\n * Abstract, used to auto-detect resource type.\n * @param {*} _source - The source object\n * @param {string} _extension - The extension of source, if set\n */\n static test(_source: unknown, _extension?: string): boolean\n {\n return false;\n }\n}\n","import { ALPHA_MODES } from '@pixi/constants';\nimport { Resource } from './Resource';\n\nimport type { ISize } from '@pixi/math';\nimport type { Renderer } from '../../Renderer';\nimport type { BaseTexture } from '../BaseTexture';\nimport type { GLTexture } from '../GLTexture';\n\nexport type BufferType = null | Int8Array | Uint8Array | Uint8ClampedArray\n| Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array;\n\n/**\n * Constructor options for BufferResource.\n * @memberof PIXI\n */\nexport interface IBufferResourceOptions extends ISize\n{\n unpackAlignment?: 1 | 2 | 4 | 8\n}\n\n/**\n * Buffer resource with data of typed array.\n * @memberof PIXI\n */\nexport class BufferResource extends Resource\n{\n /** The data of this resource. */\n public data: BufferType;\n\n /** The alignment of the rows in the data. */\n public unpackAlignment: 1 | 2 | 4 | 8;\n\n /**\n * @param source - Source buffer\n * @param options - Options\n * @param {number} options.width - Width of the texture\n * @param {number} options.height - Height of the texture\n * @param {1|2|4|8} [options.unpackAlignment=4] - The alignment of the pixel rows.\n */\n constructor(source: BufferType, options: IBufferResourceOptions)\n {\n const { width, height } = options || {};\n\n if (!width || !height)\n {\n throw new Error('BufferResource width or height invalid');\n }\n\n super(width, height);\n\n this.data = source;\n this.unpackAlignment = options.unpackAlignment ?? 4;\n }\n\n /**\n * Upload the texture to the GPU.\n * @param renderer - Upload to the renderer\n * @param baseTexture - Reference to parent texture\n * @param glTexture - glTexture\n * @returns - true is success\n */\n upload(renderer: Renderer, baseTexture: BaseTexture, glTexture: GLTexture): boolean\n {\n const gl = renderer.gl;\n\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, this.unpackAlignment);\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, baseTexture.alphaMode === ALPHA_MODES.UNPACK);\n\n const width = baseTexture.realWidth;\n const height = baseTexture.realHeight;\n\n if (glTexture.width === width && glTexture.height === height)\n {\n gl.texSubImage2D(\n baseTexture.target,\n 0,\n 0,\n 0,\n width,\n height,\n baseTexture.format,\n glTexture.type,\n this.data\n );\n }\n else\n {\n glTexture.width = width;\n glTexture.height = height;\n\n gl.texImage2D(\n baseTexture.target,\n 0,\n glTexture.internalFormat,\n width,\n height,\n 0,\n baseTexture.format,\n glTexture.type,\n this.data\n );\n }\n\n return true;\n }\n\n /** Destroy and don't use after this. */\n dispose(): void\n {\n this.data = null;\n }\n\n /**\n * Used to auto-detect the type of resource.\n * @param {*} source - The source object\n * @returns {boolean} `true` if buffer source\n */\n static test(source: unknown): source is BufferType\n {\n return source === null\n || source instanceof Int8Array\n || source instanceof Uint8Array\n || source instanceof Uint8ClampedArray\n || source instanceof Int16Array\n || source instanceof Uint16Array\n || source instanceof Int32Array\n || source instanceof Uint32Array\n || source instanceof Float32Array;\n }\n}\n","import { ALPHA_MODES, FORMATS, MIPMAP_MODES, SCALE_MODES, TARGETS, TYPES, WRAP_MODES } from '@pixi/constants';\nimport { settings } from '@pixi/settings';\nimport { BaseTextureCache, EventEmitter, isPow2, TextureCache, uid } from '@pixi/utils';\nimport { autoDetectResource } from './resources/autoDetectResource';\nimport { BufferResource } from './resources/BufferResource';\nimport { Resource } from './resources/Resource';\n\nimport type { MSAA_QUALITY } from '@pixi/constants';\nimport type { ICanvas } from '@pixi/settings';\nimport type { GLTexture } from './GLTexture';\nimport type { IAutoDetectOptions } from './resources/autoDetectResource';\nimport type { BufferType, IBufferResourceOptions } from './resources/BufferResource';\n\nconst defaultBufferOptions = {\n scaleMode: SCALE_MODES.NEAREST,\n alphaMode: ALPHA_MODES.NPM,\n};\n\nexport type ImageSource = HTMLImageElement | HTMLVideoElement | ImageBitmap | ICanvas;\n\nexport interface IBaseTextureOptions\n{\n alphaMode?: ALPHA_MODES;\n mipmap?: MIPMAP_MODES;\n anisotropicLevel?: number;\n scaleMode?: SCALE_MODES;\n width?: number;\n height?: number;\n wrapMode?: WRAP_MODES;\n format?: FORMATS;\n type?: TYPES;\n target?: TARGETS;\n resolution?: number;\n multisample?: MSAA_QUALITY;\n resourceOptions?: RO;\n pixiIdPrefix?: string;\n}\n\nexport interface BaseTexture extends GlobalMixins.BaseTexture, EventEmitter {}\n\n/**\n * A Texture stores the information that represents an image.\n * All textures have a base texture, which contains information about the source.\n * Therefore you can have many textures all using a single BaseTexture\n * @memberof PIXI\n * @typeParam R - The BaseTexture's Resource type.\n * @typeParam RO - The options for constructing resource.\n */\nexport class BaseTexture extends EventEmitter\n{\n /**\n * The width of the base texture set when the image has loaded\n * @readonly\n */\n public width: number;\n\n /**\n * The height of the base texture set when the image has loaded\n * @readonly\n */\n public height: number;\n\n /**\n * The resolution / device pixel ratio of the texture\n * @readonly\n * @default PIXI.settings.RESOLUTION\n */\n public resolution: number;\n\n /**\n * How to treat premultiplied alpha, see {@link PIXI.ALPHA_MODES}.\n * @member {PIXI.ALPHA_MODES}\n * @default PIXI.ALPHA_MODES.UNPACK\n */\n public alphaMode: ALPHA_MODES;\n\n /**\n * Anisotropic filtering level of texture\n * @member {number}\n * @default 0\n */\n public anisotropicLevel: number;\n\n /**\n * The pixel format of the texture\n * @default PIXI.FORMATS.RGBA\n */\n public format: FORMATS;\n\n /**\n * The type of resource data\n * @default PIXI.TYPES.UNSIGNED_BYTE\n */\n public type: TYPES;\n\n /**\n * The target type\n * @default PIXI.TARGETS.TEXTURE_2D\n */\n public target: TARGETS;\n\n /**\n * Global unique identifier for this BaseTexture\n * @protected\n */\n public readonly uid: number;\n\n /**\n * Used by automatic texture Garbage Collection, stores last GC tick when it was bound\n * @protected\n */\n touched: number;\n\n /**\n * Whether or not the texture is a power of two, try to use power of two textures as much\n * as you can\n * @readonly\n * @default false\n */\n isPowerOfTwo: boolean;\n\n /**\n * The map of render context textures where this is bound\n * @private\n */\n _glTextures: { [key: number]: GLTexture };\n\n /**\n * Used by TextureSystem to only update texture to the GPU when needed.\n * Please call `update()` to increment it.\n * @readonly\n */\n dirtyId: number;\n\n /**\n * Used by TextureSystem to only update texture style when needed.\n * @protected\n */\n dirtyStyleId: number;\n\n /**\n * Currently default cache ID.\n * @member {string}\n */\n public cacheId: string;\n\n /**\n * Generally speaking means when resource is loaded.\n * @readonly\n * @member {boolean}\n */\n public valid: boolean;\n\n /**\n * The collection of alternative cache ids, since some BaseTextures\n * can have more than one ID, short name and longer full URL\n * @member {Array}\n * @readonly\n */\n public textureCacheIds: Array;\n\n /**\n * Flag if BaseTexture has been destroyed.\n * @member {boolean}\n * @readonly\n */\n public destroyed: boolean;\n\n /**\n * The resource used by this BaseTexture, there can only\n * be one resource per BaseTexture, but textures can share\n * resources.\n * @member {PIXI.Resource}\n * @readonly\n */\n public resource: R;\n\n /**\n * Number of the texture batch, used by multi-texture renderers\n * @member {number}\n */\n _batchEnabled: number;\n\n /**\n * Location inside texture batch, used by multi-texture renderers\n * @member {number}\n */\n _batchLocation: number;\n\n /**\n * Whether its a part of another texture, handled by ArrayResource or CubeResource\n * @member {PIXI.BaseTexture}\n */\n parentTextureArray: BaseTexture;\n\n private _mipmap: MIPMAP_MODES;\n private _scaleMode: SCALE_MODES;\n private _wrapMode: WRAP_MODES;\n\n /**\n * Default options used when creating BaseTexture objects.\n * @static\n * @memberof PIXI.BaseTexture\n * @type {PIXI.IBaseTextureOptions}\n */\n public static defaultOptions: IBaseTextureOptions = {\n /**\n * If mipmapping is enabled for texture.\n * @type {PIXI.MIPMAP_MODES}\n * @default PIXI.MIPMAP_MODES.POW2\n */\n mipmap: MIPMAP_MODES.POW2,\n /** Anisotropic filtering level of texture */\n anisotropicLevel: 0,\n /**\n * Default scale mode, linear, nearest.\n * @type {PIXI.SCALE_MODES}\n * @default PIXI.SCALE_MODES.LINEAR\n */\n scaleMode: SCALE_MODES.LINEAR,\n /**\n * Wrap mode for textures.\n * @type {PIXI.WRAP_MODES}\n * @default PIXI.WRAP_MODES.CLAMP\n */\n wrapMode: WRAP_MODES.CLAMP,\n /**\n * Pre multiply the image alpha\n * @type {PIXI.ALPHA_MODES}\n * @default PIXI.ALPHA_MODES.UNPACK\n */\n alphaMode: ALPHA_MODES.UNPACK,\n /**\n * GL texture target\n * @type {PIXI.TARGETS}\n * @default PIXI.TARGETS.TEXTURE_2D\n */\n target: TARGETS.TEXTURE_2D,\n /**\n * GL format type\n * @type {PIXI.FORMATS}\n * @default PIXI.FORMATS.RGBA\n */\n format: FORMATS.RGBA,\n /**\n * GL data type\n * @type {PIXI.TYPES}\n * @default PIXI.TYPES.UNSIGNED_BYTE\n */\n type: TYPES.UNSIGNED_BYTE,\n };\n\n /**\n * @param {PIXI.Resource|HTMLImageElement|HTMLVideoElement|ImageBitmap|ICanvas|string} [resource=null] -\n * The current resource to use, for things that aren't Resource objects, will be converted\n * into a Resource.\n * @param options - Collection of options, default options inherited from {@link PIXI.BaseTexture.defaultOptions}.\n * @param {PIXI.MIPMAP_MODES} [options.mipmap] - If mipmapping is enabled for texture\n * @param {number} [options.anisotropicLevel] - Anisotropic filtering level of texture\n * @param {PIXI.WRAP_MODES} [options.wrapMode] - Wrap mode for textures\n * @param {PIXI.SCALE_MODES} [options.scaleMode] - Default scale mode, linear, nearest\n * @param {PIXI.FORMATS} [options.format] - GL format type\n * @param {PIXI.TYPES} [options.type] - GL data type\n * @param {PIXI.TARGETS} [options.target] - GL texture target\n * @param {PIXI.ALPHA_MODES} [options.alphaMode] - Pre multiply the image alpha\n * @param {number} [options.width=0] - Width of the texture\n * @param {number} [options.height=0] - Height of the texture\n * @param {number} [options.resolution=PIXI.settings.RESOLUTION] - Resolution of the base texture\n * @param {object} [options.resourceOptions] - Optional resource options,\n * see {@link PIXI.autoDetectResource autoDetectResource}\n */\n constructor(resource: R | ImageSource | string | any = null, options: IBaseTextureOptions = null)\n {\n super();\n\n options = Object.assign({}, BaseTexture.defaultOptions, options);\n\n const {\n alphaMode, mipmap, anisotropicLevel, scaleMode, width, height,\n wrapMode, format, type, target, resolution, resourceOptions\n } = options;\n\n // Convert the resource to a Resource object\n if (resource && !(resource instanceof Resource))\n {\n resource = autoDetectResource(resource, resourceOptions);\n resource.internal = true;\n }\n\n this.resolution = resolution || settings.RESOLUTION;\n this.width = Math.round((width || 0) * this.resolution) / this.resolution;\n this.height = Math.round((height || 0) * this.resolution) / this.resolution;\n this._mipmap = mipmap;\n this.anisotropicLevel = anisotropicLevel;\n this._wrapMode = wrapMode;\n this._scaleMode = scaleMode;\n this.format = format;\n this.type = type;\n this.target = target;\n this.alphaMode = alphaMode;\n\n this.uid = uid();\n this.touched = 0;\n this.isPowerOfTwo = false;\n this._refreshPOT();\n\n this._glTextures = {};\n this.dirtyId = 0;\n this.dirtyStyleId = 0;\n this.cacheId = null;\n this.valid = width > 0 && height > 0;\n this.textureCacheIds = [];\n this.destroyed = false;\n this.resource = null;\n\n this._batchEnabled = 0;\n this._batchLocation = 0;\n this.parentTextureArray = null;\n\n /**\n * Fired when a not-immediately-available source finishes loading.\n * @protected\n * @event PIXI.BaseTexture#loaded\n * @param {PIXI.BaseTexture} baseTexture - Resource loaded.\n */\n\n /**\n * Fired when a not-immediately-available source fails to load.\n * @protected\n * @event PIXI.BaseTexture#error\n * @param {PIXI.BaseTexture} baseTexture - Resource errored.\n * @param {ErrorEvent} event - Load error event.\n */\n\n /**\n * Fired when BaseTexture is updated.\n * @protected\n * @event PIXI.BaseTexture#loaded\n * @param {PIXI.BaseTexture} baseTexture - Resource loaded.\n */\n\n /**\n * Fired when BaseTexture is updated.\n * @protected\n * @event PIXI.BaseTexture#update\n * @param {PIXI.BaseTexture} baseTexture - Instance of texture being updated.\n */\n\n /**\n * Fired when BaseTexture is destroyed.\n * @protected\n * @event PIXI.BaseTexture#dispose\n * @param {PIXI.BaseTexture} baseTexture - Instance of texture being destroyed.\n */\n\n // Set the resource\n this.setResource(resource);\n }\n\n /**\n * Pixel width of the source of this texture\n * @readonly\n */\n get realWidth(): number\n {\n return Math.round(this.width * this.resolution);\n }\n\n /**\n * Pixel height of the source of this texture\n * @readonly\n */\n get realHeight(): number\n {\n return Math.round(this.height * this.resolution);\n }\n\n /**\n * Mipmap mode of the texture, affects downscaled images\n * @default PIXI.MIPMAP_MODES.POW2\n */\n get mipmap(): MIPMAP_MODES\n {\n return this._mipmap;\n }\n set mipmap(value: MIPMAP_MODES)\n {\n if (this._mipmap !== value)\n {\n this._mipmap = value;\n this.dirtyStyleId++;\n }\n }\n\n /**\n * The scale mode to apply when scaling this texture\n * @default PIXI.SCALE_MODES.LINEAR\n */\n get scaleMode(): SCALE_MODES\n {\n return this._scaleMode;\n }\n set scaleMode(value: SCALE_MODES)\n {\n if (this._scaleMode !== value)\n {\n this._scaleMode = value;\n this.dirtyStyleId++;\n }\n }\n\n /**\n * How the texture wraps\n * @default PIXI.WRAP_MODES.CLAMP\n */\n get wrapMode(): WRAP_MODES\n {\n return this._wrapMode;\n }\n set wrapMode(value: WRAP_MODES)\n {\n if (this._wrapMode !== value)\n {\n this._wrapMode = value;\n this.dirtyStyleId++;\n }\n }\n\n /**\n * Changes style options of BaseTexture\n * @param scaleMode - Pixi scalemode\n * @param mipmap - enable mipmaps\n * @returns - this\n */\n setStyle(scaleMode?: SCALE_MODES, mipmap?: MIPMAP_MODES): this\n {\n let dirty;\n\n if (scaleMode !== undefined && scaleMode !== this.scaleMode)\n {\n this.scaleMode = scaleMode;\n dirty = true;\n }\n\n if (mipmap !== undefined && mipmap !== this.mipmap)\n {\n this.mipmap = mipmap;\n dirty = true;\n }\n\n if (dirty)\n {\n this.dirtyStyleId++;\n }\n\n return this;\n }\n\n /**\n * Changes w/h/resolution. Texture becomes valid if width and height are greater than zero.\n * @param desiredWidth - Desired visual width\n * @param desiredHeight - Desired visual height\n * @param resolution - Optionally set resolution\n * @returns - this\n */\n setSize(desiredWidth: number, desiredHeight: number, resolution?: number): this\n {\n resolution = resolution || this.resolution;\n\n return this.setRealSize(desiredWidth * resolution, desiredHeight * resolution, resolution);\n }\n\n /**\n * Sets real size of baseTexture, preserves current resolution.\n * @param realWidth - Full rendered width\n * @param realHeight - Full rendered height\n * @param resolution - Optionally set resolution\n * @returns - this\n */\n setRealSize(realWidth: number, realHeight: number, resolution?: number): this\n {\n this.resolution = resolution || this.resolution;\n this.width = Math.round(realWidth) / this.resolution;\n this.height = Math.round(realHeight) / this.resolution;\n this._refreshPOT();\n this.update();\n\n return this;\n }\n\n /**\n * Refresh check for isPowerOfTwo texture based on size\n * @private\n */\n protected _refreshPOT(): void\n {\n this.isPowerOfTwo = isPow2(this.realWidth) && isPow2(this.realHeight);\n }\n\n /**\n * Changes resolution\n * @param resolution - res\n * @returns - this\n */\n setResolution(resolution: number): this\n {\n const oldResolution = this.resolution;\n\n if (oldResolution === resolution)\n {\n return this;\n }\n\n this.resolution = resolution;\n\n if (this.valid)\n {\n this.width = Math.round(this.width * oldResolution) / resolution;\n this.height = Math.round(this.height * oldResolution) / resolution;\n this.emit('update', this);\n }\n\n this._refreshPOT();\n\n return this;\n }\n\n /**\n * Sets the resource if it wasn't set. Throws error if resource already present\n * @param resource - that is managing this BaseTexture\n * @returns - this\n */\n setResource(resource: R): this\n {\n if (this.resource === resource)\n {\n return this;\n }\n\n if (this.resource)\n {\n throw new Error('Resource can be set only once');\n }\n\n resource.bind(this);\n\n this.resource = resource;\n\n return this;\n }\n\n /** Invalidates the object. Texture becomes valid if width and height are greater than zero. */\n update(): void\n {\n if (!this.valid)\n {\n if (this.width > 0 && this.height > 0)\n {\n this.valid = true;\n this.emit('loaded', this);\n this.emit('update', this);\n }\n }\n else\n {\n this.dirtyId++;\n this.dirtyStyleId++;\n this.emit('update', this);\n }\n }\n\n /**\n * Handle errors with resources.\n * @private\n * @param event - Error event emitted.\n */\n onError(event: ErrorEvent): void\n {\n this.emit('error', this, event);\n }\n\n /**\n * Destroys this base texture.\n * The method stops if resource doesn't want this texture to be destroyed.\n * Removes texture from all caches.\n * @fires PIXI.BaseTexture#destroyed\n */\n destroy(): void\n {\n // remove and destroy the resource\n if (this.resource)\n {\n this.resource.unbind(this);\n // only destroy resourced created internally\n if (this.resource.internal)\n {\n this.resource.destroy();\n }\n this.resource = null;\n }\n\n if (this.cacheId)\n {\n delete BaseTextureCache[this.cacheId];\n delete TextureCache[this.cacheId];\n\n this.cacheId = null;\n }\n\n this.valid = false;\n\n // finally let the WebGL renderer know..\n this.dispose();\n\n BaseTexture.removeFromCache(this);\n this.textureCacheIds = null;\n\n this.destroyed = true;\n this.emit('destroyed', this);\n this.removeAllListeners();\n }\n\n /**\n * Frees the texture from WebGL memory without destroying this texture object.\n * This means you can still use the texture later which will upload it to GPU\n * memory again.\n * @fires PIXI.BaseTexture#dispose\n */\n dispose(): void\n {\n this.emit('dispose', this);\n }\n\n /** Utility function for BaseTexture|Texture cast. */\n castToBaseTexture(): BaseTexture\n {\n return this;\n }\n\n /**\n * Helper function that creates a base texture based on the source you provide.\n * The source can be - image url, image element, canvas element. If the\n * source is an image url or an image element and not in the base texture\n * cache, it will be created and loaded.\n * @static\n * @param {HTMLImageElement|HTMLVideoElement|ImageBitmap|PIXI.ICanvas|string|string[]} source - The\n * source to create base texture from.\n * @param options - See {@link PIXI.BaseTexture}'s constructor for options.\n * @param {string} [options.pixiIdPrefix=pixiid] - If a source has no id, this is the prefix of the generated id\n * @param {boolean} [strict] - Enforce strict-mode, see {@link PIXI.settings.STRICT_TEXTURE_CACHE}.\n * @returns {PIXI.BaseTexture} The new base texture.\n */\n static from(source: ImageSource | string | string[],\n options?: IBaseTextureOptions, strict = settings.STRICT_TEXTURE_CACHE): BaseTexture\n {\n const isFrame = typeof source === 'string';\n let cacheId = null;\n\n if (isFrame)\n {\n cacheId = source;\n }\n else\n {\n if (!(source as any)._pixiId)\n {\n const prefix = options?.pixiIdPrefix || 'pixiid';\n\n (source as any)._pixiId = `${prefix}_${uid()}`;\n }\n\n cacheId = (source as any)._pixiId;\n }\n\n let baseTexture = BaseTextureCache[cacheId] as BaseTexture;\n\n // Strict-mode rejects invalid cacheIds\n if (isFrame && strict && !baseTexture)\n {\n throw new Error(`The cacheId \"${cacheId}\" does not exist in BaseTextureCache.`);\n }\n\n if (!baseTexture)\n {\n baseTexture = new BaseTexture(source, options);\n baseTexture.cacheId = cacheId;\n BaseTexture.addToCache(baseTexture, cacheId);\n }\n\n return baseTexture;\n }\n\n /**\n * Create a new Texture with a BufferResource from a typed array.\n * @param buffer - The optional array to use. If no data is provided, a new Float32Array is created.\n * @param width - Width of the resource\n * @param height - Height of the resource\n * @param options - See {@link PIXI.BaseTexture}'s constructor for options.\n * Default properties are different from the constructor's defaults.\n * @param {PIXI.FORMATS} [options.format] - The format is not given, the type is inferred from the\n * type of the buffer: `RGBA` if Float32Array, Int8Array, Uint8Array, or Uint8ClampedArray,\n * otherwise `RGBA_INTEGER`.\n * @param {PIXI.TYPES} [options.type] - The type is not given, the type is inferred from the\n * type of the buffer. Maps Float32Array to `FLOAT`, Int32Array to `INT`, Uint32Array to\n * `UNSIGNED_INT`, Int16Array to `SHORT`, Uint16Array to `UNSIGNED_SHORT`, Int8Array to `BYTE`,\n * Uint8Array/Uint8ClampedArray to `UNSIGNED_BYTE`.\n * @param {PIXI.ALPHA_MODES} [options.alphaMode=PIXI.ALPHA_MODES.NPM]\n * @param {PIXI.SCALE_MODES} [options.scaleMode=PIXI.SCALE_MODES.NEAREST]\n * @returns - The resulting new BaseTexture\n */\n static fromBuffer(buffer: BufferType, width: number, height: number,\n options?: IBaseTextureOptions): BaseTexture\n {\n buffer = buffer || new Float32Array(width * height * 4);\n\n const resource = new BufferResource(buffer, { width, height, ...options?.resourceOptions });\n let format: FORMATS;\n let type: TYPES;\n\n if (buffer instanceof Float32Array)\n {\n format = FORMATS.RGBA;\n type = TYPES.FLOAT;\n }\n else if (buffer instanceof Int32Array)\n {\n format = FORMATS.RGBA_INTEGER;\n type = TYPES.INT;\n }\n else if (buffer instanceof Uint32Array)\n {\n format = FORMATS.RGBA_INTEGER;\n type = TYPES.UNSIGNED_INT;\n }\n else if (buffer instanceof Int16Array)\n {\n format = FORMATS.RGBA_INTEGER;\n type = TYPES.SHORT;\n }\n else if (buffer instanceof Uint16Array)\n {\n format = FORMATS.RGBA_INTEGER;\n type = TYPES.UNSIGNED_SHORT;\n }\n else if (buffer instanceof Int8Array)\n {\n format = FORMATS.RGBA;\n type = TYPES.BYTE;\n }\n else\n {\n format = FORMATS.RGBA;\n type = TYPES.UNSIGNED_BYTE;\n }\n\n resource.internal = true;\n\n return new BaseTexture(resource, Object.assign({}, defaultBufferOptions, { type, format }, options));\n }\n\n /**\n * Adds a BaseTexture to the global BaseTextureCache. This cache is shared across the whole PIXI object.\n * @param {PIXI.BaseTexture} baseTexture - The BaseTexture to add to the cache.\n * @param {string} id - The id that the BaseTexture will be stored against.\n */\n static addToCache(baseTexture: BaseTexture, id: string): void\n {\n if (id)\n {\n if (!baseTexture.textureCacheIds.includes(id))\n {\n baseTexture.textureCacheIds.push(id);\n }\n\n // only throw a warning if there is a different base texture mapped to this id.\n if (BaseTextureCache[id] && BaseTextureCache[id] !== baseTexture)\n {\n // eslint-disable-next-line no-console\n console.warn(`BaseTexture added to the cache with an id [${id}] that already had an entry`);\n }\n\n BaseTextureCache[id] = baseTexture;\n }\n }\n\n /**\n * Remove a BaseTexture from the global BaseTextureCache.\n * @param {string|PIXI.BaseTexture} baseTexture - id of a BaseTexture to be removed, or a BaseTexture instance itself.\n * @returns {PIXI.BaseTexture|null} The BaseTexture that was removed.\n */\n static removeFromCache(baseTexture: string | BaseTexture): BaseTexture | null\n {\n if (typeof baseTexture === 'string')\n {\n const baseTextureFromCache = BaseTextureCache[baseTexture];\n\n if (baseTextureFromCache)\n {\n const index = baseTextureFromCache.textureCacheIds.indexOf(baseTexture);\n\n if (index > -1)\n {\n baseTextureFromCache.textureCacheIds.splice(index, 1);\n }\n\n delete BaseTextureCache[baseTexture];\n\n return baseTextureFromCache;\n }\n }\n else if (baseTexture?.textureCacheIds)\n {\n for (let i = 0; i < baseTexture.textureCacheIds.length; ++i)\n {\n delete BaseTextureCache[baseTexture.textureCacheIds[i]];\n }\n\n baseTexture.textureCacheIds.length = 0;\n\n return baseTexture;\n }\n\n return null;\n }\n\n /** Global number of the texture batch, used by multi-texture renderers. */\n static _globalBatch = 0;\n}\n","import { DRAW_MODES } from '@pixi/constants';\n\nimport type { BLEND_MODES } from '@pixi/constants';\nimport type { BatchTextureArray } from './BatchTextureArray';\n\n/**\n * Used by the batcher to draw batches.\n * Each one of these contains all information required to draw a bound geometry.\n * @memberof PIXI\n */\nexport class BatchDrawCall\n{\n texArray: BatchTextureArray;\n type: DRAW_MODES;\n blend: BLEND_MODES;\n start: number;\n size: number;\n\n /** Data for uniforms or custom webgl state. */\n data: any;\n\n constructor()\n {\n this.texArray = null;\n this.blend = 0;\n this.type = DRAW_MODES.TRIANGLES;\n\n this.start = 0;\n this.size = 0;\n\n this.data = null;\n }\n}\n","import { BUFFER_TYPE } from '@pixi/constants';\nimport { Runner } from '@pixi/runner';\n\nimport type { GLBuffer } from './GLBuffer';\n\nlet UID = 0;\n/* eslint-disable max-len */\n\n/**\n * Marks places in PixiJS where you can pass Float32Array, UInt32Array, any typed arrays, and ArrayBuffer.\n *\n * Same as ArrayBuffer in typescript lib, defined here just for documentation.\n * @memberof PIXI\n */\nexport interface IArrayBuffer extends ArrayBuffer // eslint-disable-line @typescript-eslint/no-empty-interface\n{\n}\n\n/**\n * PixiJS classes use this type instead of ArrayBuffer and typed arrays\n * to support expressions like `geometry.buffers[0].data[0] = position.x`.\n *\n * Gives access to indexing and `length` field.\n * - @popelyshev: If data is actually ArrayBuffer and throws Exception on indexing - its user problem :)\n * @memberof PIXI\n */\nexport interface ITypedArray extends IArrayBuffer\n{\n readonly length: number;\n [index: number]: number;\n readonly BYTES_PER_ELEMENT: number;\n}\n\n/**\n * A wrapper for data so that it can be used and uploaded by WebGL\n * @memberof PIXI\n */\nexport class Buffer\n{\n /**\n * The data in the buffer, as a typed array\n * @type {PIXI.IArrayBuffer}\n */\n public data: ITypedArray;\n\n /**\n * The type of buffer this is, one of:\n * + ELEMENT_ARRAY_BUFFER - used as an index buffer\n * + ARRAY_BUFFER - used as an attribute buffer\n * + UNIFORM_BUFFER - used as a uniform buffer (if available)\n */\n public type: BUFFER_TYPE;\n\n public static: boolean;\n public id: number;\n disposeRunner: Runner;\n\n /**\n * A map of renderer IDs to webgl buffer\n * @private\n * @type {Record}\n */\n _glBuffers: {[key: number]: GLBuffer};\n _updateID: number;\n\n /**\n * @param {PIXI.IArrayBuffer} data - the data to store in the buffer.\n * @param _static - `true` for static buffer\n * @param index - `true` for index buffer\n */\n constructor(data?: IArrayBuffer, _static = true, index = false)\n {\n this.data = (data || new Float32Array(1)) as ITypedArray;\n\n this._glBuffers = {};\n this._updateID = 0;\n\n this.index = index;\n this.static = _static;\n this.id = UID++;\n\n this.disposeRunner = new Runner('disposeBuffer');\n }\n\n // TODO could explore flagging only a partial upload?\n /**\n * Flags this buffer as requiring an upload to the GPU.\n * @param {PIXI.IArrayBuffer|number[]} [data] - the data to update in the buffer.\n */\n update(data?: IArrayBuffer | Array): void\n {\n if (data instanceof Array)\n {\n data = new Float32Array(data);\n }\n this.data = (data as ITypedArray) || this.data;\n this._updateID++;\n }\n\n /** Disposes WebGL resources that are connected to this geometry. */\n dispose(): void\n {\n this.disposeRunner.emit(this, false);\n }\n\n /** Destroys the buffer. */\n destroy(): void\n {\n this.dispose();\n\n this.data = null;\n }\n\n /**\n * Flags whether this is an index buffer.\n *\n * Index buffers are of type `ELEMENT_ARRAY_BUFFER`. Note that setting this property to false will make\n * the buffer of type `ARRAY_BUFFER`.\n *\n * For backwards compatibility.\n */\n set index(value: boolean)\n {\n this.type = value ? BUFFER_TYPE.ELEMENT_ARRAY_BUFFER : BUFFER_TYPE.ARRAY_BUFFER;\n }\n\n get index(): boolean\n {\n return this.type === BUFFER_TYPE.ELEMENT_ARRAY_BUFFER;\n }\n\n /**\n * Helper function that creates a buffer based on an array or TypedArray\n * @param {ArrayBufferView | number[]} data - the TypedArray that the buffer will store. If this is a regular Array it will be converted to a Float32Array.\n * @returns - A new Buffer based on the data provided.\n */\n static from(data: IArrayBuffer | number[]): Buffer\n {\n if (data instanceof Array)\n {\n data = new Float32Array(data);\n }\n\n return new Buffer(data);\n }\n}\n","import { TYPES } from '@pixi/constants';\n\n/* eslint-disable max-len */\n\n/**\n * Holds the information for a single attribute structure required to render geometry.\n *\n * This does not contain the actual data, but instead has a buffer id that maps to a {@link PIXI.Buffer}\n * This can include anything from positions, uvs, normals, colors etc.\n * @memberof PIXI\n */\nexport class Attribute\n{\n public buffer: number;\n public size: number;\n public normalized: boolean;\n public type: TYPES;\n public stride: number;\n public start: number;\n public instance: boolean;\n public divisor: number;\n\n /**\n * @param buffer - the id of the buffer that this attribute will look for\n * @param size - the size of the attribute. If you have 2 floats per vertex (eg position x and y) this would be 2.\n * @param normalized - should the data be normalized.\n * @param {PIXI.TYPES} [type=PIXI.TYPES.FLOAT] - what type of number is the attribute. Check {@link PIXI.TYPES} to see the ones available\n * @param [stride=0] - How far apart, in bytes, the start of each value is. (used for interleaving data)\n * @param [start=0] - How far into the array to start reading values (used for interleaving data)\n * @param [instance=false] - Whether the geometry is instanced.\n * @param [divisor=1] - Divisor to use when doing instanced rendering\n */\n constructor(buffer: number, size = 0, normalized = false, type = TYPES.FLOAT, stride?: number, start?: number, instance?: boolean, divisor = 1)\n {\n this.buffer = buffer;\n this.size = size;\n this.normalized = normalized;\n this.type = type;\n this.stride = stride;\n this.start = start;\n this.instance = instance;\n this.divisor = divisor;\n }\n\n /** Destroys the Attribute. */\n destroy(): void\n {\n this.buffer = null;\n }\n\n /**\n * Helper function that creates an Attribute based on the information provided\n * @param buffer - the id of the buffer that this attribute will look for\n * @param [size=0] - the size of the attribute. If you have 2 floats per vertex (eg position x and y) this would be 2\n * @param [normalized=false] - should the data be normalized.\n * @param [type=PIXI.TYPES.FLOAT] - what type of number is the attribute. Check {@link PIXI.TYPES} to see the ones available\n * @param [stride=0] - How far apart, in bytes, the start of each value is. (used for interleaving data)\n * @returns - A new {@link PIXI.Attribute} based on the information provided\n */\n static from(buffer: number, size?: number, normalized?: boolean, type?: TYPES, stride?: number): Attribute\n {\n return new Attribute(buffer, size, normalized, type, stride);\n }\n}\n","import { getBufferType } from '@pixi/utils';\n\nimport type { Dict } from '@pixi/utils';\nimport type { ITypedArray } from '../Buffer';\n\n/* eslint-disable object-shorthand */\nconst map: Dict = {\n Float32Array: Float32Array,\n Uint32Array: Uint32Array,\n Int32Array: Int32Array,\n Uint8Array: Uint8Array,\n};\n\nexport function interleaveTypedArrays(arrays: Array, sizes: Array): Float32Array\n{\n let outSize = 0;\n let stride = 0;\n const views: Dict = {};\n\n for (let i = 0; i < arrays.length; i++)\n {\n stride += sizes[i];\n outSize += arrays[i].length;\n }\n\n const buffer = new ArrayBuffer(outSize * 4);\n\n let out = null;\n let littleOffset = 0;\n\n for (let i = 0; i < arrays.length; i++)\n {\n const size = sizes[i];\n const array = arrays[i];\n\n const type = getBufferType(array);\n\n if (!views[type])\n {\n views[type] = new map[type](buffer);\n }\n\n out = views[type];\n\n for (let j = 0; j < array.length; j++)\n {\n const indexStart = ((j / size | 0) * stride) + littleOffset;\n const index = j % size;\n\n out[indexStart + index] = array[j];\n }\n\n littleOffset += size;\n }\n\n return new Float32Array(buffer);\n}\n","import { BUFFER_TYPE } from '@pixi/constants';\nimport { Runner } from '@pixi/runner';\nimport { getBufferType } from '@pixi/utils';\nimport { Attribute } from './Attribute';\nimport { Buffer } from './Buffer';\nimport { interleaveTypedArrays } from './utils/interleaveTypedArrays';\n\nimport type { TYPES } from '@pixi/constants';\nimport type { Dict } from '@pixi/utils';\nimport type { IArrayBuffer } from './Buffer';\n\nconst byteSizeMap: {[key: number]: number} = { 5126: 4, 5123: 2, 5121: 1 };\nlet UID = 0;\n\n/* eslint-disable object-shorthand */\nconst map: Dict = {\n Float32Array: Float32Array,\n Uint32Array: Uint32Array,\n Int32Array: Int32Array,\n Uint8Array: Uint8Array,\n Uint16Array: Uint16Array,\n};\n\n/* eslint-disable max-len */\n\n/**\n * The Geometry represents a model. It consists of two components:\n * - GeometryStyle - The structure of the model such as the attributes layout\n * - GeometryData - the data of the model - this consists of buffers.\n * This can include anything from positions, uvs, normals, colors etc.\n *\n * Geometry can be defined without passing in a style or data if required (thats how I prefer!)\n * @example\n * import { Geometry } from 'pixi.js';\n *\n * const geometry = new Geometry();\n *\n * geometry.addAttribute('positions', [0, 0, 100, 0, 100, 100, 0, 100], 2);\n * geometry.addAttribute('uvs', [0, 0, 1, 0, 1, 1, 0, 1], 2);\n * geometry.addIndex([0, 1, 2, 1, 3, 2]);\n * @memberof PIXI\n */\nexport class Geometry\n{\n public buffers: Array;\n public indexBuffer: Buffer;\n public attributes: {[key: string]: Attribute};\n public id: number;\n\n /** Whether the geometry is instanced. */\n public instanced: boolean;\n\n /**\n * Number of instances in this geometry, pass it to `GeometrySystem.draw()`.\n * @default 1\n */\n public instanceCount: number;\n\n /**\n * A map of renderer IDs to webgl VAOs\n * @type {object}\n */\n glVertexArrayObjects: {[key: number]: {[key: string]: WebGLVertexArrayObject}};\n disposeRunner: Runner;\n\n /** Count of existing (not destroyed) meshes that reference this geometry. */\n refCount: number;\n\n /**\n * @param buffers - An array of buffers. optional.\n * @param attributes - Of the geometry, optional structure of the attributes layout\n */\n constructor(buffers: Array = [], attributes: {[key: string]: Attribute} = {})\n {\n this.buffers = buffers;\n\n this.indexBuffer = null;\n\n this.attributes = attributes;\n\n this.glVertexArrayObjects = {};\n\n this.id = UID++;\n\n this.instanced = false;\n this.instanceCount = 1;\n\n this.disposeRunner = new Runner('disposeGeometry');\n this.refCount = 0;\n }\n\n /**\n *\n * Adds an attribute to the geometry\n * Note: `stride` and `start` should be `undefined` if you dont know them, not 0!\n * @param id - the name of the attribute (matching up to a shader)\n * @param {PIXI.Buffer|number[]} buffer - the buffer that holds the data of the attribute . You can also provide an Array and a buffer will be created from it.\n * @param size - the size of the attribute. If you have 2 floats per vertex (eg position x and y) this would be 2\n * @param normalized - should the data be normalized.\n * @param [type=PIXI.TYPES.FLOAT] - what type of number is the attribute. Check {@link PIXI.TYPES} to see the ones available\n * @param [stride=0] - How far apart, in bytes, the start of each value is. (used for interleaving data)\n * @param [start=0] - How far into the array to start reading values (used for interleaving data)\n * @param instance - Instancing flag\n * @returns - Returns self, useful for chaining.\n */\n addAttribute(id: string, buffer: Buffer | Float32Array | Uint32Array | Array, size = 0, normalized = false,\n type?: TYPES, stride?: number, start?: number, instance = false): this\n {\n if (!buffer)\n {\n throw new Error('You must pass a buffer when creating an attribute');\n }\n\n // check if this is a buffer!\n if (!(buffer instanceof Buffer))\n {\n // its an array!\n if (buffer instanceof Array)\n {\n buffer = new Float32Array(buffer);\n }\n\n buffer = new Buffer(buffer);\n }\n\n const ids = id.split('|');\n\n if (ids.length > 1)\n {\n for (let i = 0; i < ids.length; i++)\n {\n this.addAttribute(ids[i], buffer, size, normalized, type);\n }\n\n return this;\n }\n\n let bufferIndex = this.buffers.indexOf(buffer);\n\n if (bufferIndex === -1)\n {\n this.buffers.push(buffer);\n bufferIndex = this.buffers.length - 1;\n }\n\n this.attributes[id] = new Attribute(bufferIndex, size, normalized, type, stride, start, instance);\n\n // assuming that if there is instanced data then this will be drawn with instancing!\n this.instanced = this.instanced || instance;\n\n return this;\n }\n\n /**\n * Returns the requested attribute.\n * @param id - The name of the attribute required\n * @returns - The attribute requested.\n */\n getAttribute(id: string): Attribute\n {\n return this.attributes[id];\n }\n\n /**\n * Returns the requested buffer.\n * @param id - The name of the buffer required.\n * @returns - The buffer requested.\n */\n getBuffer(id: string): Buffer\n {\n return this.buffers[this.getAttribute(id).buffer];\n }\n\n /**\n *\n * Adds an index buffer to the geometry\n * The index buffer contains integers, three for each triangle in the geometry, which reference the various attribute buffers (position, colour, UV coordinates, other UV coordinates, normal, …). There is only ONE index buffer.\n * @param {PIXI.Buffer|number[]} [buffer] - The buffer that holds the data of the index buffer. You can also provide an Array and a buffer will be created from it.\n * @returns - Returns self, useful for chaining.\n */\n addIndex(buffer?: Buffer | IArrayBuffer | number[]): Geometry\n {\n if (!(buffer instanceof Buffer))\n {\n // its an array!\n if (buffer instanceof Array)\n {\n buffer = new Uint16Array(buffer);\n }\n\n buffer = new Buffer(buffer);\n }\n\n buffer.type = BUFFER_TYPE.ELEMENT_ARRAY_BUFFER;\n\n this.indexBuffer = buffer;\n\n if (!this.buffers.includes(buffer))\n {\n this.buffers.push(buffer);\n }\n\n return this;\n }\n\n /**\n * Returns the index buffer\n * @returns - The index buffer.\n */\n getIndex(): Buffer\n {\n return this.indexBuffer;\n }\n\n /**\n * This function modifies the structure so that all current attributes become interleaved into a single buffer\n * This can be useful if your model remains static as it offers a little performance boost\n * @returns - Returns self, useful for chaining.\n */\n interleave(): Geometry\n {\n // a simple check to see if buffers are already interleaved..\n if (this.buffers.length === 1 || (this.buffers.length === 2 && this.indexBuffer)) return this;\n\n // assume already that no buffers are interleaved\n const arrays = [];\n const sizes = [];\n const interleavedBuffer = new Buffer();\n let i;\n\n for (i in this.attributes)\n {\n const attribute = this.attributes[i];\n\n const buffer = this.buffers[attribute.buffer];\n\n arrays.push(buffer.data);\n\n sizes.push((attribute.size * byteSizeMap[attribute.type]) / 4);\n\n attribute.buffer = 0;\n }\n\n interleavedBuffer.data = interleaveTypedArrays(arrays, sizes);\n\n for (i = 0; i < this.buffers.length; i++)\n {\n if (this.buffers[i] !== this.indexBuffer)\n {\n this.buffers[i].destroy();\n }\n }\n\n this.buffers = [interleavedBuffer];\n\n if (this.indexBuffer)\n {\n this.buffers.push(this.indexBuffer);\n }\n\n return this;\n }\n\n /** Get the size of the geometries, in vertices. */\n getSize(): number\n {\n for (const i in this.attributes)\n {\n const attribute = this.attributes[i];\n const buffer = this.buffers[attribute.buffer];\n\n return (buffer.data as any).length / ((attribute.stride / 4) || attribute.size);\n }\n\n return 0;\n }\n\n /** Disposes WebGL resources that are connected to this geometry. */\n dispose(): void\n {\n this.disposeRunner.emit(this, false);\n }\n\n /** Destroys the geometry. */\n destroy(): void\n {\n this.dispose();\n\n this.buffers = null;\n this.indexBuffer = null;\n this.attributes = null;\n }\n\n /**\n * Returns a clone of the geometry.\n * @returns - A new clone of this geometry.\n */\n clone(): Geometry\n {\n const geometry = new Geometry();\n\n for (let i = 0; i < this.buffers.length; i++)\n {\n geometry.buffers[i] = new Buffer(this.buffers[i].data.slice(0));\n }\n\n for (const i in this.attributes)\n {\n const attrib = this.attributes[i];\n\n geometry.attributes[i] = new Attribute(\n attrib.buffer,\n attrib.size,\n attrib.normalized,\n attrib.type,\n attrib.stride,\n attrib.start,\n attrib.instance\n );\n }\n\n if (this.indexBuffer)\n {\n geometry.indexBuffer = geometry.buffers[this.buffers.indexOf(this.indexBuffer)];\n geometry.indexBuffer.type = BUFFER_TYPE.ELEMENT_ARRAY_BUFFER;\n }\n\n return geometry;\n }\n\n /**\n * Merges an array of geometries into a new single one.\n *\n * Geometry attribute styles must match for this operation to work.\n * @param geometries - array of geometries to merge\n * @returns - Shiny new geometry!\n */\n static merge(geometries: Array): Geometry\n {\n // todo add a geometry check!\n // also a size check.. cant be too big!]\n\n const geometryOut = new Geometry();\n\n const arrays = [];\n const sizes: Array = [];\n const offsets = [];\n\n let geometry;\n\n // pass one.. get sizes..\n for (let i = 0; i < geometries.length; i++)\n {\n geometry = geometries[i];\n\n for (let j = 0; j < geometry.buffers.length; j++)\n {\n sizes[j] = sizes[j] || 0;\n sizes[j] += geometry.buffers[j].data.length;\n offsets[j] = 0;\n }\n }\n\n // build the correct size arrays..\n for (let i = 0; i < geometry.buffers.length; i++)\n {\n // TODO types!\n arrays[i] = new map[getBufferType(geometry.buffers[i].data)](sizes[i]);\n geometryOut.buffers[i] = new Buffer(arrays[i]);\n }\n\n // pass to set data..\n for (let i = 0; i < geometries.length; i++)\n {\n geometry = geometries[i];\n\n for (let j = 0; j < geometry.buffers.length; j++)\n {\n arrays[j].set(geometry.buffers[j].data, offsets[j]);\n offsets[j] += geometry.buffers[j].data.length;\n }\n }\n\n geometryOut.attributes = geometry.attributes;\n\n if (geometry.indexBuffer)\n {\n geometryOut.indexBuffer = geometryOut.buffers[geometry.buffers.indexOf(geometry.indexBuffer)];\n geometryOut.indexBuffer.type = BUFFER_TYPE.ELEMENT_ARRAY_BUFFER;\n\n let offset = 0;\n let stride = 0;\n let offset2 = 0;\n let bufferIndexToCount = 0;\n\n // get a buffer\n for (let i = 0; i < geometry.buffers.length; i++)\n {\n if (geometry.buffers[i] !== geometry.indexBuffer)\n {\n bufferIndexToCount = i;\n break;\n }\n }\n\n // figure out the stride of one buffer..\n for (const i in geometry.attributes)\n {\n const attribute = geometry.attributes[i];\n\n if ((attribute.buffer | 0) === bufferIndexToCount)\n {\n stride += ((attribute.size * byteSizeMap[attribute.type]) / 4);\n }\n }\n\n // time to off set all indexes..\n for (let i = 0; i < geometries.length; i++)\n {\n const indexBufferData = geometries[i].indexBuffer.data;\n\n for (let j = 0; j < indexBufferData.length; j++)\n {\n geometryOut.indexBuffer.data[j + offset2] += offset;\n }\n\n offset += geometries[i].buffers[bufferIndexToCount].data.length / (stride);\n offset2 += indexBufferData.length;\n }\n }\n\n return geometryOut;\n }\n}\n","import { TYPES } from '@pixi/constants';\nimport { Buffer } from '../geometry/Buffer';\nimport { Geometry } from '../geometry/Geometry';\n\n/**\n * Geometry used to batch standard PIXI content (e.g. Mesh, Sprite, Graphics objects).\n * @memberof PIXI\n */\nexport class BatchGeometry extends Geometry\n{\n /**\n * Buffer used for position, color, texture IDs\n * @protected\n */\n _buffer: Buffer;\n\n /**\n * Index buffer data\n * @protected\n */\n _indexBuffer: Buffer;\n\n /**\n * @param {boolean} [_static=false] - Optimization flag, where `false`\n * is updated every frame, `true` doesn't change frame-to-frame.\n */\n constructor(_static = false)\n {\n super();\n\n this._buffer = new Buffer(null, _static, false);\n\n this._indexBuffer = new Buffer(null, _static, true);\n\n this.addAttribute('aVertexPosition', this._buffer, 2, false, TYPES.FLOAT)\n .addAttribute('aTextureCoord', this._buffer, 2, false, TYPES.FLOAT)\n .addAttribute('aColor', this._buffer, 4, true, TYPES.UNSIGNED_BYTE)\n .addAttribute('aTextureId', this._buffer, 1, true, TYPES.FLOAT)\n .addIndex(this._indexBuffer);\n }\n}\n","/**\n * Two Pi.\n * @static\n * @member {number}\n * @memberof PIXI\n */\nexport const PI_2 = Math.PI * 2;\n\n/**\n * Conversion factor for converting radians to degrees.\n * @static\n * @member {number} RAD_TO_DEG\n * @memberof PIXI\n */\nexport const RAD_TO_DEG = 180 / Math.PI;\n\n/**\n * Conversion factor for converting degrees to radians.\n * @static\n * @member {number}\n * @memberof PIXI\n */\nexport const DEG_TO_RAD = Math.PI / 180;\n\n/**\n * Constants that identify shapes, mainly to prevent `instanceof` calls.\n * @static\n * @memberof PIXI\n * @enum {number}\n */\nexport enum SHAPES\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * @property {number} RECT Rectangle\n * @default 0\n */\n POLY = 0,\n /**\n * @property {number} POLY Polygon\n * @default 1\n */\n RECT = 1,\n /**\n * @property {number} CIRC Circle\n * @default 2\n */\n CIRC = 2,\n /**\n * @property {number} ELIP Ellipse\n * @default 3\n */\n ELIP = 3,\n /**\n * @property {number} RREC Rounded Rectangle\n * @default 4\n */\n RREC = 4,\n}\n","import type { IPoint } from './IPoint';\nimport type { IPointData } from './IPointData';\n\nexport interface Point extends GlobalMixins.Point, IPoint {}\n\n/**\n * The Point object represents a location in a two-dimensional coordinate system, where `x` represents\n * the position on the horizontal axis and `y` represents the position on the vertical axis\n * @class\n * @memberof PIXI\n * @implements {IPoint}\n */\nexport class Point implements IPoint\n{\n /** Position of the point on the x axis */\n public x = 0;\n /** Position of the point on the y axis */\n public y = 0;\n\n /**\n * Creates a new `Point`\n * @param {number} [x=0] - position of the point on the x axis\n * @param {number} [y=0] - position of the point on the y axis\n */\n constructor(x = 0, y = 0)\n {\n this.x = x;\n this.y = y;\n }\n\n /**\n * Creates a clone of this point\n * @returns A clone of this point\n */\n clone(): Point\n {\n return new Point(this.x, this.y);\n }\n\n /**\n * Copies `x` and `y` from the given point into this point\n * @param p - The point to copy from\n * @returns The point instance itself\n */\n copyFrom(p: IPointData): this\n {\n this.set(p.x, p.y);\n\n return this;\n }\n\n /**\n * Copies this point's x and y into the given point (`p`).\n * @param p - The point to copy to. Can be any of type that is or extends `IPointData`\n * @returns The point (`p`) with values updated\n */\n copyTo(p: T): T\n {\n p.set(this.x, this.y);\n\n return p;\n }\n\n /**\n * Accepts another point (`p`) and returns `true` if the given point is equal to this point\n * @param p - The point to check\n * @returns Returns `true` if both `x` and `y` are equal\n */\n equals(p: IPointData): boolean\n {\n return (p.x === this.x) && (p.y === this.y);\n }\n\n /**\n * Sets the point to a new `x` and `y` position.\n * If `y` is omitted, both `x` and `y` will be set to `x`.\n * @param {number} [x=0] - position of the point on the `x` axis\n * @param {number} [y=x] - position of the point on the `y` axis\n * @returns The point instance itself\n */\n set(x = 0, y = x): this\n {\n this.x = x;\n this.y = y;\n\n return this;\n }\n}\n\nif (process.env.DEBUG)\n{\n Point.prototype.toString = function toString(): string\n {\n return `[@pixi/math:Point x=${this.x} y=${this.y}]`;\n };\n}\n","import { SHAPES } from '../const';\nimport { Point } from '../Point';\n\nimport type { Matrix } from '../Matrix';\n\nconst tempPoints = [new Point(), new Point(), new Point(), new Point()];\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface Rectangle extends GlobalMixins.Rectangle {}\n\n/**\n * Size object, contains width and height\n * @memberof PIXI\n * @typedef {object} ISize\n * @property {number} width - Width component\n * @property {number} height - Height component\n */\n\n/**\n * Rectangle object is an area defined by its position, as indicated by its top-left corner\n * point (x, y) and by its width and its height.\n * @memberof PIXI\n */\nexport class Rectangle\n{\n /** @default 0 */\n public x: number;\n\n /** @default 0 */\n public y: number;\n /** @default 0 */\n public width: number;\n\n /** @default 0 */\n public height: number;\n\n /**\n * The type of the object, mainly used to avoid `instanceof` checks\n * @default PIXI.SHAPES.RECT\n * @see PIXI.SHAPES\n */\n public readonly type: SHAPES.RECT;\n\n /**\n * @param x - The X coordinate of the upper-left corner of the rectangle\n * @param y - The Y coordinate of the upper-left corner of the rectangle\n * @param width - The overall width of the rectangle\n * @param height - The overall height of the rectangle\n */\n constructor(x: string | number = 0, y: string | number = 0, width: string | number = 0, height: string | number = 0)\n {\n this.x = Number(x);\n this.y = Number(y);\n this.width = Number(width);\n this.height = Number(height);\n this.type = SHAPES.RECT;\n }\n\n /** Returns the left edge of the rectangle. */\n get left(): number\n {\n return this.x;\n }\n\n /** Returns the right edge of the rectangle. */\n get right(): number\n {\n return this.x + this.width;\n }\n\n /** Returns the top edge of the rectangle. */\n get top(): number\n {\n return this.y;\n }\n\n /** Returns the bottom edge of the rectangle. */\n get bottom(): number\n {\n return this.y + this.height;\n }\n\n /** A constant empty rectangle. */\n static get EMPTY(): Rectangle\n {\n return new Rectangle(0, 0, 0, 0);\n }\n\n /**\n * Creates a clone of this Rectangle\n * @returns a copy of the rectangle\n */\n clone(): Rectangle\n {\n return new Rectangle(this.x, this.y, this.width, this.height);\n }\n\n /**\n * Copies another rectangle to this one.\n * @param rectangle - The rectangle to copy from.\n * @returns Returns itself.\n */\n copyFrom(rectangle: Rectangle): Rectangle\n {\n this.x = rectangle.x;\n this.y = rectangle.y;\n this.width = rectangle.width;\n this.height = rectangle.height;\n\n return this;\n }\n\n /**\n * Copies this rectangle to another one.\n * @param rectangle - The rectangle to copy to.\n * @returns Returns given parameter.\n */\n copyTo(rectangle: Rectangle): Rectangle\n {\n rectangle.x = this.x;\n rectangle.y = this.y;\n rectangle.width = this.width;\n rectangle.height = this.height;\n\n return rectangle;\n }\n\n /**\n * Checks whether the x and y coordinates given are contained within this Rectangle\n * @param x - The X coordinate of the point to test\n * @param y - The Y coordinate of the point to test\n * @returns Whether the x/y coordinates are within this Rectangle\n */\n contains(x: number, y: number): boolean\n {\n if (this.width <= 0 || this.height <= 0)\n {\n return false;\n }\n\n if (x >= this.x && x < this.x + this.width)\n {\n if (y >= this.y && y < this.y + this.height)\n {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Determines whether the `other` Rectangle transformed by `transform` intersects with `this` Rectangle object.\n * Returns true only if the area of the intersection is >0, this means that Rectangles\n * sharing a side are not overlapping. Another side effect is that an arealess rectangle\n * (width or height equal to zero) can't intersect any other rectangle.\n * @param {Rectangle} other - The Rectangle to intersect with `this`.\n * @param {Matrix} transform - The transformation matrix of `other`.\n * @returns {boolean} A value of `true` if the transformed `other` Rectangle intersects with `this`; otherwise `false`.\n */\n intersects(other: Rectangle, transform?: Matrix): boolean\n {\n if (!transform)\n {\n const x0 = this.x < other.x ? other.x : this.x;\n const x1 = this.right > other.right ? other.right : this.right;\n\n if (x1 <= x0)\n {\n return false;\n }\n\n const y0 = this.y < other.y ? other.y : this.y;\n const y1 = this.bottom > other.bottom ? other.bottom : this.bottom;\n\n return y1 > y0;\n }\n\n const x0 = this.left;\n const x1 = this.right;\n const y0 = this.top;\n const y1 = this.bottom;\n\n if (x1 <= x0 || y1 <= y0)\n {\n return false;\n }\n\n const lt = tempPoints[0].set(other.left, other.top);\n const lb = tempPoints[1].set(other.left, other.bottom);\n const rt = tempPoints[2].set(other.right, other.top);\n const rb = tempPoints[3].set(other.right, other.bottom);\n\n if (rt.x <= lt.x || lb.y <= lt.y)\n {\n return false;\n }\n\n const s = Math.sign((transform.a * transform.d) - (transform.b * transform.c));\n\n if (s === 0)\n {\n return false;\n }\n\n transform.apply(lt, lt);\n transform.apply(lb, lb);\n transform.apply(rt, rt);\n transform.apply(rb, rb);\n\n if (Math.max(lt.x, lb.x, rt.x, rb.x) <= x0\n || Math.min(lt.x, lb.x, rt.x, rb.x) >= x1\n || Math.max(lt.y, lb.y, rt.y, rb.y) <= y0\n || Math.min(lt.y, lb.y, rt.y, rb.y) >= y1)\n {\n return false;\n }\n\n const nx = s * (lb.y - lt.y);\n const ny = s * (lt.x - lb.x);\n const n00 = (nx * x0) + (ny * y0);\n const n10 = (nx * x1) + (ny * y0);\n const n01 = (nx * x0) + (ny * y1);\n const n11 = (nx * x1) + (ny * y1);\n\n if (Math.max(n00, n10, n01, n11) <= (nx * lt.x) + (ny * lt.y)\n || Math.min(n00, n10, n01, n11) >= (nx * rb.x) + (ny * rb.y))\n {\n return false;\n }\n\n const mx = s * (lt.y - rt.y);\n const my = s * (rt.x - lt.x);\n const m00 = (mx * x0) + (my * y0);\n const m10 = (mx * x1) + (my * y0);\n const m01 = (mx * x0) + (my * y1);\n const m11 = (mx * x1) + (my * y1);\n\n if (Math.max(m00, m10, m01, m11) <= (mx * lt.x) + (my * lt.y)\n || Math.min(m00, m10, m01, m11) >= (mx * rb.x) + (my * rb.y))\n {\n return false;\n }\n\n return true;\n }\n\n /**\n * Pads the rectangle making it grow in all directions.\n * If paddingY is omitted, both paddingX and paddingY will be set to paddingX.\n * @param paddingX - The horizontal padding amount.\n * @param paddingY - The vertical padding amount.\n * @returns Returns itself.\n */\n pad(paddingX = 0, paddingY = paddingX): this\n {\n this.x -= paddingX;\n this.y -= paddingY;\n\n this.width += paddingX * 2;\n this.height += paddingY * 2;\n\n return this;\n }\n\n /**\n * Fits this rectangle around the passed one.\n * @param rectangle - The rectangle to fit.\n * @returns Returns itself.\n */\n fit(rectangle: Rectangle): this\n {\n const x1 = Math.max(this.x, rectangle.x);\n const x2 = Math.min(this.x + this.width, rectangle.x + rectangle.width);\n const y1 = Math.max(this.y, rectangle.y);\n const y2 = Math.min(this.y + this.height, rectangle.y + rectangle.height);\n\n this.x = x1;\n this.width = Math.max(x2 - x1, 0);\n this.y = y1;\n this.height = Math.max(y2 - y1, 0);\n\n return this;\n }\n\n /**\n * Enlarges rectangle that way its corners lie on grid\n * @param resolution - resolution\n * @param eps - precision\n * @returns Returns itself.\n */\n ceil(resolution = 1, eps = 0.001): this\n {\n const x2 = Math.ceil((this.x + this.width - eps) * resolution) / resolution;\n const y2 = Math.ceil((this.y + this.height - eps) * resolution) / resolution;\n\n this.x = Math.floor((this.x + eps) * resolution) / resolution;\n this.y = Math.floor((this.y + eps) * resolution) / resolution;\n\n this.width = x2 - this.x;\n this.height = y2 - this.y;\n\n return this;\n }\n\n /**\n * Enlarges this rectangle to include the passed rectangle.\n * @param rectangle - The rectangle to include.\n * @returns Returns itself.\n */\n enlarge(rectangle: Rectangle): this\n {\n const x1 = Math.min(this.x, rectangle.x);\n const x2 = Math.max(this.x + this.width, rectangle.x + rectangle.width);\n const y1 = Math.min(this.y, rectangle.y);\n const y2 = Math.max(this.y + this.height, rectangle.y + rectangle.height);\n\n this.x = x1;\n this.width = x2 - x1;\n this.y = y1;\n this.height = y2 - y1;\n\n return this;\n }\n}\n\nif (process.env.DEBUG)\n{\n Rectangle.prototype.toString = function toString(): string\n {\n return `[@pixi/math:Rectangle x=${this.x} y=${this.y} width=${this.width} height=${this.height}]`;\n };\n}\n","import { SHAPES } from './../const';\nimport { Rectangle } from './Rectangle';\n\n/**\n * The Circle object is used to help draw graphics and can also be used to specify a hit area for displayObjects.\n * @memberof PIXI\n */\nexport class Circle\n{\n /** @default 0 */\n public x: number;\n\n /** @default 0 */\n public y: number;\n\n /** @default 0 */\n public radius: number;\n\n /**\n * The type of the object, mainly used to avoid `instanceof` checks\n * @default PIXI.SHAPES.CIRC\n * @see PIXI.SHAPES\n */\n public readonly type: SHAPES.CIRC;\n\n /**\n * @param x - The X coordinate of the center of this circle\n * @param y - The Y coordinate of the center of this circle\n * @param radius - The radius of the circle\n */\n constructor(x = 0, y = 0, radius = 0)\n {\n this.x = x;\n this.y = y;\n this.radius = radius;\n\n this.type = SHAPES.CIRC;\n }\n\n /**\n * Creates a clone of this Circle instance\n * @returns A copy of the Circle\n */\n clone(): Circle\n {\n return new Circle(this.x, this.y, this.radius);\n }\n\n /**\n * Checks whether the x and y coordinates given are contained within this circle\n * @param x - The X coordinate of the point to test\n * @param y - The Y coordinate of the point to test\n * @returns Whether the x/y coordinates are within this Circle\n */\n contains(x: number, y: number): boolean\n {\n if (this.radius <= 0)\n {\n return false;\n }\n\n const r2 = this.radius * this.radius;\n let dx = (this.x - x);\n let dy = (this.y - y);\n\n dx *= dx;\n dy *= dy;\n\n return (dx + dy <= r2);\n }\n\n /**\n * Returns the framing rectangle of the circle as a Rectangle object\n * @returns The framing rectangle\n */\n getBounds(): Rectangle\n {\n return new Rectangle(this.x - this.radius, this.y - this.radius, this.radius * 2, this.radius * 2);\n }\n}\n\nif (process.env.DEBUG)\n{\n Circle.prototype.toString = function toString(): string\n {\n return `[@pixi/math:Circle x=${this.x} y=${this.y} radius=${this.radius}]`;\n };\n}\n","import { SHAPES } from '../const';\nimport { Rectangle } from './Rectangle';\n\n/**\n * The Ellipse object is used to help draw graphics and can also be used to specify a hit area for displayObjects.\n * @memberof PIXI\n */\nexport class Ellipse\n{\n /** @default 0 */\n public x: number;\n\n /** @default 0 */\n public y: number;\n\n /** @default 0 */\n public width: number;\n\n /** @default 0 */\n public height: number;\n\n /**\n * The type of the object, mainly used to avoid `instanceof` checks\n * @default PIXI.SHAPES.ELIP\n * @see PIXI.SHAPES\n */\n public readonly type: SHAPES.ELIP;\n\n /**\n * @param x - The X coordinate of the center of this ellipse\n * @param y - The Y coordinate of the center of this ellipse\n * @param halfWidth - The half width of this ellipse\n * @param halfHeight - The half height of this ellipse\n */\n constructor(x = 0, y = 0, halfWidth = 0, halfHeight = 0)\n {\n this.x = x;\n this.y = y;\n this.width = halfWidth;\n this.height = halfHeight;\n\n this.type = SHAPES.ELIP;\n }\n\n /**\n * Creates a clone of this Ellipse instance\n * @returns {PIXI.Ellipse} A copy of the ellipse\n */\n clone(): Ellipse\n {\n return new Ellipse(this.x, this.y, this.width, this.height);\n }\n\n /**\n * Checks whether the x and y coordinates given are contained within this ellipse\n * @param x - The X coordinate of the point to test\n * @param y - The Y coordinate of the point to test\n * @returns Whether the x/y coords are within this ellipse\n */\n contains(x: number, y: number): boolean\n {\n if (this.width <= 0 || this.height <= 0)\n {\n return false;\n }\n\n // normalize the coords to an ellipse with center 0,0\n let normx = ((x - this.x) / this.width);\n let normy = ((y - this.y) / this.height);\n\n normx *= normx;\n normy *= normy;\n\n return (normx + normy <= 1);\n }\n\n /**\n * Returns the framing rectangle of the ellipse as a Rectangle object\n * @returns The framing rectangle\n */\n getBounds(): Rectangle\n {\n return new Rectangle(this.x - this.width, this.y - this.height, this.width, this.height);\n }\n}\n\nif (process.env.DEBUG)\n{\n Ellipse.prototype.toString = function toString(): string\n {\n return `[@pixi/math:Ellipse x=${this.x} y=${this.y} width=${this.width} height=${this.height}]`;\n };\n}\n","import { SHAPES } from '../const';\n\nimport type { IPointData } from '../IPointData';\n\n/**\n * A class to define a shape via user defined coordinates.\n * @memberof PIXI\n */\nexport class Polygon\n{\n /** An array of the points of this polygon. */\n public points: number[];\n\n /** `false` after moveTo, `true` after `closePath`. In all other cases it is `true`. */\n public closeStroke: boolean;\n\n /**\n * The type of the object, mainly used to avoid `instanceof` checks\n * @default PIXI.SHAPES.POLY\n * @see PIXI.SHAPES\n */\n public readonly type: SHAPES.POLY;\n\n constructor(points: IPointData[] | number[]);\n constructor(...points: IPointData[] | number[]);\n\n /**\n * @param {PIXI.IPointData[]|number[]} points - This can be an array of Points\n * that form the polygon, a flat array of numbers that will be interpreted as [x,y, x,y, ...], or\n * the arguments passed can be all the points of the polygon e.g.\n * `new Polygon(new Point(), new Point(), ...)`, or the arguments passed can be flat\n * x,y values e.g. `new Polygon(x,y, x,y, x,y, ...)` where `x` and `y` are Numbers.\n */\n constructor(...points: any[])\n {\n let flat: IPointData[] | number[] = Array.isArray(points[0]) ? points[0] : points;\n\n // if this is an array of points, convert it to a flat array of numbers\n if (typeof flat[0] !== 'number')\n {\n const p: number[] = [];\n\n for (let i = 0, il = flat.length; i < il; i++)\n {\n p.push((flat[i] as IPointData).x, (flat[i] as IPointData).y);\n }\n\n flat = p;\n }\n\n this.points = flat as number[];\n this.type = SHAPES.POLY;\n this.closeStroke = true;\n }\n\n /**\n * Creates a clone of this polygon.\n * @returns - A copy of the polygon.\n */\n clone(): Polygon\n {\n const points = this.points.slice();\n const polygon = new Polygon(points);\n\n polygon.closeStroke = this.closeStroke;\n\n return polygon;\n }\n\n /**\n * Checks whether the x and y coordinates passed to this function are contained within this polygon.\n * @param x - The X coordinate of the point to test.\n * @param y - The Y coordinate of the point to test.\n * @returns - Whether the x/y coordinates are within this polygon.\n */\n contains(x: number, y: number): boolean\n {\n let inside = false;\n\n // use some raycasting to test hits\n // https://github.com/substack/point-in-polygon/blob/master/index.js\n const length = this.points.length / 2;\n\n for (let i = 0, j = length - 1; i < length; j = i++)\n {\n const xi = this.points[i * 2];\n const yi = this.points[(i * 2) + 1];\n const xj = this.points[j * 2];\n const yj = this.points[(j * 2) + 1];\n const intersect = ((yi > y) !== (yj > y)) && (x < ((xj - xi) * ((y - yi) / (yj - yi))) + xi);\n\n if (intersect)\n {\n inside = !inside;\n }\n }\n\n return inside;\n }\n}\n\nif (process.env.DEBUG)\n{\n Polygon.prototype.toString = function toString(): string\n {\n return `[@pixi/math:Polygon`\n + `closeStroke=${this.closeStroke}`\n + `points=${this.points.reduce((pointsDesc, currentPoint) => `${pointsDesc}, ${currentPoint}`, '')}]`;\n };\n}\n","import { SHAPES } from '../const';\n\n/**\n * The Rounded Rectangle object is an area that has nice rounded corners, as indicated by its\n * top-left corner point (x, y) and by its width and its height and its radius.\n * @memberof PIXI\n */\nexport class RoundedRectangle\n{\n /** @default 0 */\n public x: number;\n\n /** @default 0 */\n public y: number;\n\n /** @default 0 */\n public width: number;\n\n /** @default 0 */\n public height: number;\n\n /** @default 20 */\n public radius: number;\n\n /**\n * The type of the object, mainly used to avoid `instanceof` checks\n * @default PIXI.SHAPES.RREC\n * @see PIXI.SHAPES\n */\n public readonly type: SHAPES.RREC;\n\n /**\n * @param x - The X coordinate of the upper-left corner of the rounded rectangle\n * @param y - The Y coordinate of the upper-left corner of the rounded rectangle\n * @param width - The overall width of this rounded rectangle\n * @param height - The overall height of this rounded rectangle\n * @param radius - Controls the radius of the rounded corners\n */\n constructor(x = 0, y = 0, width = 0, height = 0, radius = 20)\n {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.radius = radius;\n this.type = SHAPES.RREC;\n }\n\n /**\n * Creates a clone of this Rounded Rectangle.\n * @returns - A copy of the rounded rectangle.\n */\n clone(): RoundedRectangle\n {\n return new RoundedRectangle(this.x, this.y, this.width, this.height, this.radius);\n }\n\n /**\n * Checks whether the x and y coordinates given are contained within this Rounded Rectangle\n * @param x - The X coordinate of the point to test.\n * @param y - The Y coordinate of the point to test.\n * @returns - Whether the x/y coordinates are within this Rounded Rectangle.\n */\n contains(x: number, y: number): boolean\n {\n if (this.width <= 0 || this.height <= 0)\n {\n return false;\n }\n if (x >= this.x && x <= this.x + this.width)\n {\n if (y >= this.y && y <= this.y + this.height)\n {\n const radius = Math.max(0, Math.min(this.radius, Math.min(this.width, this.height) / 2));\n\n if ((y >= this.y + radius && y <= this.y + this.height - radius)\n || (x >= this.x + radius && x <= this.x + this.width - radius))\n {\n return true;\n }\n let dx = x - (this.x + radius);\n let dy = y - (this.y + radius);\n const radius2 = radius * radius;\n\n if ((dx * dx) + (dy * dy) <= radius2)\n {\n return true;\n }\n dx = x - (this.x + this.width - radius);\n if ((dx * dx) + (dy * dy) <= radius2)\n {\n return true;\n }\n dy = y - (this.y + this.height - radius);\n if ((dx * dx) + (dy * dy) <= radius2)\n {\n return true;\n }\n dx = x - (this.x + radius);\n if ((dx * dx) + (dy * dy) <= radius2)\n {\n return true;\n }\n }\n }\n\n return false;\n }\n}\n\nif (process.env.DEBUG)\n{\n RoundedRectangle.prototype.toString = function toString(): string\n {\n return `[@pixi/math:RoundedRectangle x=${this.x} y=${this.y}`\n + `width=${this.width} height=${this.height} radius=${this.radius}]`;\n };\n}\n","import { PI_2 } from './const';\nimport { Point } from './Point';\n\nimport type { IPointData } from './IPointData';\nimport type { Transform } from './Transform';\n\n/**\n * The PixiJS Matrix as a class makes it a lot faster.\n *\n * Here is a representation of it:\n * ```\n * | a | c | tx|\n * | b | d | ty|\n * | 0 | 0 | 1 |\n * ```\n * @memberof PIXI\n */\nexport class Matrix\n{\n /** @default 1 */\n public a: number;\n\n /** @default 0 */\n public b: number;\n\n /** @default 0 */\n public c: number;\n\n /** @default 1 */\n public d: number;\n\n /** @default 0 */\n public tx: number;\n\n /** @default 0 */\n public ty: number;\n\n public array: Float32Array | null = null;\n\n /**\n * @param a - x scale\n * @param b - y skew\n * @param c - x skew\n * @param d - y scale\n * @param tx - x translation\n * @param ty - y translation\n */\n constructor(a = 1, b = 0, c = 0, d = 1, tx = 0, ty = 0)\n {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.tx = tx;\n this.ty = ty;\n }\n\n /**\n * Creates a Matrix object based on the given array. The Element to Matrix mapping order is as follows:\n *\n * a = array[0]\n * b = array[1]\n * c = array[3]\n * d = array[4]\n * tx = array[2]\n * ty = array[5]\n * @param array - The array that the matrix will be populated from.\n */\n fromArray(array: number[]): void\n {\n this.a = array[0];\n this.b = array[1];\n this.c = array[3];\n this.d = array[4];\n this.tx = array[2];\n this.ty = array[5];\n }\n\n /**\n * Sets the matrix properties.\n * @param a - Matrix component\n * @param b - Matrix component\n * @param c - Matrix component\n * @param d - Matrix component\n * @param tx - Matrix component\n * @param ty - Matrix component\n * @returns This matrix. Good for chaining method calls.\n */\n set(a: number, b: number, c: number, d: number, tx: number, ty: number): this\n {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.tx = tx;\n this.ty = ty;\n\n return this;\n }\n\n /**\n * Creates an array from the current Matrix object.\n * @param transpose - Whether we need to transpose the matrix or not\n * @param [out=new Float32Array(9)] - If provided the array will be assigned to out\n * @returns The newly created array which contains the matrix\n */\n toArray(transpose: boolean, out?: Float32Array): Float32Array\n {\n if (!this.array)\n {\n this.array = new Float32Array(9);\n }\n\n const array = out || this.array;\n\n if (transpose)\n {\n array[0] = this.a;\n array[1] = this.b;\n array[2] = 0;\n array[3] = this.c;\n array[4] = this.d;\n array[5] = 0;\n array[6] = this.tx;\n array[7] = this.ty;\n array[8] = 1;\n }\n else\n {\n array[0] = this.a;\n array[1] = this.c;\n array[2] = this.tx;\n array[3] = this.b;\n array[4] = this.d;\n array[5] = this.ty;\n array[6] = 0;\n array[7] = 0;\n array[8] = 1;\n }\n\n return array;\n }\n\n /**\n * Get a new position with the current transformation applied.\n * Can be used to go from a child's coordinate space to the world coordinate space. (e.g. rendering)\n * @param pos - The origin\n * @param {PIXI.Point} [newPos] - The point that the new position is assigned to (allowed to be same as input)\n * @returns {PIXI.Point} The new point, transformed through this matrix\n */\n apply

(pos: IPointData, newPos?: P): P\n {\n newPos = (newPos || new Point()) as P;\n\n const x = pos.x;\n const y = pos.y;\n\n newPos.x = (this.a * x) + (this.c * y) + this.tx;\n newPos.y = (this.b * x) + (this.d * y) + this.ty;\n\n return newPos;\n }\n\n /**\n * Get a new position with the inverse of the current transformation applied.\n * Can be used to go from the world coordinate space to a child's coordinate space. (e.g. input)\n * @param pos - The origin\n * @param {PIXI.Point} [newPos] - The point that the new position is assigned to (allowed to be same as input)\n * @returns {PIXI.Point} The new point, inverse-transformed through this matrix\n */\n applyInverse

(pos: IPointData, newPos?: P): P\n {\n newPos = (newPos || new Point()) as P;\n\n const id = 1 / ((this.a * this.d) + (this.c * -this.b));\n\n const x = pos.x;\n const y = pos.y;\n\n newPos.x = (this.d * id * x) + (-this.c * id * y) + (((this.ty * this.c) - (this.tx * this.d)) * id);\n newPos.y = (this.a * id * y) + (-this.b * id * x) + (((-this.ty * this.a) + (this.tx * this.b)) * id);\n\n return newPos;\n }\n\n /**\n * Translates the matrix on the x and y.\n * @param x - How much to translate x by\n * @param y - How much to translate y by\n * @returns This matrix. Good for chaining method calls.\n */\n translate(x: number, y: number): this\n {\n this.tx += x;\n this.ty += y;\n\n return this;\n }\n\n /**\n * Applies a scale transformation to the matrix.\n * @param x - The amount to scale horizontally\n * @param y - The amount to scale vertically\n * @returns This matrix. Good for chaining method calls.\n */\n scale(x: number, y: number): this\n {\n this.a *= x;\n this.d *= y;\n this.c *= x;\n this.b *= y;\n this.tx *= x;\n this.ty *= y;\n\n return this;\n }\n\n /**\n * Applies a rotation transformation to the matrix.\n * @param angle - The angle in radians.\n * @returns This matrix. Good for chaining method calls.\n */\n rotate(angle: number): this\n {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n\n const a1 = this.a;\n const c1 = this.c;\n const tx1 = this.tx;\n\n this.a = (a1 * cos) - (this.b * sin);\n this.b = (a1 * sin) + (this.b * cos);\n this.c = (c1 * cos) - (this.d * sin);\n this.d = (c1 * sin) + (this.d * cos);\n this.tx = (tx1 * cos) - (this.ty * sin);\n this.ty = (tx1 * sin) + (this.ty * cos);\n\n return this;\n }\n\n /**\n * Appends the given Matrix to this Matrix.\n * @param matrix - The matrix to append.\n * @returns This matrix. Good for chaining method calls.\n */\n append(matrix: Matrix): this\n {\n const a1 = this.a;\n const b1 = this.b;\n const c1 = this.c;\n const d1 = this.d;\n\n this.a = (matrix.a * a1) + (matrix.b * c1);\n this.b = (matrix.a * b1) + (matrix.b * d1);\n this.c = (matrix.c * a1) + (matrix.d * c1);\n this.d = (matrix.c * b1) + (matrix.d * d1);\n\n this.tx = (matrix.tx * a1) + (matrix.ty * c1) + this.tx;\n this.ty = (matrix.tx * b1) + (matrix.ty * d1) + this.ty;\n\n return this;\n }\n\n /**\n * Sets the matrix based on all the available properties\n * @param x - Position on the x axis\n * @param y - Position on the y axis\n * @param pivotX - Pivot on the x axis\n * @param pivotY - Pivot on the y axis\n * @param scaleX - Scale on the x axis\n * @param scaleY - Scale on the y axis\n * @param rotation - Rotation in radians\n * @param skewX - Skew on the x axis\n * @param skewY - Skew on the y axis\n * @returns This matrix. Good for chaining method calls.\n */\n setTransform(x: number, y: number, pivotX: number, pivotY: number, scaleX: number,\n scaleY: number, rotation: number, skewX: number, skewY: number): this\n {\n this.a = Math.cos(rotation + skewY) * scaleX;\n this.b = Math.sin(rotation + skewY) * scaleX;\n this.c = -Math.sin(rotation - skewX) * scaleY;\n this.d = Math.cos(rotation - skewX) * scaleY;\n\n this.tx = x - ((pivotX * this.a) + (pivotY * this.c));\n this.ty = y - ((pivotX * this.b) + (pivotY * this.d));\n\n return this;\n }\n\n /**\n * Prepends the given Matrix to this Matrix.\n * @param matrix - The matrix to prepend\n * @returns This matrix. Good for chaining method calls.\n */\n prepend(matrix: Matrix): this\n {\n const tx1 = this.tx;\n\n if (matrix.a !== 1 || matrix.b !== 0 || matrix.c !== 0 || matrix.d !== 1)\n {\n const a1 = this.a;\n const c1 = this.c;\n\n this.a = (a1 * matrix.a) + (this.b * matrix.c);\n this.b = (a1 * matrix.b) + (this.b * matrix.d);\n this.c = (c1 * matrix.a) + (this.d * matrix.c);\n this.d = (c1 * matrix.b) + (this.d * matrix.d);\n }\n\n this.tx = (tx1 * matrix.a) + (this.ty * matrix.c) + matrix.tx;\n this.ty = (tx1 * matrix.b) + (this.ty * matrix.d) + matrix.ty;\n\n return this;\n }\n\n /**\n * Decomposes the matrix (x, y, scaleX, scaleY, and rotation) and sets the properties on to a transform.\n * @param transform - The transform to apply the properties to.\n * @returns The transform with the newly applied properties\n */\n decompose(transform: Transform): Transform\n {\n // sort out rotation / skew..\n const a = this.a;\n const b = this.b;\n const c = this.c;\n const d = this.d;\n const pivot = transform.pivot;\n\n const skewX = -Math.atan2(-c, d);\n const skewY = Math.atan2(b, a);\n\n const delta = Math.abs(skewX + skewY);\n\n if (delta < 0.00001 || Math.abs(PI_2 - delta) < 0.00001)\n {\n transform.rotation = skewY;\n transform.skew.x = transform.skew.y = 0;\n }\n else\n {\n transform.rotation = 0;\n transform.skew.x = skewX;\n transform.skew.y = skewY;\n }\n\n // next set scale\n transform.scale.x = Math.sqrt((a * a) + (b * b));\n transform.scale.y = Math.sqrt((c * c) + (d * d));\n\n // next set position\n transform.position.x = this.tx + ((pivot.x * a) + (pivot.y * c));\n transform.position.y = this.ty + ((pivot.x * b) + (pivot.y * d));\n\n return transform;\n }\n\n /**\n * Inverts this matrix\n * @returns This matrix. Good for chaining method calls.\n */\n invert(): this\n {\n const a1 = this.a;\n const b1 = this.b;\n const c1 = this.c;\n const d1 = this.d;\n const tx1 = this.tx;\n const n = (a1 * d1) - (b1 * c1);\n\n this.a = d1 / n;\n this.b = -b1 / n;\n this.c = -c1 / n;\n this.d = a1 / n;\n this.tx = ((c1 * this.ty) - (d1 * tx1)) / n;\n this.ty = -((a1 * this.ty) - (b1 * tx1)) / n;\n\n return this;\n }\n\n /**\n * Resets this Matrix to an identity (default) matrix.\n * @returns This matrix. Good for chaining method calls.\n */\n identity(): this\n {\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.tx = 0;\n this.ty = 0;\n\n return this;\n }\n\n /**\n * Creates a new Matrix object with the same values as this one.\n * @returns A copy of this matrix. Good for chaining method calls.\n */\n clone(): Matrix\n {\n const matrix = new Matrix();\n\n matrix.a = this.a;\n matrix.b = this.b;\n matrix.c = this.c;\n matrix.d = this.d;\n matrix.tx = this.tx;\n matrix.ty = this.ty;\n\n return matrix;\n }\n\n /**\n * Changes the values of the given matrix to be the same as the ones in this matrix\n * @param matrix - The matrix to copy to.\n * @returns The matrix given in parameter with its values updated.\n */\n copyTo(matrix: Matrix): Matrix\n {\n matrix.a = this.a;\n matrix.b = this.b;\n matrix.c = this.c;\n matrix.d = this.d;\n matrix.tx = this.tx;\n matrix.ty = this.ty;\n\n return matrix;\n }\n\n /**\n * Changes the values of the matrix to be the same as the ones in given matrix\n * @param {PIXI.Matrix} matrix - The matrix to copy from.\n * @returns {PIXI.Matrix} this\n */\n copyFrom(matrix: Matrix): this\n {\n this.a = matrix.a;\n this.b = matrix.b;\n this.c = matrix.c;\n this.d = matrix.d;\n this.tx = matrix.tx;\n this.ty = matrix.ty;\n\n return this;\n }\n\n /**\n * A default (identity) matrix\n * @readonly\n */\n static get IDENTITY(): Matrix\n {\n return new Matrix();\n }\n\n /**\n * A temp matrix\n * @readonly\n */\n static get TEMP_MATRIX(): Matrix\n {\n return new Matrix();\n }\n}\n\nif (process.env.DEBUG)\n{\n Matrix.prototype.toString = function toString(): string\n {\n return `[@pixi/math:Matrix a=${this.a} b=${this.b} c=${this.c} d=${this.d} tx=${this.tx} ty=${this.ty}]`;\n };\n}\n","// Your friendly neighbour https://en.wikipedia.org/wiki/Dihedral_group\n//\n// This file implements the dihedral group of order 16, also called\n// of degree 8. That's why its called groupD8.\n\nimport { Matrix } from './Matrix';\n\n/*\n * Transform matrix for operation n is:\n * | ux | vx |\n * | uy | vy |\n */\n\nconst ux = [1, 1, 0, -1, -1, -1, 0, 1, 1, 1, 0, -1, -1, -1, 0, 1];\nconst uy = [0, 1, 1, 1, 0, -1, -1, -1, 0, 1, 1, 1, 0, -1, -1, -1];\nconst vx = [0, -1, -1, -1, 0, 1, 1, 1, 0, 1, 1, 1, 0, -1, -1, -1];\nconst vy = [1, 1, 0, -1, -1, -1, 0, 1, -1, -1, 0, 1, 1, 1, 0, -1];\n\n/**\n * [Cayley Table]{@link https://en.wikipedia.org/wiki/Cayley_table}\n * for the composition of each rotation in the dihederal group D8.\n * @type {number[][]}\n * @private\n */\nconst rotationCayley: number[][] = [];\n\n/**\n * Matrices for each `GD8Symmetry` rotation.\n * @type {PIXI.Matrix[]}\n * @private\n */\nconst rotationMatrices: Matrix[] = [];\n\n/*\n * Alias for {@code Math.sign}.\n */\nconst signum = Math.sign;\n\n/*\n * Initializes `rotationCayley` and `rotationMatrices`. It is called\n * only once below.\n */\nfunction init(): void\n{\n for (let i = 0; i < 16; i++)\n {\n const row: number[] = [];\n\n rotationCayley.push(row);\n\n for (let j = 0; j < 16; j++)\n {\n /* Multiplies rotation matrices i and j. */\n const _ux = signum((ux[i] * ux[j]) + (vx[i] * uy[j]));\n const _uy = signum((uy[i] * ux[j]) + (vy[i] * uy[j]));\n const _vx = signum((ux[i] * vx[j]) + (vx[i] * vy[j]));\n const _vy = signum((uy[i] * vx[j]) + (vy[i] * vy[j]));\n\n /* Finds rotation matrix matching the product and pushes it. */\n for (let k = 0; k < 16; k++)\n {\n if (ux[k] === _ux && uy[k] === _uy\n && vx[k] === _vx && vy[k] === _vy)\n {\n row.push(k);\n break;\n }\n }\n }\n }\n\n for (let i = 0; i < 16; i++)\n {\n const mat = new Matrix();\n\n mat.set(ux[i], uy[i], vx[i], vy[i], 0, 0);\n rotationMatrices.push(mat);\n }\n}\n\ninit();\n\ntype GD8Symmetry = number;\n/**\n * @memberof PIXI\n * @typedef {number} GD8Symmetry\n * @see PIXI.groupD8\n */\n\n/**\n * Implements the dihedral group D8, which is similar to\n * [group D4]{@link http://mathworld.wolfram.com/DihedralGroupD4.html};\n * D8 is the same but with diagonals, and it is used for texture\n * rotations.\n *\n * The directions the U- and V- axes after rotation\n * of an angle of `a: GD8Constant` are the vectors `(uX(a), uY(a))`\n * and `(vX(a), vY(a))`. These aren't necessarily unit vectors.\n *\n * **Origin:**\n * This is the small part of gameofbombs.com portal system. It works.\n * @see PIXI.groupD8.E\n * @see PIXI.groupD8.SE\n * @see PIXI.groupD8.S\n * @see PIXI.groupD8.SW\n * @see PIXI.groupD8.W\n * @see PIXI.groupD8.NW\n * @see PIXI.groupD8.N\n * @see PIXI.groupD8.NE\n * @author Ivan @ivanpopelyshev\n * @namespace PIXI.groupD8\n * @memberof PIXI\n */\nexport const groupD8 = {\n /**\n * | Rotation | Direction |\n * |----------|-----------|\n * | 0° | East |\n * @readonly\n */\n E: 0,\n\n /**\n * | Rotation | Direction |\n * |----------|-----------|\n * | 45°↻ | Southeast |\n * @readonly\n */\n SE: 1,\n\n /**\n * | Rotation | Direction |\n * |----------|-----------|\n * | 90°↻ | South |\n * @readonly\n */\n S: 2,\n\n /**\n * | Rotation | Direction |\n * |----------|-----------|\n * | 135°↻ | Southwest |\n * @readonly\n */\n SW: 3,\n\n /**\n * | Rotation | Direction |\n * |----------|-----------|\n * | 180° | West |\n * @readonly\n */\n W: 4,\n\n /**\n * | Rotation | Direction |\n * |-------------|--------------|\n * | -135°/225°↻ | Northwest |\n * @readonly\n */\n NW: 5,\n\n /**\n * | Rotation | Direction |\n * |-------------|--------------|\n * | -90°/270°↻ | North |\n * @readonly\n */\n N: 6,\n\n /**\n * | Rotation | Direction |\n * |-------------|--------------|\n * | -45°/315°↻ | Northeast |\n * @readonly\n */\n NE: 7,\n\n /**\n * Reflection about Y-axis.\n * @readonly\n */\n MIRROR_VERTICAL: 8,\n\n /**\n * Reflection about the main diagonal.\n * @readonly\n */\n MAIN_DIAGONAL: 10,\n\n /**\n * Reflection about X-axis.\n * @readonly\n */\n MIRROR_HORIZONTAL: 12,\n\n /**\n * Reflection about reverse diagonal.\n * @readonly\n */\n REVERSE_DIAGONAL: 14,\n\n /**\n * @param {PIXI.GD8Symmetry} ind - sprite rotation angle.\n * @returns {PIXI.GD8Symmetry} The X-component of the U-axis\n * after rotating the axes.\n */\n uX: (ind: GD8Symmetry): GD8Symmetry => ux[ind],\n\n /**\n * @param {PIXI.GD8Symmetry} ind - sprite rotation angle.\n * @returns {PIXI.GD8Symmetry} The Y-component of the U-axis\n * after rotating the axes.\n */\n uY: (ind: GD8Symmetry): GD8Symmetry => uy[ind],\n\n /**\n * @param {PIXI.GD8Symmetry} ind - sprite rotation angle.\n * @returns {PIXI.GD8Symmetry} The X-component of the V-axis\n * after rotating the axes.\n */\n vX: (ind: GD8Symmetry): GD8Symmetry => vx[ind],\n\n /**\n * @param {PIXI.GD8Symmetry} ind - sprite rotation angle.\n * @returns {PIXI.GD8Symmetry} The Y-component of the V-axis\n * after rotating the axes.\n */\n vY: (ind: GD8Symmetry): GD8Symmetry => vy[ind],\n\n /**\n * @param {PIXI.GD8Symmetry} rotation - symmetry whose opposite\n * is needed. Only rotations have opposite symmetries while\n * reflections don't.\n * @returns {PIXI.GD8Symmetry} The opposite symmetry of `rotation`\n */\n inv: (rotation: GD8Symmetry): GD8Symmetry =>\n {\n if (rotation & 8)// true only if between 8 & 15 (reflections)\n {\n return rotation & 15;// or rotation % 16\n }\n\n return (-rotation) & 7;// or (8 - rotation) % 8\n },\n\n /**\n * Composes the two D8 operations.\n *\n * Taking `^` as reflection:\n *\n * | | E=0 | S=2 | W=4 | N=6 | E^=8 | S^=10 | W^=12 | N^=14 |\n * |-------|-----|-----|-----|-----|------|-------|-------|-------|\n * | E=0 | E | S | W | N | E^ | S^ | W^ | N^ |\n * | S=2 | S | W | N | E | S^ | W^ | N^ | E^ |\n * | W=4 | W | N | E | S | W^ | N^ | E^ | S^ |\n * | N=6 | N | E | S | W | N^ | E^ | S^ | W^ |\n * | E^=8 | E^ | N^ | W^ | S^ | E | N | W | S |\n * | S^=10 | S^ | E^ | N^ | W^ | S | E | N | W |\n * | W^=12 | W^ | S^ | E^ | N^ | W | S | E | N |\n * | N^=14 | N^ | W^ | S^ | E^ | N | W | S | E |\n *\n * [This is a Cayley table]{@link https://en.wikipedia.org/wiki/Cayley_table}\n * @param {PIXI.GD8Symmetry} rotationSecond - Second operation, which\n * is the row in the above cayley table.\n * @param {PIXI.GD8Symmetry} rotationFirst - First operation, which\n * is the column in the above cayley table.\n * @returns {PIXI.GD8Symmetry} Composed operation\n */\n add: (rotationSecond: GD8Symmetry, rotationFirst: GD8Symmetry): GD8Symmetry => (\n rotationCayley[rotationSecond][rotationFirst]\n ),\n\n /**\n * Reverse of `add`.\n * @param {PIXI.GD8Symmetry} rotationSecond - Second operation\n * @param {PIXI.GD8Symmetry} rotationFirst - First operation\n * @returns {PIXI.GD8Symmetry} Result\n */\n sub: (rotationSecond: GD8Symmetry, rotationFirst: GD8Symmetry): GD8Symmetry => (\n rotationCayley[rotationSecond][groupD8.inv(rotationFirst)]\n ),\n\n /**\n * Adds 180 degrees to rotation, which is a commutative\n * operation.\n * @param {number} rotation - The number to rotate.\n * @returns {number} Rotated number\n */\n rotate180: (rotation: number): number => rotation ^ 4,\n\n /**\n * Checks if the rotation angle is vertical, i.e. south\n * or north. It doesn't work for reflections.\n * @param {PIXI.GD8Symmetry} rotation - The number to check.\n * @returns {boolean} Whether or not the direction is vertical\n */\n isVertical: (rotation: GD8Symmetry): boolean => (rotation & 3) === 2, // rotation % 4 === 2\n\n /**\n * Approximates the vector `V(dx,dy)` into one of the\n * eight directions provided by `groupD8`.\n * @param {number} dx - X-component of the vector\n * @param {number} dy - Y-component of the vector\n * @returns {PIXI.GD8Symmetry} Approximation of the vector into\n * one of the eight symmetries.\n */\n byDirection: (dx: number, dy: number): GD8Symmetry =>\n {\n if (Math.abs(dx) * 2 <= Math.abs(dy))\n {\n if (dy >= 0)\n {\n return groupD8.S;\n }\n\n return groupD8.N;\n }\n else if (Math.abs(dy) * 2 <= Math.abs(dx))\n {\n if (dx > 0)\n {\n return groupD8.E;\n }\n\n return groupD8.W;\n }\n else if (dy > 0)\n {\n if (dx > 0)\n {\n return groupD8.SE;\n }\n\n return groupD8.SW;\n }\n else if (dx > 0)\n {\n return groupD8.NE;\n }\n\n return groupD8.NW;\n },\n\n /**\n * Helps sprite to compensate texture packer rotation.\n * @param {PIXI.Matrix} matrix - sprite world matrix\n * @param {PIXI.GD8Symmetry} rotation - The rotation factor to use.\n * @param {number} tx - sprite anchoring\n * @param {number} ty - sprite anchoring\n */\n matrixAppendRotationInv: (matrix: Matrix, rotation: GD8Symmetry, tx = 0, ty = 0): void =>\n {\n // Packer used \"rotation\", we use \"inv(rotation)\"\n const mat: Matrix = rotationMatrices[groupD8.inv(rotation)];\n\n mat.tx = tx;\n mat.ty = ty;\n matrix.append(mat);\n },\n};\n","import type { IPoint } from './IPoint';\nimport type { IPointData } from './IPointData';\n\nexport interface ObservablePoint extends GlobalMixins.Point, IPoint {}\n\n/**\n * The ObservablePoint object represents a location in a two-dimensional coordinate system, where `x` represents\n * the position on the horizontal axis and `y` represents the position on the vertical axis.\n *\n * An `ObservablePoint` is a point that triggers a callback when the point's position is changed.\n * @memberof PIXI\n */\nexport class ObservablePoint implements IPoint\n{\n /** The callback function triggered when `x` and/or `y` are changed */\n public cb: (this: T) => any;\n\n /** The owner of the callback */\n public scope: any;\n\n _x: number;\n _y: number;\n\n /**\n * Creates a new `ObservablePoint`\n * @param cb - callback function triggered when `x` and/or `y` are changed\n * @param scope - owner of callback\n * @param {number} [x=0] - position of the point on the x axis\n * @param {number} [y=0] - position of the point on the y axis\n */\n constructor(cb: (this: T) => any, scope: T, x = 0, y = 0)\n {\n this._x = x;\n this._y = y;\n\n this.cb = cb;\n this.scope = scope;\n }\n\n /**\n * Creates a clone of this point.\n * The callback and scope params can be overridden otherwise they will default\n * to the clone object's values.\n * @override\n * @param cb - The callback function triggered when `x` and/or `y` are changed\n * @param scope - The owner of the callback\n * @returns a copy of this observable point\n */\n clone(cb = this.cb, scope = this.scope): ObservablePoint\n {\n return new ObservablePoint(cb, scope, this._x, this._y);\n }\n\n /**\n * Sets the point to a new `x` and `y` position.\n * If `y` is omitted, both `x` and `y` will be set to `x`.\n * @param {number} [x=0] - position of the point on the x axis\n * @param {number} [y=x] - position of the point on the y axis\n * @returns The observable point instance itself\n */\n set(x = 0, y = x): this\n {\n if (this._x !== x || this._y !== y)\n {\n this._x = x;\n this._y = y;\n this.cb.call(this.scope);\n }\n\n return this;\n }\n\n /**\n * Copies x and y from the given point (`p`)\n * @param p - The point to copy from. Can be any of type that is or extends `IPointData`\n * @returns The observable point instance itself\n */\n copyFrom(p: IPointData): this\n {\n if (this._x !== p.x || this._y !== p.y)\n {\n this._x = p.x;\n this._y = p.y;\n this.cb.call(this.scope);\n }\n\n return this;\n }\n\n /**\n * Copies this point's x and y into that of the given point (`p`)\n * @param p - The point to copy to. Can be any of type that is or extends `IPointData`\n * @returns The point (`p`) with values updated\n */\n copyTo(p: T): T\n {\n p.set(this._x, this._y);\n\n return p;\n }\n\n /**\n * Accepts another point (`p`) and returns `true` if the given point is equal to this point\n * @param p - The point to check\n * @returns Returns `true` if both `x` and `y` are equal\n */\n equals(p: IPointData): boolean\n {\n return (p.x === this._x) && (p.y === this._y);\n }\n\n /** Position of the observable point on the x axis. */\n get x(): number\n {\n return this._x;\n }\n\n set x(value: number)\n {\n if (this._x !== value)\n {\n this._x = value;\n this.cb.call(this.scope);\n }\n }\n\n /** Position of the observable point on the y axis. */\n get y(): number\n {\n return this._y;\n }\n\n set y(value: number)\n {\n if (this._y !== value)\n {\n this._y = value;\n this.cb.call(this.scope);\n }\n }\n}\n\nif (process.env.DEBUG)\n{\n ObservablePoint.prototype.toString = function toString(): string\n {\n return `[@pixi/math:ObservablePoint x=${this.x} y=${this.y} scope=${this.scope}]`;\n };\n}\n","import { Matrix } from './Matrix';\nimport { ObservablePoint } from './ObservablePoint';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface Transform extends GlobalMixins.Transform {}\n\n/**\n * Transform that takes care about its versions.\n * @memberof PIXI\n */\nexport class Transform\n{\n /**\n * A default (identity) transform.\n * @static\n * @type {PIXI.Transform}\n */\n public static readonly IDENTITY = new Transform();\n\n /** The world transformation matrix. */\n public worldTransform: Matrix;\n\n /** The local transformation matrix. */\n public localTransform: Matrix;\n\n /** The coordinate of the object relative to the local coordinates of the parent. */\n public position: ObservablePoint;\n\n /** The scale factor of the object. */\n public scale: ObservablePoint;\n\n /** The pivot point of the displayObject that it rotates around. */\n public pivot: ObservablePoint;\n\n /** The skew amount, on the x and y axis. */\n public skew: ObservablePoint;\n\n /** The locally unique ID of the parent's world transform used to calculate the current world transformation matrix. */\n public _parentID: number;\n\n /** The locally unique ID of the world transform. */\n _worldID: number;\n\n /** The rotation amount. */\n protected _rotation: number;\n\n /**\n * The X-coordinate value of the normalized local X axis,\n * the first column of the local transformation matrix without a scale.\n */\n protected _cx: number;\n\n /**\n * The Y-coordinate value of the normalized local X axis,\n * the first column of the local transformation matrix without a scale.\n */\n protected _sx: number;\n\n /**\n * The X-coordinate value of the normalized local Y axis,\n * the second column of the local transformation matrix without a scale.\n */\n protected _cy: number;\n\n /**\n * The Y-coordinate value of the normalized local Y axis,\n * the second column of the local transformation matrix without a scale.\n */\n protected _sy: number;\n\n /** The locally unique ID of the local transform. */\n protected _localID: number;\n\n /** The locally unique ID of the local transform used to calculate the current local transformation matrix. */\n protected _currentLocalID: number;\n\n constructor()\n {\n this.worldTransform = new Matrix();\n this.localTransform = new Matrix();\n this.position = new ObservablePoint(this.onChange, this, 0, 0);\n this.scale = new ObservablePoint(this.onChange, this, 1, 1);\n this.pivot = new ObservablePoint(this.onChange, this, 0, 0);\n this.skew = new ObservablePoint(this.updateSkew, this, 0, 0);\n\n this._rotation = 0;\n this._cx = 1;\n this._sx = 0;\n this._cy = 0;\n this._sy = 1;\n this._localID = 0;\n this._currentLocalID = 0;\n\n this._worldID = 0;\n this._parentID = 0;\n }\n\n /** Called when a value changes. */\n protected onChange(): void\n {\n this._localID++;\n }\n\n /** Called when the skew or the rotation changes. */\n protected updateSkew(): void\n {\n this._cx = Math.cos(this._rotation + this.skew.y);\n this._sx = Math.sin(this._rotation + this.skew.y);\n this._cy = -Math.sin(this._rotation - this.skew.x); // cos, added PI/2\n this._sy = Math.cos(this._rotation - this.skew.x); // sin, added PI/2\n\n this._localID++;\n }\n\n /** Updates the local transformation matrix. */\n updateLocalTransform(): void\n {\n const lt = this.localTransform;\n\n if (this._localID !== this._currentLocalID)\n {\n // get the matrix values of the displayobject based on its transform properties..\n lt.a = this._cx * this.scale.x;\n lt.b = this._sx * this.scale.x;\n lt.c = this._cy * this.scale.y;\n lt.d = this._sy * this.scale.y;\n\n lt.tx = this.position.x - ((this.pivot.x * lt.a) + (this.pivot.y * lt.c));\n lt.ty = this.position.y - ((this.pivot.x * lt.b) + (this.pivot.y * lt.d));\n this._currentLocalID = this._localID;\n\n // force an update..\n this._parentID = -1;\n }\n }\n\n /**\n * Updates the local and the world transformation matrices.\n * @param parentTransform - The parent transform\n */\n updateTransform(parentTransform: Transform): void\n {\n const lt = this.localTransform;\n\n if (this._localID !== this._currentLocalID)\n {\n // get the matrix values of the displayobject based on its transform properties..\n lt.a = this._cx * this.scale.x;\n lt.b = this._sx * this.scale.x;\n lt.c = this._cy * this.scale.y;\n lt.d = this._sy * this.scale.y;\n\n lt.tx = this.position.x - ((this.pivot.x * lt.a) + (this.pivot.y * lt.c));\n lt.ty = this.position.y - ((this.pivot.x * lt.b) + (this.pivot.y * lt.d));\n this._currentLocalID = this._localID;\n\n // force an update..\n this._parentID = -1;\n }\n\n if (this._parentID !== parentTransform._worldID)\n {\n // concat the parent matrix with the objects transform.\n const pt = parentTransform.worldTransform;\n const wt = this.worldTransform;\n\n wt.a = (lt.a * pt.a) + (lt.b * pt.c);\n wt.b = (lt.a * pt.b) + (lt.b * pt.d);\n wt.c = (lt.c * pt.a) + (lt.d * pt.c);\n wt.d = (lt.c * pt.b) + (lt.d * pt.d);\n wt.tx = (lt.tx * pt.a) + (lt.ty * pt.c) + pt.tx;\n wt.ty = (lt.tx * pt.b) + (lt.ty * pt.d) + pt.ty;\n\n this._parentID = parentTransform._worldID;\n\n // update the id of the transform..\n this._worldID++;\n }\n }\n\n /**\n * Decomposes a matrix and sets the transforms properties based on it.\n * @param matrix - The matrix to decompose\n */\n setFromMatrix(matrix: Matrix): void\n {\n matrix.decompose(this);\n this._localID++;\n }\n\n /** The rotation of the object in radians. */\n get rotation(): number\n {\n return this._rotation;\n }\n\n set rotation(value: number)\n {\n if (this._rotation !== value)\n {\n this._rotation = value;\n this.updateSkew();\n }\n }\n}\n\nif (process.env.DEBUG)\n{\n Transform.prototype.toString = function toString(): string\n {\n return `[@pixi/math:Transform `\n + `position=(${this.position.x}, ${this.position.y}) `\n + `rotation=${this.rotation} `\n + `scale=(${this.scale.x}, ${this.scale.y}) `\n + `skew=(${this.skew.x}, ${this.skew.y}) `\n + `]`;\n };\n}\n","/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n// Parsers, each one of these will take a look at the type of shader property and uniform.\n// if they pass the test function then the code function is called that returns a the shader upload code for that uniform.\n// Shader upload code is automagically generated with these parsers.\n// If no parser is valid then the default upload functions are used.\n// exposing Parsers means that custom upload logic can be added to pixi's shaders.\n// A good example would be a pixi rectangle can be directly set on a uniform.\n// If the shader sees it it knows how to upload the rectangle structure as a vec4\n// format is as follows:\n//\n// {\n// test: (data, uniform) => {} <--- test is this code should be used for this uniform\n// code: (name, uniform) => {} <--- returns the string of the piece of code that uploads the uniform\n// codeUbo: (name, uniform) => {} <--- returns the string of the piece of code that uploads the\n// uniform to a uniform buffer\n// }\n\nexport interface IUniformParser\n{\n test(data: unknown, uniform: any): boolean;\n code(name: string, uniform: any): string;\n codeUbo?(name: string, uniform: any): string;\n}\n\nexport const uniformParsers: IUniformParser[] = [\n\n // a float cache layer\n {\n test: (data: any): boolean =>\n data.type === 'float' && data.size === 1 && !data.isArray,\n code: (name: string): string =>\n `\n if(uv[\"${name}\"] !== ud[\"${name}\"].value)\n {\n ud[\"${name}\"].value = uv[\"${name}\"]\n gl.uniform1f(ud[\"${name}\"].location, uv[\"${name}\"])\n }\n `,\n },\n // handling samplers\n {\n test: (data: any, uniform: any): boolean =>\n // eslint-disable-next-line max-len,no-eq-null,eqeqeq\n (data.type === 'sampler2D' || data.type === 'samplerCube' || data.type === 'sampler2DArray') && data.size === 1 && !data.isArray && (uniform == null || uniform.castToBaseTexture !== undefined),\n code: (name: string): string => `t = syncData.textureCount++;\n\n renderer.texture.bind(uv[\"${name}\"], t);\n\n if(ud[\"${name}\"].value !== t)\n {\n ud[\"${name}\"].value = t;\n gl.uniform1i(ud[\"${name}\"].location, t);\\n; // eslint-disable-line max-len\n }`,\n },\n // uploading pixi matrix object to mat3\n {\n test: (data: any, uniform: any): boolean =>\n data.type === 'mat3' && data.size === 1 && !data.isArray && uniform.a !== undefined,\n code: (name: string): string =>\n\n // TODO and some smart caching dirty ids here!\n `\n gl.uniformMatrix3fv(ud[\"${name}\"].location, false, uv[\"${name}\"].toArray(true));\n `,\n codeUbo: (name: string): string =>\n `\n var ${name}_matrix = uv.${name}.toArray(true);\n\n data[offset] = ${name}_matrix[0];\n data[offset+1] = ${name}_matrix[1];\n data[offset+2] = ${name}_matrix[2];\n \n data[offset + 4] = ${name}_matrix[3];\n data[offset + 5] = ${name}_matrix[4];\n data[offset + 6] = ${name}_matrix[5];\n \n data[offset + 8] = ${name}_matrix[6];\n data[offset + 9] = ${name}_matrix[7];\n data[offset + 10] = ${name}_matrix[8];\n `\n ,\n\n },\n // uploading a pixi point as a vec2 with caching layer\n {\n test: (data: any, uniform: any): boolean =>\n data.type === 'vec2' && data.size === 1 && !data.isArray && uniform.x !== undefined,\n code: (name: string): string =>\n `\n cv = ud[\"${name}\"].value;\n v = uv[\"${name}\"];\n\n if(cv[0] !== v.x || cv[1] !== v.y)\n {\n cv[0] = v.x;\n cv[1] = v.y;\n gl.uniform2f(ud[\"${name}\"].location, v.x, v.y);\n }`,\n codeUbo: (name: string): string =>\n `\n v = uv.${name};\n\n data[offset] = v.x;\n data[offset+1] = v.y;\n `\n },\n // caching layer for a vec2\n {\n test: (data: any): boolean =>\n data.type === 'vec2' && data.size === 1 && !data.isArray,\n code: (name: string): string =>\n `\n cv = ud[\"${name}\"].value;\n v = uv[\"${name}\"];\n\n if(cv[0] !== v[0] || cv[1] !== v[1])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n gl.uniform2f(ud[\"${name}\"].location, v[0], v[1]);\n }\n `,\n },\n // upload a pixi rectangle as a vec4 with caching layer\n {\n test: (data: any, uniform: any): boolean =>\n data.type === 'vec4' && data.size === 1 && !data.isArray && uniform.width !== undefined,\n\n code: (name: string): string =>\n `\n cv = ud[\"${name}\"].value;\n v = uv[\"${name}\"];\n\n if(cv[0] !== v.x || cv[1] !== v.y || cv[2] !== v.width || cv[3] !== v.height)\n {\n cv[0] = v.x;\n cv[1] = v.y;\n cv[2] = v.width;\n cv[3] = v.height;\n gl.uniform4f(ud[\"${name}\"].location, v.x, v.y, v.width, v.height)\n }`,\n codeUbo: (name: string): string =>\n `\n v = uv.${name};\n\n data[offset] = v.x;\n data[offset+1] = v.y;\n data[offset+2] = v.width;\n data[offset+3] = v.height;\n `\n },\n // upload a pixi color as vec4 with caching layer\n {\n test: (data: any, uniform: any): boolean =>\n data.type === 'vec4' && data.size === 1 && !data.isArray && uniform.red !== undefined,\n\n code: (name: string): string =>\n `\n cv = ud[\"${name}\"].value;\n v = uv[\"${name}\"];\n\n if(cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue || cv[3] !== v.alpha)\n {\n cv[0] = v.red;\n cv[1] = v.green;\n cv[2] = v.blue;\n cv[3] = v.alpha;\n gl.uniform4f(ud[\"${name}\"].location, v.red, v.green, v.blue, v.alpha)\n }`,\n codeUbo: (name: string): string =>\n `\n v = uv.${name};\n\n data[offset] = v.red;\n data[offset+1] = v.green;\n data[offset+2] = v.blue;\n data[offset+3] = v.alpha;\n `\n },\n // upload a pixi color as a vec3 with caching layer\n {\n test: (data: any, uniform: any): boolean =>\n data.type === 'vec3' && data.size === 1 && !data.isArray && uniform.red !== undefined,\n\n code: (name: string): string =>\n `\n cv = ud[\"${name}\"].value;\n v = uv[\"${name}\"];\n\n if(cv[0] !== v.red || cv[1] !== v.green || cv[2] !== v.blue || cv[3] !== v.a)\n {\n cv[0] = v.red;\n cv[1] = v.green;\n cv[2] = v.blue;\n \n gl.uniform3f(ud[\"${name}\"].location, v.red, v.green, v.blue)\n }`,\n codeUbo: (name: string): string =>\n `\n v = uv.${name};\n\n data[offset] = v.red;\n data[offset+1] = v.green;\n data[offset+2] = v.blue;\n `\n },\n\n // a caching layer for vec4 uploading\n {\n test: (data: any): boolean =>\n data.type === 'vec4' && data.size === 1 && !data.isArray,\n code: (name: string): string =>\n `\n cv = ud[\"${name}\"].value;\n v = uv[\"${name}\"];\n\n if(cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n\n gl.uniform4f(ud[\"${name}\"].location, v[0], v[1], v[2], v[3])\n }`,\n },\n];\n\n","import { uniformParsers } from './uniformParsers';\n\nimport type { Dict } from '@pixi/utils';\nimport type { UniformGroup } from '../UniformGroup';\n\nexport type UniformsSyncCallback = (...args: any[]) => void;\n\n// cu = Cached value's uniform data field\n// cv = Cached value\n// v = value to upload\n// ud = uniformData\n// uv = uniformValue\n// l = location\nconst GLSL_TO_SINGLE_SETTERS_CACHED: Dict = {\n\n float: `\n if (cv !== v)\n {\n cu.value = v;\n gl.uniform1f(location, v);\n }`,\n\n vec2: `\n if (cv[0] !== v[0] || cv[1] !== v[1])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n\n gl.uniform2f(location, v[0], v[1])\n }`,\n\n vec3: `\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n\n gl.uniform3f(location, v[0], v[1], v[2])\n }`,\n\n vec4: `\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n\n gl.uniform4f(location, v[0], v[1], v[2], v[3]);\n }`,\n\n int: `\n if (cv !== v)\n {\n cu.value = v;\n\n gl.uniform1i(location, v);\n }`,\n ivec2: `\n if (cv[0] !== v[0] || cv[1] !== v[1])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n\n gl.uniform2i(location, v[0], v[1]);\n }`,\n ivec3: `\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n\n gl.uniform3i(location, v[0], v[1], v[2]);\n }`,\n ivec4: `\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n\n gl.uniform4i(location, v[0], v[1], v[2], v[3]);\n }`,\n\n uint: `\n if (cv !== v)\n {\n cu.value = v;\n\n gl.uniform1ui(location, v);\n }`,\n uvec2: `\n if (cv[0] !== v[0] || cv[1] !== v[1])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n\n gl.uniform2ui(location, v[0], v[1]);\n }`,\n uvec3: `\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n\n gl.uniform3ui(location, v[0], v[1], v[2]);\n }`,\n uvec4: `\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n\n gl.uniform4ui(location, v[0], v[1], v[2], v[3]);\n }`,\n\n bool: `\n if (cv !== v)\n {\n cu.value = v;\n gl.uniform1i(location, v);\n }`,\n bvec2: `\n if (cv[0] != v[0] || cv[1] != v[1])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n\n gl.uniform2i(location, v[0], v[1]);\n }`,\n bvec3: `\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n\n gl.uniform3i(location, v[0], v[1], v[2]);\n }`,\n bvec4: `\n if (cv[0] !== v[0] || cv[1] !== v[1] || cv[2] !== v[2] || cv[3] !== v[3])\n {\n cv[0] = v[0];\n cv[1] = v[1];\n cv[2] = v[2];\n cv[3] = v[3];\n\n gl.uniform4i(location, v[0], v[1], v[2], v[3]);\n }`,\n\n mat2: 'gl.uniformMatrix2fv(location, false, v)',\n mat3: 'gl.uniformMatrix3fv(location, false, v)',\n mat4: 'gl.uniformMatrix4fv(location, false, v)',\n\n sampler2D: `\n if (cv !== v)\n {\n cu.value = v;\n\n gl.uniform1i(location, v);\n }`,\n samplerCube: `\n if (cv !== v)\n {\n cu.value = v;\n\n gl.uniform1i(location, v);\n }`,\n sampler2DArray: `\n if (cv !== v)\n {\n cu.value = v;\n\n gl.uniform1i(location, v);\n }`,\n};\n\nconst GLSL_TO_ARRAY_SETTERS: Dict = {\n\n float: `gl.uniform1fv(location, v)`,\n\n vec2: `gl.uniform2fv(location, v)`,\n vec3: `gl.uniform3fv(location, v)`,\n vec4: 'gl.uniform4fv(location, v)',\n\n mat4: 'gl.uniformMatrix4fv(location, false, v)',\n mat3: 'gl.uniformMatrix3fv(location, false, v)',\n mat2: 'gl.uniformMatrix2fv(location, false, v)',\n\n int: 'gl.uniform1iv(location, v)',\n ivec2: 'gl.uniform2iv(location, v)',\n ivec3: 'gl.uniform3iv(location, v)',\n ivec4: 'gl.uniform4iv(location, v)',\n\n uint: 'gl.uniform1uiv(location, v)',\n uvec2: 'gl.uniform2uiv(location, v)',\n uvec3: 'gl.uniform3uiv(location, v)',\n uvec4: 'gl.uniform4uiv(location, v)',\n\n bool: 'gl.uniform1iv(location, v)',\n bvec2: 'gl.uniform2iv(location, v)',\n bvec3: 'gl.uniform3iv(location, v)',\n bvec4: 'gl.uniform4iv(location, v)',\n\n sampler2D: 'gl.uniform1iv(location, v)',\n samplerCube: 'gl.uniform1iv(location, v)',\n sampler2DArray: 'gl.uniform1iv(location, v)',\n};\n\nexport function generateUniformsSync(group: UniformGroup, uniformData: Dict): UniformsSyncCallback\n{\n const funcFragments = [`\n var v = null;\n var cv = null;\n var cu = null;\n var t = 0;\n var gl = renderer.gl;\n `];\n\n for (const i in group.uniforms)\n {\n const data = uniformData[i];\n\n if (!data)\n {\n if (group.uniforms[i]?.group === true) // strict check to desambiguate from Array.group\n {\n if (group.uniforms[i].ubo)\n {\n funcFragments.push(`\n renderer.shader.syncUniformBufferGroup(uv.${i}, '${i}');\n `);\n }\n else\n {\n funcFragments.push(`\n renderer.shader.syncUniformGroup(uv.${i}, syncData);\n `);\n }\n }\n\n continue;\n }\n\n const uniform = group.uniforms[i];\n\n let parsed = false;\n\n for (let j = 0; j < uniformParsers.length; j++)\n {\n if (uniformParsers[j].test(data, uniform))\n {\n funcFragments.push(uniformParsers[j].code(i, uniform));\n parsed = true;\n\n break;\n }\n }\n\n if (!parsed)\n {\n const templateType = data.size === 1 && !data.isArray ? GLSL_TO_SINGLE_SETTERS_CACHED : GLSL_TO_ARRAY_SETTERS;\n const template = templateType[data.type].replace('location', `ud[\"${i}\"].location`);\n\n funcFragments.push(`\n cu = ud[\"${i}\"];\n cv = cu.value;\n v = uv[\"${i}\"];\n ${template};`);\n }\n }\n\n /*\n * the introduction of syncData is to solve an issue where textures in uniform groups are not set correctly\n * the texture count was always starting from 0 in each group. This needs to increment each time a texture is used\n * no matter which group is being used\n *\n */\n // eslint-disable-next-line no-new-func\n return new Function('ud', 'uv', 'renderer', 'syncData', funcFragments.join('\\n')) as UniformsSyncCallback;\n}\n","import { ENV } from '@pixi/constants';\nimport { settings } from '@pixi/settings';\n\nconst unknownContext = {};\nlet context: WebGLRenderingContext | WebGL2RenderingContext = unknownContext as any;\n\n/**\n * returns a little WebGL context to use for program inspection.\n * @static\n * @private\n * @returns {WebGLRenderingContext} a gl context to test with\n */\nexport function getTestContext(): WebGLRenderingContext | WebGL2RenderingContext\n{\n if (context === unknownContext || context?.isContextLost())\n {\n const canvas = settings.ADAPTER.createCanvas();\n\n let gl: WebGLRenderingContext | WebGL2RenderingContext;\n\n if (settings.PREFER_ENV >= ENV.WEBGL2)\n {\n gl = canvas.getContext('webgl2', {});\n }\n\n if (!gl)\n {\n gl = (canvas.getContext('webgl', {})\n || (canvas.getContext('experimental-webgl', {}) as WebGLRenderingContext));\n\n if (!gl)\n {\n // fail, not able to get a context\n gl = null;\n }\n else\n {\n // for shader testing..\n gl.getExtension('WEBGL_draw_buffers');\n }\n }\n\n context = gl;\n }\n\n return context;\n}\n","import { PRECISION } from '@pixi/constants';\nimport { getTestContext } from './getTestContext';\n\nlet maxFragmentPrecision: PRECISION;\n\nexport function getMaxFragmentPrecision(): PRECISION\n{\n if (!maxFragmentPrecision)\n {\n maxFragmentPrecision = PRECISION.MEDIUM;\n const gl = getTestContext();\n\n if (gl)\n {\n if (gl.getShaderPrecisionFormat)\n {\n const shaderFragment = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT);\n\n if (shaderFragment)\n {\n maxFragmentPrecision = shaderFragment.precision ? PRECISION.HIGH : PRECISION.MEDIUM;\n }\n }\n }\n }\n\n return maxFragmentPrecision;\n}\n","import type { Dict } from '@pixi/utils';\n\nconst GLSL_TO_SIZE: Dict = {\n float: 1,\n vec2: 2,\n vec3: 3,\n vec4: 4,\n\n int: 1,\n ivec2: 2,\n ivec3: 3,\n ivec4: 4,\n\n uint: 1,\n uvec2: 2,\n uvec3: 3,\n uvec4: 4,\n\n bool: 1,\n bvec2: 2,\n bvec3: 3,\n bvec4: 4,\n\n mat2: 4,\n mat3: 9,\n mat4: 16,\n\n sampler2D: 1,\n};\n\n/**\n * @private\n * @method mapSize\n * @memberof PIXI.glCore.shader\n * @param {string} type\n */\nexport function mapSize(type: string): number\n{\n return GLSL_TO_SIZE[type];\n}\n","import type { Dict } from '@pixi/utils';\n\nlet GL_TABLE: Dict = null;\n\nconst GL_TO_GLSL_TYPES: Dict = {\n FLOAT: 'float',\n FLOAT_VEC2: 'vec2',\n FLOAT_VEC3: 'vec3',\n FLOAT_VEC4: 'vec4',\n\n INT: 'int',\n INT_VEC2: 'ivec2',\n INT_VEC3: 'ivec3',\n INT_VEC4: 'ivec4',\n\n UNSIGNED_INT: 'uint',\n UNSIGNED_INT_VEC2: 'uvec2',\n UNSIGNED_INT_VEC3: 'uvec3',\n UNSIGNED_INT_VEC4: 'uvec4',\n\n BOOL: 'bool',\n BOOL_VEC2: 'bvec2',\n BOOL_VEC3: 'bvec3',\n BOOL_VEC4: 'bvec4',\n\n FLOAT_MAT2: 'mat2',\n FLOAT_MAT3: 'mat3',\n FLOAT_MAT4: 'mat4',\n\n SAMPLER_2D: 'sampler2D',\n INT_SAMPLER_2D: 'sampler2D',\n UNSIGNED_INT_SAMPLER_2D: 'sampler2D',\n SAMPLER_CUBE: 'samplerCube',\n INT_SAMPLER_CUBE: 'samplerCube',\n UNSIGNED_INT_SAMPLER_CUBE: 'samplerCube',\n SAMPLER_2D_ARRAY: 'sampler2DArray',\n INT_SAMPLER_2D_ARRAY: 'sampler2DArray',\n UNSIGNED_INT_SAMPLER_2D_ARRAY: 'sampler2DArray',\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function mapType(gl: any, type: number): string\n{\n if (!GL_TABLE)\n {\n const typeNames = Object.keys(GL_TO_GLSL_TYPES);\n\n GL_TABLE = {};\n\n for (let i = 0; i < typeNames.length; ++i)\n {\n const tn = typeNames[i];\n\n GL_TABLE[gl[tn]] = GL_TO_GLSL_TYPES[tn];\n }\n }\n\n return GL_TABLE[type];\n}\n","import { PRECISION } from '@pixi/constants';\n\n/**\n * Sets the float precision on the shader, ensuring the device supports the request precision.\n * If the precision is already present, it just ensures that the device is able to handle it.\n * @private\n * @param {string} src - The shader source\n * @param {PIXI.PRECISION} requestedPrecision - The request float precision of the shader.\n * @param {PIXI.PRECISION} maxSupportedPrecision - The maximum precision the shader supports.\n * @returns {string} modified shader source\n */\nexport function setPrecision(src: string, requestedPrecision: PRECISION, maxSupportedPrecision: PRECISION): string\n{\n if (src.substring(0, 9) !== 'precision')\n {\n // no precision supplied, so PixiJS will add the requested level.\n let precision = requestedPrecision;\n\n // If highp is requested but not supported, downgrade precision to a level all devices support.\n if (requestedPrecision === PRECISION.HIGH && maxSupportedPrecision !== PRECISION.HIGH)\n {\n precision = PRECISION.MEDIUM;\n }\n\n return `precision ${precision} float;\\n${src}`;\n }\n else if (maxSupportedPrecision !== PRECISION.HIGH && src.substring(0, 15) === 'precision highp')\n {\n // precision was supplied, but at a level this device does not support, so downgrading to mediump.\n return src.replace('precision highp', 'precision mediump');\n }\n\n return src;\n}\n","import { PRECISION } from '@pixi/constants';\nimport { isMobile, ProgramCache } from '@pixi/utils';\nimport defaultFragment from './defaultProgram.frag';\nimport defaultVertex from './defaultProgram.vert';\nimport { getMaxFragmentPrecision, setPrecision } from './utils';\n\nimport type { GLProgram } from './GLProgram';\n\nlet UID = 0;\n\nconst nameCache: { [key: string]: number } = {};\n\nexport interface IAttributeData\n{\n type: string;\n size: number;\n location: number;\n name: string;\n}\n\nexport interface IUniformData\n{\n index: number;\n type: string;\n size: number;\n isArray: boolean;\n value: any;\n name: string;\n}\n\nexport interface IProgramExtraData\n{\n transformFeedbackVaryings?: {\n names: string[],\n bufferMode: 'separate' | 'interleaved'\n }\n}\n\n/**\n * Helper class to create a shader program.\n * @memberof PIXI\n */\nexport class Program\n{\n /**\n * Default specify float precision in vertex shader.\n * @static\n * @type {PIXI.PRECISION}\n * @default PIXI.PRECISION.HIGH\n */\n public static defaultVertexPrecision: PRECISION = PRECISION.HIGH;\n\n /**\n * Default specify float precision in fragment shader.\n * iOS is best set at highp due to https://github.com/pixijs/pixijs/issues/3742\n * @static\n * @type {PIXI.PRECISION}\n * @default PIXI.PRECISION.MEDIUM\n */\n public static defaultFragmentPrecision: PRECISION = isMobile.apple.device\n ? PRECISION.HIGH\n : PRECISION.MEDIUM;\n\n public id: number;\n\n /** Source code for the vertex shader. */\n public vertexSrc: string;\n\n /** Source code for the fragment shader. */\n public fragmentSrc: string;\n\n nameCache: any;\n glPrograms: { [ key: number ]: GLProgram};\n syncUniforms: any;\n\n /** Assigned when a program is first bound to the shader system. */\n attributeData: { [key: string]: IAttributeData};\n\n /** Assigned when a program is first bound to the shader system. */\n uniformData: {[key: string]: IUniformData};\n\n extra: IProgramExtraData = {};\n\n /**\n * @param vertexSrc - The source of the vertex shader.\n * @param fragmentSrc - The source of the fragment shader.\n * @param name - Name for shader\n * @param extra - Extra data for shader\n */\n constructor(vertexSrc?: string, fragmentSrc?: string, name = 'pixi-shader', extra: IProgramExtraData = {})\n {\n this.id = UID++;\n this.vertexSrc = vertexSrc || Program.defaultVertexSrc;\n this.fragmentSrc = fragmentSrc || Program.defaultFragmentSrc;\n\n this.vertexSrc = this.vertexSrc.trim();\n this.fragmentSrc = this.fragmentSrc.trim();\n\n this.extra = extra;\n\n if (this.vertexSrc.substring(0, 8) !== '#version')\n {\n name = name.replace(/\\s+/g, '-');\n\n if (nameCache[name])\n {\n nameCache[name]++;\n name += `-${nameCache[name]}`;\n }\n else\n {\n nameCache[name] = 1;\n }\n\n this.vertexSrc = `#define SHADER_NAME ${name}\\n${this.vertexSrc}`;\n this.fragmentSrc = `#define SHADER_NAME ${name}\\n${this.fragmentSrc}`;\n\n this.vertexSrc = setPrecision(\n this.vertexSrc,\n Program.defaultVertexPrecision,\n PRECISION.HIGH\n );\n this.fragmentSrc = setPrecision(\n this.fragmentSrc,\n Program.defaultFragmentPrecision,\n getMaxFragmentPrecision()\n );\n }\n\n // currently this does not extract structs only default types\n // this is where we store shader references..\n this.glPrograms = {};\n\n this.syncUniforms = null;\n }\n\n /**\n * The default vertex shader source.\n * @readonly\n */\n static get defaultVertexSrc(): string\n {\n return defaultVertex;\n }\n\n /**\n * The default fragment shader source.\n * @readonly\n */\n static get defaultFragmentSrc(): string\n {\n return defaultFragment;\n }\n\n /**\n * A short hand function to create a program based of a vertex and fragment shader.\n *\n * This method will also check to see if there is a cached program.\n * @param vertexSrc - The source of the vertex shader.\n * @param fragmentSrc - The source of the fragment shader.\n * @param name - Name for shader\n * @returns A shiny new PixiJS shader program!\n */\n static from(vertexSrc?: string, fragmentSrc?: string, name?: string): Program\n {\n const key = vertexSrc + fragmentSrc;\n\n let program = ProgramCache[key];\n\n if (!program)\n {\n ProgramCache[key] = program = new Program(vertexSrc, fragmentSrc, name);\n }\n\n return program;\n }\n}\n","import { BUFFER_TYPE } from '@pixi/constants';\nimport { Buffer } from '../geometry/Buffer';\n\nimport type { Dict } from '@pixi/utils';\nimport type { UniformsSyncCallback } from './utils';\n\nlet UID = 0;\n\n/**\n * Uniform group holds uniform map and some ID's for work\n *\n * `UniformGroup` has two modes:\n *\n * 1: Normal mode\n * Normal mode will upload the uniforms with individual function calls as required\n *\n * 2: Uniform buffer mode\n * This mode will treat the uniforms as a uniform buffer. You can pass in either a buffer that you manually handle, or\n * or a generic object that PixiJS will automatically map to a buffer for you.\n * For maximum benefits, make Ubo UniformGroups static, and only update them each frame.\n *\n * Rules of UBOs:\n * - UBOs only work with WebGL2, so make sure you have a fallback!\n * - Only floats are supported (including vec[2,3,4], mat[2,3,4])\n * - Samplers cannot be used in ubo's (a GPU limitation)\n * - You must ensure that the object you pass in exactly matches in the shader ubo structure.\n * Otherwise, weirdness will ensue!\n * - The name of the ubo object added to the group must match exactly the name of the ubo in the shader.\n *\n * ```glsl\n * // UBO in shader:\n * uniform myCoolData { // Declaring a UBO...\n * mat4 uCoolMatrix;\n * float uFloatyMcFloatFace;\n * };\n * ```\n *\n * ```js\n * // A new Uniform Buffer Object...\n * const myCoolData = new UniformBufferGroup({\n * uCoolMatrix: new Matrix(),\n * uFloatyMcFloatFace: 23,\n * }}\n *\n * // Build a shader...\n * const shader = Shader.from(srcVert, srcFrag, {\n * myCoolData // Name matches the UBO name in the shader. Will be processed accordingly.\n * })\n *\n * ```\n * @memberof PIXI\n */\nexport class UniformGroup>\n{\n /**\n * Uniform values\n * @member {object}\n */\n public readonly uniforms: LAYOUT;\n\n /**\n * Its a group and not a single uniforms.\n * @default true\n */\n public readonly group: boolean;\n\n /**\n * unique id\n * @protected\n */\n public id: number;\n syncUniforms: Dict;\n\n /**\n * Dirty version\n * @protected\n */\n dirtyId: number;\n\n /** Flag for if uniforms wont be changed after creation. */\n static: boolean;\n\n /** Flags whether this group is treated like a uniform buffer object. */\n ubo: boolean;\n buffer?: Buffer;\n autoManage: boolean;\n\n /**\n * @param {object | Buffer} [uniforms] - Custom uniforms to use to augment the built-in ones. Or a pixi buffer.\n * @param isStatic - Uniforms wont be changed after creation.\n * @param isUbo - If true, will treat this uniform group as a uniform buffer object.\n */\n constructor(uniforms: LAYOUT | Buffer, isStatic?: boolean, isUbo?: boolean)\n {\n this.group = true;\n\n // lets generate this when the shader ?\n this.syncUniforms = {};\n this.dirtyId = 0;\n this.id = UID++;\n this.static = !!isStatic;\n this.ubo = !!isUbo;\n\n if (uniforms instanceof Buffer)\n {\n this.buffer = uniforms;\n this.buffer.type = BUFFER_TYPE.UNIFORM_BUFFER;\n this.autoManage = false;\n this.ubo = true;\n }\n else\n {\n this.uniforms = uniforms;\n\n if (this.ubo)\n {\n this.buffer = new Buffer(new Float32Array(1));\n this.buffer.type = BUFFER_TYPE.UNIFORM_BUFFER;\n this.autoManage = true;\n }\n }\n }\n\n update(): void\n {\n this.dirtyId++;\n\n if (!this.autoManage && this.buffer)\n {\n this.buffer.update();\n }\n }\n\n add(name: string, uniforms: Dict, _static?: boolean): void\n {\n if (!this.ubo)\n {\n (this.uniforms as any)[name] = new UniformGroup(uniforms, _static);\n }\n else\n {\n // eslint-disable-next-line max-len\n throw new Error('[UniformGroup] uniform groups in ubo mode cannot be modified, or have uniform groups nested in them');\n }\n }\n\n static from(uniforms: Dict | Buffer, _static?: boolean, _ubo?: boolean): UniformGroup\n {\n return new UniformGroup(uniforms, _static, _ubo);\n }\n\n /**\n * A short hand function for creating a static UBO UniformGroup.\n * @param uniforms - the ubo item\n * @param _static - should this be updated each time it is used? defaults to true here!\n */\n static uboFrom(uniforms: Dict | Buffer, _static?: boolean): UniformGroup\n {\n return new UniformGroup(uniforms, _static ?? true, true);\n }\n}\n","import { Runner } from '@pixi/runner';\nimport { Program } from './Program';\nimport { UniformGroup } from './UniformGroup';\n\nimport type { Dict } from '@pixi/utils';\n\n/**\n * A helper class for shaders.\n * @memberof PIXI\n */\nexport class Shader\n{\n /** Program that the shader uses. */\n public program: Program;\n public uniformGroup: UniformGroup;\n\n /**\n * Used internally to bind uniform buffer objects.\n * @ignore\n */\n uniformBindCount = 0;\n\n disposeRunner: Runner;\n\n /**\n * @param program - The program the shader will use.\n * @param uniforms - Custom uniforms to use to augment the built-in ones.\n */\n constructor(program: Program, uniforms?: Dict)\n {\n this.program = program;\n\n // lets see whats been passed in\n // uniforms should be converted to a uniform group\n if (uniforms)\n {\n if (uniforms instanceof UniformGroup)\n {\n this.uniformGroup = uniforms;\n }\n else\n {\n this.uniformGroup = new UniformGroup(uniforms);\n }\n }\n else\n {\n this.uniformGroup = new UniformGroup({});\n }\n\n this.disposeRunner = new Runner('disposeShader');\n }\n\n // TODO move to shader system..\n checkUniformExists(name: string, group: UniformGroup): boolean\n {\n if (group.uniforms[name])\n {\n return true;\n }\n\n for (const i in group.uniforms)\n {\n const uniform = group.uniforms[i];\n\n if (uniform.group === true) // strict check to desambiguate from Array.group\n {\n if (this.checkUniformExists(name, uniform))\n {\n return true;\n }\n }\n }\n\n return false;\n }\n\n destroy(): void\n {\n // usage count on programs?\n // remove if not used!\n this.uniformGroup = null;\n\n this.disposeRunner.emit(this);\n this.disposeRunner.destroy();\n }\n\n /**\n * Shader uniform values, shortcut for `uniformGroup.uniforms`.\n * @readonly\n */\n get uniforms(): Dict\n {\n return this.uniformGroup.uniforms;\n }\n\n /**\n * A short hand function to create a shader based of a vertex and fragment shader.\n * @param vertexSrc - The source of the vertex shader.\n * @param fragmentSrc - The source of the fragment shader.\n * @param uniforms - Custom uniforms to use to augment the built-in ones.\n * @returns A shiny new PixiJS shader!\n */\n static from(vertexSrc?: string, fragmentSrc?: string, uniforms?: Dict): Shader\n {\n const program = Program.from(vertexSrc, fragmentSrc);\n\n return new Shader(program, uniforms);\n }\n}\n","import { Matrix } from '@pixi/math';\nimport { Program } from '../shader/Program';\nimport { Shader } from '../shader/Shader';\nimport { UniformGroup } from '../shader/UniformGroup';\n\n/**\n * Helper that generates batching multi-texture shader. Use it with your new BatchRenderer\n * @memberof PIXI\n */\nexport class BatchShaderGenerator\n{\n /** Reference to the vertex shader source. */\n public vertexSrc: string;\n\n /** Reference to the fragment shader template. Must contain \"%count%\" and \"%forloop%\". */\n public fragTemplate: string;\n\n programCache: {[key: number]: Program};\n defaultGroupCache: {[key: number]: UniformGroup};\n\n /**\n * @param vertexSrc - Vertex shader\n * @param fragTemplate - Fragment shader template\n */\n constructor(vertexSrc: string, fragTemplate: string)\n {\n this.vertexSrc = vertexSrc;\n this.fragTemplate = fragTemplate;\n\n this.programCache = {};\n this.defaultGroupCache = {};\n\n if (!fragTemplate.includes('%count%'))\n {\n throw new Error('Fragment template must contain \"%count%\".');\n }\n\n if (!fragTemplate.includes('%forloop%'))\n {\n throw new Error('Fragment template must contain \"%forloop%\".');\n }\n }\n\n generateShader(maxTextures: number): Shader\n {\n if (!this.programCache[maxTextures])\n {\n const sampleValues = new Int32Array(maxTextures);\n\n for (let i = 0; i < maxTextures; i++)\n {\n sampleValues[i] = i;\n }\n\n this.defaultGroupCache[maxTextures] = UniformGroup.from({ uSamplers: sampleValues }, true);\n\n let fragmentSrc = this.fragTemplate;\n\n fragmentSrc = fragmentSrc.replace(/%count%/gi, `${maxTextures}`);\n fragmentSrc = fragmentSrc.replace(/%forloop%/gi, this.generateSampleSrc(maxTextures));\n\n this.programCache[maxTextures] = new Program(this.vertexSrc, fragmentSrc);\n }\n\n const uniforms = {\n tint: new Float32Array([1, 1, 1, 1]),\n translationMatrix: new Matrix(),\n default: this.defaultGroupCache[maxTextures],\n };\n\n return new Shader(this.programCache[maxTextures], uniforms);\n }\n\n generateSampleSrc(maxTextures: number): string\n {\n let src = '';\n\n src += '\\n';\n src += '\\n';\n\n for (let i = 0; i < maxTextures; i++)\n {\n if (i > 0)\n {\n src += '\\nelse ';\n }\n\n if (i < maxTextures - 1)\n {\n src += `if(vTextureId < ${i}.5)`;\n }\n\n src += '\\n{';\n src += `\\n\\tcolor = texture2D(uSamplers[${i}], vTextureCoord);`;\n src += '\\n}';\n }\n\n src += '\\n';\n src += '\\n';\n\n return src;\n }\n}\n","import type { BaseTexture } from '../textures/BaseTexture';\n\n/**\n * Used by the batcher to build texture batches.\n * Holds list of textures and their respective locations.\n * @memberof PIXI\n */\nexport class BatchTextureArray\n{\n /** Inside textures array. */\n public elements: BaseTexture[];\n\n /** Respective locations for textures. */\n public ids: number[];\n\n /** Number of filled elements. */\n public count: number;\n\n constructor()\n {\n this.elements = [];\n this.ids = [];\n this.count = 0;\n }\n\n clear(): void\n {\n for (let i = 0; i < this.count; i++)\n {\n this.elements[i] = null;\n }\n this.count = 0;\n }\n}\n","import type { Renderer } from '../Renderer';\nimport type { ISystem } from '../system/ISystem';\n\n/**\n * Base for a common object renderer that can be used as a\n * system renderer plugin.\n * @memberof PIXI\n */\nexport class ObjectRenderer implements ISystem\n{\n /** The renderer this manager works for. */\n protected renderer: Renderer;\n\n /**\n * @param renderer - The renderer this manager works for.\n */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n }\n\n /** Stub method that should be used to empty the current batch by rendering objects now. */\n flush(): void\n {\n // flush!\n }\n\n /** Generic destruction method that frees all resources. This should be called by subclasses. */\n destroy(): void\n {\n this.renderer = null;\n }\n\n /**\n * Stub method that initializes any state required before\n * rendering starts. It is different from the `prerender`\n * signal, which occurs every frame, in that it is called\n * whenever an object requests _this_ renderer specifically.\n */\n start(): void\n {\n // set the shader..\n }\n\n /** Stops the renderer. It should free up any state and become dormant. */\n stop(): void\n {\n this.flush();\n }\n\n /**\n * Keeps the object to render. It doesn't have to be\n * rendered immediately.\n * @param {PIXI.DisplayObject} _object - The object to render.\n */\n render(_object: any): void // eslint-disable-line @typescript-eslint/explicit-module-boundary-types\n {\n // render the object\n }\n}\n","import { Color } from '@pixi/color';\nimport { ENV } from '@pixi/constants';\nimport { extensions, ExtensionType } from '@pixi/extensions';\nimport { settings } from '@pixi/settings';\nimport { deprecation, log2, nextPow2, premultiplyBlendMode } from '@pixi/utils';\nimport { ViewableBuffer } from '../geometry/ViewableBuffer';\nimport { checkMaxIfStatementsInShader } from '../shader/utils/checkMaxIfStatementsInShader';\nimport { State } from '../state/State';\nimport { BaseTexture } from '../textures/BaseTexture';\nimport { BatchDrawCall } from './BatchDrawCall';\nimport { BatchGeometry } from './BatchGeometry';\nimport { BatchShaderGenerator } from './BatchShaderGenerator';\nimport { BatchTextureArray } from './BatchTextureArray';\nimport { canUploadSameBuffer } from './canUploadSameBuffer';\nimport { maxRecommendedTextures } from './maxRecommendedTextures';\nimport { ObjectRenderer } from './ObjectRenderer';\nimport defaultFragment from './texture.frag';\nimport defaultVertex from './texture.vert';\n\nimport type { BLEND_MODES } from '@pixi/constants';\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { Renderer } from '../Renderer';\nimport type { Shader } from '../shader/Shader';\nimport type { Texture } from '../textures/Texture';\n\n/**\n * Interface for elements like Sprite, Mesh etc. for batching.\n * @memberof PIXI\n */\nexport interface IBatchableElement\n{\n _texture: Texture;\n vertexData: Float32Array;\n indices: Uint16Array | Uint32Array | Array;\n uvs: Float32Array;\n worldAlpha: number;\n _tintRGB: number;\n blendMode: BLEND_MODES;\n}\n\n/**\n * Renderer dedicated to drawing and batching sprites.\n *\n * This is the default batch renderer. It buffers objects\n * with texture-based geometries and renders them in\n * batches. It uploads multiple textures to the GPU to\n * reduce to the number of draw calls.\n * @memberof PIXI\n */\nexport class BatchRenderer extends ObjectRenderer\n{\n /**\n * The maximum textures that this device supports.\n * @static\n * @default 32\n */\n public static get defaultMaxTextures(): number\n {\n this._defaultMaxTextures = this._defaultMaxTextures ?? maxRecommendedTextures(32);\n\n return this._defaultMaxTextures;\n }\n public static set defaultMaxTextures(value: number)\n {\n this._defaultMaxTextures = value;\n }\n\n /** @ignore */\n private static _defaultMaxTextures: number;\n\n /**\n * The default sprite batch size.\n *\n * The default aims to balance desktop and mobile devices.\n * @static\n */\n public static defaultBatchSize = 4096;\n\n /**\n * Can we upload the same buffer in a single frame?\n * @static\n */\n public static get canUploadSameBuffer(): boolean\n {\n this._canUploadSameBuffer = this._canUploadSameBuffer ?? canUploadSameBuffer();\n\n return this._canUploadSameBuffer;\n }\n public static set canUploadSameBuffer(value: boolean)\n {\n this._canUploadSameBuffer = value;\n }\n\n /** @ignore */\n private static _canUploadSameBuffer: boolean;\n\n /** @ignore */\n static extension: ExtensionMetadata = {\n name: 'batch',\n type: ExtensionType.RendererPlugin,\n };\n\n /** The WebGL state in which this renderer will work. */\n public readonly state: State;\n\n /**\n * The number of bufferable objects before a flush\n * occurs automatically.\n * @default PIXI.BatchRenderer.defaultBatchSize * 4\n */\n public size: number;\n\n /**\n * Maximum number of textures that can be uploaded to\n * the GPU under the current context. It is initialized\n * properly in `this.contextChange`.\n * @see PIXI.BatchRenderer#contextChange\n * @readonly\n */\n public maxTextures: number;\n\n /**\n * This is used to generate a shader that can\n * color each vertex based on a `aTextureId`\n * attribute that points to an texture in `uSampler`.\n *\n * This enables the objects with different textures\n * to be drawn in the same draw call.\n *\n * You can customize your shader by creating your\n * custom shader generator.\n */\n protected shaderGenerator: BatchShaderGenerator;\n\n /**\n * The class that represents the geometry of objects\n * that are going to be batched with this.\n * @member {object}\n * @default PIXI.BatchGeometry\n */\n protected geometryClass: typeof BatchGeometry;\n\n /**\n * Size of data being buffered per vertex in the\n * attribute buffers (in floats). By default, the\n * batch-renderer plugin uses 6:\n *\n * | aVertexPosition | 2 |\n * |-----------------|---|\n * | aTextureCoords | 2 |\n * | aColor | 1 |\n * | aTextureId | 1 |\n * @default 6\n */\n protected vertexSize: number;\n\n /** Total count of all vertices used by the currently buffered objects. */\n protected _vertexCount: number;\n\n /** Total count of all indices used by the currently buffered objects. */\n protected _indexCount: number;\n\n /**\n * Buffer of objects that are yet to be rendered.\n * @member {PIXI.DisplayObject[]}\n */\n protected _bufferedElements: Array;\n\n /**\n * Data for texture batch builder, helps to save a bit of CPU on a pass.\n * @member {PIXI.BaseTexture[]}\n */\n protected _bufferedTextures: Array;\n\n /** Number of elements that are buffered and are waiting to be flushed. */\n protected _bufferSize: number;\n\n /**\n * This shader is generated by `this.shaderGenerator`.\n *\n * It is generated specifically to handle the required\n * number of textures being batched together.\n */\n protected _shader: Shader;\n\n /**\n * A flush may occur multiple times in a single\n * frame. On iOS devices or when\n * `BatchRenderer.canUploadSameBuffer` is false, the\n * batch renderer does not upload data to the same\n * `WebGLBuffer` for performance reasons.\n *\n * This is the index into `packedGeometries` that points to\n * geometry holding the most recent buffers.\n */\n protected _flushId: number;\n\n /**\n * Pool of `ViewableBuffer` objects that are sorted in\n * order of increasing size. The flush method uses\n * the buffer with the least size above the amount\n * it requires. These are used for passing attributes.\n *\n * The first buffer has a size of 8; each subsequent\n * buffer has double capacity of its previous.\n * @member {PIXI.ViewableBuffer[]}\n * @see PIXI.BatchRenderer#getAttributeBuffer\n */\n protected _aBuffers: Array;\n\n /**\n * Pool of `Uint16Array` objects that are sorted in\n * order of increasing size. The flush method uses\n * the buffer with the least size above the amount\n * it requires. These are used for passing indices.\n *\n * The first buffer has a size of 12; each subsequent\n * buffer has double capacity of its previous.\n * @member {Uint16Array[]}\n * @see PIXI.BatchRenderer#getIndexBuffer\n */\n protected _iBuffers: Array;\n protected _dcIndex: number;\n protected _aIndex: number;\n protected _iIndex: number;\n protected _attributeBuffer: ViewableBuffer;\n protected _indexBuffer: Uint16Array;\n protected _tempBoundTextures: BaseTexture[];\n\n /**\n * Pool of `this.geometryClass` geometry objects\n * that store buffers. They are used to pass data\n * to the shader on each draw call.\n *\n * These are never re-allocated again, unless a\n * context change occurs; however, the pool may\n * be expanded if required.\n * @member {PIXI.Geometry[]}\n * @see PIXI.BatchRenderer.contextChange\n */\n private _packedGeometries: Array;\n\n /**\n * Size of `this._packedGeometries`. It can be expanded\n * if more than `this._packedGeometryPoolSize` flushes\n * occur in a single frame.\n */\n private _packedGeometryPoolSize: number;\n\n /**\n * This will hook onto the renderer's `contextChange`\n * and `prerender` signals.\n * @param {PIXI.Renderer} renderer - The renderer this works for.\n */\n constructor(renderer: Renderer)\n {\n super(renderer);\n\n this.setShaderGenerator();\n this.geometryClass = BatchGeometry;\n this.vertexSize = 6;\n this.state = State.for2d();\n this.size = BatchRenderer.defaultBatchSize * 4;\n this._vertexCount = 0;\n this._indexCount = 0;\n this._bufferedElements = [];\n this._bufferedTextures = [];\n this._bufferSize = 0;\n this._shader = null;\n this._packedGeometries = [];\n this._packedGeometryPoolSize = 2;\n this._flushId = 0;\n this._aBuffers = {} as any;\n this._iBuffers = {} as any;\n\n this.maxTextures = 1;\n\n this.renderer.on('prerender', this.onPrerender, this);\n renderer.runners.contextChange.add(this);\n\n this._dcIndex = 0;\n this._aIndex = 0;\n this._iIndex = 0;\n this._attributeBuffer = null;\n this._indexBuffer = null;\n this._tempBoundTextures = [];\n }\n\n /**\n * @see PIXI.BatchRenderer#maxTextures\n * @deprecated since 7.1.0\n * @readonly\n */\n get MAX_TEXTURES(): number\n {\n if (process.env.DEBUG)\n {\n deprecation('7.1.0', 'BatchRenderer#MAX_TEXTURES renamed to BatchRenderer#maxTextures');\n }\n\n return this.maxTextures;\n }\n\n /**\n * The default vertex shader source\n * @readonly\n */\n static get defaultVertexSrc(): string\n {\n return defaultVertex;\n }\n\n /**\n * The default fragment shader source\n * @readonly\n */\n static get defaultFragmentTemplate(): string\n {\n return defaultFragment;\n }\n\n /**\n * Set the shader generator.\n * @param {object} [options]\n * @param {string} [options.vertex=PIXI.BatchRenderer.defaultVertexSrc] - Vertex shader source\n * @param {string} [options.fragment=PIXI.BatchRenderer.defaultFragmentTemplate] - Fragment shader template\n */\n public setShaderGenerator({\n vertex = BatchRenderer.defaultVertexSrc,\n fragment = BatchRenderer.defaultFragmentTemplate\n }: { vertex?: string, fragment?: string } = {}): void\n {\n this.shaderGenerator = new BatchShaderGenerator(vertex, fragment);\n }\n\n /**\n * Handles the `contextChange` signal.\n *\n * It calculates `this.maxTextures` and allocating the packed-geometry object pool.\n */\n contextChange(): void\n {\n const gl = this.renderer.gl;\n\n if (settings.PREFER_ENV === ENV.WEBGL_LEGACY)\n {\n this.maxTextures = 1;\n }\n else\n {\n // step 1: first check max textures the GPU can handle.\n this.maxTextures = Math.min(\n gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS),\n BatchRenderer.defaultMaxTextures);\n\n // step 2: check the maximum number of if statements the shader can have too..\n this.maxTextures = checkMaxIfStatementsInShader(\n this.maxTextures, gl);\n }\n\n this._shader = this.shaderGenerator.generateShader(this.maxTextures);\n\n // we use the second shader as the first one depending on your browser\n // may omit aTextureId as it is not used by the shader so is optimized out.\n for (let i = 0; i < this._packedGeometryPoolSize; i++)\n {\n /* eslint-disable max-len */\n this._packedGeometries[i] = new (this.geometryClass)();\n }\n\n this.initFlushBuffers();\n }\n\n /** Makes sure that static and dynamic flush pooled objects have correct dimensions. */\n initFlushBuffers(): void\n {\n const {\n _drawCallPool,\n _textureArrayPool,\n } = BatchRenderer;\n // max draw calls\n const MAX_SPRITES = this.size / 4;\n // max texture arrays\n const MAX_TA = Math.floor(MAX_SPRITES / this.maxTextures) + 1;\n\n while (_drawCallPool.length < MAX_SPRITES)\n {\n _drawCallPool.push(new BatchDrawCall());\n }\n while (_textureArrayPool.length < MAX_TA)\n {\n _textureArrayPool.push(new BatchTextureArray());\n }\n for (let i = 0; i < this.maxTextures; i++)\n {\n this._tempBoundTextures[i] = null;\n }\n }\n\n /** Handles the `prerender` signal. It ensures that flushes start from the first geometry object again. */\n onPrerender(): void\n {\n this._flushId = 0;\n }\n\n /**\n * Buffers the \"batchable\" object. It need not be rendered immediately.\n * @param {PIXI.DisplayObject} element - the element to render when\n * using this renderer\n */\n render(element: IBatchableElement): void\n {\n if (!element._texture.valid)\n {\n return;\n }\n\n if (this._vertexCount + (element.vertexData.length / 2) > this.size)\n {\n this.flush();\n }\n\n this._vertexCount += element.vertexData.length / 2;\n this._indexCount += element.indices.length;\n this._bufferedTextures[this._bufferSize] = element._texture.baseTexture;\n this._bufferedElements[this._bufferSize++] = element;\n }\n\n buildTexturesAndDrawCalls(): void\n {\n const {\n _bufferedTextures: textures,\n maxTextures,\n } = this;\n const textureArrays = BatchRenderer._textureArrayPool;\n const batch = this.renderer.batch;\n const boundTextures = this._tempBoundTextures;\n const touch = this.renderer.textureGC.count;\n\n let TICK = ++BaseTexture._globalBatch;\n let countTexArrays = 0;\n let texArray = textureArrays[0];\n let start = 0;\n\n batch.copyBoundTextures(boundTextures, maxTextures);\n\n for (let i = 0; i < this._bufferSize; ++i)\n {\n const tex = textures[i];\n\n textures[i] = null;\n if (tex._batchEnabled === TICK)\n {\n continue;\n }\n\n if (texArray.count >= maxTextures)\n {\n batch.boundArray(texArray, boundTextures, TICK, maxTextures);\n this.buildDrawCalls(texArray, start, i);\n start = i;\n texArray = textureArrays[++countTexArrays];\n ++TICK;\n }\n\n tex._batchEnabled = TICK;\n tex.touched = touch;\n texArray.elements[texArray.count++] = tex;\n }\n\n if (texArray.count > 0)\n {\n batch.boundArray(texArray, boundTextures, TICK, maxTextures);\n this.buildDrawCalls(texArray, start, this._bufferSize);\n ++countTexArrays;\n ++TICK;\n }\n\n // Clean-up\n\n for (let i = 0; i < boundTextures.length; i++)\n {\n boundTextures[i] = null;\n }\n BaseTexture._globalBatch = TICK;\n }\n\n /**\n * Populating drawcalls for rendering\n * @param texArray\n * @param start\n * @param finish\n */\n buildDrawCalls(texArray: BatchTextureArray, start: number, finish: number): void\n {\n const {\n _bufferedElements: elements,\n _attributeBuffer,\n _indexBuffer,\n vertexSize,\n } = this;\n const drawCalls = BatchRenderer._drawCallPool;\n\n let dcIndex = this._dcIndex;\n let aIndex = this._aIndex;\n let iIndex = this._iIndex;\n\n let drawCall = drawCalls[dcIndex];\n\n drawCall.start = this._iIndex;\n drawCall.texArray = texArray;\n\n for (let i = start; i < finish; ++i)\n {\n const sprite = elements[i];\n const tex = sprite._texture.baseTexture;\n const spriteBlendMode = premultiplyBlendMode[\n tex.alphaMode ? 1 : 0][sprite.blendMode];\n\n elements[i] = null;\n\n if (start < i && drawCall.blend !== spriteBlendMode)\n {\n drawCall.size = iIndex - drawCall.start;\n start = i;\n drawCall = drawCalls[++dcIndex];\n drawCall.texArray = texArray;\n drawCall.start = iIndex;\n }\n\n this.packInterleavedGeometry(sprite, _attributeBuffer, _indexBuffer, aIndex, iIndex);\n aIndex += sprite.vertexData.length / 2 * vertexSize;\n iIndex += sprite.indices.length;\n\n drawCall.blend = spriteBlendMode;\n }\n\n if (start < finish)\n {\n drawCall.size = iIndex - drawCall.start;\n ++dcIndex;\n }\n\n this._dcIndex = dcIndex;\n this._aIndex = aIndex;\n this._iIndex = iIndex;\n }\n\n /**\n * Bind textures for current rendering\n * @param texArray\n */\n bindAndClearTexArray(texArray: BatchTextureArray): void\n {\n const textureSystem = this.renderer.texture;\n\n for (let j = 0; j < texArray.count; j++)\n {\n textureSystem.bind(texArray.elements[j], texArray.ids[j]);\n texArray.elements[j] = null;\n }\n texArray.count = 0;\n }\n\n updateGeometry(): void\n {\n const {\n _packedGeometries: packedGeometries,\n _attributeBuffer: attributeBuffer,\n _indexBuffer: indexBuffer,\n } = this;\n\n if (!BatchRenderer.canUploadSameBuffer)\n { /* Usually on iOS devices, where the browser doesn't\n like uploads to the same buffer in a single frame. */\n if (this._packedGeometryPoolSize <= this._flushId)\n {\n this._packedGeometryPoolSize++;\n packedGeometries[this._flushId] = new (this.geometryClass)();\n }\n\n packedGeometries[this._flushId]._buffer.update(attributeBuffer.rawBinaryData);\n packedGeometries[this._flushId]._indexBuffer.update(indexBuffer);\n\n this.renderer.geometry.bind(packedGeometries[this._flushId]);\n this.renderer.geometry.updateBuffers();\n this._flushId++;\n }\n else\n {\n // lets use the faster option, always use buffer number 0\n packedGeometries[this._flushId]._buffer.update(attributeBuffer.rawBinaryData);\n packedGeometries[this._flushId]._indexBuffer.update(indexBuffer);\n\n this.renderer.geometry.updateBuffers();\n }\n }\n\n drawBatches(): void\n {\n const dcCount = this._dcIndex;\n const { gl, state: stateSystem } = this.renderer;\n const drawCalls = BatchRenderer._drawCallPool;\n\n let curTexArray = null;\n\n // Upload textures and do the draw calls\n for (let i = 0; i < dcCount; i++)\n {\n const { texArray, type, size, start, blend } = drawCalls[i];\n\n if (curTexArray !== texArray)\n {\n curTexArray = texArray;\n this.bindAndClearTexArray(texArray);\n }\n\n this.state.blendMode = blend;\n stateSystem.set(this.state);\n gl.drawElements(type, size, gl.UNSIGNED_SHORT, start * 2);\n }\n }\n\n /** Renders the content _now_ and empties the current batch. */\n flush(): void\n {\n if (this._vertexCount === 0)\n {\n return;\n }\n\n this._attributeBuffer = this.getAttributeBuffer(this._vertexCount);\n this._indexBuffer = this.getIndexBuffer(this._indexCount);\n this._aIndex = 0;\n this._iIndex = 0;\n this._dcIndex = 0;\n\n this.buildTexturesAndDrawCalls();\n this.updateGeometry();\n this.drawBatches();\n\n // reset elements buffer for the next flush\n this._bufferSize = 0;\n this._vertexCount = 0;\n this._indexCount = 0;\n }\n\n /** Starts a new sprite batch. */\n start(): void\n {\n this.renderer.state.set(this.state);\n\n this.renderer.texture.ensureSamplerType(this.maxTextures);\n\n this.renderer.shader.bind(this._shader);\n\n if (BatchRenderer.canUploadSameBuffer)\n {\n // bind buffer #0, we don't need others\n this.renderer.geometry.bind(this._packedGeometries[this._flushId]);\n }\n }\n\n /** Stops and flushes the current batch. */\n stop(): void\n {\n this.flush();\n }\n\n /** Destroys this `BatchRenderer`. It cannot be used again. */\n destroy(): void\n {\n for (let i = 0; i < this._packedGeometryPoolSize; i++)\n {\n if (this._packedGeometries[i])\n {\n this._packedGeometries[i].destroy();\n }\n }\n\n this.renderer.off('prerender', this.onPrerender, this);\n\n this._aBuffers = null;\n this._iBuffers = null;\n this._packedGeometries = null;\n this._attributeBuffer = null;\n this._indexBuffer = null;\n\n if (this._shader)\n {\n this._shader.destroy();\n this._shader = null;\n }\n\n super.destroy();\n }\n\n /**\n * Fetches an attribute buffer from `this._aBuffers` that can hold atleast `size` floats.\n * @param size - minimum capacity required\n * @returns - buffer than can hold atleast `size` floats\n */\n getAttributeBuffer(size: number): ViewableBuffer\n {\n // 8 vertices is enough for 2 quads\n const roundedP2 = nextPow2(Math.ceil(size / 8));\n const roundedSizeIndex = log2(roundedP2);\n const roundedSize = roundedP2 * 8;\n\n if (this._aBuffers.length <= roundedSizeIndex)\n {\n this._iBuffers.length = roundedSizeIndex + 1;\n }\n\n let buffer = this._aBuffers[roundedSize];\n\n if (!buffer)\n {\n this._aBuffers[roundedSize] = buffer = new ViewableBuffer(roundedSize * this.vertexSize * 4);\n }\n\n return buffer;\n }\n\n /**\n * Fetches an index buffer from `this._iBuffers` that can\n * have at least `size` capacity.\n * @param size - minimum required capacity\n * @returns - buffer that can fit `size` indices.\n */\n getIndexBuffer(size: number): Uint16Array\n {\n // 12 indices is enough for 2 quads\n const roundedP2 = nextPow2(Math.ceil(size / 12));\n const roundedSizeIndex = log2(roundedP2);\n const roundedSize = roundedP2 * 12;\n\n if (this._iBuffers.length <= roundedSizeIndex)\n {\n this._iBuffers.length = roundedSizeIndex + 1;\n }\n\n let buffer = this._iBuffers[roundedSizeIndex];\n\n if (!buffer)\n {\n this._iBuffers[roundedSizeIndex] = buffer = new Uint16Array(roundedSize);\n }\n\n return buffer;\n }\n\n /**\n * Takes the four batching parameters of `element`, interleaves\n * and pushes them into the batching attribute/index buffers given.\n *\n * It uses these properties: `vertexData` `uvs`, `textureId` and\n * `indicies`. It also uses the \"tint\" of the base-texture, if\n * present.\n * @param {PIXI.DisplayObject} element - element being rendered\n * @param attributeBuffer - attribute buffer.\n * @param indexBuffer - index buffer\n * @param aIndex - number of floats already in the attribute buffer\n * @param iIndex - number of indices already in `indexBuffer`\n */\n packInterleavedGeometry(element: IBatchableElement, attributeBuffer: ViewableBuffer, indexBuffer: Uint16Array,\n aIndex: number, iIndex: number): void\n {\n const {\n uint32View,\n float32View,\n } = attributeBuffer;\n\n const packedVertices = aIndex / this.vertexSize;\n const uvs = element.uvs;\n const indicies = element.indices;\n const vertexData = element.vertexData;\n const textureId = element._texture.baseTexture._batchLocation;\n\n const alpha = Math.min(element.worldAlpha, 1.0);\n const argb = Color.shared\n .setValue(element._tintRGB)\n .toPremultiplied(alpha, element._texture.baseTexture.alphaMode > 0);\n\n // lets not worry about tint! for now..\n for (let i = 0; i < vertexData.length; i += 2)\n {\n float32View[aIndex++] = vertexData[i];\n float32View[aIndex++] = vertexData[i + 1];\n float32View[aIndex++] = uvs[i];\n float32View[aIndex++] = uvs[i + 1];\n uint32View[aIndex++] = argb;\n float32View[aIndex++] = textureId;\n }\n\n for (let i = 0; i < indicies.length; i++)\n {\n indexBuffer[iIndex++] = packedVertices + indicies[i];\n }\n }\n\n /**\n * Pool of `BatchDrawCall` objects that `flush` used\n * to create \"batches\" of the objects being rendered.\n *\n * These are never re-allocated again.\n * Shared between all batch renderers because it can be only one \"flush\" working at the moment.\n * @member {PIXI.BatchDrawCall[]}\n */\n static _drawCallPool: Array = [];\n\n /**\n * Pool of `BatchDrawCall` objects that `flush` used\n * to create \"batches\" of the objects being rendered.\n *\n * These are never re-allocated again.\n * Shared between all batch renderers because it can be only one \"flush\" working at the moment.\n * @member {PIXI.BatchTextureArray[]}\n */\n static _textureArrayPool: Array = [];\n}\n\n// Install BatchRenderer as default\nextensions.add(BatchRenderer);\n","import { isMobile, settings } from '@pixi/settings';\n\n/**\n * The maximum recommended texture units to use.\n * In theory the bigger the better, and for desktop we'll use as many as we can.\n * But some mobile devices slow down if there is to many branches in the shader.\n * So in practice there seems to be a sweet spot size that varies depending on the device.\n *\n * In v4, all mobile devices were limited to 4 texture units because for this.\n * In v5, we allow all texture units to be used on modern Apple or Android devices.\n * @private\n * @param {number} max\n * @returns {number} The maximum recommended texture units to use.\n */\nexport function maxRecommendedTextures(max: number): number\n{\n let allowMax = true;\n const navigator = settings.ADAPTER.getNavigator();\n\n if (isMobile.tablet || isMobile.phone)\n {\n if (isMobile.apple.device)\n {\n const match = (navigator.userAgent).match(/OS (\\d+)_(\\d+)?/);\n\n if (match)\n {\n const majorVersion = parseInt(match[1], 10);\n\n // Limit texture units on devices below iOS 11, which will be older hardware\n if (majorVersion < 11)\n {\n allowMax = false;\n }\n }\n }\n if (isMobile.android.device)\n {\n const match = (navigator.userAgent).match(/Android\\s([0-9.]*)/);\n\n if (match)\n {\n const majorVersion = parseInt(match[1], 10);\n\n // Limit texture units on devices below Android 7 (Nougat), which will be older hardware\n if (majorVersion < 7)\n {\n allowMax = false;\n }\n }\n }\n }\n\n return allowMax ? max : 4;\n}\n","import { isMobile } from '@pixi/settings';\n\n/**\n * Uploading the same buffer multiple times in a single frame can cause performance issues.\n * Apparent on iOS so only check for that at the moment\n * This check may become more complex if this issue pops up elsewhere.\n * @private\n * @returns {boolean} `true` if the same buffer may be uploaded more than once.\n */\nexport function canUploadSameBuffer(): boolean\n{\n return !isMobile.apple.device;\n}\n","import { MSAA_QUALITY } from '@pixi/constants';\nimport { Program } from '../shader/Program';\nimport { Shader } from '../shader/Shader';\nimport { State } from '../state/State';\nimport defaultFragment from './defaultFilter.frag';\nimport defaultVertex from './defaultFilter.vert';\n\nimport type { BLEND_MODES, CLEAR_MODES } from '@pixi/constants';\nimport type { Dict } from '@pixi/utils';\nimport type { RenderTexture } from '../renderTexture/RenderTexture';\nimport type { FilterState } from './FilterState';\nimport type { FilterSystem } from './FilterSystem';\n\n/**\n * A filter is a special shader that applies post-processing effects to an input texture and writes into an output\n * render-target.\n *\n * {@link https://pixijs.io/examples/#/filters-basic/blur.js Example} of the\n * {@link PIXI.BlurFilter BlurFilter}.\n *\n * ### Usage\n * Filters can be applied to any DisplayObject or Container.\n * PixiJS' `FilterSystem` renders the container into temporary Framebuffer,\n * then filter renders it to the screen.\n * Multiple filters can be added to the `filters` array property and stacked on each other.\n *\n * ```js\n * import { Container, Filter } from 'pixi.js';\n * const filter = new Filter(myShaderVert, myShaderFrag, { myUniform: 0.5 });\n * const container = new Container();\n * container.filters = [filter];\n * ```\n *\n * ### Previous Version Differences\n *\n * In PixiJS **v3**, a filter was always applied to _whole screen_.\n *\n * In PixiJS **v4**, a filter can be applied _only part of the screen_.\n * Developers had to create a set of uniforms to deal with coordinates.\n *\n * In PixiJS **v5** combines _both approaches_.\n * Developers can use normal coordinates of v3 and then allow filter to use partial Framebuffers,\n * bringing those extra uniforms into account.\n *\n * Also be aware that we have changed default vertex shader, please consult\n * {@link https://github.com/pixijs/pixijs/wiki/v5-Creating-filters Wiki}.\n *\n * ### Frames\n *\n * The following table summarizes the coordinate spaces used in the filtering pipeline:\n *\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n *
Coordinate SpaceDescription
Texture Coordinates\n * The texture (or UV) coordinates in the input base-texture's space. These are normalized into the (0,1) range along\n * both axes.\n *
World Space\n * A point in the same space as the world bounds of any display-object (i.e. in the scene graph's space).\n *
Physical Pixels\n * This is base-texture's space with the origin on the top-left. You can calculate these by multiplying the texture\n * coordinates by the dimensions of the texture.\n *
\n *\n * ### Built-in Uniforms\n *\n * PixiJS viewport uses screen (CSS) coordinates, `(0, 0, renderer.screen.width, renderer.screen.height)`,\n * and `projectionMatrix` uniform maps it to the gl viewport.\n *\n * **uSampler**\n *\n * The most important uniform is the input texture that container was rendered into.\n * _Important note: as with all Framebuffers in PixiJS, both input and output are\n * premultiplied by alpha._\n *\n * By default, input normalized coordinates are passed to fragment shader with `vTextureCoord`.\n * Use it to sample the input.\n *\n * ```js\n * import { Filter } from 'pixi.js';\n * const fragment = `\n * varying vec2 vTextureCoord;\n * uniform sampler2D uSampler;\n * void main(void)\n * {\n * gl_FragColor = texture2D(uSampler, vTextureCoord);\n * }\n * `;\n *\n * const myFilter = new Filter(null, fragment);\n * ```\n *\n * This filter is just one uniform less than {@link PIXI.AlphaFilter AlphaFilter}.\n *\n * **outputFrame**\n *\n * The `outputFrame` holds the rectangle where filter is applied in screen (CSS) coordinates.\n * It's the same as `renderer.screen` for a fullscreen filter.\n * Only a part of `outputFrame.zw` size of temporary Framebuffer is used,\n * `(0, 0, outputFrame.width, outputFrame.height)`,\n *\n * Filters uses this quad to normalized (0-1) space, its passed into `aVertexPosition` attribute.\n * To calculate vertex position in screen space using normalized (0-1) space:\n *\n * ```glsl\n * vec4 filterVertexPosition( void )\n * {\n * vec2 position = aVertexPosition * max(outputFrame.zw, vec2(0.)) + outputFrame.xy;\n * return vec4((projectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);\n * }\n * ```\n *\n * **inputSize**\n *\n * Temporary framebuffer is different, it can be either the size of screen, either power-of-two.\n * The `inputSize.xy` are size of temporary framebuffer that holds input.\n * The `inputSize.zw` is inverted, it's a shortcut to evade division inside the shader.\n *\n * Set `inputSize.xy = outputFrame.zw` for a fullscreen filter.\n *\n * To calculate input normalized coordinate, you have to map it to filter normalized space.\n * Multiply by `outputFrame.zw` to get input coordinate.\n * Divide by `inputSize.xy` to get input normalized coordinate.\n *\n * ```glsl\n * vec2 filterTextureCoord( void )\n * {\n * return aVertexPosition * (outputFrame.zw * inputSize.zw); // same as /inputSize.xy\n * }\n * ```\n *\n * **resolution**\n *\n * The `resolution` is the ratio of screen (CSS) pixels to real pixels.\n *\n * **inputPixel**\n *\n * `inputPixel.xy` is the size of framebuffer in real pixels, same as `inputSize.xy * resolution`\n * `inputPixel.zw` is inverted `inputPixel.xy`.\n *\n * It's handy for filters that use neighbour pixels, like {@link PIXI.FXAAFilter FXAAFilter}.\n *\n * **inputClamp**\n *\n * If you try to get info from outside of used part of Framebuffer - you'll get undefined behaviour.\n * For displacements, coordinates has to be clamped.\n *\n * The `inputClamp.xy` is left-top pixel center, you may ignore it, because we use left-top part of Framebuffer\n * `inputClamp.zw` is bottom-right pixel center.\n *\n * ```glsl\n * vec4 color = texture2D(uSampler, clamp(modifiedTextureCoord, inputClamp.xy, inputClamp.zw));\n * ```\n *\n * Or:\n *\n * ```glsl\n * vec4 color = texture2D(uSampler, min(modifigedTextureCoord, inputClamp.zw));\n * ```\n *\n * ### Additional Information\n *\n * Complete documentation on Filter usage is located in the\n * {@link https://github.com/pixijs/pixijs/wiki/v5-Creating-filters Wiki}.\n *\n * Since PixiJS only had a handful of built-in filters, additional filters can be downloaded\n * {@link https://github.com/pixijs/pixi-filters here} from the PixiJS Filters repository.\n * @memberof PIXI\n */\nexport class Filter extends Shader\n{\n /**\n * Default filter resolution for any filter.\n * @static\n */\n public static defaultResolution: number | null = 1;\n\n /**\n * Default filter samples for any filter.\n * @static\n * @type {PIXI.MSAA_QUALITY|null}\n * @default PIXI.MSAA_QUALITY.NONE\n */\n public static defaultMultisample: MSAA_QUALITY | null = MSAA_QUALITY.NONE;\n\n /**\n * The padding of the filter. Some filters require extra space to breath such as a blur.\n * Increasing this will add extra width and height to the bounds of the object that the\n * filter is applied to.\n */\n public padding: number;\n\n /**\n * The samples override of the filter instance.\n * If set to `null`, the sample count of the current render target is used.\n * @default PIXI.Filter.defaultMultisample\n */\n public multisample: MSAA_QUALITY | null;\n\n /** If enabled is true the filter is applied, if false it will not. */\n public enabled: boolean;\n\n /**\n * If enabled, PixiJS will fit the filter area into boundaries for better performance.\n * Switch it off if it does not work for specific shader.\n * @default true\n */\n public autoFit: boolean;\n\n /**\n * Legacy filters use position and uvs from attributes (set by filter system)\n * @readonly\n */\n public legacy: boolean;\n\n /** The WebGL state the filter requires to render. */\n state: State;\n\n protected _resolution: number | null;\n\n /**\n * @param vertexSrc - The source of the vertex shader.\n * @param fragmentSrc - The source of the fragment shader.\n * @param uniforms - Custom uniforms to use to augment the built-in ones.\n */\n constructor(vertexSrc?: string, fragmentSrc?: string, uniforms?: Dict)\n {\n const program = Program.from(vertexSrc || Filter.defaultVertexSrc,\n fragmentSrc || Filter.defaultFragmentSrc);\n\n super(program, uniforms);\n\n this.padding = 0;\n this.resolution = Filter.defaultResolution;\n this.multisample = Filter.defaultMultisample;\n this.enabled = true;\n this.autoFit = true;\n this.state = new State();\n }\n\n /**\n * Applies the filter\n * @param {PIXI.FilterSystem} filterManager - The renderer to retrieve the filter from\n * @param {PIXI.RenderTexture} input - The input render target.\n * @param {PIXI.RenderTexture} output - The target to output to.\n * @param {PIXI.CLEAR_MODES} [clearMode] - Should the output be cleared before rendering to it.\n * @param {object} [_currentState] - It's current state of filter.\n * There are some useful properties in the currentState :\n * target, filters, sourceFrame, destinationFrame, renderTarget, resolution\n */\n apply(filterManager: FilterSystem, input: RenderTexture, output: RenderTexture, clearMode?: CLEAR_MODES,\n _currentState?: FilterState): void\n {\n // Do as you please!\n\n filterManager.applyFilter(this, input, output, clearMode);\n\n // Or just do a regular render..\n }\n\n /**\n * Sets the blend mode of the filter.\n * @default PIXI.BLEND_MODES.NORMAL\n */\n get blendMode(): BLEND_MODES\n {\n return this.state.blendMode;\n }\n\n set blendMode(value: BLEND_MODES)\n {\n this.state.blendMode = value;\n }\n\n /**\n * The resolution of the filter. Setting this to be lower will lower the quality but\n * increase the performance of the filter.\n * If set to `null` or `0`, the resolution of the current render target is used.\n * @default PIXI.Filter.defaultResolution\n */\n get resolution(): number | null\n {\n return this._resolution;\n }\n\n set resolution(value: number | null)\n {\n this._resolution = value;\n }\n\n /**\n * The default vertex shader source\n * @readonly\n */\n static get defaultVertexSrc(): string\n {\n return defaultVertex;\n }\n\n /**\n * The default fragment shader source\n * @readonly\n */\n static get defaultFragmentSrc(): string\n {\n return defaultFragment;\n }\n\n /** Used for caching shader IDs. */\n static SOURCE_KEY_MAP: Dict;\n}\n","import { Color } from '@pixi/color';\nimport { extensions, ExtensionType } from '@pixi/extensions';\n\nimport type { ColorSource } from '@pixi/color';\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { ISystem } from '../system/ISystem';\n\n/**\n * Options for the background system.\n * @memberof PIXI\n * @deprecated since 7.2.3\n * @see PIXI.BackgroundSystemOptions\n */\nexport type BackgroundSytemOptions = BackgroundSystemOptions;\n\n/**\n * Options for the background system.\n * @memberof PIXI\n */\nexport interface BackgroundSystemOptions\n{\n /**\n * The background color used to clear the canvas. See {@link PIXI.ColorSource} for accepted color values.\n * @memberof PIXI.IRendererOptions\n */\n backgroundColor: ColorSource;\n /**\n * Alias for {@link PIXI.IRendererOptions.backgroundColor}\n * @memberof PIXI.IRendererOptions\n */\n background?: ColorSource;\n /**\n * Transparency of the background color, value from `0` (fully transparent) to `1` (fully opaque).\n * @memberof PIXI.IRendererOptions\n */\n backgroundAlpha: number;\n /**\n * Whether to clear the canvas before new render passes.\n * @memberof PIXI.IRendererOptions\n */\n clearBeforeRender: boolean;\n}\n\n/**\n * The background system manages the background color and alpha of the main view.\n * @memberof PIXI\n */\nexport class BackgroundSystem implements ISystem\n{\n static defaultOptions: BackgroundSystemOptions = {\n /**\n * {@link PIXI.IRendererOptions.backgroundAlpha}\n * @default 1\n * @memberof PIXI.settings.RENDER_OPTIONS\n */\n backgroundAlpha: 1,\n /**\n * {@link PIXI.IRendererOptions.backgroundColor}\n * @default 0x000000\n * @memberof PIXI.settings.RENDER_OPTIONS\n */\n backgroundColor: 0x0,\n /**\n * {@link PIXI.IRendererOptions.clearBeforeRender}\n * @default true\n * @memberof PIXI.settings.RENDER_OPTIONS\n */\n clearBeforeRender: true,\n };\n\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: [\n ExtensionType.RendererSystem,\n ExtensionType.CanvasRendererSystem\n ],\n name: 'background',\n };\n\n /**\n * This sets if the CanvasRenderer will clear the canvas or not before the new render pass.\n * If the scene is NOT transparent PixiJS will use a canvas sized fillRect operation every\n * frame to set the canvas background color. If the scene is transparent PixiJS will use clearRect\n * to clear the canvas every frame. Disable this by setting this to false. For example, if\n * your game has a canvas filling background image you often don't need this set.\n * @member {boolean}\n * @default\n */\n public clearBeforeRender: boolean;\n\n /** Reference to the internal color */\n private _backgroundColor: Color;\n\n constructor()\n {\n this.clearBeforeRender = true;\n this._backgroundColor = new Color(0x0);\n this.alpha = 1;\n }\n\n /**\n * initiates the background system\n * @param {PIXI.IRendererOptions} options - the options for the background colors\n */\n init(options: BackgroundSystemOptions): void\n {\n this.clearBeforeRender = options.clearBeforeRender;\n const { backgroundColor, background, backgroundAlpha } = options;\n const color = background ?? backgroundColor;\n\n if (color !== undefined)\n {\n this.color = color;\n }\n\n this.alpha = backgroundAlpha;\n }\n\n /**\n * The background color to fill if not transparent.\n * @member {PIXI.ColorSource}\n */\n get color(): ColorSource\n {\n return this._backgroundColor.value;\n }\n\n set color(value: ColorSource)\n {\n this._backgroundColor.setValue(value);\n }\n\n /**\n * The background color alpha. Setting this to 0 will make the canvas transparent.\n * @member {number}\n */\n get alpha(): number\n {\n return this._backgroundColor.alpha;\n }\n\n set alpha(value: number)\n {\n this._backgroundColor.setAlpha(value);\n }\n\n /** The background color object. */\n get backgroundColor(): Color\n {\n return this._backgroundColor;\n }\n\n destroy(): void\n {\n // ka boom!\n }\n}\n\nextensions.add(BackgroundSystem);\n","import { extensions, ExtensionType } from '@pixi/extensions';\nimport { ObjectRenderer } from './ObjectRenderer';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { Renderer } from '../Renderer';\nimport type { ISystem } from '../system/ISystem';\nimport type { BaseTexture } from '../textures/BaseTexture';\nimport type { BatchTextureArray } from './BatchTextureArray';\n\n/**\n * System plugin to the renderer to manage batching.\n * @memberof PIXI\n */\nexport class BatchSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'batch',\n };\n\n /** An empty renderer. */\n public readonly emptyRenderer: ObjectRenderer;\n\n /** The currently active ObjectRenderer. */\n public currentRenderer: ObjectRenderer;\n private renderer: Renderer;\n\n /**\n * @param renderer - The renderer this System works for.\n */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n this.emptyRenderer = new ObjectRenderer(renderer);\n this.currentRenderer = this.emptyRenderer;\n }\n\n /**\n * Changes the current renderer to the one given in parameter\n * @param objectRenderer - The object renderer to use.\n */\n setObjectRenderer(objectRenderer: ObjectRenderer): void\n {\n if (this.currentRenderer === objectRenderer)\n {\n return;\n }\n\n this.currentRenderer.stop();\n this.currentRenderer = objectRenderer;\n\n this.currentRenderer.start();\n }\n\n /**\n * This should be called if you wish to do some custom rendering\n * It will basically render anything that may be batched up such as sprites\n */\n flush(): void\n {\n this.setObjectRenderer(this.emptyRenderer);\n }\n\n /** Reset the system to an empty renderer */\n reset(): void\n {\n this.setObjectRenderer(this.emptyRenderer);\n }\n\n /**\n * Handy function for batch renderers: copies bound textures in first maxTextures locations to array\n * sets actual _batchLocation for them\n * @param arr - arr copy destination\n * @param maxTextures - number of copied elements\n */\n copyBoundTextures(arr: BaseTexture[], maxTextures: number): void\n {\n const { boundTextures } = this.renderer.texture;\n\n for (let i = maxTextures - 1; i >= 0; --i)\n {\n arr[i] = boundTextures[i] || null;\n if (arr[i])\n {\n arr[i]._batchLocation = i;\n }\n }\n }\n\n /**\n * Assigns batch locations to textures in array based on boundTextures state.\n * All textures in texArray should have `_batchEnabled = _batchId`,\n * and their count should be less than `maxTextures`.\n * @param texArray - textures to bound\n * @param boundTextures - current state of bound textures\n * @param batchId - marker for _batchEnabled param of textures in texArray\n * @param maxTextures - number of texture locations to manipulate\n */\n boundArray(texArray: BatchTextureArray, boundTextures: Array,\n batchId: number, maxTextures: number): void\n {\n const { elements, ids, count } = texArray;\n let j = 0;\n\n for (let i = 0; i < count; i++)\n {\n const tex = elements[i];\n const loc = tex._batchLocation;\n\n if (loc >= 0 && loc < maxTextures\n && boundTextures[loc] === tex)\n {\n ids[i] = loc;\n continue;\n }\n\n while (j < maxTextures)\n {\n const bound = boundTextures[j];\n\n if (bound && bound._batchEnabled === batchId\n && bound._batchLocation === j)\n {\n j++;\n continue;\n }\n\n ids[i] = j;\n tex._batchLocation = j;\n boundTextures[j] = tex;\n break;\n }\n }\n }\n\n /**\n * @ignore\n */\n destroy(): void\n {\n this.renderer = null;\n }\n}\n\nextensions.add(BatchSystem);\n","import { ENV } from '@pixi/constants';\nimport { extensions, ExtensionType } from '@pixi/extensions';\nimport { settings } from '@pixi/settings';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { ICanvas } from '@pixi/settings';\nimport type { IRenderingContext } from '../IRenderer';\nimport type { Renderer } from '../Renderer';\nimport type { ISystem } from '../system/ISystem';\nimport type { WebGLExtensions } from './WebGLExtensions';\n\nlet CONTEXT_UID_COUNTER = 0;\n\n/**\n * Options for the context system.\n * @memberof PIXI\n */\nexport interface ContextSystemOptions\n{\n /**\n * **Deprecated since 7.0.0, use `premultipliedAlpha` and `backgroundAlpha` instead.**\n *\n * Pass-through value for canvas' context attribute `alpha`. This option is for cases where the\n * canvas needs to be opaque, possibly for performance reasons on some older devices.\n * If you want to set transparency, please use `backgroundAlpha`.\n *\n * **WebGL Only:** When set to `'notMultiplied'`, the canvas' context attribute `alpha` will be\n * set to `true` and `premultipliedAlpha` will be to `false`.\n * @deprecated since 7.0.0\n * @memberof PIXI.IRendererOptions\n */\n useContextAlpha?: boolean | 'notMultiplied';\n /**\n * **WebGL Only.** User-provided WebGL rendering context object.\n * @memberof PIXI.IRendererOptions\n */\n context: IRenderingContext | null;\n /**\n * **WebGL Only.** Whether to enable anti-aliasing. This may affect performance.\n * @memberof PIXI.IRendererOptions\n */\n antialias: boolean;\n /**\n * **WebGL Only.** A hint indicating what configuration of GPU is suitable for the WebGL context,\n * can be `'default'`, `'high-performance'` or `'low-power'`.\n * Setting to `'high-performance'` will prioritize rendering performance over power consumption,\n * while setting to `'low-power'` will prioritize power saving over rendering performance.\n * @memberof PIXI.IRendererOptions\n */\n powerPreference: WebGLPowerPreference;\n /**\n * **WebGL Only.** Whether the compositor will assume the drawing buffer contains colors with premultiplied alpha.\n * @memberof PIXI.IRendererOptions\n */\n premultipliedAlpha: boolean;\n /**\n * **WebGL Only.** Whether to enable drawing buffer preservation. If enabled, the drawing buffer will preserve\n * its value until cleared or overwritten. Enable this if you need to call `toDataUrl` on the WebGL context.\n * @memberof PIXI.IRendererOptions\n */\n preserveDrawingBuffer: boolean;\n}\n\nexport interface ISupportDict\n{\n uint32Indices: boolean;\n}\n\n/**\n * System plugin to the renderer to manage the context.\n * @memberof PIXI\n */\nexport class ContextSystem implements ISystem\n{\n /** @ignore */\n static defaultOptions: ContextSystemOptions = {\n /**\n * {@link PIXI.IRendererOptions.context}\n * @default null\n * @memberof PIXI.settings.RENDER_OPTIONS\n */\n context: null,\n /**\n * {@link PIXI.IRendererOptions.antialias}\n * @default false\n * @memberof PIXI.settings.RENDER_OPTIONS\n */\n antialias: false,\n /**\n * {@link PIXI.IRendererOptions.premultipliedAlpha}\n * @default true\n * @memberof PIXI.settings.RENDER_OPTIONS\n */\n premultipliedAlpha: true,\n /**\n * {@link PIXI.IRendererOptions.preserveDrawingBuffer}\n * @default false\n * @memberof PIXI.settings.RENDER_OPTIONS\n */\n preserveDrawingBuffer: false,\n /**\n * {@link PIXI.IRendererOptions.powerPreference}\n * @default default\n * @memberof PIXI.settings.RENDER_OPTIONS\n */\n powerPreference: 'default',\n };\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'context',\n };\n\n /**\n * Either 1 or 2 to reflect the WebGL version being used.\n * @readonly\n */\n public webGLVersion: number;\n\n /**\n * Features supported by current context.\n * @type {object}\n * @readonly\n * @property {boolean} uint32Indices - Support for 32-bit indices buffer.\n */\n readonly supports: ISupportDict;\n\n preserveDrawingBuffer: boolean;\n powerPreference: WebGLPowerPreference;\n\n /**\n * Pass-thru setting for the canvas' context `alpha` property. This is typically\n * not something you need to fiddle with. If you want transparency, use `backgroundAlpha`.\n * @member {boolean}\n * @deprecated since 7.0.0\n */\n useContextAlpha: boolean | 'notMultiplied';\n\n protected CONTEXT_UID: number;\n protected gl: IRenderingContext;\n\n /**\n * Extensions available.\n * @type {object}\n * @readonly\n * @property {WEBGL_draw_buffers} drawBuffers - WebGL v1 extension\n * @property {WEBGL_depth_texture} depthTexture - WebGL v1 extension\n * @property {OES_texture_float} floatTexture - WebGL v1 extension\n * @property {WEBGL_lose_context} loseContext - WebGL v1 extension\n * @property {OES_vertex_array_object} vertexArrayObject - WebGL v1 extension\n * @property {EXT_texture_filter_anisotropic} anisotropicFiltering - WebGL v1 and v2 extension\n */\n public extensions: WebGLExtensions;\n\n private renderer: Renderer;\n\n /** @param renderer - The renderer this System works for. */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n\n this.webGLVersion = 1;\n this.extensions = {};\n\n this.supports = {\n uint32Indices: false,\n };\n\n // Bind functions\n this.handleContextLost = this.handleContextLost.bind(this);\n this.handleContextRestored = this.handleContextRestored.bind(this);\n }\n\n /**\n * `true` if the context is lost\n * @readonly\n */\n get isLost(): boolean\n {\n return (!this.gl || this.gl.isContextLost());\n }\n\n /**\n * Handles the context change event.\n * @param {WebGLRenderingContext} gl - New WebGL context.\n */\n protected contextChange(gl: IRenderingContext): void\n {\n this.gl = gl;\n this.renderer.gl = gl;\n this.renderer.CONTEXT_UID = CONTEXT_UID_COUNTER++;\n }\n\n init(options: ContextSystemOptions): void\n {\n /*\n * The options passed in to create a new WebGL context.\n */\n if (options.context)\n {\n this.initFromContext(options.context);\n }\n else\n {\n const alpha = this.renderer.background.alpha < 1;\n const premultipliedAlpha = options.premultipliedAlpha;\n\n this.preserveDrawingBuffer = options.preserveDrawingBuffer;\n this.useContextAlpha = options.useContextAlpha;\n this.powerPreference = options.powerPreference;\n\n this.initFromOptions({\n alpha,\n premultipliedAlpha,\n antialias: options.antialias,\n stencil: true,\n preserveDrawingBuffer: options.preserveDrawingBuffer,\n powerPreference: options.powerPreference,\n });\n }\n }\n\n /**\n * Initializes the context.\n * @protected\n * @param {WebGLRenderingContext} gl - WebGL context\n */\n initFromContext(gl: IRenderingContext): void\n {\n this.gl = gl;\n this.validateContext(gl);\n this.renderer.gl = gl;\n this.renderer.CONTEXT_UID = CONTEXT_UID_COUNTER++;\n this.renderer.runners.contextChange.emit(gl);\n\n const view = this.renderer.view;\n\n if (view.addEventListener !== undefined)\n {\n view.addEventListener('webglcontextlost', this.handleContextLost, false);\n view.addEventListener('webglcontextrestored', this.handleContextRestored, false);\n }\n }\n\n /**\n * Initialize from context options\n * @protected\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext\n * @param {object} options - context attributes\n */\n initFromOptions(options: WebGLContextAttributes): void\n {\n const gl = this.createContext(this.renderer.view, options);\n\n this.initFromContext(gl);\n }\n\n /**\n * Helper class to create a WebGL Context\n * @param canvas - the canvas element that we will get the context from\n * @param options - An options object that gets passed in to the canvas element containing the\n * context attributes\n * @see https://developer.mozilla.org/en/docs/Web/API/HTMLCanvasElement/getContext\n * @returns {WebGLRenderingContext} the WebGL context\n */\n createContext(canvas: ICanvas, options: WebGLContextAttributes): IRenderingContext\n {\n let gl;\n\n if (settings.PREFER_ENV >= ENV.WEBGL2)\n {\n gl = canvas.getContext('webgl2', options);\n }\n\n if (gl)\n {\n this.webGLVersion = 2;\n }\n else\n {\n this.webGLVersion = 1;\n\n gl = canvas.getContext('webgl', options) || canvas.getContext('experimental-webgl', options);\n\n if (!gl)\n {\n // fail, not able to get a context\n throw new Error('This browser does not support WebGL. Try using the canvas renderer');\n }\n }\n\n this.gl = gl as IRenderingContext;\n\n this.getExtensions();\n\n return this.gl;\n }\n\n /** Auto-populate the {@link PIXI.ContextSystem.extensions extensions}. */\n protected getExtensions(): void\n {\n // time to set up default extensions that Pixi uses.\n const { gl } = this;\n\n const common = {\n loseContext: gl.getExtension('WEBGL_lose_context'),\n anisotropicFiltering: gl.getExtension('EXT_texture_filter_anisotropic'),\n floatTextureLinear: gl.getExtension('OES_texture_float_linear'),\n\n s3tc: gl.getExtension('WEBGL_compressed_texture_s3tc'),\n s3tc_sRGB: gl.getExtension('WEBGL_compressed_texture_s3tc_srgb'), // eslint-disable-line camelcase\n etc: gl.getExtension('WEBGL_compressed_texture_etc'),\n etc1: gl.getExtension('WEBGL_compressed_texture_etc1'),\n pvrtc: gl.getExtension('WEBGL_compressed_texture_pvrtc')\n || gl.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc'),\n atc: gl.getExtension('WEBGL_compressed_texture_atc'),\n astc: gl.getExtension('WEBGL_compressed_texture_astc')\n };\n\n if (this.webGLVersion === 1)\n {\n Object.assign(this.extensions, common, {\n drawBuffers: gl.getExtension('WEBGL_draw_buffers'),\n depthTexture: gl.getExtension('WEBGL_depth_texture'),\n vertexArrayObject: gl.getExtension('OES_vertex_array_object')\n || gl.getExtension('MOZ_OES_vertex_array_object')\n || gl.getExtension('WEBKIT_OES_vertex_array_object'),\n uint32ElementIndex: gl.getExtension('OES_element_index_uint'),\n // Floats and half-floats\n floatTexture: gl.getExtension('OES_texture_float'),\n floatTextureLinear: gl.getExtension('OES_texture_float_linear'),\n textureHalfFloat: gl.getExtension('OES_texture_half_float'),\n textureHalfFloatLinear: gl.getExtension('OES_texture_half_float_linear'),\n });\n }\n else if (this.webGLVersion === 2)\n {\n Object.assign(this.extensions, common, {\n // Floats and half-floats\n colorBufferFloat: gl.getExtension('EXT_color_buffer_float')\n });\n }\n }\n\n /**\n * Handles a lost webgl context\n * @param {WebGLContextEvent} event - The context lost event.\n */\n protected handleContextLost(event: WebGLContextEvent): void\n {\n // Prevent default to be able to restore the context\n event.preventDefault();\n\n // Restore the context after this event has exited\n setTimeout(() =>\n {\n if (this.gl.isContextLost() && this.extensions.loseContext)\n {\n this.extensions.loseContext.restoreContext();\n }\n }, 0);\n }\n\n /** Handles a restored webgl context. */\n protected handleContextRestored(): void\n {\n this.renderer.runners.contextChange.emit(this.gl);\n }\n\n destroy(): void\n {\n const view = this.renderer.view;\n\n this.renderer = null;\n\n // remove listeners\n if (view.removeEventListener !== undefined)\n {\n view.removeEventListener('webglcontextlost', this.handleContextLost);\n view.removeEventListener('webglcontextrestored', this.handleContextRestored);\n }\n\n this.gl.useProgram(null);\n\n if (this.extensions.loseContext)\n {\n this.extensions.loseContext.loseContext();\n }\n }\n\n /** Handle the post-render runner event. */\n protected postrender(): void\n {\n if (this.renderer.objectRenderer.renderingToScreen)\n {\n this.gl.flush();\n }\n }\n\n /**\n * Validate context.\n * @param {WebGLRenderingContext} gl - Render context.\n */\n protected validateContext(gl: IRenderingContext): void\n {\n const attributes = gl.getContextAttributes();\n\n const isWebGl2 = 'WebGL2RenderingContext' in globalThis && gl instanceof globalThis.WebGL2RenderingContext;\n\n if (isWebGl2)\n {\n this.webGLVersion = 2;\n }\n\n // this is going to be fairly simple for now.. but at least we have room to grow!\n if (attributes && !attributes.stencil)\n {\n /* eslint-disable max-len, no-console */\n console.warn('Provided WebGL context does not have a stencil buffer, masks may not render correctly');\n /* eslint-enable max-len, no-console */\n }\n\n const hasuint32 = isWebGl2 || !!(gl as WebGLRenderingContext).getExtension('OES_element_index_uint');\n\n this.supports.uint32Indices = hasuint32;\n\n if (!hasuint32)\n {\n /* eslint-disable max-len, no-console */\n console.warn('Provided WebGL context does not support 32 index buffer, complex graphics may not render correctly');\n /* eslint-enable max-len, no-console */\n }\n }\n}\n\nextensions.add(ContextSystem);\n","import { FORMATS, MIPMAP_MODES, MSAA_QUALITY, SCALE_MODES, TYPES } from '@pixi/constants';\nimport { Runner } from '@pixi/runner';\nimport { BaseTexture } from '../textures/BaseTexture';\n\nimport type { GLFramebuffer } from './GLFramebuffer';\n\n/**\n * A framebuffer can be used to render contents off of the screen. {@link PIXI.BaseRenderTexture} uses\n * one internally to render into itself. You can attach a depth or stencil buffer to a framebuffer.\n *\n * On WebGL 2 machines, shaders can output to multiple textures simultaneously with GLSL 300 ES.\n * @memberof PIXI\n */\nexport class Framebuffer\n{\n /** Width of framebuffer in pixels. */\n public width: number;\n\n /** Height of framebuffer in pixels. */\n public height: number;\n\n /**\n * Desired number of samples for antialiasing. 0 means AA should not be used.\n *\n * Experimental WebGL2 feature, allows to use antialiasing in individual renderTextures.\n * Antialiasing is the same as for main buffer with renderer `antialias: true` options.\n * Seriously affects GPU memory consumption and GPU performance.\n * @example\n * import { MSAA_QUALITY } from 'pixi.js';\n *\n * renderTexture.framebuffer.multisample = MSAA_QUALITY.HIGH;\n * // ...\n * renderer.render(myContainer, { renderTexture });\n * renderer.framebuffer.blit(); // Copies data from MSAA framebuffer to texture\n * @default PIXI.MSAA_QUALITY.NONE\n */\n public multisample: MSAA_QUALITY;\n\n stencil: boolean;\n depth: boolean;\n dirtyId: number;\n dirtyFormat: number;\n dirtySize: number;\n depthTexture: BaseTexture;\n colorTextures: Array;\n glFramebuffers: {[key: string]: GLFramebuffer};\n disposeRunner: Runner;\n\n /**\n * @param width - Width of the frame buffer\n * @param height - Height of the frame buffer\n */\n constructor(width: number, height: number)\n {\n this.width = Math.round(width);\n this.height = Math.round(height);\n\n if (!this.width || !this.height)\n {\n throw new Error('Framebuffer width or height is zero');\n }\n\n this.stencil = false;\n this.depth = false;\n\n this.dirtyId = 0;\n this.dirtyFormat = 0;\n this.dirtySize = 0;\n\n this.depthTexture = null;\n this.colorTextures = [];\n\n this.glFramebuffers = {};\n\n this.disposeRunner = new Runner('disposeFramebuffer');\n this.multisample = MSAA_QUALITY.NONE;\n }\n\n /**\n * Reference to the colorTexture.\n * @readonly\n */\n get colorTexture(): BaseTexture\n {\n return this.colorTextures[0];\n }\n\n /**\n * Add texture to the colorTexture array.\n * @param index - Index of the array to add the texture to\n * @param texture - Texture to add to the array\n */\n addColorTexture(index = 0, texture?: BaseTexture): this\n {\n // TODO add some validation to the texture - same width / height etc?\n this.colorTextures[index] = texture || new BaseTexture(null, {\n scaleMode: SCALE_MODES.NEAREST,\n resolution: 1,\n mipmap: MIPMAP_MODES.OFF,\n width: this.width,\n height: this.height,\n });\n\n this.dirtyId++;\n this.dirtyFormat++;\n\n return this;\n }\n\n /**\n * Add a depth texture to the frame buffer.\n * @param texture - Texture to add.\n */\n addDepthTexture(texture?: BaseTexture): this\n {\n this.depthTexture = texture || new BaseTexture(null, {\n scaleMode: SCALE_MODES.NEAREST,\n resolution: 1,\n width: this.width,\n height: this.height,\n mipmap: MIPMAP_MODES.OFF,\n format: FORMATS.DEPTH_COMPONENT,\n type: TYPES.UNSIGNED_SHORT,\n });\n\n this.dirtyId++;\n this.dirtyFormat++;\n\n return this;\n }\n\n /** Enable depth on the frame buffer. */\n enableDepth(): this\n {\n this.depth = true;\n\n this.dirtyId++;\n this.dirtyFormat++;\n\n return this;\n }\n\n /** Enable stencil on the frame buffer. */\n enableStencil(): this\n {\n this.stencil = true;\n\n this.dirtyId++;\n this.dirtyFormat++;\n\n return this;\n }\n\n /**\n * Resize the frame buffer\n * @param width - Width of the frame buffer to resize to\n * @param height - Height of the frame buffer to resize to\n */\n resize(width: number, height: number): void\n {\n width = Math.round(width);\n height = Math.round(height);\n\n if (!width || !height)\n {\n throw new Error('Framebuffer width and height must not be zero');\n }\n\n if (width === this.width && height === this.height) return;\n\n this.width = width;\n this.height = height;\n\n this.dirtyId++;\n this.dirtySize++;\n\n for (let i = 0; i < this.colorTextures.length; i++)\n {\n const texture = this.colorTextures[i];\n const resolution = texture.resolution;\n\n // take into account the fact the texture may have a different resolution..\n texture.setSize(width / resolution, height / resolution);\n }\n\n if (this.depthTexture)\n {\n const resolution = this.depthTexture.resolution;\n\n this.depthTexture.setSize(width / resolution, height / resolution);\n }\n }\n\n /** Disposes WebGL resources that are connected to this geometry. */\n dispose(): void\n {\n this.disposeRunner.emit(this, false);\n }\n\n /** Destroys and removes the depth texture added to this framebuffer. */\n destroyDepthTexture(): void\n {\n if (this.depthTexture)\n {\n this.depthTexture.destroy();\n this.depthTexture = null;\n\n ++this.dirtyId;\n ++this.dirtyFormat;\n }\n }\n}\n","import { Color } from '@pixi/color';\nimport { MIPMAP_MODES, MSAA_QUALITY } from '@pixi/constants';\nimport { Framebuffer } from '../framebuffer/Framebuffer';\nimport { BaseTexture } from '../textures/BaseTexture';\n\nimport type { ColorSource } from '@pixi/color';\nimport type { MaskData } from '../mask/MaskData';\nimport type { IBaseTextureOptions } from '../textures/BaseTexture';\n\nexport interface BaseRenderTexture extends GlobalMixins.BaseRenderTexture, BaseTexture {}\n\n/**\n * A BaseRenderTexture is a special texture that allows any PixiJS display object to be rendered to it.\n *\n * __Hint__: All DisplayObjects (i.e. Sprites) that render to a BaseRenderTexture should be preloaded\n * otherwise black rectangles will be drawn instead.\n *\n * A BaseRenderTexture takes a snapshot of any Display Object given to its render method. The position\n * and rotation of the given Display Objects is ignored. For example:\n * @example\n * import { autoDetectRenderer, BaseRenderTexture, RenderTexture, Sprite } from 'pixi.js';\n *\n * const renderer = autoDetectRenderer();\n * const baseRenderTexture = new BaseRenderTexture({ width: 800, height: 600 });\n * const renderTexture = new RenderTexture(baseRenderTexture);\n * const sprite = Sprite.from('spinObj_01.png');\n *\n * sprite.position.x = 800 / 2;\n * sprite.position.y = 600 / 2;\n * sprite.anchor.x = 0.5;\n * sprite.anchor.y = 0.5;\n *\n * renderer.render(sprite, { renderTexture });\n *\n * // The Sprite in this case will be rendered using its local transform.\n * // To render this sprite at 0,0 you can clear the transform\n * sprite.setTransform();\n *\n * const baseRenderTexture = new BaseRenderTexture({ width: 100, height: 100 });\n * const renderTexture = new RenderTexture(baseRenderTexture);\n *\n * renderer.render(sprite, { renderTexture }); // Renders to center of RenderTexture\n * @memberof PIXI\n */\nexport class BaseRenderTexture extends BaseTexture\n{\n public _clear: Color;\n\n /**\n * The framebuffer of this base texture.\n * @readonly\n */\n public framebuffer: Framebuffer;\n\n /** The data structure for the stencil masks. */\n maskStack: Array;\n\n /** The data structure for the filters. */\n filterStack: Array;\n\n /**\n * @param options\n * @param {number} [options.width=100] - The width of the base render texture.\n * @param {number} [options.height=100] - The height of the base render texture.\n * @param {PIXI.SCALE_MODES} [options.scaleMode=PIXI.BaseTexture.defaultOptions.scaleMode] - See {@link PIXI.SCALE_MODES}\n * for possible values.\n * @param {number} [options.resolution=PIXI.settings.RESOLUTION] - The resolution / device pixel ratio\n * of the texture being generated.\n * @param {PIXI.MSAA_QUALITY} [options.multisample=PIXI.MSAA_QUALITY.NONE] - The number of samples of the frame buffer.\n */\n constructor(options: IBaseTextureOptions = {})\n {\n if (typeof options === 'number')\n {\n /* eslint-disable prefer-rest-params */\n // Backward compatibility of signature\n const width = arguments[0];\n const height = arguments[1];\n const scaleMode = arguments[2];\n const resolution = arguments[3];\n\n options = { width, height, scaleMode, resolution };\n /* eslint-enable prefer-rest-params */\n }\n\n options.width = options.width ?? 100;\n options.height = options.height ?? 100;\n options.multisample ??= MSAA_QUALITY.NONE;\n\n super(null, options);\n\n // Set defaults\n this.mipmap = MIPMAP_MODES.OFF;\n this.valid = true;\n\n this._clear = new Color([0, 0, 0, 0]);\n this.framebuffer = new Framebuffer(this.realWidth, this.realHeight)\n .addColorTexture(0, this);\n this.framebuffer.multisample = options.multisample;\n\n // TODO - could this be added the systems?\n this.maskStack = [];\n this.filterStack = [{}];\n }\n\n /** Color when clearning the texture. */\n set clearColor(value: ColorSource)\n {\n this._clear.setValue(value);\n }\n get clearColor(): ColorSource\n {\n return this._clear.value;\n }\n\n /**\n * Color object when clearning the texture.\n * @readonly\n * @since 7.2.0\n */\n get clear(): Color\n {\n return this._clear;\n }\n\n /**\n * Shortcut to `this.framebuffer.multisample`.\n * @default PIXI.MSAA_QUALITY.NONE\n */\n get multisample(): MSAA_QUALITY\n {\n return this.framebuffer.multisample;\n }\n\n set multisample(value: MSAA_QUALITY)\n {\n this.framebuffer.multisample = value;\n }\n\n /**\n * Resizes the BaseRenderTexture.\n * @param desiredWidth - The desired width to resize to.\n * @param desiredHeight - The desired height to resize to.\n */\n resize(desiredWidth: number, desiredHeight: number): void\n {\n this.framebuffer.resize(desiredWidth * this.resolution, desiredHeight * this.resolution);\n this.setRealSize(this.framebuffer.width, this.framebuffer.height);\n }\n\n /**\n * Frees the texture and framebuffer from WebGL memory without destroying this texture object.\n * This means you can still use the texture later which will upload it to GPU\n * memory again.\n * @fires PIXI.BaseTexture#dispose\n */\n dispose(): void\n {\n this.framebuffer.dispose();\n\n super.dispose();\n }\n\n /** Destroys this texture. */\n destroy(): void\n {\n super.destroy();\n\n this.framebuffer.destroyDepthTexture();\n this.framebuffer = null;\n }\n}\n","import { ALPHA_MODES } from '@pixi/constants';\nimport { determineCrossOrigin } from '@pixi/utils';\nimport { Resource } from './Resource';\n\nimport type { Renderer } from '../../Renderer';\nimport type { BaseTexture, ImageSource } from '../BaseTexture';\nimport type { GLTexture } from '../GLTexture';\n\n/**\n * Base for all the image/canvas resources.\n * @memberof PIXI\n */\nexport class BaseImageResource extends Resource\n{\n /**\n * The source element.\n * @member {HTMLImageElement|HTMLVideoElement|ImageBitmap|PIXI.ICanvas}\n * @readonly\n */\n public source: ImageSource;\n\n /**\n * If set to `true`, will force `texImage2D` over `texSubImage2D` for uploading.\n * Certain types of media (e.g. video) using `texImage2D` is more performant.\n * @default false\n * @private\n */\n public noSubImage: boolean;\n\n /**\n * @param {HTMLImageElement|HTMLVideoElement|ImageBitmap|PIXI.ICanvas} source\n */\n constructor(source: ImageSource)\n {\n const sourceAny = source as any;\n const width = sourceAny.naturalWidth || sourceAny.videoWidth || sourceAny.width;\n const height = sourceAny.naturalHeight || sourceAny.videoHeight || sourceAny.height;\n\n super(width, height);\n\n this.source = source;\n this.noSubImage = false;\n }\n\n /**\n * Set cross origin based detecting the url and the crossorigin\n * @param element - Element to apply crossOrigin\n * @param url - URL to check\n * @param crossorigin - Cross origin value to use\n */\n static crossOrigin(element: HTMLImageElement | HTMLVideoElement, url: string, crossorigin?: boolean | string): void\n {\n if (crossorigin === undefined && !url.startsWith('data:'))\n {\n element.crossOrigin = determineCrossOrigin(url);\n }\n else if (crossorigin !== false)\n {\n element.crossOrigin = typeof crossorigin === 'string' ? crossorigin : 'anonymous';\n }\n }\n\n /**\n * Upload the texture to the GPU.\n * @param renderer - Upload to the renderer\n * @param baseTexture - Reference to parent texture\n * @param glTexture\n * @param {HTMLImageElement|HTMLVideoElement|ImageBitmap|PIXI.ICanvas} [source] - (optional)\n * @returns - true is success\n */\n override upload(renderer: Renderer, baseTexture: BaseTexture, glTexture: GLTexture, source?: ImageSource): boolean\n {\n const gl = renderer.gl;\n const width = baseTexture.realWidth;\n const height = baseTexture.realHeight;\n\n source = source || this.source;\n\n if (typeof HTMLImageElement !== 'undefined' && source instanceof HTMLImageElement)\n {\n if (!source.complete || source.naturalWidth === 0)\n {\n return false;\n }\n }\n else if (typeof HTMLVideoElement !== 'undefined' && source instanceof HTMLVideoElement)\n {\n if (source.readyState <= 1)\n {\n return false;\n }\n }\n\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, baseTexture.alphaMode === ALPHA_MODES.UNPACK);\n\n if (!this.noSubImage\n && baseTexture.target === gl.TEXTURE_2D\n && glTexture.width === width\n && glTexture.height === height)\n {\n gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, baseTexture.format, glTexture.type, source);\n }\n else\n {\n glTexture.width = width;\n glTexture.height = height;\n\n gl.texImage2D(baseTexture.target, 0, glTexture.internalFormat, baseTexture.format, glTexture.type, source);\n }\n\n return true;\n }\n\n /**\n * Checks if source width/height was changed, resize can cause extra baseTexture update.\n * Triggers one update in any case.\n */\n override update(): void\n {\n if (this.destroyed)\n {\n return;\n }\n\n const source = this.source as any;\n\n const width = source.naturalWidth || source.videoWidth || source.width;\n const height = source.naturalHeight || source.videoHeight || source.height;\n\n this.resize(width, height);\n\n super.update();\n }\n\n /** Destroy this {@link PIXI.BaseImageResource} */\n override dispose(): void\n {\n this.source = null;\n }\n}\n","/**\n * Sets the `crossOrigin` property for this resource based on if the url\n * for this resource is cross-origin. If crossOrigin was manually set, this\n * function does nothing.\n * Nipped from the resource loader!\n * @ignore\n * @param {string} url - The url to test.\n * @param {object} [loc=window.location] - The location object to test against.\n * @returns {string} The crossOrigin value to use (or empty string for none).\n */\nexport function determineCrossOrigin(url: string, loc: Location = globalThis.location): string\n{\n // data: and javascript: urls are considered same-origin\n if (url.startsWith('data:'))\n {\n return '';\n }\n\n // default is window.location\n loc = loc || globalThis.location;\n\n const parsedUrl = new URL(url, document.baseURI);\n\n // if cross origin\n if (parsedUrl.hostname !== loc.hostname || parsedUrl.port !== loc.port || parsedUrl.protocol !== loc.protocol)\n {\n return 'anonymous';\n }\n\n return '';\n}\n","import { ALPHA_MODES } from '@pixi/constants';\nimport { settings } from '@pixi/settings';\nimport { BaseImageResource } from './BaseImageResource';\n\nimport type { Renderer } from '../../Renderer';\nimport type { BaseTexture } from '../BaseTexture';\nimport type { GLTexture } from '../GLTexture';\n\nexport interface IImageResourceOptions\n{\n /** Start loading process automatically when constructed. */\n autoLoad?: boolean;\n\n /** Whether its required to create a bitmap before upload. */\n createBitmap?: boolean;\n\n /** Load image using cross origin. */\n crossorigin?: boolean | string;\n\n /** Premultiply image alpha in bitmap. */\n alphaMode?: ALPHA_MODES;\n}\n\n/**\n * Resource type for HTMLImageElement.\n * @memberof PIXI\n */\nexport class ImageResource extends BaseImageResource\n{\n /** URL of the image source */\n url: string;\n\n /**\n * If the image should be disposed after upload\n * @default false\n */\n preserveBitmap: boolean;\n\n /**\n * If capable, convert the image using createImageBitmap API.\n * @default PIXI.settings.CREATE_IMAGE_BITMAP\n */\n createBitmap: boolean;\n\n /**\n * Controls texture alphaMode field\n * Copies from options\n * Default is `null`, copies option from baseTexture\n * @readonly\n */\n alphaMode: ALPHA_MODES;\n\n /**\n * The ImageBitmap element created for a {@link HTMLImageElement}.\n * @default null\n */\n bitmap: ImageBitmap;\n\n /**\n * Promise when loading.\n * @default null\n */\n private _load: Promise;\n\n /** When process is completed */\n private _process: Promise;\n\n /**\n * @param source - image source or URL\n * @param options\n * @param {boolean} [options.autoLoad=true] - start loading process\n * @param {boolean} [options.createBitmap=PIXI.settings.CREATE_IMAGE_BITMAP] - whether its required to create\n * a bitmap before upload\n * @param {boolean} [options.crossorigin=true] - Load image using cross origin\n * @param {PIXI.ALPHA_MODES} [options.alphaMode=PIXI.ALPHA_MODES.UNPACK] - Premultiply image alpha in bitmap\n */\n constructor(source: HTMLImageElement | string, options?: IImageResourceOptions)\n {\n options = options || {};\n\n if (typeof source === 'string')\n {\n const imageElement = new Image();\n\n BaseImageResource.crossOrigin(imageElement, source, options.crossorigin);\n\n imageElement.src = source;\n source = imageElement;\n }\n\n super(source);\n\n // FireFox 68, and possibly other versions, seems like setting the HTMLImageElement#width and #height\n // to non-zero values before its loading completes if images are in a cache.\n // Because of this, need to set the `_width` and the `_height` to zero to avoid uploading incomplete images.\n // Please refer to the issue #5968 (https://github.com/pixijs/pixijs/issues/5968).\n if (!source.complete && !!this._width && !!this._height)\n {\n this._width = 0;\n this._height = 0;\n }\n\n this.url = source.src;\n\n this._process = null;\n\n this.preserveBitmap = false;\n this.createBitmap = (options.createBitmap ?? settings.CREATE_IMAGE_BITMAP) && !!globalThis.createImageBitmap;\n this.alphaMode = typeof options.alphaMode === 'number' ? options.alphaMode : null;\n this.bitmap = null;\n\n this._load = null;\n\n if (options.autoLoad !== false)\n {\n this.load();\n }\n }\n\n /**\n * Returns a promise when image will be loaded and processed.\n * @param createBitmap - whether process image into bitmap\n */\n load(createBitmap?: boolean): Promise\n {\n if (this._load)\n {\n return this._load;\n }\n\n if (createBitmap !== undefined)\n {\n this.createBitmap = createBitmap;\n }\n\n this._load = new Promise((resolve, reject): void =>\n {\n const source = this.source as HTMLImageElement;\n\n this.url = source.src;\n\n const completed = (): void =>\n {\n if (this.destroyed)\n {\n return;\n }\n source.onload = null;\n source.onerror = null;\n\n this.update();\n this._load = null;\n\n if (this.createBitmap)\n {\n resolve(this.process());\n }\n else\n {\n resolve(this);\n }\n };\n\n if (source.complete && source.src)\n {\n completed();\n }\n else\n {\n source.onload = completed;\n source.onerror = (event): void =>\n {\n // Avoids Promise freezing when resource broken\n reject(event);\n this.onError.emit(event);\n };\n }\n });\n\n return this._load;\n }\n\n /**\n * Called when we need to convert image into BitmapImage.\n * Can be called multiple times, real promise is cached inside.\n * @returns - Cached promise to fill that bitmap\n */\n process(): Promise\n {\n const source = this.source as HTMLImageElement;\n\n if (this._process !== null)\n {\n return this._process;\n }\n if (this.bitmap !== null || !globalThis.createImageBitmap)\n {\n return Promise.resolve(this);\n }\n\n const createImageBitmap = globalThis.createImageBitmap as any;\n const cors = !source.crossOrigin || source.crossOrigin === 'anonymous';\n\n this._process = fetch(source.src,\n {\n mode: cors ? 'cors' : 'no-cors'\n })\n .then((r) => r.blob())\n .then((blob) => createImageBitmap(blob,\n 0, 0, source.width, source.height,\n {\n premultiplyAlpha: this.alphaMode === null || this.alphaMode === ALPHA_MODES.UNPACK\n ? 'premultiply' : 'none',\n }))\n .then((bitmap: ImageBitmap) =>\n {\n if (this.destroyed)\n {\n return Promise.reject();\n }\n this.bitmap = bitmap;\n this.update();\n this._process = null;\n\n return Promise.resolve(this);\n });\n\n return this._process;\n }\n\n /**\n * Upload the image resource to GPU.\n * @param renderer - Renderer to upload to\n * @param baseTexture - BaseTexture for this resource\n * @param glTexture - GLTexture to use\n * @returns {boolean} true is success\n */\n override upload(renderer: Renderer, baseTexture: BaseTexture, glTexture: GLTexture): boolean\n {\n if (typeof this.alphaMode === 'number')\n {\n // bitmap stores unpack premultiply flag, we dont have to notify texImage2D about it\n\n baseTexture.alphaMode = this.alphaMode;\n }\n\n if (!this.createBitmap)\n {\n return super.upload(renderer, baseTexture, glTexture);\n }\n if (!this.bitmap)\n {\n // yeah, ignore the output\n this.process();\n if (!this.bitmap)\n {\n return false;\n }\n }\n\n super.upload(renderer, baseTexture, glTexture, this.bitmap);\n\n if (!this.preserveBitmap)\n {\n // checks if there are other renderers that possibly need this bitmap\n\n let flag = true;\n\n const glTextures = baseTexture._glTextures;\n\n for (const key in glTextures)\n {\n const otherTex = glTextures[key];\n\n if (otherTex !== glTexture && otherTex.dirtyId !== baseTexture.dirtyId)\n {\n flag = false;\n break;\n }\n }\n\n if (flag)\n {\n if (this.bitmap.close)\n {\n this.bitmap.close();\n }\n\n this.bitmap = null;\n }\n }\n\n return true;\n }\n\n /** Destroys this resource. */\n override dispose(): void\n {\n (this.source as HTMLImageElement).onload = null;\n (this.source as HTMLImageElement).onerror = null;\n\n super.dispose();\n\n if (this.bitmap)\n {\n this.bitmap.close();\n this.bitmap = null;\n }\n this._process = null;\n this._load = null;\n }\n\n /**\n * Used to auto-detect the type of resource.\n * @param {*} source - The source object\n * @returns {boolean} `true` if current environment support HTMLImageElement, and source is string or HTMLImageElement\n */\n static override test(source: unknown): source is string | HTMLImageElement\n {\n return typeof HTMLImageElement !== 'undefined' && (typeof source === 'string' || source instanceof HTMLImageElement);\n }\n}\n","import { groupD8 } from '@pixi/math';\n\nimport type { ISize, Rectangle } from '@pixi/math';\n\n/**\n * Stores a texture's frame in UV coordinates, in\n * which everything lies in the rectangle `[(0,0), (1,0),\n * (1,1), (0,1)]`.\n *\n * | Corner | Coordinates |\n * |--------------|-------------|\n * | Top-Left | `(x0,y0)` |\n * | Top-Right | `(x1,y1)` |\n * | Bottom-Right | `(x2,y2)` |\n * | Bottom-Left | `(x3,y3)` |\n * @protected\n * @memberof PIXI\n */\nexport class TextureUvs\n{\n /** X-component of top-left corner `(x0,y0)`. */\n public x0: number;\n\n /** Y-component of top-left corner `(x0,y0)`. */\n public y0: number;\n\n /** X-component of top-right corner `(x1,y1)`. */\n public x1: number;\n\n /** Y-component of top-right corner `(x1,y1)`. */\n public y1: number;\n\n /** X-component of bottom-right corner `(x2,y2)`. */\n public x2: number;\n\n /** Y-component of bottom-right corner `(x2,y2)`. */\n public y2: number;\n\n /** X-component of bottom-left corner `(x3,y3)`. */\n public x3: number;\n\n /** Y-component of bottom-right corner `(x3,y3)`. */\n public y3: number;\n public uvsFloat32: Float32Array;\n\n constructor()\n {\n this.x0 = 0;\n this.y0 = 0;\n this.x1 = 1;\n this.y1 = 0;\n this.x2 = 1;\n this.y2 = 1;\n this.x3 = 0;\n this.y3 = 1;\n\n this.uvsFloat32 = new Float32Array(8);\n }\n\n /**\n * Sets the texture Uvs based on the given frame information.\n * @protected\n * @param frame - The frame of the texture\n * @param baseFrame - The base frame of the texture\n * @param rotate - Rotation of frame, see {@link PIXI.groupD8}\n */\n set(frame: Rectangle, baseFrame: ISize, rotate: number): void\n {\n const tw = baseFrame.width;\n const th = baseFrame.height;\n\n if (rotate)\n {\n // width and height div 2 div baseFrame size\n const w2 = frame.width / 2 / tw;\n const h2 = frame.height / 2 / th;\n\n // coordinates of center\n const cX = (frame.x / tw) + w2;\n const cY = (frame.y / th) + h2;\n\n rotate = groupD8.add(rotate, groupD8.NW); // NW is top-left corner\n this.x0 = cX + (w2 * groupD8.uX(rotate));\n this.y0 = cY + (h2 * groupD8.uY(rotate));\n\n rotate = groupD8.add(rotate, 2); // rotate 90 degrees clockwise\n this.x1 = cX + (w2 * groupD8.uX(rotate));\n this.y1 = cY + (h2 * groupD8.uY(rotate));\n\n rotate = groupD8.add(rotate, 2);\n this.x2 = cX + (w2 * groupD8.uX(rotate));\n this.y2 = cY + (h2 * groupD8.uY(rotate));\n\n rotate = groupD8.add(rotate, 2);\n this.x3 = cX + (w2 * groupD8.uX(rotate));\n this.y3 = cY + (h2 * groupD8.uY(rotate));\n }\n else\n {\n this.x0 = frame.x / tw;\n this.y0 = frame.y / th;\n\n this.x1 = (frame.x + frame.width) / tw;\n this.y1 = frame.y / th;\n\n this.x2 = (frame.x + frame.width) / tw;\n this.y2 = (frame.y + frame.height) / th;\n\n this.x3 = frame.x / tw;\n this.y3 = (frame.y + frame.height) / th;\n }\n\n this.uvsFloat32[0] = this.x0;\n this.uvsFloat32[1] = this.y0;\n this.uvsFloat32[2] = this.x1;\n this.uvsFloat32[3] = this.y1;\n this.uvsFloat32[4] = this.x2;\n this.uvsFloat32[5] = this.y2;\n this.uvsFloat32[6] = this.x3;\n this.uvsFloat32[7] = this.y3;\n }\n}\n\nif (process.env.DEBUG)\n{\n TextureUvs.prototype.toString = function toString(): string\n {\n return `[@pixi/core:TextureUvs `\n + `x0=${this.x0} y0=${this.y0} `\n + `x1=${this.x1} y1=${this.y1} x2=${this.x2} `\n + `y2=${this.y2} x3=${this.x3} y3=${this.y3}`\n + `]`;\n };\n}\n","import { Point, Rectangle } from '@pixi/math';\nimport { settings } from '@pixi/settings';\nimport { EventEmitter, getResolutionOfUrl, TextureCache, uid } from '@pixi/utils';\nimport { BaseTexture } from './BaseTexture';\nimport { ImageResource } from './resources/ImageResource';\nimport { TextureUvs } from './TextureUvs';\n\nimport type { IPointData } from '@pixi/math';\nimport type { IBaseTextureOptions, ImageSource } from './BaseTexture';\nimport type { BufferResource, BufferType, IBufferResourceOptions } from './resources/BufferResource';\nimport type { CanvasResource } from './resources/CanvasResource';\nimport type { Resource } from './resources/Resource';\nimport type { TextureMatrix } from './TextureMatrix';\n\nconst DEFAULT_UVS = new TextureUvs();\n\nexport type TextureSource = string | BaseTexture | ImageSource;\n\n/**\n * Stores the width of the non-scalable borders, for example when used with {@link PIXI.NineSlicePlane} texture.\n * @memberof PIXI\n * @since 7.2.0\n */\nexport interface ITextureBorders\n{\n /** left border in pixels */\n left: number;\n /** top border in pixels */\n top: number;\n /** right border in pixels */\n right: number;\n /** bottom border in pixels */\n bottom: number;\n}\n\nexport interface Texture extends GlobalMixins.Texture, EventEmitter {}\n\n/**\n * Used to remove listeners from WHITE and EMPTY Textures\n * @ignore\n */\nfunction removeAllHandlers(tex: any): void\n{\n tex.destroy = function _emptyDestroy(): void { /* empty */ };\n tex.on = function _emptyOn(): void { /* empty */ };\n tex.once = function _emptyOnce(): void { /* empty */ };\n tex.emit = function _emptyEmit(): void { /* empty */ };\n}\n\n/**\n * A texture stores the information that represents an image or part of an image.\n *\n * It cannot be added to the display list directly; instead use it as the texture for a Sprite.\n * If no frame is provided for a texture, then the whole image is used.\n *\n * You can directly create a texture from an image and then reuse it multiple times like this :\n *\n * ```js\n * import { Sprite, Texture } from 'pixi.js';\n *\n * const texture = Texture.from('assets/image.png');\n * const sprite1 = new Sprite(texture);\n * const sprite2 = new Sprite(texture);\n * ```\n *\n * If you didnt pass the texture frame to constructor, it enables `noFrame` mode:\n * it subscribes on baseTexture events, it automatically resizes at the same time as baseTexture.\n *\n * Textures made from SVGs, loaded or not, cannot be used before the file finishes processing.\n * You can check for this by checking the sprite's _textureID property.\n *\n * ```js\n * import { Sprite, Texture } from 'pixi.js';\n *\n * const texture = Texture.from('assets/image.svg');\n * const sprite1 = new Sprite(texture);\n * // sprite1._textureID should not be undefined if the texture has finished processing the SVG file\n * ```\n *\n * You can use a ticker or rAF to ensure your sprites load the finished textures after processing.\n * See issue [#3085]{@link https://github.com/pixijs/pixijs/issues/3085}.\n * @memberof PIXI\n * @typeParam R - The BaseTexture's Resource type.\n */\nexport class Texture extends EventEmitter\n{\n /** The base texture that this texture uses. */\n public baseTexture: BaseTexture;\n\n /** This is the area of original texture, before it was put in atlas. */\n public orig: Rectangle;\n\n /**\n * This is the trimmed area of original texture, before it was put in atlas\n * Please call `updateUvs()` after you change coordinates of `trim` manually.\n */\n public trim: Rectangle;\n\n /** This will let the renderer know if the texture is valid. If it's not then it cannot be rendered. */\n public valid: boolean;\n\n /**\n * Has the texture been destroyed?\n * @readonly\n */\n public destroyed: boolean;\n\n /**\n * Does this Texture have any frame data assigned to it?\n *\n * This mode is enabled automatically if no frame was passed inside constructor.\n *\n * In this mode texture is subscribed to baseTexture events, and fires `update` on any change.\n *\n * Beware, after loading or resize of baseTexture event can fired two times!\n * If you want more control, subscribe on baseTexture itself.\n *\n * Any assignment of `frame` switches off `noFrame` mode.\n * @example\n * texture.on('update', () => {});\n */\n public noFrame: boolean;\n\n /**\n * Anchor point that is used as default if sprite is created with this texture.\n * Changing the `defaultAnchor` at a later point of time will not update Sprite's anchor point.\n * @default {0,0}\n */\n public defaultAnchor: Point;\n\n /**\n * Default width of the non-scalable border that is used if 9-slice plane is created with this texture.\n * @since 7.2.0\n * @see PIXI.NineSlicePlane\n */\n public defaultBorders?: ITextureBorders;\n\n /** Default TextureMatrix instance for this texture. By default, that object is not created because its heavy. */\n public uvMatrix: TextureMatrix;\n protected _rotate: number;\n\n /**\n * Update ID is observed by sprites and TextureMatrix instances.\n * Call updateUvs() to increment it.\n * @protected\n */\n _updateID: number;\n\n /**\n * This is the area of the BaseTexture image to actually copy to the Canvas / WebGL when rendering,\n * irrespective of the actual frame size or placement (which can be influenced by trimmed texture atlases)\n */\n _frame: Rectangle;\n\n /**\n * The WebGL UV data cache. Can be used as quad UV.\n * @protected\n */\n _uvs: TextureUvs;\n\n /**\n * The ids under which this Texture has been added to the texture cache. This is\n * automatically set as long as Texture.addToCache is used, but may not be set if a\n * Texture is added directly to the TextureCache array.\n */\n textureCacheIds: Array;\n\n /**\n * @param baseTexture - The base texture source to create the texture from\n * @param frame - The rectangle frame of the texture to show\n * @param orig - The area of original texture\n * @param trim - Trimmed rectangle of original texture\n * @param rotate - indicates how the texture was rotated by texture packer. See {@link PIXI.groupD8}\n * @param anchor - Default anchor point used for sprite placement / rotation\n * @param borders - Default borders used for 9-slice scaling. See {@link PIXI.NineSlicePlane}\n */\n constructor(baseTexture: BaseTexture, frame?: Rectangle,\n orig?: Rectangle, trim?: Rectangle, rotate?: number, anchor?: IPointData, borders?: ITextureBorders)\n {\n super();\n\n this.noFrame = false;\n\n if (!frame)\n {\n this.noFrame = true;\n frame = new Rectangle(0, 0, 1, 1);\n }\n\n if (baseTexture instanceof Texture)\n {\n baseTexture = baseTexture.baseTexture;\n }\n\n this.baseTexture = baseTexture;\n this._frame = frame;\n this.trim = trim;\n this.valid = false;\n this.destroyed = false;\n this._uvs = DEFAULT_UVS;\n this.uvMatrix = null;\n this.orig = orig || frame;// new Rectangle(0, 0, 1, 1);\n\n this._rotate = Number(rotate || 0);\n\n if (rotate as any === true)\n {\n // this is old texturepacker legacy, some games/libraries are passing \"true\" for rotated textures\n this._rotate = 2;\n }\n else if (this._rotate % 2 !== 0)\n {\n throw new Error('attempt to use diamond-shaped UVs. If you are sure, set rotation manually');\n }\n\n this.defaultAnchor = anchor ? new Point(anchor.x, anchor.y) : new Point(0, 0);\n this.defaultBorders = borders;\n\n this._updateID = 0;\n\n this.textureCacheIds = [];\n\n if (!baseTexture.valid)\n {\n baseTexture.once('loaded', this.onBaseTextureUpdated, this);\n }\n else if (this.noFrame)\n {\n // if there is no frame we should monitor for any base texture changes..\n if (baseTexture.valid)\n {\n this.onBaseTextureUpdated(baseTexture);\n }\n }\n else\n {\n this.frame = frame;\n }\n\n if (this.noFrame)\n {\n baseTexture.on('update', this.onBaseTextureUpdated, this);\n }\n }\n\n /**\n * Updates this texture on the gpu.\n *\n * Calls the TextureResource update.\n *\n * If you adjusted `frame` manually, please call `updateUvs()` instead.\n */\n update(): void\n {\n if (this.baseTexture.resource)\n {\n this.baseTexture.resource.update();\n }\n }\n\n /**\n * Called when the base texture is updated\n * @protected\n * @param baseTexture - The base texture.\n */\n onBaseTextureUpdated(baseTexture: BaseTexture): void\n {\n if (this.noFrame)\n {\n if (!this.baseTexture.valid)\n {\n return;\n }\n\n this._frame.width = baseTexture.width;\n this._frame.height = baseTexture.height;\n this.valid = true;\n this.updateUvs();\n }\n else\n {\n // TODO this code looks confusing.. boo to abusing getters and setters!\n // if user gave us frame that has bigger size than resized texture it can be a problem\n this.frame = this._frame;\n }\n\n this.emit('update', this);\n }\n\n /**\n * Destroys this texture\n * @param [destroyBase=false] - Whether to destroy the base texture as well\n * @fires PIXI.Texture#destroyed\n */\n destroy(destroyBase?: boolean): void\n {\n if (this.baseTexture)\n {\n if (destroyBase)\n {\n const { resource } = this.baseTexture as unknown as BaseTexture;\n\n // delete the texture if it exists in the texture cache..\n // this only needs to be removed if the base texture is actually destroyed too..\n if (resource?.url && TextureCache[resource.url])\n {\n Texture.removeFromCache(resource.url);\n }\n\n this.baseTexture.destroy();\n }\n\n this.baseTexture.off('loaded', this.onBaseTextureUpdated, this);\n this.baseTexture.off('update', this.onBaseTextureUpdated, this);\n\n this.baseTexture = null;\n }\n\n this._frame = null;\n this._uvs = null;\n this.trim = null;\n this.orig = null;\n\n this.valid = false;\n\n Texture.removeFromCache(this);\n this.textureCacheIds = null;\n\n this.destroyed = true;\n this.emit('destroyed', this);\n this.removeAllListeners();\n }\n\n /**\n * Creates a new texture object that acts the same as this one.\n * @returns - The new texture\n */\n clone(): Texture\n {\n const clonedFrame = this._frame.clone();\n const clonedOrig = this._frame === this.orig ? clonedFrame : this.orig.clone();\n const clonedTexture = new Texture(this.baseTexture,\n !this.noFrame && clonedFrame,\n clonedOrig,\n this.trim?.clone(),\n this.rotate,\n this.defaultAnchor,\n this.defaultBorders\n );\n\n if (this.noFrame)\n {\n clonedTexture._frame = clonedFrame;\n }\n\n return clonedTexture;\n }\n\n /**\n * Updates the internal WebGL UV cache. Use it after you change `frame` or `trim` of the texture.\n * Call it after changing the frame\n */\n updateUvs(): void\n {\n if (this._uvs === DEFAULT_UVS)\n {\n this._uvs = new TextureUvs();\n }\n\n this._uvs.set(this._frame, this.baseTexture, this.rotate);\n\n this._updateID++;\n }\n\n /**\n * Helper function that creates a new Texture based on the source you provide.\n * The source can be - frame id, image url, video url, canvas element, video element, base texture\n * @param {string|PIXI.BaseTexture|HTMLImageElement|HTMLVideoElement|ImageBitmap|PIXI.ICanvas} source -\n * Source or array of sources to create texture from\n * @param options - See {@link PIXI.BaseTexture}'s constructor for options.\n * @param {string} [options.pixiIdPrefix=pixiid] - If a source has no id, this is the prefix of the generated id\n * @param {boolean} [strict] - Enforce strict-mode, see {@link PIXI.settings.STRICT_TEXTURE_CACHE}.\n * @returns {PIXI.Texture} The newly created texture\n */\n static from(source: TextureSource | TextureSource[],\n options: IBaseTextureOptions = {},\n strict = settings.STRICT_TEXTURE_CACHE): Texture\n {\n const isFrame = typeof source === 'string';\n let cacheId = null;\n\n if (isFrame)\n {\n cacheId = source;\n }\n else if (source instanceof BaseTexture)\n {\n if (!source.cacheId)\n {\n const prefix = options?.pixiIdPrefix || 'pixiid';\n\n source.cacheId = `${prefix}-${uid()}`;\n BaseTexture.addToCache(source, source.cacheId);\n }\n\n cacheId = source.cacheId;\n }\n else\n {\n if (!(source as any)._pixiId)\n {\n const prefix = options?.pixiIdPrefix || 'pixiid';\n\n (source as any)._pixiId = `${prefix}_${uid()}`;\n }\n\n cacheId = (source as any)._pixiId;\n }\n\n let texture = TextureCache[cacheId] as Texture;\n\n // Strict-mode rejects invalid cacheIds\n if (isFrame && strict && !texture)\n {\n throw new Error(`The cacheId \"${cacheId}\" does not exist in TextureCache.`);\n }\n\n if (!texture && !(source instanceof BaseTexture))\n {\n if (!options.resolution)\n {\n options.resolution = getResolutionOfUrl(source as string);\n }\n\n texture = new Texture(new BaseTexture(source, options));\n texture.baseTexture.cacheId = cacheId;\n\n BaseTexture.addToCache(texture.baseTexture, cacheId);\n Texture.addToCache(texture, cacheId);\n }\n else if (!texture && (source instanceof BaseTexture))\n {\n texture = new Texture(source as BaseTexture);\n\n Texture.addToCache(texture, cacheId);\n }\n\n // lets assume its a base texture!\n return texture;\n }\n\n /**\n * Useful for loading textures via URLs. Use instead of `Texture.from` because\n * it does a better job of handling failed URLs more effectively. This also ignores\n * `PIXI.settings.STRICT_TEXTURE_CACHE`. Works for Videos, SVGs, Images.\n * @param url - The remote URL or array of URLs to load.\n * @param options - Optional options to include\n * @returns - A Promise that resolves to a Texture.\n */\n static fromURL(\n url: string | string[], options?: IBaseTextureOptions): Promise>\n {\n const resourceOptions = Object.assign({ autoLoad: false }, options?.resourceOptions);\n const texture = Texture.from(url, Object.assign({ resourceOptions }, options), false);\n const resource = texture.baseTexture.resource;\n\n // The texture was already loaded\n if (texture.baseTexture.valid)\n {\n return Promise.resolve(texture);\n }\n\n // Manually load the texture, this should allow users to handle load errors\n return resource.load().then(() => Promise.resolve(texture));\n }\n\n /**\n * Create a new Texture with a BufferResource from a typed array.\n * @param buffer - The optional array to use. If no data is provided, a new Float32Array is created.\n * @param width - Width of the resource\n * @param height - Height of the resource\n * @param options - See {@link PIXI.BaseTexture}'s constructor for options.\n * Default properties are different from the constructor's defaults.\n * @param {PIXI.FORMATS} [options.format] - The format is not given, the type is inferred from the\n * type of the buffer: `RGBA` if Float32Array, Int8Array, Uint8Array, or Uint8ClampedArray,\n * otherwise `RGBA_INTEGER`.\n * @param {PIXI.TYPES} [options.type] - The type is not given, the type is inferred from the\n * type of the buffer. Maps Float32Array to `FLOAT`, Int32Array to `INT`, Uint32Array to\n * `UNSIGNED_INT`, Int16Array to `SHORT`, Uint16Array to `UNSIGNED_SHORT`, Int8Array to `BYTE`,\n * Uint8Array/Uint8ClampedArray to `UNSIGNED_BYTE`.\n * @param {PIXI.ALPHA_MODES} [options.alphaMode=PIXI.ALPHA_MODES.NPM]\n * @param {PIXI.SCALE_MODES} [options.scaleMode=PIXI.SCALE_MODES.NEAREST]\n * @returns - The resulting new BaseTexture\n */\n static fromBuffer(buffer: BufferType, width: number, height: number,\n options?: IBaseTextureOptions): Texture\n {\n return new Texture(BaseTexture.fromBuffer(buffer, width, height, options));\n }\n\n /**\n * Create a texture from a source and add to the cache.\n * @param {HTMLImageElement|HTMLVideoElement|ImageBitmap|PIXI.ICanvas|string} source - The input source.\n * @param imageUrl - File name of texture, for cache and resolving resolution.\n * @param name - Human readable name for the texture cache. If no name is\n * specified, only `imageUrl` will be used as the cache ID.\n * @param options\n * @returns - Output texture\n */\n static fromLoader(source: ImageSource | string,\n imageUrl: string, name?: string, options?: IBaseTextureOptions): Promise>\n {\n const baseTexture = new BaseTexture(source, Object.assign({\n scaleMode: BaseTexture.defaultOptions.scaleMode,\n resolution: getResolutionOfUrl(imageUrl),\n }, options));\n\n const { resource } = baseTexture;\n\n if (resource instanceof ImageResource)\n {\n resource.url = imageUrl;\n }\n\n const texture = new Texture(baseTexture);\n\n // No name, use imageUrl instead\n if (!name)\n {\n name = imageUrl;\n }\n\n // lets also add the frame to pixi's global cache for 'fromLoader' function\n BaseTexture.addToCache(texture.baseTexture, name);\n Texture.addToCache(texture, name);\n\n // also add references by url if they are different.\n if (name !== imageUrl)\n {\n BaseTexture.addToCache(texture.baseTexture, imageUrl);\n Texture.addToCache(texture, imageUrl);\n }\n\n // Generally images are valid right away\n if (texture.baseTexture.valid)\n {\n return Promise.resolve(texture);\n }\n\n // SVG assets need to be parsed async, let's wait\n return new Promise((resolve) =>\n {\n texture.baseTexture.once('loaded', () => resolve(texture));\n });\n }\n\n /**\n * Adds a Texture to the global TextureCache. This cache is shared across the whole PIXI object.\n * @param texture - The Texture to add to the cache.\n * @param id - The id that the Texture will be stored against.\n */\n static addToCache(texture: Texture, id: string): void\n {\n if (id)\n {\n if (!texture.textureCacheIds.includes(id))\n {\n texture.textureCacheIds.push(id);\n }\n\n // only throw a warning if there is a different texture mapped to this id.\n if (TextureCache[id] && TextureCache[id] !== texture)\n {\n // eslint-disable-next-line no-console\n console.warn(`Texture added to the cache with an id [${id}] that already had an entry`);\n }\n\n TextureCache[id] = texture;\n }\n }\n\n /**\n * Remove a Texture from the global TextureCache.\n * @param texture - id of a Texture to be removed, or a Texture instance itself\n * @returns - The Texture that was removed\n */\n static removeFromCache(texture: string | Texture): Texture | null\n {\n if (typeof texture === 'string')\n {\n const textureFromCache = TextureCache[texture];\n\n if (textureFromCache)\n {\n const index = textureFromCache.textureCacheIds.indexOf(texture);\n\n if (index > -1)\n {\n textureFromCache.textureCacheIds.splice(index, 1);\n }\n\n delete TextureCache[texture];\n\n return textureFromCache;\n }\n }\n else if (texture?.textureCacheIds)\n {\n for (let i = 0; i < texture.textureCacheIds.length; ++i)\n {\n // Check that texture matches the one being passed in before deleting it from the cache.\n if (TextureCache[texture.textureCacheIds[i]] === texture)\n {\n delete TextureCache[texture.textureCacheIds[i]];\n }\n }\n\n texture.textureCacheIds.length = 0;\n\n return texture;\n }\n\n return null;\n }\n\n /**\n * Returns resolution of baseTexture\n * @readonly\n */\n get resolution(): number\n {\n return this.baseTexture.resolution;\n }\n\n /**\n * The frame specifies the region of the base texture that this texture uses.\n * Please call `updateUvs()` after you change coordinates of `frame` manually.\n */\n get frame(): Rectangle\n {\n return this._frame;\n }\n\n set frame(frame: Rectangle)\n {\n this._frame = frame;\n\n this.noFrame = false;\n\n const { x, y, width, height } = frame;\n const xNotFit = x + width > this.baseTexture.width;\n const yNotFit = y + height > this.baseTexture.height;\n\n if (xNotFit || yNotFit)\n {\n const relationship = xNotFit && yNotFit ? 'and' : 'or';\n const errorX = `X: ${x} + ${width} = ${x + width} > ${this.baseTexture.width}`;\n const errorY = `Y: ${y} + ${height} = ${y + height} > ${this.baseTexture.height}`;\n\n throw new Error('Texture Error: frame does not fit inside the base Texture dimensions: '\n + `${errorX} ${relationship} ${errorY}`);\n }\n\n this.valid = width && height && this.baseTexture.valid;\n\n if (!this.trim && !this.rotate)\n {\n this.orig = frame;\n }\n\n if (this.valid)\n {\n this.updateUvs();\n }\n }\n\n /**\n * Indicates whether the texture is rotated inside the atlas\n * set to 2 to compensate for texture packer rotation\n * set to 6 to compensate for spine packer rotation\n * can be used to rotate or mirror sprites\n * See {@link PIXI.groupD8} for explanation\n */\n get rotate(): number\n {\n return this._rotate;\n }\n\n set rotate(rotate: number)\n {\n this._rotate = rotate;\n if (this.valid)\n {\n this.updateUvs();\n }\n }\n\n /** The width of the Texture in pixels. */\n get width(): number\n {\n return this.orig.width;\n }\n\n /** The height of the Texture in pixels. */\n get height(): number\n {\n return this.orig.height;\n }\n\n /** Utility function for BaseTexture|Texture cast. */\n castToBaseTexture(): BaseTexture\n {\n return this.baseTexture;\n }\n\n private static _EMPTY: Texture;\n private static _WHITE: Texture;\n\n /** An empty texture, used often to not have to create multiple empty textures. Can not be destroyed. */\n public static get EMPTY(): Texture\n {\n if (!Texture._EMPTY)\n {\n Texture._EMPTY = new Texture(new BaseTexture());\n removeAllHandlers(Texture._EMPTY);\n removeAllHandlers(Texture._EMPTY.baseTexture);\n }\n\n return Texture._EMPTY;\n }\n\n /** A white texture of 16x16 size, used for graphics and other things Can not be destroyed. */\n public static get WHITE(): Texture\n {\n if (!Texture._WHITE)\n {\n const canvas = settings.ADAPTER.createCanvas(16, 16);\n const context = canvas.getContext('2d');\n\n canvas.width = 16;\n canvas.height = 16;\n context.fillStyle = 'white';\n context.fillRect(0, 0, 16, 16);\n\n Texture._WHITE = new Texture(BaseTexture.from(canvas));\n removeAllHandlers(Texture._WHITE);\n removeAllHandlers(Texture._WHITE.baseTexture);\n }\n\n return Texture._WHITE;\n }\n}\n\n","import { Texture } from '../textures/Texture';\nimport { BaseRenderTexture } from './BaseRenderTexture';\n\nimport type { MSAA_QUALITY } from '@pixi/constants';\nimport type { Rectangle } from '@pixi/math';\nimport type { Framebuffer } from '../framebuffer/Framebuffer';\nimport type { IBaseTextureOptions } from '../textures/BaseTexture';\n\n/**\n * A RenderTexture is a special texture that allows any PixiJS display object to be rendered to it.\n *\n * __Hint__: All DisplayObjects (i.e. Sprites) that render to a RenderTexture should be preloaded\n * otherwise black rectangles will be drawn instead.\n *\n * __Hint-2__: The actual memory allocation will happen on first render.\n * You shouldn't create renderTextures each frame just to delete them after, try to reuse them.\n *\n * A RenderTexture takes a snapshot of any Display Object given to its render method. For example:\n * @example\n * import { autoDetectRenderer, RenderTexture, Sprite } from 'pixi.js';\n *\n * const renderer = autoDetectRenderer();\n * const renderTexture = RenderTexture.create({ width: 800, height: 600 });\n * const sprite = Sprite.from('spinObj_01.png');\n *\n * sprite.position.x = 800 / 2;\n * sprite.position.y = 600 / 2;\n * sprite.anchor.x = 0.5;\n * sprite.anchor.y = 0.5;\n *\n * renderer.render(sprite, { renderTexture });\n *\n * // Note that you should not create a new renderer, but reuse the same one as the rest of the application.\n * // The Sprite in this case will be rendered using its local transform. To render this sprite at 0,0\n * // you can clear the transform\n *\n * sprite.setTransform();\n *\n * const renderTexture = new RenderTexture.create({ width: 100, height: 100 });\n *\n * renderer.render(sprite, { renderTexture }); // Renders to center of RenderTexture\n * @memberof PIXI\n */\nexport class RenderTexture extends Texture\n{\n public baseTexture: BaseRenderTexture;\n\n /**\n * Stores `sourceFrame` when this texture is inside current filter stack.\n *\n * You can read it inside filters.\n * @readonly\n */\n public filterFrame: Rectangle | null;\n\n /**\n * The key for pooled texture of FilterSystem.\n * @see PIXI.RenderTexturePool\n */\n public filterPoolKey: string | number | null;\n\n /**\n * @param baseRenderTexture - The base texture object that this texture uses.\n * @param frame - The rectangle frame of the texture to show.\n */\n constructor(baseRenderTexture: BaseRenderTexture, frame?: Rectangle)\n {\n super(baseRenderTexture, frame);\n\n this.valid = true;\n\n this.filterFrame = null;\n this.filterPoolKey = null;\n\n this.updateUvs();\n }\n\n /**\n * Shortcut to `this.baseTexture.framebuffer`, saves baseTexture cast.\n * @readonly\n */\n get framebuffer(): Framebuffer\n {\n return this.baseTexture.framebuffer;\n }\n\n /**\n * Shortcut to `this.framebuffer.multisample`.\n * @default PIXI.MSAA_QUALITY.NONE\n */\n get multisample(): MSAA_QUALITY\n {\n return this.framebuffer.multisample;\n }\n\n set multisample(value: MSAA_QUALITY)\n {\n this.framebuffer.multisample = value;\n }\n\n /**\n * Resizes the RenderTexture.\n * @param desiredWidth - The desired width to resize to.\n * @param desiredHeight - The desired height to resize to.\n * @param resizeBaseTexture - Should the baseTexture.width and height values be resized as well?\n */\n resize(desiredWidth: number, desiredHeight: number, resizeBaseTexture = true): void\n {\n const resolution = this.baseTexture.resolution;\n const width = Math.round(desiredWidth * resolution) / resolution;\n const height = Math.round(desiredHeight * resolution) / resolution;\n\n // TODO - could be not required..\n this.valid = (width > 0 && height > 0);\n\n this._frame.width = this.orig.width = width;\n this._frame.height = this.orig.height = height;\n\n if (resizeBaseTexture)\n {\n this.baseTexture.resize(width, height);\n }\n\n this.updateUvs();\n }\n\n /**\n * Changes the resolution of baseTexture, but does not change framebuffer size.\n * @param resolution - The new resolution to apply to RenderTexture\n */\n setResolution(resolution: number): void\n {\n const { baseTexture } = this;\n\n if (baseTexture.resolution === resolution)\n {\n return;\n }\n\n baseTexture.setResolution(resolution);\n this.resize(baseTexture.width, baseTexture.height, false);\n }\n\n /**\n * A short hand way of creating a render texture.\n * @param options - Options\n * @param {number} [options.width=100] - The width of the render texture\n * @param {number} [options.height=100] - The height of the render texture\n * @param {PIXI.SCALE_MODES} [options.scaleMode=PIXI.BaseTexture.defaultOptions.scaleMode] - See {@link PIXI.SCALE_MODES}\n * for possible values\n * @param {number} [options.resolution=PIXI.settings.RESOLUTION] - The resolution / device pixel ratio of the texture\n * being generated\n * @param {PIXI.MSAA_QUALITY} [options.multisample=PIXI.MSAA_QUALITY.NONE] - The number of samples of the frame buffer\n * @returns The new render texture\n */\n static create(options?: IBaseTextureOptions): RenderTexture\n {\n return new RenderTexture(new BaseRenderTexture(options));\n }\n}\n","import { MSAA_QUALITY } from '@pixi/constants';\nimport { nextPow2 } from '@pixi/utils';\nimport { BaseRenderTexture } from './BaseRenderTexture';\nimport { RenderTexture } from './RenderTexture';\n\nimport type { ISize } from '@pixi/math';\nimport type { IBaseTextureOptions } from '../textures/BaseTexture';\n\n/**\n * Texture pool, used by FilterSystem and plugins.\n *\n * Stores collection of temporary pow2 or screen-sized renderTextures\n *\n * If you use custom RenderTexturePool for your filters, you can use methods\n * `getFilterTexture` and `returnFilterTexture` same as in\n * @memberof PIXI\n */\nexport class RenderTexturePool\n{\n public textureOptions: IBaseTextureOptions;\n\n /**\n * Allow renderTextures of the same size as screen, not just pow2\n *\n * Automatically sets to true after `setScreenSize`\n * @default false\n */\n public enableFullScreen: boolean;\n texturePool: {[x in string | number]: RenderTexture[]};\n private _pixelsWidth: number;\n private _pixelsHeight: number;\n\n /**\n * @param textureOptions - options that will be passed to BaseRenderTexture constructor\n * @param {PIXI.SCALE_MODES} [textureOptions.scaleMode] - See {@link PIXI.SCALE_MODES} for possible values.\n */\n constructor(textureOptions?: IBaseTextureOptions)\n {\n this.texturePool = {};\n this.textureOptions = textureOptions || {};\n this.enableFullScreen = false;\n\n this._pixelsWidth = 0;\n this._pixelsHeight = 0;\n }\n\n /**\n * Creates texture with params that were specified in pool constructor.\n * @param realWidth - Width of texture in pixels.\n * @param realHeight - Height of texture in pixels.\n * @param multisample - Number of samples of the framebuffer.\n */\n createTexture(realWidth: number, realHeight: number, multisample = MSAA_QUALITY.NONE): RenderTexture\n {\n const baseRenderTexture = new BaseRenderTexture(Object.assign({\n width: realWidth,\n height: realHeight,\n resolution: 1,\n multisample,\n }, this.textureOptions));\n\n return new RenderTexture(baseRenderTexture);\n }\n\n /**\n * Gets a Power-of-Two render texture or fullScreen texture\n * @param minWidth - The minimum width of the render texture.\n * @param minHeight - The minimum height of the render texture.\n * @param resolution - The resolution of the render texture.\n * @param multisample - Number of samples of the render texture.\n * @returns The new render texture.\n */\n getOptimalTexture(minWidth: number, minHeight: number, resolution = 1, multisample = MSAA_QUALITY.NONE): RenderTexture\n {\n let key;\n\n minWidth = Math.max(Math.ceil((minWidth * resolution) - 1e-6), 1);\n minHeight = Math.max(Math.ceil((minHeight * resolution) - 1e-6), 1);\n\n if (!this.enableFullScreen || minWidth !== this._pixelsWidth || minHeight !== this._pixelsHeight)\n {\n minWidth = nextPow2(minWidth);\n minHeight = nextPow2(minHeight);\n key = (((minWidth & 0xFFFF) << 16) | (minHeight & 0xFFFF)) >>> 0;\n\n if (multisample > 1)\n {\n key += multisample * 0x100000000;\n }\n }\n else\n {\n key = multisample > 1 ? -multisample : -1;\n }\n\n if (!this.texturePool[key])\n {\n this.texturePool[key] = [];\n }\n\n let renderTexture = this.texturePool[key].pop();\n\n if (!renderTexture)\n {\n renderTexture = this.createTexture(minWidth, minHeight, multisample);\n }\n\n renderTexture.filterPoolKey = key;\n renderTexture.setResolution(resolution);\n\n return renderTexture;\n }\n\n /**\n * Gets extra texture of the same size as input renderTexture\n *\n * `getFilterTexture(input, 0.5)` or `getFilterTexture(0.5, input)`\n * @param input - renderTexture from which size and resolution will be copied\n * @param resolution - override resolution of the renderTexture\n * It overrides, it does not multiply\n * @param multisample - number of samples of the renderTexture\n */\n getFilterTexture(input: RenderTexture, resolution?: number, multisample?: MSAA_QUALITY): RenderTexture\n {\n const filterTexture = this.getOptimalTexture(input.width, input.height, resolution || input.resolution,\n multisample || MSAA_QUALITY.NONE);\n\n filterTexture.filterFrame = input.filterFrame;\n\n return filterTexture;\n }\n\n /**\n * Place a render texture back into the pool.\n * @param renderTexture - The renderTexture to free\n */\n returnTexture(renderTexture: RenderTexture): void\n {\n const key = renderTexture.filterPoolKey;\n\n renderTexture.filterFrame = null;\n this.texturePool[key].push(renderTexture);\n }\n\n /**\n * Alias for returnTexture, to be compliant with FilterSystem interface.\n * @param renderTexture - The renderTexture to free\n */\n returnFilterTexture(renderTexture: RenderTexture): void\n {\n this.returnTexture(renderTexture);\n }\n\n /**\n * Clears the pool.\n * @param destroyTextures - Destroy all stored textures.\n */\n clear(destroyTextures?: boolean): void\n {\n destroyTextures = destroyTextures !== false;\n if (destroyTextures)\n {\n for (const i in this.texturePool)\n {\n const textures = this.texturePool[i];\n\n if (textures)\n {\n for (let j = 0; j < textures.length; j++)\n {\n textures[j].destroy(true);\n }\n }\n }\n }\n\n this.texturePool = {};\n }\n\n /**\n * If screen size was changed, drops all screen-sized textures,\n * sets new screen size, sets `enableFullScreen` to true\n *\n * Size is measured in pixels, `renderer.view` can be passed here, not `renderer.screen`\n * @param size - Initial size of screen.\n */\n setScreenSize(size: ISize): void\n {\n if (size.width === this._pixelsWidth\n && size.height === this._pixelsHeight)\n {\n return;\n }\n\n this.enableFullScreen = size.width > 0 && size.height > 0;\n\n for (const i in this.texturePool)\n {\n if (!(Number(i) < 0))\n {\n continue;\n }\n\n const textures = this.texturePool[i];\n\n if (textures)\n {\n for (let j = 0; j < textures.length; j++)\n {\n textures[j].destroy(true);\n }\n }\n\n this.texturePool[i] = [];\n }\n\n this._pixelsWidth = size.width;\n this._pixelsHeight = size.height;\n }\n\n /**\n * Key that is used to store fullscreen renderTextures in a pool\n * @readonly\n */\n static SCREEN_KEY = -1;\n}\n","import { Geometry } from '../geometry/Geometry';\n\n/**\n * Helper class to create a quad\n * @memberof PIXI\n */\nexport class Quad extends Geometry\n{\n constructor()\n {\n super();\n\n this.addAttribute('aVertexPosition', new Float32Array([\n 0, 0,\n 1, 0,\n 1, 1,\n 0, 1,\n ]))\n .addIndex([0, 1, 3, 2]);\n }\n}\n","import { Buffer } from '../geometry/Buffer';\nimport { Geometry } from '../geometry/Geometry';\n\nimport type { Rectangle } from '@pixi/math';\n\n/**\n * Helper class to create a quad with uvs like in v4\n * @memberof PIXI\n */\nexport class QuadUv extends Geometry\n{\n vertexBuffer: Buffer;\n uvBuffer: Buffer;\n\n /** An array of vertices. */\n vertices: Float32Array;\n\n /** The Uvs of the quad. */\n uvs: Float32Array;\n\n constructor()\n {\n super();\n\n this.vertices = new Float32Array([\n -1, -1,\n 1, -1,\n 1, 1,\n -1, 1,\n ]);\n\n this.uvs = new Float32Array([\n 0, 0,\n 1, 0,\n 1, 1,\n 0, 1,\n ]);\n\n this.vertexBuffer = new Buffer(this.vertices);\n this.uvBuffer = new Buffer(this.uvs);\n\n this.addAttribute('aVertexPosition', this.vertexBuffer)\n .addAttribute('aTextureCoord', this.uvBuffer)\n .addIndex([0, 1, 2, 0, 2, 3]);\n }\n\n /**\n * Maps two Rectangle to the quad.\n * @param targetTextureFrame - The first rectangle\n * @param destinationFrame - The second rectangle\n * @returns - Returns itself.\n */\n map(targetTextureFrame: Rectangle, destinationFrame: Rectangle): this\n {\n let x = 0; // destinationFrame.x / targetTextureFrame.width;\n let y = 0; // destinationFrame.y / targetTextureFrame.height;\n\n this.uvs[0] = x;\n this.uvs[1] = y;\n\n this.uvs[2] = x + (destinationFrame.width / targetTextureFrame.width);\n this.uvs[3] = y;\n\n this.uvs[4] = x + (destinationFrame.width / targetTextureFrame.width);\n this.uvs[5] = y + (destinationFrame.height / targetTextureFrame.height);\n\n this.uvs[6] = x;\n this.uvs[7] = y + (destinationFrame.height / targetTextureFrame.height);\n\n x = destinationFrame.x;\n y = destinationFrame.y;\n\n this.vertices[0] = x;\n this.vertices[1] = y;\n\n this.vertices[2] = x + destinationFrame.width;\n this.vertices[3] = y;\n\n this.vertices[4] = x + destinationFrame.width;\n this.vertices[5] = y + destinationFrame.height;\n\n this.vertices[6] = x;\n this.vertices[7] = y + destinationFrame.height;\n\n this.invalidate();\n\n return this;\n }\n\n /**\n * Legacy upload method, just marks buffers dirty.\n * @returns - Returns itself.\n */\n invalidate(): this\n {\n this.vertexBuffer._updateID++;\n this.uvBuffer._updateID++;\n\n return this;\n }\n}\n","import { MSAA_QUALITY } from '@pixi/constants';\nimport { Rectangle } from '@pixi/math';\n\nimport type { Matrix } from '@pixi/math';\nimport type { RenderTexture } from '../renderTexture/RenderTexture';\nimport type { Filter } from './Filter';\nimport type { IFilterTarget } from './IFilterTarget';\n\n/**\n * System plugin to the renderer to manage filter states.\n * @ignore\n */\nexport class FilterState\n{\n renderTexture: RenderTexture;\n\n /**\n * Target of the filters\n * We store for case when custom filter wants to know the element it was applied on\n * @member {PIXI.DisplayObject}\n */\n target: IFilterTarget;\n\n /**\n * Compatibility with PixiJS v4 filters\n * @default false\n */\n legacy: boolean;\n\n /**\n * Resolution of filters\n * @default 1\n */\n resolution: number;\n\n /**\n * Number of samples\n * @default MSAA_QUALITY.NONE\n */\n multisample: MSAA_QUALITY;\n\n /** Source frame. */\n sourceFrame: Rectangle;\n\n /** Destination frame. */\n destinationFrame: Rectangle;\n\n /** Original render-target source frame. */\n bindingSourceFrame: Rectangle;\n\n /** Original render-target destination frame. */\n bindingDestinationFrame: Rectangle;\n\n /** Collection of filters. */\n filters: Array;\n\n /** Projection system transform saved by link. */\n transform: Matrix;\n\n constructor()\n {\n this.renderTexture = null;\n\n this.target = null;\n this.legacy = false;\n this.resolution = 1;\n this.multisample = MSAA_QUALITY.NONE;\n\n // next three fields are created only for root\n // re-assigned for everything else\n\n this.sourceFrame = new Rectangle();\n this.destinationFrame = new Rectangle();\n this.bindingSourceFrame = new Rectangle();\n this.bindingDestinationFrame = new Rectangle();\n this.filters = [];\n this.transform = null;\n }\n\n /** Clears the state */\n clear(): void\n {\n this.target = null;\n this.filters = null;\n this.renderTexture = null;\n }\n}\n","import { CLEAR_MODES, DRAW_MODES, MSAA_QUALITY } from '@pixi/constants';\nimport { extensions, ExtensionType } from '@pixi/extensions';\nimport { Matrix, Point, Rectangle } from '@pixi/math';\nimport { RenderTexturePool } from '../renderTexture/RenderTexturePool';\nimport { UniformGroup } from '../shader/UniformGroup';\nimport { Quad } from '../utils/Quad';\nimport { QuadUv } from '../utils/QuadUv';\nimport { FilterState } from './FilterState';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { Renderer } from '../Renderer';\nimport type { RenderTexture } from '../renderTexture/RenderTexture';\nimport type { ISystem } from '../system/ISystem';\nimport type { Filter } from './Filter';\nimport type { IFilterTarget } from './IFilterTarget';\nimport type { ISpriteMaskTarget } from './spriteMask/SpriteMaskFilter';\n\nconst tempPoints = [new Point(), new Point(), new Point(), new Point()];\nconst tempMatrix = new Matrix();\n\n/**\n * System plugin to the renderer to manage filters.\n *\n * ## Pipeline\n *\n * The FilterSystem executes the filtering pipeline by rendering the display-object into a texture, applying its\n * [filters]{@link PIXI.Filter} in series, and the last filter outputs into the final render-target.\n *\n * The filter-frame is the rectangle in world space being filtered, and those contents are mapped into\n * `(0, 0, filterFrame.width, filterFrame.height)` into the filter render-texture. The filter-frame is also called\n * the source-frame, as it is used to bind the filter render-textures. The last filter outputs to the `filterFrame`\n * in the final render-target.\n *\n * ## Usage\n *\n * {@link PIXI.Container#renderAdvanced} is an example of how to use the filter system. It is a 3 step process:\n *\n * **push**: Use {@link PIXI.FilterSystem#push} to push the set of filters to be applied on a filter-target.\n * **render**: Render the contents to be filtered using the renderer. The filter-system will only capture the contents\n * inside the bounds of the filter-target. NOTE: Using {@link PIXI.Renderer#render} is\n * illegal during an existing render cycle, and it may reset the filter system.\n * **pop**: Use {@link PIXI.FilterSystem#pop} to pop & execute the filters you initially pushed. It will apply them\n * serially and output to the bounds of the filter-target.\n * @memberof PIXI\n */\nexport class FilterSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'filter',\n };\n\n /**\n * List of filters for the FilterSystem\n * @member {object[]}\n */\n public readonly defaultFilterStack: Array;\n\n /** A pool for storing filter states, save us creating new ones each tick. */\n public statePool: Array;\n\n /** Stores a bunch of POT textures used for filtering. */\n public texturePool: RenderTexturePool;\n\n /** Whether to clear output renderTexture in AUTO/BLIT mode. See {@link PIXI.CLEAR_MODES}. */\n public forceClear: boolean;\n\n /**\n * Old padding behavior is to use the max amount instead of sum padding.\n * Use this flag if you need the old behavior.\n * @default false\n */\n public useMaxPadding: boolean;\n\n /** A very simple geometry used when drawing a filter effect to the screen. */\n protected quad: Quad;\n\n /** Quad UVs */\n protected quadUv: QuadUv;\n\n /**\n * Active state\n * @member {object}\n */\n protected activeState: FilterState;\n\n /**\n * This uniform group is attached to filter uniforms when used.\n * @property {PIXI.Rectangle} outputFrame -\n * @property {Float32Array} inputSize -\n * @property {Float32Array} inputPixel -\n * @property {Float32Array} inputClamp -\n * @property {number} resolution -\n * @property {Float32Array} filterArea -\n * @property {Float32Array} filterClamp -\n */\n protected globalUniforms: UniformGroup;\n\n /** Temporary rect for math. */\n private tempRect: Rectangle;\n public renderer: Renderer;\n\n /**\n * @param renderer - The renderer this System works for.\n */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n\n this.defaultFilterStack = [{}] as any;\n\n this.texturePool = new RenderTexturePool();\n\n this.statePool = [];\n\n this.quad = new Quad();\n this.quadUv = new QuadUv();\n this.tempRect = new Rectangle();\n this.activeState = {} as any;\n\n this.globalUniforms = new UniformGroup({\n outputFrame: new Rectangle(),\n inputSize: new Float32Array(4),\n inputPixel: new Float32Array(4),\n inputClamp: new Float32Array(4),\n resolution: 1,\n\n // legacy variables\n filterArea: new Float32Array(4),\n filterClamp: new Float32Array(4),\n }, true);\n\n this.forceClear = false;\n this.useMaxPadding = false;\n }\n\n init(): void\n {\n this.texturePool.setScreenSize(this.renderer.view);\n }\n\n /**\n * Pushes a set of filters to be applied later to the system. This will redirect further rendering into an\n * input render-texture for the rest of the filtering pipeline.\n * @param {PIXI.DisplayObject} target - The target of the filter to render.\n * @param filters - The filters to apply.\n */\n push(target: IFilterTarget, filters: Array): void\n {\n const renderer = this.renderer;\n const filterStack = this.defaultFilterStack;\n const state = this.statePool.pop() || new FilterState();\n const renderTextureSystem = renderer.renderTexture;\n let currentResolution: number;\n let currentMultisample: MSAA_QUALITY;\n\n if (renderTextureSystem.current)\n {\n const renderTexture = renderTextureSystem.current;\n\n currentResolution = renderTexture.resolution;\n currentMultisample = renderTexture.multisample;\n }\n else\n {\n currentResolution = renderer.resolution;\n currentMultisample = renderer.multisample;\n }\n\n let resolution = filters[0].resolution || currentResolution;\n let multisample = filters[0].multisample ?? currentMultisample;\n let padding = filters[0].padding;\n let autoFit = filters[0].autoFit;\n // We don't know whether it's a legacy filter until it was bound for the first time,\n // therefore we have to assume that it is if legacy is undefined.\n let legacy = filters[0].legacy ?? true;\n\n for (let i = 1; i < filters.length; i++)\n {\n const filter = filters[i];\n\n // let's use the lowest resolution\n resolution = Math.min(resolution, filter.resolution || currentResolution);\n // let's use the lowest number of samples\n multisample = Math.min(multisample, filter.multisample ?? currentMultisample);\n // figure out the padding required for filters\n padding = this.useMaxPadding\n // old behavior: use largest amount of padding!\n ? Math.max(padding, filter.padding)\n // new behavior: sum the padding\n : padding + filter.padding;\n // only auto fit if all filters are autofit\n autoFit = autoFit && filter.autoFit;\n\n legacy = legacy || (filter.legacy ?? true);\n }\n\n if (filterStack.length === 1)\n {\n this.defaultFilterStack[0].renderTexture = renderTextureSystem.current;\n }\n\n filterStack.push(state);\n\n state.resolution = resolution;\n state.multisample = multisample;\n\n state.legacy = legacy;\n\n state.target = target;\n state.sourceFrame.copyFrom(target.filterArea || target.getBounds(true));\n\n state.sourceFrame.pad(padding);\n\n const sourceFrameProjected = this.tempRect.copyFrom(renderTextureSystem.sourceFrame);\n\n // Project source frame into world space (if projection is applied)\n if (renderer.projection.transform)\n {\n this.transformAABB(\n tempMatrix.copyFrom(renderer.projection.transform).invert(),\n sourceFrameProjected\n );\n }\n\n if (autoFit)\n {\n state.sourceFrame.fit(sourceFrameProjected);\n\n if (state.sourceFrame.width <= 0 || state.sourceFrame.height <= 0)\n {\n state.sourceFrame.width = 0;\n state.sourceFrame.height = 0;\n }\n }\n else if (!state.sourceFrame.intersects(sourceFrameProjected))\n {\n state.sourceFrame.width = 0;\n state.sourceFrame.height = 0;\n }\n\n // Round sourceFrame in screen space based on render-texture.\n this.roundFrame(\n state.sourceFrame,\n renderTextureSystem.current ? renderTextureSystem.current.resolution : renderer.resolution,\n renderTextureSystem.sourceFrame,\n renderTextureSystem.destinationFrame,\n renderer.projection.transform,\n );\n\n state.renderTexture = this.getOptimalFilterTexture(state.sourceFrame.width, state.sourceFrame.height,\n resolution, multisample);\n state.filters = filters;\n\n state.destinationFrame.width = state.renderTexture.width;\n state.destinationFrame.height = state.renderTexture.height;\n\n const destinationFrame = this.tempRect;\n\n destinationFrame.x = 0;\n destinationFrame.y = 0;\n destinationFrame.width = state.sourceFrame.width;\n destinationFrame.height = state.sourceFrame.height;\n\n state.renderTexture.filterFrame = state.sourceFrame;\n state.bindingSourceFrame.copyFrom(renderTextureSystem.sourceFrame);\n state.bindingDestinationFrame.copyFrom(renderTextureSystem.destinationFrame);\n\n state.transform = renderer.projection.transform;\n renderer.projection.transform = null;\n renderTextureSystem.bind(state.renderTexture, state.sourceFrame, destinationFrame);\n renderer.framebuffer.clear(0, 0, 0, 0);\n }\n\n /** Pops off the filter and applies it. */\n pop(): void\n {\n const filterStack = this.defaultFilterStack;\n const state = filterStack.pop();\n const filters = state.filters;\n\n this.activeState = state;\n\n const globalUniforms = this.globalUniforms.uniforms;\n\n globalUniforms.outputFrame = state.sourceFrame;\n globalUniforms.resolution = state.resolution;\n\n const inputSize = globalUniforms.inputSize;\n const inputPixel = globalUniforms.inputPixel;\n const inputClamp = globalUniforms.inputClamp;\n\n inputSize[0] = state.destinationFrame.width;\n inputSize[1] = state.destinationFrame.height;\n inputSize[2] = 1.0 / inputSize[0];\n inputSize[3] = 1.0 / inputSize[1];\n\n inputPixel[0] = Math.round(inputSize[0] * state.resolution);\n inputPixel[1] = Math.round(inputSize[1] * state.resolution);\n inputPixel[2] = 1.0 / inputPixel[0];\n inputPixel[3] = 1.0 / inputPixel[1];\n\n inputClamp[0] = 0.5 * inputPixel[2];\n inputClamp[1] = 0.5 * inputPixel[3];\n inputClamp[2] = (state.sourceFrame.width * inputSize[2]) - (0.5 * inputPixel[2]);\n inputClamp[3] = (state.sourceFrame.height * inputSize[3]) - (0.5 * inputPixel[3]);\n\n // only update the rect if its legacy..\n if (state.legacy)\n {\n const filterArea = globalUniforms.filterArea;\n\n filterArea[0] = state.destinationFrame.width;\n filterArea[1] = state.destinationFrame.height;\n filterArea[2] = state.sourceFrame.x;\n filterArea[3] = state.sourceFrame.y;\n\n globalUniforms.filterClamp = globalUniforms.inputClamp;\n }\n\n this.globalUniforms.update();\n\n const lastState = filterStack[filterStack.length - 1];\n\n this.renderer.framebuffer.blit();\n\n if (filters.length === 1)\n {\n filters[0].apply(this, state.renderTexture, lastState.renderTexture, CLEAR_MODES.BLEND, state);\n\n this.returnFilterTexture(state.renderTexture);\n }\n else\n {\n let flip = state.renderTexture;\n let flop = this.getOptimalFilterTexture(\n flip.width,\n flip.height,\n state.resolution\n );\n\n flop.filterFrame = flip.filterFrame;\n\n let i = 0;\n\n for (i = 0; i < filters.length - 1; ++i)\n {\n if (i === 1 && state.multisample > 1)\n {\n flop = this.getOptimalFilterTexture(\n flip.width,\n flip.height,\n state.resolution\n );\n\n flop.filterFrame = flip.filterFrame;\n }\n\n filters[i].apply(this, flip, flop, CLEAR_MODES.CLEAR, state);\n\n const t = flip;\n\n flip = flop;\n flop = t;\n }\n\n filters[i].apply(this, flip, lastState.renderTexture, CLEAR_MODES.BLEND, state);\n\n if (i > 1 && state.multisample > 1)\n {\n this.returnFilterTexture(state.renderTexture);\n }\n\n this.returnFilterTexture(flip);\n this.returnFilterTexture(flop);\n }\n\n // lastState.renderTexture is blitted when lastState is popped\n\n state.clear();\n this.statePool.push(state);\n }\n\n /**\n * Binds a renderTexture with corresponding `filterFrame`, clears it if mode corresponds.\n * @param filterTexture - renderTexture to bind, should belong to filter pool or filter stack\n * @param clearMode - clearMode, by default its CLEAR/YES. See {@link PIXI.CLEAR_MODES}\n */\n bindAndClear(filterTexture: RenderTexture, clearMode: CLEAR_MODES = CLEAR_MODES.CLEAR): void\n {\n const {\n renderTexture: renderTextureSystem,\n state: stateSystem,\n } = this.renderer;\n\n if (filterTexture === this.defaultFilterStack[this.defaultFilterStack.length - 1].renderTexture)\n {\n // Restore projection transform if rendering into the output render-target.\n this.renderer.projection.transform = this.activeState.transform;\n }\n else\n {\n // Prevent projection within filtering pipeline.\n this.renderer.projection.transform = null;\n }\n\n if (filterTexture?.filterFrame)\n {\n const destinationFrame = this.tempRect;\n\n destinationFrame.x = 0;\n destinationFrame.y = 0;\n destinationFrame.width = filterTexture.filterFrame.width;\n destinationFrame.height = filterTexture.filterFrame.height;\n\n renderTextureSystem.bind(filterTexture, filterTexture.filterFrame, destinationFrame);\n }\n else if (filterTexture !== this.defaultFilterStack[this.defaultFilterStack.length - 1].renderTexture)\n {\n renderTextureSystem.bind(filterTexture);\n }\n else\n {\n // Restore binding for output render-target.\n this.renderer.renderTexture.bind(\n filterTexture,\n this.activeState.bindingSourceFrame,\n this.activeState.bindingDestinationFrame\n );\n }\n\n // Clear the texture in BLIT mode if blending is disabled or the forceClear flag is set. The blending\n // is stored in the 0th bit of the state.\n const autoClear = (stateSystem.stateId & 1) || this.forceClear;\n\n if (clearMode === CLEAR_MODES.CLEAR\n || (clearMode === CLEAR_MODES.BLIT && autoClear))\n {\n // Use framebuffer.clear because we want to clear the whole filter texture, not just the filtering\n // area over which the shaders are run. This is because filters may sampling outside of it (e.g. blur)\n // instead of clamping their arithmetic.\n this.renderer.framebuffer.clear(0, 0, 0, 0);\n }\n }\n\n /**\n * Draws a filter using the default rendering process.\n *\n * This should be called only by {@link PIXI.Filter#apply}.\n * @param filter - The filter to draw.\n * @param input - The input render target.\n * @param output - The target to output to.\n * @param clearMode - Should the output be cleared before rendering to it\n */\n applyFilter(filter: Filter, input: RenderTexture, output: RenderTexture, clearMode?: CLEAR_MODES): void\n {\n const renderer = this.renderer;\n\n // Set state before binding, so bindAndClear gets the blend mode.\n renderer.state.set(filter.state);\n this.bindAndClear(output, clearMode);\n\n // set the uniforms..\n filter.uniforms.uSampler = input;\n filter.uniforms.filterGlobals = this.globalUniforms;\n\n // TODO make it so that the order of this does not matter..\n // because it does at the moment cos of global uniforms.\n // they need to get resynced\n renderer.shader.bind(filter);\n\n // check to see if the filter is a legacy one..\n filter.legacy = !!filter.program.attributeData.aTextureCoord;\n\n if (filter.legacy)\n {\n this.quadUv.map(input._frame, input.filterFrame);\n\n renderer.geometry.bind(this.quadUv);\n renderer.geometry.draw(DRAW_MODES.TRIANGLES);\n }\n else\n {\n renderer.geometry.bind(this.quad);\n renderer.geometry.draw(DRAW_MODES.TRIANGLE_STRIP);\n }\n }\n\n /**\n * Multiply _input normalized coordinates_ to this matrix to get _sprite texture normalized coordinates_.\n *\n * Use `outputMatrix * vTextureCoord` in the shader.\n * @param outputMatrix - The matrix to output to.\n * @param {PIXI.Sprite} sprite - The sprite to map to.\n * @returns The mapped matrix.\n */\n calculateSpriteMatrix(outputMatrix: Matrix, sprite: ISpriteMaskTarget): Matrix\n {\n const { sourceFrame, destinationFrame } = this.activeState;\n const { orig } = sprite._texture;\n const mappedMatrix = outputMatrix.set(destinationFrame.width, 0, 0,\n destinationFrame.height, sourceFrame.x, sourceFrame.y);\n const worldTransform = sprite.worldTransform.copyTo(Matrix.TEMP_MATRIX);\n\n worldTransform.invert();\n mappedMatrix.prepend(worldTransform);\n mappedMatrix.scale(1.0 / orig.width, 1.0 / orig.height);\n mappedMatrix.translate(sprite.anchor.x, sprite.anchor.y);\n\n return mappedMatrix;\n }\n\n /** Destroys this Filter System. */\n destroy(): void\n {\n this.renderer = null;\n\n // Those textures has to be destroyed by RenderTextureSystem or FramebufferSystem\n this.texturePool.clear(false);\n }\n\n /**\n * Gets a Power-of-Two render texture or fullScreen texture\n * @param minWidth - The minimum width of the render texture in real pixels.\n * @param minHeight - The minimum height of the render texture in real pixels.\n * @param resolution - The resolution of the render texture.\n * @param multisample - Number of samples of the render texture.\n * @returns - The new render texture.\n */\n protected getOptimalFilterTexture(minWidth: number, minHeight: number, resolution = 1,\n multisample: MSAA_QUALITY = MSAA_QUALITY.NONE): RenderTexture\n {\n return this.texturePool.getOptimalTexture(minWidth, minHeight, resolution, multisample);\n }\n\n /**\n * Gets extra render texture to use inside current filter\n * To be compliant with older filters, you can use params in any order\n * @param input - renderTexture from which size and resolution will be copied\n * @param resolution - override resolution of the renderTexture\n * @param multisample - number of samples of the renderTexture\n */\n getFilterTexture(input?: RenderTexture, resolution?: number, multisample?: MSAA_QUALITY): RenderTexture\n {\n if (typeof input === 'number')\n {\n const swap = input;\n\n input = resolution as any;\n resolution = swap;\n }\n\n input = input || this.activeState.renderTexture;\n\n const filterTexture = this.texturePool.getOptimalTexture(input.width, input.height, resolution || input.resolution,\n multisample || MSAA_QUALITY.NONE);\n\n filterTexture.filterFrame = input.filterFrame;\n\n return filterTexture;\n }\n\n /**\n * Frees a render texture back into the pool.\n * @param renderTexture - The renderTarget to free\n */\n returnFilterTexture(renderTexture: RenderTexture): void\n {\n this.texturePool.returnTexture(renderTexture);\n }\n\n /** Empties the texture pool. */\n emptyPool(): void\n {\n this.texturePool.clear(true);\n }\n\n /** Calls `texturePool.resize()`, affects fullScreen renderTextures. */\n resize(): void\n {\n this.texturePool.setScreenSize(this.renderer.view);\n }\n\n /**\n * @param matrix - first param\n * @param rect - second param\n */\n private transformAABB(matrix: Matrix, rect: Rectangle): void\n {\n const lt = tempPoints[0];\n const lb = tempPoints[1];\n const rt = tempPoints[2];\n const rb = tempPoints[3];\n\n lt.set(rect.left, rect.top);\n lb.set(rect.left, rect.bottom);\n rt.set(rect.right, rect.top);\n rb.set(rect.right, rect.bottom);\n\n matrix.apply(lt, lt);\n matrix.apply(lb, lb);\n matrix.apply(rt, rt);\n matrix.apply(rb, rb);\n\n const x0 = Math.min(lt.x, lb.x, rt.x, rb.x);\n const y0 = Math.min(lt.y, lb.y, rt.y, rb.y);\n const x1 = Math.max(lt.x, lb.x, rt.x, rb.x);\n const y1 = Math.max(lt.y, lb.y, rt.y, rb.y);\n\n rect.x = x0;\n rect.y = y0;\n rect.width = x1 - x0;\n rect.height = y1 - y0;\n }\n\n private roundFrame(\n frame: Rectangle,\n resolution: number,\n bindingSourceFrame: Rectangle,\n bindingDestinationFrame: Rectangle,\n transform?: Matrix\n )\n {\n if (frame.width <= 0 || frame.height <= 0 || bindingSourceFrame.width <= 0 || bindingSourceFrame.height <= 0)\n {\n return;\n }\n\n if (transform)\n {\n const { a, b, c, d } = transform;\n\n // Skip if skew/rotation present in matrix, except for multiple of 90° rotation. If rotation\n // is a multiple of 90°, then either pair of (b,c) or (a,d) will be (0,0).\n if ((Math.abs(b) > 1e-4 || Math.abs(c) > 1e-4)\n && (Math.abs(a) > 1e-4 || Math.abs(d) > 1e-4))\n {\n return;\n }\n }\n\n transform = transform ? tempMatrix.copyFrom(transform) : tempMatrix.identity();\n\n // Get forward transform from world space to screen space\n transform\n .translate(-bindingSourceFrame.x, -bindingSourceFrame.y)\n .scale(\n bindingDestinationFrame.width / bindingSourceFrame.width,\n bindingDestinationFrame.height / bindingSourceFrame.height)\n .translate(bindingDestinationFrame.x, bindingDestinationFrame.y);\n\n // Convert frame to screen space\n this.transformAABB(transform, frame);\n\n // Round frame in screen space\n frame.ceil(resolution);\n\n // Project back into world space.\n this.transformAABB(transform.invert(), frame);\n }\n}\n\nextensions.add(FilterSystem);\n","import { MSAA_QUALITY } from '@pixi/constants';\n\nimport type { Framebuffer } from './Framebuffer';\n\n/**\n * Internal framebuffer for WebGL context.\n * @memberof PIXI\n */\nexport class GLFramebuffer\n{\n /** The WebGL framebuffer. */\n public framebuffer: WebGLFramebuffer;\n\n /** The renderbuffer for depth and/or stencil (DEPTH24_STENCIL8, DEPTH_COMPONENT24, or STENCIL_INDEX8) */\n public stencil: WebGLRenderbuffer;\n\n /** Detected AA samples number. */\n public multisample: MSAA_QUALITY;\n\n /** In case MSAA, we use this Renderbuffer instead of colorTextures[0] when we write info. */\n public msaaBuffer: WebGLRenderbuffer;\n\n /**\n * In case we use MSAA, this is actual framebuffer that has colorTextures[0]\n * The contents of that framebuffer are read when we use that renderTexture in sprites\n */\n public blitFramebuffer: Framebuffer;\n\n /** Latest known version of framebuffer. */\n dirtyId: number;\n\n /** Latest known version of framebuffer format. */\n dirtyFormat: number;\n\n /** Latest known version of framebuffer size. */\n dirtySize: number;\n\n /** Store the current mipmap of the textures the framebuffer will write too. */\n mipLevel: number;\n\n constructor(framebuffer: WebGLTexture)\n {\n this.framebuffer = framebuffer;\n this.stencil = null;\n this.dirtyId = -1;\n this.dirtyFormat = -1;\n this.dirtySize = -1;\n this.multisample = MSAA_QUALITY.NONE;\n this.msaaBuffer = null;\n this.blitFramebuffer = null;\n this.mipLevel = 0;\n }\n}\n","import { BUFFER_BITS, ENV, MSAA_QUALITY } from '@pixi/constants';\nimport { extensions, ExtensionType } from '@pixi/extensions';\nimport { Rectangle } from '@pixi/math';\nimport { settings } from '@pixi/settings';\nimport { Framebuffer } from './Framebuffer';\nimport { GLFramebuffer } from './GLFramebuffer';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { IRenderingContext } from '../IRenderer';\nimport type { Renderer } from '../Renderer';\nimport type { ISystem } from '../system/ISystem';\n\nconst tempRectangle = new Rectangle();\n\n/**\n * System plugin to the renderer to manage framebuffers.\n * @memberof PIXI\n */\nexport class FramebufferSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'framebuffer',\n };\n\n /** A list of managed framebuffers. */\n public readonly managedFramebuffers: Array;\n public current: Framebuffer;\n public viewport: Rectangle;\n public hasMRT: boolean;\n public writeDepthTexture: boolean;\n protected CONTEXT_UID: number;\n protected gl: IRenderingContext;\n\n /** Framebuffer value that shows that we don't know what is bound. */\n protected unknownFramebuffer: Framebuffer;\n protected msaaSamples: Array;\n public renderer: Renderer;\n\n /**\n * @param renderer - The renderer this System works for.\n */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n this.managedFramebuffers = [];\n this.unknownFramebuffer = new Framebuffer(10, 10);\n\n this.msaaSamples = null;\n }\n\n /** Sets up the renderer context and necessary buffers. */\n protected contextChange(): void\n {\n this.disposeAll(true);\n\n const gl = this.gl = this.renderer.gl;\n\n this.CONTEXT_UID = this.renderer.CONTEXT_UID;\n this.current = this.unknownFramebuffer;\n this.viewport = new Rectangle();\n this.hasMRT = true;\n this.writeDepthTexture = true;\n\n // webgl2\n if (this.renderer.context.webGLVersion === 1)\n {\n // webgl 1!\n let nativeDrawBuffersExtension = this.renderer.context.extensions.drawBuffers;\n let nativeDepthTextureExtension = this.renderer.context.extensions.depthTexture;\n\n if (settings.PREFER_ENV === ENV.WEBGL_LEGACY)\n {\n nativeDrawBuffersExtension = null;\n nativeDepthTextureExtension = null;\n }\n\n if (nativeDrawBuffersExtension)\n {\n gl.drawBuffers = (activeTextures: number[]): void =>\n nativeDrawBuffersExtension.drawBuffersWEBGL(activeTextures);\n }\n else\n {\n this.hasMRT = false;\n gl.drawBuffers = (): void =>\n {\n // empty\n };\n }\n\n if (!nativeDepthTextureExtension)\n {\n this.writeDepthTexture = false;\n }\n }\n else\n {\n // WebGL2\n // cache possible MSAA samples\n this.msaaSamples = gl.getInternalformatParameter(gl.RENDERBUFFER, gl.RGBA8, gl.SAMPLES);\n }\n }\n\n /**\n * Bind a framebuffer.\n * @param framebuffer\n * @param frame - frame, default is framebuffer size\n * @param mipLevel - optional mip level to set on the framebuffer - defaults to 0\n */\n bind(framebuffer?: Framebuffer, frame?: Rectangle, mipLevel = 0): void\n {\n const { gl } = this;\n\n if (framebuffer)\n {\n // TODO caching layer!\n\n const fbo = framebuffer.glFramebuffers[this.CONTEXT_UID] || this.initFramebuffer(framebuffer);\n\n if (this.current !== framebuffer)\n {\n this.current = framebuffer;\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo.framebuffer);\n }\n // make sure all textures are unbound..\n\n if (fbo.mipLevel !== mipLevel)\n {\n framebuffer.dirtyId++;\n framebuffer.dirtyFormat++;\n fbo.mipLevel = mipLevel;\n }\n\n // now check for updates...\n if (fbo.dirtyId !== framebuffer.dirtyId)\n {\n fbo.dirtyId = framebuffer.dirtyId;\n\n if (fbo.dirtyFormat !== framebuffer.dirtyFormat)\n {\n fbo.dirtyFormat = framebuffer.dirtyFormat;\n fbo.dirtySize = framebuffer.dirtySize;\n this.updateFramebuffer(framebuffer, mipLevel);\n }\n else if (fbo.dirtySize !== framebuffer.dirtySize)\n {\n fbo.dirtySize = framebuffer.dirtySize;\n this.resizeFramebuffer(framebuffer);\n }\n }\n\n for (let i = 0; i < framebuffer.colorTextures.length; i++)\n {\n const tex = framebuffer.colorTextures[i];\n\n this.renderer.texture.unbind(tex.parentTextureArray || tex);\n }\n\n if (framebuffer.depthTexture)\n {\n this.renderer.texture.unbind(framebuffer.depthTexture);\n }\n\n if (frame)\n {\n const mipWidth = (frame.width >> mipLevel);\n const mipHeight = (frame.height >> mipLevel);\n\n const scale = mipWidth / frame.width;\n\n this.setViewport(\n frame.x * scale,\n frame.y * scale,\n mipWidth,\n mipHeight\n );\n }\n else\n {\n const mipWidth = (framebuffer.width >> mipLevel);\n const mipHeight = (framebuffer.height >> mipLevel);\n\n this.setViewport(0, 0, mipWidth, mipHeight);\n }\n }\n else\n {\n if (this.current)\n {\n this.current = null;\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n }\n\n if (frame)\n {\n this.setViewport(frame.x, frame.y, frame.width, frame.height);\n }\n else\n {\n this.setViewport(0, 0, this.renderer.width, this.renderer.height);\n }\n }\n }\n\n /**\n * Set the WebGLRenderingContext's viewport.\n * @param x - X position of viewport\n * @param y - Y position of viewport\n * @param width - Width of viewport\n * @param height - Height of viewport\n */\n setViewport(x: number, y: number, width: number, height: number): void\n {\n const v = this.viewport;\n\n x = Math.round(x);\n y = Math.round(y);\n width = Math.round(width);\n height = Math.round(height);\n\n if (v.width !== width || v.height !== height || v.x !== x || v.y !== y)\n {\n v.x = x;\n v.y = y;\n v.width = width;\n v.height = height;\n\n this.gl.viewport(x, y, width, height);\n }\n }\n\n /**\n * Get the size of the current width and height. Returns object with `width` and `height` values.\n * @readonly\n */\n get size(): { x: number; y: number; width: number; height: number }\n {\n if (this.current)\n {\n // TODO store temp\n return { x: 0, y: 0, width: this.current.width, height: this.current.height };\n }\n\n return { x: 0, y: 0, width: this.renderer.width, height: this.renderer.height };\n }\n\n /**\n * Clear the color of the context\n * @param r - Red value from 0 to 1\n * @param g - Green value from 0 to 1\n * @param b - Blue value from 0 to 1\n * @param a - Alpha value from 0 to 1\n * @param {PIXI.BUFFER_BITS} [mask=BUFFER_BITS.COLOR | BUFFER_BITS.DEPTH] - Bitwise OR of masks\n * that indicate the buffers to be cleared, by default COLOR and DEPTH buffers.\n */\n clear(r: number, g: number, b: number, a: number, mask: BUFFER_BITS = BUFFER_BITS.COLOR | BUFFER_BITS.DEPTH): void\n {\n const { gl } = this;\n\n // TODO clear color can be set only one right?\n gl.clearColor(r, g, b, a);\n gl.clear(mask);\n }\n\n /**\n * Initialize framebuffer for this context\n * @protected\n * @param framebuffer\n * @returns - created GLFramebuffer\n */\n initFramebuffer(framebuffer: Framebuffer): GLFramebuffer\n {\n const { gl } = this;\n const fbo = new GLFramebuffer(gl.createFramebuffer());\n\n fbo.multisample = this.detectSamples(framebuffer.multisample);\n framebuffer.glFramebuffers[this.CONTEXT_UID] = fbo;\n\n this.managedFramebuffers.push(framebuffer);\n framebuffer.disposeRunner.add(this);\n\n return fbo;\n }\n\n /**\n * Resize the framebuffer\n * @param framebuffer\n * @protected\n */\n resizeFramebuffer(framebuffer: Framebuffer): void\n {\n const { gl } = this;\n\n const fbo = framebuffer.glFramebuffers[this.CONTEXT_UID];\n\n if (fbo.stencil)\n {\n gl.bindRenderbuffer(gl.RENDERBUFFER, fbo.stencil);\n\n let stencilFormat: number;\n\n if (this.renderer.context.webGLVersion === 1)\n {\n stencilFormat = gl.DEPTH_STENCIL;\n }\n else if (framebuffer.depth && framebuffer.stencil)\n {\n stencilFormat = gl.DEPTH24_STENCIL8;\n }\n else if (framebuffer.depth)\n {\n stencilFormat = gl.DEPTH_COMPONENT24;\n }\n else\n {\n stencilFormat = gl.STENCIL_INDEX8;\n }\n\n if (fbo.msaaBuffer)\n {\n gl.renderbufferStorageMultisample(gl.RENDERBUFFER, fbo.multisample,\n stencilFormat, framebuffer.width, framebuffer.height);\n }\n else\n {\n gl.renderbufferStorage(gl.RENDERBUFFER, stencilFormat, framebuffer.width, framebuffer.height);\n }\n }\n\n const colorTextures = framebuffer.colorTextures;\n\n let count = colorTextures.length;\n\n if (!gl.drawBuffers)\n {\n count = Math.min(count, 1);\n }\n\n for (let i = 0; i < count; i++)\n {\n const texture = colorTextures[i];\n const parentTexture = texture.parentTextureArray || texture;\n\n this.renderer.texture.bind(parentTexture, 0);\n\n if (i === 0 && fbo.msaaBuffer)\n {\n gl.bindRenderbuffer(gl.RENDERBUFFER, fbo.msaaBuffer);\n gl.renderbufferStorageMultisample(gl.RENDERBUFFER, fbo.multisample,\n parentTexture._glTextures[this.CONTEXT_UID].internalFormat, framebuffer.width, framebuffer.height);\n }\n }\n\n if (framebuffer.depthTexture && this.writeDepthTexture)\n {\n this.renderer.texture.bind(framebuffer.depthTexture, 0);\n }\n }\n\n /**\n * Update the framebuffer\n * @param framebuffer\n * @param mipLevel\n * @protected\n */\n updateFramebuffer(framebuffer: Framebuffer, mipLevel: number): void\n {\n const { gl } = this;\n\n const fbo = framebuffer.glFramebuffers[this.CONTEXT_UID];\n\n // bind the color texture\n const colorTextures = framebuffer.colorTextures;\n\n let count = colorTextures.length;\n\n if (!gl.drawBuffers)\n {\n count = Math.min(count, 1);\n }\n\n if (fbo.multisample > 1 && this.canMultisampleFramebuffer(framebuffer))\n {\n fbo.msaaBuffer = fbo.msaaBuffer || gl.createRenderbuffer();\n }\n else if (fbo.msaaBuffer)\n {\n gl.deleteRenderbuffer(fbo.msaaBuffer);\n fbo.msaaBuffer = null;\n\n if (fbo.blitFramebuffer)\n {\n fbo.blitFramebuffer.dispose();\n fbo.blitFramebuffer = null;\n }\n }\n\n const activeTextures = [];\n\n for (let i = 0; i < count; i++)\n {\n const texture = colorTextures[i];\n const parentTexture = texture.parentTextureArray || texture;\n\n this.renderer.texture.bind(parentTexture, 0);\n\n if (i === 0 && fbo.msaaBuffer)\n {\n gl.bindRenderbuffer(gl.RENDERBUFFER, fbo.msaaBuffer);\n gl.renderbufferStorageMultisample(gl.RENDERBUFFER, fbo.multisample,\n parentTexture._glTextures[this.CONTEXT_UID].internalFormat, framebuffer.width, framebuffer.height);\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER, fbo.msaaBuffer);\n }\n else\n {\n gl.framebufferTexture2D(gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0 + i,\n texture.target,\n parentTexture._glTextures[this.CONTEXT_UID].texture,\n mipLevel);\n\n activeTextures.push(gl.COLOR_ATTACHMENT0 + i);\n }\n }\n\n if (activeTextures.length > 1)\n {\n gl.drawBuffers(activeTextures);\n }\n\n if (framebuffer.depthTexture)\n {\n const writeDepthTexture = this.writeDepthTexture;\n\n if (writeDepthTexture)\n {\n const depthTexture = framebuffer.depthTexture;\n\n this.renderer.texture.bind(depthTexture, 0);\n\n gl.framebufferTexture2D(gl.FRAMEBUFFER,\n gl.DEPTH_ATTACHMENT,\n gl.TEXTURE_2D,\n depthTexture._glTextures[this.CONTEXT_UID].texture,\n mipLevel);\n }\n }\n\n if ((framebuffer.stencil || framebuffer.depth) && !(framebuffer.depthTexture && this.writeDepthTexture))\n {\n fbo.stencil = fbo.stencil || gl.createRenderbuffer();\n\n let stencilAttachment: number;\n let stencilFormat: number;\n\n if (this.renderer.context.webGLVersion === 1)\n {\n stencilAttachment = gl.DEPTH_STENCIL_ATTACHMENT;\n stencilFormat = gl.DEPTH_STENCIL;\n }\n else if (framebuffer.depth && framebuffer.stencil)\n {\n stencilAttachment = gl.DEPTH_STENCIL_ATTACHMENT;\n stencilFormat = gl.DEPTH24_STENCIL8;\n }\n else if (framebuffer.depth)\n {\n stencilAttachment = gl.DEPTH_ATTACHMENT;\n stencilFormat = gl.DEPTH_COMPONENT24;\n }\n else\n {\n stencilAttachment = gl.STENCIL_ATTACHMENT;\n stencilFormat = gl.STENCIL_INDEX8;\n }\n\n gl.bindRenderbuffer(gl.RENDERBUFFER, fbo.stencil);\n\n if (fbo.msaaBuffer)\n {\n gl.renderbufferStorageMultisample(gl.RENDERBUFFER, fbo.multisample, stencilFormat,\n framebuffer.width, framebuffer.height);\n }\n else\n {\n gl.renderbufferStorage(gl.RENDERBUFFER, stencilFormat, framebuffer.width, framebuffer.height);\n }\n\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, stencilAttachment, gl.RENDERBUFFER, fbo.stencil);\n }\n else if (fbo.stencil)\n {\n gl.deleteRenderbuffer(fbo.stencil);\n fbo.stencil = null;\n }\n }\n\n /**\n * Returns true if the frame buffer can be multisampled.\n * @param framebuffer\n */\n protected canMultisampleFramebuffer(framebuffer: Framebuffer): boolean\n {\n return this.renderer.context.webGLVersion !== 1\n && framebuffer.colorTextures.length <= 1 && !framebuffer.depthTexture;\n }\n\n /**\n * Detects number of samples that is not more than a param but as close to it as possible\n * @param samples - number of samples\n * @returns - recommended number of samples\n */\n protected detectSamples(samples: MSAA_QUALITY): MSAA_QUALITY\n {\n const { msaaSamples } = this;\n let res: number = MSAA_QUALITY.NONE;\n\n if (samples <= 1 || msaaSamples === null)\n {\n return res;\n }\n for (let i = 0; i < msaaSamples.length; i++)\n {\n if (msaaSamples[i] <= samples)\n {\n res = msaaSamples[i];\n break;\n }\n }\n\n if (res === 1)\n {\n res = MSAA_QUALITY.NONE;\n }\n\n return res;\n }\n\n /**\n * Only works with WebGL2\n *\n * blits framebuffer to another of the same or bigger size\n * after that target framebuffer is bound\n *\n * Fails with WebGL warning if blits multisample framebuffer to different size\n * @param framebuffer - by default it blits \"into itself\", from renderBuffer to texture.\n * @param sourcePixels - source rectangle in pixels\n * @param destPixels - dest rectangle in pixels, assumed to be the same as sourcePixels\n */\n public blit(framebuffer?: Framebuffer, sourcePixels?: Rectangle, destPixels?: Rectangle): void\n {\n const { current, renderer, gl, CONTEXT_UID } = this;\n\n if (renderer.context.webGLVersion !== 2)\n {\n return;\n }\n\n if (!current)\n {\n return;\n }\n const fbo = current.glFramebuffers[CONTEXT_UID];\n\n if (!fbo)\n {\n return;\n }\n if (!framebuffer)\n {\n if (!fbo.msaaBuffer)\n {\n return;\n }\n\n const colorTexture = current.colorTextures[0];\n\n if (!colorTexture)\n {\n return;\n }\n\n if (!fbo.blitFramebuffer)\n {\n fbo.blitFramebuffer = new Framebuffer(current.width, current.height);\n fbo.blitFramebuffer.addColorTexture(0, colorTexture);\n }\n\n framebuffer = fbo.blitFramebuffer;\n\n if (framebuffer.colorTextures[0] !== colorTexture)\n {\n framebuffer.colorTextures[0] = colorTexture;\n framebuffer.dirtyId++;\n framebuffer.dirtyFormat++;\n }\n\n if (framebuffer.width !== current.width || framebuffer.height !== current.height)\n {\n framebuffer.width = current.width;\n framebuffer.height = current.height;\n framebuffer.dirtyId++;\n framebuffer.dirtySize++;\n }\n }\n\n if (!sourcePixels)\n {\n sourcePixels = tempRectangle;\n sourcePixels.width = current.width;\n sourcePixels.height = current.height;\n }\n if (!destPixels)\n {\n destPixels = sourcePixels;\n }\n\n const sameSize = sourcePixels.width === destPixels.width && sourcePixels.height === destPixels.height;\n\n this.bind(framebuffer);\n gl.bindFramebuffer(gl.READ_FRAMEBUFFER, fbo.framebuffer);\n gl.blitFramebuffer(\n sourcePixels.left, sourcePixels.top, sourcePixels.right, sourcePixels.bottom,\n destPixels.left, destPixels.top, destPixels.right, destPixels.bottom,\n gl.COLOR_BUFFER_BIT, sameSize ? gl.NEAREST : gl.LINEAR\n );\n gl.bindFramebuffer(gl.READ_FRAMEBUFFER, framebuffer.glFramebuffers[this.CONTEXT_UID].framebuffer);\n }\n\n /**\n * Disposes framebuffer.\n * @param framebuffer - framebuffer that has to be disposed of\n * @param contextLost - If context was lost, we suppress all delete function calls\n */\n disposeFramebuffer(framebuffer: Framebuffer, contextLost?: boolean): void\n {\n const fbo = framebuffer.glFramebuffers[this.CONTEXT_UID];\n const gl = this.gl;\n\n if (!fbo)\n {\n return;\n }\n\n delete framebuffer.glFramebuffers[this.CONTEXT_UID];\n\n const index = this.managedFramebuffers.indexOf(framebuffer);\n\n if (index >= 0)\n {\n this.managedFramebuffers.splice(index, 1);\n }\n\n framebuffer.disposeRunner.remove(this);\n\n if (!contextLost)\n {\n gl.deleteFramebuffer(fbo.framebuffer);\n\n if (fbo.msaaBuffer)\n {\n gl.deleteRenderbuffer(fbo.msaaBuffer);\n }\n\n if (fbo.stencil)\n {\n gl.deleteRenderbuffer(fbo.stencil);\n }\n }\n\n if (fbo.blitFramebuffer)\n {\n this.disposeFramebuffer(fbo.blitFramebuffer, contextLost);\n }\n }\n\n /**\n * Disposes all framebuffers, but not textures bound to them.\n * @param [contextLost=false] - If context was lost, we suppress all delete function calls\n */\n disposeAll(contextLost?: boolean): void\n {\n const list = this.managedFramebuffers;\n\n (this.managedFramebuffers as any) = [];\n\n for (let i = 0; i < list.length; i++)\n {\n this.disposeFramebuffer(list[i], contextLost);\n }\n }\n\n /**\n * Forcing creation of stencil buffer for current framebuffer, if it wasn't done before.\n * Used by MaskSystem, when its time to use stencil mask for Graphics element.\n *\n * Its an alternative for public lazy `framebuffer.enableStencil`, in case we need stencil without rebind.\n * @private\n */\n forceStencil(): void\n {\n const framebuffer = this.current;\n\n if (!framebuffer)\n {\n return;\n }\n\n const fbo = framebuffer.glFramebuffers[this.CONTEXT_UID];\n\n if (!fbo || (fbo.stencil && framebuffer.stencil))\n {\n return;\n }\n\n framebuffer.stencil = true;\n\n const w = framebuffer.width;\n const h = framebuffer.height;\n const gl = this.gl;\n const stencil = fbo.stencil = gl.createRenderbuffer();\n\n gl.bindRenderbuffer(gl.RENDERBUFFER, stencil);\n\n let stencilAttachment: number;\n let stencilFormat: number;\n\n if (this.renderer.context.webGLVersion === 1)\n {\n stencilAttachment = gl.DEPTH_STENCIL_ATTACHMENT;\n stencilFormat = gl.DEPTH_STENCIL;\n }\n else if (framebuffer.depth)\n {\n stencilAttachment = gl.DEPTH_STENCIL_ATTACHMENT;\n stencilFormat = gl.DEPTH24_STENCIL8;\n }\n else\n {\n stencilAttachment = gl.STENCIL_ATTACHMENT;\n stencilFormat = gl.STENCIL_INDEX8;\n }\n\n if (fbo.msaaBuffer)\n {\n gl.renderbufferStorageMultisample(gl.RENDERBUFFER, fbo.multisample, stencilFormat, w, h);\n }\n else\n {\n gl.renderbufferStorage(gl.RENDERBUFFER, stencilFormat, w, h);\n }\n\n gl.framebufferRenderbuffer(gl.FRAMEBUFFER, stencilAttachment, gl.RENDERBUFFER, stencil);\n }\n\n /** Resets framebuffer stored state, binds screen framebuffer. Should be called before renderTexture reset(). */\n reset(): void\n {\n this.current = this.unknownFramebuffer;\n this.viewport = new Rectangle();\n }\n\n destroy(): void\n {\n this.renderer = null;\n }\n}\n\nextensions.add(FramebufferSystem);\n","import { BUFFER_TYPE, ENV } from '@pixi/constants';\nimport { extensions, ExtensionType } from '@pixi/extensions';\nimport { settings } from '@pixi/settings';\n\nimport type { DRAW_MODES } from '@pixi/constants';\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { Dict } from '@pixi/utils';\nimport type { IRenderingContext } from '../IRenderer';\nimport type { Renderer } from '../Renderer';\nimport type { Program } from '../shader/Program';\nimport type { Shader } from '../shader/Shader';\nimport type { ISystem } from '../system/ISystem';\nimport type { Geometry } from './Geometry';\nimport type { GLBuffer } from './GLBuffer';\n\nconst byteSizeMap: {[key: number]: number} = { 5126: 4, 5123: 2, 5121: 1 };\n\n/**\n * System plugin to the renderer to manage geometry.\n * @memberof PIXI\n */\nexport class GeometrySystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'geometry',\n };\n\n /**\n * `true` if we has `*_vertex_array_object` extension.\n * @readonly\n */\n public hasVao: boolean;\n\n /**\n * `true` if has `ANGLE_instanced_arrays` extension.\n * @readonly\n */\n public hasInstance: boolean;\n\n /**\n * `true` if support `gl.UNSIGNED_INT` in `gl.drawElements` or `gl.drawElementsInstanced`.\n * @readonly\n */\n public canUseUInt32ElementIndex: boolean;\n\n protected CONTEXT_UID: number;\n protected gl: IRenderingContext;\n protected _activeGeometry: Geometry;\n protected _activeVao: WebGLVertexArrayObject;\n protected _boundBuffer: GLBuffer;\n\n /** Cache for all geometries by id, used in case renderer gets destroyed or for profiling. */\n readonly managedGeometries: {[key: number]: Geometry};\n\n /** Renderer that owns this {@link GeometrySystem}. */\n private renderer: Renderer;\n\n /** @param renderer - The renderer this System works for. */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n this._activeGeometry = null;\n this._activeVao = null;\n\n this.hasVao = true;\n this.hasInstance = true;\n this.canUseUInt32ElementIndex = false;\n this.managedGeometries = {};\n }\n\n /** Sets up the renderer context and necessary buffers. */\n protected contextChange(): void\n {\n this.disposeAll(true);\n\n const gl = this.gl = this.renderer.gl;\n const context = this.renderer.context;\n\n this.CONTEXT_UID = this.renderer.CONTEXT_UID;\n\n // webgl2\n if (context.webGLVersion !== 2)\n {\n // webgl 1!\n let nativeVaoExtension = this.renderer.context.extensions.vertexArrayObject;\n\n if (settings.PREFER_ENV === ENV.WEBGL_LEGACY)\n {\n nativeVaoExtension = null;\n }\n\n if (nativeVaoExtension)\n {\n gl.createVertexArray = (): WebGLVertexArrayObject =>\n nativeVaoExtension.createVertexArrayOES();\n\n gl.bindVertexArray = (vao): void =>\n nativeVaoExtension.bindVertexArrayOES(vao);\n\n gl.deleteVertexArray = (vao): void =>\n nativeVaoExtension.deleteVertexArrayOES(vao);\n }\n else\n {\n this.hasVao = false;\n gl.createVertexArray = (): WebGLVertexArrayObject =>\n null;\n\n gl.bindVertexArray = (): void =>\n null;\n\n gl.deleteVertexArray = (): void =>\n null;\n }\n }\n\n if (context.webGLVersion !== 2)\n {\n const instanceExt = gl.getExtension('ANGLE_instanced_arrays');\n\n if (instanceExt)\n {\n gl.vertexAttribDivisor = (a, b): void =>\n instanceExt.vertexAttribDivisorANGLE(a, b);\n\n gl.drawElementsInstanced = (a, b, c, d, e): void =>\n instanceExt.drawElementsInstancedANGLE(a, b, c, d, e);\n\n gl.drawArraysInstanced = (a, b, c, d): void =>\n instanceExt.drawArraysInstancedANGLE(a, b, c, d);\n }\n else\n {\n this.hasInstance = false;\n }\n }\n\n this.canUseUInt32ElementIndex = context.webGLVersion === 2 || !!context.extensions.uint32ElementIndex;\n }\n\n /**\n * Binds geometry so that is can be drawn. Creating a Vao if required\n * @param geometry - Instance of geometry to bind.\n * @param shader - Instance of shader to use vao for.\n */\n bind(geometry?: Geometry, shader?: Shader): void\n {\n shader = shader || this.renderer.shader.shader;\n\n const { gl } = this;\n\n // not sure the best way to address this..\n // currently different shaders require different VAOs for the same geometry\n // Still mulling over the best way to solve this one..\n // will likely need to modify the shader attribute locations at run time!\n let vaos = geometry.glVertexArrayObjects[this.CONTEXT_UID];\n let incRefCount = false;\n\n if (!vaos)\n {\n this.managedGeometries[geometry.id] = geometry;\n geometry.disposeRunner.add(this);\n geometry.glVertexArrayObjects[this.CONTEXT_UID] = vaos = {};\n incRefCount = true;\n }\n\n const vao = vaos[shader.program.id] || this.initGeometryVao(geometry, shader, incRefCount);\n\n this._activeGeometry = geometry;\n\n if (this._activeVao !== vao)\n {\n this._activeVao = vao;\n\n if (this.hasVao)\n {\n gl.bindVertexArray(vao);\n }\n else\n {\n this.activateVao(geometry, shader.program);\n }\n }\n\n // TODO - optimise later!\n // don't need to loop through if nothing changed!\n // maybe look to add an 'autoupdate' to geometry?\n this.updateBuffers();\n }\n\n /** Reset and unbind any active VAO and geometry. */\n reset(): void\n {\n this.unbind();\n }\n\n /** Update buffers of the currently bound geometry. */\n updateBuffers(): void\n {\n const geometry = this._activeGeometry;\n\n const bufferSystem = this.renderer.buffer;\n\n for (let i = 0; i < geometry.buffers.length; i++)\n {\n const buffer = geometry.buffers[i];\n\n bufferSystem.update(buffer);\n }\n }\n\n /**\n * Check compatibility between a geometry and a program\n * @param geometry - Geometry instance.\n * @param program - Program instance.\n */\n protected checkCompatibility(geometry: Geometry, program: Program): void\n {\n // geometry must have at least all the attributes that the shader requires.\n const geometryAttributes = geometry.attributes;\n const shaderAttributes = program.attributeData;\n\n for (const j in shaderAttributes)\n {\n if (!geometryAttributes[j])\n {\n throw new Error(`shader and geometry incompatible, geometry missing the \"${j}\" attribute`);\n }\n }\n }\n\n /**\n * Takes a geometry and program and generates a unique signature for them.\n * @param geometry - To get signature from.\n * @param program - To test geometry against.\n * @returns - Unique signature of the geometry and program\n */\n protected getSignature(geometry: Geometry, program: Program): string\n {\n const attribs = geometry.attributes;\n const shaderAttributes = program.attributeData;\n\n const strings = ['g', geometry.id];\n\n for (const i in attribs)\n {\n if (shaderAttributes[i])\n {\n strings.push(i, shaderAttributes[i].location);\n }\n }\n\n return strings.join('-');\n }\n\n /**\n * Creates or gets Vao with the same structure as the geometry and stores it on the geometry.\n * If vao is created, it is bound automatically. We use a shader to infer what and how to set up the\n * attribute locations.\n * @param geometry - Instance of geometry to to generate Vao for.\n * @param shader - Instance of the shader.\n * @param incRefCount - Increment refCount of all geometry buffers.\n */\n protected initGeometryVao(geometry: Geometry, shader: Shader, incRefCount = true): WebGLVertexArrayObject\n {\n const gl = this.gl;\n const CONTEXT_UID = this.CONTEXT_UID;\n const bufferSystem = this.renderer.buffer;\n const program = shader.program;\n\n if (!program.glPrograms[CONTEXT_UID])\n {\n this.renderer.shader.generateProgram(shader);\n }\n\n this.checkCompatibility(geometry, program);\n\n const signature = this.getSignature(geometry, program);\n\n const vaoObjectHash = geometry.glVertexArrayObjects[this.CONTEXT_UID];\n\n let vao = vaoObjectHash[signature];\n\n if (vao)\n {\n // this will give us easy access to the vao\n vaoObjectHash[program.id] = vao;\n\n return vao;\n }\n\n const buffers = geometry.buffers;\n const attributes = geometry.attributes;\n const tempStride: Dict = {};\n const tempStart: Dict = {};\n\n for (const j in buffers)\n {\n tempStride[j] = 0;\n tempStart[j] = 0;\n }\n\n for (const j in attributes)\n {\n if (!attributes[j].size && program.attributeData[j])\n {\n attributes[j].size = program.attributeData[j].size;\n }\n else if (!attributes[j].size)\n {\n console.warn(`PIXI Geometry attribute '${j}' size cannot be determined (likely the bound shader does not have the attribute)`); // eslint-disable-line\n }\n\n tempStride[attributes[j].buffer] += attributes[j].size * byteSizeMap[attributes[j].type];\n }\n\n for (const j in attributes)\n {\n const attribute = attributes[j];\n const attribSize = attribute.size;\n\n if (attribute.stride === undefined)\n {\n if (tempStride[attribute.buffer] === attribSize * byteSizeMap[attribute.type])\n {\n attribute.stride = 0;\n }\n else\n {\n attribute.stride = tempStride[attribute.buffer];\n }\n }\n\n if (attribute.start === undefined)\n {\n attribute.start = tempStart[attribute.buffer];\n\n tempStart[attribute.buffer] += attribSize * byteSizeMap[attribute.type];\n }\n }\n\n // @TODO: We don't know if VAO is supported.\n vao = gl.createVertexArray();\n\n gl.bindVertexArray(vao);\n\n // first update - and create the buffers!\n // only create a gl buffer if it actually gets\n for (let i = 0; i < buffers.length; i++)\n {\n const buffer = buffers[i];\n\n bufferSystem.bind(buffer);\n\n if (incRefCount)\n {\n buffer._glBuffers[CONTEXT_UID].refCount++;\n }\n }\n\n // TODO - maybe make this a data object?\n // lets wait to see if we need to first!\n\n this.activateVao(geometry, program);\n\n // add it to the cache!\n vaoObjectHash[program.id] = vao;\n vaoObjectHash[signature] = vao;\n\n gl.bindVertexArray(null);\n bufferSystem.unbind(BUFFER_TYPE.ARRAY_BUFFER);\n\n return vao;\n }\n\n /**\n * Disposes geometry.\n * @param geometry - Geometry with buffers. Only VAO will be disposed\n * @param [contextLost=false] - If context was lost, we suppress deleteVertexArray\n */\n disposeGeometry(geometry: Geometry, contextLost?: boolean): void\n {\n if (!this.managedGeometries[geometry.id])\n {\n return;\n }\n\n delete this.managedGeometries[geometry.id];\n\n const vaos = geometry.glVertexArrayObjects[this.CONTEXT_UID];\n const gl = this.gl;\n const buffers = geometry.buffers;\n const bufferSystem = this.renderer?.buffer;\n\n geometry.disposeRunner.remove(this);\n\n if (!vaos)\n {\n return;\n }\n\n // bufferSystem may have already been destroyed..\n // if this is the case, there is no need to destroy the geometry buffers...\n // they already have been!\n if (bufferSystem)\n {\n for (let i = 0; i < buffers.length; i++)\n {\n const buf = buffers[i]._glBuffers[this.CONTEXT_UID];\n\n // my be null as context may have changed right before the dispose is called\n if (buf)\n {\n buf.refCount--;\n if (buf.refCount === 0 && !contextLost)\n {\n bufferSystem.dispose(buffers[i], contextLost);\n }\n }\n }\n }\n\n if (!contextLost)\n {\n for (const vaoId in vaos)\n {\n // delete only signatures, everything else are copies\n if (vaoId[0] === 'g')\n {\n const vao = vaos[vaoId];\n\n if (this._activeVao === vao)\n {\n this.unbind();\n }\n gl.deleteVertexArray(vao);\n }\n }\n }\n\n delete geometry.glVertexArrayObjects[this.CONTEXT_UID];\n }\n\n /**\n * Dispose all WebGL resources of all managed geometries.\n * @param [contextLost=false] - If context was lost, we suppress `gl.delete` calls\n */\n disposeAll(contextLost?: boolean): void\n {\n const all: Array = Object.keys(this.managedGeometries);\n\n for (let i = 0; i < all.length; i++)\n {\n this.disposeGeometry(this.managedGeometries[all[i]], contextLost);\n }\n }\n\n /**\n * Activate vertex array object.\n * @param geometry - Geometry instance.\n * @param program - Shader program instance.\n */\n protected activateVao(geometry: Geometry, program: Program): void\n {\n const gl = this.gl;\n const CONTEXT_UID = this.CONTEXT_UID;\n const bufferSystem = this.renderer.buffer;\n const buffers = geometry.buffers;\n const attributes = geometry.attributes;\n\n if (geometry.indexBuffer)\n {\n // first update the index buffer if we have one..\n bufferSystem.bind(geometry.indexBuffer);\n }\n\n let lastBuffer = null;\n\n // add a new one!\n for (const j in attributes)\n {\n const attribute = attributes[j];\n const buffer = buffers[attribute.buffer];\n const glBuffer = buffer._glBuffers[CONTEXT_UID];\n\n if (program.attributeData[j])\n {\n if (lastBuffer !== glBuffer)\n {\n bufferSystem.bind(buffer);\n\n lastBuffer = glBuffer;\n }\n\n const location = program.attributeData[j].location;\n\n // TODO introduce state again\n // we can optimise this for older devices that have no VAOs\n gl.enableVertexAttribArray(location);\n\n gl.vertexAttribPointer(location,\n attribute.size,\n attribute.type || gl.FLOAT,\n attribute.normalized,\n attribute.stride,\n attribute.start);\n\n if (attribute.instance)\n {\n // TODO calculate instance count based of this...\n if (this.hasInstance)\n {\n gl.vertexAttribDivisor(location, attribute.divisor);\n }\n else\n {\n throw new Error('geometry error, GPU Instancing is not supported on this device');\n }\n }\n }\n }\n }\n\n /**\n * Draws the currently bound geometry.\n * @param type - The type primitive to render.\n * @param size - The number of elements to be rendered. If not specified, all vertices after the\n * starting vertex will be drawn.\n * @param start - The starting vertex in the geometry to start drawing from. If not specified,\n * drawing will start from the first vertex.\n * @param instanceCount - The number of instances of the set of elements to execute. If not specified,\n * all instances will be drawn.\n */\n draw(type: DRAW_MODES, size?: number, start?: number, instanceCount?: number): this\n {\n const { gl } = this;\n const geometry = this._activeGeometry;\n\n // TODO.. this should not change so maybe cache the function?\n\n if (geometry.indexBuffer)\n {\n const byteSize = geometry.indexBuffer.data.BYTES_PER_ELEMENT;\n const glType = byteSize === 2 ? gl.UNSIGNED_SHORT : gl.UNSIGNED_INT;\n\n if (byteSize === 2 || (byteSize === 4 && this.canUseUInt32ElementIndex))\n {\n if (geometry.instanced)\n {\n /* eslint-disable max-len */\n gl.drawElementsInstanced(type, size || geometry.indexBuffer.data.length, glType, (start || 0) * byteSize, instanceCount || 1);\n /* eslint-enable max-len */\n }\n else\n {\n /* eslint-disable max-len */\n gl.drawElements(type, size || geometry.indexBuffer.data.length, glType, (start || 0) * byteSize);\n /* eslint-enable max-len */\n }\n }\n else\n {\n console.warn('unsupported index buffer type: uint32');\n }\n }\n else if (geometry.instanced)\n {\n // TODO need a better way to calculate size..\n gl.drawArraysInstanced(type, start, size || geometry.getSize(), instanceCount || 1);\n }\n else\n {\n gl.drawArrays(type, start, size || geometry.getSize());\n }\n\n return this;\n }\n\n /** Unbind/reset everything. */\n protected unbind(): void\n {\n this.gl.bindVertexArray(null);\n this._activeVao = null;\n this._activeGeometry = null;\n }\n\n destroy(): void\n {\n this.renderer = null;\n }\n}\n\nextensions.add(GeometrySystem);\n","import { Matrix } from '@pixi/math';\n\nimport type { Texture } from './Texture';\n\nconst tempMat = new Matrix();\n\n/**\n * Class controls uv mapping from Texture normal space to BaseTexture normal space.\n *\n * Takes `trim` and `rotate` into account. May contain clamp settings for Meshes and TilingSprite.\n *\n * Can be used in Texture `uvMatrix` field, or separately, you can use different clamp settings on the same texture.\n * If you want to add support for texture region of certain feature or filter, that's what you're looking for.\n *\n * Takes track of Texture changes through `_lastTextureID` private field.\n * Use `update()` method call to track it from outside.\n * @see PIXI.Texture\n * @see PIXI.Mesh\n * @see PIXI.TilingSprite\n * @memberof PIXI\n */\nexport class TextureMatrix\n{\n /**\n * Matrix operation that converts texture region coords to texture coords\n * @readonly\n */\n public mapCoord: Matrix;\n\n /**\n * Changes frame clamping\n * Works with TilingSprite and Mesh\n * Change to 1.5 if you texture has repeated right and bottom lines, that leads to smoother borders\n * @default 0\n */\n public clampOffset: number;\n\n /**\n * Changes frame clamping\n * Works with TilingSprite and Mesh\n * Change to -0.5 to add a pixel to the edge, recommended for transparent trimmed textures in atlas\n * @default 0.5\n */\n public clampMargin: number;\n\n /**\n * Clamp region for normalized coords, left-top pixel center in xy , bottom-right in zw.\n * Calculated based on clampOffset.\n */\n readonly uClampFrame: Float32Array;\n\n /** Normalized clamp offset. Calculated based on clampOffset. */\n readonly uClampOffset: Float32Array;\n\n /**\n * Tracks Texture frame changes.\n * @protected\n */\n _textureID: number;\n\n /**\n * Tracks Texture frame changes.\n * @protected\n */\n _updateID: number;\n _texture: Texture;\n\n /**\n * If texture size is the same as baseTexture.\n * @default false\n * @readonly\n */\n isSimple: boolean;\n\n /**\n * @param texture - observed texture\n * @param clampMargin - Changes frame clamping, 0.5 by default. Use -0.5 for extra border.\n */\n constructor(texture: Texture, clampMargin?: number)\n {\n this._texture = texture;\n\n this.mapCoord = new Matrix();\n this.uClampFrame = new Float32Array(4);\n this.uClampOffset = new Float32Array(2);\n this._textureID = -1;\n this._updateID = 0;\n\n this.clampOffset = 0;\n this.clampMargin = (typeof clampMargin === 'undefined') ? 0.5 : clampMargin;\n this.isSimple = false;\n }\n\n /** Texture property. */\n get texture(): Texture\n {\n return this._texture;\n }\n\n set texture(value: Texture)\n {\n this._texture = value;\n this._textureID = -1;\n }\n\n /**\n * Multiplies uvs array to transform\n * @param uvs - mesh uvs\n * @param [out=uvs] - output\n * @returns - output\n */\n multiplyUvs(uvs: Float32Array, out?: Float32Array): Float32Array\n {\n if (out === undefined)\n {\n out = uvs;\n }\n\n const mat = this.mapCoord;\n\n for (let i = 0; i < uvs.length; i += 2)\n {\n const x = uvs[i];\n const y = uvs[i + 1];\n\n out[i] = (x * mat.a) + (y * mat.c) + mat.tx;\n out[i + 1] = (x * mat.b) + (y * mat.d) + mat.ty;\n }\n\n return out;\n }\n\n /**\n * Updates matrices if texture was changed.\n * @param [forceUpdate=false] - if true, matrices will be updated any case\n * @returns - Whether or not it was updated\n */\n update(forceUpdate?: boolean): boolean\n {\n const tex = this._texture;\n\n if (!tex || !tex.valid)\n {\n return false;\n }\n\n if (!forceUpdate\n && this._textureID === tex._updateID)\n {\n return false;\n }\n\n this._textureID = tex._updateID;\n this._updateID++;\n\n const uvs = tex._uvs;\n\n this.mapCoord.set(uvs.x1 - uvs.x0, uvs.y1 - uvs.y0, uvs.x3 - uvs.x0, uvs.y3 - uvs.y0, uvs.x0, uvs.y0);\n\n const orig = tex.orig;\n const trim = tex.trim;\n\n if (trim)\n {\n tempMat.set(orig.width / trim.width, 0, 0, orig.height / trim.height,\n -trim.x / trim.width, -trim.y / trim.height);\n this.mapCoord.append(tempMat);\n }\n\n const texBase = tex.baseTexture;\n const frame = this.uClampFrame;\n const margin = this.clampMargin / texBase.resolution;\n const offset = this.clampOffset;\n\n frame[0] = (tex._frame.x + margin + offset) / texBase.width;\n frame[1] = (tex._frame.y + margin + offset) / texBase.height;\n frame[2] = (tex._frame.x + tex._frame.width - margin + offset) / texBase.width;\n frame[3] = (tex._frame.y + tex._frame.height - margin + offset) / texBase.height;\n this.uClampOffset[0] = offset / texBase.realWidth;\n this.uClampOffset[1] = offset / texBase.realHeight;\n\n this.isSimple = tex._frame.width === texBase.width\n && tex._frame.height === texBase.height\n && tex.rotate === 0;\n\n return true;\n }\n}\n","import { Matrix } from '@pixi/math';\nimport { TextureMatrix } from '../../textures/TextureMatrix';\nimport { Filter } from '../Filter';\nimport fragment from './spriteMaskFilter.frag';\nimport vertex from './spriteMaskFilter.vert';\n\nimport type { CLEAR_MODES } from '@pixi/constants';\nimport type { Point } from '@pixi/math';\nimport type { Dict } from '@pixi/utils';\nimport type { IMaskTarget } from '../../mask/MaskData';\nimport type { RenderTexture } from '../../renderTexture/RenderTexture';\nimport type { Texture } from '../../textures/Texture';\nimport type { FilterSystem } from '../FilterSystem';\n\nexport interface ISpriteMaskTarget extends IMaskTarget\n{\n _texture: Texture;\n worldAlpha: number;\n anchor: Point;\n}\n\nexport interface ISpriteMaskFilter extends Filter\n{\n maskSprite: IMaskTarget;\n}\n\n/**\n * This handles a Sprite acting as a mask, as opposed to a Graphic.\n *\n * WebGL only.\n * @memberof PIXI\n */\nexport class SpriteMaskFilter extends Filter\n{\n /** @private */\n _maskSprite: IMaskTarget;\n\n /** Mask matrix */\n maskMatrix: Matrix;\n\n /**\n * @param {PIXI.Sprite} sprite - The target sprite.\n */\n constructor(sprite: IMaskTarget);\n\n /**\n * @param vertexSrc - The source of the vertex shader.\n * @param fragmentSrc - The source of the fragment shader.\n * @param uniforms - Custom uniforms to use to augment the built-in ones.\n */\n constructor(vertexSrc?: string, fragmentSrc?: string, uniforms?: Dict);\n\n /** @ignore */\n constructor(vertexSrc?: string | IMaskTarget, fragmentSrc?: string, uniforms?: Dict)\n {\n let sprite = null;\n\n if (typeof vertexSrc !== 'string' && fragmentSrc === undefined && uniforms === undefined)\n {\n sprite = vertexSrc as IMaskTarget;\n vertexSrc = undefined;\n fragmentSrc = undefined;\n uniforms = undefined;\n }\n\n super(vertexSrc as string || vertex, fragmentSrc || fragment, uniforms);\n\n this.maskSprite = sprite;\n this.maskMatrix = new Matrix();\n }\n\n /**\n * Sprite mask\n * @type {PIXI.DisplayObject}\n */\n get maskSprite(): IMaskTarget\n {\n return this._maskSprite;\n }\n\n set maskSprite(value: IMaskTarget)\n {\n this._maskSprite = value;\n\n if (this._maskSprite)\n {\n this._maskSprite.renderable = false;\n }\n }\n\n /**\n * Applies the filter\n * @param filterManager - The renderer to retrieve the filter from\n * @param input - The input render target.\n * @param output - The target to output to.\n * @param clearMode - Should the output be cleared before rendering to it.\n */\n apply(filterManager: FilterSystem, input: RenderTexture, output: RenderTexture, clearMode: CLEAR_MODES): void\n {\n const maskSprite = this._maskSprite as ISpriteMaskTarget;\n const tex = maskSprite._texture;\n\n if (!tex.valid)\n {\n return;\n }\n if (!tex.uvMatrix)\n {\n // margin = 0.0, let it bleed a bit, shader code becomes easier\n // assuming that atlas textures were made with 1-pixel padding\n tex.uvMatrix = new TextureMatrix(tex, 0.0);\n }\n tex.uvMatrix.update();\n\n this.uniforms.npmAlpha = tex.baseTexture.alphaMode ? 0.0 : 1.0;\n this.uniforms.mask = tex;\n // get _normalized sprite texture coords_ and convert them to _normalized atlas texture coords_ with `prepend`\n this.uniforms.otherMatrix = filterManager.calculateSpriteMatrix(this.maskMatrix, maskSprite)\n .prepend(tex.uvMatrix.mapCoord);\n this.uniforms.alpha = maskSprite.worldAlpha;\n this.uniforms.maskClamp = tex.uvMatrix.uClampFrame;\n\n filterManager.applyFilter(this, input, output, clearMode);\n }\n}\n","import { MASK_TYPES } from '@pixi/constants';\nimport { Filter } from '../filters/Filter';\n\nimport type { MSAA_QUALITY } from '@pixi/constants';\nimport type { Matrix, Rectangle } from '@pixi/math';\nimport type { IFilterTarget } from '../filters/IFilterTarget';\nimport type { ISpriteMaskFilter } from '../filters/spriteMask/SpriteMaskFilter';\nimport type { Renderer } from '../Renderer';\n\nexport interface IMaskTarget extends IFilterTarget\n{\n renderable: boolean;\n isSprite?: boolean;\n worldTransform: Matrix;\n isFastRect?(): boolean;\n getBounds(skipUpdate?: boolean, rect?: Rectangle): Rectangle;\n render(renderer: Renderer): void;\n}\n/**\n * Component for masked elements.\n *\n * Holds mask mode and temporary data about current mask.\n * @memberof PIXI\n */\nexport class MaskData\n{\n /** Mask type */\n public type: MASK_TYPES;\n\n /**\n * Whether we know the mask type beforehand\n * @default true\n */\n public autoDetect: boolean;\n\n /**\n * Which element we use to mask\n * @member {PIXI.DisplayObject}\n */\n public maskObject: IMaskTarget;\n\n /** Whether it belongs to MaskSystem pool */\n public pooled: boolean;\n\n /** Indicator of the type (always true for {@link PIXI.MaskData} objects) */\n public isMaskData: boolean;// webdoc crashes if the type is true because reasons... (will fix)\n\n /**\n * Resolution of the sprite mask filter.\n * If set to `null` or `0`, the resolution of the current render target is used.\n * @default null\n */\n public resolution: number | null;\n\n /**\n * Number of samples of the sprite mask filter.\n * If set to `null`, the sample count of the current render target is used.\n * @default PIXI.Filter.defaultMultisample\n */\n public multisample: MSAA_QUALITY | null;\n\n /** If enabled is true the mask is applied, if false it will not. */\n public enabled: boolean;\n\n /**\n * Color mask.\n * @see PIXI.COLOR_MASK_BITS\n */\n public colorMask: number;\n\n /**\n * The sprite mask filter wrapped in an array.\n * @private\n */\n _filters: ISpriteMaskFilter[];\n\n /**\n * Stencil counter above the mask in stack\n * @private\n */\n _stencilCounter: number;\n\n /**\n * Scissor counter above the mask in stack\n * @private\n */\n _scissorCounter: number;\n\n /**\n * Scissor operation above the mask in stack.\n * Null if _scissorCounter is zero, rectangle instance if positive.\n * @private\n */\n _scissorRect: Rectangle;\n\n /**\n * pre-computed scissor rect\n * does become _scissorRect when mask is actually pushed\n * @private\n */\n _scissorRectLocal: Rectangle;\n\n /**\n * pre-computed color mask\n * @private\n */\n _colorMask: number;\n\n /**\n * Targeted element. Temporary variable set by MaskSystem\n * @member {PIXI.DisplayObject}\n * @private\n */\n _target: IMaskTarget;\n\n /**\n * Create MaskData\n * @param {PIXI.DisplayObject} [maskObject=null] - object that describes the mask\n */\n constructor(maskObject: IMaskTarget = null)\n {\n this.type = MASK_TYPES.NONE;\n this.autoDetect = true;\n this.maskObject = maskObject || null;\n this.pooled = false;\n this.isMaskData = true;\n this.resolution = null;\n this.multisample = Filter.defaultMultisample;\n this.enabled = true;\n this.colorMask = 0xf;\n this._filters = null;\n this._stencilCounter = 0;\n this._scissorCounter = 0;\n this._scissorRect = null;\n this._scissorRectLocal = null;\n this._colorMask = 0xf;\n this._target = null;\n }\n\n /**\n * The sprite mask filter.\n * If set to `null`, the default sprite mask filter is used.\n * @default null\n */\n get filter(): ISpriteMaskFilter\n {\n return this._filters ? this._filters[0] : null;\n }\n\n set filter(value: ISpriteMaskFilter)\n {\n if (value)\n {\n if (this._filters)\n {\n this._filters[0] = value;\n }\n else\n {\n this._filters = [value];\n }\n }\n else\n {\n this._filters = null;\n }\n }\n\n /** Resets the mask data after popMask(). */\n reset(): void\n {\n if (this.pooled)\n {\n this.maskObject = null;\n\n this.type = MASK_TYPES.NONE;\n\n this.autoDetect = true;\n }\n\n this._target = null;\n this._scissorRectLocal = null;\n }\n\n /**\n * Copies counters from maskData above, called from pushMask().\n * @param maskAbove\n */\n copyCountersOrReset(maskAbove?: MaskData): void\n {\n if (maskAbove)\n {\n this._stencilCounter = maskAbove._stencilCounter;\n this._scissorCounter = maskAbove._scissorCounter;\n this._scissorRect = maskAbove._scissorRect;\n }\n else\n {\n this._stencilCounter = 0;\n this._scissorCounter = 0;\n this._scissorRect = null;\n }\n }\n}\n","import { MASK_TYPES } from '@pixi/constants';\nimport { extensions, ExtensionType } from '@pixi/extensions';\nimport { SpriteMaskFilter } from '../filters/spriteMask/SpriteMaskFilter';\nimport { MaskData } from './MaskData';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { Renderer } from '../Renderer';\nimport type { ISystem } from '../system/ISystem';\nimport type { IMaskTarget } from './MaskData';\n\n/**\n * System plugin to the renderer to manage masks.\n *\n * There are three built-in types of masking:\n * **Scissor Masking**: Scissor masking discards pixels that are outside of a rectangle called the scissor box. It is\n * the most performant as the scissor test is inexpensive. However, it can only be used when the mask is rectangular.\n * **Stencil Masking**: Stencil masking discards pixels that don't overlap with the pixels rendered into the stencil\n * buffer. It is the next fastest option as it does not require rendering into a separate framebuffer. However, it does\n * cause the mask to be rendered **twice** for each masking operation; hence, minimize the rendering cost of your masks.\n * **Sprite Mask Filtering**: Sprite mask filtering discards pixels based on the red channel of the sprite-mask's\n * texture. (Generally, the masking texture is grayscale). Using advanced techniques, you might be able to embed this\n * type of masking in a custom shader - and hence, bypassing the masking system fully for performance wins.\n *\n * The best type of masking is auto-detected when you `push` one. To use scissor masking, you must pass in a `Graphics`\n * object with just a rectangle drawn.\n *\n * ## Mask Stacks\n *\n * In the scene graph, masks can be applied recursively, i.e. a mask can be applied during a masking operation. The mask\n * stack stores the currently applied masks in order. Each {@link PIXI.BaseRenderTexture} holds its own mask stack, i.e.\n * when you switch render-textures, the old masks only applied when you switch back to rendering to the old render-target.\n * @memberof PIXI\n */\nexport class MaskSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'mask',\n };\n\n /**\n * Flag to enable scissor masking.\n * @default true\n */\n public enableScissor: boolean;\n\n /** Pool of used sprite mask filters. */\n protected readonly alphaMaskPool: Array;\n\n /**\n * Current index of alpha mask pool.\n * @default 0\n * @readonly\n */\n protected alphaMaskIndex: number;\n\n /** Pool of mask data. */\n private readonly maskDataPool: Array;\n private maskStack: Array;\n private renderer: Renderer;\n\n /**\n * @param renderer - The renderer this System works for.\n */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n\n this.enableScissor = true;\n this.alphaMaskPool = [];\n this.maskDataPool = [];\n\n this.maskStack = [];\n this.alphaMaskIndex = 0;\n }\n\n /**\n * Changes the mask stack that is used by this System.\n * @param maskStack - The mask stack\n */\n setMaskStack(maskStack: Array): void\n {\n this.maskStack = maskStack;\n this.renderer.scissor.setMaskStack(maskStack);\n this.renderer.stencil.setMaskStack(maskStack);\n }\n\n /**\n * Enables the mask and appends it to the current mask stack.\n *\n * NOTE: The batch renderer should be flushed beforehand to prevent pending renders from being masked.\n * @param {PIXI.DisplayObject} target - Display Object to push the mask to\n * @param {PIXI.MaskData|PIXI.Sprite|PIXI.Graphics|PIXI.DisplayObject} maskDataOrTarget - The masking data.\n */\n push(target: IMaskTarget, maskDataOrTarget: MaskData | IMaskTarget): void\n {\n let maskData = maskDataOrTarget as MaskData;\n\n if (!maskData.isMaskData)\n {\n const d = this.maskDataPool.pop() || new MaskData();\n\n d.pooled = true;\n d.maskObject = maskDataOrTarget as IMaskTarget;\n maskData = d;\n }\n\n const maskAbove = this.maskStack.length !== 0 ? this.maskStack[this.maskStack.length - 1] : null;\n\n maskData.copyCountersOrReset(maskAbove);\n maskData._colorMask = maskAbove ? maskAbove._colorMask : 0xf;\n\n if (maskData.autoDetect)\n {\n this.detect(maskData);\n }\n\n maskData._target = target;\n\n if (maskData.type !== MASK_TYPES.SPRITE)\n {\n this.maskStack.push(maskData);\n }\n\n if (maskData.enabled)\n {\n switch (maskData.type)\n {\n case MASK_TYPES.SCISSOR:\n this.renderer.scissor.push(maskData);\n break;\n case MASK_TYPES.STENCIL:\n this.renderer.stencil.push(maskData);\n break;\n case MASK_TYPES.SPRITE:\n maskData.copyCountersOrReset(null);\n this.pushSpriteMask(maskData);\n break;\n case MASK_TYPES.COLOR:\n this.pushColorMask(maskData);\n break;\n default:\n break;\n }\n }\n\n if (maskData.type === MASK_TYPES.SPRITE)\n {\n this.maskStack.push(maskData);\n }\n }\n\n /**\n * Removes the last mask from the mask stack and doesn't return it.\n *\n * NOTE: The batch renderer should be flushed beforehand to render the masked contents before the mask is removed.\n * @param {PIXI.IMaskTarget} target - Display Object to pop the mask from\n */\n pop(target: IMaskTarget): void\n {\n const maskData = this.maskStack.pop();\n\n if (!maskData || maskData._target !== target)\n {\n // TODO: add an assert when we have it\n\n return;\n }\n\n if (maskData.enabled)\n {\n switch (maskData.type)\n {\n case MASK_TYPES.SCISSOR:\n this.renderer.scissor.pop(maskData);\n break;\n case MASK_TYPES.STENCIL:\n this.renderer.stencil.pop(maskData.maskObject);\n break;\n case MASK_TYPES.SPRITE:\n this.popSpriteMask(maskData);\n break;\n case MASK_TYPES.COLOR:\n this.popColorMask(maskData);\n break;\n default:\n break;\n }\n }\n\n maskData.reset();\n\n if (maskData.pooled)\n {\n this.maskDataPool.push(maskData);\n }\n\n if (this.maskStack.length !== 0)\n {\n const maskCurrent = this.maskStack[this.maskStack.length - 1];\n\n if (maskCurrent.type === MASK_TYPES.SPRITE && maskCurrent._filters)\n {\n maskCurrent._filters[0].maskSprite = maskCurrent.maskObject;\n }\n }\n }\n\n /**\n * Sets type of MaskData based on its maskObject.\n * @param maskData\n */\n detect(maskData: MaskData): void\n {\n const maskObject = maskData.maskObject;\n\n if (!maskObject)\n {\n maskData.type = MASK_TYPES.COLOR;\n }\n else if (maskObject.isSprite)\n {\n maskData.type = MASK_TYPES.SPRITE;\n }\n else if (this.enableScissor && this.renderer.scissor.testScissor(maskData))\n {\n maskData.type = MASK_TYPES.SCISSOR;\n }\n else\n {\n maskData.type = MASK_TYPES.STENCIL;\n }\n }\n\n /**\n * Applies the Mask and adds it to the current filter stack.\n * @param maskData - Sprite to be used as the mask.\n */\n pushSpriteMask(maskData: MaskData): void\n {\n const { maskObject } = maskData;\n const target = maskData._target;\n let alphaMaskFilter = maskData._filters;\n\n if (!alphaMaskFilter)\n {\n alphaMaskFilter = this.alphaMaskPool[this.alphaMaskIndex];\n\n if (!alphaMaskFilter)\n {\n alphaMaskFilter = this.alphaMaskPool[this.alphaMaskIndex] = [new SpriteMaskFilter()];\n }\n }\n\n alphaMaskFilter[0].resolution = maskData.resolution;\n alphaMaskFilter[0].multisample = maskData.multisample;\n alphaMaskFilter[0].maskSprite = maskObject;\n\n const stashFilterArea = target.filterArea;\n\n target.filterArea = maskObject.getBounds(true);\n this.renderer.filter.push(target, alphaMaskFilter);\n target.filterArea = stashFilterArea;\n\n if (!maskData._filters)\n {\n this.alphaMaskIndex++;\n }\n }\n\n /**\n * Removes the last filter from the filter stack and doesn't return it.\n * @param maskData - Sprite to be used as the mask.\n */\n popSpriteMask(maskData: MaskData): void\n {\n this.renderer.filter.pop();\n\n if (maskData._filters)\n {\n maskData._filters[0].maskSprite = null;\n }\n else\n {\n this.alphaMaskIndex--;\n this.alphaMaskPool[this.alphaMaskIndex][0].maskSprite = null;\n }\n }\n\n /**\n * Pushes the color mask.\n * @param maskData - The mask data\n */\n pushColorMask(maskData: MaskData): void\n {\n const currColorMask = maskData._colorMask;\n const nextColorMask = maskData._colorMask = currColorMask & maskData.colorMask;\n\n if (nextColorMask !== currColorMask)\n {\n this.renderer.gl.colorMask(\n (nextColorMask & 0x1) !== 0,\n (nextColorMask & 0x2) !== 0,\n (nextColorMask & 0x4) !== 0,\n (nextColorMask & 0x8) !== 0\n );\n }\n }\n\n /**\n * Pops the color mask.\n * @param maskData - The mask data\n */\n popColorMask(maskData: MaskData): void\n {\n const currColorMask = maskData._colorMask;\n const nextColorMask = this.maskStack.length > 0\n ? this.maskStack[this.maskStack.length - 1]._colorMask : 0xf;\n\n if (nextColorMask !== currColorMask)\n {\n this.renderer.gl.colorMask(\n (nextColorMask & 0x1) !== 0,\n (nextColorMask & 0x2) !== 0,\n (nextColorMask & 0x4) !== 0,\n (nextColorMask & 0x8) !== 0\n );\n }\n }\n\n destroy(): void\n {\n this.renderer = null;\n }\n}\n\nextensions.add(MaskSystem);\n","import type { Renderer } from '../Renderer';\nimport type { ISystem } from '../system/ISystem';\nimport type { MaskData } from './MaskData';\n\n/**\n * System plugin to the renderer to manage specific types of masking operations.\n * @memberof PIXI\n */\nexport class AbstractMaskSystem implements ISystem\n{\n /**\n * The mask stack\n * @member {PIXI.MaskData[]}\n */\n protected maskStack: Array;\n\n /**\n * Constant for gl.enable\n * @private\n */\n protected glConst: number;\n protected renderer: Renderer;\n\n /**\n * @param renderer - The renderer this System works for.\n */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n\n this.maskStack = [];\n this.glConst = 0;\n }\n\n /** Gets count of masks of certain type. */\n getStackLength(): number\n {\n return this.maskStack.length;\n }\n\n /**\n * Changes the mask stack that is used by this System.\n * @param {PIXI.MaskData[]} maskStack - The mask stack\n */\n setMaskStack(maskStack: Array): void\n {\n const { gl } = this.renderer;\n const curStackLen = this.getStackLength();\n\n this.maskStack = maskStack;\n\n const newStackLen = this.getStackLength();\n\n if (newStackLen !== curStackLen)\n {\n if (newStackLen === 0)\n {\n gl.disable(this.glConst);\n }\n else\n {\n gl.enable(this.glConst);\n this._useCurrent();\n }\n }\n }\n\n /**\n * Setup renderer to use the current mask data.\n * @private\n */\n protected _useCurrent(): void\n {\n // OVERWRITE;\n }\n\n /** Destroys the mask stack. */\n destroy(): void\n {\n this.renderer = null;\n this.maskStack = null;\n }\n}\n","import { extensions, ExtensionType } from '@pixi/extensions';\nimport { Matrix, Rectangle } from '@pixi/math';\nimport { settings } from '@pixi/settings';\nimport { AbstractMaskSystem } from './AbstractMaskSystem';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { Renderer } from '../Renderer';\nimport type { MaskData } from './MaskData';\n\nconst tempMatrix = new Matrix();\nconst rectPool: Rectangle[] = [];\n\n/**\n * System plugin to the renderer to manage scissor masking.\n *\n * Scissor masking discards pixels outside of a rectangle called the scissor box. The scissor box is in the framebuffer\n * viewport's space; however, the mask's rectangle is projected from world-space to viewport space automatically\n * by this system.\n * @memberof PIXI\n */\nexport class ScissorSystem extends AbstractMaskSystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'scissor',\n };\n\n /**\n * @param {PIXI.Renderer} renderer - The renderer this System works for.\n */\n constructor(renderer: Renderer)\n {\n super(renderer);\n\n this.glConst = settings.ADAPTER.getWebGLRenderingContext().SCISSOR_TEST;\n }\n\n getStackLength(): number\n {\n const maskData = this.maskStack[this.maskStack.length - 1];\n\n if (maskData)\n {\n return maskData._scissorCounter;\n }\n\n return 0;\n }\n\n /**\n * evaluates _boundsTransformed, _scissorRect for MaskData\n * @param maskData\n */\n calcScissorRect(maskData: MaskData): void\n {\n if (maskData._scissorRectLocal)\n {\n return;\n }\n\n const prevData = maskData._scissorRect;\n const { maskObject } = maskData;\n const { renderer } = this;\n const renderTextureSystem = renderer.renderTexture;\n const rect = maskObject.getBounds(true, rectPool.pop() ?? new Rectangle());\n\n this.roundFrameToPixels(rect,\n renderTextureSystem.current ? renderTextureSystem.current.resolution : renderer.resolution,\n renderTextureSystem.sourceFrame,\n renderTextureSystem.destinationFrame,\n renderer.projection.transform);\n\n if (prevData)\n {\n rect.fit(prevData);\n }\n maskData._scissorRectLocal = rect;\n }\n\n private static isMatrixRotated(matrix: Matrix)\n {\n if (!matrix)\n {\n return false;\n }\n const { a, b, c, d } = matrix;\n\n // Skip if skew/rotation present in matrix, except for multiple of 90° rotation. If rotation\n // is a multiple of 90°, then either pair of (b,c) or (a,d) will be (0,0).\n return ((Math.abs(b) > 1e-4 || Math.abs(c) > 1e-4)\n && (Math.abs(a) > 1e-4 || Math.abs(d) > 1e-4));\n }\n\n /**\n * Test, whether the object can be scissor mask with current renderer projection.\n * Calls \"calcScissorRect()\" if its true.\n * @param maskData - mask data\n * @returns whether Whether the object can be scissor mask\n */\n public testScissor(maskData: MaskData): boolean\n {\n const { maskObject } = maskData;\n\n if (!maskObject.isFastRect || !maskObject.isFastRect())\n {\n return false;\n }\n if (ScissorSystem.isMatrixRotated(maskObject.worldTransform))\n {\n return false;\n }\n if (ScissorSystem.isMatrixRotated(this.renderer.projection.transform))\n {\n return false;\n }\n\n this.calcScissorRect(maskData);\n\n const rect = maskData._scissorRectLocal;\n\n return rect.width > 0 && rect.height > 0;\n }\n\n private roundFrameToPixels(\n frame: Rectangle,\n resolution: number,\n bindingSourceFrame: Rectangle,\n bindingDestinationFrame: Rectangle,\n transform?: Matrix,\n )\n {\n if (ScissorSystem.isMatrixRotated(transform))\n {\n return;\n }\n\n transform = transform ? tempMatrix.copyFrom(transform) : tempMatrix.identity();\n\n // Get forward transform from world space to screen space\n transform\n .translate(-bindingSourceFrame.x, -bindingSourceFrame.y)\n .scale(\n bindingDestinationFrame.width / bindingSourceFrame.width,\n bindingDestinationFrame.height / bindingSourceFrame.height)\n .translate(bindingDestinationFrame.x, bindingDestinationFrame.y);\n\n // Convert frame to screen space\n (this.renderer.filter as any).transformAABB(transform, frame);\n\n frame.fit(bindingDestinationFrame);\n frame.x = Math.round(frame.x * resolution);\n frame.y = Math.round(frame.y * resolution);\n frame.width = Math.round(frame.width * resolution);\n frame.height = Math.round(frame.height * resolution);\n }\n\n /**\n * Applies the Mask and adds it to the current stencil stack.\n * @author alvin\n * @param maskData - The mask data.\n */\n push(maskData: MaskData): void\n {\n if (!maskData._scissorRectLocal)\n {\n this.calcScissorRect(maskData);\n }\n\n const { gl } = this.renderer;\n\n if (!maskData._scissorRect)\n {\n gl.enable(gl.SCISSOR_TEST);\n }\n\n maskData._scissorCounter++;\n maskData._scissorRect = maskData._scissorRectLocal;\n this._useCurrent();\n }\n\n /**\n * This should be called after a mask is popped off the mask stack. It will rebind the scissor box to be latest with the\n * last mask in the stack.\n *\n * This can also be called when you directly modify the scissor box and want to restore PixiJS state.\n * @param maskData - The mask data.\n */\n pop(maskData?: MaskData): void\n {\n const { gl } = this.renderer;\n\n if (maskData)\n {\n rectPool.push(maskData._scissorRectLocal);\n }\n\n if (this.getStackLength() > 0)\n {\n this._useCurrent();\n }\n else\n {\n gl.disable(gl.SCISSOR_TEST);\n }\n }\n\n /**\n * Setup renderer to use the current scissor data.\n * @private\n */\n _useCurrent(): void\n {\n const rect = this.maskStack[this.maskStack.length - 1]._scissorRect;\n let y: number;\n\n if (this.renderer.renderTexture.current)\n {\n y = rect.y;\n }\n else\n {\n // flipY. In future we'll have it over renderTextures as an option\n y = this.renderer.height - rect.height - rect.y;\n }\n\n this.renderer.gl.scissor(rect.x, y, rect.width, rect.height);\n }\n}\n\nextensions.add(ScissorSystem);\n","import { extensions, ExtensionType } from '@pixi/extensions';\nimport { settings } from '@pixi/settings';\nimport { AbstractMaskSystem } from './AbstractMaskSystem';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { Renderer } from '../Renderer';\nimport type { IMaskTarget, MaskData } from './MaskData';\n\n/**\n * System plugin to the renderer to manage stencils (used for masks).\n * @memberof PIXI\n */\nexport class StencilSystem extends AbstractMaskSystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'stencil',\n };\n\n /**\n * @param renderer - The renderer this System works for.\n */\n constructor(renderer: Renderer)\n {\n super(renderer);\n\n this.glConst = settings.ADAPTER.getWebGLRenderingContext().STENCIL_TEST;\n }\n\n getStackLength(): number\n {\n const maskData = this.maskStack[this.maskStack.length - 1];\n\n if (maskData)\n {\n return maskData._stencilCounter;\n }\n\n return 0;\n }\n\n /**\n * Applies the Mask and adds it to the current stencil stack.\n * @param maskData - The mask data\n */\n push(maskData: MaskData): void\n {\n const maskObject = maskData.maskObject;\n const { gl } = this.renderer;\n const prevMaskCount = maskData._stencilCounter;\n\n if (prevMaskCount === 0)\n {\n // force use stencil texture in current framebuffer\n this.renderer.framebuffer.forceStencil();\n gl.clearStencil(0);\n gl.clear(gl.STENCIL_BUFFER_BIT);\n gl.enable(gl.STENCIL_TEST);\n }\n\n maskData._stencilCounter++;\n\n const colorMask = maskData._colorMask;\n\n if (colorMask !== 0)\n {\n maskData._colorMask = 0;\n gl.colorMask(false, false, false, false);\n }\n\n // Increment the reference stencil value where the new mask overlaps with the old ones.\n gl.stencilFunc(gl.EQUAL, prevMaskCount, 0xFFFFFFFF);\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.INCR);\n\n maskObject.renderable = true;\n maskObject.render(this.renderer);\n this.renderer.batch.flush();\n maskObject.renderable = false;\n\n if (colorMask !== 0)\n {\n maskData._colorMask = colorMask;\n gl.colorMask(\n (colorMask & 1) !== 0,\n (colorMask & 2) !== 0,\n (colorMask & 4) !== 0,\n (colorMask & 8) !== 0\n );\n }\n\n this._useCurrent();\n }\n\n /**\n * Pops stencil mask. MaskData is already removed from stack\n * @param {PIXI.DisplayObject} maskObject - object of popped mask data\n */\n pop(maskObject: IMaskTarget): void\n {\n const gl = this.renderer.gl;\n\n if (this.getStackLength() === 0)\n {\n // the stack is empty!\n gl.disable(gl.STENCIL_TEST);\n }\n else\n {\n const maskData = this.maskStack.length !== 0 ? this.maskStack[this.maskStack.length - 1] : null;\n const colorMask = maskData ? maskData._colorMask : 0xf;\n\n if (colorMask !== 0)\n {\n maskData._colorMask = 0;\n gl.colorMask(false, false, false, false);\n }\n\n // Decrement the reference stencil value where the popped mask overlaps with the other ones\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.DECR);\n\n maskObject.renderable = true;\n maskObject.render(this.renderer);\n this.renderer.batch.flush();\n maskObject.renderable = false;\n\n if (colorMask !== 0)\n {\n maskData._colorMask = colorMask;\n gl.colorMask(\n (colorMask & 0x1) !== 0,\n (colorMask & 0x2) !== 0,\n (colorMask & 0x4) !== 0,\n (colorMask & 0x8) !== 0\n );\n }\n\n this._useCurrent();\n }\n }\n\n /**\n * Setup renderer to use the current stencil data.\n * @private\n */\n _useCurrent(): void\n {\n const gl = this.renderer.gl;\n\n gl.stencilFunc(gl.EQUAL, this.getStackLength(), 0xFFFFFFFF);\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);\n }\n}\n\nextensions.add(StencilSystem);\n","import { extensions, ExtensionType } from '@pixi/extensions';\nimport { deprecation } from '@pixi/utils';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { IRenderer } from '../IRenderer';\nimport type { ISystem } from '../system/ISystem';\n\nexport interface IRendererPlugins extends GlobalMixins.IRendererPlugins\n{\n [key: string]: any;\n}\n\n/**\n * Manages the functionality that allows users to extend pixi functionality via additional plugins.\n * @memberof PIXI\n */\nexport class PluginSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: [\n ExtensionType.RendererSystem,\n ExtensionType.CanvasRendererSystem\n ],\n name: '_plugin',\n };\n\n /** @ignore */\n public rendererPlugins: IRendererPlugins;\n\n /**\n * Collection of plugins.\n * @readonly\n * @member {object}\n */\n public readonly plugins: IRendererPlugins;\n private renderer: IRenderer;\n\n constructor(renderer: IRenderer)\n {\n this.renderer = renderer;\n\n /**\n * Collection of plugins.\n * @readonly\n * @member {object}\n */\n this.plugins = {};\n\n if (process.env.DEBUG)\n {\n Object.defineProperties(this.plugins, {\n extract: {\n enumerable: false,\n get()\n {\n deprecation('7.0.0', 'renderer.plugins.extract has moved to renderer.extract');\n\n return (renderer as any).extract;\n },\n },\n prepare: {\n enumerable: false,\n get()\n {\n deprecation('7.0.0', 'renderer.plugins.prepare has moved to renderer.prepare');\n\n return (renderer as any).prepare;\n },\n },\n interaction: {\n enumerable: false,\n get()\n {\n deprecation('7.0.0', 'renderer.plugins.interaction has been deprecated, use renderer.events');\n\n return (renderer as any).events;\n },\n },\n });\n }\n }\n\n /**\n * Initialize the plugins.\n * @protected\n */\n init(): void\n {\n const staticMap = this.rendererPlugins;\n\n for (const o in staticMap)\n {\n this.plugins[o] = new (staticMap[o])(this.renderer);\n }\n }\n\n destroy(): void\n {\n for (const o in this.plugins)\n {\n this.plugins[o].destroy();\n this.plugins[o] = null;\n }\n }\n}\n\nextensions.add(PluginSystem);\n","import { extensions, ExtensionType } from '@pixi/extensions';\nimport { Matrix } from '@pixi/math';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { Rectangle } from '@pixi/math';\nimport type { Renderer } from '../Renderer';\nimport type { ISystem } from '../system/ISystem';\n\n/**\n * System plugin to the renderer to manage the projection matrix.\n *\n * The `projectionMatrix` is a global uniform provided to all shaders. It is used to transform points in world space to\n * normalized device coordinates.\n * @memberof PIXI\n */\nexport class ProjectionSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'projection',\n };\n\n /**\n * The destination frame used to calculate the current projection matrix.\n *\n * The destination frame is the rectangle in the render-target into which contents are rendered. If rendering\n * to the screen, the origin is on the top-left. If rendering to a framebuffer, the origin is on the\n * bottom-left. This \"flipping\" phenomenon is because of WebGL convention for (shader) texture coordinates, where\n * the bottom-left corner is (0,0). It allows display-objects to map their (0,0) position in local-space (top-left)\n * to (0,0) in texture space (bottom-left). In other words, a sprite's top-left corner actually renders the\n * texture's bottom-left corner. You will also notice this when using a tool like SpectorJS to view your textures\n * at runtime.\n *\n * The destination frame's dimensions (width,height) should be equal to the source frame. This is because,\n * otherwise, the contents will be scaled to fill the destination frame. Similarly, the destination frame's (x,y)\n * coordinates are (0,0) unless you know what you're doing.\n * @readonly\n */\n public destinationFrame: Rectangle;\n\n /**\n * The source frame used to calculate the current projection matrix.\n *\n * The source frame is the rectangle in world space containing the contents to be rendered.\n * @readonly\n */\n public sourceFrame: Rectangle;\n\n /**\n * Default destination frame\n *\n * This is not used internally. It is not advised to use this feature specifically unless you know what\n * you're doing. The `update` method will default to this frame if you do not pass the destination frame.\n * @readonly\n */\n public defaultFrame: Rectangle;\n\n /**\n * Projection matrix\n *\n * This matrix can be used to transform points from world space to normalized device coordinates, and is calculated\n * from the sourceFrame → destinationFrame mapping provided.\n *\n * The renderer's `globalUniforms` keeps a reference to this, and so it is available for all shaders to use as a\n * uniform.\n * @readonly\n */\n public projectionMatrix: Matrix;\n\n /**\n * A transform to be appended to the projection matrix.\n *\n * This can be used to transform points in world-space one last time before they are outputted by the shader. You can\n * use to rotate the whole scene, for example. Remember to clear it once you've rendered everything.\n * @member {PIXI.Matrix}\n */\n public transform: Matrix;\n\n private renderer: Renderer;\n\n /** @param renderer - The renderer this System works for. */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n\n this.destinationFrame = null;\n this.sourceFrame = null;\n this.defaultFrame = null;\n this.projectionMatrix = new Matrix();\n this.transform = null;\n }\n\n /**\n * Updates the projection-matrix based on the sourceFrame → destinationFrame mapping provided.\n *\n * NOTE: It is expected you call `renderer.framebuffer.setViewport(destinationFrame)` after this. This is because\n * the framebuffer viewport converts shader vertex output in normalized device coordinates to window coordinates.\n *\n * NOTE-2: {@link PIXI.RenderTextureSystem#bind} updates the projection-matrix when you bind a render-texture.\n * It is expected\n * that you dirty the current bindings when calling this manually.\n * @param destinationFrame - The rectangle in the render-target to render the contents into. If rendering to the canvas,\n * the origin is on the top-left; if rendering to a render-texture, the origin is on the bottom-left.\n * @param sourceFrame - The rectangle in world space that contains the contents being rendered.\n * @param resolution - The resolution of the render-target, which is the ratio of\n * world-space (or CSS) pixels to physical pixels.\n * @param root - Whether the render-target is the screen. This is required because rendering to textures\n * is y-flipped (i.e. upside down relative to the screen).\n */\n update(destinationFrame: Rectangle, sourceFrame: Rectangle, resolution: number, root: boolean): void\n {\n this.destinationFrame = destinationFrame || this.destinationFrame || this.defaultFrame;\n this.sourceFrame = sourceFrame || this.sourceFrame || destinationFrame;\n\n // Calculate object-space to clip-space projection\n this.calculateProjection(this.destinationFrame, this.sourceFrame, resolution, root);\n\n if (this.transform)\n {\n this.projectionMatrix.append(this.transform);\n }\n\n const renderer = this.renderer;\n\n renderer.globalUniforms.uniforms.projectionMatrix = this.projectionMatrix;\n renderer.globalUniforms.update();\n\n // this will work for now\n // but would be sweet to stick and even on the global uniforms..\n if (renderer.shader.shader)\n {\n renderer.shader.syncUniformGroup(renderer.shader.shader.uniforms.globals);\n }\n }\n\n /**\n * Calculates the `projectionMatrix` to map points inside `sourceFrame` to inside `destinationFrame`.\n * @param _destinationFrame - The destination frame in the render-target.\n * @param sourceFrame - The source frame in world space.\n * @param _resolution - The render-target's resolution, i.e. ratio of CSS to physical pixels.\n * @param root - Whether rendering into the screen. Otherwise, if rendering to a framebuffer, the projection\n * is y-flipped.\n */\n calculateProjection(_destinationFrame: Rectangle, sourceFrame: Rectangle, _resolution: number, root: boolean): void\n {\n const pm = this.projectionMatrix;\n const sign = !root ? 1 : -1;\n\n pm.identity();\n\n pm.a = (1 / sourceFrame.width * 2);\n pm.d = sign * (1 / sourceFrame.height * 2);\n\n pm.tx = -1 - (sourceFrame.x * pm.a);\n pm.ty = -sign - (sourceFrame.y * pm.d);\n }\n\n /**\n * Sets the transform of the active render target to the given matrix.\n * @param _matrix - The transformation matrix\n */\n setTransform(_matrix: Matrix): void\n {\n // this._activeRenderTarget.transform = matrix;\n }\n\n destroy(): void\n {\n this.renderer = null;\n }\n}\n\nextensions.add(ProjectionSystem);\n","import { extensions, ExtensionType } from '@pixi/extensions';\nimport { Matrix, Rectangle, Transform } from '@pixi/math';\nimport { RenderTexture } from './RenderTexture';\n\nimport type { MSAA_QUALITY } from '@pixi/constants';\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { IRenderableContainer, IRenderableObject, IRenderer } from '../IRenderer';\nimport type { ISystem } from '../system/ISystem';\nimport type { IBaseTextureOptions } from '../textures/BaseTexture';\n\nconst tempTransform = new Transform();\nconst tempRect = new Rectangle();\n\n// TODO could this just be part of extract?\nexport interface IGenerateTextureOptions extends IBaseTextureOptions\n{\n /**\n * The region of the displayObject, that shall be rendered,\n * if no region is specified, defaults to the local bounds of the displayObject.\n */\n region?: Rectangle;\n /** The resolution / device pixel ratio of the texture being generated. The default is the renderer's resolution. */\n resolution?: number;\n /** The number of samples of the frame buffer. The default is the renderer's multisample. */\n multisample?: MSAA_QUALITY;\n}\n\n/**\n * System that manages the generation of textures from the renderer.\n * @memberof PIXI\n */\nexport class GenerateTextureSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: [\n ExtensionType.RendererSystem,\n ExtensionType.CanvasRendererSystem\n ],\n name: 'textureGenerator',\n };\n\n renderer: IRenderer;\n\n private readonly _tempMatrix: Matrix;\n\n constructor(renderer: IRenderer)\n {\n this.renderer = renderer;\n\n this._tempMatrix = new Matrix();\n }\n\n /**\n * A Useful function that returns a texture of the display object that can then be used to create sprites\n * This can be quite useful if your displayObject is complicated and needs to be reused multiple times.\n * @param displayObject - The displayObject the object will be generated from.\n * @param {IGenerateTextureOptions} options - Generate texture options.\n * @param {PIXI.Rectangle} options.region - The region of the displayObject, that shall be rendered,\n * if no region is specified, defaults to the local bounds of the displayObject.\n * @param {number} [options.resolution] - If not given, the renderer's resolution is used.\n * @param {PIXI.MSAA_QUALITY} [options.multisample] - If not given, the renderer's multisample is used.\n * @returns a shiny new texture of the display object passed in\n */\n generateTexture(displayObject: IRenderableObject, options?: IGenerateTextureOptions): RenderTexture\n {\n const { region: manualRegion, ...textureOptions } = options || {};\n\n const region = manualRegion?.copyTo(tempRect)\n || (displayObject as IRenderableContainer).getLocalBounds(tempRect, true);\n const resolution = textureOptions.resolution || this.renderer.resolution;\n\n region.width = Math.max(region.width, 1 / resolution);\n region.height = Math.max(region.height, 1 / resolution);\n\n textureOptions.width = region.width;\n textureOptions.height = region.height;\n textureOptions.resolution = resolution;\n textureOptions.multisample ??= this.renderer.multisample;\n\n const renderTexture = RenderTexture.create(textureOptions);\n\n this._tempMatrix.tx = -region.x;\n this._tempMatrix.ty = -region.y;\n\n const transform = displayObject.transform;\n\n displayObject.transform = tempTransform;\n\n this.renderer.render(displayObject, {\n renderTexture,\n transform: this._tempMatrix,\n skipUpdateTransform: !!displayObject.parent,\n blit: true,\n });\n\n displayObject.transform = transform;\n\n return renderTexture;\n }\n\n destroy(): void\n {\n // ka boom!\n }\n}\n\nextensions.add(GenerateTextureSystem);\n","import { Color } from '@pixi/color';\nimport { extensions, ExtensionType } from '@pixi/extensions';\nimport { Rectangle } from '@pixi/math';\n\nimport type { ColorSource } from '@pixi/color';\nimport type { BUFFER_BITS } from '@pixi/constants';\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { ISize } from '@pixi/math';\nimport type { MaskData } from '../mask/MaskData';\nimport type { Renderer } from '../Renderer';\nimport type { ISystem } from '../system/ISystem';\nimport type { BaseRenderTexture } from './BaseRenderTexture';\nimport type { RenderTexture } from './RenderTexture';\n\n// Temporary rectangle for assigned sourceFrame or destinationFrame\nconst tempRect = new Rectangle();\n\n// Temporary rectangle for renderTexture destinationFrame\nconst tempRect2 = new Rectangle();\n\n/* eslint-disable max-len */\n/**\n * System plugin to the renderer to manage render textures.\n *\n * Should be added after FramebufferSystem\n *\n * ### Frames\n *\n * The `RenderTextureSystem` holds a sourceFrame → destinationFrame projection. The following table explains the different\n * coordinate spaces used:\n *\n * | Frame | Description | Coordinate System |\n * | ---------------------- | ---------------------------------------------------------------- | ------------------------------------------------------- |\n * | sourceFrame | The rectangle inside of which display-objects are being rendered | **World Space**: The origin on the top-left |\n * | destinationFrame | The rectangle in the render-target (canvas or texture) into which contents should be rendered | If rendering to the canvas, this is in screen space and the origin is on the top-left. If rendering to a render-texture, this is in its base-texture's space with the origin on the bottom-left. |\n * | viewportFrame | The framebuffer viewport corresponding to the destination-frame | **Window Coordinates**: The origin is always on the bottom-left. |\n * @memberof PIXI\n */\nexport class RenderTextureSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'renderTexture',\n };\n\n /* eslint-enable max-len */\n\n /**\n * List of masks for the {@link PIXI.StencilSystem}.\n * @readonly\n */\n public defaultMaskStack: Array;\n\n /**\n * Render texture currently bound. {@code null} if rendering to the canvas.\n * @readonly\n */\n public current: RenderTexture | null;\n\n /**\n * The source frame for the render-target's projection mapping.\n *\n * See {@link PIXI.ProjectionSystem#sourceFrame} for more details\n */\n public readonly sourceFrame: Rectangle;\n\n /**\n * The destination frame for the render-target's projection mapping.\n *\n * See {@link PIXI.ProjectionSystem#destinationFrame} for more details.\n */\n public readonly destinationFrame: Rectangle;\n\n /**\n * The viewport frame for the render-target's viewport binding. This is equal to the destination-frame\n * for render-textures, while it is y-flipped when rendering to the screen (i.e. its origin is always on\n * the bottom-left).\n */\n public readonly viewportFrame: Rectangle;\n\n private renderer: Renderer;\n\n /** Does the renderer have alpha and are its color channels stored premultipled by the alpha channel? */\n private _rendererPremultipliedAlpha: boolean;\n\n /**\n * @param renderer - The renderer this System works for.\n */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n\n this.defaultMaskStack = [];\n this.current = null;\n this.sourceFrame = new Rectangle();\n this.destinationFrame = new Rectangle();\n this.viewportFrame = new Rectangle();\n }\n\n protected contextChange(): void\n {\n const attributes = this.renderer?.gl.getContextAttributes();\n\n this._rendererPremultipliedAlpha = !!(attributes && attributes.alpha && attributes.premultipliedAlpha);\n }\n\n /**\n * Bind the current render texture.\n * @param renderTexture - RenderTexture to bind, by default its `null` - the screen.\n * @param sourceFrame - Part of world that is mapped to the renderTexture.\n * @param destinationFrame - Part of renderTexture, by default it has the same size as sourceFrame.\n */\n bind(renderTexture: RenderTexture = null, sourceFrame?: Rectangle, destinationFrame?: Rectangle): void\n {\n const renderer = this.renderer;\n\n this.current = renderTexture;\n\n let baseTexture: BaseRenderTexture;\n let framebuffer;\n let resolution;\n\n if (renderTexture)\n {\n baseTexture = renderTexture.baseTexture as BaseRenderTexture;\n\n resolution = baseTexture.resolution;\n\n if (!sourceFrame)\n {\n tempRect.width = renderTexture.frame.width;\n tempRect.height = renderTexture.frame.height;\n\n sourceFrame = tempRect;\n }\n\n if (!destinationFrame)\n {\n tempRect2.x = renderTexture.frame.x;\n tempRect2.y = renderTexture.frame.y;\n tempRect2.width = sourceFrame.width;\n tempRect2.height = sourceFrame.height;\n\n destinationFrame = tempRect2;\n }\n\n framebuffer = baseTexture.framebuffer;\n }\n else\n {\n resolution = renderer.resolution;\n\n if (!sourceFrame)\n {\n tempRect.width = renderer._view.screen.width;\n tempRect.height = renderer._view.screen.height;\n\n sourceFrame = tempRect;\n }\n\n if (!destinationFrame)\n {\n destinationFrame = tempRect;\n\n destinationFrame.width = sourceFrame.width;\n destinationFrame.height = sourceFrame.height;\n }\n }\n\n const viewportFrame = this.viewportFrame;\n\n viewportFrame.x = destinationFrame.x * resolution;\n viewportFrame.y = destinationFrame.y * resolution;\n viewportFrame.width = destinationFrame.width * resolution;\n viewportFrame.height = destinationFrame.height * resolution;\n\n if (!renderTexture)\n {\n viewportFrame.y = renderer.view.height - (viewportFrame.y + viewportFrame.height);\n }\n\n viewportFrame.ceil();\n\n this.renderer.framebuffer.bind(framebuffer, viewportFrame);\n this.renderer.projection.update(destinationFrame, sourceFrame, resolution, !framebuffer);\n\n if (renderTexture)\n {\n this.renderer.mask.setMaskStack(baseTexture.maskStack);\n }\n else\n {\n this.renderer.mask.setMaskStack(this.defaultMaskStack);\n }\n\n this.sourceFrame.copyFrom(sourceFrame);\n this.destinationFrame.copyFrom(destinationFrame);\n }\n\n /**\n * Erases the render texture and fills the drawing area with a colour.\n * @param clearColor - The color as rgba, default to use the renderer backgroundColor\n * @param [mask=BUFFER_BITS.COLOR | BUFFER_BITS.DEPTH] - Bitwise OR of masks\n * that indicate the buffers to be cleared, by default COLOR and DEPTH buffers.\n */\n clear(clearColor?: ColorSource, mask?: BUFFER_BITS): void\n {\n const fallbackColor = this.current\n ? this.current.baseTexture.clear\n : this.renderer.background.backgroundColor;\n const color = Color.shared.setValue(clearColor ? clearColor : fallbackColor);\n\n if ((this.current && this.current.baseTexture.alphaMode > 0)\n || (!this.current && this._rendererPremultipliedAlpha))\n {\n color.premultiply(color.alpha);\n }\n\n const destinationFrame = this.destinationFrame;\n const baseFrame: ISize = this.current ? this.current.baseTexture : this.renderer._view.screen;\n const clearMask = destinationFrame.width !== baseFrame.width || destinationFrame.height !== baseFrame.height;\n\n if (clearMask)\n {\n let { x, y, width, height } = this.viewportFrame;\n\n x = Math.round(x);\n y = Math.round(y);\n width = Math.round(width);\n height = Math.round(height);\n\n // TODO: ScissorSystem should cache whether the scissor test is enabled or not.\n this.renderer.gl.enable(this.renderer.gl.SCISSOR_TEST);\n this.renderer.gl.scissor(x, y, width, height);\n }\n\n this.renderer.framebuffer.clear(color.red, color.green, color.blue, color.alpha, mask);\n\n if (clearMask)\n {\n // Restore the scissor box\n this.renderer.scissor.pop();\n }\n }\n\n resize(): void // screenWidth, screenHeight)\n {\n // resize the root only!\n this.bind(null);\n }\n\n /** Resets render-texture state. */\n reset(): void\n {\n this.bind(null);\n }\n\n destroy(): void\n {\n this.renderer = null;\n }\n}\n\nextensions.add(RenderTextureSystem);\n","import type { Dict } from '@pixi/utils';\n\n/**\n * @private\n */\nexport class IGLUniformData\n{\n location: WebGLUniformLocation;\n value: number | boolean | Float32Array | Int32Array | Uint32Array | boolean[];\n}\n\n/**\n * Helper class to create a WebGL Program\n * @memberof PIXI\n */\nexport class GLProgram\n{\n /** The shader program. */\n public program: WebGLProgram;\n\n /**\n * Holds the uniform data which contains uniform locations\n * and current uniform values used for caching and preventing unneeded GPU commands.\n */\n public uniformData: Dict;\n\n /**\n * UniformGroups holds the various upload functions for the shader. Each uniform group\n * and program have a unique upload function generated.\n */\n public uniformGroups: Dict;\n\n /** A hash that stores where UBOs are bound to on the program. */\n public uniformBufferBindings: Dict;\n\n /** A hash for lazily-generated uniform uploading functions. */\n public uniformSync: Dict;\n\n /**\n * A place where dirty ticks are stored for groups\n * If a tick here does not match with the Higher level Programs tick, it means\n * we should re upload the data.\n */\n public uniformDirtyGroups: Dict;\n\n /**\n * Makes a new Pixi program.\n * @param program - webgl program\n * @param uniformData - uniforms\n */\n constructor(program: WebGLProgram, uniformData: {[key: string]: IGLUniformData})\n {\n this.program = program;\n this.uniformData = uniformData;\n this.uniformGroups = {};\n this.uniformDirtyGroups = {};\n this.uniformBufferBindings = {};\n }\n\n /** Destroys this program. */\n destroy(): void\n {\n this.uniformData = null;\n this.uniformGroups = null;\n this.uniformDirtyGroups = null;\n this.uniformBufferBindings = null;\n this.program = null;\n }\n}\n","/**\n * @private\n * @param {WebGLRenderingContext} gl - The current WebGL context {WebGLProgram}\n * @param {number} type - the type, can be either VERTEX_SHADER or FRAGMENT_SHADER\n * @param {string} src - The vertex shader source as an array of strings.\n * @returns {WebGLShader} the shader\n */\nexport function compileShader(gl: WebGLRenderingContextBase, type: number, src: string): WebGLShader\n{\n const shader = gl.createShader(type);\n\n gl.shaderSource(shader, src);\n gl.compileShader(shader);\n\n return shader;\n}\n","function booleanArray(size: number): Array\n{\n const array = new Array(size);\n\n for (let i = 0; i < array.length; i++)\n {\n array[i] = false;\n }\n\n return array;\n}\n\n/**\n * @method defaultValue\n * @memberof PIXI.glCore.shader\n * @param {string} type - Type of value\n * @param {number} size\n * @private\n */\nexport function defaultValue(\n type: string,\n size: number\n): number | Float32Array | Int32Array | Uint32Array | boolean | boolean[]\n{\n switch (type)\n {\n case 'float':\n return 0;\n\n case 'vec2':\n return new Float32Array(2 * size);\n\n case 'vec3':\n return new Float32Array(3 * size);\n\n case 'vec4':\n return new Float32Array(4 * size);\n\n case 'int':\n case 'uint':\n case 'sampler2D':\n case 'sampler2DArray':\n return 0;\n\n case 'ivec2':\n return new Int32Array(2 * size);\n\n case 'ivec3':\n return new Int32Array(3 * size);\n\n case 'ivec4':\n return new Int32Array(4 * size);\n\n case 'uvec2':\n return new Uint32Array(2 * size);\n\n case 'uvec3':\n return new Uint32Array(3 * size);\n\n case 'uvec4':\n return new Uint32Array(4 * size);\n\n case 'bool':\n return false;\n\n case 'bvec2':\n\n return booleanArray(2 * size);\n\n case 'bvec3':\n return booleanArray(3 * size);\n\n case 'bvec4':\n return booleanArray(4 * size);\n\n case 'mat2':\n return new Float32Array([1, 0,\n 0, 1]);\n\n case 'mat3':\n return new Float32Array([1, 0, 0,\n 0, 1, 0,\n 0, 0, 1]);\n\n case 'mat4':\n return new Float32Array([1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1]);\n }\n\n return null;\n}\n","/**\n * will log a shader error highlighting the lines with the error\n * also will add numbers along the side.\n * @param gl - the WebGLContext\n * @param shader - the shader to log errors for\n */\nfunction logPrettyShaderError(gl: WebGLRenderingContext, shader: WebGLShader): void\n{\n const shaderSrc = gl.getShaderSource(shader)\n .split('\\n')\n .map((line, index) => `${index}: ${line}`);\n\n const shaderLog = gl.getShaderInfoLog(shader);\n const splitShader = shaderLog.split('\\n');\n\n const dedupe: Record = {};\n\n const lineNumbers = splitShader.map((line) => parseFloat(line.replace(/^ERROR\\: 0\\:([\\d]+)\\:.*$/, '$1')))\n .filter((n) =>\n {\n if (n && !dedupe[n])\n {\n dedupe[n] = true;\n\n return true;\n }\n\n return false;\n });\n\n const logArgs = [''];\n\n lineNumbers.forEach((number) =>\n {\n shaderSrc[number - 1] = `%c${shaderSrc[number - 1]}%c`;\n logArgs.push('background: #FF0000; color:#FFFFFF; font-size: 10px', 'font-size: 10px');\n });\n\n const fragmentSourceToLog = shaderSrc\n .join('\\n');\n\n logArgs[0] = fragmentSourceToLog;\n\n console.error(shaderLog);\n\n // eslint-disable-next-line no-console\n console.groupCollapsed('click to view full shader code');\n console.warn(...logArgs);\n // eslint-disable-next-line no-console\n console.groupEnd();\n}\n\n/**\n *\n * logs out any program errors\n * @param gl - The current WebGL context\n * @param program - the WebGL program to display errors for\n * @param vertexShader - the fragment WebGL shader program\n * @param fragmentShader - the vertex WebGL shader program\n */\nexport function logProgramError(\n gl: WebGLRenderingContext,\n program: WebGLProgram,\n vertexShader: WebGLShader,\n fragmentShader: WebGLShader\n): void\n{\n // if linking fails, then log and cleanup\n if (!gl.getProgramParameter(program, gl.LINK_STATUS))\n {\n if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS))\n {\n logPrettyShaderError(gl, vertexShader);\n }\n\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS))\n {\n logPrettyShaderError(gl, fragmentShader);\n }\n\n console.error('PixiJS Error: Could not initialize shader.');\n\n // if there is a program info log, log it\n if (gl.getProgramInfoLog(program) !== '')\n {\n console.warn('PixiJS Warning: gl.getProgramInfoLog()', gl.getProgramInfoLog(program));\n }\n }\n}\n","import { GLProgram } from '../GLProgram';\nimport { compileShader } from './compileShader';\nimport { defaultValue } from './defaultValue';\nimport { getAttributeData } from './getAttributeData';\nimport { getUniformData } from './getUniformData';\nimport { logProgramError } from './logProgramError';\n\nimport type { IRenderingContext } from '../../IRenderer';\nimport type { IGLUniformData } from '../GLProgram';\nimport type { Program } from '../Program';\n\n/**\n * generates a WebGL Program object from a high level Pixi Program.\n * @param gl - a rendering context on which to generate the program\n * @param program - the high level Pixi Program.\n */\nexport function generateProgram(gl: IRenderingContext, program: Program): GLProgram\n{\n const glVertShader = compileShader(gl, gl.VERTEX_SHADER, program.vertexSrc);\n const glFragShader = compileShader(gl, gl.FRAGMENT_SHADER, program.fragmentSrc);\n\n const webGLProgram = gl.createProgram();\n\n gl.attachShader(webGLProgram, glVertShader);\n gl.attachShader(webGLProgram, glFragShader);\n\n const transformFeedbackVaryings = program.extra?.transformFeedbackVaryings;\n\n if (transformFeedbackVaryings)\n {\n if (typeof gl.transformFeedbackVaryings !== 'function')\n {\n if (process.env.DEBUG)\n {\n console.warn(`TransformFeedback is not supported but TransformFeedbackVaryings are given.`);\n }\n }\n else\n {\n gl.transformFeedbackVaryings(\n webGLProgram,\n transformFeedbackVaryings.names,\n transformFeedbackVaryings.bufferMode === 'separate'\n ? gl.SEPARATE_ATTRIBS\n : gl.INTERLEAVED_ATTRIBS\n );\n }\n }\n\n gl.linkProgram(webGLProgram);\n\n if (!gl.getProgramParameter(webGLProgram, gl.LINK_STATUS))\n {\n logProgramError(gl, webGLProgram, glVertShader, glFragShader);\n }\n\n program.attributeData = getAttributeData(webGLProgram, gl);\n program.uniformData = getUniformData(webGLProgram, gl);\n\n // GLSL 1.00: bind attributes sorted by name in ascending order\n // GLSL 3.00: don't change the attribute locations that where chosen by the compiler\n // or assigned by the layout specifier in the shader source code\n if (!(/^[ \\t]*#[ \\t]*version[ \\t]+300[ \\t]+es[ \\t]*$/m).test(program.vertexSrc))\n {\n const keys = Object.keys(program.attributeData);\n\n keys.sort((a, b) => (a > b) ? 1 : -1); // eslint-disable-line no-confusing-arrow\n\n for (let i = 0; i < keys.length; i++)\n {\n program.attributeData[keys[i]].location = i;\n\n gl.bindAttribLocation(webGLProgram, i, keys[i]);\n }\n\n gl.linkProgram(webGLProgram);\n }\n\n gl.deleteShader(glVertShader);\n gl.deleteShader(glFragShader);\n\n const uniformData: {[key: string]: IGLUniformData} = {};\n\n for (const i in program.uniformData)\n {\n const data = program.uniformData[i];\n\n uniformData[i] = {\n location: gl.getUniformLocation(webGLProgram, i),\n value: defaultValue(data.type, data.size),\n };\n }\n\n const glProgram = new GLProgram(webGLProgram, uniformData);\n\n return glProgram;\n}\n","import { mapSize } from './mapSize';\nimport { mapType } from './mapType';\n\nimport type { IAttributeData } from '../Program';\n\n/**\n * returns the attribute data from the program\n * @private\n * @param {WebGLProgram} [program] - the WebGL program\n * @param {WebGLRenderingContext} [gl] - the WebGL context\n * @returns {object} the attribute data for this program\n */\nexport function getAttributeData(program: WebGLProgram, gl: WebGLRenderingContextBase): {[key: string]: IAttributeData}\n{\n const attributes: {[key: string]: IAttributeData} = {};\n\n const totalAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);\n\n for (let i = 0; i < totalAttributes; i++)\n {\n const attribData = gl.getActiveAttrib(program, i);\n\n if (attribData.name.startsWith('gl_'))\n {\n continue;\n }\n\n const type = mapType(gl, attribData.type);\n const data = {\n type,\n name: attribData.name,\n size: mapSize(type),\n location: gl.getAttribLocation(program, attribData.name),\n };\n\n attributes[attribData.name] = data;\n }\n\n return attributes;\n}\n","import { defaultValue } from './defaultValue';\nimport { mapType } from './mapType';\n\nimport type { IUniformData } from '../Program';\n\n/**\n * returns the uniform data from the program\n * @private\n * @param program - the webgl program\n * @param gl - the WebGL context\n * @returns {object} the uniform data for this program\n */\nexport function getUniformData(program: WebGLProgram, gl: WebGLRenderingContextBase): {[key: string]: IUniformData}\n{\n const uniforms: {[key: string]: IUniformData} = {};\n\n const totalUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);\n\n for (let i = 0; i < totalUniforms; i++)\n {\n const uniformData = gl.getActiveUniform(program, i);\n const name = uniformData.name.replace(/\\[.*?\\]$/, '');\n\n const isArray = !!(uniformData.name.match(/\\[.*?\\]$/));\n\n const type = mapType(gl, uniformData.type);\n\n uniforms[name] = {\n name,\n index: i,\n type,\n size: uniformData.size,\n isArray,\n value: defaultValue(type, uniformData.size),\n };\n }\n\n return uniforms;\n}\n","import { mapSize } from '../utils';\nimport { uniformParsers } from './uniformParsers';\n\nimport type { Dict } from '@pixi/utils';\nimport type { Buffer } from '../../geometry/Buffer';\nimport type { Renderer } from '../../Renderer';\nimport type { IUniformData } from '../Program';\nimport type { UniformGroup } from '../UniformGroup';\n\nexport type UniformsSyncCallback = (...args: any[]) => void;\n\nfunction uboUpdate(_ud: any, _uv: any, _renderer: Renderer, _syncData: any, buffer: Buffer): void\n{\n _renderer.buffer.update(buffer);\n}\n\n// cv = CachedValue\n// v = value\n// ud = uniformData\n// uv = uniformValue\n// l = location\nconst UBO_TO_SINGLE_SETTERS: Dict = {\n float: `\n data[offset] = v;\n `,\n vec2: `\n data[offset] = v[0];\n data[offset+1] = v[1];\n `,\n vec3: `\n data[offset] = v[0];\n data[offset+1] = v[1];\n data[offset+2] = v[2];\n\n `,\n vec4: `\n data[offset] = v[0];\n data[offset+1] = v[1];\n data[offset+2] = v[2];\n data[offset+3] = v[3];\n `,\n mat2: `\n data[offset] = v[0];\n data[offset+1] = v[1];\n\n data[offset+4] = v[2];\n data[offset+5] = v[3];\n `,\n mat3: `\n data[offset] = v[0];\n data[offset+1] = v[1];\n data[offset+2] = v[2];\n\n data[offset + 4] = v[3];\n data[offset + 5] = v[4];\n data[offset + 6] = v[5];\n\n data[offset + 8] = v[6];\n data[offset + 9] = v[7];\n data[offset + 10] = v[8];\n `,\n mat4: `\n for(var i = 0; i < 16; i++)\n {\n data[offset + i] = v[i];\n }\n `\n};\n\nconst GLSL_TO_STD40_SIZE: Dict = {\n float: 4,\n vec2: 8,\n vec3: 12,\n vec4: 16,\n\n int: 4,\n ivec2: 8,\n ivec3: 12,\n ivec4: 16,\n\n uint: 4,\n uvec2: 8,\n uvec3: 12,\n uvec4: 16,\n\n bool: 4,\n bvec2: 8,\n bvec3: 12,\n bvec4: 16,\n\n mat2: 16 * 2,\n mat3: 16 * 3,\n mat4: 16 * 4,\n};\n\ninterface UBOElement\n{\n data: IUniformData\n offset: number,\n dataLen: number,\n dirty: number\n}\n\n/**\n * logic originally from here: https://github.com/sketchpunk/FunWithWebGL2/blob/master/lesson_022/Shaders.js\n * rewrote it, but this was a great starting point to get a solid understanding of whats going on :)\n * @ignore\n * @param uniformData\n */\nexport function createUBOElements(uniformData: IUniformData[]): {uboElements: UBOElement[], size: number}\n{\n const uboElements: UBOElement[] = uniformData.map((data: IUniformData) =>\n ({\n data,\n offset: 0,\n dataLen: 0,\n dirty: 0\n }));\n\n let size = 0;\n let chunkSize = 0;\n let offset = 0;\n\n for (let i = 0; i < uboElements.length; i++)\n {\n const uboElement = uboElements[i];\n\n size = GLSL_TO_STD40_SIZE[uboElement.data.type];\n\n if (uboElement.data.size > 1)\n {\n size = Math.max(size, 16) * uboElement.data.size;\n }\n\n uboElement.dataLen = size;\n\n // add some size offset..\n // must align to the nearest 16 bytes or internally nearest round size\n\n if (chunkSize % size !== 0 && chunkSize < 16)\n {\n // diff required to line up..\n const lineUpValue = (chunkSize % size) % 16;\n\n chunkSize += lineUpValue;\n offset += lineUpValue;\n }\n\n if ((chunkSize + size) > 16)\n {\n offset = Math.ceil(offset / 16) * 16;\n uboElement.offset = offset;\n offset += size;\n chunkSize = size;\n }\n else\n {\n uboElement.offset = offset;\n chunkSize += size;\n offset += size;\n }\n }\n\n offset = Math.ceil(offset / 16) * 16;\n\n return { uboElements, size: offset };\n}\n\nexport function getUBOData(uniforms: Dict, uniformData: Dict): any[]\n{\n const usedUniformDatas = [];\n\n // build..\n for (const i in uniforms)\n {\n if (uniformData[i])\n {\n usedUniformDatas.push(uniformData[i]);\n }\n }\n\n // sort them out by index!\n usedUniformDatas.sort((a, b) => a.index - b.index);\n\n return usedUniformDatas;\n}\n\nexport function generateUniformBufferSync(\n group: UniformGroup,\n uniformData: Dict\n): {size: number, syncFunc: UniformsSyncCallback}\n{\n if (!group.autoManage)\n {\n // if the group is nott automatically managed, we don't need to generate a special function for it...\n return { size: 0, syncFunc: uboUpdate };\n }\n\n const usedUniformDatas = getUBOData(group.uniforms, uniformData);\n\n const { uboElements, size } = createUBOElements(usedUniformDatas);\n\n const funcFragments = [`\n var v = null;\n var v2 = null;\n var cv = null;\n var t = 0;\n var gl = renderer.gl\n var index = 0;\n var data = buffer.data;\n `];\n\n for (let i = 0; i < uboElements.length; i++)\n {\n const uboElement = uboElements[i];\n const uniform = group.uniforms[uboElement.data.name];\n\n const name = uboElement.data.name;\n\n let parsed = false;\n\n for (let j = 0; j < uniformParsers.length; j++)\n {\n const uniformParser = uniformParsers[j];\n\n if (uniformParser.codeUbo && uniformParser.test(uboElement.data, uniform))\n {\n funcFragments.push(\n `offset = ${uboElement.offset / 4};`,\n uniformParsers[j].codeUbo(uboElement.data.name, uniform));\n parsed = true;\n\n break;\n }\n }\n\n if (!parsed)\n {\n if (uboElement.data.size > 1)\n {\n const size = mapSize(uboElement.data.type);\n const rowSize = Math.max(GLSL_TO_STD40_SIZE[uboElement.data.type] / 16, 1);\n const elementSize = size / rowSize;\n const remainder = (4 - (elementSize % 4)) % 4;\n\n funcFragments.push(`\n cv = ud.${name}.value;\n v = uv.${name};\n offset = ${uboElement.offset / 4};\n\n t = 0;\n\n for(var i=0; i < ${uboElement.data.size * rowSize}; i++)\n {\n for(var j = 0; j < ${elementSize}; j++)\n {\n data[offset++] = v[t++];\n }\n offset += ${remainder};\n }\n\n `);\n }\n else\n {\n const template = UBO_TO_SINGLE_SETTERS[uboElement.data.type];\n\n funcFragments.push(`\n cv = ud.${name}.value;\n v = uv.${name};\n offset = ${uboElement.offset / 4};\n ${template};\n `);\n }\n }\n }\n\n funcFragments.push(`\n renderer.buffer.update(buffer);\n `);\n\n return {\n size,\n // eslint-disable-next-line no-new-func\n syncFunc: new Function(\n 'ud',\n 'uv',\n 'renderer',\n 'syncData',\n 'buffer',\n funcFragments.join('\\n')\n ) as UniformsSyncCallback\n };\n}\n","// Cache the result to prevent running this over and over\nlet unsafeEval: boolean;\n\n/**\n * Not all platforms allow to generate function code (e.g., `new Function`).\n * this provides the platform-level detection.\n * @private\n * @returns {boolean} `true` if `new Function` is supported.\n */\nexport function unsafeEvalSupported(): boolean\n{\n if (typeof unsafeEval === 'boolean')\n {\n return unsafeEval;\n }\n\n try\n {\n /* eslint-disable no-new-func */\n const func = new Function('param1', 'param2', 'param3', 'return param1[param2] === param3;');\n /* eslint-enable no-new-func */\n\n unsafeEval = func({ a: 'b' }, 'a', 'b') === true;\n }\n catch (e)\n {\n unsafeEval = false;\n }\n\n return unsafeEval;\n}\n","import { extensions, ExtensionType } from '@pixi/extensions';\nimport { generateUniformsSync, unsafeEvalSupported } from './utils';\nimport { generateProgram } from './utils/generateProgram';\nimport { generateUniformBufferSync } from './utils/generateUniformBufferSync';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { Dict } from '@pixi/utils';\nimport type { IRenderingContext } from '../IRenderer';\nimport type { Renderer } from '../Renderer';\nimport type { ISystem } from '../system/ISystem';\nimport type { GLProgram } from './GLProgram';\nimport type { Program } from './Program';\nimport type { Shader } from './Shader';\nimport type { UniformGroup } from './UniformGroup';\nimport type { UniformsSyncCallback } from './utils';\n\nlet UID = 0;\n// default sync data so we don't create a new one each time!\nconst defaultSyncData = { textureCount: 0, uboCount: 0 };\n\n/**\n * System plugin to the renderer to manage shaders.\n * @memberof PIXI\n */\nexport class ShaderSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'shader',\n };\n\n /**\n * The current WebGL rendering context.\n * @member {WebGLRenderingContext}\n */\n protected gl: IRenderingContext;\n\n public shader: Shader;\n public program: Program;\n public id: number;\n public destroyed = false;\n\n /** Cache to holds the generated functions. Stored against UniformObjects unique signature. */\n private cache: Dict;\n private _uboCache: Dict<{size: number, syncFunc: UniformsSyncCallback}>;\n private renderer: Renderer;\n\n /** @param renderer - The renderer this System works for. */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n\n // Validation check that this environment support `new Function`\n this.systemCheck();\n\n this.gl = null;\n\n this.shader = null;\n this.program = null;\n\n this.cache = {};\n this._uboCache = {};\n\n this.id = UID++;\n }\n\n /**\n * Overrideable function by `@pixi/unsafe-eval` to silence\n * throwing an error if platform doesn't support unsafe-evals.\n * @private\n */\n private systemCheck(): void\n {\n if (!unsafeEvalSupported())\n {\n throw new Error('Current environment does not allow unsafe-eval, '\n + 'please use @pixi/unsafe-eval module to enable support.');\n }\n }\n\n protected contextChange(gl: IRenderingContext): void\n {\n this.gl = gl;\n this.reset();\n }\n\n /**\n * Changes the current shader to the one given in parameter.\n * @param shader - the new shader\n * @param dontSync - false if the shader should automatically sync its uniforms.\n * @returns the glProgram that belongs to the shader.\n */\n bind(shader: Shader, dontSync?: boolean): GLProgram\n {\n shader.disposeRunner.add(this);\n\n shader.uniforms.globals = this.renderer.globalUniforms;\n\n const program = shader.program;\n const glProgram = program.glPrograms[this.renderer.CONTEXT_UID] || this.generateProgram(shader);\n\n this.shader = shader;\n\n // TODO - some current Pixi plugins bypass this.. so it not safe to use yet..\n if (this.program !== program)\n {\n this.program = program;\n this.gl.useProgram(glProgram.program);\n }\n\n if (!dontSync)\n {\n defaultSyncData.textureCount = 0;\n defaultSyncData.uboCount = 0;\n\n this.syncUniformGroup(shader.uniformGroup, defaultSyncData);\n }\n\n return glProgram;\n }\n\n /**\n * Uploads the uniforms values to the currently bound shader.\n * @param uniforms - the uniforms values that be applied to the current shader\n */\n setUniforms(uniforms: Dict): void\n {\n const shader = this.shader.program;\n const glProgram = shader.glPrograms[this.renderer.CONTEXT_UID];\n\n shader.syncUniforms(glProgram.uniformData, uniforms, this.renderer);\n }\n\n /* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n /**\n * Syncs uniforms on the group\n * @param group - the uniform group to sync\n * @param syncData - this is data that is passed to the sync function and any nested sync functions\n */\n syncUniformGroup(group: UniformGroup, syncData?: any): void\n {\n const glProgram = this.getGlProgram();\n\n if (!group.static || group.dirtyId !== glProgram.uniformDirtyGroups[group.id])\n {\n glProgram.uniformDirtyGroups[group.id] = group.dirtyId;\n\n this.syncUniforms(group, glProgram, syncData);\n }\n }\n\n /**\n * Overrideable by the @pixi/unsafe-eval package to use static syncUniforms instead.\n * @param group\n * @param glProgram\n * @param syncData\n */\n syncUniforms(group: UniformGroup, glProgram: GLProgram, syncData: any): void\n {\n const syncFunc = group.syncUniforms[this.shader.program.id] || this.createSyncGroups(group);\n\n syncFunc(glProgram.uniformData, group.uniforms, this.renderer, syncData);\n }\n\n createSyncGroups(group: UniformGroup): UniformsSyncCallback\n {\n const id = this.getSignature(group, this.shader.program.uniformData, 'u');\n\n if (!this.cache[id])\n {\n this.cache[id] = generateUniformsSync(group, this.shader.program.uniformData);\n }\n\n group.syncUniforms[this.shader.program.id] = this.cache[id];\n\n return group.syncUniforms[this.shader.program.id];\n }\n\n /**\n * Syncs uniform buffers\n * @param group - the uniform buffer group to sync\n * @param name - the name of the uniform buffer\n */\n syncUniformBufferGroup(group: UniformGroup, name?: string)\n {\n const glProgram = this.getGlProgram();\n\n if (!group.static || group.dirtyId !== 0 || !glProgram.uniformGroups[group.id])\n {\n group.dirtyId = 0;\n\n const syncFunc = glProgram.uniformGroups[group.id]\n || this.createSyncBufferGroup(group, glProgram, name);\n\n // TODO wrap update in a cache??\n group.buffer.update();\n\n syncFunc(glProgram.uniformData,\n group.uniforms,\n this.renderer,\n defaultSyncData,\n group.buffer\n );\n }\n\n this.renderer.buffer.bindBufferBase(group.buffer, glProgram.uniformBufferBindings[name]);\n }\n\n /**\n * Will create a function that uploads a uniform buffer using the STD140 standard.\n * The upload function will then be cached for future calls\n * If a group is manually managed, then a simple upload function is generated\n * @param group - the uniform buffer group to sync\n * @param glProgram - the gl program to attach the uniform bindings to\n * @param name - the name of the uniform buffer (must exist on the shader)\n */\n protected createSyncBufferGroup(group: UniformGroup, glProgram: GLProgram, name: string): UniformsSyncCallback\n {\n const { gl } = this.renderer;\n\n this.renderer.buffer.bind(group.buffer);\n\n // bind them...\n const uniformBlockIndex = this.gl.getUniformBlockIndex(glProgram.program, name);\n\n glProgram.uniformBufferBindings[name] = this.shader.uniformBindCount;\n\n gl.uniformBlockBinding(glProgram.program, uniformBlockIndex, this.shader.uniformBindCount);\n\n this.shader.uniformBindCount++;\n\n const id = this.getSignature(group, this.shader.program.uniformData, 'ubo');\n\n let uboData = this._uboCache[id];\n\n if (!uboData)\n {\n uboData = this._uboCache[id] = generateUniformBufferSync(group, this.shader.program.uniformData);\n }\n\n if (group.autoManage)\n {\n const data = new Float32Array(uboData.size / 4);\n\n group.buffer.update(data);\n }\n\n glProgram.uniformGroups[group.id] = uboData.syncFunc;\n\n return glProgram.uniformGroups[group.id];\n }\n\n /**\n * Takes a uniform group and data and generates a unique signature for them.\n * @param group - The uniform group to get signature of\n * @param group.uniforms\n * @param uniformData - Uniform information generated by the shader\n * @param preFix\n * @returns Unique signature of the uniform group\n */\n private getSignature(group: {uniforms: Dict}, uniformData: Dict, preFix: string): string\n {\n const uniforms = group.uniforms;\n\n const strings = [`${preFix}-`];\n\n for (const i in uniforms)\n {\n strings.push(i);\n\n if (uniformData[i])\n {\n strings.push(uniformData[i].type);\n }\n }\n\n return strings.join('-');\n }\n\n /**\n * Returns the underlying GLShade rof the currently bound shader.\n *\n * This can be handy for when you to have a little more control over the setting of your uniforms.\n * @returns The glProgram for the currently bound Shader for this context\n */\n getGlProgram(): GLProgram\n {\n if (this.shader)\n {\n return this.shader.program.glPrograms[this.renderer.CONTEXT_UID];\n }\n\n return null;\n }\n\n /**\n * Generates a glProgram version of the Shader provided.\n * @param shader - The shader that the glProgram will be based on.\n * @returns A shiny new glProgram!\n */\n generateProgram(shader: Shader): GLProgram\n {\n const gl = this.gl;\n const program = shader.program;\n\n const glProgram = generateProgram(gl, program);\n\n program.glPrograms[this.renderer.CONTEXT_UID] = glProgram;\n\n return glProgram;\n }\n\n /** Resets ShaderSystem state, does not affect WebGL state. */\n reset(): void\n {\n this.program = null;\n this.shader = null;\n }\n\n /**\n * Disposes shader.\n * If disposing one equals with current shader, set current as null.\n * @param shader - Shader object\n */\n disposeShader(shader: Shader): void\n {\n if (this.shader === shader)\n {\n this.shader = null;\n }\n }\n\n /** Destroys this System and removes all its textures. */\n destroy(): void\n {\n this.renderer = null;\n // TODO implement destroy method for ShaderSystem\n this.destroyed = true;\n }\n}\n\nextensions.add(ShaderSystem);\n","import { extensions, ExtensionType } from '@pixi/extensions';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { IRenderer } from '../IRenderer';\nimport type { ISystem } from '../system/ISystem';\n\n/**\n * Options for the startup system.\n * @memberof PIXI\n */\nexport interface StartupSystemOptions\n{\n /**\n * Whether to log the version and type information of renderer to console.\n * @memberof PIXI.IRendererOptions\n */\n hello: boolean;\n}\n\n/**\n * A simple system responsible for initiating the renderer.\n * @memberof PIXI\n */\nexport class StartupSystem implements ISystem\n{\n /** @ignore */\n static defaultOptions: StartupSystemOptions = {\n /**\n * {@link PIXI.IRendererOptions.hello}\n * @default false\n * @memberof PIXI.settings.RENDER_OPTIONS\n */\n hello: false,\n };\n\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: [\n ExtensionType.RendererSystem,\n ExtensionType.CanvasRendererSystem\n ],\n name: 'startup',\n };\n\n readonly renderer: IRenderer;\n\n constructor(renderer: IRenderer)\n {\n this.renderer = renderer;\n }\n\n /**\n * It all starts here! This initiates every system, passing in the options for any system by name.\n * @param options - the config for the renderer and all its systems\n */\n run(options: StartupSystemOptions): void\n {\n const { renderer } = this;\n\n renderer.runners.init.emit(renderer.options);\n\n if (options.hello)\n {\n // eslint-disable-next-line no-console\n console.log(`PixiJS ${process.env.VERSION} - ${renderer.rendererLogId} - https://pixijs.com`);\n }\n\n renderer.resize(renderer.screen.width, renderer.screen.height);\n }\n\n destroy(): void\n {\n // ka pow!\n }\n}\n\nextensions.add(StartupSystem);\n","import { BLEND_MODES } from '@pixi/constants';\nimport { extensions, ExtensionType } from '@pixi/extensions';\nimport { State } from './State';\nimport { mapWebGLBlendModesToPixi } from './utils/mapWebGLBlendModesToPixi';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { IRenderingContext } from '../IRenderer';\nimport type { ISystem } from '../system/ISystem';\n\nconst BLEND = 0;\nconst OFFSET = 1;\nconst CULLING = 2;\nconst DEPTH_TEST = 3;\nconst WINDING = 4;\nconst DEPTH_MASK = 5;\n\n/**\n * System plugin to the renderer to manage WebGL state machines.\n * @memberof PIXI\n */\nexport class StateSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'state',\n };\n\n /**\n * State ID\n * @readonly\n */\n public stateId: number;\n\n /**\n * Polygon offset\n * @readonly\n */\n public polygonOffset: number;\n\n /**\n * Blend mode\n * @default PIXI.BLEND_MODES.NONE\n * @readonly\n */\n public blendMode: BLEND_MODES | -1;\n\n /** Whether current blend equation is different */\n protected _blendEq: boolean;\n\n /**\n * GL context\n * @member {WebGLRenderingContext}\n * @readonly\n */\n protected gl: IRenderingContext;\n\n protected blendModes: number[][];\n\n /**\n * Collection of calls\n * @member {Function[]}\n */\n protected readonly map: Array<(value: boolean) => void>;\n\n /**\n * Collection of check calls\n * @member {Function[]}\n */\n protected readonly checks: Array<(system: this, state: State) => void>;\n\n /**\n * Default WebGL State\n * @readonly\n */\n protected defaultState: State;\n\n constructor()\n {\n this.gl = null;\n\n this.stateId = 0;\n this.polygonOffset = 0;\n this.blendMode = BLEND_MODES.NONE;\n\n this._blendEq = false;\n\n // map functions for when we set state..\n this.map = [];\n this.map[BLEND] = this.setBlend;\n this.map[OFFSET] = this.setOffset;\n this.map[CULLING] = this.setCullFace;\n this.map[DEPTH_TEST] = this.setDepthTest;\n this.map[WINDING] = this.setFrontFace;\n this.map[DEPTH_MASK] = this.setDepthMask;\n\n this.checks = [];\n\n this.defaultState = new State();\n this.defaultState.blend = true;\n }\n\n contextChange(gl: IRenderingContext): void\n {\n this.gl = gl;\n\n this.blendModes = mapWebGLBlendModesToPixi(gl);\n\n this.set(this.defaultState);\n\n this.reset();\n }\n\n /**\n * Sets the current state\n * @param {*} state - The state to set.\n */\n set(state: State): void\n {\n state = state || this.defaultState;\n\n // TODO maybe to an object check? ( this.state === state )?\n if (this.stateId !== state.data)\n {\n let diff = this.stateId ^ state.data;\n let i = 0;\n\n // order from least to most common\n while (diff)\n {\n if (diff & 1)\n {\n // state change!\n this.map[i].call(this, !!(state.data & (1 << i)));\n }\n\n diff = diff >> 1;\n i++;\n }\n\n this.stateId = state.data;\n }\n\n // based on the above settings we check for specific modes..\n // for example if blend is active we check and set the blend modes\n // or of polygon offset is active we check the poly depth.\n for (let i = 0; i < this.checks.length; i++)\n {\n this.checks[i](this, state);\n }\n }\n\n /**\n * Sets the state, when previous state is unknown.\n * @param {*} state - The state to set\n */\n forceState(state: State): void\n {\n state = state || this.defaultState;\n for (let i = 0; i < this.map.length; i++)\n {\n this.map[i].call(this, !!(state.data & (1 << i)));\n }\n for (let i = 0; i < this.checks.length; i++)\n {\n this.checks[i](this, state);\n }\n\n this.stateId = state.data;\n }\n\n /**\n * Sets whether to enable or disable blending.\n * @param value - Turn on or off WebGl blending.\n */\n setBlend(value: boolean): void\n {\n this.updateCheck(StateSystem.checkBlendMode, value);\n\n this.gl[value ? 'enable' : 'disable'](this.gl.BLEND);\n }\n\n /**\n * Sets whether to enable or disable polygon offset fill.\n * @param value - Turn on or off webgl polygon offset testing.\n */\n setOffset(value: boolean): void\n {\n this.updateCheck(StateSystem.checkPolygonOffset, value);\n\n this.gl[value ? 'enable' : 'disable'](this.gl.POLYGON_OFFSET_FILL);\n }\n\n /**\n * Sets whether to enable or disable depth test.\n * @param value - Turn on or off webgl depth testing.\n */\n setDepthTest(value: boolean): void\n {\n this.gl[value ? 'enable' : 'disable'](this.gl.DEPTH_TEST);\n }\n\n /**\n * Sets whether to enable or disable depth mask.\n * @param value - Turn on or off webgl depth mask.\n */\n setDepthMask(value: boolean): void\n {\n this.gl.depthMask(value);\n }\n\n /**\n * Sets whether to enable or disable cull face.\n * @param {boolean} value - Turn on or off webgl cull face.\n */\n setCullFace(value: boolean): void\n {\n this.gl[value ? 'enable' : 'disable'](this.gl.CULL_FACE);\n }\n\n /**\n * Sets the gl front face.\n * @param {boolean} value - true is clockwise and false is counter-clockwise\n */\n setFrontFace(value: boolean): void\n {\n this.gl.frontFace(this.gl[value ? 'CW' : 'CCW']);\n }\n\n /**\n * Sets the blend mode.\n * @param {number} value - The blend mode to set to.\n */\n setBlendMode(value: number): void\n {\n if (value === this.blendMode)\n {\n return;\n }\n\n this.blendMode = value;\n\n const mode = this.blendModes[value];\n const gl = this.gl;\n\n if (mode.length === 2)\n {\n gl.blendFunc(mode[0], mode[1]);\n }\n else\n {\n gl.blendFuncSeparate(mode[0], mode[1], mode[2], mode[3]);\n }\n if (mode.length === 6)\n {\n this._blendEq = true;\n gl.blendEquationSeparate(mode[4], mode[5]);\n }\n else if (this._blendEq)\n {\n this._blendEq = false;\n gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_ADD);\n }\n }\n\n /**\n * Sets the polygon offset.\n * @param {number} value - the polygon offset\n * @param {number} scale - the polygon offset scale\n */\n setPolygonOffset(value: number, scale: number): void\n {\n this.gl.polygonOffset(value, scale);\n }\n\n // used\n /** Resets all the logic and disables the VAOs. */\n reset(): void\n {\n this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL, false);\n\n this.forceState(this.defaultState);\n\n this._blendEq = true;\n this.blendMode = -1;\n this.setBlendMode(0);\n }\n\n /**\n * Checks to see which updates should be checked based on which settings have been activated.\n *\n * For example, if blend is enabled then we should check the blend modes each time the state is changed\n * or if polygon fill is activated then we need to check if the polygon offset changes.\n * The idea is that we only check what we have too.\n * @param func - the checking function to add or remove\n * @param value - should the check function be added or removed.\n */\n updateCheck(func: (system: this, state: State) => void, value: boolean): void\n {\n const index = this.checks.indexOf(func);\n\n if (value && index === -1)\n {\n this.checks.push(func);\n }\n else if (!value && index !== -1)\n {\n this.checks.splice(index, 1);\n }\n }\n\n /**\n * A private little wrapper function that we call to check the blend mode.\n * @param system - the System to perform the state check on\n * @param state - the state that the blendMode will pulled from\n */\n private static checkBlendMode(system: StateSystem, state: State): void\n {\n system.setBlendMode(state.blendMode);\n }\n\n /**\n * A private little wrapper function that we call to check the polygon offset.\n * @param system - the System to perform the state check on\n * @param state - the state that the blendMode will pulled from\n */\n private static checkPolygonOffset(system: StateSystem, state: State): void\n {\n system.setPolygonOffset(1, state.polygonOffset);\n }\n\n /**\n * @ignore\n */\n destroy(): void\n {\n this.gl = null;\n }\n}\n\nextensions.add(StateSystem);\n","import { BLEND_MODES } from '@pixi/constants';\n\n/**\n * Maps gl blend combinations to WebGL.\n * @memberof PIXI\n * @function mapWebGLBlendModesToPixi\n * @private\n * @param {WebGLRenderingContext} gl - The rendering context.\n * @param {number[][]} [array=[]] - The array to output into.\n * @returns {number[][]} Mapped modes.\n */\nexport function mapWebGLBlendModesToPixi(gl: WebGLRenderingContextBase, array: number[][] = []): number[][]\n{\n // TODO - premultiply alpha would be different.\n // add a boolean for that!\n array[BLEND_MODES.NORMAL] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.ADD] = [gl.ONE, gl.ONE];\n array[BLEND_MODES.MULTIPLY] = [gl.DST_COLOR, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.SCREEN] = [gl.ONE, gl.ONE_MINUS_SRC_COLOR, gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.OVERLAY] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.DARKEN] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.LIGHTEN] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.COLOR_DODGE] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.COLOR_BURN] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.HARD_LIGHT] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.SOFT_LIGHT] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.DIFFERENCE] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.EXCLUSION] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.HUE] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.SATURATION] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.COLOR] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.LUMINOSITY] = [gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.NONE] = [0, 0];\n\n // not-premultiplied blend modes\n array[BLEND_MODES.NORMAL_NPM] = [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.ADD_NPM] = [gl.SRC_ALPHA, gl.ONE, gl.ONE, gl.ONE];\n array[BLEND_MODES.SCREEN_NPM] = [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_COLOR, gl.ONE, gl.ONE_MINUS_SRC_ALPHA];\n\n // composite operations\n array[BLEND_MODES.SRC_IN] = [gl.DST_ALPHA, gl.ZERO];\n array[BLEND_MODES.SRC_OUT] = [gl.ONE_MINUS_DST_ALPHA, gl.ZERO];\n array[BLEND_MODES.SRC_ATOP] = [gl.DST_ALPHA, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.DST_OVER] = [gl.ONE_MINUS_DST_ALPHA, gl.ONE];\n array[BLEND_MODES.DST_IN] = [gl.ZERO, gl.SRC_ALPHA];\n array[BLEND_MODES.DST_OUT] = [gl.ZERO, gl.ONE_MINUS_SRC_ALPHA];\n array[BLEND_MODES.DST_ATOP] = [gl.ONE_MINUS_DST_ALPHA, gl.SRC_ALPHA];\n array[BLEND_MODES.XOR] = [gl.ONE_MINUS_DST_ALPHA, gl.ONE_MINUS_SRC_ALPHA];\n\n // SUBTRACT from flash\n array[BLEND_MODES.SUBTRACT] = [gl.ONE, gl.ONE, gl.ONE, gl.ONE, gl.FUNC_REVERSE_SUBTRACT, gl.FUNC_ADD];\n\n return array;\n}\n","import { Runner } from '@pixi/runner';\nimport { EventEmitter } from '@pixi/utils';\n\nimport type { IRenderer } from '../IRenderer';\nimport type { ISystem, ISystemConstructor } from './ISystem';\n\ninterface ISystemConfig\n{\n runners: string[],\n systems: Record>\n priority: string[];\n}\n\n/**\n * The SystemManager is a class that provides functions for managing a set of systems\n * This is a base class, that is generic (no render code or knowledge at all)\n * @memberof PIXI\n */\nexport class SystemManager extends EventEmitter\n{\n /** a collection of runners defined by the user */\n readonly runners: {[key: string]: Runner} = {};\n\n private _systemsHash: Record = {};\n\n /**\n * Set up a system with a collection of SystemClasses and runners.\n * Systems are attached dynamically to this class when added.\n * @param config - the config for the system manager\n */\n setup(config: ISystemConfig): void\n {\n this.addRunners(...config.runners);\n\n // Remove keys that aren't available\n const priority = (config.priority ?? []).filter((key) => config.systems[key]);\n\n // Order the systems by priority\n const orderByPriority = [\n ...priority,\n ...Object.keys(config.systems)\n .filter((key) => !priority.includes(key))\n ];\n\n for (const i of orderByPriority)\n {\n this.addSystem(config.systems[i], i);\n }\n }\n\n /**\n * Create a bunch of runners based of a collection of ids\n * @param runnerIds - the runner ids to add\n */\n addRunners(...runnerIds: string[]): void\n {\n runnerIds.forEach((runnerId) =>\n {\n this.runners[runnerId] = new Runner(runnerId);\n });\n }\n\n /**\n * Add a new system to the renderer.\n * @param ClassRef - Class reference\n * @param name - Property name for system, if not specified\n * will use a static `name` property on the class itself. This\n * name will be assigned as s property on the Renderer so make\n * sure it doesn't collide with properties on Renderer.\n * @returns Return instance of renderer\n */\n addSystem(ClassRef: ISystemConstructor, name: string): this\n {\n const system = new ClassRef(this as any as R);\n\n if ((this as any)[name])\n {\n throw new Error(`Whoops! The name \"${name}\" is already in use`);\n }\n\n (this as any)[name] = system;\n\n this._systemsHash[name] = system;\n\n for (const i in this.runners)\n {\n this.runners[i].add(system);\n }\n\n /**\n * Fired after rendering finishes.\n * @event PIXI.Renderer#postrender\n */\n\n /**\n * Fired before rendering starts.\n * @event PIXI.Renderer#prerender\n */\n\n /**\n * Fired when the WebGL context is set.\n * @event PIXI.Renderer#context\n * @param {WebGLRenderingContext} gl - WebGL context.\n */\n\n return this;\n }\n\n /**\n * A function that will run a runner and call the runners function but pass in different options\n * to each system based on there name.\n *\n * E.g. If you have two systems added called `systemA` and `systemB` you could call do the following:\n *\n * ```js\n * system.emitWithCustomOptions(init, {\n * systemA: {...optionsForA},\n * systemB: {...optionsForB},\n * });\n * ```\n *\n * `init` would be called on system A passing `optionsForA` and on system B passing `optionsForB`.\n * @param runner - the runner to target\n * @param options - key value options for each system\n */\n emitWithCustomOptions(runner: Runner, options: Record): void\n {\n const systemHashKeys = Object.keys(this._systemsHash);\n\n runner.items.forEach((system) =>\n {\n // I know this does not need to be a performant function so it.. isn't!\n // its only used for init and destroy.. we can refactor if required..\n const systemName = systemHashKeys.find((systemId) => this._systemsHash[systemId] === system);\n\n system[runner.name](options[systemName]);\n });\n }\n\n /** destroy the all runners and systems. Its apps job to */\n destroy(): void\n {\n Object.values(this.runners).forEach((runner) =>\n {\n runner.destroy();\n });\n\n this._systemsHash = {};\n }\n\n // TODO implement!\n // removeSystem(ClassRef: ISystemConstructor, name: string): void\n // {\n\n // }\n}\n","import { GC_MODES } from '@pixi/constants';\nimport { extensions, ExtensionType } from '@pixi/extensions';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { Renderer } from '../Renderer';\nimport type { RenderTexture } from '../renderTexture/RenderTexture';\nimport type { ISystem } from '../system/ISystem';\nimport type { Texture } from './Texture';\n\nexport interface IUnloadableTexture\n{\n _texture: Texture | RenderTexture;\n children: IUnloadableTexture[];\n}\n\n/**\n * System plugin to the renderer to manage texture garbage collection on the GPU,\n * ensuring that it does not get clogged up with textures that are no longer being used.\n * @memberof PIXI\n */\nexport class TextureGCSystem implements ISystem\n{\n /**\n * Default garbage collection mode.\n * @static\n * @type {PIXI.GC_MODES}\n * @default PIXI.GC_MODES.AUTO\n * @see PIXI.TextureGCSystem#mode\n */\n public static defaultMode = GC_MODES.AUTO;\n\n /**\n * Default maximum idle frames before a texture is destroyed by garbage collection.\n * @static\n * @default 3600\n * @see PIXI.TextureGCSystem#maxIdle\n */\n public static defaultMaxIdle = 60 * 60;\n\n /**\n * Default frames between two garbage collections.\n * @static\n * @default 600\n * @see PIXI.TextureGCSystem#checkCountMax\n */\n public static defaultCheckCountMax = 60 * 10;\n\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'textureGC',\n };\n\n /**\n * Frame count since started.\n * @readonly\n */\n public count: number;\n\n /**\n * Frame count since last garbage collection.\n * @readonly\n */\n public checkCount: number;\n\n /**\n * Maximum idle frames before a texture is destroyed by garbage collection.\n * @see PIXI.TextureGCSystem.defaultMaxIdle\n */\n public maxIdle: number;\n\n /**\n * Frames between two garbage collections.\n * @see PIXI.TextureGCSystem.defaultCheckCountMax\n */\n public checkCountMax: number;\n\n /**\n * Current garbage collection mode.\n * @see PIXI.TextureGCSystem.defaultMode\n */\n public mode: GC_MODES;\n private renderer: Renderer;\n\n /** @param renderer - The renderer this System works for. */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n\n this.count = 0;\n this.checkCount = 0;\n this.maxIdle = TextureGCSystem.defaultMaxIdle;\n this.checkCountMax = TextureGCSystem.defaultCheckCountMax;\n this.mode = TextureGCSystem.defaultMode;\n }\n\n /**\n * Checks to see when the last time a texture was used.\n * If the texture has not been used for a specified amount of time, it will be removed from the GPU.\n */\n protected postrender(): void\n {\n if (!this.renderer.objectRenderer.renderingToScreen)\n {\n return;\n }\n\n this.count++;\n\n if (this.mode === GC_MODES.MANUAL)\n {\n return;\n }\n\n this.checkCount++;\n\n if (this.checkCount > this.checkCountMax)\n {\n this.checkCount = 0;\n\n this.run();\n }\n }\n\n /**\n * Checks to see when the last time a texture was used.\n * If the texture has not been used for a specified amount of time, it will be removed from the GPU.\n */\n run(): void\n {\n const tm = this.renderer.texture;\n const managedTextures = tm.managedTextures;\n let wasRemoved = false;\n\n for (let i = 0; i < managedTextures.length; i++)\n {\n const texture = managedTextures[i];\n\n // Only supports non generated textures at the moment!\n if (texture.resource && this.count - texture.touched > this.maxIdle)\n {\n tm.destroyTexture(texture, true);\n managedTextures[i] = null;\n wasRemoved = true;\n }\n }\n\n if (wasRemoved)\n {\n let j = 0;\n\n for (let i = 0; i < managedTextures.length; i++)\n {\n if (managedTextures[i] !== null)\n {\n managedTextures[j++] = managedTextures[i];\n }\n }\n\n managedTextures.length = j;\n }\n }\n\n /**\n * Removes all the textures within the specified displayObject and its children from the GPU.\n * @param {PIXI.DisplayObject} displayObject - the displayObject to remove the textures from.\n */\n unload(displayObject: IUnloadableTexture): void\n {\n const tm = this.renderer.texture;\n const texture = displayObject._texture as RenderTexture;\n\n // only destroy non generated textures\n if (texture && !texture.framebuffer)\n {\n tm.destroyTexture(texture);\n }\n\n for (let i = displayObject.children.length - 1; i >= 0; i--)\n {\n this.unload(displayObject.children[i]);\n }\n }\n\n destroy(): void\n {\n this.renderer = null;\n }\n}\n\nextensions.add(TextureGCSystem);\n","import { FORMATS, TYPES } from '@pixi/constants';\n\n/**\n * Internal texture for WebGL context.\n * @memberof PIXI\n */\nexport class GLTexture\n{\n /** The WebGL texture. */\n public texture: WebGLTexture;\n\n /** Width of texture that was used in texImage2D. */\n public width: number;\n\n /** Height of texture that was used in texImage2D. */\n public height: number;\n\n /** Whether mip levels has to be generated. */\n public mipmap: boolean;\n\n /** WrapMode copied from baseTexture. */\n public wrapMode: number;\n\n /** Type copied from baseTexture. */\n public type: number;\n\n /** Type copied from baseTexture. */\n public internalFormat: number;\n\n /** Type of sampler corresponding to this texture. See {@link PIXI.SAMPLER_TYPES} */\n public samplerType: number;\n\n /** Texture contents dirty flag. */\n dirtyId: number;\n\n /** Texture style dirty flag. */\n dirtyStyleId: number;\n\n constructor(texture: WebGLTexture)\n {\n this.texture = texture;\n this.width = -1;\n this.height = -1;\n this.dirtyId = -1;\n this.dirtyStyleId = -1;\n this.mipmap = false;\n this.wrapMode = 33071;\n this.type = TYPES.UNSIGNED_BYTE;\n this.internalFormat = FORMATS.RGBA;\n\n this.samplerType = 0;\n }\n}\n","import { MIPMAP_MODES, SAMPLER_TYPES, SCALE_MODES, TYPES, WRAP_MODES } from '@pixi/constants';\nimport { extensions, ExtensionType } from '@pixi/extensions';\nimport { removeItems } from '@pixi/utils';\nimport { BaseTexture } from './BaseTexture';\nimport { GLTexture } from './GLTexture';\nimport { mapInternalFormatToSamplerType } from './utils/mapInternalFormatToSamplerType';\nimport { mapTypeAndFormatToInternalFormat } from './utils/mapTypeAndFormatToInternalFormat';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { IRenderingContext } from '../IRenderer';\nimport type { Renderer } from '../Renderer';\nimport type { ISystem } from '../system/ISystem';\nimport type { Texture } from './Texture';\n\n/**\n * System plugin to the renderer to manage textures.\n * @memberof PIXI\n */\nexport class TextureSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'texture',\n };\n\n /**\n * Bound textures.\n * @readonly\n */\n public boundTextures: BaseTexture[];\n\n /**\n * List of managed textures.\n * @readonly\n */\n public managedTextures: Array;\n\n /** Whether glTexture with int/uint sampler type was uploaded. */\n protected hasIntegerTextures: boolean;\n protected CONTEXT_UID: number;\n protected gl: IRenderingContext;\n protected internalFormats: { [type: number]: { [format: number]: number } };\n protected samplerTypes: Record;\n protected webGLVersion: number;\n\n /**\n * BaseTexture value that shows that we don't know what is bound.\n * @readonly\n */\n protected unknownTexture: BaseTexture;\n\n /**\n * Did someone temper with textures state? We'll overwrite them when we need to unbind something.\n * @private\n */\n protected _unknownBoundTextures: boolean;\n\n /**\n * Current location.\n * @readonly\n */\n currentLocation: number;\n emptyTextures: {[key: number]: GLTexture};\n private renderer: Renderer;\n\n /**\n * @param renderer - The renderer this system works for.\n */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n\n // TODO set to max textures...\n this.boundTextures = [];\n this.currentLocation = -1;\n this.managedTextures = [];\n\n this._unknownBoundTextures = false;\n this.unknownTexture = new BaseTexture();\n\n this.hasIntegerTextures = false;\n }\n\n /** Sets up the renderer context and necessary buffers. */\n contextChange(): void\n {\n const gl = this.gl = this.renderer.gl;\n\n this.CONTEXT_UID = this.renderer.CONTEXT_UID;\n\n this.webGLVersion = this.renderer.context.webGLVersion;\n\n this.internalFormats = mapTypeAndFormatToInternalFormat(gl);\n this.samplerTypes = mapInternalFormatToSamplerType(gl);\n\n const maxTextures = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);\n\n this.boundTextures.length = maxTextures;\n\n for (let i = 0; i < maxTextures; i++)\n {\n this.boundTextures[i] = null;\n }\n\n // TODO move this.. to a nice make empty textures class..\n this.emptyTextures = {};\n\n const emptyTexture2D = new GLTexture(gl.createTexture());\n\n gl.bindTexture(gl.TEXTURE_2D, emptyTexture2D.texture);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array(4));\n\n this.emptyTextures[gl.TEXTURE_2D] = emptyTexture2D;\n this.emptyTextures[gl.TEXTURE_CUBE_MAP] = new GLTexture(gl.createTexture());\n\n gl.bindTexture(gl.TEXTURE_CUBE_MAP, this.emptyTextures[gl.TEXTURE_CUBE_MAP].texture);\n\n for (let i = 0; i < 6; i++)\n {\n gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n }\n\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n\n for (let i = 0; i < this.boundTextures.length; i++)\n {\n this.bind(null, i);\n }\n }\n\n /**\n * Bind a texture to a specific location\n *\n * If you want to unbind something, please use `unbind(texture)` instead of `bind(null, textureLocation)`\n * @param texture - Texture to bind\n * @param [location=0] - Location to bind at\n */\n bind(texture: Texture | BaseTexture, location = 0): void\n {\n const { gl } = this;\n\n texture = texture?.castToBaseTexture();\n\n // cannot bind partial texture\n // TODO: report a warning\n if (texture?.valid && !texture.parentTextureArray)\n {\n texture.touched = this.renderer.textureGC.count;\n\n const glTexture = texture._glTextures[this.CONTEXT_UID] || this.initTexture(texture);\n\n if (this.boundTextures[location] !== texture)\n {\n if (this.currentLocation !== location)\n {\n this.currentLocation = location;\n gl.activeTexture(gl.TEXTURE0 + location);\n }\n\n gl.bindTexture(texture.target, glTexture.texture);\n }\n\n if (glTexture.dirtyId !== texture.dirtyId)\n {\n if (this.currentLocation !== location)\n {\n this.currentLocation = location;\n gl.activeTexture(gl.TEXTURE0 + location);\n }\n this.updateTexture(texture);\n }\n else if (glTexture.dirtyStyleId !== texture.dirtyStyleId)\n {\n this.updateTextureStyle(texture);\n }\n\n this.boundTextures[location] = texture;\n }\n else\n {\n if (this.currentLocation !== location)\n {\n this.currentLocation = location;\n gl.activeTexture(gl.TEXTURE0 + location);\n }\n\n gl.bindTexture(gl.TEXTURE_2D, this.emptyTextures[gl.TEXTURE_2D].texture);\n this.boundTextures[location] = null;\n }\n }\n\n /** Resets texture location and bound textures Actual `bind(null, i)` calls will be performed at next `unbind()` call */\n reset(): void\n {\n this._unknownBoundTextures = true;\n this.hasIntegerTextures = false;\n this.currentLocation = -1;\n\n for (let i = 0; i < this.boundTextures.length; i++)\n {\n this.boundTextures[i] = this.unknownTexture;\n }\n }\n\n /**\n * Unbind a texture.\n * @param texture - Texture to bind\n */\n unbind(texture?: BaseTexture): void\n {\n const { gl, boundTextures } = this;\n\n if (this._unknownBoundTextures)\n {\n this._unknownBoundTextures = false;\n // someone changed webGL state,\n // we have to be sure that our texture does not appear in multi-texture renderer samplers\n for (let i = 0; i < boundTextures.length; i++)\n {\n if (boundTextures[i] === this.unknownTexture)\n {\n this.bind(null, i);\n }\n }\n }\n\n for (let i = 0; i < boundTextures.length; i++)\n {\n if (boundTextures[i] === texture)\n {\n if (this.currentLocation !== i)\n {\n gl.activeTexture(gl.TEXTURE0 + i);\n this.currentLocation = i;\n }\n\n gl.bindTexture(texture.target, this.emptyTextures[texture.target].texture);\n boundTextures[i] = null;\n }\n }\n }\n\n /**\n * Ensures that current boundTextures all have FLOAT sampler type,\n * see {@link PIXI.SAMPLER_TYPES} for explanation.\n * @param maxTextures - number of locations to check\n */\n ensureSamplerType(maxTextures: number): void\n {\n const { boundTextures, hasIntegerTextures, CONTEXT_UID } = this;\n\n if (!hasIntegerTextures)\n {\n return;\n }\n\n for (let i = maxTextures - 1; i >= 0; --i)\n {\n const tex = boundTextures[i];\n\n if (tex)\n {\n const glTexture = tex._glTextures[CONTEXT_UID];\n\n if (glTexture.samplerType !== SAMPLER_TYPES.FLOAT)\n {\n this.renderer.texture.unbind(tex);\n }\n }\n }\n }\n\n /**\n * Initialize a texture\n * @private\n * @param texture - Texture to initialize\n */\n initTexture(texture: BaseTexture): GLTexture\n {\n const glTexture = new GLTexture(this.gl.createTexture());\n\n // guarantee an update..\n glTexture.dirtyId = -1;\n\n texture._glTextures[this.CONTEXT_UID] = glTexture;\n\n this.managedTextures.push(texture);\n texture.on('dispose', this.destroyTexture, this);\n\n return glTexture;\n }\n\n initTextureType(texture: BaseTexture, glTexture: GLTexture): void\n {\n glTexture.internalFormat = this.internalFormats[texture.type]?.[texture.format] ?? texture.format;\n glTexture.samplerType = this.samplerTypes[glTexture.internalFormat] ?? SAMPLER_TYPES.FLOAT;\n\n if (this.webGLVersion === 2 && texture.type === TYPES.HALF_FLOAT)\n {\n // TYPES.HALF_FLOAT is WebGL1 HALF_FLOAT_OES\n // we have to convert it to WebGL HALF_FLOAT\n glTexture.type = this.gl.HALF_FLOAT;\n }\n else\n {\n glTexture.type = texture.type;\n }\n }\n\n /**\n * Update a texture\n * @private\n * @param {PIXI.BaseTexture} texture - Texture to initialize\n */\n updateTexture(texture: BaseTexture): void\n {\n const glTexture = texture._glTextures[this.CONTEXT_UID];\n\n if (!glTexture)\n {\n return;\n }\n\n const renderer = this.renderer;\n\n this.initTextureType(texture, glTexture);\n\n if (texture.resource?.upload(renderer, texture, glTexture))\n {\n // texture is uploaded, dont do anything!\n if (glTexture.samplerType !== SAMPLER_TYPES.FLOAT)\n {\n this.hasIntegerTextures = true;\n }\n }\n else\n {\n // default, renderTexture-like logic\n const width = texture.realWidth;\n const height = texture.realHeight;\n const gl = renderer.gl;\n\n if (glTexture.width !== width\n || glTexture.height !== height\n || glTexture.dirtyId < 0)\n {\n glTexture.width = width;\n glTexture.height = height;\n\n gl.texImage2D(texture.target, 0,\n glTexture.internalFormat,\n width,\n height,\n 0,\n texture.format,\n glTexture.type,\n null);\n }\n }\n\n // lets only update what changes..\n if (texture.dirtyStyleId !== glTexture.dirtyStyleId)\n {\n this.updateTextureStyle(texture);\n }\n glTexture.dirtyId = texture.dirtyId;\n }\n\n /**\n * Deletes the texture from WebGL\n * @private\n * @param texture - the texture to destroy\n * @param [skipRemove=false] - Whether to skip removing the texture from the TextureManager.\n */\n destroyTexture(texture: BaseTexture | Texture, skipRemove?: boolean): void\n {\n const { gl } = this;\n\n texture = texture.castToBaseTexture();\n\n if (texture._glTextures[this.CONTEXT_UID])\n {\n this.unbind(texture);\n\n gl.deleteTexture(texture._glTextures[this.CONTEXT_UID].texture);\n texture.off('dispose', this.destroyTexture, this);\n\n delete texture._glTextures[this.CONTEXT_UID];\n\n if (!skipRemove)\n {\n const i = this.managedTextures.indexOf(texture);\n\n if (i !== -1)\n {\n removeItems(this.managedTextures, i, 1);\n }\n }\n }\n }\n\n /**\n * Update texture style such as mipmap flag\n * @private\n * @param {PIXI.BaseTexture} texture - Texture to update\n */\n updateTextureStyle(texture: BaseTexture): void\n {\n const glTexture = texture._glTextures[this.CONTEXT_UID];\n\n if (!glTexture)\n {\n return;\n }\n\n if ((texture.mipmap === MIPMAP_MODES.POW2 || this.webGLVersion !== 2) && !texture.isPowerOfTwo)\n {\n glTexture.mipmap = false;\n }\n else\n {\n glTexture.mipmap = texture.mipmap >= 1;\n }\n\n if (this.webGLVersion !== 2 && !texture.isPowerOfTwo)\n {\n glTexture.wrapMode = WRAP_MODES.CLAMP;\n }\n else\n {\n glTexture.wrapMode = texture.wrapMode;\n }\n\n if (texture.resource?.style(this.renderer, texture, glTexture))\n {\n // style is set, dont do anything!\n }\n else\n {\n this.setStyle(texture, glTexture);\n }\n\n glTexture.dirtyStyleId = texture.dirtyStyleId;\n }\n\n /**\n * Set style for texture\n * @private\n * @param texture - Texture to update\n * @param glTexture\n */\n setStyle(texture: BaseTexture, glTexture: GLTexture): void\n {\n const gl = this.gl;\n\n if (glTexture.mipmap && texture.mipmap !== MIPMAP_MODES.ON_MANUAL)\n {\n gl.generateMipmap(texture.target);\n }\n\n gl.texParameteri(texture.target, gl.TEXTURE_WRAP_S, glTexture.wrapMode);\n gl.texParameteri(texture.target, gl.TEXTURE_WRAP_T, glTexture.wrapMode);\n\n if (glTexture.mipmap)\n {\n /* eslint-disable max-len */\n gl.texParameteri(texture.target, gl.TEXTURE_MIN_FILTER, texture.scaleMode === SCALE_MODES.LINEAR ? gl.LINEAR_MIPMAP_LINEAR : gl.NEAREST_MIPMAP_NEAREST);\n /* eslint-disable max-len */\n\n const anisotropicExt = this.renderer.context.extensions.anisotropicFiltering;\n\n if (anisotropicExt && texture.anisotropicLevel > 0 && texture.scaleMode === SCALE_MODES.LINEAR)\n {\n const level = Math.min(texture.anisotropicLevel, gl.getParameter(anisotropicExt.MAX_TEXTURE_MAX_ANISOTROPY_EXT));\n\n gl.texParameterf(texture.target, anisotropicExt.TEXTURE_MAX_ANISOTROPY_EXT, level);\n }\n }\n else\n {\n gl.texParameteri(texture.target, gl.TEXTURE_MIN_FILTER, texture.scaleMode === SCALE_MODES.LINEAR ? gl.LINEAR : gl.NEAREST);\n }\n\n gl.texParameteri(texture.target, gl.TEXTURE_MAG_FILTER, texture.scaleMode === SCALE_MODES.LINEAR ? gl.LINEAR : gl.NEAREST);\n }\n\n destroy(): void\n {\n this.renderer = null;\n }\n}\n\nextensions.add(TextureSystem);\n","import { FORMATS, TYPES } from '@pixi/constants';\n\n/**\n * Returns a lookup table that maps each type-format pair to a compatible internal format.\n * @memberof PIXI\n * @function mapTypeAndFormatToInternalFormat\n * @private\n * @param {WebGLRenderingContext} gl - The rendering context.\n * @returns Lookup table.\n */\nexport function mapTypeAndFormatToInternalFormat(gl: WebGLRenderingContextBase):\n{ [type: number]: { [format: number]: number } }\n{\n let table;\n\n if ('WebGL2RenderingContext' in globalThis && gl instanceof globalThis.WebGL2RenderingContext)\n {\n table = {\n [TYPES.UNSIGNED_BYTE]: {\n [FORMATS.RGBA]: gl.RGBA8,\n [FORMATS.RGB]: gl.RGB8,\n [FORMATS.RG]: gl.RG8,\n [FORMATS.RED]: gl.R8,\n [FORMATS.RGBA_INTEGER]: gl.RGBA8UI,\n [FORMATS.RGB_INTEGER]: gl.RGB8UI,\n [FORMATS.RG_INTEGER]: gl.RG8UI,\n [FORMATS.RED_INTEGER]: gl.R8UI,\n [FORMATS.ALPHA]: gl.ALPHA,\n [FORMATS.LUMINANCE]: gl.LUMINANCE,\n [FORMATS.LUMINANCE_ALPHA]: gl.LUMINANCE_ALPHA,\n },\n [TYPES.BYTE]: {\n [FORMATS.RGBA]: gl.RGBA8_SNORM,\n [FORMATS.RGB]: gl.RGB8_SNORM,\n [FORMATS.RG]: gl.RG8_SNORM,\n [FORMATS.RED]: gl.R8_SNORM,\n [FORMATS.RGBA_INTEGER]: gl.RGBA8I,\n [FORMATS.RGB_INTEGER]: gl.RGB8I,\n [FORMATS.RG_INTEGER]: gl.RG8I,\n [FORMATS.RED_INTEGER]: gl.R8I,\n },\n [TYPES.UNSIGNED_SHORT]: {\n [FORMATS.RGBA_INTEGER]: gl.RGBA16UI,\n [FORMATS.RGB_INTEGER]: gl.RGB16UI,\n [FORMATS.RG_INTEGER]: gl.RG16UI,\n [FORMATS.RED_INTEGER]: gl.R16UI,\n [FORMATS.DEPTH_COMPONENT]: gl.DEPTH_COMPONENT16,\n },\n [TYPES.SHORT]: {\n [FORMATS.RGBA_INTEGER]: gl.RGBA16I,\n [FORMATS.RGB_INTEGER]: gl.RGB16I,\n [FORMATS.RG_INTEGER]: gl.RG16I,\n [FORMATS.RED_INTEGER]: gl.R16I,\n },\n [TYPES.UNSIGNED_INT]: {\n [FORMATS.RGBA_INTEGER]: gl.RGBA32UI,\n [FORMATS.RGB_INTEGER]: gl.RGB32UI,\n [FORMATS.RG_INTEGER]: gl.RG32UI,\n [FORMATS.RED_INTEGER]: gl.R32UI,\n [FORMATS.DEPTH_COMPONENT]: gl.DEPTH_COMPONENT24,\n },\n [TYPES.INT]: {\n [FORMATS.RGBA_INTEGER]: gl.RGBA32I,\n [FORMATS.RGB_INTEGER]: gl.RGB32I,\n [FORMATS.RG_INTEGER]: gl.RG32I,\n [FORMATS.RED_INTEGER]: gl.R32I,\n },\n [TYPES.FLOAT]: {\n [FORMATS.RGBA]: gl.RGBA32F,\n [FORMATS.RGB]: gl.RGB32F,\n [FORMATS.RG]: gl.RG32F,\n [FORMATS.RED]: gl.R32F,\n [FORMATS.DEPTH_COMPONENT]: gl.DEPTH_COMPONENT32F,\n },\n [TYPES.HALF_FLOAT]: {\n [FORMATS.RGBA]: gl.RGBA16F,\n [FORMATS.RGB]: gl.RGB16F,\n [FORMATS.RG]: gl.RG16F,\n [FORMATS.RED]: gl.R16F,\n },\n [TYPES.UNSIGNED_SHORT_5_6_5]: {\n [FORMATS.RGB]: gl.RGB565,\n },\n [TYPES.UNSIGNED_SHORT_4_4_4_4]: {\n [FORMATS.RGBA]: gl.RGBA4,\n },\n [TYPES.UNSIGNED_SHORT_5_5_5_1]: {\n [FORMATS.RGBA]: gl.RGB5_A1,\n },\n [TYPES.UNSIGNED_INT_2_10_10_10_REV]: {\n [FORMATS.RGBA]: gl.RGB10_A2,\n [FORMATS.RGBA_INTEGER]: gl.RGB10_A2UI,\n },\n [TYPES.UNSIGNED_INT_10F_11F_11F_REV]: {\n [FORMATS.RGB]: gl.R11F_G11F_B10F,\n },\n [TYPES.UNSIGNED_INT_5_9_9_9_REV]: {\n [FORMATS.RGB]: gl.RGB9_E5,\n },\n [TYPES.UNSIGNED_INT_24_8]: {\n [FORMATS.DEPTH_STENCIL]: gl.DEPTH24_STENCIL8,\n },\n [TYPES.FLOAT_32_UNSIGNED_INT_24_8_REV]: {\n [FORMATS.DEPTH_STENCIL]: gl.DEPTH32F_STENCIL8,\n },\n };\n }\n else\n {\n table = {\n [TYPES.UNSIGNED_BYTE]: {\n [FORMATS.RGBA]: gl.RGBA,\n [FORMATS.RGB]: gl.RGB,\n [FORMATS.ALPHA]: gl.ALPHA,\n [FORMATS.LUMINANCE]: gl.LUMINANCE,\n [FORMATS.LUMINANCE_ALPHA]: gl.LUMINANCE_ALPHA,\n },\n [TYPES.UNSIGNED_SHORT_5_6_5]: {\n [FORMATS.RGB]: gl.RGB,\n },\n [TYPES.UNSIGNED_SHORT_4_4_4_4]: {\n [FORMATS.RGBA]: gl.RGBA,\n },\n [TYPES.UNSIGNED_SHORT_5_5_5_1]: {\n [FORMATS.RGBA]: gl.RGBA,\n },\n };\n }\n\n return table;\n}\n","import { SAMPLER_TYPES } from '@pixi/constants';\n\n/**\n * Returns a lookup table that maps each internal format to the compatible sampler type.\n * @memberof PIXI\n * @function mapInternalFormatToSamplerType\n * @private\n * @param {WebGLRenderingContext} gl - The rendering context.\n * @returns Lookup table.\n */\nexport function mapInternalFormatToSamplerType(gl: WebGLRenderingContextBase):\nRecord\n{\n let table;\n\n if ('WebGL2RenderingContext' in globalThis && gl instanceof globalThis.WebGL2RenderingContext)\n {\n table = {\n [gl.RGB]: SAMPLER_TYPES.FLOAT,\n [gl.RGBA]: SAMPLER_TYPES.FLOAT,\n [gl.ALPHA]: SAMPLER_TYPES.FLOAT,\n [gl.LUMINANCE]: SAMPLER_TYPES.FLOAT,\n [gl.LUMINANCE_ALPHA]: SAMPLER_TYPES.FLOAT,\n [gl.R8]: SAMPLER_TYPES.FLOAT,\n [gl.R8_SNORM]: SAMPLER_TYPES.FLOAT,\n [gl.RG8]: SAMPLER_TYPES.FLOAT,\n [gl.RG8_SNORM]: SAMPLER_TYPES.FLOAT,\n [gl.RGB8]: SAMPLER_TYPES.FLOAT,\n [gl.RGB8_SNORM]: SAMPLER_TYPES.FLOAT,\n [gl.RGB565]: SAMPLER_TYPES.FLOAT,\n [gl.RGBA4]: SAMPLER_TYPES.FLOAT,\n [gl.RGB5_A1]: SAMPLER_TYPES.FLOAT,\n [gl.RGBA8]: SAMPLER_TYPES.FLOAT,\n [gl.RGBA8_SNORM]: SAMPLER_TYPES.FLOAT,\n [gl.RGB10_A2]: SAMPLER_TYPES.FLOAT,\n [gl.RGB10_A2UI]: SAMPLER_TYPES.FLOAT,\n [gl.SRGB8]: SAMPLER_TYPES.FLOAT,\n [gl.SRGB8_ALPHA8]: SAMPLER_TYPES.FLOAT,\n [gl.R16F]: SAMPLER_TYPES.FLOAT,\n [gl.RG16F]: SAMPLER_TYPES.FLOAT,\n [gl.RGB16F]: SAMPLER_TYPES.FLOAT,\n [gl.RGBA16F]: SAMPLER_TYPES.FLOAT,\n [gl.R32F]: SAMPLER_TYPES.FLOAT,\n [gl.RG32F]: SAMPLER_TYPES.FLOAT,\n [gl.RGB32F]: SAMPLER_TYPES.FLOAT,\n [gl.RGBA32F]: SAMPLER_TYPES.FLOAT,\n [gl.R11F_G11F_B10F]: SAMPLER_TYPES.FLOAT,\n [gl.RGB9_E5]: SAMPLER_TYPES.FLOAT,\n [gl.R8I]: SAMPLER_TYPES.INT,\n [gl.R8UI]: SAMPLER_TYPES.UINT,\n [gl.R16I]: SAMPLER_TYPES.INT,\n [gl.R16UI]: SAMPLER_TYPES.UINT,\n [gl.R32I]: SAMPLER_TYPES.INT,\n [gl.R32UI]: SAMPLER_TYPES.UINT,\n [gl.RG8I]: SAMPLER_TYPES.INT,\n [gl.RG8UI]: SAMPLER_TYPES.UINT,\n [gl.RG16I]: SAMPLER_TYPES.INT,\n [gl.RG16UI]: SAMPLER_TYPES.UINT,\n [gl.RG32I]: SAMPLER_TYPES.INT,\n [gl.RG32UI]: SAMPLER_TYPES.UINT,\n [gl.RGB8I]: SAMPLER_TYPES.INT,\n [gl.RGB8UI]: SAMPLER_TYPES.UINT,\n [gl.RGB16I]: SAMPLER_TYPES.INT,\n [gl.RGB16UI]: SAMPLER_TYPES.UINT,\n [gl.RGB32I]: SAMPLER_TYPES.INT,\n [gl.RGB32UI]: SAMPLER_TYPES.UINT,\n [gl.RGBA8I]: SAMPLER_TYPES.INT,\n [gl.RGBA8UI]: SAMPLER_TYPES.UINT,\n [gl.RGBA16I]: SAMPLER_TYPES.INT,\n [gl.RGBA16UI]: SAMPLER_TYPES.UINT,\n [gl.RGBA32I]: SAMPLER_TYPES.INT,\n [gl.RGBA32UI]: SAMPLER_TYPES.UINT,\n [gl.DEPTH_COMPONENT16]: SAMPLER_TYPES.FLOAT,\n [gl.DEPTH_COMPONENT24]: SAMPLER_TYPES.FLOAT,\n [gl.DEPTH_COMPONENT32F]: SAMPLER_TYPES.FLOAT,\n [gl.DEPTH_STENCIL]: SAMPLER_TYPES.FLOAT,\n [gl.DEPTH24_STENCIL8]: SAMPLER_TYPES.FLOAT,\n [gl.DEPTH32F_STENCIL8]: SAMPLER_TYPES.FLOAT,\n };\n }\n else\n {\n table = {\n [gl.RGB]: SAMPLER_TYPES.FLOAT,\n [gl.RGBA]: SAMPLER_TYPES.FLOAT,\n [gl.ALPHA]: SAMPLER_TYPES.FLOAT,\n [gl.LUMINANCE]: SAMPLER_TYPES.FLOAT,\n [gl.LUMINANCE_ALPHA]: SAMPLER_TYPES.FLOAT,\n [gl.DEPTH_STENCIL]: SAMPLER_TYPES.FLOAT,\n };\n }\n\n return table;\n}\n","import { extensions, ExtensionType } from '@pixi/extensions';\n\nimport type { DRAW_MODES } from '@pixi/constants';\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { IRenderingContext } from '../IRenderer';\nimport type { Renderer } from '../Renderer';\nimport type { Shader } from '../shader/Shader';\nimport type { ISystem } from '../system/ISystem';\nimport type { TransformFeedback } from './TransformFeedback';\n\n/**\n * TransformFeedbackSystem provides TransformFeedback of WebGL2\n * https://developer.mozilla.org/en-US/docs/Web/API/WebGLTransformFeedback\n *\n * For example, you can use TransformFeedbackSystem to implement GPU Particle or\n * general purpose computing on GPU (aka GPGPU).\n *\n * It also manages a lifetime of GLTransformFeedback object\n * @memberof PIXI\n */\nexport class TransformFeedbackSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'transformFeedback',\n };\n\n CONTEXT_UID: number;\n gl: IRenderingContext;\n\n private renderer: Renderer;\n\n /**\n * @param renderer - The renderer this System works for.\n */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n }\n\n /** Sets up the renderer context and necessary buffers. */\n protected contextChange(): void\n {\n this.gl = this.renderer.gl;\n\n // TODO fill out...\n this.CONTEXT_UID = this.renderer.CONTEXT_UID;\n }\n\n /**\n * Bind TransformFeedback and buffers\n * @param transformFeedback - TransformFeedback to bind\n */\n bind(transformFeedback: TransformFeedback)\n {\n const { gl, CONTEXT_UID } = this;\n\n const glTransformFeedback = transformFeedback._glTransformFeedbacks[CONTEXT_UID]\n || this.createGLTransformFeedback(transformFeedback);\n\n gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, glTransformFeedback);\n }\n\n /** Unbind TransformFeedback */\n unbind()\n {\n const { gl } = this;\n\n gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, null);\n }\n\n /**\n * Begin TransformFeedback\n * @param drawMode - DrawMode for TransformFeedback\n * @param shader - A Shader used by TransformFeedback. Current bound shader will be used if not provided.\n */\n beginTransformFeedback(drawMode: DRAW_MODES, shader?: Shader)\n {\n const { gl, renderer } = this;\n\n if (shader)\n {\n renderer.shader.bind(shader);\n }\n\n gl.beginTransformFeedback(drawMode);\n }\n\n /** End TransformFeedback */\n endTransformFeedback()\n {\n const { gl } = this;\n\n gl.endTransformFeedback();\n }\n\n /**\n * Create TransformFeedback and bind buffers\n * @param tf - TransformFeedback\n * @returns WebGLTransformFeedback\n */\n protected createGLTransformFeedback(tf: TransformFeedback)\n {\n const { gl, renderer, CONTEXT_UID } = this;\n\n const glTransformFeedback = gl.createTransformFeedback();\n\n tf._glTransformFeedbacks[CONTEXT_UID] = glTransformFeedback;\n gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, glTransformFeedback);\n for (let i = 0; i < tf.buffers.length; i++)\n {\n const buffer = tf.buffers[i];\n\n if (!buffer) continue;\n\n renderer.buffer.update(buffer);\n buffer._glBuffers[CONTEXT_UID].refCount++;\n\n gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, i, buffer._glBuffers[CONTEXT_UID].buffer || null);\n }\n gl.bindTransformFeedback(gl.TRANSFORM_FEEDBACK, null);\n\n tf.disposeRunner.add(this);\n\n return glTransformFeedback;\n }\n\n /**\n * Disposes TransfromFeedback\n * @param {PIXI.TransformFeedback} tf - TransformFeedback\n * @param {boolean} [contextLost=false] - If context was lost, we suppress delete TransformFeedback\n */\n disposeTransformFeedback(tf: TransformFeedback, contextLost?: boolean): void\n {\n const glTF = tf._glTransformFeedbacks[this.CONTEXT_UID];\n const gl = this.gl;\n\n tf.disposeRunner.remove(this);\n\n const bufferSystem = this.renderer.buffer;\n\n // bufferSystem may have already been destroyed..\n // if this is the case, there is no need to destroy the geometry buffers...\n // they already have been!\n if (bufferSystem)\n {\n for (let i = 0; i < tf.buffers.length; i++)\n {\n const buffer = tf.buffers[i];\n\n if (!buffer) continue;\n\n const buf = buffer._glBuffers[this.CONTEXT_UID];\n\n // my be null as context may have changed right before the dispose is called\n if (buf)\n {\n buf.refCount--;\n if (buf.refCount === 0 && !contextLost)\n {\n bufferSystem.dispose(buffer, contextLost);\n }\n }\n }\n }\n\n if (!glTF)\n {\n return;\n }\n\n if (!contextLost)\n {\n gl.deleteTransformFeedback(glTF);\n }\n\n delete tf._glTransformFeedbacks[this.CONTEXT_UID];\n }\n\n destroy(): void\n {\n // @TODO: Destroy managed TransformFeedbacks\n this.renderer = null;\n }\n}\n\nextensions.add(TransformFeedbackSystem);\n","import { extensions, ExtensionType } from '@pixi/extensions';\nimport { Rectangle } from '@pixi/math';\nimport { settings } from '@pixi/settings';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { ICanvas } from '@pixi/settings';\nimport type { IRenderer } from '../IRenderer';\nimport type { ISystem } from '../system/ISystem';\n\n/**\n * Options for the view system.\n * @memberof PIXI\n */\nexport interface ViewSystemOptions\n{\n /**\n * The canvas to use as the view. If omitted, a new canvas will be created.\n * @memberof PIXI.IRendererOptions\n */\n view?: ICanvas;\n /**\n * The width of the renderer's view.\n * @memberof PIXI.IRendererOptions\n */\n width?: number;\n /**\n * The height of the renderer's view.\n * @memberof PIXI.IRendererOptions\n */\n height?: number;\n /**\n * The resolution / device pixel ratio of the renderer.\n * @memberof PIXI.IRendererOptions\n */\n resolution?: number;\n /**\n * Whether the CSS dimensions of the renderer's view should be resized automatically.\n * @memberof PIXI.IRendererOptions\n */\n autoDensity?: boolean;\n}\n\n/**\n * The view system manages the main canvas that is attached to the DOM.\n * This main role is to deal with how the holding the view reference and dealing with how it is resized.\n * @memberof PIXI\n */\nexport class ViewSystem implements ISystem\n{\n /** @ignore */\n static defaultOptions: ViewSystemOptions = {\n /**\n * {@link PIXI.IRendererOptions.width}\n * @default 800\n * @memberof PIXI.settings.RENDER_OPTIONS\n */\n width: 800,\n /**\n * {@link PIXI.IRendererOptions.height}\n * @default 600\n * @memberof PIXI.settings.RENDER_OPTIONS\n */\n height: 600,\n /**\n * {@link PIXI.IRendererOptions.resolution}\n * @type {number}\n * @default PIXI.settings.RESOLUTION\n * @memberof PIXI.settings.RENDER_OPTIONS\n */\n resolution: undefined,\n /**\n * {@link PIXI.IRendererOptions.autoDensity}\n * @default false\n * @memberof PIXI.settings.RENDER_OPTIONS\n */\n autoDensity: false,\n };\n\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: [\n ExtensionType.RendererSystem,\n ExtensionType.CanvasRendererSystem\n ],\n name: '_view',\n };\n\n private renderer: IRenderer;\n\n /**\n * The resolution / device pixel ratio of the renderer.\n * @member {number}\n * @default PIXI.settings.RESOLUTION\n */\n public resolution: number;\n\n /**\n * Measurements of the screen. (0, 0, screenWidth, screenHeight).\n *\n * Its safe to use as filterArea or hitArea for the whole stage.\n * @member {PIXI.Rectangle}\n */\n public screen: Rectangle;\n\n /**\n * The canvas element that everything is drawn to.\n * @member {PIXI.ICanvas}\n */\n public element: ICanvas;\n\n /**\n * Whether CSS dimensions of canvas view should be resized to screen dimensions automatically.\n * @member {boolean}\n */\n public autoDensity: boolean;\n\n constructor(renderer: IRenderer)\n {\n this.renderer = renderer;\n }\n\n /**\n * initiates the view system\n * @param {PIXI.ViewOptions} options - the options for the view\n */\n init(options: ViewSystemOptions): void\n {\n this.screen = new Rectangle(0, 0, options.width, options.height);\n\n this.element = options.view || settings.ADAPTER.createCanvas() as ICanvas;\n\n this.resolution = options.resolution || settings.RESOLUTION;\n\n this.autoDensity = !!options.autoDensity;\n }\n\n /**\n * Resizes the screen and canvas to the specified dimensions.\n * @param desiredScreenWidth - The new width of the screen.\n * @param desiredScreenHeight - The new height of the screen.\n */\n resizeView(desiredScreenWidth: number, desiredScreenHeight: number): void\n {\n this.element.width = Math.round(desiredScreenWidth * this.resolution);\n this.element.height = Math.round(desiredScreenHeight * this.resolution);\n\n const screenWidth = this.element.width / this.resolution;\n const screenHeight = this.element.height / this.resolution;\n\n this.screen.width = screenWidth;\n this.screen.height = screenHeight;\n\n if (this.autoDensity)\n {\n this.element.style.width = `${screenWidth}px`;\n this.element.style.height = `${screenHeight}px`;\n }\n\n /**\n * Fired after view has been resized.\n * @event PIXI.Renderer#resize\n * @param {number} screenWidth - The new width of the screen.\n * @param {number} screenHeight - The new height of the screen.\n */\n this.renderer.emit('resize', screenWidth, screenHeight);\n this.renderer.runners.resize.emit(this.screen.width, this.screen.height);\n }\n\n /**\n * Destroys this System and optionally removes the canvas from the dom.\n * @param {boolean} [removeView=false] - Whether to remove the canvas from the DOM.\n */\n destroy(removeView: boolean): void\n {\n // ka boom!\n if (removeView)\n {\n this.element.parentNode?.removeChild(this.element);\n }\n\n this.renderer = null;\n this.element = null;\n this.screen = null;\n }\n}\n\nextensions.add(ViewSystem);\n","import { ENV } from '@pixi/constants';\nimport { settings } from '@pixi/settings';\nimport { deprecation } from '@pixi/utils';\nimport { BatchRenderer } from './batch/BatchRenderer';\nimport { Filter } from './filters/Filter';\nimport { Program } from './shader/Program';\nimport { BackgroundSystem, ContextSystem, StartupSystem, TextureGCSystem, ViewSystem } from './systems';\nimport { BaseTexture } from './textures/BaseTexture';\n\nimport type { GC_MODES, MIPMAP_MODES, MSAA_QUALITY, PRECISION, SCALE_MODES, WRAP_MODES } from '@pixi/constants';\n\n/**\n * The maximum support for using WebGL. If a device does not\n * support WebGL version, for instance WebGL 2, it will still\n * attempt to fallback support to WebGL 1. If you want to\n * explicitly remove feature support to target a more stable\n * baseline, prefer a lower environment.\n * @static\n * @name PREFER_ENV\n * @memberof PIXI.settings\n * @type {number}\n * @default PIXI.ENV.WEBGL2\n */\nsettings.PREFER_ENV = ENV.WEBGL2;\n\n/**\n * If set to `true`, *only* Textures and BaseTexture objects stored\n * in the caches ({@link PIXI.utils.TextureCache TextureCache} and\n * {@link PIXI.utils.BaseTextureCache BaseTextureCache}) can be\n * used when calling {@link PIXI.Texture.from Texture.from} or\n * {@link PIXI.BaseTexture.from BaseTexture.from}.\n * Otherwise, these `from` calls throw an exception. Using this property\n * can be useful if you want to enforce preloading all assets with\n * {@link PIXI.Assets Loader}.\n * @static\n * @name STRICT_TEXTURE_CACHE\n * @memberof PIXI.settings\n * @type {boolean}\n * @default false\n */\nsettings.STRICT_TEXTURE_CACHE = false;\n\n/**\n * The default render options if none are supplied to {@link PIXI.Renderer}\n * or {@link PIXI.CanvasRenderer}.\n * @static\n * @name RENDER_OPTIONS\n * @memberof PIXI.settings\n * @type {PIXI.IRendererOptions}\n */\nsettings.RENDER_OPTIONS = {\n ...ContextSystem.defaultOptions,\n ...BackgroundSystem.defaultOptions,\n ...ViewSystem.defaultOptions,\n ...StartupSystem.defaultOptions,\n};\n\nObject.defineProperties(settings, {\n /**\n * @static\n * @name WRAP_MODE\n * @memberof PIXI.settings\n * @type {PIXI.WRAP_MODES}\n * @deprecated since 7.1.0\n * @see PIXI.BaseTexture.defaultOptions.wrapMode\n */\n WRAP_MODE: {\n get()\n {\n return BaseTexture.defaultOptions.wrapMode;\n },\n set(value: WRAP_MODES)\n {\n if (process.env.DEBUG)\n {\n deprecation('7.1.0', 'settings.WRAP_MODE is deprecated, use BaseTexture.defaultOptions.wrapMode');\n }\n BaseTexture.defaultOptions.wrapMode = value;\n },\n },\n\n /**\n * @static\n * @name SCALE_MODE\n * @memberof PIXI.settings\n * @type {PIXI.SCALE_MODES}\n * @deprecated since 7.1.0\n * @see PIXI.BaseTexture.defaultOptions.scaleMode\n */\n SCALE_MODE: {\n get()\n {\n return BaseTexture.defaultOptions.scaleMode;\n },\n set(value: SCALE_MODES)\n {\n if (process.env.DEBUG)\n {\n deprecation('7.1.0', 'settings.SCALE_MODE is deprecated, use BaseTexture.defaultOptions.scaleMode');\n }\n BaseTexture.defaultOptions.scaleMode = value;\n },\n },\n\n /**\n * @static\n * @name MIPMAP_TEXTURES\n * @memberof PIXI.settings\n * @type {PIXI.MIPMAP_MODES}\n * @deprecated since 7.1.0\n * @see PIXI.BaseTexture.defaultOptions.mipmap\n */\n MIPMAP_TEXTURES:\n {\n get()\n {\n return BaseTexture.defaultOptions.mipmap;\n },\n set(value: MIPMAP_MODES)\n {\n if (process.env.DEBUG)\n {\n deprecation('7.1.0', 'settings.MIPMAP_TEXTURES is deprecated, use BaseTexture.defaultOptions.mipmap');\n }\n BaseTexture.defaultOptions.mipmap = value;\n },\n // MIPMAP_MODES.POW2,\n },\n\n /**\n * @static\n * @name ANISOTROPIC_LEVEL\n * @memberof PIXI.settings\n * @type {number}\n * @deprecated since 7.1.0\n * @see PIXI.BaseTexture.defaultOptions.anisotropicLevel\n */\n ANISOTROPIC_LEVEL:\n {\n get()\n {\n return BaseTexture.defaultOptions.anisotropicLevel;\n },\n set(value: number)\n {\n if (process.env.DEBUG)\n {\n deprecation(\n '7.1.0', 'settings.ANISOTROPIC_LEVEL is deprecated, use BaseTexture.defaultOptions.anisotropicLevel');\n }\n BaseTexture.defaultOptions.anisotropicLevel = value;\n },\n\n },\n /**\n * Default filter resolution.\n * @static\n * @name FILTER_RESOLUTION\n * @memberof PIXI.settings\n * @deprecated since 7.1.0\n * @type {number|null}\n * @see PIXI.Filter.defaultResolution\n */\n FILTER_RESOLUTION: {\n get()\n {\n if (process.env.DEBUG)\n {\n deprecation('7.1.0', 'settings.FILTER_RESOLUTION is deprecated, use Filter.defaultResolution');\n }\n\n return Filter.defaultResolution;\n },\n set(value)\n {\n Filter.defaultResolution = value;\n },\n },\n\n /**\n * Default filter samples.\n * @static\n * @name FILTER_MULTISAMPLE\n * @memberof PIXI.settings\n * @deprecated since 7.1.0\n * @type {PIXI.MSAA_QUALITY}\n * @see PIXI.Filter.defaultMultisample\n */\n FILTER_MULTISAMPLE: {\n get()\n {\n if (process.env.DEBUG)\n {\n deprecation('7.1.0', 'settings.FILTER_MULTISAMPLE is deprecated, use Filter.defaultMultisample');\n }\n\n return Filter.defaultMultisample;\n },\n set(value: MSAA_QUALITY)\n {\n Filter.defaultMultisample = value;\n },\n },\n\n /**\n * The maximum textures that this device supports.\n * @static\n * @name SPRITE_MAX_TEXTURES\n * @memberof PIXI.settings\n * @deprecated since 7.1.0\n * @see PIXI.BatchRenderer.defaultMaxTextures\n * @type {number}\n */\n SPRITE_MAX_TEXTURES: {\n get()\n {\n return BatchRenderer.defaultMaxTextures;\n },\n set(value: number)\n {\n if (process.env.DEBUG)\n {\n deprecation('7.1.0', 'settings.SPRITE_MAX_TEXTURES is deprecated, use BatchRenderer.defaultMaxTextures');\n }\n BatchRenderer.defaultMaxTextures = value;\n },\n },\n\n /**\n * The default sprite batch size.\n *\n * The default aims to balance desktop and mobile devices.\n * @static\n * @name SPRITE_BATCH_SIZE\n * @memberof PIXI.settings\n * @see PIXI.BatchRenderer.defaultBatchSize\n * @deprecated since 7.1.0\n * @type {number}\n */\n SPRITE_BATCH_SIZE: {\n get()\n {\n return BatchRenderer.defaultBatchSize;\n },\n set(value: number)\n {\n if (process.env.DEBUG)\n {\n deprecation('7.1.0', 'settings.SPRITE_BATCH_SIZE is deprecated, use BatchRenderer.defaultBatchSize');\n }\n BatchRenderer.defaultBatchSize = value;\n },\n },\n\n /**\n * Can we upload the same buffer in a single frame?\n * @static\n * @name CAN_UPLOAD_SAME_BUFFER\n * @memberof PIXI.settings\n * @see PIXI.BatchRenderer.canUploadSameBuffer\n * @deprecated since 7.1.0\n * @type {boolean}\n */\n CAN_UPLOAD_SAME_BUFFER: {\n get()\n {\n return BatchRenderer.canUploadSameBuffer;\n },\n set(value: boolean)\n {\n if (process.env.DEBUG)\n {\n // eslint-disable-next-line max-len\n deprecation('7.1.0', 'settings.CAN_UPLOAD_SAME_BUFFER is deprecated, use BatchRenderer.canUploadSameBuffer');\n }\n BatchRenderer.canUploadSameBuffer = value;\n },\n },\n\n /**\n * Default Garbage Collection mode.\n * @static\n * @name GC_MODE\n * @memberof PIXI.settings\n * @type {PIXI.GC_MODES}\n * @deprecated since 7.1.0\n * @see PIXI.TextureGCSystem.defaultMode\n */\n GC_MODE: {\n get()\n {\n return TextureGCSystem.defaultMode;\n },\n set(value: GC_MODES)\n {\n if (process.env.DEBUG)\n {\n deprecation('7.1.0', 'settings.GC_MODE is deprecated, use TextureGCSystem.defaultMode');\n }\n TextureGCSystem.defaultMode = value;\n },\n },\n\n /**\n * Default Garbage Collection max idle.\n * @static\n * @name GC_MAX_IDLE\n * @memberof PIXI.settings\n * @type {number}\n * @deprecated since 7.1.0\n * @see PIXI.TextureGCSystem.defaultMaxIdle\n */\n GC_MAX_IDLE: {\n get()\n {\n return TextureGCSystem.defaultMaxIdle;\n },\n set(value: number)\n {\n if (process.env.DEBUG)\n {\n deprecation('7.1.0', 'settings.GC_MAX_IDLE is deprecated, use TextureGCSystem.defaultMaxIdle');\n }\n TextureGCSystem.defaultMaxIdle = value;\n },\n },\n\n /**\n * Default Garbage Collection maximum check count.\n * @static\n * @name GC_MAX_CHECK_COUNT\n * @memberof PIXI.settings\n * @type {number}\n * @deprecated since 7.1.0\n * @see PIXI.TextureGCSystem.defaultCheckCountMax\n */\n GC_MAX_CHECK_COUNT: {\n get()\n {\n return TextureGCSystem.defaultCheckCountMax;\n },\n set(value: number)\n {\n if (process.env.DEBUG)\n {\n deprecation('7.1.0', 'settings.GC_MAX_CHECK_COUNT is deprecated, use TextureGCSystem.defaultCheckCountMax');\n }\n TextureGCSystem.defaultCheckCountMax = value;\n },\n },\n\n /**\n * Default specify float precision in vertex shader.\n * @static\n * @name PRECISION_VERTEX\n * @memberof PIXI.settings\n * @type {PIXI.PRECISION}\n * @deprecated since 7.1.0\n * @see PIXI.Program.defaultVertexPrecision\n */\n PRECISION_VERTEX: {\n get()\n {\n return Program.defaultVertexPrecision;\n },\n set(value: PRECISION)\n {\n if (process.env.DEBUG)\n {\n deprecation('7.1.0', 'settings.PRECISION_VERTEX is deprecated, use Program.defaultVertexPrecision');\n }\n Program.defaultVertexPrecision = value;\n },\n },\n\n /**\n * Default specify float precision in fragment shader.\n * @static\n * @name PRECISION_FRAGMENT\n * @memberof PIXI.settings\n * @type {PIXI.PRECISION}\n * @deprecated since 7.1.0\n * @see PIXI.Program.defaultFragmentPrecision\n */\n PRECISION_FRAGMENT: {\n get()\n {\n return Program.defaultFragmentPrecision;\n },\n set(value: PRECISION)\n {\n if (process.env.DEBUG)\n {\n deprecation('7.1.0', 'settings.PRECISION_FRAGMENT is deprecated, use Program.defaultFragmentPrecision');\n }\n Program.defaultFragmentPrecision = value;\n },\n },\n});\n","/**\n * Represents the update priorities used by internal PIXI classes when registered with\n * the {@link PIXI.Ticker} object. Higher priority items are updated first and lower\n * priority items, such as render, should go later.\n * @static\n * @memberof PIXI\n * @enum {number}\n */\nexport enum UPDATE_PRIORITY\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * Highest priority used for interaction events in {@link PIXI.EventSystem}\n * @default 50\n */\n INTERACTION = 50,\n /**\n * High priority updating, used by {@link PIXI.AnimatedSprite}\n * @default 25\n */\n HIGH = 25,\n /**\n * Default priority for ticker events, see {@link PIXI.Ticker#add}.\n * @default 0\n */\n NORMAL = 0,\n /**\n * Low priority used for {@link PIXI.Application} rendering.\n * @default -25\n */\n LOW = -25,\n /**\n * Lowest priority used for {@link PIXI.BasePrepare} utility.\n * @default -50\n */\n UTILITY = -50,\n}\n","import type { TickerCallback } from './Ticker';\n\n/**\n * Internal class for handling the priority sorting of ticker handlers.\n * @private\n * @class\n * @memberof PIXI\n */\nexport class TickerListener\n{\n /** The current priority. */\n public priority: number;\n /** The next item in chain. */\n public next: TickerListener = null;\n /** The previous item in chain. */\n public previous: TickerListener = null;\n\n /** The handler function to execute. */\n private fn: TickerCallback;\n /** The calling to execute. */\n private context: T;\n /** If this should only execute once. */\n private once: boolean;\n /** `true` if this listener has been destroyed already. */\n private _destroyed = false;\n\n /**\n * Constructor\n * @private\n * @param fn - The listener function to be added for one update\n * @param context - The listener context\n * @param priority - The priority for emitting\n * @param once - If the handler should fire once\n */\n constructor(fn: TickerCallback, context: T = null, priority = 0, once = false)\n {\n this.fn = fn;\n this.context = context;\n this.priority = priority;\n this.once = once;\n }\n\n /**\n * Simple compare function to figure out if a function and context match.\n * @private\n * @param fn - The listener function to be added for one update\n * @param context - The listener context\n * @returns `true` if the listener match the arguments\n */\n match(fn: TickerCallback, context: any = null): boolean\n {\n return this.fn === fn && this.context === context;\n }\n\n /**\n * Emit by calling the current function.\n * @private\n * @param deltaTime - time since the last emit.\n * @returns Next ticker\n */\n emit(deltaTime: number): TickerListener\n {\n if (this.fn)\n {\n if (this.context)\n {\n this.fn.call(this.context, deltaTime);\n }\n else\n {\n (this as TickerListener).fn(deltaTime);\n }\n }\n\n const redirect = this.next;\n\n if (this.once)\n {\n this.destroy(true);\n }\n\n // Soft-destroying should remove\n // the next reference\n if (this._destroyed)\n {\n this.next = null;\n }\n\n return redirect;\n }\n\n /**\n * Connect to the list.\n * @private\n * @param previous - Input node, previous listener\n */\n connect(previous: TickerListener): void\n {\n this.previous = previous;\n if (previous.next)\n {\n previous.next.previous = this;\n }\n this.next = previous.next;\n previous.next = this;\n }\n\n /**\n * Destroy and don't use after this.\n * @private\n * @param hard - `true` to remove the `next` reference, this\n * is considered a hard destroy. Soft destroy maintains the next reference.\n * @returns The listener to redirect while emitting or removing.\n */\n destroy(hard = false): TickerListener\n {\n this._destroyed = true;\n this.fn = null;\n this.context = null;\n\n // Disconnect, hook up next and previous\n if (this.previous)\n {\n this.previous.next = this.next;\n }\n\n if (this.next)\n {\n this.next.previous = this.previous;\n }\n\n // Redirect to the next item\n const redirect = this.next;\n\n // Remove references\n this.next = hard ? null : redirect;\n this.previous = null;\n\n return redirect;\n }\n}\n","import { UPDATE_PRIORITY } from './const';\nimport { TickerListener } from './TickerListener';\n\nexport type TickerCallback = (this: T, dt: number) => any;\n\n/**\n * A Ticker class that runs an update loop that other objects listen to.\n *\n * This class is composed around listeners meant for execution on the next requested animation frame.\n * Animation frames are requested only when necessary, e.g. When the ticker is started and the emitter has listeners.\n * @class\n * @memberof PIXI\n */\nexport class Ticker\n{\n /**\n * Target frames per millisecond.\n * @static\n */\n public static targetFPMS = 0.06;\n\n /** The private shared ticker instance */\n private static _shared: Ticker;\n /** The private system ticker instance */\n private static _system: Ticker;\n\n /**\n * Whether or not this ticker should invoke the method\n * {@link PIXI.Ticker#start} automatically\n * when a listener is added.\n */\n public autoStart = false;\n /**\n * Scalar time value from last frame to this frame.\n * This value is capped by setting {@link PIXI.Ticker#minFPS}\n * and is scaled with {@link PIXI.Ticker#speed}.\n * **Note:** The cap may be exceeded by scaling.\n */\n public deltaTime = 1;\n /**\n * Scaler time elapsed in milliseconds from last frame to this frame.\n * This value is capped by setting {@link PIXI.Ticker#minFPS}\n * and is scaled with {@link PIXI.Ticker#speed}.\n * **Note:** The cap may be exceeded by scaling.\n * If the platform supports DOMHighResTimeStamp,\n * this value will have a precision of 1 µs.\n * Defaults to target frame time\n * @default 16.66\n */\n public deltaMS: number;\n /**\n * Time elapsed in milliseconds from last frame to this frame.\n * Opposed to what the scalar {@link PIXI.Ticker#deltaTime}\n * is based, this value is neither capped nor scaled.\n * If the platform supports DOMHighResTimeStamp,\n * this value will have a precision of 1 µs.\n * Defaults to target frame time\n * @default 16.66\n */\n public elapsedMS: number;\n /**\n * The last time {@link PIXI.Ticker#update} was invoked.\n * This value is also reset internally outside of invoking\n * update, but only when a new animation frame is requested.\n * If the platform supports DOMHighResTimeStamp,\n * this value will have a precision of 1 µs.\n */\n public lastTime = -1;\n /**\n * Factor of current {@link PIXI.Ticker#deltaTime}.\n * @example\n * // Scales ticker.deltaTime to what would be\n * // the equivalent of approximately 120 FPS\n * ticker.speed = 2;\n */\n public speed = 1;\n /**\n * Whether or not this ticker has been started.\n * `true` if {@link PIXI.Ticker#start} has been called.\n * `false` if {@link PIXI.Ticker#stop} has been called.\n * While `false`, this value may change to `true` in the\n * event of {@link PIXI.Ticker#autoStart} being `true`\n * and a listener is added.\n */\n public started = false;\n\n /** The first listener. All new listeners added are chained on this. */\n private _head: TickerListener;\n /** Internal current frame request ID */\n private _requestId: number = null;\n /**\n * Internal value managed by minFPS property setter and getter.\n * This is the maximum allowed milliseconds between updates.\n */\n private _maxElapsedMS = 100;\n /**\n * Internal value managed by minFPS property setter and getter.\n * This is the minimum allowed milliseconds between updates.\n */\n private _minElapsedMS = 0;\n /** If enabled, deleting is disabled.*/\n private _protected = false;\n /** The last time keyframe was executed. Maintains a relatively fixed interval with the previous value. */\n private _lastFrame = -1;\n /**\n * Internal tick method bound to ticker instance.\n * This is because in early 2015, Function.bind\n * is still 60% slower in high performance scenarios.\n * Also separating frame requests from update method\n * so listeners may be called at any time and with\n * any animation API, just invoke ticker.update(time).\n * @param time - Time since last tick.\n */\n private _tick: (time: number) => any;\n\n constructor()\n {\n this._head = new TickerListener(null, null, Infinity);\n this.deltaMS = 1 / Ticker.targetFPMS;\n this.elapsedMS = 1 / Ticker.targetFPMS;\n\n this._tick = (time: number): void =>\n {\n this._requestId = null;\n\n if (this.started)\n {\n // Invoke listeners now\n this.update(time);\n // Listener side effects may have modified ticker state.\n if (this.started && this._requestId === null && this._head.next)\n {\n this._requestId = requestAnimationFrame(this._tick);\n }\n }\n };\n }\n\n /**\n * Conditionally requests a new animation frame.\n * If a frame has not already been requested, and if the internal\n * emitter has listeners, a new frame is requested.\n * @private\n */\n private _requestIfNeeded(): void\n {\n if (this._requestId === null && this._head.next)\n {\n // ensure callbacks get correct delta\n this.lastTime = performance.now();\n this._lastFrame = this.lastTime;\n this._requestId = requestAnimationFrame(this._tick);\n }\n }\n\n /**\n * Conditionally cancels a pending animation frame.\n * @private\n */\n private _cancelIfNeeded(): void\n {\n if (this._requestId !== null)\n {\n cancelAnimationFrame(this._requestId);\n this._requestId = null;\n }\n }\n\n /**\n * Conditionally requests a new animation frame.\n * If the ticker has been started it checks if a frame has not already\n * been requested, and if the internal emitter has listeners. If these\n * conditions are met, a new frame is requested. If the ticker has not\n * been started, but autoStart is `true`, then the ticker starts now,\n * and continues with the previous conditions to request a new frame.\n * @private\n */\n private _startIfPossible(): void\n {\n if (this.started)\n {\n this._requestIfNeeded();\n }\n else if (this.autoStart)\n {\n this.start();\n }\n }\n\n /**\n * Register a handler for tick events. Calls continuously unless\n * it is removed or the ticker is stopped.\n * @param fn - The listener function to be added for updates\n * @param context - The listener context\n * @param {number} [priority=PIXI.UPDATE_PRIORITY.NORMAL] - The priority for emitting\n * @returns This instance of a ticker\n */\n add(fn: TickerCallback, context?: T, priority = UPDATE_PRIORITY.NORMAL): this\n {\n return this._addListener(new TickerListener(fn, context, priority));\n }\n\n /**\n * Add a handler for the tick event which is only execute once.\n * @param fn - The listener function to be added for one update\n * @param context - The listener context\n * @param {number} [priority=PIXI.UPDATE_PRIORITY.NORMAL] - The priority for emitting\n * @returns This instance of a ticker\n */\n addOnce(fn: TickerCallback, context?: T, priority = UPDATE_PRIORITY.NORMAL): this\n {\n return this._addListener(new TickerListener(fn, context, priority, true));\n }\n\n /**\n * Internally adds the event handler so that it can be sorted by priority.\n * Priority allows certain handler (user, AnimatedSprite, Interaction) to be run\n * before the rendering.\n * @private\n * @param listener - Current listener being added.\n * @returns This instance of a ticker\n */\n private _addListener(listener: TickerListener): this\n {\n // For attaching to head\n let current = this._head.next;\n let previous = this._head;\n\n // Add the first item\n if (!current)\n {\n listener.connect(previous);\n }\n else\n {\n // Go from highest to lowest priority\n while (current)\n {\n if (listener.priority > current.priority)\n {\n listener.connect(previous);\n break;\n }\n previous = current;\n current = current.next;\n }\n\n // Not yet connected\n if (!listener.previous)\n {\n listener.connect(previous);\n }\n }\n\n this._startIfPossible();\n\n return this;\n }\n\n /**\n * Removes any handlers matching the function and context parameters.\n * If no handlers are left after removing, then it cancels the animation frame.\n * @param fn - The listener function to be removed\n * @param context - The listener context to be removed\n * @returns This instance of a ticker\n */\n remove(fn: TickerCallback, context?: T): this\n {\n let listener = this._head.next;\n\n while (listener)\n {\n // We found a match, lets remove it\n // no break to delete all possible matches\n // incase a listener was added 2+ times\n if (listener.match(fn, context))\n {\n listener = listener.destroy();\n }\n else\n {\n listener = listener.next;\n }\n }\n\n if (!this._head.next)\n {\n this._cancelIfNeeded();\n }\n\n return this;\n }\n\n /**\n * The number of listeners on this ticker, calculated by walking through linked list\n * @readonly\n * @member {number}\n */\n get count(): number\n {\n if (!this._head)\n {\n return 0;\n }\n\n let count = 0;\n let current = this._head;\n\n while ((current = current.next))\n {\n count++;\n }\n\n return count;\n }\n\n /** Starts the ticker. If the ticker has listeners a new animation frame is requested at this point. */\n start(): void\n {\n if (!this.started)\n {\n this.started = true;\n this._requestIfNeeded();\n }\n }\n\n /** Stops the ticker. If the ticker has requested an animation frame it is canceled at this point. */\n stop(): void\n {\n if (this.started)\n {\n this.started = false;\n this._cancelIfNeeded();\n }\n }\n\n /** Destroy the ticker and don't use after this. Calling this method removes all references to internal events. */\n destroy(): void\n {\n if (!this._protected)\n {\n this.stop();\n\n let listener = this._head.next;\n\n while (listener)\n {\n listener = listener.destroy(true);\n }\n\n this._head.destroy();\n this._head = null;\n }\n }\n\n /**\n * Triggers an update. An update entails setting the\n * current {@link PIXI.Ticker#elapsedMS},\n * the current {@link PIXI.Ticker#deltaTime},\n * invoking all listeners with current deltaTime,\n * and then finally setting {@link PIXI.Ticker#lastTime}\n * with the value of currentTime that was provided.\n * This method will be called automatically by animation\n * frame callbacks if the ticker instance has been started\n * and listeners are added.\n * @param {number} [currentTime=performance.now()] - the current time of execution\n */\n update(currentTime = performance.now()): void\n {\n let elapsedMS;\n\n // If the difference in time is zero or negative, we ignore most of the work done here.\n // If there is no valid difference, then should be no reason to let anyone know about it.\n // A zero delta, is exactly that, nothing should update.\n //\n // The difference in time can be negative, and no this does not mean time traveling.\n // This can be the result of a race condition between when an animation frame is requested\n // on the current JavaScript engine event loop, and when the ticker's start method is invoked\n // (which invokes the internal _requestIfNeeded method). If a frame is requested before\n // _requestIfNeeded is invoked, then the callback for the animation frame the ticker requests,\n // can receive a time argument that can be less than the lastTime value that was set within\n // _requestIfNeeded. This difference is in microseconds, but this is enough to cause problems.\n //\n // This check covers this browser engine timing issue, as well as if consumers pass an invalid\n // currentTime value. This may happen if consumers opt-out of the autoStart, and update themselves.\n\n if (currentTime > this.lastTime)\n {\n // Save uncapped elapsedMS for measurement\n elapsedMS = this.elapsedMS = currentTime - this.lastTime;\n\n // cap the milliseconds elapsed used for deltaTime\n if (elapsedMS > this._maxElapsedMS)\n {\n elapsedMS = this._maxElapsedMS;\n }\n\n elapsedMS *= this.speed;\n\n // If not enough time has passed, exit the function.\n // Get ready for next frame by setting _lastFrame, but based on _minElapsedMS\n // adjustment to ensure a relatively stable interval.\n if (this._minElapsedMS)\n {\n const delta = currentTime - this._lastFrame | 0;\n\n if (delta < this._minElapsedMS)\n {\n return;\n }\n\n this._lastFrame = currentTime - (delta % this._minElapsedMS);\n }\n\n this.deltaMS = elapsedMS;\n this.deltaTime = this.deltaMS * Ticker.targetFPMS;\n\n // Cache a local reference, in-case ticker is destroyed\n // during the emit, we can still check for head.next\n const head = this._head;\n\n // Invoke listeners added to internal emitter\n let listener = head.next;\n\n while (listener)\n {\n listener = listener.emit(this.deltaTime);\n }\n\n if (!head.next)\n {\n this._cancelIfNeeded();\n }\n }\n else\n {\n this.deltaTime = this.deltaMS = this.elapsedMS = 0;\n }\n\n this.lastTime = currentTime;\n }\n\n /**\n * The frames per second at which this ticker is running.\n * The default is approximately 60 in most modern browsers.\n * **Note:** This does not factor in the value of\n * {@link PIXI.Ticker#speed}, which is specific\n * to scaling {@link PIXI.Ticker#deltaTime}.\n * @member {number}\n * @readonly\n */\n get FPS(): number\n {\n return 1000 / this.elapsedMS;\n }\n\n /**\n * Manages the maximum amount of milliseconds allowed to\n * elapse between invoking {@link PIXI.Ticker#update}.\n * This value is used to cap {@link PIXI.Ticker#deltaTime},\n * but does not effect the measured value of {@link PIXI.Ticker#FPS}.\n * When setting this property it is clamped to a value between\n * `0` and `Ticker.targetFPMS * 1000`.\n * @member {number}\n * @default 10\n */\n get minFPS(): number\n {\n return 1000 / this._maxElapsedMS;\n }\n\n set minFPS(fps: number)\n {\n // Minimum must be below the maxFPS\n const minFPS = Math.min(this.maxFPS, fps);\n\n // Must be at least 0, but below 1 / Ticker.targetFPMS\n const minFPMS = Math.min(Math.max(0, minFPS) / 1000, Ticker.targetFPMS);\n\n this._maxElapsedMS = 1 / minFPMS;\n }\n\n /**\n * Manages the minimum amount of milliseconds required to\n * elapse between invoking {@link PIXI.Ticker#update}.\n * This will effect the measured value of {@link PIXI.Ticker#FPS}.\n * If it is set to `0`, then there is no limit; PixiJS will render as many frames as it can.\n * Otherwise it will be at least `minFPS`\n * @member {number}\n * @default 0\n */\n get maxFPS(): number\n {\n if (this._minElapsedMS)\n {\n return Math.round(1000 / this._minElapsedMS);\n }\n\n return 0;\n }\n\n set maxFPS(fps: number)\n {\n if (fps === 0)\n {\n this._minElapsedMS = 0;\n }\n else\n {\n // Max must be at least the minFPS\n const maxFPS = Math.max(this.minFPS, fps);\n\n this._minElapsedMS = 1 / (maxFPS / 1000);\n }\n }\n\n /**\n * The shared ticker instance used by {@link PIXI.AnimatedSprite} and by\n * {@link PIXI.VideoResource} to update animation frames / video textures.\n *\n * It may also be used by {@link PIXI.Application} if created with the `sharedTicker` option property set to true.\n *\n * The property {@link PIXI.Ticker#autoStart} is set to `true` for this instance.\n * Please follow the examples for usage, including how to opt-out of auto-starting the shared ticker.\n * @example\n * import { Ticker } from 'pixi.js';\n *\n * const ticker = Ticker.shared;\n * // Set this to prevent starting this ticker when listeners are added.\n * // By default this is true only for the PIXI.Ticker.shared instance.\n * ticker.autoStart = false;\n *\n * // FYI, call this to ensure the ticker is stopped. It should be stopped\n * // if you have not attempted to render anything yet.\n * ticker.stop();\n *\n * // Call this when you are ready for a running shared ticker.\n * ticker.start();\n * @example\n * import { autoDetectRenderer, Container } from 'pixi.js';\n *\n * // You may use the shared ticker to render...\n * const renderer = autoDetectRenderer();\n * const stage = new Container();\n * document.body.appendChild(renderer.view);\n * ticker.add((time) => renderer.render(stage));\n *\n * // Or you can just update it manually.\n * ticker.autoStart = false;\n * ticker.stop();\n * const animate = (time) => {\n * ticker.update(time);\n * renderer.render(stage);\n * requestAnimationFrame(animate);\n * };\n * animate(performance.now());\n * @member {PIXI.Ticker}\n * @static\n */\n static get shared(): Ticker\n {\n if (!Ticker._shared)\n {\n const shared = Ticker._shared = new Ticker();\n\n shared.autoStart = true;\n shared._protected = true;\n }\n\n return Ticker._shared;\n }\n\n /**\n * The system ticker instance used by {@link PIXI.BasePrepare} for core timing\n * functionality that shouldn't usually need to be paused, unlike the `shared`\n * ticker which drives visual animations and rendering which may want to be paused.\n *\n * The property {@link PIXI.Ticker#autoStart} is set to `true` for this instance.\n * @member {PIXI.Ticker}\n * @static\n */\n static get system(): Ticker\n {\n if (!Ticker._system)\n {\n const system = Ticker._system = new Ticker();\n\n system.autoStart = true;\n system._protected = true;\n }\n\n return Ticker._system;\n }\n}\n","import { settings } from '@pixi/settings';\nimport { deprecation } from '@pixi/utils';\nimport { Ticker } from './Ticker';\n\nObject.defineProperties(settings, {\n /**\n * Target frames per millisecond.\n * @static\n * @name TARGET_FPMS\n * @memberof PIXI.settings\n * @type {number}\n * @deprecated since 7.1.0\n * @see PIXI.Ticker.targetFPMS\n */\n TARGET_FPMS: {\n get()\n {\n return Ticker.targetFPMS;\n },\n set(value: number)\n {\n if (process.env.DEBUG)\n {\n deprecation('7.1.0', 'settings.TARGET_FPMS is deprecated, use Ticker.targetFPMS');\n }\n\n Ticker.targetFPMS = value;\n },\n },\n});\n\nexport { settings };\n","import { extensions, ExtensionType } from '@pixi/extensions';\nimport { UPDATE_PRIORITY } from './const';\nimport { Ticker } from './Ticker';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\n\nexport interface TickerPluginOptions\n{\n /**\n * Automatically starts the rendering after the construction.\n * **Note**: Setting this parameter to `false` does NOT stop the shared ticker even if you set\n * `options.sharedTicker` to `true` in case that it is already started. Stop it by your own.\n * @memberof PIXI.IApplicationOptions\n * @default true\n */\n autoStart?: boolean;\n /**\n * Set`true` to use `Ticker.shared`, `false` to create new ticker.\n * If set to `false`, you cannot register a handler to occur before anything that runs on the shared ticker.\n * The system ticker will always run before both the shared ticker and the app ticker.\n * @memberof PIXI.IApplicationOptions\n * @default false\n */\n sharedTicker?: boolean;\n}\n\n/**\n * Middleware for for Application Ticker.\n * @class\n * @memberof PIXI\n */\nexport class TickerPlugin\n{\n /** @ignore */\n static extension: ExtensionMetadata = ExtensionType.Application;\n\n static start: () => void;\n static stop: () => void;\n static _ticker: Ticker;\n static ticker: Ticker;\n\n /**\n * Initialize the plugin with scope of application instance\n * @static\n * @private\n * @param {object} [options] - See application options\n */\n static init(options?: GlobalMixins.IApplicationOptions): void\n {\n // Set default\n options = Object.assign({\n autoStart: true,\n sharedTicker: false,\n }, options);\n\n // Create ticker setter\n Object.defineProperty(this, 'ticker',\n {\n set(ticker)\n {\n if (this._ticker)\n {\n this._ticker.remove(this.render, this);\n }\n this._ticker = ticker;\n if (ticker)\n {\n ticker.add(this.render, this, UPDATE_PRIORITY.LOW);\n }\n },\n get()\n {\n return this._ticker;\n },\n });\n\n /**\n * Convenience method for stopping the render.\n * @method\n * @memberof PIXI.Application\n * @instance\n */\n this.stop = (): void =>\n {\n this._ticker.stop();\n };\n\n /**\n * Convenience method for starting the render.\n * @method\n * @memberof PIXI.Application\n * @instance\n */\n this.start = (): void =>\n {\n this._ticker.start();\n };\n\n /**\n * Internal reference to the ticker.\n * @type {PIXI.Ticker}\n * @name _ticker\n * @memberof PIXI.Application#\n * @private\n */\n this._ticker = null;\n\n /**\n * Ticker for doing render updates.\n * @type {PIXI.Ticker}\n * @name ticker\n * @memberof PIXI.Application#\n * @default PIXI.Ticker.shared\n */\n this.ticker = options.sharedTicker ? Ticker.shared : new Ticker();\n\n // Start the rendering\n if (options.autoStart)\n {\n this.start();\n }\n }\n\n /**\n * Clean up the ticker, scoped to application.\n * @static\n * @private\n */\n static destroy(): void\n {\n if (this._ticker)\n {\n const oldTicker = this._ticker;\n\n this.ticker = null;\n oldTicker.destroy();\n }\n }\n}\n\nextensions.add(TickerPlugin);\n","import { extensions, ExtensionType } from '@pixi/extensions';\n\nimport type { ICanvas } from '@pixi/settings';\nimport type { IRenderer, IRendererOptions } from './IRenderer';\n\n/**\n * Renderer options supplied to `autoDetectRenderer`.\n * @memberof PIXI\n */\nexport interface IRendererOptionsAuto extends IRendererOptions\n{\n /**\n * Force CanvasRenderer even if WebGL is supported. Only available with **pixi.js-legacy**.\n * @default false\n */\n forceCanvas?: boolean;\n}\n\nexport interface IRendererConstructor\n{\n test(options?: Partial): boolean;\n new (options?: Partial): IRenderer;\n}\n\n/**\n * Collection of installed Renderers.\n * @ignore\n */\nconst renderers: IRendererConstructor[] = [];\n\nextensions.handleByList(ExtensionType.Renderer, renderers);\n\n/**\n * This helper function will automatically detect which renderer you should be using.\n * WebGL is the preferred renderer as it is a lot faster. If WebGL is not supported by\n * the browser then this function will return a canvas renderer.\n * @memberof PIXI\n * @function autoDetectRenderer\n * @param options - Options to use.\n */\nexport function autoDetectRenderer(options?: Partial): IRenderer\n{\n for (const RendererType of renderers)\n {\n if (RendererType.test(options))\n {\n return new RendererType(options) as IRenderer;\n }\n }\n\n throw new Error('Unable to auto-detect a suitable renderer.');\n}\n","import $defaultVertex from './default.vert';\nimport $defaultFilterVertex from './defaultFilter.vert';\n\n/**\n * Default vertex shader\n * @memberof PIXI\n * @member {string} defaultVertex\n */\n\n/**\n * Default filter vertex shader\n * @memberof PIXI\n * @member {string} defaultFilterVertex\n */\n\n// NOTE: This black magic is so that @microsoft/api-extractor does not complain! This explicitly specifies the types\n// of defaultVertex, defaultFilterVertex.\nconst defaultVertex: string = $defaultVertex;\nconst defaultFilterVertex: string = $defaultFilterVertex;\n\nexport { defaultFilterVertex, defaultVertex };\n","import { MSAA_QUALITY } from '@pixi/constants';\nimport { extensions, ExtensionType } from '@pixi/extensions';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { IRenderingContext } from '../IRenderer';\nimport type { Renderer } from '../Renderer';\nimport type { ISystem } from '../system/ISystem';\n\n/**\n * System that manages the multisample property on the WebGL renderer\n * @memberof PIXI\n */\nexport class MultisampleSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: '_multisample',\n };\n\n /**\n * The number of msaa samples of the canvas.\n * @readonly\n */\n public multisample: MSAA_QUALITY;\n\n private renderer: Renderer;\n\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n }\n\n protected contextChange(gl: IRenderingContext): void\n {\n let samples;\n\n if (this.renderer.context.webGLVersion === 1)\n {\n const framebuffer = gl.getParameter(gl.FRAMEBUFFER_BINDING);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n samples = gl.getParameter(gl.SAMPLES);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n }\n else\n {\n const framebuffer = gl.getParameter(gl.DRAW_FRAMEBUFFER_BINDING);\n\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, null);\n\n samples = gl.getParameter(gl.SAMPLES);\n\n gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, framebuffer);\n }\n\n if (samples >= MSAA_QUALITY.HIGH)\n {\n this.multisample = MSAA_QUALITY.HIGH;\n }\n else if (samples >= MSAA_QUALITY.MEDIUM)\n {\n this.multisample = MSAA_QUALITY.MEDIUM;\n }\n else if (samples >= MSAA_QUALITY.LOW)\n {\n this.multisample = MSAA_QUALITY.LOW;\n }\n else\n {\n this.multisample = MSAA_QUALITY.NONE;\n }\n }\n\n destroy(): void\n {\n // ka boom!\n }\n}\n\nextensions.add(MultisampleSystem);\n","export class GLBuffer\n{\n buffer: WebGLBuffer;\n updateID: number;\n byteLength: number;\n refCount: number;\n\n constructor(buffer?: WebGLBuffer)\n {\n this.buffer = buffer || null;\n this.updateID = -1;\n this.byteLength = -1;\n this.refCount = 0;\n }\n}\n","import { extensions, ExtensionType } from '@pixi/extensions';\nimport { GLBuffer } from './GLBuffer';\n\nimport type { BUFFER_TYPE } from '@pixi/constants';\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { IRenderingContext } from '../IRenderer';\nimport type { Renderer } from '../Renderer';\nimport type { ISystem } from '../system/ISystem';\nimport type { Buffer } from './Buffer';\n\n/**\n * System plugin to the renderer to manage buffers.\n *\n * WebGL uses Buffers as a way to store objects to the GPU.\n * This system makes working with them a lot easier.\n *\n * Buffers are used in three main places in WebGL\n * - geometry information\n * - Uniform information (via uniform buffer objects - a WebGL 2 only feature)\n * - Transform feedback information. (WebGL 2 only feature)\n *\n * This system will handle the binding of buffers to the GPU as well as uploading\n * them. With this system, you never need to work directly with GPU buffers, but instead work with\n * the PIXI.Buffer class.\n * @class\n * @memberof PIXI\n */\nexport class BufferSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'buffer',\n };\n\n CONTEXT_UID: number;\n gl: IRenderingContext;\n\n /** Cache for all buffers by id, used in case renderer gets destroyed or for profiling */\n readonly managedBuffers: {[key: number]: Buffer};\n\n /** Cache keeping track of the base bound buffer bases */\n readonly boundBufferBases: {[key: number]: Buffer};\n\n private renderer: Renderer;\n\n /**\n * @param {PIXI.Renderer} renderer - The renderer this System works for.\n */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n this.managedBuffers = {};\n this.boundBufferBases = {};\n }\n\n /**\n * @ignore\n */\n destroy(): void\n {\n this.renderer = null;\n }\n\n /** Sets up the renderer context and necessary buffers. */\n protected contextChange(): void\n {\n this.disposeAll(true);\n\n this.gl = this.renderer.gl;\n\n // TODO fill out...\n this.CONTEXT_UID = this.renderer.CONTEXT_UID;\n }\n\n /**\n * This binds specified buffer. On first run, it will create the webGL buffers for the context too\n * @param buffer - the buffer to bind to the renderer\n */\n bind(buffer: Buffer): void\n {\n const { gl, CONTEXT_UID } = this;\n\n const glBuffer = buffer._glBuffers[CONTEXT_UID] || this.createGLBuffer(buffer);\n\n gl.bindBuffer(buffer.type, glBuffer.buffer);\n }\n\n unbind(type: BUFFER_TYPE): void\n {\n const { gl } = this;\n\n gl.bindBuffer(type, null);\n }\n\n /**\n * Binds an uniform buffer to at the given index.\n *\n * A cache is used so a buffer will not be bound again if already bound.\n * @param buffer - the buffer to bind\n * @param index - the base index to bind it to.\n */\n bindBufferBase(buffer: Buffer, index: number): void\n {\n const { gl, CONTEXT_UID } = this;\n\n if (this.boundBufferBases[index] !== buffer)\n {\n const glBuffer = buffer._glBuffers[CONTEXT_UID] || this.createGLBuffer(buffer);\n\n this.boundBufferBases[index] = buffer;\n\n gl.bindBufferBase(gl.UNIFORM_BUFFER, index, glBuffer.buffer);\n }\n }\n\n /**\n * Binds a buffer whilst also binding its range.\n * This will make the buffer start from the offset supplied rather than 0 when it is read.\n * @param buffer - the buffer to bind\n * @param index - the base index to bind at, defaults to 0\n * @param offset - the offset to bind at (this is blocks of 256). 0 = 0, 1 = 256, 2 = 512 etc\n */\n bindBufferRange(buffer: Buffer, index?: number, offset?: number): void\n {\n const { gl, CONTEXT_UID } = this;\n\n offset = offset || 0;\n\n const glBuffer = buffer._glBuffers[CONTEXT_UID] || this.createGLBuffer(buffer);\n\n gl.bindBufferRange(gl.UNIFORM_BUFFER, index || 0, glBuffer.buffer, offset * 256, 256);\n }\n\n /**\n * Will ensure the data in the buffer is uploaded to the GPU.\n * @param {PIXI.Buffer} buffer - the buffer to update\n */\n update(buffer: Buffer): void\n {\n const { gl, CONTEXT_UID } = this;\n\n const glBuffer = buffer._glBuffers[CONTEXT_UID] || this.createGLBuffer(buffer);\n\n if (buffer._updateID === glBuffer.updateID)\n {\n return;\n }\n\n glBuffer.updateID = buffer._updateID;\n\n gl.bindBuffer(buffer.type, glBuffer.buffer);\n\n if (glBuffer.byteLength >= buffer.data.byteLength)\n {\n // offset is always zero for now!\n gl.bufferSubData(buffer.type, 0, buffer.data);\n }\n else\n {\n const drawType = buffer.static ? gl.STATIC_DRAW : gl.DYNAMIC_DRAW;\n\n glBuffer.byteLength = buffer.data.byteLength;\n gl.bufferData(buffer.type, buffer.data, drawType);\n }\n }\n\n /**\n * Disposes buffer\n * @param {PIXI.Buffer} buffer - buffer with data\n * @param {boolean} [contextLost=false] - If context was lost, we suppress deleteVertexArray\n */\n dispose(buffer: Buffer, contextLost?: boolean): void\n {\n if (!this.managedBuffers[buffer.id])\n {\n return;\n }\n\n delete this.managedBuffers[buffer.id];\n\n const glBuffer = buffer._glBuffers[this.CONTEXT_UID];\n const gl = this.gl;\n\n buffer.disposeRunner.remove(this);\n\n if (!glBuffer)\n {\n return;\n }\n\n if (!contextLost)\n {\n gl.deleteBuffer(glBuffer.buffer);\n }\n\n delete buffer._glBuffers[this.CONTEXT_UID];\n }\n\n /**\n * dispose all WebGL resources of all managed buffers\n * @param {boolean} [contextLost=false] - If context was lost, we suppress `gl.delete` calls\n */\n disposeAll(contextLost?: boolean): void\n {\n const all: Array = Object.keys(this.managedBuffers);\n\n for (let i = 0; i < all.length; i++)\n {\n this.dispose(this.managedBuffers[all[i]], contextLost);\n }\n }\n\n /**\n * creates and attaches a GLBuffer object tied to the current context.\n * @param buffer\n * @protected\n */\n protected createGLBuffer(buffer: Buffer): GLBuffer\n {\n const { CONTEXT_UID, gl } = this;\n\n buffer._glBuffers[CONTEXT_UID] = new GLBuffer(gl.createBuffer());\n\n this.managedBuffers[buffer.id] = buffer;\n\n buffer.disposeRunner.add(this);\n\n return buffer._glBuffers[CONTEXT_UID];\n }\n}\n\nextensions.add(BufferSystem);\n","import { extensions, ExtensionType } from '@pixi/extensions';\n\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { Matrix } from '@pixi/math';\nimport type { IRenderableObject, IRendererRenderOptions } from '../IRenderer';\nimport type { Renderer } from '../Renderer';\nimport type { RenderTexture } from '../renderTexture/RenderTexture';\nimport type { ISystem } from '../system/ISystem';\n\n/**\n * system that provides a render function that focussing on rendering Pixi Scene Graph objects\n * to either the main view or to a renderTexture. Used for Canvas `WebGL` contexts\n * @memberof PIXI\n */\nexport class ObjectRendererSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.RendererSystem,\n name: 'objectRenderer',\n };\n\n renderer: Renderer;\n\n /**\n * Flag if we are rendering to the screen vs renderTexture\n * @readonly\n * @default true\n */\n renderingToScreen: boolean;\n\n /**\n * the last object rendered by the renderer. Useful for other plugins like interaction managers\n * @readonly\n */\n lastObjectRendered: IRenderableObject;\n\n // renderers scene graph!\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n }\n\n /**\n * Renders the object to its WebGL view.\n * @param displayObject - The object to be rendered.\n * @param options - the options to be passed to the renderer\n */\n render(displayObject: IRenderableObject, options?: IRendererRenderOptions): void\n {\n const renderer = this.renderer;\n\n let renderTexture: RenderTexture;\n let clear: boolean;\n let transform: Matrix;\n let skipUpdateTransform: boolean;\n\n if (options)\n {\n renderTexture = options.renderTexture;\n clear = options.clear;\n transform = options.transform;\n skipUpdateTransform = options.skipUpdateTransform;\n }\n\n // can be handy to know!\n this.renderingToScreen = !renderTexture;\n\n renderer.runners.prerender.emit();\n renderer.emit('prerender');\n\n // apply a transform at a GPU level\n renderer.projection.transform = transform;\n\n // no point rendering if our context has been blown up!\n if (renderer.context.isLost)\n {\n return;\n }\n\n if (!renderTexture)\n {\n this.lastObjectRendered = displayObject;\n }\n\n if (!skipUpdateTransform)\n {\n // update the scene graph\n const cacheParent = displayObject.enableTempParent();\n\n displayObject.updateTransform();\n displayObject.disableTempParent(cacheParent);\n // displayObject.hitArea = //TODO add a temp hit area\n }\n\n renderer.renderTexture.bind(renderTexture);\n renderer.batch.currentRenderer.start();\n\n if (clear ?? renderer.background.clearBeforeRender)\n {\n renderer.renderTexture.clear();\n }\n\n displayObject.render(renderer);\n\n // apply transform..\n renderer.batch.currentRenderer.flush();\n\n if (renderTexture)\n {\n if (options.blit)\n {\n renderer.framebuffer.blit();\n }\n\n renderTexture.baseTexture.update();\n }\n\n renderer.runners.postrender.emit();\n\n // reset transform after render\n renderer.projection.transform = null;\n\n renderer.emit('postrender');\n }\n\n destroy(): void\n {\n // ka pow!\n this.renderer = null;\n this.lastObjectRendered = null;\n }\n}\n\nextensions.add(ObjectRendererSystem);\n","import { RENDERER_TYPE } from '@pixi/constants';\nimport { extensions, ExtensionType } from '@pixi/extensions';\nimport { Matrix } from '@pixi/math';\nimport { settings } from '@pixi/settings';\nimport { deprecation, isWebGLSupported } from '@pixi/utils';\nimport { UniformGroup } from './shader/UniformGroup';\nimport { SystemManager } from './system/SystemManager';\n\nimport type { ColorSource } from '@pixi/color';\nimport type { MSAA_QUALITY } from '@pixi/constants';\nimport type { ExtensionMetadata } from '@pixi/extensions';\nimport type { Rectangle } from '@pixi/math';\nimport type { ICanvas } from '@pixi/settings';\nimport type { BackgroundSystem } from './background/BackgroundSystem';\nimport type { BatchSystem } from './batch/BatchSystem';\nimport type { ContextSystem } from './context/ContextSystem';\nimport type { FilterSystem } from './filters/FilterSystem';\nimport type { FramebufferSystem } from './framebuffer/FramebufferSystem';\nimport type { MultisampleSystem } from './framebuffer/MultisampleSystem';\nimport type { BufferSystem } from './geometry/BufferSystem';\nimport type { GeometrySystem } from './geometry/GeometrySystem';\nimport type { IRenderableObject, IRenderer, IRendererOptions, IRendererRenderOptions, IRenderingContext } from './IRenderer';\nimport type { MaskSystem } from './mask/MaskSystem';\nimport type { ScissorSystem } from './mask/ScissorSystem';\nimport type { StencilSystem } from './mask/StencilSystem';\nimport type { IRendererPlugins, PluginSystem } from './plugin/PluginSystem';\nimport type { ProjectionSystem } from './projection/ProjectionSystem';\nimport type { ObjectRendererSystem } from './render/ObjectRendererSystem';\nimport type { GenerateTextureSystem, IGenerateTextureOptions } from './renderTexture/GenerateTextureSystem';\nimport type { RenderTexture } from './renderTexture/RenderTexture';\nimport type { RenderTextureSystem } from './renderTexture/RenderTextureSystem';\nimport type { ShaderSystem } from './shader/ShaderSystem';\nimport type { StartupSystem } from './startup/StartupSystem';\nimport type { StateSystem } from './state/StateSystem';\nimport type { TextureGCSystem } from './textures/TextureGCSystem';\nimport type { TextureSystem } from './textures/TextureSystem';\nimport type { TransformFeedbackSystem } from './transformFeedback/TransformFeedbackSystem';\nimport type { ViewSystem } from './view/ViewSystem';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface Renderer extends GlobalMixins.Renderer {}\n\n/**\n * The Renderer draws the scene and all its content onto a WebGL enabled canvas.\n *\n * This renderer should be used for browsers that support WebGL.\n *\n * This renderer works by automatically managing WebGLBatches, so no need for Sprite Batches or Sprite Clouds.\n * Don't forget to add the view to your DOM or you will not see anything!\n *\n * Renderer is composed of systems that manage specific tasks. The following systems are added by default\n * whenever you create a renderer:\n *\n * | System | Description |\n * | ------------------------------------ | ----------------------------------------------------------------------------- |\n *\n * | Generic Systems | Systems that manage functionality that all renderer types share |\n * | ------------------------------------ | ----------------------------------------------------------------------------- |\n * | {@link PIXI.ViewSystem} | This manages the main view of the renderer usually a Canvas |\n * | {@link PIXI.PluginSystem} | This manages plugins for the renderer |\n * | {@link PIXI.BackgroundSystem} | This manages the main views background color and alpha |\n * | {@link PIXI.StartupSystem} | Boots up a renderer and initiatives all the systems |\n * | {@link PIXI.EventSystem} | This manages UI events. |\n *\n * | WebGL Core Systems | Provide an optimised, easy to use API to work with WebGL |\n * | ------------------------------------ | ----------------------------------------------------------------------------- |\n * | {@link PIXI.ContextSystem} | This manages the WebGL context and extensions. |\n * | {@link PIXI.FramebufferSystem} | This manages framebuffers, which are used for offscreen rendering. |\n * | {@link PIXI.GeometrySystem} | This manages geometries & buffers, which are used to draw object meshes. |\n * | {@link PIXI.ShaderSystem} | This manages shaders, programs that run on the GPU to calculate 'em pixels. |\n * | {@link PIXI.StateSystem} | This manages the WebGL state variables like blend mode, depth testing, etc. |\n * | {@link PIXI.TextureSystem} | This manages textures and their resources on the GPU. |\n * | {@link PIXI.TextureGCSystem} | This will automatically remove textures from the GPU if they are not used. |\n * | {@link PIXI.MultisampleSystem} | This manages the multisample const on the WEbGL Renderer |\n *\n * | PixiJS High-Level Systems | Set of specific systems designed to work with PixiJS objects |\n * | ------------------------------------ | ----------------------------------------------------------------------------- |\n * | {@link PIXI.GenerateTextureSystem} | This adds the ability to generate textures from any PIXI.DisplayObject |\n * | {@link PIXI.ProjectionSystem} | This manages the `projectionMatrix`, used by shaders to get NDC coordinates. |\n * | {@link PIXI.RenderTextureSystem} | This manages render-textures, which are an abstraction over framebuffers. |\n * | {@link PIXI.MaskSystem} | This manages masking operations. |\n * | {@link PIXI.ScissorSystem} | This handles scissor masking, and is used internally by {@link PIXI.MaskSystem} |\n * | {@link PIXI.StencilSystem} | This handles stencil masking, and is used internally by {@link PIXI.MaskSystem} |\n * | {@link PIXI.FilterSystem} | This manages the filtering pipeline for post-processing effects. |\n * | {@link PIXI.BatchSystem} | This manages object renderers that defer rendering until a flush. |\n * | {@link PIXI.Prepare} | This manages uploading assets to the GPU. |\n * | {@link PIXI.Extract} | This extracts image data from display objects. |\n *\n * The breadth of the API surface provided by the renderer is contained within these systems.\n * @memberof PIXI\n */\nexport class Renderer extends SystemManager implements IRenderer\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n type: ExtensionType.Renderer,\n priority: 1,\n };\n\n /**\n * The type of the renderer. will be PIXI.RENDERER_TYPE.CANVAS\n * @member {number}\n * @see PIXI.RENDERER_TYPE\n */\n public readonly type = RENDERER_TYPE.WEBGL;\n\n /**\n * Options passed to the constructor.\n * @type {PIXI.IRendererOptions}\n */\n public readonly options: IRendererOptions;\n\n /**\n * WebGL context, set by {@link PIXI.ContextSystem this.context}.\n * @readonly\n * @member {WebGLRenderingContext}\n */\n public gl: IRenderingContext;\n\n /**\n * Global uniforms\n * Add any uniforms you want shared across your shaders.\n * the must be added before the scene is rendered for the first time\n * as we dynamically buildcode to handle all global var per shader\n *\n */\n public globalUniforms: UniformGroup;\n\n /** Unique UID assigned to the renderer's WebGL context. */\n public CONTEXT_UID: number;\n\n // systems\n\n /**\n * Mask system instance\n * @readonly\n */\n public readonly mask: MaskSystem;\n\n /**\n * Context system instance\n * @readonly\n */\n public readonly context: ContextSystem;\n\n /**\n * State system instance\n * @readonly\n */\n public readonly state: StateSystem;\n\n /**\n * Shader system instance\n * @readonly\n */\n public readonly shader: ShaderSystem;\n\n /**\n * Texture system instance\n * @readonly\n */\n public readonly texture: TextureSystem;\n\n /**\n * Buffer system instance\n * @readonly\n */\n public readonly buffer: BufferSystem;\n\n /**\n * TransformFeedback system instance\n * @readonly\n */\n public transformFeedback: TransformFeedbackSystem;\n\n /**\n * Geometry system instance\n * @readonly\n */\n public readonly geometry: GeometrySystem;\n\n /**\n * Framebuffer system instance\n * @readonly\n */\n public readonly framebuffer: FramebufferSystem;\n\n /**\n * Scissor system instance\n * @readonly\n */\n public readonly scissor: ScissorSystem;\n\n /**\n * Stencil system instance\n * @readonly\n */\n public readonly stencil: StencilSystem;\n\n /**\n * Projection system instance\n * @readonly\n */\n public readonly projection: ProjectionSystem;\n\n /**\n * Texture garbage collector system instance\n * @readonly\n */\n public readonly textureGC: TextureGCSystem;\n\n /**\n * Filter system instance\n * @readonly\n */\n public readonly filter: FilterSystem;\n\n /**\n * RenderTexture system instance\n * @readonly\n */\n public readonly renderTexture: RenderTextureSystem;\n\n /**\n * Batch system instance\n * @readonly\n */\n public readonly batch: BatchSystem;\n\n /**\n * plugin system instance\n * @readonly\n */\n public readonly _plugin: PluginSystem;\n\n /**\n * _multisample system instance\n * @readonly\n */\n public readonly _multisample: MultisampleSystem;\n\n /**\n * textureGenerator system instance\n * @readonly\n */\n public readonly textureGenerator: GenerateTextureSystem;\n\n /**\n * background system instance\n * @readonly\n */\n public readonly background: BackgroundSystem;\n\n /**\n * _view system instance\n * @readonly\n */\n public readonly _view: ViewSystem;\n\n /**\n * _render system instance\n * @readonly\n */\n public readonly objectRenderer: ObjectRendererSystem;\n\n /**\n * startup system instance\n * @readonly\n */\n public readonly startup: StartupSystem;\n\n /**\n * Create renderer if WebGL is available. Overrideable\n * by the **@pixi/canvas-renderer** package to allow fallback.\n * throws error if WebGL is not available.\n * @param options\n * @private\n */\n static test(options?: Partial): boolean\n {\n if (options?.forceCanvas)\n {\n return false;\n }\n\n return isWebGLSupported();\n }\n\n /**\n * @param {PIXI.IRendererOptions} [options] - See {@link PIXI.settings.RENDER_OPTIONS} for defaults.\n */\n constructor(options?: Partial)\n {\n super();\n\n // Add the default render options\n options = Object.assign({}, settings.RENDER_OPTIONS, options);\n\n this.gl = null;\n\n this.CONTEXT_UID = 0;\n\n this.globalUniforms = new UniformGroup({\n projectionMatrix: new Matrix(),\n }, true);\n\n const systemConfig = {\n runners: [\n 'init',\n 'destroy',\n 'contextChange',\n 'resolutionChange',\n 'reset',\n 'update',\n 'postrender',\n 'prerender',\n 'resize'\n ],\n systems: Renderer.__systems,\n priority: [\n '_view',\n 'textureGenerator',\n 'background',\n '_plugin',\n 'startup',\n // low level WebGL systems\n 'context',\n 'state',\n 'texture',\n 'buffer',\n 'geometry',\n 'framebuffer',\n 'transformFeedback',\n // high level pixi specific rendering\n 'mask',\n 'scissor',\n 'stencil',\n 'projection',\n 'textureGC',\n 'filter',\n 'renderTexture',\n 'batch',\n 'objectRenderer',\n '_multisample'\n ],\n };\n\n this.setup(systemConfig);\n\n if ('useContextAlpha' in options)\n {\n if (process.env.DEBUG)\n {\n // eslint-disable-next-line max-len\n deprecation('7.0.0', 'options.useContextAlpha is deprecated, use options.premultipliedAlpha and options.backgroundAlpha instead');\n }\n options.premultipliedAlpha = options.useContextAlpha && options.useContextAlpha !== 'notMultiplied';\n options.backgroundAlpha = options.useContextAlpha === false ? 1 : options.backgroundAlpha;\n }\n\n this._plugin.rendererPlugins = Renderer.__plugins;\n this.options = options as IRendererOptions;\n this.startup.run(this.options);\n }\n\n /**\n * Renders the object to its WebGL view.\n * @param displayObject - The object to be rendered.\n * @param {object} [options] - Object to use for render options.\n * @param {PIXI.RenderTexture} [options.renderTexture] - The render texture to render to.\n * @param {boolean} [options.clear=true] - Should the canvas be cleared before the new render.\n * @param {PIXI.Matrix} [options.transform] - A transform to apply to the render texture before rendering.\n * @param {boolean} [options.skipUpdateTransform=false] - Should we skip the update transform pass?\n */\n render(displayObject: IRenderableObject, options?: IRendererRenderOptions): void\n {\n this.objectRenderer.render(displayObject, options);\n }\n\n /**\n * Resizes the WebGL view to the specified width and height.\n * @param desiredScreenWidth - The desired width of the screen.\n * @param desiredScreenHeight - The desired height of the screen.\n */\n resize(desiredScreenWidth: number, desiredScreenHeight: number): void\n {\n this._view.resizeView(desiredScreenWidth, desiredScreenHeight);\n }\n\n /**\n * Resets the WebGL state so you can render things however you fancy!\n * @returns Returns itself.\n */\n reset(): this\n {\n this.runners.reset.emit();\n\n return this;\n }\n\n /** Clear the frame buffer. */\n clear(): void\n {\n this.renderTexture.bind();\n this.renderTexture.clear();\n }\n\n /**\n * Removes everything from the renderer (event listeners, spritebatch, etc...)\n * @param [removeView=false] - Removes the Canvas element from the DOM.\n * See: https://github.com/pixijs/pixijs/issues/2233\n */\n destroy(removeView = false): void\n {\n this.runners.destroy.items.reverse();\n\n this.emitWithCustomOptions(this.runners.destroy, {\n _view: removeView,\n });\n\n super.destroy();\n }\n\n /** Collection of plugins */\n get plugins(): IRendererPlugins\n {\n return this._plugin.plugins;\n }\n\n /** The number of msaa samples of the canvas. */\n get multisample(): MSAA_QUALITY\n {\n return this._multisample.multisample;\n }\n\n /**\n * Same as view.width, actual number of pixels in the canvas by horizontal.\n * @member {number}\n * @readonly\n * @default 800\n */\n get width(): number\n {\n return this._view.element.width;\n }\n\n /**\n * Same as view.height, actual number of pixels in the canvas by vertical.\n * @default 600\n */\n get height(): number\n {\n return this._view.element.height;\n }\n\n /** The resolution / device pixel ratio of the renderer. */\n get resolution(): number\n {\n return this._view.resolution;\n }\n set resolution(value: number)\n {\n this._view.resolution = value;\n this.runners.resolutionChange.emit(value);\n }\n\n /** Whether CSS dimensions of canvas view should be resized to screen dimensions automatically. */\n get autoDensity(): boolean\n {\n return this._view.autoDensity;\n }\n\n /** The canvas element that everything is drawn to.*/\n get view(): ICanvas\n {\n return this._view.element;\n }\n\n /**\n * Measurements of the screen. (0, 0, screenWidth, screenHeight).\n *\n * Its safe to use as filterArea or hitArea for the whole stage.\n * @member {PIXI.Rectangle}\n */\n get screen(): Rectangle\n {\n return this._view.screen;\n }\n\n /** the last object rendered by the renderer. Useful for other plugins like interaction managers */\n get lastObjectRendered(): IRenderableObject\n {\n return this.objectRenderer.lastObjectRendered;\n }\n\n /** Flag if we are rendering to the screen vs renderTexture */\n get renderingToScreen(): boolean\n {\n return this.objectRenderer.renderingToScreen;\n }\n\n /** When logging Pixi to the console, this is the name we will show */\n get rendererLogId(): string\n {\n return `WebGL ${this.context.webGLVersion}`;\n }\n\n /**\n * This sets weather the screen is totally cleared between each frame withthe background color and alpha\n * @deprecated since 7.0.0\n */\n get clearBeforeRender(): boolean\n {\n if (process.env.DEBUG)\n {\n // eslint-disable-next-line max-len\n deprecation('7.0.0', 'renderer.clearBeforeRender has been deprecated, please use renderer.background.clearBeforeRender instead.');\n }\n\n return this.background.clearBeforeRender;\n }\n\n /**\n * Pass-thru setting for the canvas' context `alpha` property. This is typically\n * not something you need to fiddle with. If you want transparency, use `backgroundAlpha`.\n * @deprecated since 7.0.0\n * @member {boolean}\n */\n get useContextAlpha(): boolean | 'notMultiplied'\n {\n if (process.env.DEBUG)\n {\n // eslint-disable-next-line max-len\n deprecation('7.0.0', 'renderer.useContextAlpha has been deprecated, please use renderer.context.premultipliedAlpha instead.');\n }\n\n return this.context.useContextAlpha;\n }\n\n /**\n * readonly drawing buffer preservation\n * we can only know this if Pixi created the context\n * @deprecated since 7.0.0\n */\n get preserveDrawingBuffer(): boolean\n {\n if (process.env.DEBUG)\n {\n // eslint-disable-next-line max-len\n deprecation('7.0.0', 'renderer.preserveDrawingBuffer has been deprecated, we cannot truly know this unless pixi created the context');\n }\n\n return this.context.preserveDrawingBuffer;\n }\n\n /**\n * The background color to fill if not transparent\n * @member {number}\n * @deprecated since 7.0.0\n */\n get backgroundColor(): ColorSource\n {\n if (process.env.DEBUG)\n {\n // eslint-disable-next-line max-len\n deprecation('7.0.0', 'renderer.backgroundColor has been deprecated, use renderer.background.color instead.');\n }\n\n return this.background.color;\n }\n\n set backgroundColor(value: ColorSource)\n {\n if (process.env.DEBUG)\n {\n deprecation('7.0.0', 'renderer.backgroundColor has been deprecated, use renderer.background.color instead.');\n }\n\n this.background.color = value;\n }\n\n /**\n * The background color alpha. Setting this to 0 will make the canvas transparent.\n * @member {number}\n * @deprecated since 7.0.0\n */\n get backgroundAlpha(): number\n {\n if (process.env.DEBUG)\n {\n // eslint-disable-next-line max-len\n deprecation('7.0.0', 'renderer.backgroundAlpha has been deprecated, use renderer.background.alpha instead.');\n }\n\n return this.background.alpha;\n }\n\n /**\n * @deprecated since 7.0.0\n */\n set backgroundAlpha(value: number)\n {\n if (process.env.DEBUG)\n {\n // eslint-disable-next-line max-len\n deprecation('7.0.0', 'renderer.backgroundAlpha has been deprecated, use renderer.background.alpha instead.');\n }\n\n this.background.alpha = value;\n }\n\n /**\n * @deprecated since 7.0.0\n */\n get powerPreference(): WebGLPowerPreference\n {\n if (process.env.DEBUG)\n {\n // eslint-disable-next-line max-len\n deprecation('7.0.0', 'renderer.powerPreference has been deprecated, we can only know this if pixi creates the context');\n }\n\n return this.context.powerPreference;\n }\n\n /**\n * Useful function that returns a texture of the display object that can then be used to create sprites\n * This can be quite useful if your displayObject is complicated and needs to be reused multiple times.\n * @param displayObject - The displayObject the object will be generated from.\n * @param {IGenerateTextureOptions} options - Generate texture options.\n * @param {PIXI.Rectangle} options.region - The region of the displayObject, that shall be rendered,\n * if no region is specified, defaults to the local bounds of the displayObject.\n * @param {number} [options.resolution] - If not given, the renderer's resolution is used.\n * @param {PIXI.MSAA_QUALITY} [options.multisample] - If not given, the renderer's multisample is used.\n * @returns A texture of the graphics object.\n */\n generateTexture(displayObject: IRenderableObject, options?: IGenerateTextureOptions): RenderTexture\n {\n return this.textureGenerator.generateTexture(displayObject, options);\n }\n\n /**\n * Collection of installed plugins. These are included by default in PIXI, but can be excluded\n * by creating a custom build. Consult the README for more information about creating custom\n * builds and excluding plugins.\n * @private\n */\n static readonly __plugins: IRendererPlugins = {};\n\n /**\n * The collection of installed systems.\n * @private\n */\n static readonly __systems: Record = {};\n}\n\n// Handle registration of extensions\nextensions.handleByMap(ExtensionType.RendererPlugin, Renderer.__plugins);\nextensions.handleByMap(ExtensionType.RendererSystem, Renderer.__systems);\nextensions.add(Renderer);\n","import { BaseTexture } from '../BaseTexture';\nimport { autoDetectResource } from './autoDetectResource';\nimport { Resource } from './Resource';\n\nimport type { ISize } from '@pixi/math';\nimport type { IAutoDetectOptions } from './autoDetectResource';\n\n/**\n * Resource that can manage several resource (items) inside.\n * All resources need to have the same pixel size.\n * Parent class for CubeResource and ArrayResource\n * @memberof PIXI\n */\nexport abstract class AbstractMultiResource extends Resource\n{\n /** Number of elements in array. */\n readonly length: number;\n\n /**\n * Collection of partial baseTextures that correspond to resources.\n * @readonly\n */\n items: Array;\n\n /**\n * Dirty IDs for each part.\n * @readonly\n */\n itemDirtyIds: Array;\n\n /**\n * Promise when loading.\n * @default null\n */\n private _load: Promise;\n\n /** Bound baseTexture, there can only be one. */\n baseTexture: BaseTexture;\n\n /**\n * @param length\n * @param options - Options to for Resource constructor\n * @param {number} [options.width] - Width of the resource\n * @param {number} [options.height] - Height of the resource\n */\n constructor(length: number, options?: ISize)\n {\n const { width, height } = options || {};\n\n super(width, height);\n\n this.items = [];\n this.itemDirtyIds = [];\n\n for (let i = 0; i < length; i++)\n {\n const partTexture = new BaseTexture();\n\n this.items.push(partTexture);\n // -2 - first run of texture array upload\n // -1 - texture item was allocated\n // >=0 - texture item uploaded , in sync with items[i].dirtyId\n this.itemDirtyIds.push(-2);\n }\n\n this.length = length;\n this._load = null;\n this.baseTexture = null;\n }\n\n /**\n * Used from ArrayResource and CubeResource constructors.\n * @param resources - Can be resources, image elements, canvas, etc. ,\n * length should be same as constructor length\n * @param options - Detect options for resources\n */\n protected initFromArray(resources: Array, options?: IAutoDetectOptions): void\n {\n for (let i = 0; i < this.length; i++)\n {\n if (!resources[i])\n {\n continue;\n }\n if (resources[i].castToBaseTexture)\n {\n this.addBaseTextureAt(resources[i].castToBaseTexture(), i);\n }\n else if (resources[i] instanceof Resource)\n {\n this.addResourceAt(resources[i], i);\n }\n else\n {\n this.addResourceAt(autoDetectResource(resources[i], options), i);\n }\n }\n }\n\n /** Destroy this BaseImageResource. */\n dispose(): void\n {\n for (let i = 0, len = this.length; i < len; i++)\n {\n this.items[i].destroy();\n }\n this.items = null;\n this.itemDirtyIds = null;\n this._load = null;\n }\n\n /**\n * Set a baseTexture by ID\n * @param baseTexture\n * @param index - Zero-based index of resource to set\n * @returns - Instance for chaining\n */\n abstract addBaseTextureAt(baseTexture: BaseTexture, index: number): this;\n\n /**\n * Set a resource by ID\n * @param resource\n * @param index - Zero-based index of resource to set\n * @returns - Instance for chaining\n */\n addResourceAt(resource: Resource, index: number): this\n {\n if (!this.items[index])\n {\n throw new Error(`Index ${index} is out of bounds`);\n }\n\n // Inherit the first resource dimensions\n if (resource.valid && !this.valid)\n {\n this.resize(resource.width, resource.height);\n }\n\n this.items[index].setResource(resource);\n\n return this;\n }\n\n /**\n * Set the parent base texture.\n * @param baseTexture\n */\n bind(baseTexture: BaseTexture): void\n {\n if (this.baseTexture !== null)\n {\n throw new Error('Only one base texture per TextureArray is allowed');\n }\n super.bind(baseTexture);\n\n for (let i = 0; i < this.length; i++)\n {\n this.items[i].parentTextureArray = baseTexture;\n this.items[i].on('update', baseTexture.update, baseTexture);\n }\n }\n\n /**\n * Unset the parent base texture.\n * @param baseTexture\n */\n unbind(baseTexture: BaseTexture): void\n {\n super.unbind(baseTexture);\n\n for (let i = 0; i < this.length; i++)\n {\n this.items[i].parentTextureArray = null;\n this.items[i].off('update', baseTexture.update, baseTexture);\n }\n }\n\n /**\n * Load all the resources simultaneously\n * @returns - When load is resolved\n */\n load(): Promise\n {\n if (this._load)\n {\n return this._load;\n }\n\n const resources = this.items.map((item) => item.resource).filter((item) => item);\n\n // TODO: also implement load part-by-part strategy\n const promises = resources.map((item) => item.load());\n\n this._load = Promise.all(promises)\n .then(() =>\n {\n const { realWidth, realHeight } = this.items[0];\n\n this.resize(realWidth, realHeight);\n this.update();\n\n return Promise.resolve(this);\n }\n );\n\n return this._load;\n }\n}\n","import { TARGETS } from '@pixi/constants';\nimport { AbstractMultiResource } from './AbstractMultiResource';\n\nimport type { ISize } from '@pixi/math';\nimport type { ArrayFixed } from '@pixi/utils';\nimport type { Renderer } from '../../Renderer';\nimport type { BaseTexture } from '../BaseTexture';\nimport type { GLTexture } from '../GLTexture';\nimport type { Resource } from './Resource';\n\n/**\n * Constructor options for CubeResource.\n * @memberof PIXI\n */\nexport interface ICubeResourceOptions extends ISize\n{\n /** Whether to auto-load resources */\n autoLoad?: boolean;\n\n /** In case BaseTextures are supplied, whether to copy them or use. */\n linkBaseTexture?: boolean;\n}\n\n/**\n * Resource for a CubeTexture which contains six resources.\n * @memberof PIXI\n */\nexport class CubeResource extends AbstractMultiResource\n{\n items: ArrayFixed;\n\n /**\n * In case BaseTextures are supplied, whether to use same resource or bind baseTexture itself.\n * @protected\n */\n linkBaseTexture: boolean;\n\n /**\n * @param {Array} [source] - Collection of URLs or resources\n * to use as the sides of the cube.\n * @param options - ImageResource options\n * @param {number} [options.width] - Width of resource\n * @param {number} [options.height] - Height of resource\n * @param {number} [options.autoLoad=true] - Whether to auto-load resources\n * @param {number} [options.linkBaseTexture=true] - In case BaseTextures are supplied,\n * whether to copy them or use\n */\n constructor(source?: ArrayFixed, options?: ICubeResourceOptions)\n {\n const { width, height, autoLoad, linkBaseTexture } = options || {};\n\n if (source && source.length !== CubeResource.SIDES)\n {\n throw new Error(`Invalid length. Got ${source.length}, expected 6`);\n }\n\n super(6, { width, height });\n\n for (let i = 0; i < CubeResource.SIDES; i++)\n {\n this.items[i].target = TARGETS.TEXTURE_CUBE_MAP_POSITIVE_X + i;\n }\n\n this.linkBaseTexture = linkBaseTexture !== false;\n\n if (source)\n {\n this.initFromArray(source, options);\n }\n\n if (autoLoad !== false)\n {\n this.load();\n }\n }\n\n /**\n * Add binding.\n * @param baseTexture - parent base texture\n */\n bind(baseTexture: BaseTexture): void\n {\n super.bind(baseTexture);\n\n baseTexture.target = TARGETS.TEXTURE_CUBE_MAP;\n }\n\n addBaseTextureAt(baseTexture: BaseTexture, index: number, linkBaseTexture?: boolean): this\n {\n if (linkBaseTexture === undefined)\n {\n linkBaseTexture = this.linkBaseTexture;\n }\n\n if (!this.items[index])\n {\n throw new Error(`Index ${index} is out of bounds`);\n }\n\n if (!this.linkBaseTexture\n || baseTexture.parentTextureArray\n || Object.keys(baseTexture._glTextures).length > 0)\n {\n // copy mode\n if (baseTexture.resource)\n {\n this.addResourceAt(baseTexture.resource, index);\n }\n else\n {\n throw new Error(`CubeResource does not support copying of renderTexture.`);\n }\n }\n else\n {\n // link mode, the difficult one!\n baseTexture.target = TARGETS.TEXTURE_CUBE_MAP_POSITIVE_X + index;\n baseTexture.parentTextureArray = this.baseTexture;\n\n this.items[index] = baseTexture;\n }\n\n if (baseTexture.valid && !this.valid)\n {\n this.resize(baseTexture.realWidth, baseTexture.realHeight);\n }\n\n this.items[index] = baseTexture;\n\n return this;\n }\n\n /**\n * Upload the resource\n * @param renderer\n * @param _baseTexture\n * @param glTexture\n * @returns {boolean} true is success\n */\n upload(renderer: Renderer, _baseTexture: BaseTexture, glTexture: GLTexture): boolean\n {\n const dirty = this.itemDirtyIds;\n\n for (let i = 0; i < CubeResource.SIDES; i++)\n {\n const side = this.items[i];\n\n if (dirty[i] < side.dirtyId || glTexture.dirtyId < _baseTexture.dirtyId)\n {\n if (side.valid && side.resource)\n {\n side.resource.upload(renderer, side, glTexture);\n dirty[i] = side.dirtyId;\n }\n else if (dirty[i] < -1)\n {\n // either item is not valid yet, either its a renderTexture\n // allocate the memory\n renderer.gl.texImage2D(side.target, 0,\n glTexture.internalFormat,\n _baseTexture.realWidth,\n _baseTexture.realHeight,\n 0,\n _baseTexture.format,\n glTexture.type,\n null);\n dirty[i] = -1;\n }\n }\n }\n\n return true;\n }\n\n /** Number of texture sides to store for CubeResources. */\n static SIDES = 6;\n\n /**\n * Used to auto-detect the type of resource.\n * @param {*} source - The source object\n * @returns {boolean} `true` if source is an array of 6 elements\n */\n static test(source: unknown): source is ArrayFixed\n {\n return Array.isArray(source) && source.length === CubeResource.SIDES;\n }\n}\n","import { ALPHA_MODES } from '@pixi/constants';\nimport { settings } from '@pixi/settings';\nimport { BaseImageResource } from './BaseImageResource';\n\nimport type { ICanvas } from '@pixi/settings';\nimport type { Renderer } from '../../Renderer';\nimport type { BaseTexture } from '../BaseTexture';\nimport type { GLTexture } from '../GLTexture';\n\n/**\n * Options for ImageBitmapResource.\n * @memberof PIXI\n */\nexport interface IImageBitmapResourceOptions\n{\n /** Start loading process automatically when constructed. */\n autoLoad?: boolean;\n\n /** Load image using cross origin. */\n crossOrigin?: boolean;\n\n /** Alpha mode used when creating the ImageBitmap. */\n alphaMode?: ALPHA_MODES;\n\n /**\n * Whether the underlying ImageBitmap is owned by the {@link PIXI.ImageBitmapResource}. When set to `true`,\n * the underlying ImageBitmap will be disposed automatically when disposing {@link PIXI.ImageBitmapResource}.\n * If this option is not set, whether it owns the underlying ImageBitmap is determained by the type of `source`\n * used when constructing {@link PIXI.ImageBitmapResource}:\n * - When `source` is `ImageBitmap`, the underlying ImageBitmap is not owned by default.\n * - When `source` is `string` (a URL), the underlying ImageBitmap is owned by default.\n * @see PIXI.ImageBitmapResource.ownsImageBitmap\n */\n ownsImageBitmap?: boolean;\n}\n\n/**\n * Resource type for ImageBitmap.\n * @memberof PIXI\n */\nexport class ImageBitmapResource extends BaseImageResource\n{\n /** URL of the image source. */\n url: string | null;\n\n /**\n * Load image using cross origin.\n * @default false\n */\n crossOrigin: boolean;\n\n /**\n * Controls texture alphaMode field\n * Copies from options\n * Default is `null`, copies option from baseTexture\n * @readonly\n */\n alphaMode: ALPHA_MODES | null;\n\n /**\n * Whether the underlying ImageBitmap is owned by the ImageBitmapResource.\n * @see PIXI.IImageBitmapResourceOptions.ownsImageBitmap\n */\n private ownsImageBitmap: boolean;\n\n /**\n * Promise when loading.\n * @default null\n */\n private _load: Promise;\n\n /**\n * @param source - ImageBitmap or URL to use.\n * @param options - Options to use.\n */\n constructor(source: ImageBitmap | string, options?: IImageBitmapResourceOptions)\n {\n options = options || {};\n\n let baseSource;\n let url;\n let ownsImageBitmap;\n\n if (typeof source === 'string')\n {\n baseSource = ImageBitmapResource.EMPTY;\n url = source;\n ownsImageBitmap = true;\n }\n else\n {\n baseSource = source;\n url = null;\n ownsImageBitmap = false;\n }\n // Using super() in if() can cause transpilation problems in some cases, so take it out of if().\n // See https://github.com/pixijs/pixijs/pull/9093 for details.\n super(baseSource);\n this.url = url;\n\n this.crossOrigin = options.crossOrigin ?? true;\n this.alphaMode = typeof options.alphaMode === 'number' ? options.alphaMode : null;\n this.ownsImageBitmap = options.ownsImageBitmap ?? ownsImageBitmap;\n\n this._load = null;\n\n if (options.autoLoad !== false)\n {\n this.load();\n }\n }\n\n load(): Promise\n {\n if (this._load)\n {\n return this._load;\n }\n\n this._load = new Promise(async (resolve, reject) =>\n {\n if (this.url === null)\n {\n resolve(this);\n\n return;\n }\n\n try\n {\n const response = await settings.ADAPTER.fetch(this.url, {\n mode: this.crossOrigin ? 'cors' : 'no-cors'\n });\n\n if (this.destroyed) return;\n\n const imageBlob = await response.blob();\n\n if (this.destroyed) return;\n\n const imageBitmap = await createImageBitmap(imageBlob, {\n premultiplyAlpha: this.alphaMode === null || this.alphaMode === ALPHA_MODES.UNPACK\n ? 'premultiply' : 'none',\n });\n\n if (this.destroyed)\n {\n imageBitmap.close();\n\n return;\n }\n\n this.source = imageBitmap;\n this.update();\n\n resolve(this);\n }\n catch (e)\n {\n if (this.destroyed) return;\n\n reject(e);\n this.onError.emit(e);\n }\n });\n\n return this._load;\n }\n\n /**\n * Upload the image bitmap resource to GPU.\n * @param renderer - Renderer to upload to\n * @param baseTexture - BaseTexture for this resource\n * @param glTexture - GLTexture to use\n * @returns {boolean} true is success\n */\n override upload(renderer: Renderer, baseTexture: BaseTexture, glTexture: GLTexture): boolean\n {\n if (!(this.source instanceof ImageBitmap))\n {\n this.load();\n\n return false;\n }\n\n if (typeof this.alphaMode === 'number')\n {\n baseTexture.alphaMode = this.alphaMode;\n }\n\n return super.upload(renderer, baseTexture, glTexture);\n }\n\n /** Destroys this resource. */\n override dispose(): void\n {\n if (this.ownsImageBitmap && this.source instanceof ImageBitmap)\n {\n this.source.close();\n }\n\n super.dispose();\n\n this._load = null;\n }\n\n /**\n * Used to auto-detect the type of resource.\n * @param {*} source - The source object\n * @returns {boolean} `true` if current environment support ImageBitmap, and source is string or ImageBitmap\n */\n static override test(source: unknown): source is string | ImageBitmap\n {\n return !!globalThis.createImageBitmap && typeof ImageBitmap !== 'undefined'\n && (typeof source === 'string' || source instanceof ImageBitmap);\n }\n\n /**\n * Cached empty placeholder canvas.\n * @see EMPTY\n */\n private static _EMPTY: ICanvas;\n\n /**\n * ImageBitmap cannot be created synchronously, so a empty placeholder canvas is needed when loading from URLs.\n * Only for internal usage.\n * @returns The cached placeholder canvas.\n */\n private static get EMPTY(): ICanvas\n {\n ImageBitmapResource._EMPTY = ImageBitmapResource._EMPTY ?? settings.ADAPTER.createCanvas(0, 0);\n\n return ImageBitmapResource._EMPTY;\n }\n}\n","import { settings } from '@pixi/settings';\nimport { uid } from '@pixi/utils';\nimport { BaseImageResource } from './BaseImageResource';\n\nimport type { ISize } from '@pixi/math';\nimport type { ICanvas } from '@pixi/settings';\n\nexport interface ISVGResourceOptions\n{\n source?: string;\n scale?: number;\n width?: number;\n height?: number;\n autoLoad?: boolean;\n crossorigin?: boolean | string;\n}\n/**\n * Resource type for SVG elements and graphics.\n * @memberof PIXI\n */\nexport class SVGResource extends BaseImageResource\n{\n /** Base64 encoded SVG element or URL for SVG file. */\n public readonly svg: string;\n\n /** The source scale to apply when rasterizing on load. */\n public readonly scale: number;\n\n /** A width override for rasterization on load. */\n public readonly _overrideWidth: number;\n\n /** A height override for rasterization on load. */\n public readonly _overrideHeight: number;\n\n /** Call when completely loaded. */\n private _resolve: () => void;\n\n /** Promise when loading */\n private _load: Promise;\n\n /** Cross origin value to use */\n private _crossorigin?: boolean | string;\n\n /**\n * @param sourceBase64 - Base64 encoded SVG element or URL for SVG file.\n * @param {object} [options] - Options to use\n * @param {number} [options.scale=1] - Scale to apply to SVG. Overridden by...\n * @param {number} [options.width] - Rasterize SVG this wide. Aspect ratio preserved if height not specified.\n * @param {number} [options.height] - Rasterize SVG this high. Aspect ratio preserved if width not specified.\n * @param {boolean} [options.autoLoad=true] - Start loading right away.\n */\n constructor(sourceBase64: string, options?: ISVGResourceOptions)\n {\n options = options || {};\n\n super(settings.ADAPTER.createCanvas());\n this._width = 0;\n this._height = 0;\n\n this.svg = sourceBase64;\n this.scale = options.scale || 1;\n this._overrideWidth = options.width;\n this._overrideHeight = options.height;\n\n this._resolve = null;\n this._crossorigin = options.crossorigin;\n this._load = null;\n\n if (options.autoLoad !== false)\n {\n this.load();\n }\n }\n\n load(): Promise\n {\n if (this._load)\n {\n return this._load;\n }\n\n this._load = new Promise((resolve): void =>\n {\n // Save this until after load is finished\n this._resolve = (): void =>\n {\n this.update();\n resolve(this);\n };\n\n // Convert SVG inline string to data-uri\n if (SVGResource.SVG_XML.test(this.svg.trim()))\n {\n if (!btoa)\n {\n throw new Error('Your browser doesn\\'t support base64 conversions.');\n }\n (this as any).svg = `data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(this.svg)))}`;\n }\n\n this._loadSvg();\n });\n\n return this._load;\n }\n\n /** Loads an SVG image from `imageUrl` or `data URL`. */\n private _loadSvg(): void\n {\n const tempImage = new Image();\n\n BaseImageResource.crossOrigin(tempImage, this.svg, this._crossorigin);\n tempImage.src = this.svg;\n\n tempImage.onerror = (event): void =>\n {\n if (!this._resolve)\n {\n return;\n }\n\n tempImage.onerror = null;\n this.onError.emit(event);\n };\n\n tempImage.onload = (): void =>\n {\n if (!this._resolve)\n {\n return;\n }\n\n const svgWidth = tempImage.width;\n const svgHeight = tempImage.height;\n\n if (!svgWidth || !svgHeight)\n {\n throw new Error('The SVG image must have width and height defined (in pixels), canvas API needs them.');\n }\n\n // Set render size\n let width = svgWidth * this.scale;\n let height = svgHeight * this.scale;\n\n if (this._overrideWidth || this._overrideHeight)\n {\n width = this._overrideWidth || this._overrideHeight / svgHeight * svgWidth;\n height = this._overrideHeight || this._overrideWidth / svgWidth * svgHeight;\n }\n width = Math.round(width);\n height = Math.round(height);\n\n // Create a canvas element\n const canvas = this.source as ICanvas;\n\n canvas.width = width;\n canvas.height = height;\n (canvas as any)._pixiId = `canvas_${uid()}`;\n\n // Draw the Svg to the canvas\n canvas\n .getContext('2d')\n .drawImage(tempImage, 0, 0, svgWidth, svgHeight, 0, 0, width, height);\n\n this._resolve();\n this._resolve = null;\n };\n }\n\n /**\n * Get size from an svg string using a regular expression.\n * @param svgString - a serialized svg element\n * @returns - image extension\n */\n static getSize(svgString?: string): ISize\n {\n const sizeMatch = SVGResource.SVG_SIZE.exec(svgString);\n const size: any = {};\n\n if (sizeMatch)\n {\n size[sizeMatch[1]] = Math.round(parseFloat(sizeMatch[3]));\n size[sizeMatch[5]] = Math.round(parseFloat(sizeMatch[7]));\n }\n\n return size;\n }\n\n /** Destroys this texture. */\n dispose(): void\n {\n super.dispose();\n this._resolve = null;\n this._crossorigin = null;\n }\n\n /**\n * Used to auto-detect the type of resource.\n * @param {*} source - The source object\n * @param {string} extension - The extension of source, if set\n * @returns {boolean} - If the source is a SVG source or data file\n */\n static test(source: unknown, extension?: string): boolean\n {\n // url file extension is SVG\n return extension === 'svg'\n // source is SVG data-uri\n || (typeof source === 'string' && source.startsWith('data:image/svg+xml'))\n // source is SVG inline\n || (typeof source === 'string' && SVGResource.SVG_XML.test(source));\n }\n\n /**\n * Regular expression for SVG XML document.\n * @example <?xml version=\"1.0\" encoding=\"utf-8\" ?><!-- image/svg --><svg\n * @readonly\n */\n static SVG_XML = /^(<\\?xml[^?]+\\?>)?\\s*()]*-->)?\\s*\\]*(?:\\s(width|height)=('|\")(\\d*(?:\\.\\d+)?)(?:px)?('|\"))[^>]*(?:\\s(width|height)=('|\")(\\d*(?:\\.\\d+)?)(?:px)?('|\"))[^>]*>/i; // eslint-disable-line max-len\n}\n","import { Ticker } from '@pixi/ticker';\nimport { BaseImageResource } from './BaseImageResource';\n\nimport type { Dict } from '@pixi/utils';\n\nexport interface IVideoResourceOptions\n{\n autoLoad?: boolean;\n autoPlay?: boolean;\n updateFPS?: number;\n crossorigin?: boolean | string;\n loop?: boolean;\n muted?: boolean;\n playsinline?: boolean;\n}\n\nexport interface IVideoResourceOptionsElement\n{\n src: string;\n mime: string;\n}\n\n/**\n * Resource type for {@link HTMLVideoElement}.\n * @memberof PIXI\n */\nexport class VideoResource extends BaseImageResource\n{\n /** Override the source to be the video element. */\n public source: HTMLVideoElement;\n\n /**\n * `true` to use Ticker.shared to auto update the base texture.\n * @default true\n */\n protected _autoUpdate: boolean;\n\n /**\n * `true` if the instance is currently connected to PIXI.Ticker.shared to auto update the base texture.\n * @default false\n */\n protected _isConnectedToTicker: boolean;\n protected _updateFPS: number;\n protected _msToNextUpdate: number;\n\n private _videoFrameRequestCallbackHandle: number | null;\n\n /**\n * When set to true will automatically play videos used by this texture once\n * they are loaded. If false, it will not modify the playing state.\n * @default true\n */\n protected autoPlay: boolean;\n\n /**\n * Promise when loading.\n * @default null\n */\n private _load: Promise;\n\n /** Callback when completed with load. */\n private _resolve: (value?: this | PromiseLike) => void;\n private _reject: (error: ErrorEvent) => void;\n\n /**\n * @param {HTMLVideoElement|object|string|Array} source - Video element to use.\n * @param {object} [options] - Options to use\n * @param {boolean} [options.autoLoad=true] - Start loading the video immediately\n * @param {boolean} [options.autoPlay=true] - Start playing video immediately\n * @param {number} [options.updateFPS=0] - How many times a second to update the texture from the video.\n * Leave at 0 to update at every render.\n * @param {boolean} [options.crossorigin=true] - Load image using cross origin\n * @param {boolean} [options.loop=false] - Loops the video\n * @param {boolean} [options.muted=false] - Mutes the video audio, useful for autoplay\n * @param {boolean} [options.playsinline=true] - Prevents opening the video on mobile devices\n */\n constructor(\n source?: HTMLVideoElement | Array | string, options?: IVideoResourceOptions\n )\n {\n options = options || {};\n\n if (!(source instanceof HTMLVideoElement))\n {\n const videoElement = document.createElement('video');\n\n // workaround for https://github.com/pixijs/pixijs/issues/5996\n if (options.autoLoad !== false)\n {\n videoElement.setAttribute('preload', 'auto');\n }\n\n if (options.playsinline !== false)\n {\n videoElement.setAttribute('webkit-playsinline', '');\n videoElement.setAttribute('playsinline', '');\n }\n\n if (options.muted === true)\n {\n // For some reason we need to set both muted flags for chrome to autoplay\n // https://stackoverflow.com/a/51189390\n\n videoElement.setAttribute('muted', '');\n videoElement.muted = true;\n }\n\n if (options.loop === true)\n {\n videoElement.setAttribute('loop', '');\n }\n\n if (options.autoPlay !== false)\n {\n videoElement.setAttribute('autoplay', '');\n }\n\n if (typeof source === 'string')\n {\n source = [source];\n }\n\n const firstSrc = (source[0] as IVideoResourceOptionsElement).src || source[0] as string;\n\n BaseImageResource.crossOrigin(videoElement, firstSrc, options.crossorigin);\n\n // array of objects or strings\n for (let i = 0; i < source.length; ++i)\n {\n const sourceElement = document.createElement('source');\n\n let { src, mime } = source[i] as IVideoResourceOptionsElement;\n\n src = src || source[i] as string;\n\n if (src.startsWith('data:'))\n {\n mime = src.slice(5, src.indexOf(';'));\n }\n else if (!src.startsWith('blob:'))\n {\n const baseSrc = src.split('?').shift().toLowerCase();\n const ext = baseSrc.slice(baseSrc.lastIndexOf('.') + 1);\n\n mime = mime || VideoResource.MIME_TYPES[ext] || `video/${ext}`;\n }\n\n sourceElement.src = src;\n\n if (mime)\n {\n sourceElement.type = mime;\n }\n\n videoElement.appendChild(sourceElement);\n }\n\n // Override the source\n source = videoElement;\n }\n\n super(source);\n\n this.noSubImage = true;\n\n this._autoUpdate = true;\n this._isConnectedToTicker = false;\n\n this._updateFPS = options.updateFPS || 0;\n this._msToNextUpdate = 0;\n this.autoPlay = options.autoPlay !== false;\n\n this._videoFrameRequestCallback = this._videoFrameRequestCallback.bind(this);\n this._videoFrameRequestCallbackHandle = null;\n\n this._load = null;\n this._resolve = null;\n this._reject = null;\n\n // Bind for listeners\n this._onCanPlay = this._onCanPlay.bind(this);\n this._onError = this._onError.bind(this);\n this._onPlayStart = this._onPlayStart.bind(this);\n this._onPlayStop = this._onPlayStop.bind(this);\n this._onSeeked = this._onSeeked.bind(this);\n\n if (options.autoLoad !== false)\n {\n this.load();\n }\n }\n\n /**\n * Trigger updating of the texture.\n * @param _deltaTime - time delta since last tick\n */\n update(_deltaTime = 0): void\n {\n if (!this.destroyed)\n {\n if (this._updateFPS)\n {\n // account for if video has had its playbackRate changed\n const elapsedMS = Ticker.shared.elapsedMS * (this.source as HTMLVideoElement).playbackRate;\n\n this._msToNextUpdate = Math.floor(this._msToNextUpdate - elapsedMS);\n }\n\n if (!this._updateFPS || this._msToNextUpdate <= 0)\n {\n super.update(/* deltaTime*/);\n this._msToNextUpdate = this._updateFPS ? Math.floor(1000 / this._updateFPS) : 0;\n }\n }\n }\n\n private _videoFrameRequestCallback(): void\n {\n this.update();\n\n if (!this.destroyed)\n {\n this._videoFrameRequestCallbackHandle = (this.source as any).requestVideoFrameCallback(\n this._videoFrameRequestCallback);\n }\n else\n {\n this._videoFrameRequestCallbackHandle = null;\n }\n }\n\n /**\n * Start preloading the video resource.\n * @returns {Promise} Handle the validate event\n */\n load(): Promise\n {\n if (this._load)\n {\n return this._load;\n }\n\n const source = this.source as HTMLVideoElement;\n\n if ((source.readyState === source.HAVE_ENOUGH_DATA || source.readyState === source.HAVE_FUTURE_DATA)\n && source.width && source.height)\n {\n (source as any).complete = true;\n }\n\n source.addEventListener('play', this._onPlayStart);\n source.addEventListener('pause', this._onPlayStop);\n source.addEventListener('seeked', this._onSeeked);\n\n if (!this._isSourceReady())\n {\n source.addEventListener('canplay', this._onCanPlay);\n source.addEventListener('canplaythrough', this._onCanPlay);\n source.addEventListener('error', this._onError, true);\n }\n else\n {\n this._onCanPlay();\n }\n\n this._load = new Promise((resolve, reject): void =>\n {\n if (this.valid)\n {\n resolve(this);\n }\n else\n {\n this._resolve = resolve;\n this._reject = reject;\n\n source.load();\n }\n });\n\n return this._load;\n }\n\n /**\n * Handle video error events.\n * @param event\n */\n private _onError(event: ErrorEvent): void\n {\n (this.source as HTMLVideoElement).removeEventListener('error', this._onError, true);\n this.onError.emit(event);\n\n if (this._reject)\n {\n this._reject(event);\n this._reject = null;\n this._resolve = null;\n }\n }\n\n /**\n * Returns true if the underlying source is playing.\n * @returns - True if playing.\n */\n private _isSourcePlaying(): boolean\n {\n const source = this.source as HTMLVideoElement;\n\n return (!source.paused && !source.ended);\n }\n\n /**\n * Returns true if the underlying source is ready for playing.\n * @returns - True if ready.\n */\n private _isSourceReady(): boolean\n {\n const source = this.source as HTMLVideoElement;\n\n return source.readyState > 2;\n }\n\n /** Runs the update loop when the video is ready to play. */\n private _onPlayStart(): void\n {\n // Just in case the video has not received its can play even yet..\n if (!this.valid)\n {\n this._onCanPlay();\n }\n\n this._configureAutoUpdate();\n }\n\n /** Fired when a pause event is triggered, stops the update loop. */\n private _onPlayStop(): void\n {\n this._configureAutoUpdate();\n }\n\n /** Fired when the video is completed seeking to the current playback position. */\n private _onSeeked(): void\n {\n if (this._autoUpdate && !this._isSourcePlaying())\n {\n this._msToNextUpdate = 0;\n this.update();\n this._msToNextUpdate = 0;\n }\n }\n\n /** Fired when the video is loaded and ready to play. */\n private _onCanPlay(): void\n {\n const source = this.source as HTMLVideoElement;\n\n source.removeEventListener('canplay', this._onCanPlay);\n source.removeEventListener('canplaythrough', this._onCanPlay);\n\n const valid = this.valid;\n\n this._msToNextUpdate = 0;\n this.update();\n this._msToNextUpdate = 0;\n\n // prevent multiple loaded dispatches..\n if (!valid && this._resolve)\n {\n this._resolve(this);\n this._resolve = null;\n this._reject = null;\n }\n\n if (this._isSourcePlaying())\n {\n this._onPlayStart();\n }\n else if (this.autoPlay)\n {\n source.play();\n }\n }\n\n /** Destroys this texture. */\n dispose(): void\n {\n this._configureAutoUpdate();\n\n const source = this.source as HTMLVideoElement;\n\n if (source)\n {\n source.removeEventListener('play', this._onPlayStart);\n source.removeEventListener('pause', this._onPlayStop);\n source.removeEventListener('seeked', this._onSeeked);\n source.removeEventListener('canplay', this._onCanPlay);\n source.removeEventListener('canplaythrough', this._onCanPlay);\n source.removeEventListener('error', this._onError, true);\n source.pause();\n source.src = '';\n source.load();\n }\n super.dispose();\n }\n\n /** Should the base texture automatically update itself, set to true by default. */\n get autoUpdate(): boolean\n {\n return this._autoUpdate;\n }\n\n set autoUpdate(value: boolean)\n {\n if (value !== this._autoUpdate)\n {\n this._autoUpdate = value;\n this._configureAutoUpdate();\n }\n }\n\n /**\n * How many times a second to update the texture from the video. Leave at 0 to update at every render.\n * A lower fps can help performance, as updating the texture at 60fps on a 30ps video may not be efficient.\n */\n get updateFPS(): number\n {\n return this._updateFPS;\n }\n\n set updateFPS(value: number)\n {\n if (value !== this._updateFPS)\n {\n this._updateFPS = value;\n this._configureAutoUpdate();\n }\n }\n\n private _configureAutoUpdate(): void\n {\n if (this._autoUpdate && this._isSourcePlaying())\n {\n if (!this._updateFPS && (this.source as any).requestVideoFrameCallback)\n {\n if (this._isConnectedToTicker)\n {\n Ticker.shared.remove(this.update, this);\n this._isConnectedToTicker = false;\n this._msToNextUpdate = 0;\n }\n\n if (this._videoFrameRequestCallbackHandle === null)\n {\n this._videoFrameRequestCallbackHandle = (this.source as any).requestVideoFrameCallback(\n this._videoFrameRequestCallback);\n }\n }\n else\n {\n if (this._videoFrameRequestCallbackHandle !== null)\n {\n (this.source as any).cancelVideoFrameCallback(this._videoFrameRequestCallbackHandle);\n this._videoFrameRequestCallbackHandle = null;\n }\n\n if (!this._isConnectedToTicker)\n {\n Ticker.shared.add(this.update, this);\n this._isConnectedToTicker = true;\n this._msToNextUpdate = 0;\n }\n }\n }\n else\n {\n if (this._videoFrameRequestCallbackHandle !== null)\n {\n (this.source as any).cancelVideoFrameCallback(this._videoFrameRequestCallbackHandle);\n this._videoFrameRequestCallbackHandle = null;\n }\n\n if (this._isConnectedToTicker)\n {\n Ticker.shared.remove(this.update, this);\n this._isConnectedToTicker = false;\n this._msToNextUpdate = 0;\n }\n }\n }\n\n /**\n * Used to auto-detect the type of resource.\n * @param {*} source - The source object\n * @param {string} extension - The extension of source, if set\n * @returns {boolean} `true` if video source\n */\n static test(source: unknown, extension?: string): source is HTMLVideoElement\n {\n return (globalThis.HTMLVideoElement && source instanceof HTMLVideoElement)\n || VideoResource.TYPES.includes(extension);\n }\n\n /**\n * List of common video file extensions supported by VideoResource.\n * @readonly\n */\n static TYPES: Array = ['mp4', 'm4v', 'webm', 'ogg', 'ogv', 'h264', 'avi', 'mov'];\n\n /**\n * Map of video MIME types that can't be directly derived from file extensions.\n * @readonly\n */\n static MIME_TYPES: Dict = {\n ogv: 'video/ogg',\n mov: 'video/quicktime',\n m4v: 'video/mp4',\n };\n}\n","import { ArrayResource } from './ArrayResource';\nimport { INSTALLED } from './autoDetectResource';\nimport { BufferResource } from './BufferResource';\nimport { CanvasResource } from './CanvasResource';\nimport { CubeResource } from './CubeResource';\nimport { ImageBitmapResource } from './ImageBitmapResource';\nimport { ImageResource } from './ImageResource';\nimport { SVGResource } from './SVGResource';\nimport { VideoResource } from './VideoResource';\n\nexport * from './BaseImageResource';\nexport * from './Resource';\n\nINSTALLED.push(\n ImageBitmapResource,\n ImageResource,\n CanvasResource,\n VideoResource,\n SVGResource,\n BufferResource,\n CubeResource,\n ArrayResource\n);\n\nexport * from './AbstractMultiResource';\nexport * from './ArrayResource';\nexport * from './autoDetectResource';\nexport * from './BufferResource';\nexport * from './CanvasResource';\nexport * from './CubeResource';\nexport * from './ImageBitmapResource';\nexport * from './ImageResource';\nexport * from './SVGResource';\nexport * from './VideoResource';\n","import { BaseImageResource } from './BaseImageResource';\n\nimport type { ICanvas } from '@pixi/settings';\n\n/**\n * Resource type for HTMLCanvasElement and OffscreenCanvas.\n * @memberof PIXI\n */\nexport class CanvasResource extends BaseImageResource\n{\n /**\n * @param source - Canvas element to use\n */\n // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n constructor(source: ICanvas)\n {\n super(source);\n }\n\n /**\n * Used to auto-detect the type of resource.\n * @param {*} source - The source object\n * @returns {boolean} `true` if source is HTMLCanvasElement or OffscreenCanvas\n */\n static test(source: unknown): source is OffscreenCanvas | HTMLCanvasElement\n {\n const { OffscreenCanvas } = globalThis;\n\n // Check for browsers that don't yet support OffscreenCanvas\n if (OffscreenCanvas && source instanceof OffscreenCanvas)\n {\n return true;\n }\n\n return globalThis.HTMLCanvasElement && source instanceof HTMLCanvasElement;\n }\n}\n","import { TARGETS } from '@pixi/constants';\nimport { AbstractMultiResource } from './AbstractMultiResource';\n\nimport type { ISize } from '@pixi/math';\nimport type { Renderer } from '../../Renderer';\nimport type { BaseTexture } from '../BaseTexture';\nimport type { GLTexture } from '../GLTexture';\nimport type { BaseImageResource } from './BaseImageResource';\n\n/**\n * A resource that contains a number of sources.\n * @memberof PIXI\n */\nexport class ArrayResource extends AbstractMultiResource\n{\n /**\n * @param source - Number of items in array or the collection\n * of image URLs to use. Can also be resources, image elements, canvas, etc.\n * @param options - Options to apply to {@link PIXI.autoDetectResource}\n * @param {number} [options.width] - Width of the resource\n * @param {number} [options.height] - Height of the resource\n */\n constructor(source: number | Array, options?: ISize)\n {\n const { width, height } = options || {};\n\n let urls;\n let length: number;\n\n if (Array.isArray(source))\n {\n urls = source;\n length = source.length;\n }\n else\n {\n length = source;\n }\n\n super(length, { width, height });\n\n if (urls)\n {\n this.initFromArray(urls, options);\n }\n }\n\n /**\n * Set a baseTexture by ID,\n * ArrayResource just takes resource from it, nothing more\n * @param baseTexture\n * @param index - Zero-based index of resource to set\n * @returns - Instance for chaining\n */\n addBaseTextureAt(baseTexture: BaseTexture, index: number): this\n {\n if (baseTexture.resource)\n {\n this.addResourceAt(baseTexture.resource, index);\n }\n else\n {\n throw new Error('ArrayResource does not support RenderTexture');\n }\n\n return this;\n }\n\n /**\n * Add binding\n * @param baseTexture\n */\n bind(baseTexture: BaseTexture): void\n {\n super.bind(baseTexture);\n\n baseTexture.target = TARGETS.TEXTURE_2D_ARRAY;\n }\n\n /**\n * Upload the resources to the GPU.\n * @param renderer\n * @param texture\n * @param glTexture\n * @returns - whether texture was uploaded\n */\n upload(renderer: Renderer, texture: BaseTexture, glTexture: GLTexture): boolean\n {\n const { length, itemDirtyIds, items } = this;\n const { gl } = renderer;\n\n if (glTexture.dirtyId < 0)\n {\n gl.texImage3D(\n gl.TEXTURE_2D_ARRAY,\n 0,\n glTexture.internalFormat,\n this._width,\n this._height,\n length,\n 0,\n texture.format,\n glTexture.type,\n null\n );\n }\n\n for (let i = 0; i < length; i++)\n {\n const item = items[i];\n\n if (itemDirtyIds[i] < item.dirtyId)\n {\n itemDirtyIds[i] = item.dirtyId;\n if (item.valid)\n {\n gl.texSubImage3D(\n gl.TEXTURE_2D_ARRAY,\n 0,\n 0, // xoffset\n 0, // yoffset\n i, // zoffset\n item.resource.width,\n item.resource.height,\n 1,\n texture.format,\n glTexture.type,\n (item.resource as BaseImageResource).source\n );\n }\n }\n }\n\n return true;\n }\n}\n","import { Rectangle } from '@pixi/core';\n\nimport type { IPointData, Matrix, Transform } from '@pixi/core';\n\n/**\n * 'Builder' pattern for bounds rectangles.\n *\n * This could be called an Axis-Aligned Bounding Box.\n * It is not an actual shape. It is a mutable thing; no 'EMPTY' or those kind of problems.\n * @memberof PIXI\n */\nexport class Bounds\n{\n /** @default Infinity */\n public minX: number;\n\n /** @default Infinity */\n public minY: number;\n\n /** @default -Infinity */\n public maxX: number;\n\n /** @default -Infinity */\n public maxY: number;\n\n public rect: Rectangle;\n\n /**\n * It is updated to _boundsID of corresponding object to keep bounds in sync with content.\n * Updated from outside, thus public modifier.\n */\n public updateID: number;\n\n constructor()\n {\n this.minX = Infinity;\n this.minY = Infinity;\n this.maxX = -Infinity;\n this.maxY = -Infinity;\n\n this.rect = null;\n this.updateID = -1;\n }\n\n /**\n * Checks if bounds are empty.\n * @returns - True if empty.\n */\n isEmpty(): boolean\n {\n return this.minX > this.maxX || this.minY > this.maxY;\n }\n\n /** Clears the bounds and resets. */\n clear(): void\n {\n this.minX = Infinity;\n this.minY = Infinity;\n this.maxX = -Infinity;\n this.maxY = -Infinity;\n }\n\n /**\n * Can return Rectangle.EMPTY constant, either construct new rectangle, either use your rectangle\n * It is not guaranteed that it will return tempRect\n * @param rect - Temporary object will be used if AABB is not empty\n * @returns - A rectangle of the bounds\n */\n getRectangle(rect?: Rectangle): Rectangle\n {\n if (this.minX > this.maxX || this.minY > this.maxY)\n {\n return Rectangle.EMPTY;\n }\n\n rect = rect || new Rectangle(0, 0, 1, 1);\n\n rect.x = this.minX;\n rect.y = this.minY;\n rect.width = this.maxX - this.minX;\n rect.height = this.maxY - this.minY;\n\n return rect;\n }\n\n /**\n * This function should be inlined when its possible.\n * @param point - The point to add.\n */\n addPoint(point: IPointData): void\n {\n this.minX = Math.min(this.minX, point.x);\n this.maxX = Math.max(this.maxX, point.x);\n this.minY = Math.min(this.minY, point.y);\n this.maxY = Math.max(this.maxY, point.y);\n }\n\n /**\n * Adds a point, after transformed. This should be inlined when its possible.\n * @param matrix\n * @param point\n */\n addPointMatrix(matrix: Matrix, point: IPointData): void\n {\n const { a, b, c, d, tx, ty } = matrix;\n\n const x = (a * point.x) + (c * point.y) + tx;\n const y = (b * point.x) + (d * point.y) + ty;\n\n this.minX = Math.min(this.minX, x);\n this.maxX = Math.max(this.maxX, x);\n this.minY = Math.min(this.minY, y);\n this.maxY = Math.max(this.maxY, y);\n }\n\n /**\n * Adds a quad, not transformed\n * @param vertices - The verts to add.\n */\n addQuad(vertices: Float32Array): void\n {\n let minX = this.minX;\n let minY = this.minY;\n let maxX = this.maxX;\n let maxY = this.maxY;\n\n let x = vertices[0];\n let y = vertices[1];\n\n minX = x < minX ? x : minX;\n minY = y < minY ? y : minY;\n maxX = x > maxX ? x : maxX;\n maxY = y > maxY ? y : maxY;\n\n x = vertices[2];\n y = vertices[3];\n minX = x < minX ? x : minX;\n minY = y < minY ? y : minY;\n maxX = x > maxX ? x : maxX;\n maxY = y > maxY ? y : maxY;\n\n x = vertices[4];\n y = vertices[5];\n minX = x < minX ? x : minX;\n minY = y < minY ? y : minY;\n maxX = x > maxX ? x : maxX;\n maxY = y > maxY ? y : maxY;\n\n x = vertices[6];\n y = vertices[7];\n minX = x < minX ? x : minX;\n minY = y < minY ? y : minY;\n maxX = x > maxX ? x : maxX;\n maxY = y > maxY ? y : maxY;\n\n this.minX = minX;\n this.minY = minY;\n this.maxX = maxX;\n this.maxY = maxY;\n }\n\n /**\n * Adds sprite frame, transformed.\n * @param transform - transform to apply\n * @param x0 - left X of frame\n * @param y0 - top Y of frame\n * @param x1 - right X of frame\n * @param y1 - bottom Y of frame\n */\n addFrame(transform: Transform, x0: number, y0: number, x1: number, y1: number): void\n {\n this.addFrameMatrix(transform.worldTransform, x0, y0, x1, y1);\n }\n\n /**\n * Adds sprite frame, multiplied by matrix\n * @param matrix - matrix to apply\n * @param x0 - left X of frame\n * @param y0 - top Y of frame\n * @param x1 - right X of frame\n * @param y1 - bottom Y of frame\n */\n addFrameMatrix(matrix: Matrix, x0: number, y0: number, x1: number, y1: number): void\n {\n const a = matrix.a;\n const b = matrix.b;\n const c = matrix.c;\n const d = matrix.d;\n const tx = matrix.tx;\n const ty = matrix.ty;\n\n let minX = this.minX;\n let minY = this.minY;\n let maxX = this.maxX;\n let maxY = this.maxY;\n\n let x = (a * x0) + (c * y0) + tx;\n let y = (b * x0) + (d * y0) + ty;\n\n minX = x < minX ? x : minX;\n minY = y < minY ? y : minY;\n maxX = x > maxX ? x : maxX;\n maxY = y > maxY ? y : maxY;\n\n x = (a * x1) + (c * y0) + tx;\n y = (b * x1) + (d * y0) + ty;\n minX = x < minX ? x : minX;\n minY = y < minY ? y : minY;\n maxX = x > maxX ? x : maxX;\n maxY = y > maxY ? y : maxY;\n\n x = (a * x0) + (c * y1) + tx;\n y = (b * x0) + (d * y1) + ty;\n minX = x < minX ? x : minX;\n minY = y < minY ? y : minY;\n maxX = x > maxX ? x : maxX;\n maxY = y > maxY ? y : maxY;\n\n x = (a * x1) + (c * y1) + tx;\n y = (b * x1) + (d * y1) + ty;\n minX = x < minX ? x : minX;\n minY = y < minY ? y : minY;\n maxX = x > maxX ? x : maxX;\n maxY = y > maxY ? y : maxY;\n\n this.minX = minX;\n this.minY = minY;\n this.maxX = maxX;\n this.maxY = maxY;\n }\n\n /**\n * Adds screen vertices from array\n * @param vertexData - calculated vertices\n * @param beginOffset - begin offset\n * @param endOffset - end offset, excluded\n */\n addVertexData(vertexData: Float32Array, beginOffset: number, endOffset: number): void\n {\n let minX = this.minX;\n let minY = this.minY;\n let maxX = this.maxX;\n let maxY = this.maxY;\n\n for (let i = beginOffset; i < endOffset; i += 2)\n {\n const x = vertexData[i];\n const y = vertexData[i + 1];\n\n minX = x < minX ? x : minX;\n minY = y < minY ? y : minY;\n maxX = x > maxX ? x : maxX;\n maxY = y > maxY ? y : maxY;\n }\n\n this.minX = minX;\n this.minY = minY;\n this.maxX = maxX;\n this.maxY = maxY;\n }\n\n /**\n * Add an array of mesh vertices\n * @param transform - mesh transform\n * @param vertices - mesh coordinates in array\n * @param beginOffset - begin offset\n * @param endOffset - end offset, excluded\n */\n addVertices(transform: Transform, vertices: Float32Array, beginOffset: number, endOffset: number): void\n {\n this.addVerticesMatrix(transform.worldTransform, vertices, beginOffset, endOffset);\n }\n\n /**\n * Add an array of mesh vertices.\n * @param matrix - mesh matrix\n * @param vertices - mesh coordinates in array\n * @param beginOffset - begin offset\n * @param endOffset - end offset, excluded\n * @param padX - x padding\n * @param padY - y padding\n */\n addVerticesMatrix(matrix: Matrix, vertices: Float32Array, beginOffset: number,\n endOffset: number, padX = 0, padY = padX): void\n {\n const a = matrix.a;\n const b = matrix.b;\n const c = matrix.c;\n const d = matrix.d;\n const tx = matrix.tx;\n const ty = matrix.ty;\n\n let minX = this.minX;\n let minY = this.minY;\n let maxX = this.maxX;\n let maxY = this.maxY;\n\n for (let i = beginOffset; i < endOffset; i += 2)\n {\n const rawX = vertices[i];\n const rawY = vertices[i + 1];\n const x = (a * rawX) + (c * rawY) + tx;\n const y = (d * rawY) + (b * rawX) + ty;\n\n minX = Math.min(minX, x - padX);\n maxX = Math.max(maxX, x + padX);\n minY = Math.min(minY, y - padY);\n maxY = Math.max(maxY, y + padY);\n }\n\n this.minX = minX;\n this.minY = minY;\n this.maxX = maxX;\n this.maxY = maxY;\n }\n\n /**\n * Adds other {@link PIXI.Bounds}.\n * @param bounds - The Bounds to be added\n */\n addBounds(bounds: Bounds): void\n {\n const minX = this.minX;\n const minY = this.minY;\n const maxX = this.maxX;\n const maxY = this.maxY;\n\n this.minX = bounds.minX < minX ? bounds.minX : minX;\n this.minY = bounds.minY < minY ? bounds.minY : minY;\n this.maxX = bounds.maxX > maxX ? bounds.maxX : maxX;\n this.maxY = bounds.maxY > maxY ? bounds.maxY : maxY;\n }\n\n /**\n * Adds other Bounds, masked with Bounds.\n * @param bounds - The Bounds to be added.\n * @param mask - TODO\n */\n addBoundsMask(bounds: Bounds, mask: Bounds): void\n {\n const _minX = bounds.minX > mask.minX ? bounds.minX : mask.minX;\n const _minY = bounds.minY > mask.minY ? bounds.minY : mask.minY;\n const _maxX = bounds.maxX < mask.maxX ? bounds.maxX : mask.maxX;\n const _maxY = bounds.maxY < mask.maxY ? bounds.maxY : mask.maxY;\n\n if (_minX <= _maxX && _minY <= _maxY)\n {\n const minX = this.minX;\n const minY = this.minY;\n const maxX = this.maxX;\n const maxY = this.maxY;\n\n this.minX = _minX < minX ? _minX : minX;\n this.minY = _minY < minY ? _minY : minY;\n this.maxX = _maxX > maxX ? _maxX : maxX;\n this.maxY = _maxY > maxY ? _maxY : maxY;\n }\n }\n\n /**\n * Adds other Bounds, multiplied by matrix. Bounds shouldn't be empty.\n * @param bounds - other bounds\n * @param matrix - multiplicator\n */\n addBoundsMatrix(bounds: Bounds, matrix: Matrix): void\n {\n this.addFrameMatrix(matrix, bounds.minX, bounds.minY, bounds.maxX, bounds.maxY);\n }\n\n /**\n * Adds other Bounds, masked with Rectangle.\n * @param bounds - TODO\n * @param area - TODO\n */\n addBoundsArea(bounds: Bounds, area: Rectangle): void\n {\n const _minX = bounds.minX > area.x ? bounds.minX : area.x;\n const _minY = bounds.minY > area.y ? bounds.minY : area.y;\n const _maxX = bounds.maxX < area.x + area.width ? bounds.maxX : (area.x + area.width);\n const _maxY = bounds.maxY < area.y + area.height ? bounds.maxY : (area.y + area.height);\n\n if (_minX <= _maxX && _minY <= _maxY)\n {\n const minX = this.minX;\n const minY = this.minY;\n const maxX = this.maxX;\n const maxY = this.maxY;\n\n this.minX = _minX < minX ? _minX : minX;\n this.minY = _minY < minY ? _minY : minY;\n this.maxX = _maxX > maxX ? _maxX : maxX;\n this.maxY = _maxY > maxY ? _maxY : maxY;\n }\n }\n\n /**\n * Pads bounds object, making it grow in all directions.\n * If paddingY is omitted, both paddingX and paddingY will be set to paddingX.\n * @param paddingX - The horizontal padding amount.\n * @param paddingY - The vertical padding amount.\n */\n pad(paddingX = 0, paddingY = paddingX): void\n {\n if (!this.isEmpty())\n {\n this.minX -= paddingX;\n this.maxX += paddingX;\n this.minY -= paddingY;\n this.maxY += paddingY;\n }\n }\n\n /**\n * Adds padded frame. (x0, y0) should be strictly less than (x1, y1)\n * @param x0 - left X of frame\n * @param y0 - top Y of frame\n * @param x1 - right X of frame\n * @param y1 - bottom Y of frame\n * @param padX - padding X\n * @param padY - padding Y\n */\n addFramePad(x0: number, y0: number, x1: number, y1: number, padX: number, padY: number): void\n {\n x0 -= padX;\n y0 -= padY;\n x1 += padX;\n y1 += padY;\n\n this.minX = this.minX < x0 ? this.minX : x0;\n this.maxX = this.maxX > x1 ? this.maxX : x1;\n this.minY = this.minY < y0 ? this.minY : y0;\n this.maxY = this.maxY > y1 ? this.maxY : y1;\n }\n}\n","import { DEG_TO_RAD, RAD_TO_DEG, Rectangle, Transform, utils } from '@pixi/core';\nimport { Bounds } from './Bounds';\n\nimport type { Filter, IPointData, MaskData, Matrix, ObservablePoint, Point, Renderer } from '@pixi/core';\nimport type { Container } from './Container';\n\nexport interface IDestroyOptions\n{\n children?: boolean;\n texture?: boolean;\n baseTexture?: boolean;\n}\n\nexport interface DisplayObjectEvents extends GlobalMixins.DisplayObjectEvents\n{\n added: [container: Container];\n childAdded: [child: DisplayObject, container: Container, index: number];\n childRemoved: [child: DisplayObject, container: Container, index: number];\n destroyed: [];\n removed: [container: Container];\n}\n\nexport interface DisplayObject\n extends Omit>,\n utils.EventEmitter {}\n\n/**\n * The base class for all objects that are rendered on the screen.\n *\n * This is an abstract class and can not be used on its own; rather it should be extended.\n *\n * ## Display objects implemented in PixiJS\n *\n * | Display Object | Description |\n * | ------------------------------- | --------------------------------------------------------------------- |\n * | {@link PIXI.Container} | Adds support for `children` to DisplayObject |\n * | {@link PIXI.Graphics} | Shape-drawing display object similar to the Canvas API |\n * | {@link PIXI.Sprite} | Draws textures (i.e. images) |\n * | {@link PIXI.Text} | Draws text using the Canvas API internally |\n * | {@link PIXI.BitmapText} | More scaleable solution for text rendering, reusing glyph textures |\n * | {@link PIXI.TilingSprite} | Draws textures/images in a tiled fashion |\n * | {@link PIXI.AnimatedSprite} | Draws an animation of multiple images |\n * | {@link PIXI.Mesh} | Provides a lower-level API for drawing meshes with custom data |\n * | {@link PIXI.NineSlicePlane} | Mesh-related |\n * | {@link PIXI.SimpleMesh} | v4-compatible mesh |\n * | {@link PIXI.SimplePlane} | Mesh-related |\n * | {@link PIXI.SimpleRope} | Mesh-related |\n *\n * ## Transforms\n *\n * The [transform]{@link PIXI.DisplayObject#transform} of a display object describes the projection from its\n * local coordinate space to its parent's local coordinate space. The following properties are derived\n * from the transform:\n *\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n *
PropertyDescription
[pivot]{@link PIXI.DisplayObject#pivot}\n * Invariant under rotation, scaling, and skewing. The projection of into the parent's space of the pivot\n * is equal to position, regardless of the other three transformations. In other words, It is the center of\n * rotation, scaling, and skewing.\n *
[position]{@link PIXI.DisplayObject#position}\n * Translation. This is the position of the [pivot]{@link PIXI.DisplayObject#pivot} in the parent's local\n * space. The default value of the pivot is the origin (0,0). If the top-left corner of your display object\n * is (0,0) in its local space, then the position will be its top-left corner in the parent's local space.\n *
[scale]{@link PIXI.DisplayObject#scale}\n * Scaling. This will stretch (or compress) the display object's projection. The scale factors are along the\n * local coordinate axes. In other words, the display object is scaled before rotated or skewed. The center\n * of scaling is the [pivot]{@link PIXI.DisplayObject#pivot}.\n *
[rotation]{@link PIXI.DisplayObject#rotation}\n * Rotation. This will rotate the display object's projection by this angle (in radians).\n *
[skew]{@link PIXI.DisplayObject#skew}\n *

Skewing. This can be used to deform a rectangular display object into a parallelogram.

\n *

\n * In PixiJS, skew has a slightly different behaviour than the conventional meaning. It can be\n * thought of the net rotation applied to the coordinate axes (separately). For example, if \"skew.x\" is\n * ⍺ and \"skew.y\" is β, then the line x = 0 will be rotated by ⍺ (y = -x*cot⍺) and the line y = 0 will be\n * rotated by β (y = x*tanβ). A line y = x*tanϴ (i.e. a line at angle ϴ to the x-axis in local-space) will\n * be rotated by an angle between ⍺ and β.\n *

\n *

\n * It can be observed that if skew is applied equally to both axes, then it will be equivalent to applying\n * a rotation. Indeed, if \"skew.x\" = -ϴ and \"skew.y\" = ϴ, it will produce an equivalent of \"rotation\" = ϴ.\n *

\n *

\n * Another quite interesting observation is that \"skew.x\", \"skew.y\", rotation are commutative operations. Indeed,\n * because rotation is essentially a careful combination of the two.\n *

\n *
angleRotation. This is an alias for [rotation]{@link PIXI.DisplayObject#rotation}, but in degrees.
xTranslation. This is an alias for position.x!
yTranslation. This is an alias for position.y!
width\n * Implemented in [Container]{@link PIXI.Container}. Scaling. The width property calculates scale.x by dividing\n * the \"requested\" width by the local bounding box width. It is indirectly an abstraction over scale.x, and there\n * is no concept of user-defined width.\n *
height\n * Implemented in [Container]{@link PIXI.Container}. Scaling. The height property calculates scale.y by dividing\n * the \"requested\" height by the local bounding box height. It is indirectly an abstraction over scale.y, and there\n * is no concept of user-defined height.\n *
\n *\n * ## Bounds\n *\n * The bounds of a display object is defined by the minimum axis-aligned rectangle in world space that can fit\n * around it. The abstract `calculateBounds` method is responsible for providing it (and it should use the\n * `worldTransform` to calculate in world space).\n *\n * There are a few additional types of bounding boxes:\n *\n * | Bounds | Description |\n * | --------------------- | ---------------------------------------------------------------------------------------- |\n * | World Bounds | This is synonymous is the regular bounds described above. See `getBounds()`. |\n * | Local Bounds | This the axis-aligned bounding box in the parent's local space. See `getLocalBounds()`. |\n * | Render Bounds | The bounds, but including extra rendering effects like filter padding. |\n * | Projected Bounds | The bounds of the projected display object onto the screen. Usually equals world bounds. |\n * | Relative Bounds | The bounds of a display object when projected onto a ancestor's (or parent's) space. |\n * | Natural Bounds | The bounds of an object in its own local space (not parent's space, like in local bounds)|\n * | Content Bounds | The natural bounds when excluding all children of a `Container`. |\n *\n * ### calculateBounds\n *\n * [Container]{@link PIXI.Container} already implements `calculateBounds` in a manner that includes children.\n *\n * But for a non-Container display object, the `calculateBounds` method must be overridden in order for `getBounds` and\n * `getLocalBounds` to work. This method must write the bounds into `this._bounds`.\n *\n * Generally, the following technique works for most simple cases: take the list of points\n * forming the \"hull\" of the object (i.e. outline of the object's shape), and then add them\n * using {@link PIXI.Bounds#addPointMatrix}.\n *\n * ```js\n * calculateBounds()\n * {\n * const points = [...];\n *\n * for (let i = 0, j = points.length; i < j; i++)\n * {\n * this._bounds.addPointMatrix(this.worldTransform, points[i]);\n * }\n * }\n * ```\n *\n * You can optimize this for a large number of points by using {@link PIXI.Bounds#addVerticesMatrix} to pass them\n * in one array together.\n *\n * ## Alpha\n *\n * This alpha sets a display object's **relative opacity** w.r.t its parent. For example, if the alpha of a display\n * object is 0.5 and its parent's alpha is 0.5, then it will be rendered with 25% opacity (assuming alpha is not\n * applied on any ancestor further up the chain).\n *\n * The alpha with which the display object will be rendered is called the [worldAlpha]{@link PIXI.DisplayObject#worldAlpha}.\n *\n * ## Renderable vs Visible\n *\n * The `renderable` and `visible` properties can be used to prevent a display object from being rendered to the\n * screen. However, there is a subtle difference between the two. When using `renderable`, the transforms of the display\n * object (and its children subtree) will continue to be calculated. When using `visible`, the transforms will not\n * be calculated.\n *\n * For culling purposes, it is recommended that applications use the [cullable]{@link PIXI.DisplayObject#cullable} property.\n *\n * Otherwise, to prevent an object from rendering in the general-purpose sense - `visible` is the property to use. This\n * one is also better in terms of performance.\n * @memberof PIXI\n */\nexport abstract class DisplayObject extends utils.EventEmitter\n{\n abstract sortDirty: boolean;\n\n /** The display object container that contains this display object. */\n public parent: Container;\n\n /**\n * The multiplied alpha of the displayObject.\n * @readonly\n */\n public worldAlpha: number;\n\n /**\n * World transform and local transform of this object.\n * This will become read-only later, please do not assign anything there unless you know what are you doing.\n */\n public transform: Transform;\n\n /** The opacity of the object. */\n public alpha: number;\n\n /**\n * The visibility of the object. If false the object will not be drawn, and\n * the updateTransform function will not be called.\n *\n * Only affects recursive calls from parent. You can ask for bounds or call updateTransform manually.\n */\n public visible: boolean;\n\n /**\n * Can this object be rendered, if false the object will not be drawn but the updateTransform\n * methods will still be called.\n *\n * Only affects recursive calls from parent. You can ask for bounds manually.\n */\n public renderable: boolean;\n\n /**\n * Should this object be rendered if the bounds of this object are out of frame?\n *\n * Culling has no effect on whether updateTransform is called.\n */\n public cullable: boolean;\n\n /**\n * If set, this shape is used for culling instead of the bounds of this object.\n * It can improve the culling performance of objects with many children.\n * The culling area is defined in local space.\n */\n public cullArea: Rectangle;\n\n /**\n * The area the filter is applied to. This is used as more of an optimization\n * rather than figuring out the dimensions of the displayObject each frame you can set this rectangle.\n *\n * Also works as an interaction mask.\n */\n public filterArea: Rectangle;\n\n /**\n * Sets the filters for the displayObject.\n * IMPORTANT: This is a WebGL only feature and will be ignored by the canvas renderer.\n * To remove filters simply set this property to `'null'`.\n */\n public filters: Filter[] | null;\n\n /** Used to fast check if a sprite is.. a sprite! */\n public isSprite: boolean;\n\n /** Does any other displayObject use this object as a mask? */\n public isMask: boolean;\n\n /**\n * Which index in the children array the display component was before the previous zIndex sort.\n * Used by containers to help sort objects with the same zIndex, by using previous array index as the decider.\n * @protected\n */\n public _lastSortedIndex: number;\n\n /**\n * The original, cached mask of the object.\n * @protected\n */\n public _mask: Container | MaskData;\n\n /** The bounds object, this is used to calculate and store the bounds of the displayObject. */\n public _bounds: Bounds;\n\n /** Local bounds object, swapped with `_bounds` when using `getLocalBounds()`. */\n public _localBounds: Bounds;\n\n /**\n * The zIndex of the displayObject.\n * A higher value will mean it will be rendered on top of other displayObjects within the same container.\n * @protected\n */\n protected _zIndex: number;\n\n /**\n * Currently enabled filters.\n * @protected\n */\n protected _enabledFilters: Filter[];\n\n /** Flags the cached bounds as dirty. */\n protected _boundsID: number;\n\n /** Cache of this display-object's bounds-rectangle. */\n protected _boundsRect: Rectangle;\n\n /** Cache of this display-object's local-bounds rectangle. */\n protected _localBoundsRect: Rectangle;\n\n /** If the object has been destroyed via destroy(). If true, it should not be used. */\n protected _destroyed: boolean;\n\n /** The number of times this object is used as a mask by another object. */\n private _maskRefCount: number;\n private tempDisplayObjectParent: TemporaryDisplayObject;\n public displayObjectUpdateTransform: () => void;\n\n /**\n * Mixes all enumerable properties and methods from a source object to DisplayObject.\n * @param source - The source of properties and methods to mix in.\n */\n static mixin(source: utils.Dict): void\n {\n // in ES8/ES2017, this would be really easy:\n // Object.defineProperties(DisplayObject.prototype, Object.getOwnPropertyDescriptors(source));\n\n // get all the enumerable property keys\n const keys = Object.keys(source);\n\n // loop through properties\n for (let i = 0; i < keys.length; ++i)\n {\n const propertyName = keys[i];\n\n // Set the property using the property descriptor - this works for accessors and normal value properties\n Object.defineProperty(\n DisplayObject.prototype,\n propertyName,\n Object.getOwnPropertyDescriptor(source, propertyName)\n );\n }\n }\n\n constructor()\n {\n super();\n\n this.tempDisplayObjectParent = null;\n\n // TODO: need to create Transform from factory\n this.transform = new Transform();\n this.alpha = 1;\n this.visible = true;\n this.renderable = true;\n this.cullable = false;\n this.cullArea = null;\n\n this.parent = null;\n this.worldAlpha = 1;\n\n this._lastSortedIndex = 0;\n this._zIndex = 0;\n\n this.filterArea = null;\n this.filters = null;\n this._enabledFilters = null;\n\n this._bounds = new Bounds();\n this._localBounds = null;\n this._boundsID = 0;\n this._boundsRect = null;\n this._localBoundsRect = null;\n this._mask = null;\n this._maskRefCount = 0;\n this._destroyed = false;\n\n this.isSprite = false;\n this.isMask = false;\n }\n\n /**\n * Fired when this DisplayObject is added to a Container.\n * @instance\n * @event added\n * @param {PIXI.Container} container - The container added to.\n */\n\n /**\n * Fired when this DisplayObject is removed from a Container.\n * @instance\n * @event removed\n * @param {PIXI.Container} container - The container removed from.\n */\n\n /**\n * Fired when this DisplayObject is destroyed. This event is emitted once\n * destroy is finished.\n * @instance\n * @event destroyed\n */\n\n /** Readonly flag for destroyed display objects. */\n get destroyed(): boolean\n {\n return this._destroyed;\n }\n\n /** Recalculates the bounds of the display object. */\n abstract calculateBounds(): void;\n\n abstract removeChild(child: DisplayObject): void;\n\n /**\n * Renders the object using the WebGL renderer.\n * @param renderer - The renderer.\n */\n abstract render(renderer: Renderer): void;\n\n /** Recursively updates transform of all objects from the root to this one internal function for toLocal() */\n protected _recursivePostUpdateTransform(): void\n {\n if (this.parent)\n {\n this.parent._recursivePostUpdateTransform();\n this.transform.updateTransform(this.parent.transform);\n }\n else\n {\n this.transform.updateTransform(this._tempDisplayObjectParent.transform);\n }\n }\n\n /** Updates the object transform for rendering. TODO - Optimization pass! */\n updateTransform(): void\n {\n this._boundsID++;\n\n this.transform.updateTransform(this.parent.transform);\n // multiply the alphas..\n this.worldAlpha = this.alpha * this.parent.worldAlpha;\n }\n\n /**\n * Calculates and returns the (world) bounds of the display object as a [Rectangle]{@link PIXI.Rectangle}.\n *\n * This method is expensive on containers with a large subtree (like the stage). This is because the bounds\n * of a container depend on its children's bounds, which recursively causes all bounds in the subtree to\n * be recalculated. The upside, however, is that calling `getBounds` once on a container will indeed update\n * the bounds of all children (the whole subtree, in fact). This side effect should be exploited by using\n * `displayObject._bounds.getRectangle()` when traversing through all the bounds in a scene graph. Otherwise,\n * calling `getBounds` on each object in a subtree will cause the total cost to increase quadratically as\n * its height increases.\n *\n * The transforms of all objects in a container's **subtree** and of all **ancestors** are updated.\n * The world bounds of all display objects in a container's **subtree** will also be recalculated.\n *\n * The `_bounds` object stores the last calculation of the bounds. You can use to entirely skip bounds\n * calculation if needed.\n *\n * ```js\n * const lastCalculatedBounds = displayObject._bounds.getRectangle(optionalRect);\n * ```\n *\n * Do know that usage of `getLocalBounds` can corrupt the `_bounds` of children (the whole subtree, actually). This\n * is a known issue that has not been solved. See [getLocalBounds]{@link PIXI.DisplayObject#getLocalBounds} for more\n * details.\n *\n * `getBounds` should be called with `skipUpdate` equal to `true` in a render() call. This is because the transforms\n * are guaranteed to be update-to-date. In fact, recalculating inside a render() call may cause corruption in certain\n * cases.\n * @param skipUpdate - Setting to `true` will stop the transforms of the scene graph from\n * being updated. This means the calculation returned MAY be out of date BUT will give you a\n * nice performance boost.\n * @param rect - Optional rectangle to store the result of the bounds calculation.\n * @returns - The minimum axis-aligned rectangle in world space that fits around this object.\n */\n getBounds(skipUpdate?: boolean, rect?: Rectangle): Rectangle\n {\n if (!skipUpdate)\n {\n if (!this.parent)\n {\n this.parent = this._tempDisplayObjectParent as Container;\n this.updateTransform();\n this.parent = null;\n }\n else\n {\n this._recursivePostUpdateTransform();\n this.updateTransform();\n }\n }\n\n if (this._bounds.updateID !== this._boundsID)\n {\n this.calculateBounds();\n this._bounds.updateID = this._boundsID;\n }\n\n if (!rect)\n {\n if (!this._boundsRect)\n {\n this._boundsRect = new Rectangle();\n }\n\n rect = this._boundsRect;\n }\n\n return this._bounds.getRectangle(rect);\n }\n\n /**\n * Retrieves the local bounds of the displayObject as a rectangle object.\n * @param rect - Optional rectangle to store the result of the bounds calculation.\n * @returns - The rectangular bounding area.\n */\n getLocalBounds(rect?: Rectangle): Rectangle\n {\n if (!rect)\n {\n if (!this._localBoundsRect)\n {\n this._localBoundsRect = new Rectangle();\n }\n\n rect = this._localBoundsRect;\n }\n\n if (!this._localBounds)\n {\n this._localBounds = new Bounds();\n }\n\n const transformRef = this.transform;\n const parentRef = this.parent;\n\n this.parent = null;\n // inherit the worldAlpha of the parent node\n this._tempDisplayObjectParent.worldAlpha = parentRef?.worldAlpha ?? 1;\n this.transform = this._tempDisplayObjectParent.transform;\n\n const worldBounds = this._bounds;\n const worldBoundsID = this._boundsID;\n\n this._bounds = this._localBounds;\n\n const bounds = this.getBounds(false, rect);\n\n this.parent = parentRef;\n this.transform = transformRef;\n\n this._bounds = worldBounds;\n this._bounds.updateID += this._boundsID - worldBoundsID;// reflect side-effects\n\n return bounds;\n }\n\n /**\n * Calculates the global position of the display object.\n * @param position - The world origin to calculate from.\n * @param point - A Point object in which to store the value, optional\n * (otherwise will create a new Point).\n * @param skipUpdate - Should we skip the update transform.\n * @returns - A point object representing the position of this object.\n */\n toGlobal

(position: IPointData, point?: P, skipUpdate = false): P\n {\n if (!skipUpdate)\n {\n this._recursivePostUpdateTransform();\n\n // this parent check is for just in case the item is a root object.\n // If it is we need to give it a temporary parent so that displayObjectUpdateTransform works correctly\n // this is mainly to avoid a parent check in the main loop. Every little helps for performance :)\n if (!this.parent)\n {\n this.parent = this._tempDisplayObjectParent as Container;\n this.displayObjectUpdateTransform();\n this.parent = null;\n }\n else\n {\n this.displayObjectUpdateTransform();\n }\n }\n\n // don't need to update the lot\n return this.worldTransform.apply

(position, point);\n }\n\n /**\n * Calculates the local position of the display object relative to another point.\n * @param position - The world origin to calculate from.\n * @param from - The DisplayObject to calculate the global position from.\n * @param point - A Point object in which to store the value, optional\n * (otherwise will create a new Point).\n * @param skipUpdate - Should we skip the update transform\n * @returns - A point object representing the position of this object\n */\n toLocal

(position: IPointData, from?: DisplayObject, point?: P, skipUpdate?: boolean): P\n {\n if (from)\n {\n position = from.toGlobal(position, point, skipUpdate);\n }\n\n if (!skipUpdate)\n {\n this._recursivePostUpdateTransform();\n\n // this parent check is for just in case the item is a root object.\n // If it is we need to give it a temporary parent so that displayObjectUpdateTransform works correctly\n // this is mainly to avoid a parent check in the main loop. Every little helps for performance :)\n if (!this.parent)\n {\n this.parent = this._tempDisplayObjectParent as Container;\n this.displayObjectUpdateTransform();\n this.parent = null;\n }\n else\n {\n this.displayObjectUpdateTransform();\n }\n }\n\n // simply apply the matrix..\n return this.worldTransform.applyInverse

(position, point);\n }\n\n /**\n * Set the parent Container of this DisplayObject.\n * @param container - The Container to add this DisplayObject to.\n * @returns - The Container that this DisplayObject was added to.\n */\n setParent(container: Container): Container\n {\n if (!container || !container.addChild)\n {\n throw new Error('setParent: Argument must be a Container');\n }\n\n container.addChild(this);\n\n return container;\n }\n\n /** Remove the DisplayObject from its parent Container. If the DisplayObject has no parent, do nothing. */\n removeFromParent()\n {\n this.parent?.removeChild(this);\n }\n\n /**\n * Convenience function to set the position, scale, skew and pivot at once.\n * @param x - The X position\n * @param y - The Y position\n * @param scaleX - The X scale value\n * @param scaleY - The Y scale value\n * @param rotation - The rotation\n * @param skewX - The X skew value\n * @param skewY - The Y skew value\n * @param pivotX - The X pivot value\n * @param pivotY - The Y pivot value\n * @returns - The DisplayObject instance\n */\n setTransform(x = 0, y = 0, scaleX = 1, scaleY = 1, rotation = 0, skewX = 0, skewY = 0, pivotX = 0, pivotY = 0): this\n {\n this.position.x = x;\n this.position.y = y;\n this.scale.x = !scaleX ? 1 : scaleX;\n this.scale.y = !scaleY ? 1 : scaleY;\n this.rotation = rotation;\n this.skew.x = skewX;\n this.skew.y = skewY;\n this.pivot.x = pivotX;\n this.pivot.y = pivotY;\n\n return this;\n }\n\n /**\n * Base destroy method for generic display objects. This will automatically\n * remove the display object from its parent Container as well as remove\n * all current event listeners and internal references. Do not use a DisplayObject\n * after calling `destroy()`.\n * @param _options\n */\n destroy(_options?: IDestroyOptions | boolean): void\n {\n this.removeFromParent();\n\n this._destroyed = true;\n this.transform = null;\n\n this.parent = null;\n this._bounds = null;\n this.mask = null;\n\n this.cullArea = null;\n this.filters = null;\n this.filterArea = null;\n this.hitArea = null;\n\n this.eventMode = 'auto';\n this.interactiveChildren = false;\n\n this.emit('destroyed');\n this.removeAllListeners();\n }\n\n /**\n * @protected\n * @member {PIXI.Container}\n */\n get _tempDisplayObjectParent(): TemporaryDisplayObject\n {\n if (this.tempDisplayObjectParent === null)\n {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n this.tempDisplayObjectParent = new TemporaryDisplayObject();\n }\n\n return this.tempDisplayObjectParent;\n }\n\n /**\n * Used in Renderer, cacheAsBitmap and other places where you call an `updateTransform` on root.\n *\n * ```js\n * const cacheParent = elem.enableTempParent();\n * elem.updateTransform();\n * elem.disableTempParent(cacheParent);\n * ```\n * @returns - Current parent\n */\n enableTempParent(): Container\n {\n const myParent = this.parent;\n\n this.parent = this._tempDisplayObjectParent as Container;\n\n return myParent;\n }\n\n /**\n * Pair method for `enableTempParent`\n * @param cacheParent - Actual parent of element\n */\n disableTempParent(cacheParent: Container): void\n {\n this.parent = cacheParent;\n }\n\n /**\n * The position of the displayObject on the x axis relative to the local coordinates of the parent.\n * An alias to position.x\n */\n get x(): number\n {\n return this.position.x;\n }\n\n set x(value: number)\n {\n this.transform.position.x = value;\n }\n\n /**\n * The position of the displayObject on the y axis relative to the local coordinates of the parent.\n * An alias to position.y\n */\n get y(): number\n {\n return this.position.y;\n }\n\n set y(value: number)\n {\n this.transform.position.y = value;\n }\n\n /**\n * Current transform of the object based on world (parent) factors.\n * @readonly\n */\n get worldTransform(): Matrix\n {\n return this.transform.worldTransform;\n }\n\n /**\n * Current transform of the object based on local factors: position, scale, other stuff.\n * @readonly\n */\n get localTransform(): Matrix\n {\n return this.transform.localTransform;\n }\n\n /**\n * The coordinate of the object relative to the local coordinates of the parent.\n * @since 4.0.0\n */\n get position(): ObservablePoint\n {\n return this.transform.position;\n }\n\n set position(value: IPointData)\n {\n this.transform.position.copyFrom(value);\n }\n\n /**\n * The scale factors of this object along the local coordinate axes.\n *\n * The default scale is (1, 1).\n * @since 4.0.0\n */\n get scale(): ObservablePoint\n {\n return this.transform.scale;\n }\n\n set scale(value: IPointData)\n {\n this.transform.scale.copyFrom(value);\n }\n\n /**\n * The center of rotation, scaling, and skewing for this display object in its local space. The `position`\n * is the projection of `pivot` in the parent's local space.\n *\n * By default, the pivot is the origin (0, 0).\n * @since 4.0.0\n */\n get pivot(): ObservablePoint\n {\n return this.transform.pivot;\n }\n\n set pivot(value: IPointData)\n {\n this.transform.pivot.copyFrom(value);\n }\n\n /**\n * The skew factor for the object in radians.\n * @since 4.0.0\n */\n get skew(): ObservablePoint\n {\n return this.transform.skew;\n }\n\n set skew(value: IPointData)\n {\n this.transform.skew.copyFrom(value);\n }\n\n /**\n * The rotation of the object in radians.\n * 'rotation' and 'angle' have the same effect on a display object; rotation is in radians, angle is in degrees.\n */\n get rotation(): number\n {\n return this.transform.rotation;\n }\n\n set rotation(value: number)\n {\n this.transform.rotation = value;\n }\n\n /**\n * The angle of the object in degrees.\n * 'rotation' and 'angle' have the same effect on a display object; rotation is in radians, angle is in degrees.\n */\n get angle(): number\n {\n return this.transform.rotation * RAD_TO_DEG;\n }\n\n set angle(value: number)\n {\n this.transform.rotation = value * DEG_TO_RAD;\n }\n\n /**\n * The zIndex of the displayObject.\n *\n * If a container has the sortableChildren property set to true, children will be automatically\n * sorted by zIndex value; a higher value will mean it will be moved towards the end of the array,\n * and thus rendered on top of other display objects within the same container.\n * @see PIXI.Container#sortableChildren\n */\n get zIndex(): number\n {\n return this._zIndex;\n }\n\n set zIndex(value: number)\n {\n if (this._zIndex === value)\n {\n return;\n }\n\n this._zIndex = value;\n if (this.parent)\n {\n this.parent.sortDirty = true;\n }\n }\n\n /**\n * Indicates if the object is globally visible.\n * @readonly\n */\n get worldVisible(): boolean\n {\n let item = this as DisplayObject;\n\n do\n {\n if (!item.visible)\n {\n return false;\n }\n\n item = item.parent;\n } while (item);\n\n return true;\n }\n\n /**\n * Sets a mask for the displayObject. A mask is an object that limits the visibility of an\n * object to the shape of the mask applied to it. In PixiJS a regular mask must be a\n * {@link PIXI.Graphics} or a {@link PIXI.Sprite} object. This allows for much faster masking in canvas as it\n * utilities shape clipping. Furthermore, a mask of an object must be in the subtree of its parent.\n * Otherwise, `getLocalBounds` may calculate incorrect bounds, which makes the container's width and height wrong.\n * To remove a mask, set this property to `null`.\n *\n * For sprite mask both alpha and red channel are used. Black mask is the same as transparent mask.\n * @example\n * import { Graphics, Sprite } from 'pixi.js';\n *\n * const graphics = new Graphics();\n * graphics.beginFill(0xFF3300);\n * graphics.drawRect(50, 250, 100, 100);\n * graphics.endFill();\n *\n * const sprite = new Sprite(texture);\n * sprite.mask = graphics;\n * @todo At the moment, CanvasRenderer doesn't support Sprite as mask.\n */\n get mask(): Container | MaskData | null\n {\n return this._mask;\n }\n\n set mask(value: Container | MaskData | null)\n {\n if (this._mask === value)\n {\n return;\n }\n\n if (this._mask)\n {\n const maskObject = ((this._mask as MaskData).isMaskData\n ? (this._mask as MaskData).maskObject : this._mask) as Container;\n\n if (maskObject)\n {\n maskObject._maskRefCount--;\n\n if (maskObject._maskRefCount === 0)\n {\n maskObject.renderable = true;\n maskObject.isMask = false;\n }\n }\n }\n\n this._mask = value;\n\n if (this._mask)\n {\n const maskObject = ((this._mask as MaskData).isMaskData\n ? (this._mask as MaskData).maskObject : this._mask) as Container;\n\n if (maskObject)\n {\n if (maskObject._maskRefCount === 0)\n {\n maskObject.renderable = false;\n maskObject.isMask = true;\n }\n\n maskObject._maskRefCount++;\n }\n }\n }\n}\n\n/**\n * @private\n */\nexport class TemporaryDisplayObject extends DisplayObject\n{\n calculateBounds: () => null;\n removeChild: (child: DisplayObject) => null;\n render: (renderer: Renderer) => null;\n sortDirty: boolean = null;\n}\n\n/**\n * DisplayObject default updateTransform, does not update children of container.\n * Will crash if there's no parent element.\n * @memberof PIXI.DisplayObject#\n * @method displayObjectUpdateTransform\n */\nDisplayObject.prototype.displayObjectUpdateTransform = DisplayObject.prototype.updateTransform;\n","import { MASK_TYPES, Matrix, utils } from '@pixi/core';\nimport { DisplayObject } from './DisplayObject';\n\nimport type { MaskData, Rectangle, Renderer } from '@pixi/core';\nimport type { IDestroyOptions } from './DisplayObject';\n\nconst tempMatrix = new Matrix();\n\nfunction sortChildren(a: DisplayObject, b: DisplayObject): number\n{\n if (a.zIndex === b.zIndex)\n {\n return a._lastSortedIndex - b._lastSortedIndex;\n }\n\n return a.zIndex - b.zIndex;\n}\n\nexport interface Container extends GlobalMixins.Container, DisplayObject {}\n\n/**\n * Container is a general-purpose display object that holds children. It also adds built-in support for advanced\n * rendering features like masking and filtering.\n *\n * It is the base class of all display objects that act as a container for other objects, including Graphics\n * and Sprite.\n * @example\n * import { BlurFilter, Container, Graphics, Sprite } from 'pixi.js';\n *\n * const container = new Container();\n * const sprite = Sprite.from('https://s3-us-west-2.amazonaws.com/s.cdpn.io/693612/IaUrttj.png');\n *\n * sprite.width = 512;\n * sprite.height = 512;\n *\n * // Adds a sprite as a child to this container. As a result, the sprite will be rendered whenever the container\n * // is rendered.\n * container.addChild(sprite);\n *\n * // Blurs whatever is rendered by the container\n * container.filters = [new BlurFilter()];\n *\n * // Only the contents within a circle at the center should be rendered onto the screen.\n * container.mask = new Graphics()\n * .beginFill(0xffffff)\n * .drawCircle(sprite.width / 2, sprite.height / 2, Math.min(sprite.width, sprite.height) / 2)\n * .endFill();\n * @memberof PIXI\n */\nexport class Container extends DisplayObject\n{\n /**\n * Sets the default value for the container property `sortableChildren`.\n * If set to true, the container will sort its children by zIndex value\n * when `updateTransform()` is called, or manually if `sortChildren()` is called.\n *\n * This actually changes the order of elements in the array, so should be treated\n * as a basic solution that is not performant compared to other solutions,\n * such as {@link https://github.com/pixijs/layers PixiJS Layers}.\n *\n * Also be aware of that this may not work nicely with the `addChildAt()` function,\n * as the `zIndex` sorting may cause the child to automatically sorted to another position.\n * @static\n */\n public static defaultSortableChildren = false;\n\n /**\n * The array of children of this container.\n * @readonly\n */\n public readonly children: T[];\n\n /**\n * If set to true, the container will sort its children by `zIndex` value\n * when `updateTransform()` is called, or manually if `sortChildren()` is called.\n *\n * This actually changes the order of elements in the array, so should be treated\n * as a basic solution that is not performant compared to other solutions,\n * such as {@link https://github.com/pixijs/layers PixiJS Layers}\n *\n * Also be aware of that this may not work nicely with the `addChildAt()` function,\n * as the `zIndex` sorting may cause the child to automatically sorted to another position.\n * @see PIXI.Container.defaultSortableChildren\n */\n public sortableChildren: boolean;\n\n /**\n * Should children be sorted by zIndex at the next updateTransform call.\n *\n * Will get automatically set to true if a new child is added, or if a child's zIndex changes.\n */\n public sortDirty: boolean;\n public parent: Container;\n public containerUpdateTransform: () => void;\n\n protected _width: number;\n protected _height: number;\n\n constructor()\n {\n super();\n\n this.children = [];\n this.sortableChildren = Container.defaultSortableChildren;\n this.sortDirty = false;\n\n /**\n * Fired when a DisplayObject is added to this Container.\n * @event PIXI.Container#childAdded\n * @param {PIXI.DisplayObject} child - The child added to the Container.\n * @param {PIXI.Container} container - The container that added the child.\n * @param {number} index - The children's index of the added child.\n */\n\n /**\n * Fired when a DisplayObject is removed from this Container.\n * @event PIXI.Container#childRemoved\n * @param {PIXI.DisplayObject} child - The child removed from the Container.\n * @param {PIXI.Container} container - The container that removed the child.\n * @param {number} index - The former children's index of the removed child.\n */\n }\n\n /**\n * Overridable method that can be used by Container subclasses whenever the children array is modified.\n * @param _length\n */\n protected onChildrenChange(_length?: number): void\n {\n /* empty */\n }\n\n /**\n * Adds one or more children to the container.\n *\n * Multiple items can be added like so: `myContainer.addChild(thingOne, thingTwo, thingThree)`\n * @param {...PIXI.DisplayObject} children - The DisplayObject(s) to add to the container\n * @returns {PIXI.DisplayObject} - The first child that was added.\n */\n addChild(...children: U): U[0]\n {\n // if there is only one argument we can bypass looping through the them\n if (children.length > 1)\n {\n // loop through the array and add all children\n for (let i = 0; i < children.length; i++)\n {\n // eslint-disable-next-line prefer-rest-params\n this.addChild(children[i]);\n }\n }\n else\n {\n const child = children[0];\n // if the child has a parent then lets remove it as PixiJS objects can only exist in one place\n\n if (child.parent)\n {\n child.parent.removeChild(child);\n }\n\n child.parent = this;\n this.sortDirty = true;\n\n // ensure child transform will be recalculated\n child.transform._parentID = -1;\n\n this.children.push(child);\n\n // ensure bounds will be recalculated\n this._boundsID++;\n\n // TODO - lets either do all callbacks or all events.. not both!\n this.onChildrenChange(this.children.length - 1);\n this.emit('childAdded', child, this, this.children.length - 1);\n child.emit('added', this);\n }\n\n return children[0];\n }\n\n /**\n * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown.\n * If the child is already in this container, it will be moved to the specified index.\n * @param {PIXI.DisplayObject} child - The child to add.\n * @param {number} index - The absolute index where the child will be positioned at the end of the operation.\n * @returns {PIXI.DisplayObject} The child that was added.\n */\n addChildAt(child: U, index: number): U\n {\n if (index < 0 || index > this.children.length)\n {\n throw new Error(`${child}addChildAt: The index ${index} supplied is out of bounds ${this.children.length}`);\n }\n\n if (child.parent)\n {\n child.parent.removeChild(child);\n }\n\n child.parent = this;\n this.sortDirty = true;\n\n // ensure child transform will be recalculated\n child.transform._parentID = -1;\n\n this.children.splice(index, 0, child);\n\n // ensure bounds will be recalculated\n this._boundsID++;\n\n // TODO - lets either do all callbacks or all events.. not both!\n this.onChildrenChange(index);\n child.emit('added', this);\n this.emit('childAdded', child, this, index);\n\n return child;\n }\n\n /**\n * Swaps the position of 2 Display Objects within this container.\n * @param child - First display object to swap\n * @param child2 - Second display object to swap\n */\n swapChildren(child: T, child2: T): void\n {\n if (child === child2)\n {\n return;\n }\n\n const index1 = this.getChildIndex(child);\n const index2 = this.getChildIndex(child2);\n\n this.children[index1] = child2;\n this.children[index2] = child;\n this.onChildrenChange(index1 < index2 ? index1 : index2);\n }\n\n /**\n * Returns the index position of a child DisplayObject instance\n * @param child - The DisplayObject instance to identify\n * @returns - The index position of the child display object to identify\n */\n getChildIndex(child: T): number\n {\n const index = this.children.indexOf(child);\n\n if (index === -1)\n {\n throw new Error('The supplied DisplayObject must be a child of the caller');\n }\n\n return index;\n }\n\n /**\n * Changes the position of an existing child in the display object container\n * @param child - The child DisplayObject instance for which you want to change the index number\n * @param index - The resulting index number for the child display object\n */\n setChildIndex(child: T, index: number): void\n {\n if (index < 0 || index >= this.children.length)\n {\n throw new Error(`The index ${index} supplied is out of bounds ${this.children.length}`);\n }\n\n const currentIndex = this.getChildIndex(child);\n\n utils.removeItems(this.children, currentIndex, 1); // remove from old position\n this.children.splice(index, 0, child); // add at new position\n\n this.onChildrenChange(index);\n }\n\n /**\n * Returns the child at the specified index\n * @param index - The index to get the child at\n * @returns - The child at the given index, if any.\n */\n getChildAt(index: number): T\n {\n if (index < 0 || index >= this.children.length)\n {\n throw new Error(`getChildAt: Index (${index}) does not exist.`);\n }\n\n return this.children[index];\n }\n\n /**\n * Removes one or more children from the container.\n * @param {...PIXI.DisplayObject} children - The DisplayObject(s) to remove\n * @returns {PIXI.DisplayObject} The first child that was removed.\n */\n removeChild(...children: U): U[0]\n {\n // if there is only one argument we can bypass looping through the them\n if (children.length > 1)\n {\n // loop through the arguments property and remove all children\n for (let i = 0; i < children.length; i++)\n {\n this.removeChild(children[i]);\n }\n }\n else\n {\n const child = children[0];\n const index = this.children.indexOf(child);\n\n if (index === -1) return null;\n\n child.parent = null;\n // ensure child transform will be recalculated\n child.transform._parentID = -1;\n utils.removeItems(this.children, index, 1);\n\n // ensure bounds will be recalculated\n this._boundsID++;\n\n // TODO - lets either do all callbacks or all events.. not both!\n this.onChildrenChange(index);\n child.emit('removed', this);\n this.emit('childRemoved', child, this, index);\n }\n\n return children[0];\n }\n\n /**\n * Removes a child from the specified index position.\n * @param index - The index to get the child from\n * @returns The child that was removed.\n */\n removeChildAt(index: number): T\n {\n const child = this.getChildAt(index);\n\n // ensure child transform will be recalculated..\n child.parent = null;\n child.transform._parentID = -1;\n utils.removeItems(this.children, index, 1);\n\n // ensure bounds will be recalculated\n this._boundsID++;\n\n // TODO - lets either do all callbacks or all events.. not both!\n this.onChildrenChange(index);\n child.emit('removed', this);\n this.emit('childRemoved', child, this, index);\n\n return child;\n }\n\n /**\n * Removes all children from this container that are within the begin and end indexes.\n * @param beginIndex - The beginning position.\n * @param endIndex - The ending position. Default value is size of the container.\n * @returns - List of removed children\n */\n removeChildren(beginIndex = 0, endIndex = this.children.length): T[]\n {\n const begin = beginIndex;\n const end = endIndex;\n const range = end - begin;\n let removed;\n\n if (range > 0 && range <= end)\n {\n removed = this.children.splice(begin, range);\n\n for (let i = 0; i < removed.length; ++i)\n {\n removed[i].parent = null;\n if (removed[i].transform)\n {\n removed[i].transform._parentID = -1;\n }\n }\n\n this._boundsID++;\n\n this.onChildrenChange(beginIndex);\n\n for (let i = 0; i < removed.length; ++i)\n {\n removed[i].emit('removed', this);\n this.emit('childRemoved', removed[i], this, i);\n }\n\n return removed;\n }\n else if (range === 0 && this.children.length === 0)\n {\n return [];\n }\n\n throw new RangeError('removeChildren: numeric values are outside the acceptable range.');\n }\n\n /** Sorts children by zIndex. Previous order is maintained for 2 children with the same zIndex. */\n sortChildren(): void\n {\n let sortRequired = false;\n\n for (let i = 0, j = this.children.length; i < j; ++i)\n {\n const child = this.children[i];\n\n child._lastSortedIndex = i;\n\n if (!sortRequired && child.zIndex !== 0)\n {\n sortRequired = true;\n }\n }\n\n if (sortRequired && this.children.length > 1)\n {\n this.children.sort(sortChildren);\n }\n\n this.sortDirty = false;\n }\n\n /** Updates the transform on all children of this container for rendering. */\n updateTransform(): void\n {\n if (this.sortableChildren && this.sortDirty)\n {\n this.sortChildren();\n }\n\n this._boundsID++;\n\n this.transform.updateTransform(this.parent.transform);\n\n // TODO: check render flags, how to process stuff here\n this.worldAlpha = this.alpha * this.parent.worldAlpha;\n\n for (let i = 0, j = this.children.length; i < j; ++i)\n {\n const child = this.children[i];\n\n if (child.visible)\n {\n child.updateTransform();\n }\n }\n }\n\n /**\n * Recalculates the bounds of the container.\n *\n * This implementation will automatically fit the children's bounds into the calculation. Each child's bounds\n * is limited to its mask's bounds or filterArea, if any is applied.\n */\n calculateBounds(): void\n {\n this._bounds.clear();\n\n this._calculateBounds();\n\n for (let i = 0; i < this.children.length; i++)\n {\n const child = this.children[i];\n\n if (!child.visible || !child.renderable)\n {\n continue;\n }\n\n child.calculateBounds();\n\n // TODO: filter+mask, need to mask both somehow\n if (child._mask)\n {\n const maskObject = ((child._mask as MaskData).isMaskData\n ? (child._mask as MaskData).maskObject : child._mask) as Container;\n\n if (maskObject)\n {\n maskObject.calculateBounds();\n this._bounds.addBoundsMask(child._bounds, maskObject._bounds);\n }\n else\n {\n this._bounds.addBounds(child._bounds);\n }\n }\n else if (child.filterArea)\n {\n this._bounds.addBoundsArea(child._bounds, child.filterArea);\n }\n else\n {\n this._bounds.addBounds(child._bounds);\n }\n }\n\n this._bounds.updateID = this._boundsID;\n }\n\n /**\n * Retrieves the local bounds of the displayObject as a rectangle object.\n *\n * Calling `getLocalBounds` may invalidate the `_bounds` of the whole subtree below. If using it inside a render()\n * call, it is advised to call `getBounds()` immediately after to recalculate the world bounds of the subtree.\n * @param rect - Optional rectangle to store the result of the bounds calculation.\n * @param skipChildrenUpdate - Setting to `true` will stop re-calculation of children transforms,\n * it was default behaviour of pixi 4.0-5.2 and caused many problems to users.\n * @returns - The rectangular bounding area.\n */\n public getLocalBounds(rect?: Rectangle, skipChildrenUpdate = false): Rectangle\n {\n const result = super.getLocalBounds(rect);\n\n if (!skipChildrenUpdate)\n {\n for (let i = 0, j = this.children.length; i < j; ++i)\n {\n const child = this.children[i];\n\n if (child.visible)\n {\n child.updateTransform();\n }\n }\n }\n\n return result;\n }\n\n /**\n * Recalculates the content bounds of this object. This should be overriden to\n * calculate the bounds of this specific object (not including children).\n * @protected\n */\n protected _calculateBounds(): void\n {\n // FILL IN//\n }\n\n /**\n * Renders this object and its children with culling.\n * @protected\n * @param {PIXI.Renderer} renderer - The renderer\n */\n protected _renderWithCulling(renderer: Renderer): void\n {\n const sourceFrame = renderer.renderTexture.sourceFrame;\n\n // If the source frame is empty, stop rendering.\n if (!(sourceFrame.width > 0 && sourceFrame.height > 0))\n {\n return;\n }\n\n // Render the content of the container only if its bounds intersect with the source frame.\n // All filters are on the stack at this point, and the filter source frame is bound:\n // therefore, even if the bounds to non intersect the filter frame, the filter\n // is still applied and any filter padding that is in the frame is rendered correctly.\n\n let bounds: Rectangle;\n let transform: Matrix;\n\n // If cullArea is set, we use this rectangle instead of the bounds of the object. The cullArea\n // rectangle must completely contain the container and its children including filter padding.\n if (this.cullArea)\n {\n bounds = this.cullArea;\n transform = this.worldTransform;\n }\n // If the container doesn't override _render, we can skip the bounds calculation and intersection test.\n else if (this._render !== Container.prototype._render)\n {\n bounds = this.getBounds(true);\n }\n\n // Prepend the transform that is appended to the projection matrix.\n const projectionTransform = renderer.projection.transform;\n\n if (projectionTransform)\n {\n if (transform)\n {\n transform = tempMatrix.copyFrom(transform);\n transform.prepend(projectionTransform);\n }\n else\n {\n transform = projectionTransform;\n }\n }\n\n // Render the container if the source frame intersects the bounds.\n if (bounds && sourceFrame.intersects(bounds, transform))\n {\n this._render(renderer);\n }\n // If the bounds are defined by cullArea and do not intersect with the source frame, stop rendering.\n else if (this.cullArea)\n {\n return;\n }\n\n // Unless cullArea is set, we cannot skip the children if the bounds of the container do not intersect\n // the source frame, because the children might have filters with nonzero padding, which may intersect\n // with the source frame while the bounds do not: filter padding is not included in the bounds.\n\n // If cullArea is not set, render the children with culling temporarily enabled so that they are not rendered\n // if they are out of frame; otherwise, render the children normally.\n for (let i = 0, j = this.children.length; i < j; ++i)\n {\n const child = this.children[i];\n const childCullable = child.cullable;\n\n child.cullable = childCullable || !this.cullArea;\n child.render(renderer);\n child.cullable = childCullable;\n }\n }\n\n /**\n * Renders the object using the WebGL renderer.\n *\n * The [_render]{@link PIXI.Container#_render} method is be overriden for rendering the contents of the\n * container itself. This `render` method will invoke it, and also invoke the `render` methods of all\n * children afterward.\n *\n * If `renderable` or `visible` is false or if `worldAlpha` is not positive or if `cullable` is true and\n * the bounds of this object are out of frame, this implementation will entirely skip rendering.\n * See {@link PIXI.DisplayObject} for choosing between `renderable` or `visible`. Generally,\n * setting alpha to zero is not recommended for purely skipping rendering.\n *\n * When your scene becomes large (especially when it is larger than can be viewed in a single screen), it is\n * advised to employ **culling** to automatically skip rendering objects outside of the current screen.\n * See [cullable]{@link PIXI.DisplayObject#cullable} and [cullArea]{@link PIXI.DisplayObject#cullArea}.\n * Other culling methods might be better suited for a large number static objects; see\n * [@pixi-essentials/cull]{@link https://www.npmjs.com/package/@pixi-essentials/cull} and\n * [pixi-cull]{@link https://www.npmjs.com/package/pixi-cull}.\n *\n * The [renderAdvanced]{@link PIXI.Container#renderAdvanced} method is internally used when when masking or\n * filtering is applied on a container. This does, however, break batching and can affect performance when\n * masking and filtering is applied extensively throughout the scene graph.\n * @param renderer - The renderer\n */\n render(renderer: Renderer): void\n {\n // if the object is not visible or the alpha is 0 then no need to render this element\n if (!this.visible || this.worldAlpha <= 0 || !this.renderable)\n {\n return;\n }\n\n // do a quick check to see if this element has a mask or a filter.\n if (this._mask || this.filters?.length)\n {\n this.renderAdvanced(renderer);\n }\n else if (this.cullable)\n {\n this._renderWithCulling(renderer);\n }\n else\n {\n this._render(renderer);\n\n for (let i = 0, j = this.children.length; i < j; ++i)\n {\n this.children[i].render(renderer);\n }\n }\n }\n\n /**\n * Render the object using the WebGL renderer and advanced features.\n * @param renderer - The renderer\n */\n protected renderAdvanced(renderer: Renderer): void\n {\n const filters = this.filters;\n const mask = this._mask as MaskData;\n\n // push filter first as we need to ensure the stencil buffer is correct for any masking\n if (filters)\n {\n if (!this._enabledFilters)\n {\n this._enabledFilters = [];\n }\n\n this._enabledFilters.length = 0;\n\n for (let i = 0; i < filters.length; i++)\n {\n if (filters[i].enabled)\n {\n this._enabledFilters.push(filters[i]);\n }\n }\n }\n\n const flush = (filters && this._enabledFilters?.length)\n || (mask && (!mask.isMaskData\n || (mask.enabled && (mask.autoDetect || mask.type !== MASK_TYPES.NONE))));\n\n if (flush)\n {\n renderer.batch.flush();\n }\n\n if (filters && this._enabledFilters?.length)\n {\n renderer.filter.push(this, this._enabledFilters);\n }\n\n if (mask)\n {\n renderer.mask.push(this, this._mask);\n }\n\n if (this.cullable)\n {\n this._renderWithCulling(renderer);\n }\n else\n {\n this._render(renderer);\n\n for (let i = 0, j = this.children.length; i < j; ++i)\n {\n this.children[i].render(renderer);\n }\n }\n\n if (flush)\n {\n renderer.batch.flush();\n }\n\n if (mask)\n {\n renderer.mask.pop(this);\n }\n\n if (filters && this._enabledFilters?.length)\n {\n renderer.filter.pop();\n }\n }\n\n /**\n * To be overridden by the subclasses.\n * @param _renderer - The renderer\n */\n protected _render(_renderer: Renderer): void // eslint-disable-line no-unused-vars\n {\n // this is where content itself gets rendered...\n }\n\n /**\n * Removes all internal references and listeners as well as removes children from the display list.\n * Do not use a Container after calling `destroy`.\n * @param options - Options parameter. A boolean will act as if all options\n * have been set to that value\n * @param {boolean} [options.children=false] - if set to true, all the children will have their destroy\n * method called as well. 'options' will be passed on to those calls.\n * @param {boolean} [options.texture=false] - Only used for child Sprites if options.children is set to true\n * Should it destroy the texture of the child sprite\n * @param {boolean} [options.baseTexture=false] - Only used for child Sprites if options.children is set to true\n * Should it destroy the base texture of the child sprite\n */\n destroy(options?: IDestroyOptions | boolean): void\n {\n super.destroy();\n\n this.sortDirty = false;\n\n const destroyChildren = typeof options === 'boolean' ? options : options?.children;\n\n const oldChildren = this.removeChildren(0, this.children.length);\n\n if (destroyChildren)\n {\n for (let i = 0; i < oldChildren.length; ++i)\n {\n oldChildren[i].destroy(options);\n }\n }\n }\n\n /** The width of the Container, setting this will actually modify the scale to achieve the value set. */\n get width(): number\n {\n return this.scale.x * this.getLocalBounds().width;\n }\n\n set width(value: number)\n {\n const width = this.getLocalBounds().width;\n\n if (width !== 0)\n {\n this.scale.x = value / width;\n }\n else\n {\n this.scale.x = 1;\n }\n\n this._width = value;\n }\n\n /** The height of the Container, setting this will actually modify the scale to achieve the value set. */\n get height(): number\n {\n return this.scale.y * this.getLocalBounds().height;\n }\n\n set height(value: number)\n {\n const height = this.getLocalBounds().height;\n\n if (height !== 0)\n {\n this.scale.y = value / height;\n }\n else\n {\n this.scale.y = 1;\n }\n\n this._height = value;\n }\n}\n\n/**\n * Container default updateTransform, does update children of container.\n * Will crash if there's no parent element.\n * @memberof PIXI.Container#\n * @method containerUpdateTransform\n */\nContainer.prototype.containerUpdateTransform = Container.prototype.updateTransform;\n","import { settings, utils } from '@pixi/core';\nimport { Container } from './Container';\n\nObject.defineProperties(settings, {\n /**\n * Sets the default value for the container property 'sortableChildren'.\n * @static\n * @name SORTABLE_CHILDREN\n * @memberof PIXI.settings\n * @deprecated since 7.1.0\n * @type {boolean}\n * @see PIXI.Container.defaultSortableChildren\n */\n SORTABLE_CHILDREN: {\n get()\n {\n return Container.defaultSortableChildren;\n },\n set(value: boolean)\n {\n if (process.env.DEBUG)\n {\n // eslint-disable-next-line max-len\n utils.deprecation('7.1.0', 'settings.SORTABLE_CHILDREN is deprecated, use Container.defaultSortableChildren');\n }\n Container.defaultSortableChildren = value;\n },\n },\n});\n\nexport { settings };\n","import { BLEND_MODES, Color, ObservablePoint, Point, Rectangle, settings, Texture, utils } from '@pixi/core';\nimport { Bounds, Container } from '@pixi/display';\n\nimport type { ColorSource, IBaseTextureOptions, IPointData, Renderer, TextureSource } from '@pixi/core';\nimport type { IDestroyOptions } from '@pixi/display';\n\nconst tempPoint = new Point();\nconst indices = new Uint16Array([0, 1, 2, 0, 2, 3]);\n\nexport type SpriteSource = TextureSource | Texture;\n\nexport interface Sprite extends GlobalMixins.Sprite, Container {}\n\n/**\n * The Sprite object is the base for all textured objects that are rendered to the screen\n *\n * A sprite can be created directly from an image like this:\n *\n * ```js\n * import { Sprite } from 'pixi.js';\n *\n * const sprite = Sprite.from('assets/image.png');\n * ```\n *\n * The more efficient way to create sprites is using a {@link PIXI.Spritesheet},\n * as swapping base textures when rendering to the screen is inefficient.\n *\n * ```js\n * import { Assets, Sprite } from 'pixi.js';\n *\n * const sheet = await Assets.load('assets/spritesheet.json');\n * const sprite = new Sprite(sheet.textures['image.png']);\n * ```\n * @memberof PIXI\n */\nexport class Sprite extends Container\n{\n /**\n * The blend mode to be applied to the sprite. Apply a value of `PIXI.BLEND_MODES.NORMAL` to reset the blend mode.\n * @default PIXI.BLEND_MODES.NORMAL\n */\n public blendMode: BLEND_MODES;\n public indices: Uint16Array;\n\n /**\n * Plugin that is responsible for rendering this element.\n * Allows to customize the rendering process without overriding '_render' & '_renderCanvas' methods.\n * @default 'batch'\n */\n public pluginName: string;\n\n /**\n * The width of the sprite (this is initially set by the texture).\n * @protected\n */\n _width: number;\n\n /**\n * The height of the sprite (this is initially set by the texture)\n * @protected\n */\n _height: number;\n\n /**\n * The texture that the sprite is using.\n * @private\n */\n _texture: Texture;\n _textureID: number;\n\n /**\n * Cached tint value so we can tell when the tint is changed.\n * Value is used for 2d CanvasRenderer.\n * @protected\n * @default 0xFFFFFF\n */\n _cachedTint: number;\n protected _textureTrimmedID: number;\n\n /**\n * This is used to store the uvs data of the sprite, assigned at the same time\n * as the vertexData in calculateVertices().\n * @member {Float32Array}\n */\n protected uvs: Float32Array;\n\n /**\n * The anchor point defines the normalized coordinates\n * in the texture that map to the position of this\n * sprite.\n *\n * By default, this is `(0,0)` (or `texture.defaultAnchor`\n * if you have modified that), which means the position\n * `(x,y)` of this `Sprite` will be the top-left corner.\n *\n * Note: Updating `texture.defaultAnchor` after\n * constructing a `Sprite` does _not_ update its anchor.\n *\n * {@link https://docs.cocos2d-x.org/cocos2d-x/en/sprites/manipulation.html}\n * @default `this.texture.defaultAnchor`\n */\n protected _anchor: ObservablePoint;\n\n /**\n * This is used to store the vertex data of the sprite (basically a quad).\n * @member {Float32Array}\n */\n protected vertexData: Float32Array;\n\n /**\n * This is used to calculate the bounds of the object IF it is a trimmed sprite.\n * @member {Float32Array}\n */\n private vertexTrimmedData: Float32Array;\n\n /**\n * Internal roundPixels field\n * @private\n */\n private _roundPixels: boolean;\n private _transformID: number;\n private _transformTrimmedID: number;\n\n /**\n * The tint applied to the sprite. This is a hex value. A value of 0xFFFFFF will remove any tint effect.\n * @default 0xFFFFFF\n */\n private _tintColor: Color;\n\n // Internal-only properties\n /**\n * The tint applied to the sprite. This is a RGB value. A value of 0xFFFFFF will remove any tint effect.\n * @private\n * @default 16777215\n */\n _tintRGB: number;\n\n /** @param texture - The texture for this sprite. */\n constructor(texture?: Texture)\n {\n super();\n\n this._anchor = new ObservablePoint(\n this._onAnchorUpdate,\n this,\n (texture ? texture.defaultAnchor.x : 0),\n (texture ? texture.defaultAnchor.y : 0)\n );\n\n this._texture = null;\n\n this._width = 0;\n this._height = 0;\n this._tintColor = new Color(0xFFFFFF);\n this._tintRGB = null;\n\n this.tint = 0xFFFFFF;\n this.blendMode = BLEND_MODES.NORMAL;\n this._cachedTint = 0xFFFFFF;\n this.uvs = null;\n\n // call texture setter\n this.texture = texture || Texture.EMPTY;\n this.vertexData = new Float32Array(8);\n this.vertexTrimmedData = null;\n\n this._transformID = -1;\n this._textureID = -1;\n\n this._transformTrimmedID = -1;\n this._textureTrimmedID = -1;\n\n // Batchable stuff..\n // TODO could make this a mixin?\n this.indices = indices;\n\n this.pluginName = 'batch';\n\n /**\n * Used to fast check if a sprite is.. a sprite!\n * @member {boolean}\n */\n this.isSprite = true;\n this._roundPixels = settings.ROUND_PIXELS;\n }\n\n /** When the texture is updated, this event will fire to update the scale and frame. */\n protected _onTextureUpdate(): void\n {\n this._textureID = -1;\n this._textureTrimmedID = -1;\n this._cachedTint = 0xFFFFFF;\n\n // so if _width is 0 then width was not set..\n if (this._width)\n {\n this.scale.x = utils.sign(this.scale.x) * this._width / this._texture.orig.width;\n }\n\n if (this._height)\n {\n this.scale.y = utils.sign(this.scale.y) * this._height / this._texture.orig.height;\n }\n }\n\n /** Called when the anchor position updates. */\n private _onAnchorUpdate(): void\n {\n this._transformID = -1;\n this._transformTrimmedID = -1;\n }\n\n /** Calculates worldTransform * vertices, store it in vertexData. */\n public calculateVertices(): void\n {\n const texture = this._texture;\n\n if (this._transformID === this.transform._worldID && this._textureID === texture._updateID)\n {\n return;\n }\n\n // update texture UV here, because base texture can be changed without calling `_onTextureUpdate`\n if (this._textureID !== texture._updateID)\n {\n this.uvs = this._texture._uvs.uvsFloat32;\n }\n\n this._transformID = this.transform._worldID;\n this._textureID = texture._updateID;\n\n // set the vertex data\n\n const wt = this.transform.worldTransform;\n const a = wt.a;\n const b = wt.b;\n const c = wt.c;\n const d = wt.d;\n const tx = wt.tx;\n const ty = wt.ty;\n const vertexData = this.vertexData;\n const trim = texture.trim;\n const orig = texture.orig;\n const anchor = this._anchor;\n\n let w0 = 0;\n let w1 = 0;\n let h0 = 0;\n let h1 = 0;\n\n if (trim)\n {\n // if the sprite is trimmed and is not a tilingsprite then we need to add the extra\n // space before transforming the sprite coords.\n w1 = trim.x - (anchor._x * orig.width);\n w0 = w1 + trim.width;\n\n h1 = trim.y - (anchor._y * orig.height);\n h0 = h1 + trim.height;\n }\n else\n {\n w1 = -anchor._x * orig.width;\n w0 = w1 + orig.width;\n\n h1 = -anchor._y * orig.height;\n h0 = h1 + orig.height;\n }\n\n // xy\n vertexData[0] = (a * w1) + (c * h1) + tx;\n vertexData[1] = (d * h1) + (b * w1) + ty;\n\n // xy\n vertexData[2] = (a * w0) + (c * h1) + tx;\n vertexData[3] = (d * h1) + (b * w0) + ty;\n\n // xy\n vertexData[4] = (a * w0) + (c * h0) + tx;\n vertexData[5] = (d * h0) + (b * w0) + ty;\n\n // xy\n vertexData[6] = (a * w1) + (c * h0) + tx;\n vertexData[7] = (d * h0) + (b * w1) + ty;\n\n if (this._roundPixels)\n {\n const resolution = settings.RESOLUTION;\n\n for (let i = 0; i < vertexData.length; ++i)\n {\n vertexData[i] = Math.round(vertexData[i] * resolution) / resolution;\n }\n }\n }\n\n /**\n * Calculates worldTransform * vertices for a non texture with a trim. store it in vertexTrimmedData.\n *\n * This is used to ensure that the true width and height of a trimmed texture is respected.\n */\n public calculateTrimmedVertices(): void\n {\n if (!this.vertexTrimmedData)\n {\n this.vertexTrimmedData = new Float32Array(8);\n }\n else if (this._transformTrimmedID === this.transform._worldID && this._textureTrimmedID === this._texture._updateID)\n {\n return;\n }\n\n this._transformTrimmedID = this.transform._worldID;\n this._textureTrimmedID = this._texture._updateID;\n\n // lets do some special trim code!\n const texture = this._texture;\n const vertexData = this.vertexTrimmedData;\n const orig = texture.orig;\n const anchor = this._anchor;\n\n // lets calculate the new untrimmed bounds..\n const wt = this.transform.worldTransform;\n const a = wt.a;\n const b = wt.b;\n const c = wt.c;\n const d = wt.d;\n const tx = wt.tx;\n const ty = wt.ty;\n\n const w1 = -anchor._x * orig.width;\n const w0 = w1 + orig.width;\n\n const h1 = -anchor._y * orig.height;\n const h0 = h1 + orig.height;\n\n // xy\n vertexData[0] = (a * w1) + (c * h1) + tx;\n vertexData[1] = (d * h1) + (b * w1) + ty;\n\n // xy\n vertexData[2] = (a * w0) + (c * h1) + tx;\n vertexData[3] = (d * h1) + (b * w0) + ty;\n\n // xy\n vertexData[4] = (a * w0) + (c * h0) + tx;\n vertexData[5] = (d * h0) + (b * w0) + ty;\n\n // xy\n vertexData[6] = (a * w1) + (c * h0) + tx;\n vertexData[7] = (d * h0) + (b * w1) + ty;\n\n if (this._roundPixels)\n {\n const resolution = settings.RESOLUTION;\n\n for (let i = 0; i < vertexData.length; ++i)\n {\n vertexData[i] = Math.round(vertexData[i] * resolution) / resolution;\n }\n }\n }\n\n /**\n *\n * Renders the object using the WebGL renderer\n * @param renderer - The webgl renderer to use.\n */\n protected _render(renderer: Renderer): void\n {\n this.calculateVertices();\n\n renderer.batch.setObjectRenderer(renderer.plugins[this.pluginName]);\n renderer.plugins[this.pluginName].render(this);\n }\n\n /** Updates the bounds of the sprite. */\n protected _calculateBounds(): void\n {\n const trim = this._texture.trim;\n const orig = this._texture.orig;\n\n // First lets check to see if the current texture has a trim..\n if (!trim || (trim.width === orig.width && trim.height === orig.height))\n {\n // no trim! lets use the usual calculations..\n this.calculateVertices();\n this._bounds.addQuad(this.vertexData);\n }\n else\n {\n // lets calculate a special trimmed bounds...\n this.calculateTrimmedVertices();\n this._bounds.addQuad(this.vertexTrimmedData);\n }\n }\n\n /**\n * Gets the local bounds of the sprite object.\n * @param rect - Optional output rectangle.\n * @returns The bounds.\n */\n public getLocalBounds(rect?: Rectangle): Rectangle\n {\n // we can do a fast local bounds if the sprite has no children!\n if (this.children.length === 0)\n {\n if (!this._localBounds)\n {\n this._localBounds = new Bounds();\n }\n\n this._localBounds.minX = this._texture.orig.width * -this._anchor._x;\n this._localBounds.minY = this._texture.orig.height * -this._anchor._y;\n this._localBounds.maxX = this._texture.orig.width * (1 - this._anchor._x);\n this._localBounds.maxY = this._texture.orig.height * (1 - this._anchor._y);\n\n if (!rect)\n {\n if (!this._localBoundsRect)\n {\n this._localBoundsRect = new Rectangle();\n }\n\n rect = this._localBoundsRect;\n }\n\n return this._localBounds.getRectangle(rect);\n }\n\n return super.getLocalBounds.call(this, rect);\n }\n\n /**\n * Tests if a point is inside this sprite\n * @param point - the point to test\n * @returns The result of the test\n */\n public containsPoint(point: IPointData): boolean\n {\n this.worldTransform.applyInverse(point, tempPoint);\n\n const width = this._texture.orig.width;\n const height = this._texture.orig.height;\n const x1 = -width * this.anchor.x;\n let y1 = 0;\n\n if (tempPoint.x >= x1 && tempPoint.x < x1 + width)\n {\n y1 = -height * this.anchor.y;\n\n if (tempPoint.y >= y1 && tempPoint.y < y1 + height)\n {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Destroys this sprite and optionally its texture and children.\n * @param options - Options parameter. A boolean will act as if all options\n * have been set to that value\n * @param [options.children=false] - if set to true, all the children will have their destroy\n * method called as well. 'options' will be passed on to those calls.\n * @param [options.texture=false] - Should it destroy the current texture of the sprite as well\n * @param [options.baseTexture=false] - Should it destroy the base texture of the sprite as well\n */\n public destroy(options?: IDestroyOptions | boolean): void\n {\n super.destroy(options);\n\n this._texture.off('update', this._onTextureUpdate, this);\n\n this._anchor = null;\n\n const destroyTexture = typeof options === 'boolean' ? options : options?.texture;\n\n if (destroyTexture)\n {\n const destroyBaseTexture = typeof options === 'boolean' ? options : options?.baseTexture;\n\n this._texture.destroy(!!destroyBaseTexture);\n }\n\n this._texture = null;\n }\n\n // some helper functions..\n\n /**\n * Helper function that creates a new sprite based on the source you provide.\n * The source can be - frame id, image url, video url, canvas element, video element, base texture\n * @param {string|PIXI.Texture|HTMLImageElement|HTMLVideoElement|ImageBitmap|PIXI.ICanvas} source\n * - Source to create texture from\n * @param {object} [options] - See {@link PIXI.BaseTexture}'s constructor for options.\n * @returns The newly created sprite\n */\n static from(source: SpriteSource, options?: IBaseTextureOptions): Sprite\n {\n const texture = (source instanceof Texture)\n ? source\n : Texture.from(source, options);\n\n return new Sprite(texture);\n }\n\n /**\n * If true PixiJS will Math.floor() x/y values when rendering, stopping pixel interpolation.\n *\n * Advantages can include sharper image quality (like text) and faster rendering on canvas.\n * The main disadvantage is movement of objects may appear less smooth.\n *\n * To set the global default, change {@link PIXI.settings.ROUND_PIXELS}.\n * @default false\n */\n set roundPixels(value: boolean)\n {\n if (this._roundPixels !== value)\n {\n this._transformID = -1;\n this._transformTrimmedID = -1;\n }\n this._roundPixels = value;\n }\n\n get roundPixels(): boolean\n {\n return this._roundPixels;\n }\n\n /** The width of the sprite, setting this will actually modify the scale to achieve the value set. */\n get width(): number\n {\n return Math.abs(this.scale.x) * this._texture.orig.width;\n }\n\n set width(value: number)\n {\n const s = utils.sign(this.scale.x) || 1;\n\n this.scale.x = s * value / this._texture.orig.width;\n this._width = value;\n }\n\n /** The height of the sprite, setting this will actually modify the scale to achieve the value set. */\n get height(): number\n {\n return Math.abs(this.scale.y) * this._texture.orig.height;\n }\n\n set height(value: number)\n {\n const s = utils.sign(this.scale.y) || 1;\n\n this.scale.y = s * value / this._texture.orig.height;\n this._height = value;\n }\n\n /**\n * The anchor sets the origin point of the sprite. The default value is taken from the {@link PIXI.Texture|Texture}\n * and passed to the constructor.\n *\n * The default is `(0,0)`, this means the sprite's origin is the top left.\n *\n * Setting the anchor to `(0.5,0.5)` means the sprite's origin is centered.\n *\n * Setting the anchor to `(1,1)` would mean the sprite's origin point will be the bottom right corner.\n *\n * If you pass only single parameter, it will set both x and y to the same value as shown in the example below.\n * @example\n * import { Sprite } from 'pixi.js';\n *\n * const sprite = new Sprite(Texture.WHITE);\n * sprite.anchor.set(0.5); // This will set the origin to center. (0.5) is same as (0.5, 0.5).\n */\n get anchor(): ObservablePoint\n {\n return this._anchor;\n }\n\n set anchor(value: ObservablePoint)\n {\n this._anchor.copyFrom(value);\n }\n\n /**\n * The tint applied to the sprite. This is a hex value.\n *\n * A value of 0xFFFFFF will remove any tint effect.\n * @default 0xFFFFFF\n */\n get tint(): ColorSource\n {\n return this._tintColor.value;\n }\n\n set tint(value: ColorSource)\n {\n this._tintColor.setValue(value);\n this._tintRGB = this._tintColor.toLittleEndianNumber();\n }\n\n /**\n * Get the tint as a RGB integer.\n * @ignore\n */\n get tintValue(): number\n {\n return this._tintColor.toNumber();\n }\n\n /** The texture that the sprite is using. */\n get texture(): Texture\n {\n return this._texture;\n }\n\n set texture(value: Texture)\n {\n if (this._texture === value)\n {\n return;\n }\n\n if (this._texture)\n {\n this._texture.off('update', this._onTextureUpdate, this);\n }\n\n this._texture = value || Texture.EMPTY;\n this._cachedTint = 0xFFFFFF;\n\n this._textureID = -1;\n this._textureTrimmedID = -1;\n\n if (value)\n {\n // wait for the texture to load\n if (value.baseTexture.valid)\n {\n this._onTextureUpdate();\n }\n else\n {\n value.once('update', this._onTextureUpdate, this);\n }\n }\n }\n}\n","/// \nimport { BaseTexture, Matrix, Rectangle, RenderTexture, Texture, utils } from '@pixi/core';\nimport { DisplayObject } from '@pixi/display';\nimport { Sprite } from '@pixi/sprite';\n\nimport type {\n ICanvasRenderingContext2D,\n IPointData,\n IRenderer,\n MaskData,\n MSAA_QUALITY,\n Renderer,\n} from '@pixi/core';\nimport type { Container, IDestroyOptions } from '@pixi/display';\n\n// Don't import CanvasRender to remove dependency on this optional package\n// this type should satisify these requirements for cacheAsBitmap types\ninterface CanvasRenderer extends IRenderer\n{\n canvasContext: {\n activeContext: ICanvasRenderingContext2D;\n }\n}\n\nconst _tempMatrix = new Matrix();\n\nDisplayObject.prototype._cacheAsBitmap = false;\nDisplayObject.prototype._cacheData = null;\nDisplayObject.prototype._cacheAsBitmapResolution = null;\nDisplayObject.prototype._cacheAsBitmapMultisample = null;\n\n// figured there's no point adding ALL the extra variables to prototype.\n// this model can hold the information needed. This can also be generated on demand as\n// most objects are not cached as bitmaps.\n/**\n * @class\n * @ignore\n * @private\n */\nexport class CacheData\n{\n public textureCacheId: string;\n public originalRender: (renderer: Renderer) => void;\n public originalRenderCanvas: (renderer: IRenderer) => void;\n public originalCalculateBounds: () => void;\n public originalGetLocalBounds: (rect?: Rectangle) => Rectangle;\n public originalUpdateTransform: () => void;\n public originalDestroy: (options?: IDestroyOptions | boolean) => void;\n public originalMask: Container | MaskData;\n public originalFilterArea: Rectangle;\n public originalContainsPoint: (point: IPointData) => boolean;\n public sprite: Sprite;\n\n constructor()\n {\n this.textureCacheId = null;\n\n this.originalRender = null;\n this.originalRenderCanvas = null;\n this.originalCalculateBounds = null;\n this.originalGetLocalBounds = null;\n\n this.originalUpdateTransform = null;\n this.originalDestroy = null;\n this.originalMask = null;\n this.originalFilterArea = null;\n this.originalContainsPoint = null;\n this.sprite = null;\n }\n}\n\nObject.defineProperties(DisplayObject.prototype, {\n /**\n * The resolution to use for cacheAsBitmap. By default this will use the renderer's resolution\n * but can be overriden for performance. Lower values will reduce memory usage at the expense\n * of render quality. A falsey value of `null` or `0` will default to the renderer's resolution.\n * If `cacheAsBitmap` is set to `true`, this will re-render with the new resolution.\n * @member {number|null} cacheAsBitmapResolution\n * @memberof PIXI.DisplayObject#\n * @default null\n */\n cacheAsBitmapResolution: {\n get(): number | null\n {\n return this._cacheAsBitmapResolution;\n },\n set(resolution: number | null): void\n {\n if (resolution === this._cacheAsBitmapResolution)\n {\n return;\n }\n\n this._cacheAsBitmapResolution = resolution;\n\n if (this.cacheAsBitmap)\n {\n // Toggle to re-render at the new resolution\n this.cacheAsBitmap = false;\n this.cacheAsBitmap = true;\n }\n },\n },\n\n /**\n * The number of samples to use for cacheAsBitmap. If set to `null`, the renderer's\n * sample count is used.\n * If `cacheAsBitmap` is set to `true`, this will re-render with the new number of samples.\n * @member {number|null} cacheAsBitmapMultisample\n * @memberof PIXI.DisplayObject#\n * @default null\n */\n cacheAsBitmapMultisample: {\n get(): MSAA_QUALITY | null\n {\n return this._cacheAsBitmapMultisample;\n },\n set(multisample: MSAA_QUALITY | null): void\n {\n if (multisample === this._cacheAsBitmapMultisample)\n {\n return;\n }\n\n this._cacheAsBitmapMultisample = multisample;\n\n if (this.cacheAsBitmap)\n {\n // Toggle to re-render with new multisample\n this.cacheAsBitmap = false;\n this.cacheAsBitmap = true;\n }\n },\n },\n\n /**\n * Set this to true if you want this display object to be cached as a bitmap.\n * This basically takes a snapshot of the display object as it is at that moment. It can\n * provide a performance benefit for complex static displayObjects.\n * To remove simply set this property to `false`\n *\n * IMPORTANT GOTCHA - Make sure that all your textures are preloaded BEFORE setting this property to true\n * as it will take a snapshot of what is currently there. If the textures have not loaded then they will not appear.\n * @member {boolean}\n * @memberof PIXI.DisplayObject#\n */\n cacheAsBitmap: {\n get(): CacheData\n {\n return this._cacheAsBitmap;\n },\n set(value: CacheData): void\n {\n if (this._cacheAsBitmap === value)\n {\n return;\n }\n\n this._cacheAsBitmap = value;\n\n let data: CacheData;\n\n if (value)\n {\n if (!this._cacheData)\n {\n this._cacheData = new CacheData();\n }\n\n data = this._cacheData;\n\n data.originalRender = this.render;\n data.originalRenderCanvas = this.renderCanvas;\n\n data.originalUpdateTransform = this.updateTransform;\n data.originalCalculateBounds = this.calculateBounds;\n data.originalGetLocalBounds = this.getLocalBounds;\n\n data.originalDestroy = this.destroy;\n\n data.originalContainsPoint = this.containsPoint;\n\n data.originalMask = this._mask;\n data.originalFilterArea = this.filterArea;\n\n this.render = this._renderCached;\n this.renderCanvas = this._renderCachedCanvas;\n\n this.destroy = this._cacheAsBitmapDestroy;\n }\n else\n {\n data = this._cacheData;\n\n if (data.sprite)\n {\n this._destroyCachedDisplayObject();\n }\n\n this.render = data.originalRender;\n this.renderCanvas = data.originalRenderCanvas;\n this.calculateBounds = data.originalCalculateBounds;\n this.getLocalBounds = data.originalGetLocalBounds;\n\n this.destroy = data.originalDestroy;\n\n this.updateTransform = data.originalUpdateTransform;\n this.containsPoint = data.originalContainsPoint;\n\n this._mask = data.originalMask;\n this.filterArea = data.originalFilterArea;\n }\n },\n },\n});\n\n/**\n * Renders a cached version of the sprite with WebGL\n * @private\n * @method _renderCached\n * @memberof PIXI.DisplayObject#\n * @param {PIXI.Renderer} renderer - the WebGL renderer\n */\nDisplayObject.prototype._renderCached = function _renderCached(renderer: Renderer): void\n{\n if (!this.visible || this.worldAlpha <= 0 || !this.renderable)\n {\n return;\n }\n\n this._initCachedDisplayObject(renderer);\n\n this._cacheData.sprite.transform._worldID = this.transform._worldID;\n this._cacheData.sprite.worldAlpha = this.worldAlpha;\n (this._cacheData.sprite as any)._render(renderer);\n};\n\n/**\n * Prepares the WebGL renderer to cache the sprite\n * @private\n * @method _initCachedDisplayObject\n * @memberof PIXI.DisplayObject#\n * @param {PIXI.Renderer} renderer - the WebGL renderer\n */\nDisplayObject.prototype._initCachedDisplayObject = function _initCachedDisplayObject(renderer: Renderer): void\n{\n if (this._cacheData?.sprite)\n {\n return;\n }\n\n // make sure alpha is set to 1 otherwise it will get rendered as invisible!\n const cacheAlpha = this.alpha;\n\n this.alpha = 1;\n\n // first we flush anything left in the renderer (otherwise it would get rendered to the cached texture)\n renderer.batch.flush();\n // this.filters= [];\n\n // next we find the dimensions of the untransformed object\n // this function also calls updatetransform on all its children as part of the measuring.\n // This means we don't need to update the transform again in this function\n // TODO pass an object to clone too? saves having to create a new one each time!\n const bounds = (this as Container).getLocalBounds(new Rectangle(), true);\n\n // add some padding!\n if (this.filters?.length)\n {\n const padding = this.filters[0].padding;\n\n bounds.pad(padding);\n }\n\n const resolution = this.cacheAsBitmapResolution || renderer.resolution;\n\n bounds.ceil(resolution);\n bounds.width = Math.max(bounds.width, 1 / resolution);\n bounds.height = Math.max(bounds.height, 1 / resolution);\n\n // for now we cache the current renderTarget that the WebGL renderer is currently using.\n // this could be more elegant..\n const cachedRenderTexture = renderer.renderTexture.current;\n const cachedSourceFrame = renderer.renderTexture.sourceFrame.clone();\n const cachedDestinationFrame = renderer.renderTexture.destinationFrame.clone();\n const cachedProjectionTransform = renderer.projection.transform;\n\n // We also store the filter stack - I will definitely look to change how this works a little later down the line.\n // const stack = renderer.filterManager.filterStack;\n\n // this renderTexture will be used to store the cached DisplayObject\n const renderTexture = RenderTexture.create({\n width: bounds.width,\n height: bounds.height,\n resolution,\n multisample: this.cacheAsBitmapMultisample ?? renderer.multisample,\n });\n\n const textureCacheId = `cacheAsBitmap_${utils.uid()}`;\n\n this._cacheData.textureCacheId = textureCacheId;\n\n BaseTexture.addToCache(renderTexture.baseTexture, textureCacheId);\n Texture.addToCache(renderTexture, textureCacheId);\n\n // need to set //\n const m = this.transform.localTransform.copyTo(_tempMatrix).invert().translate(-bounds.x, -bounds.y);\n\n // set all properties to there original so we can render to a texture\n this.render = this._cacheData.originalRender;\n\n renderer.render(this, { renderTexture, clear: true, transform: m, skipUpdateTransform: false });\n renderer.framebuffer.blit();\n\n // now restore the state be setting the new properties\n renderer.projection.transform = cachedProjectionTransform;\n renderer.renderTexture.bind(cachedRenderTexture, cachedSourceFrame, cachedDestinationFrame);\n\n // renderer.filterManager.filterStack = stack;\n\n this.render = this._renderCached;\n // the rest is the same as for Canvas\n this.updateTransform = this.displayObjectUpdateTransform;\n this.calculateBounds = this._calculateCachedBounds;\n this.getLocalBounds = this._getCachedLocalBounds;\n\n this._mask = null;\n this.filterArea = null;\n this.alpha = cacheAlpha;\n\n // create our cached sprite\n const cachedSprite = new Sprite(renderTexture);\n\n cachedSprite.transform.worldTransform = this.transform.worldTransform;\n cachedSprite.anchor.x = -(bounds.x / bounds.width);\n cachedSprite.anchor.y = -(bounds.y / bounds.height);\n cachedSprite.alpha = cacheAlpha;\n cachedSprite._bounds = this._bounds;\n\n this._cacheData.sprite = cachedSprite;\n\n this.transform._parentID = -1;\n // restore the transform of the cached sprite to avoid the nasty flicker..\n if (!this.parent)\n {\n this.enableTempParent();\n this.updateTransform();\n this.disableTempParent(null);\n }\n else\n {\n this.updateTransform();\n }\n\n // map the hit test..\n (this as Sprite).containsPoint = cachedSprite.containsPoint.bind(cachedSprite);\n};\n\n/**\n * Renders a cached version of the sprite with canvas\n * @private\n * @method _renderCachedCanvas\n * @memberof PIXI.DisplayObject#\n * @param {PIXI.CanvasRenderer} renderer - The canvas renderer\n */\nDisplayObject.prototype._renderCachedCanvas = function _renderCachedCanvas(renderer: IRenderer): void\n{\n if (!this.visible || this.worldAlpha <= 0 || !this.renderable)\n {\n return;\n }\n\n this._initCachedDisplayObjectCanvas(renderer);\n\n this._cacheData.sprite.worldAlpha = this.worldAlpha;\n (this._cacheData.sprite as any)._renderCanvas(renderer);\n};\n\n// TODO this can be the same as the WebGL version.. will need to do a little tweaking first though..\n/**\n * Prepares the Canvas renderer to cache the sprite\n * @private\n * @method _initCachedDisplayObjectCanvas\n * @memberof PIXI.DisplayObject#\n * @param {PIXI.CanvasRenderer} renderer - The canvas renderer\n */\nDisplayObject.prototype._initCachedDisplayObjectCanvas = function _initCachedDisplayObjectCanvas(\n renderer: CanvasRenderer\n): void\n{\n if (this._cacheData?.sprite)\n {\n return;\n }\n\n // get bounds actually transforms the object for us already!\n const bounds = (this as Container).getLocalBounds(new Rectangle(), true);\n\n const cacheAlpha = this.alpha;\n\n this.alpha = 1;\n\n const cachedRenderTarget = renderer.canvasContext.activeContext;\n const cachedProjectionTransform = (renderer as any)._projTransform;\n\n const resolution = this.cacheAsBitmapResolution || renderer.resolution;\n\n bounds.ceil(resolution);\n bounds.width = Math.max(bounds.width, 1 / resolution);\n bounds.height = Math.max(bounds.height, 1 / resolution);\n\n const renderTexture = RenderTexture.create({\n width: bounds.width,\n height: bounds.height,\n resolution\n });\n\n const textureCacheId = `cacheAsBitmap_${utils.uid()}`;\n\n this._cacheData.textureCacheId = textureCacheId;\n\n BaseTexture.addToCache(renderTexture.baseTexture, textureCacheId);\n Texture.addToCache(renderTexture, textureCacheId);\n\n // need to set //\n const m = _tempMatrix;\n\n this.transform.localTransform.copyTo(m);\n m.invert();\n\n m.tx -= bounds.x;\n m.ty -= bounds.y;\n\n // m.append(this.transform.worldTransform.)\n // set all properties to there original so we can render to a texture\n this.renderCanvas = this._cacheData.originalRenderCanvas;\n\n renderer.render(this, { renderTexture, clear: true, transform: m, skipUpdateTransform: false });\n // now restore the state be setting the new properties\n renderer.canvasContext.activeContext = cachedRenderTarget;\n (renderer as any)._projTransform = cachedProjectionTransform;\n\n this.renderCanvas = this._renderCachedCanvas;\n // the rest is the same as for WebGL\n this.updateTransform = this.displayObjectUpdateTransform;\n this.calculateBounds = this._calculateCachedBounds;\n this.getLocalBounds = this._getCachedLocalBounds;\n\n this._mask = null;\n this.filterArea = null;\n this.alpha = cacheAlpha;\n\n // create our cached sprite\n const cachedSprite = new Sprite(renderTexture);\n\n cachedSprite.transform.worldTransform = this.transform.worldTransform;\n cachedSprite.anchor.x = -(bounds.x / bounds.width);\n cachedSprite.anchor.y = -(bounds.y / bounds.height);\n cachedSprite.alpha = cacheAlpha;\n cachedSprite._bounds = this._bounds;\n\n this._cacheData.sprite = cachedSprite;\n\n this.transform._parentID = -1;\n // restore the transform of the cached sprite to avoid the nasty flicker..\n if (!this.parent)\n {\n this.parent = (renderer as any)._tempDisplayObjectParent;\n this.updateTransform();\n this.parent = null;\n }\n else\n {\n this.updateTransform();\n }\n\n // map the hit test..\n (this as Sprite).containsPoint = cachedSprite.containsPoint.bind(cachedSprite);\n};\n\n/**\n * Calculates the bounds of the cached sprite\n * @private\n * @method\n */\nDisplayObject.prototype._calculateCachedBounds = function _calculateCachedBounds(): void\n{\n this._bounds.clear();\n this._cacheData.sprite.transform._worldID = this.transform._worldID;\n (this._cacheData.sprite as any)._calculateBounds();\n this._bounds.updateID = (this as any)._boundsID;\n};\n\n/**\n * Gets the bounds of the cached sprite.\n * @private\n * @method\n * @returns {Rectangle} The local bounds.\n */\nDisplayObject.prototype._getCachedLocalBounds = function _getCachedLocalBounds(): Rectangle\n{\n return this._cacheData.sprite.getLocalBounds(null);\n};\n\n/**\n * Destroys the cached sprite.\n * @private\n * @method\n */\nDisplayObject.prototype._destroyCachedDisplayObject = function _destroyCachedDisplayObject(): void\n{\n this._cacheData.sprite._texture.destroy(true);\n this._cacheData.sprite = null;\n\n BaseTexture.removeFromCache(this._cacheData.textureCacheId);\n Texture.removeFromCache(this._cacheData.textureCacheId);\n\n this._cacheData.textureCacheId = null;\n};\n\n/**\n * Destroys the cached object.\n * @private\n * @method\n * @param {object|boolean} [options] - Options parameter. A boolean will act as if all options\n * have been set to that value.\n * Used when destroying containers, see the Container.destroy method.\n */\nDisplayObject.prototype._cacheAsBitmapDestroy = function _cacheAsBitmapDestroy(options?: IDestroyOptions | boolean): void\n{\n this.cacheAsBitmap = false;\n this.destroy(options);\n};\n","/// \nimport { Container, DisplayObject } from '@pixi/display';\n\n/**\n * The instance name of the object.\n * @memberof PIXI.DisplayObject#\n * @member {string} name\n */\nDisplayObject.prototype.name = null;\n\n/**\n * Returns the display object in the container.\n *\n * Recursive searches are done in a preorder traversal.\n * @method getChildByName\n * @memberof PIXI.Container#\n * @param {string} name - Instance name.\n * @param {boolean}[deep=false] - Whether to search recursively\n * @returns {PIXI.DisplayObject} The child with the specified name.\n */\nContainer.prototype.getChildByName = function getChildByName(\n name: string,\n deep?: boolean,\n): T | null\n{\n for (let i = 0, j = this.children.length; i < j; i++)\n {\n if (this.children[i].name === name)\n {\n return this.children[i];\n }\n }\n\n if (deep)\n {\n for (let i = 0, j = this.children.length; i < j; i++)\n {\n const child = (this.children[i] as Container);\n\n if (!child.getChildByName)\n {\n continue;\n }\n\n const target = child.getChildByName(name, true);\n\n if (target)\n {\n return target;\n }\n }\n }\n\n return null;\n};\n","/// \nimport { Point } from '@pixi/core';\nimport { DisplayObject } from '@pixi/display';\n\n/**\n * Returns the global position of the displayObject. Does not depend on object scale, rotation and pivot.\n * @method getGlobalPosition\n * @memberof PIXI.DisplayObject#\n * @param {PIXI.Point} [point=new PIXI.Point()] - The point to write the global value to.\n * @param {boolean} [skipUpdate=false] - Setting to true will stop the transforms of the scene graph from\n * being updated. This means the calculation returned MAY be out of date BUT will give you a\n * nice performance boost.\n * @returns {PIXI.Point} The updated point.\n */\nDisplayObject.prototype.getGlobalPosition = function getGlobalPosition(point: Point = new Point(), skipUpdate = false): Point\n{\n if (this.parent)\n {\n this.parent.toGlobal(this.position, point, skipUpdate);\n }\n else\n {\n point.x = this.position.x;\n point.y = this.position.y;\n }\n\n return point;\n};\n","interface IGAUSSIAN_VALUES\n{\n [x: number]: number[];\n}\nconst GAUSSIAN_VALUES: IGAUSSIAN_VALUES = {\n 5: [0.153388, 0.221461, 0.250301],\n 7: [0.071303, 0.131514, 0.189879, 0.214607],\n 9: [0.028532, 0.067234, 0.124009, 0.179044, 0.20236],\n 11: [0.0093, 0.028002, 0.065984, 0.121703, 0.175713, 0.198596],\n 13: [0.002406, 0.009255, 0.027867, 0.065666, 0.121117, 0.174868, 0.197641],\n 15: [0.000489, 0.002403, 0.009246, 0.02784, 0.065602, 0.120999, 0.174697, 0.197448],\n};\n\nconst fragTemplate = [\n 'varying vec2 vBlurTexCoords[%size%];',\n 'uniform sampler2D uSampler;',\n\n 'void main(void)',\n '{',\n ' gl_FragColor = vec4(0.0);',\n ' %blur%',\n '}',\n\n].join('\\n');\n\nexport function generateBlurFragSource(kernelSize: number): string\n{\n const kernel = GAUSSIAN_VALUES[kernelSize];\n const halfLength = kernel.length;\n\n let fragSource = fragTemplate;\n\n let blurLoop = '';\n const template = 'gl_FragColor += texture2D(uSampler, vBlurTexCoords[%index%]) * %value%;';\n let value: number;\n\n for (let i = 0; i < kernelSize; i++)\n {\n let blur = template.replace('%index%', i.toString());\n\n value = i;\n\n if (i >= halfLength)\n {\n value = kernelSize - i - 1;\n }\n\n blur = blur.replace('%value%', kernel[value].toString());\n\n blurLoop += blur;\n blurLoop += '\\n';\n }\n\n fragSource = fragSource.replace('%blur%', blurLoop);\n fragSource = fragSource.replace('%size%', kernelSize.toString());\n\n return fragSource;\n}\n","import { CLEAR_MODES, Filter } from '@pixi/core';\nimport { generateBlurFragSource } from './generateBlurFragSource';\nimport { generateBlurVertSource } from './generateBlurVertSource';\n\nimport type { FilterSystem, RenderTexture } from '@pixi/core';\n\n/**\n * The BlurFilterPass applies a horizontal or vertical Gaussian blur to an object.\n * @memberof PIXI\n */\nexport class BlurFilterPass extends Filter\n{\n public horizontal: boolean;\n public strength!: number;\n public passes!: number;\n\n private _quality: number;\n\n /**\n * @param horizontal - Do pass along the x-axis (`true`) or y-axis (`false`).\n * @param strength - The strength of the blur filter.\n * @param quality - The quality of the blur filter.\n * @param {number|null} [resolution=PIXI.Filter.defaultResolution] - The resolution of the blur filter.\n * @param kernelSize - The kernelSize of the blur filter.Options: 5, 7, 9, 11, 13, 15.\n */\n constructor(horizontal: boolean, strength = 8, quality = 4, resolution = Filter.defaultResolution, kernelSize = 5)\n {\n const vertSrc = generateBlurVertSource(kernelSize, horizontal);\n const fragSrc = generateBlurFragSource(kernelSize);\n\n super(\n // vertex shader\n vertSrc,\n // fragment shader\n fragSrc\n );\n\n this.horizontal = horizontal;\n\n this.resolution = resolution;\n\n this._quality = 0;\n\n this.quality = quality;\n\n this.blur = strength;\n }\n\n /**\n * Applies the filter.\n * @param filterManager - The manager.\n * @param input - The input target.\n * @param output - The output target.\n * @param clearMode - How to clear\n */\n public apply(\n filterManager: FilterSystem, input: RenderTexture, output: RenderTexture, clearMode: CLEAR_MODES\n ): void\n {\n if (output)\n {\n if (this.horizontal)\n {\n this.uniforms.strength = (1 / output.width) * (output.width / input.width);\n }\n else\n {\n this.uniforms.strength = (1 / output.height) * (output.height / input.height);\n }\n }\n else\n {\n if (this.horizontal) // eslint-disable-line\n {\n this.uniforms.strength = (1 / filterManager.renderer.width) * (filterManager.renderer.width / input.width);\n }\n else\n {\n this.uniforms.strength = (1 / filterManager.renderer.height) * (filterManager.renderer.height / input.height); // eslint-disable-line\n }\n }\n\n // screen space!\n this.uniforms.strength *= this.strength;\n this.uniforms.strength /= this.passes;\n\n if (this.passes === 1)\n {\n filterManager.applyFilter(this, input, output, clearMode);\n }\n else\n {\n const renderTarget = filterManager.getFilterTexture();\n const renderer = filterManager.renderer;\n\n let flip = input;\n let flop = renderTarget;\n\n this.state.blend = false;\n filterManager.applyFilter(this, flip, flop, CLEAR_MODES.CLEAR);\n\n for (let i = 1; i < this.passes - 1; i++)\n {\n filterManager.bindAndClear(flip, CLEAR_MODES.BLIT);\n\n this.uniforms.uSampler = flop;\n\n const temp = flop;\n\n flop = flip;\n flip = temp;\n\n renderer.shader.bind(this);\n renderer.geometry.draw(5);\n }\n\n this.state.blend = true;\n filterManager.applyFilter(this, flop, output, clearMode);\n filterManager.returnFilterTexture(renderTarget);\n }\n }\n /**\n * Sets the strength of both the blur.\n * @default 16\n */\n get blur(): number\n {\n return this.strength;\n }\n\n set blur(value: number)\n {\n this.padding = 1 + (Math.abs(value) * 2);\n this.strength = value;\n }\n\n /**\n * Sets the quality of the blur by modifying the number of passes. More passes means higher\n * quality bluring but the lower the performance.\n * @default 4\n */\n get quality(): number\n {\n return this._quality;\n }\n\n set quality(value: number)\n {\n this._quality = value;\n this.passes = value;\n }\n}\n","const vertTemplate = `\n attribute vec2 aVertexPosition;\n\n uniform mat3 projectionMatrix;\n\n uniform float strength;\n\n varying vec2 vBlurTexCoords[%size%];\n\n uniform vec4 inputSize;\n uniform vec4 outputFrame;\n\n vec4 filterVertexPosition( void )\n {\n vec2 position = aVertexPosition * max(outputFrame.zw, vec2(0.)) + outputFrame.xy;\n\n return vec4((projectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);\n }\n\n vec2 filterTextureCoord( void )\n {\n return aVertexPosition * (outputFrame.zw * inputSize.zw);\n }\n\n void main(void)\n {\n gl_Position = filterVertexPosition();\n\n vec2 textureCoord = filterTextureCoord();\n %blur%\n }`;\n\nexport function generateBlurVertSource(kernelSize: number, x: boolean): string\n{\n const halfLength = Math.ceil(kernelSize / 2);\n\n let vertSource = vertTemplate;\n\n let blurLoop = '';\n let template;\n\n if (x)\n {\n template = 'vBlurTexCoords[%index%] = textureCoord + vec2(%sampleIndex% * strength, 0.0);';\n }\n else\n {\n template = 'vBlurTexCoords[%index%] = textureCoord + vec2(0.0, %sampleIndex% * strength);';\n }\n\n for (let i = 0; i < kernelSize; i++)\n {\n let blur = template.replace('%index%', i.toString());\n\n blur = blur.replace('%sampleIndex%', `${i - (halfLength - 1)}.0`);\n\n blurLoop += blur;\n blurLoop += '\\n';\n }\n\n vertSource = vertSource.replace('%blur%', blurLoop);\n vertSource = vertSource.replace('%size%', kernelSize.toString());\n\n return vertSource;\n}\n","import { Color, defaultFilterVertex, Filter } from '@pixi/core';\nimport fragment from './colorMatrix.frag';\n\nimport type { utils } from '@pixi/core';\n\nexport type ColorMatrix = utils.ArrayFixed;\n\n/**\n * The ColorMatrixFilter class lets you apply a 5x4 matrix transformation on the RGBA\n * color and alpha values of every pixel on your displayObject to produce a result\n * with a new set of RGBA color and alpha values. It's pretty powerful!\n * @example\n * import { filters } from 'pixi.js';\n *\n * const colorMatrix = new filters.ColorMatrixFilter();\n * container.filters = [colorMatrix];\n * colorMatrix.contrast(2);\n * @author Clément Chenebault \n * @memberof PIXI\n */\nexport class ColorMatrixFilter extends Filter\n{\n constructor()\n {\n const uniforms = {\n m: new Float32Array([1, 0, 0, 0, 0,\n 0, 1, 0, 0, 0,\n 0, 0, 1, 0, 0,\n 0, 0, 0, 1, 0]),\n uAlpha: 1,\n };\n\n super(defaultFilterVertex, fragment, uniforms);\n\n this.alpha = 1;\n }\n\n /**\n * Transforms current matrix and set the new one\n * @param {number[]} matrix - 5x4 matrix\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n private _loadMatrix(matrix: ColorMatrix, multiply = false): void\n {\n let newMatrix = matrix;\n\n if (multiply)\n {\n this._multiply(newMatrix, this.uniforms.m, matrix);\n newMatrix = this._colorMatrix(newMatrix) as any;\n }\n\n // set the new matrix\n this.uniforms.m = newMatrix;\n }\n\n /**\n * Multiplies two mat5's\n * @private\n * @param out - 5x4 matrix the receiving matrix\n * @param a - 5x4 matrix the first operand\n * @param b - 5x4 matrix the second operand\n * @returns {number[]} 5x4 matrix\n */\n private _multiply(out: ColorMatrix, a: ColorMatrix, b: ColorMatrix): ColorMatrix\n {\n // Red Channel\n out[0] = (a[0] * b[0]) + (a[1] * b[5]) + (a[2] * b[10]) + (a[3] * b[15]);\n out[1] = (a[0] * b[1]) + (a[1] * b[6]) + (a[2] * b[11]) + (a[3] * b[16]);\n out[2] = (a[0] * b[2]) + (a[1] * b[7]) + (a[2] * b[12]) + (a[3] * b[17]);\n out[3] = (a[0] * b[3]) + (a[1] * b[8]) + (a[2] * b[13]) + (a[3] * b[18]);\n out[4] = (a[0] * b[4]) + (a[1] * b[9]) + (a[2] * b[14]) + (a[3] * b[19]) + a[4];\n\n // Green Channel\n out[5] = (a[5] * b[0]) + (a[6] * b[5]) + (a[7] * b[10]) + (a[8] * b[15]);\n out[6] = (a[5] * b[1]) + (a[6] * b[6]) + (a[7] * b[11]) + (a[8] * b[16]);\n out[7] = (a[5] * b[2]) + (a[6] * b[7]) + (a[7] * b[12]) + (a[8] * b[17]);\n out[8] = (a[5] * b[3]) + (a[6] * b[8]) + (a[7] * b[13]) + (a[8] * b[18]);\n out[9] = (a[5] * b[4]) + (a[6] * b[9]) + (a[7] * b[14]) + (a[8] * b[19]) + a[9];\n\n // Blue Channel\n out[10] = (a[10] * b[0]) + (a[11] * b[5]) + (a[12] * b[10]) + (a[13] * b[15]);\n out[11] = (a[10] * b[1]) + (a[11] * b[6]) + (a[12] * b[11]) + (a[13] * b[16]);\n out[12] = (a[10] * b[2]) + (a[11] * b[7]) + (a[12] * b[12]) + (a[13] * b[17]);\n out[13] = (a[10] * b[3]) + (a[11] * b[8]) + (a[12] * b[13]) + (a[13] * b[18]);\n out[14] = (a[10] * b[4]) + (a[11] * b[9]) + (a[12] * b[14]) + (a[13] * b[19]) + a[14];\n\n // Alpha Channel\n out[15] = (a[15] * b[0]) + (a[16] * b[5]) + (a[17] * b[10]) + (a[18] * b[15]);\n out[16] = (a[15] * b[1]) + (a[16] * b[6]) + (a[17] * b[11]) + (a[18] * b[16]);\n out[17] = (a[15] * b[2]) + (a[16] * b[7]) + (a[17] * b[12]) + (a[18] * b[17]);\n out[18] = (a[15] * b[3]) + (a[16] * b[8]) + (a[17] * b[13]) + (a[18] * b[18]);\n out[19] = (a[15] * b[4]) + (a[16] * b[9]) + (a[17] * b[14]) + (a[18] * b[19]) + a[19];\n\n return out;\n }\n\n /**\n * Create a Float32 Array and normalize the offset component to 0-1\n * @param {number[]} matrix - 5x4 matrix\n * @returns {number[]} 5x4 matrix with all values between 0-1\n */\n private _colorMatrix(matrix: ColorMatrix): ColorMatrix\n {\n // Create a Float32 Array and normalize the offset component to 0-1\n const m = new Float32Array(matrix);\n\n m[4] /= 255;\n m[9] /= 255;\n m[14] /= 255;\n m[19] /= 255;\n\n return m as any;\n }\n\n /**\n * Adjusts brightness\n * @param b - value of the brigthness (0-1, where 0 is black)\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public brightness(b: number, multiply: boolean): void\n {\n const matrix: ColorMatrix = [\n b, 0, 0, 0, 0,\n 0, b, 0, 0, 0,\n 0, 0, b, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * Sets each channel on the diagonal of the color matrix.\n * This can be used to achieve a tinting effect on Containers similar to the tint field of some\n * display objects like Sprite, Text, Graphics, and Mesh.\n * @param color - Color of the tint. This is a hex value.\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public tint(color: number, multiply?: boolean): void\n {\n const [r, g, b] = Color.shared.setValue(color).toArray();\n const matrix: ColorMatrix = [\n r, 0, 0, 0, 0,\n 0, g, 0, 0, 0,\n 0, 0, b, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * Set the matrices in grey scales\n * @param scale - value of the grey (0-1, where 0 is black)\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public greyscale(scale: number, multiply: boolean): void\n {\n const matrix: ColorMatrix = [\n scale, scale, scale, 0, 0,\n scale, scale, scale, 0, 0,\n scale, scale, scale, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * Americanized alias of greyscale.\n * @method\n * @param scale - value of the grey (0-1, where 0 is black)\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n * @returns {void}\n * @see PIXI.ColorMatrixFilter.greyscale\n */\n public grayscale!: (scale: number, multiply: boolean) => void;\n\n /**\n * Set the black and white matrice.\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public blackAndWhite(multiply: boolean): void\n {\n const matrix: ColorMatrix = [\n 0.3, 0.6, 0.1, 0, 0,\n 0.3, 0.6, 0.1, 0, 0,\n 0.3, 0.6, 0.1, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * Set the hue property of the color\n * @param rotation - in degrees\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public hue(rotation: number, multiply: boolean): void\n {\n rotation = (rotation || 0) / 180 * Math.PI;\n\n const cosR = Math.cos(rotation);\n const sinR = Math.sin(rotation);\n const sqrt = Math.sqrt;\n\n /* a good approximation for hue rotation\n This matrix is far better than the versions with magic luminance constants\n formerly used here, but also used in the starling framework (flash) and known from this\n old part of the internet: quasimondo.com/archives/000565.php\n\n This new matrix is based on rgb cube rotation in space. Look here for a more descriptive\n implementation as a shader not a general matrix:\n https://github.com/evanw/glfx.js/blob/58841c23919bd59787effc0333a4897b43835412/src/filters/adjust/huesaturation.js\n\n This is the source for the code:\n see http://stackoverflow.com/questions/8507885/shift-hue-of-an-rgb-color/8510751#8510751\n */\n\n const w = 1 / 3;\n const sqrW = sqrt(w); // weight is\n\n const a00 = cosR + ((1.0 - cosR) * w);\n const a01 = (w * (1.0 - cosR)) - (sqrW * sinR);\n const a02 = (w * (1.0 - cosR)) + (sqrW * sinR);\n\n const a10 = (w * (1.0 - cosR)) + (sqrW * sinR);\n const a11 = cosR + (w * (1.0 - cosR));\n const a12 = (w * (1.0 - cosR)) - (sqrW * sinR);\n\n const a20 = (w * (1.0 - cosR)) - (sqrW * sinR);\n const a21 = (w * (1.0 - cosR)) + (sqrW * sinR);\n const a22 = cosR + (w * (1.0 - cosR));\n\n const matrix: ColorMatrix = [\n a00, a01, a02, 0, 0,\n a10, a11, a12, 0, 0,\n a20, a21, a22, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * Set the contrast matrix, increase the separation between dark and bright\n * Increase contrast : shadows darker and highlights brighter\n * Decrease contrast : bring the shadows up and the highlights down\n * @param amount - value of the contrast (0-1)\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public contrast(amount: number, multiply: boolean): void\n {\n const v = (amount || 0) + 1;\n const o = -0.5 * (v - 1);\n\n const matrix: ColorMatrix = [\n v, 0, 0, 0, o,\n 0, v, 0, 0, o,\n 0, 0, v, 0, o,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * Set the saturation matrix, increase the separation between colors\n * Increase saturation : increase contrast, brightness, and sharpness\n * @param amount - The saturation amount (0-1)\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public saturate(amount = 0, multiply?: boolean): void\n {\n const x = (amount * 2 / 3) + 1;\n const y = ((x - 1) * -0.5);\n\n const matrix: ColorMatrix = [\n x, y, y, 0, 0,\n y, x, y, 0, 0,\n y, y, x, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /** Desaturate image (remove color) Call the saturate function */\n public desaturate(): void // eslint-disable-line no-unused-vars\n {\n this.saturate(-1);\n }\n\n /**\n * Negative image (inverse of classic rgb matrix)\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public negative(multiply: boolean): void\n {\n const matrix: ColorMatrix = [\n -1, 0, 0, 1, 0,\n 0, -1, 0, 1, 0,\n 0, 0, -1, 1, 0,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * Sepia image\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public sepia(multiply: boolean): void\n {\n const matrix: ColorMatrix = [\n 0.393, 0.7689999, 0.18899999, 0, 0,\n 0.349, 0.6859999, 0.16799999, 0, 0,\n 0.272, 0.5339999, 0.13099999, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * Color motion picture process invented in 1916 (thanks Dominic Szablewski)\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public technicolor(multiply: boolean): void\n {\n const matrix: ColorMatrix = [\n 1.9125277891456083, -0.8545344976951645, -0.09155508482755585, 0, 11.793603434377337,\n -0.3087833385928097, 1.7658908555458428, -0.10601743074722245, 0, -70.35205161461398,\n -0.231103377548616, -0.7501899197440212, 1.847597816108189, 0, 30.950940869491138,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * Polaroid filter\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public polaroid(multiply: boolean): void\n {\n const matrix: ColorMatrix = [\n 1.438, -0.062, -0.062, 0, 0,\n -0.122, 1.378, -0.122, 0, 0,\n -0.016, -0.016, 1.483, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * Filter who transforms : Red -> Blue and Blue -> Red\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public toBGR(multiply: boolean): void\n {\n const matrix: ColorMatrix = [\n 0, 0, 1, 0, 0,\n 0, 1, 0, 0, 0,\n 1, 0, 0, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * Color reversal film introduced by Eastman Kodak in 1935. (thanks Dominic Szablewski)\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public kodachrome(multiply: boolean): void\n {\n const matrix: ColorMatrix = [\n 1.1285582396593525, -0.3967382283601348, -0.03992559172921793, 0, 63.72958762196502,\n -0.16404339962244616, 1.0835251566291304, -0.05498805115633132, 0, 24.732407896706203,\n -0.16786010706155763, -0.5603416277695248, 1.6014850761964943, 0, 35.62982807460946,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * Brown delicious browni filter (thanks Dominic Szablewski)\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public browni(multiply: boolean): void\n {\n const matrix: ColorMatrix = [\n 0.5997023498159715, 0.34553243048391263, -0.2708298674538042, 0, 47.43192855600873,\n -0.037703249837783157, 0.8609577587992641, 0.15059552388459913, 0, -36.96841498319127,\n 0.24113635128153335, -0.07441037908422492, 0.44972182064877153, 0, -7.562075277591283,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * Vintage filter (thanks Dominic Szablewski)\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public vintage(multiply: boolean): void\n {\n const matrix: ColorMatrix = [\n 0.6279345635605994, 0.3202183420819367, -0.03965408211312453, 0, 9.651285835294123,\n 0.02578397704808868, 0.6441188644374771, 0.03259127616149294, 0, 7.462829176470591,\n 0.0466055556782719, -0.0851232987247891, 0.5241648018700465, 0, 5.159190588235296,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * We don't know exactly what it does, kind of gradient map, but funny to play with!\n * @param desaturation - Tone values.\n * @param toned - Tone values.\n * @param lightColor - Tone values, example: `0xFFE580`\n * @param darkColor - Tone values, example: `0xFFE580`\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public colorTone(desaturation: number, toned: number, lightColor: number, darkColor: number, multiply: boolean): void\n {\n desaturation = desaturation || 0.2;\n toned = toned || 0.15;\n lightColor = lightColor || 0xFFE580;\n darkColor = darkColor || 0x338000;\n\n const temp = Color.shared;\n const [lR, lG, lB] = temp.setValue(lightColor).toArray();\n const [dR, dG, dB] = temp.setValue(darkColor).toArray();\n\n const matrix: ColorMatrix = [\n 0.3, 0.59, 0.11, 0, 0,\n lR, lG, lB, desaturation, 0,\n dR, dG, dB, toned, 0,\n lR - dR, lG - dG, lB - dB, 0, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * Night effect\n * @param intensity - The intensity of the night effect.\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public night(intensity: number, multiply: boolean): void\n {\n intensity = intensity || 0.1;\n\n const matrix: ColorMatrix = [\n intensity * (-2.0), -intensity, 0, 0, 0,\n -intensity, 0, intensity, 0, 0,\n 0, intensity, intensity * 2.0, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * Predator effect\n *\n * Erase the current matrix by setting a new indepent one\n * @param amount - how much the predator feels his future victim\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public predator(amount: number, multiply: boolean): void\n {\n const matrix: ColorMatrix = [\n // row 1\n 11.224130630493164 * amount,\n -4.794486999511719 * amount,\n -2.8746118545532227 * amount,\n 0 * amount,\n 0.40342438220977783 * amount,\n // row 2\n -3.6330697536468506 * amount,\n 9.193157196044922 * amount,\n -2.951810836791992 * amount,\n 0 * amount,\n -1.316135048866272 * amount,\n // row 3\n -3.2184197902679443 * amount,\n -4.2375030517578125 * amount,\n 7.476448059082031 * amount,\n 0 * amount,\n 0.8044459223747253 * amount,\n // row 4\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /**\n * LSD effect\n *\n * Multiply the current matrix\n * @param multiply - if true, current matrix and matrix are multiplied. If false,\n * just set the current matrix with @param matrix\n */\n public lsd(multiply: boolean): void\n {\n const matrix: ColorMatrix = [\n 2, -0.4, 0.5, 0, 0,\n -0.5, 2, -0.4, 0, 0,\n -0.4, -0.5, 3, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, multiply);\n }\n\n /** Erase the current matrix by setting the default one. */\n public reset(): void\n {\n const matrix: ColorMatrix = [\n 1, 0, 0, 0, 0,\n 0, 1, 0, 0, 0,\n 0, 0, 1, 0, 0,\n 0, 0, 0, 1, 0,\n ];\n\n this._loadMatrix(matrix, false);\n }\n\n /**\n * The matrix of the color matrix filter\n * @member {number[]}\n * @default [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0]\n */\n get matrix(): ColorMatrix\n {\n return this.uniforms.m;\n }\n\n set matrix(value: ColorMatrix)\n {\n this.uniforms.m = value;\n }\n\n /**\n * The opacity value to use when mixing the original and resultant colors.\n *\n * When the value is 0, the original color is used without modification.\n * When the value is 1, the result color is used.\n * When in the range (0, 1) the color is interpolated between the original and result by this amount.\n * @default 1\n */\n get alpha(): number\n {\n return this.uniforms.uAlpha;\n }\n\n set alpha(value: number)\n {\n this.uniforms.uAlpha = value;\n }\n}\n\n// Americanized alias\nColorMatrixFilter.prototype.grayscale = ColorMatrixFilter.prototype.greyscale;\n","import { utils } from '@pixi/core';\nimport { AlphaFilter } from '@pixi/filter-alpha';\nimport { BlurFilter, BlurFilterPass } from '@pixi/filter-blur';\nimport { ColorMatrixFilter } from '@pixi/filter-color-matrix';\nimport { DisplacementFilter } from '@pixi/filter-displacement';\nimport { FXAAFilter } from '@pixi/filter-fxaa';\nimport { NoiseFilter } from '@pixi/filter-noise';\n\n/**\n * Filters namespace has been removed. All filters are now available directly from the root of the package.\n * @namespace PIXI.filters\n * @deprecated\n */\nconst filters = {\n /**\n * @class\n * @memberof PIXI.filters\n * @deprecated since 7.1.0\n * @see PIXI.AlphaFilter\n */\n AlphaFilter,\n /**\n * @class\n * @memberof PIXI.filters\n * @deprecated since 7.1.0\n * @see PIXI.BlurFilter\n */\n BlurFilter,\n /**\n * @class\n * @memberof PIXI.filters\n * @deprecated since 7.1.0\n * @see PIXI.BlurFilterPass\n */\n BlurFilterPass,\n /**\n * @class\n * @memberof PIXI.filters\n * @deprecated since 7.1.0\n * @see PIXI.ColorMatrixFilter\n */\n ColorMatrixFilter,\n /**\n * @class\n * @memberof PIXI.filters\n * @deprecated since 7.1.0\n * @see PIXI.DisplacementFilter\n */\n DisplacementFilter,\n /**\n * @class\n * @memberof PIXI.filters\n * @deprecated since 7.1.0\n * @see PIXI.FXAAFilter\n */\n FXAAFilter,\n /**\n * @class\n * @memberof PIXI.filters\n * @deprecated since 7.1.0\n * @see PIXI.NoiseFilter\n */\n NoiseFilter,\n};\n\nObject.entries(filters).forEach(([key, FilterClass]) =>\n{\n Object.defineProperty(filters, key, {\n get()\n {\n // #if _DEBUG\n utils.deprecation('7.1.0', `filters.${key} has moved to ${key}`);\n // #endif\n\n return FilterClass;\n },\n });\n});\n\nexport { filters };\n","import { defaultVertex, Filter } from '@pixi/core';\nimport fragment from './alpha.frag';\n\n/**\n * Simplest filter - applies alpha.\n *\n * Use this instead of Container's alpha property to avoid visual layering of individual elements.\n * AlphaFilter applies alpha evenly across the entire display object and any opaque elements it contains.\n * If elements are not opaque, they will blend with each other anyway.\n *\n * Very handy if you want to use common features of all filters:\n *\n * 1. Assign a blendMode to this filter, blend all elements inside display object with background.\n *\n * 2. To use clipping in display coordinates, assign a filterArea to the same container that has this filter.\n * @memberof PIXI\n */\nexport class AlphaFilter extends Filter\n{\n /**\n * @param alpha - Amount of alpha from 0 to 1, where 0 is transparent\n */\n constructor(alpha = 1.0)\n {\n super(defaultVertex, fragment, { uAlpha: 1 });\n\n this.alpha = alpha;\n }\n\n /**\n * Coefficient for alpha multiplication\n * @default 1\n */\n get alpha(): number\n {\n return this.uniforms.uAlpha;\n }\n\n set alpha(value: number)\n {\n this.uniforms.uAlpha = value;\n }\n}\n","import { CLEAR_MODES, Filter } from '@pixi/core';\nimport { BlurFilterPass } from './BlurFilterPass';\n\nimport type { BLEND_MODES, FilterSystem, RenderTexture } from '@pixi/core';\n\n/**\n * The BlurFilter applies a Gaussian blur to an object.\n *\n * The strength of the blur can be set for the x-axis and y-axis separately.\n * @memberof PIXI\n */\nexport class BlurFilter extends Filter\n{\n public blurXFilter: BlurFilterPass;\n public blurYFilter: BlurFilterPass;\n\n private _repeatEdgePixels = false;\n\n /**\n * @param strength - The strength of the blur filter.\n * @param quality - The quality of the blur filter.\n * @param {number|null} [resolution=PIXI.Filter.defaultResolution] - The resolution of the blur filter.\n * @param kernelSize - The kernelSize of the blur filter.Options: 5, 7, 9, 11, 13, 15.\n */\n constructor(strength = 8, quality = 4, resolution = Filter.defaultResolution, kernelSize = 5)\n {\n super();\n\n this.blurXFilter = new BlurFilterPass(true, strength, quality, resolution, kernelSize);\n this.blurYFilter = new BlurFilterPass(false, strength, quality, resolution, kernelSize);\n\n this.resolution = resolution;\n this.quality = quality;\n this.blur = strength;\n\n this.repeatEdgePixels = false;\n }\n\n /**\n * Applies the filter.\n * @param filterManager - The manager.\n * @param input - The input target.\n * @param output - The output target.\n * @param clearMode - How to clear\n */\n apply(filterManager: FilterSystem, input: RenderTexture, output: RenderTexture, clearMode: CLEAR_MODES): void\n {\n const xStrength = Math.abs(this.blurXFilter.strength);\n const yStrength = Math.abs(this.blurYFilter.strength);\n\n if (xStrength && yStrength)\n {\n const renderTarget = filterManager.getFilterTexture();\n\n this.blurXFilter.apply(filterManager, input, renderTarget, CLEAR_MODES.CLEAR);\n this.blurYFilter.apply(filterManager, renderTarget, output, clearMode);\n\n filterManager.returnFilterTexture(renderTarget);\n }\n else if (yStrength)\n {\n this.blurYFilter.apply(filterManager, input, output, clearMode);\n }\n else\n {\n this.blurXFilter.apply(filterManager, input, output, clearMode);\n }\n }\n\n protected updatePadding(): void\n {\n if (this._repeatEdgePixels)\n {\n this.padding = 0;\n }\n else\n {\n this.padding = Math.max(Math.abs(this.blurXFilter.strength), Math.abs(this.blurYFilter.strength)) * 2;\n }\n }\n\n /**\n * Sets the strength of both the blurX and blurY properties simultaneously\n * @default 2\n */\n get blur(): number\n {\n return this.blurXFilter.blur;\n }\n\n set blur(value: number)\n {\n this.blurXFilter.blur = this.blurYFilter.blur = value;\n this.updatePadding();\n }\n\n /**\n * Sets the number of passes for blur. More passes means higher quality bluring.\n * @default 1\n */\n get quality(): number\n {\n return this.blurXFilter.quality;\n }\n\n set quality(value: number)\n {\n this.blurXFilter.quality = this.blurYFilter.quality = value;\n }\n\n /**\n * Sets the strength of the blurX property\n * @default 2\n */\n get blurX(): number\n {\n return this.blurXFilter.blur;\n }\n\n set blurX(value: number)\n {\n this.blurXFilter.blur = value;\n this.updatePadding();\n }\n\n /**\n * Sets the strength of the blurY property\n * @default 2\n */\n get blurY(): number\n {\n return this.blurYFilter.blur;\n }\n\n set blurY(value: number)\n {\n this.blurYFilter.blur = value;\n this.updatePadding();\n }\n\n /**\n * Sets the blendmode of the filter\n * @default PIXI.BLEND_MODES.NORMAL\n */\n get blendMode(): BLEND_MODES\n {\n return this.blurYFilter.blendMode;\n }\n\n set blendMode(value: BLEND_MODES)\n {\n this.blurYFilter.blendMode = value;\n }\n\n /**\n * If set to true the edge of the target will be clamped\n * @default false\n */\n get repeatEdgePixels(): boolean\n {\n return this._repeatEdgePixels;\n }\n\n set repeatEdgePixels(value: boolean)\n {\n this._repeatEdgePixels = value;\n this.updatePadding();\n }\n}\n","import { Filter, Matrix, Point } from '@pixi/core';\nimport fragment from './displacement.frag';\nimport vertex from './displacement.vert';\n\nimport type { CLEAR_MODES, FilterSystem, ISpriteMaskTarget, RenderTexture, Texture } from '@pixi/core';\n\n/**\n * The DisplacementFilter class uses the pixel values from the specified texture\n * (called the displacement map) to perform a displacement of an object.\n *\n * You can use this filter to apply all manor of crazy warping effects.\n * Currently the `r` property of the texture is used to offset the `x`\n * and the `g` property of the texture is used to offset the `y`.\n *\n * The way it works is it uses the values of the displacement map to look up the\n * correct pixels to output. This means it's not technically moving the original.\n * Instead, it's starting at the output and asking \"which pixel from the original goes here\".\n * For example, if a displacement map pixel has `red = 1` and the filter scale is `20`,\n * this filter will output the pixel approximately 20 pixels to the right of the original.\n * @memberof PIXI\n */\nexport class DisplacementFilter extends Filter\n{\n public maskSprite: ISpriteMaskTarget;\n public maskMatrix: Matrix;\n public scale: Point;\n\n /**\n * @param {PIXI.Sprite} sprite - The sprite used for the displacement map. (make sure its added to the scene!)\n * @param scale - The scale of the displacement\n */\n constructor(sprite: ISpriteMaskTarget, scale?: number)\n {\n const maskMatrix = new Matrix();\n\n sprite.renderable = false;\n\n super(vertex, fragment, {\n mapSampler: sprite._texture,\n filterMatrix: maskMatrix,\n scale: { x: 1, y: 1 },\n rotation: new Float32Array([1, 0, 0, 1]),\n });\n\n this.maskSprite = sprite;\n this.maskMatrix = maskMatrix;\n\n if (scale === null || scale === undefined)\n {\n scale = 20;\n }\n\n /**\n * scaleX, scaleY for displacements\n * @member {PIXI.Point}\n */\n this.scale = new Point(scale, scale);\n }\n\n /**\n * Applies the filter.\n * @param filterManager - The manager.\n * @param input - The input target.\n * @param output - The output target.\n * @param clearMode - clearMode.\n */\n public apply(\n filterManager: FilterSystem, input: RenderTexture, output: RenderTexture, clearMode: CLEAR_MODES\n ): void\n {\n // fill maskMatrix with _normalized sprite texture coords_\n this.uniforms.filterMatrix = filterManager.calculateSpriteMatrix(this.maskMatrix, this.maskSprite);\n this.uniforms.scale.x = this.scale.x;\n this.uniforms.scale.y = this.scale.y;\n\n // Extract rotation from world transform\n const wt = this.maskSprite.worldTransform;\n const lenX = Math.sqrt((wt.a * wt.a) + (wt.b * wt.b));\n const lenY = Math.sqrt((wt.c * wt.c) + (wt.d * wt.d));\n\n if (lenX !== 0 && lenY !== 0)\n {\n this.uniforms.rotation[0] = wt.a / lenX;\n this.uniforms.rotation[1] = wt.b / lenX;\n this.uniforms.rotation[2] = wt.c / lenY;\n this.uniforms.rotation[3] = wt.d / lenY;\n }\n\n // draw the filter...\n filterManager.applyFilter(this, input, output, clearMode);\n }\n\n /** The texture used for the displacement map. Must be power of 2 sized texture. */\n get map(): Texture\n {\n return this.uniforms.mapSampler;\n }\n\n set map(value: Texture)\n {\n this.uniforms.mapSampler = value;\n }\n}\n","import { Filter } from '@pixi/core';\nimport fragment from './fxaa.frag';\nimport vertex from './fxaa.vert';\n\n/**\n * Basic FXAA (Fast Approximate Anti-Aliasing) implementation based on the code on geeks3d.com\n * with the modification that the texture2DLod stuff was removed since it is unsupported by WebGL.\n * @see https://github.com/mitsuhiko/webgl-meincraft\n * @memberof PIXI\n */\nexport class FXAAFilter extends Filter\n{\n constructor()\n {\n // TODO - needs work\n super(vertex, fragment);\n }\n}\n","import { defaultFilterVertex, Filter } from '@pixi/core';\nimport fragment from './noise.frag';\n\n/**\n * A Noise effect filter.\n *\n * original filter: https://github.com/evanw/glfx.js/blob/master/src/filters/adjust/noise.js\n * @memberof PIXI\n * @author Vico @vicocotea\n */\nexport class NoiseFilter extends Filter\n{\n /**\n * @param {number} [noise=0.5] - The noise intensity, should be a normalized value in the range [0, 1].\n * @param {number} [seed] - A random seed for the noise generation. Default is `Math.random()`.\n */\n constructor(noise = 0.5, seed = Math.random())\n {\n super(defaultFilterVertex, fragment, {\n uNoise: 0,\n uSeed: 0,\n });\n\n this.noise = noise;\n this.seed = seed;\n }\n\n /**\n * The amount of noise to apply, this value should be in the range (0, 1].\n * @default 0.5\n */\n get noise(): number\n {\n return this.uniforms.uNoise;\n }\n\n set noise(value: number)\n {\n this.uniforms.uNoise = value;\n }\n\n /** A seed value to apply to the random noise generation. `Math.random()` is a good value to use. */\n get seed(): number\n {\n return this.uniforms.uSeed;\n }\n\n set seed(value: number)\n {\n this.uniforms.uSeed = value;\n }\n}\n","import { Ticker, UPDATE_PRIORITY } from '@pixi/core';\n\nimport type { EventSystem } from './EventSystem';\n\n/**\n * This class handles automatic firing of PointerEvents\n * in the case where the pointer is stationary for too long.\n * This is to ensure that hit-tests are still run on moving objects.\n * @memberof PIXI\n * @since 7.2.0\n * @see PIXI.EventsTicker\n */\nclass EventsTickerClass\n{\n /** The event system. */\n public events: EventSystem;\n /** The DOM element to listen to events on. */\n public domElement: HTMLElement;\n /** The frequency that fake events will be fired. */\n public interactionFrequency = 10;\n\n private _deltaTime = 0;\n private _didMove = false;\n private tickerAdded = false;\n private _pauseUpdate = true;\n\n /**\n * Initializes the event ticker.\n * @param events - The event system.\n */\n public init(events: EventSystem): void\n {\n this.removeTickerListener();\n this.events = events;\n this.interactionFrequency = 10;\n this._deltaTime = 0;\n this._didMove = false;\n this.tickerAdded = false;\n this._pauseUpdate = true;\n }\n\n /** Whether to pause the update checks or not. */\n get pauseUpdate(): boolean\n {\n return this._pauseUpdate;\n }\n\n set pauseUpdate(paused: boolean)\n {\n this._pauseUpdate = paused;\n }\n\n /** Adds the ticker listener. */\n public addTickerListener(): void\n {\n if (this.tickerAdded || !this.domElement)\n {\n return;\n }\n\n Ticker.system.add(this.tickerUpdate, this, UPDATE_PRIORITY.INTERACTION);\n\n this.tickerAdded = true;\n }\n\n /** Removes the ticker listener. */\n public removeTickerListener(): void\n {\n if (!this.tickerAdded)\n {\n return;\n }\n\n Ticker.system.remove(this.tickerUpdate, this);\n\n this.tickerAdded = false;\n }\n\n /** Sets flag to not fire extra events when the user has already moved there mouse */\n public pointerMoved(): void\n {\n this._didMove = true;\n }\n\n /** Updates the state of interactive objects. */\n private update(): void\n {\n if (!this.domElement || this._pauseUpdate)\n {\n return;\n }\n\n // if the user move the mouse this check has already been done using the mouse move!\n if (this._didMove)\n {\n this._didMove = false;\n\n return;\n }\n\n // eslint-disable-next-line dot-notation\n const rootPointerEvent = this.events['rootPointerEvent'];\n\n if (this.events.supportsTouchEvents && (rootPointerEvent as PointerEvent).pointerType === 'touch')\n {\n return;\n }\n\n globalThis.document.dispatchEvent(new PointerEvent('pointermove', {\n clientX: rootPointerEvent.clientX,\n clientY: rootPointerEvent.clientY,\n }));\n }\n\n /**\n * Updates the state of interactive objects if at least {@link PIXI.EventsTicker#interactionFrequency}\n * milliseconds have passed since the last invocation.\n *\n * Invoked by a throttled ticker update from {@link PIXI.Ticker.system}.\n * @param deltaTime - time delta since the last call\n */\n private tickerUpdate(deltaTime: number): void\n {\n this._deltaTime += deltaTime;\n\n if (this._deltaTime < this.interactionFrequency)\n {\n return;\n }\n\n this._deltaTime = 0;\n\n this.update();\n }\n}\n\n/**\n * This class handles automatic firing of PointerEvents\n * in the case where the pointer is stationary for too long.\n * This is to ensure that hit-tests are still run on moving objects.\n * @memberof PIXI\n * @type {PIXI.EventsTickerClass}\n * @since 7.2.0\n */\nexport const EventsTicker = new EventsTickerClass();\n","import { Point } from '@pixi/core';\n\nimport type { EventBoundary } from './EventBoundary';\nimport type { FederatedEventTarget } from './FederatedEventTarget';\n\nexport interface PixiTouch extends Touch\n{\n button: number;\n buttons: number;\n isPrimary: boolean;\n width: number;\n height: number;\n tiltX: number;\n tiltY: number;\n pointerType: string;\n pointerId: number;\n pressure: number;\n twist: number;\n tangentialPressure: number;\n layerX: number;\n layerY: number;\n offsetX: number;\n offsetY: number;\n isNormalized: boolean;\n type: string;\n}\n\n/**\n * An DOM-compatible synthetic event implementation that is \"forwarded\" on behalf of an original\n * FederatedEvent or native {@link https://dom.spec.whatwg.org/#event Event}.\n * @memberof PIXI\n * @typeParam N - The type of native event held.\n */\nexport class FederatedEvent implements UIEvent\n{\n /** Flags whether this event bubbles. This will take effect only if it is set before propagation. */\n public bubbles = true;\n\n /** @deprecated since 7.0.0 */\n public cancelBubble = true;\n\n /**\n * Flags whether this event can be canceled using {@link PIXI.FederatedEvent.preventDefault}. This is always\n * false (for now).\n */\n public readonly cancelable = false;\n\n /**\n * Flag added for compatibility with DOM {@code Event}. It is not used in the Federated Events\n * API.\n * @see https://dom.spec.whatwg.org/#dom-event-composed\n */\n public readonly composed = false;\n\n /** The listeners of the event target that are being notified. */\n public currentTarget: FederatedEventTarget;\n\n /** Flags whether the default response of the user agent was prevent through this event. */\n public defaultPrevented = false;\n\n /**\n * The propagation phase.\n * @default {@link PIXI.FederatedEvent.NONE}\n */\n public eventPhase = FederatedEvent.prototype.NONE;\n\n /** Flags whether this is a user-trusted event */\n public isTrusted: boolean;\n\n /** @deprecated since 7.0.0 */\n public returnValue: boolean;\n\n /** @deprecated since 7.0.0 */\n public srcElement: EventTarget;\n\n /** The event target that this will be dispatched to. */\n public target: FederatedEventTarget;\n\n /** The timestamp of when the event was created. */\n public timeStamp: number;\n\n /** The type of event, e.g. {@code \"mouseup\"}. */\n public type: string;\n\n /** The native event that caused the foremost original event. */\n public nativeEvent: N;\n\n /** The original event that caused this event, if any. */\n public originalEvent: FederatedEvent;\n\n /** Flags whether propagation was stopped. */\n public propagationStopped = false;\n\n /** Flags whether propagation was immediately stopped. */\n public propagationImmediatelyStopped = false;\n\n /** The composed path of the event's propagation. The {@code target} is at the end. */\n public path: FederatedEventTarget[];\n\n /** The {@link PIXI.EventBoundary} that manages this event. Null for root events. */\n public readonly manager: EventBoundary;\n\n /** Event-specific detail */\n public detail: number;\n\n /** The global Window object. */\n public view: WindowProxy;\n\n /**\n * Not supported.\n * @deprecated since 7.0.0\n */\n public which: number;\n\n /** The coordinates of the evnet relative to the nearest DOM layer. This is a non-standard property. */\n public layer: Point = new Point();\n\n /** @readonly */\n get layerX(): number { return this.layer.x; }\n\n /** @readonly */\n get layerY(): number { return this.layer.y; }\n\n /** The coordinates of the event relative to the DOM document. This is a non-standard property. */\n public page: Point = new Point();\n\n /** @readonly */\n get pageX(): number { return this.page.x; }\n\n /** @readonly */\n get pageY(): number { return this.page.y; }\n\n /**\n * @param manager - The event boundary which manages this event. Propagation can only occur\n * within the boundary's jurisdiction.\n */\n constructor(manager: EventBoundary)\n {\n this.manager = manager;\n }\n\n /**\n * Fallback for the deprecated @code{PIXI.InteractionEvent.data}.\n * @deprecated since 7.0.0\n */\n get data(): this\n {\n return this;\n }\n\n /** The propagation path for this event. Alias for {@link PIXI.EventBoundary.propagationPath}. */\n composedPath(): FederatedEventTarget[]\n {\n // Find the propagation path if it isn't cached or if the target has changed since since\n // the last evaluation.\n if (this.manager && (!this.path || this.path[this.path.length - 1] !== this.target))\n {\n this.path = this.target ? this.manager.propagationPath(this.target) : [];\n }\n\n return this.path;\n }\n\n /**\n * Unimplemented method included for implementing the DOM interface {@code Event}. It will throw an {@code Error}.\n * @deprecated\n * @param _type\n * @param _bubbles\n * @param _cancelable\n */\n initEvent(_type: string, _bubbles?: boolean, _cancelable?: boolean): void\n {\n throw new Error('initEvent() is a legacy DOM API. It is not implemented in the Federated Events API.');\n }\n\n /**\n * Unimplemented method included for implementing the DOM interface {@code UIEvent}. It will throw an {@code Error}.\n * @deprecated\n * @param _typeArg\n * @param _bubblesArg\n * @param _cancelableArg\n * @param _viewArg\n * @param _detailArg\n */\n initUIEvent(_typeArg: string, _bubblesArg?: boolean, _cancelableArg?: boolean, _viewArg?: Window | null,\n _detailArg?: number): void\n {\n throw new Error('initUIEvent() is a legacy DOM API. It is not implemented in the Federated Events API.');\n }\n\n /** Prevent default behavior of PixiJS and the user agent. */\n preventDefault(): void\n {\n if (this.nativeEvent instanceof Event && this.nativeEvent.cancelable)\n {\n this.nativeEvent.preventDefault();\n }\n\n this.defaultPrevented = true;\n }\n\n /**\n * Stop this event from propagating to any addition listeners, including on the\n * {@link PIXI.FederatedEventTarget.currentTarget currentTarget} and also the following\n * event targets on the propagation path.\n */\n stopImmediatePropagation(): void\n {\n this.propagationImmediatelyStopped = true;\n }\n\n /**\n * Stop this event from propagating to the next {@link PIXI.FederatedEventTarget}. The rest of the listeners\n * on the {@link PIXI.FederatedEventTarget.currentTarget currentTarget} will still be notified.\n */\n stopPropagation(): void\n {\n this.propagationStopped = true;\n }\n\n readonly NONE = 0;\n readonly CAPTURING_PHASE = 1;\n readonly AT_TARGET = 2;\n readonly BUBBLING_PHASE = 3;\n}\n","import { Point } from '@pixi/core';\nimport { FederatedEvent } from './FederatedEvent';\n\nimport type { IPointData } from '@pixi/core';\nimport type { DisplayObject } from '@pixi/display';\nimport type { PixiTouch } from './FederatedEvent';\n\n/**\n * A {@link PIXI.FederatedEvent} for mouse events.\n * @memberof PIXI\n */\nexport class FederatedMouseEvent extends FederatedEvent<\nMouseEvent | PointerEvent | PixiTouch\n> implements MouseEvent\n{\n /** Whether the \"alt\" key was pressed when this mouse event occurred. */\n altKey: boolean;\n\n /** The specific button that was pressed in this mouse event. */\n button: number;\n\n /** The button depressed when this event occurred. */\n buttons: number;\n\n /** Whether the \"control\" key was pressed when this mouse event occurred. */\n ctrlKey: boolean;\n\n /** Whether the \"meta\" key was pressed when this mouse event occurred. */\n metaKey: boolean;\n\n /** This is currently not implemented in the Federated Events API. */\n relatedTarget: EventTarget;\n\n /** Whether the \"shift\" key was pressed when this mouse event occurred. */\n shiftKey: boolean;\n\n /** The coordinates of the mouse event relative to the canvas. */\n public client: Point = new Point();\n\n /** @readonly */\n public get clientX(): number { return this.client.x; }\n\n /** @readonly */\n public get clientY(): number { return this.client.y; }\n\n /**\n * Alias for {@link PIXI.FederatedMouseEvent.clientX this.clientX}.\n * @readonly\n */\n get x(): number { return this.clientX; }\n\n /**\n * Alias for {@link PIXI.FederatedMouseEvent.clientY this.clientY}.\n * @readonly\n */\n get y(): number { return this.clientY; }\n\n /** This is the number of clicks that occurs in 200ms/click of each other. */\n public detail: number;\n\n /** The movement in this pointer relative to the last `mousemove` event. */\n public movement: Point = new Point();\n\n /** @readonly */\n get movementX(): number { return this.movement.x; }\n\n /** @readonly */\n get movementY(): number { return this.movement.y; }\n\n /**\n * The offset of the pointer coordinates w.r.t. target DisplayObject in world space. This is\n * not supported at the moment.\n */\n public offset: Point = new Point();\n\n /** @readonly */\n get offsetX(): number { return this.offset.x; }\n\n /** @readonly */\n get offsetY(): number { return this.offset.y; }\n\n /** The pointer coordinates in world space. */\n public global: Point = new Point();\n\n /** @readonly */\n get globalX(): number { return this.global.x; }\n\n /** @readonly */\n get globalY(): number { return this.global.y; }\n\n /**\n * The pointer coordinates in the renderer's {@link PIXI.Renderer.screen screen}. This has slightly\n * different semantics than native PointerEvent screenX/screenY.\n */\n public screen: Point = new Point();\n\n /**\n * The pointer coordinates in the renderer's screen. Alias for {@code screen.x}.\n * @readonly\n */\n get screenX(): number { return this.screen.x; }\n\n /**\n * The pointer coordinates in the renderer's screen. Alias for {@code screen.y}.\n * @readonly\n */\n get screenY(): number { return this.screen.y; }\n\n /**\n * This will return the local coordinates of the specified displayObject for this InteractionData\n * @param {PIXI.DisplayObject} displayObject - The DisplayObject that you would like the local\n * coords off\n * @param {PIXI.IPointData} point - A Point object in which to store the value, optional (otherwise\n * will create a new point)\n * @param {PIXI.IPointData} globalPos - A Point object containing your custom global coords, optional\n * (otherwise will use the current global coords)\n * @returns - A point containing the coordinates of the InteractionData position relative\n * to the DisplayObject\n */\n public getLocalPosition

(displayObject: DisplayObject, point?: P, globalPos?: IPointData): P\n {\n return displayObject.worldTransform.applyInverse

(globalPos || this.global, point);\n }\n\n /**\n * Whether the modifier key was pressed when this event natively occurred.\n * @param key - The modifier key.\n */\n getModifierState(key: string): boolean\n {\n return 'getModifierState' in this.nativeEvent && this.nativeEvent.getModifierState(key);\n }\n\n /**\n * Not supported.\n * @param _typeArg\n * @param _canBubbleArg\n * @param _cancelableArg\n * @param _viewArg\n * @param _detailArg\n * @param _screenXArg\n * @param _screenYArg\n * @param _clientXArg\n * @param _clientYArg\n * @param _ctrlKeyArg\n * @param _altKeyArg\n * @param _shiftKeyArg\n * @param _metaKeyArg\n * @param _buttonArg\n * @param _relatedTargetArg\n * @deprecated since 7.0.0\n */\n // eslint-disable-next-line max-params\n initMouseEvent(\n _typeArg: string,\n _canBubbleArg: boolean,\n _cancelableArg: boolean,\n _viewArg: Window,\n _detailArg: number,\n _screenXArg: number,\n _screenYArg: number,\n _clientXArg: number,\n _clientYArg: number,\n _ctrlKeyArg: boolean,\n _altKeyArg: boolean,\n _shiftKeyArg: boolean,\n _metaKeyArg: boolean,\n _buttonArg: number,\n _relatedTargetArg: EventTarget\n ): void\n {\n throw new Error('Method not implemented.');\n }\n}\n","import { FederatedMouseEvent } from './FederatedMouseEvent';\n\n/**\n * A {@link PIXI.FederatedEvent} for pointer events.\n * @memberof PIXI\n */\nexport class FederatedPointerEvent extends FederatedMouseEvent implements PointerEvent\n{\n /**\n * The unique identifier of the pointer.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerId}\n */\n public pointerId: number;\n\n /**\n * The width of the pointer's contact along the x-axis, measured in CSS pixels.\n * radiusX of TouchEvents will be represented by this value.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/width\n */\n public width = 0;\n\n /**\n * The height of the pointer's contact along the y-axis, measured in CSS pixels.\n * radiusY of TouchEvents will be represented by this value.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/height\n */\n public height = 0;\n\n /**\n * Indicates whether or not the pointer device that created the event is the primary pointer.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/isPrimary\n */\n public isPrimary = false;\n\n /**\n * The type of pointer that triggered the event.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pointerType\n */\n public pointerType: string;\n\n /**\n * Pressure applied by the pointing device during the event.\n *s\n * A Touch's force property will be represented by this value.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/pressure\n */\n public pressure: number;\n\n /**\n * Barrel pressure on a stylus pointer.\n * @see https://w3c.github.io/pointerevents/#pointerevent-interface\n */\n public tangentialPressure: number;\n\n /**\n * The angle, in degrees, between the pointer device and the screen.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/tiltX\n */\n public tiltX: number;\n\n /**\n * The angle, in degrees, between the pointer device and the screen.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/tiltY\n */\n public tiltY: number;\n\n /**\n * Twist of a stylus pointer.\n * @see https://w3c.github.io/pointerevents/#pointerevent-interface\n */\n public twist: number;\n\n /** This is the number of clicks that occurs in 200ms/click of each other. */\n public detail: number;\n\n // Only included for completeness for now\n getCoalescedEvents(): PointerEvent[]\n {\n if (this.type === 'pointermove' || this.type === 'mousemove' || this.type === 'touchmove')\n {\n return [this];\n }\n\n return [];\n }\n\n // Only included for completeness for now\n getPredictedEvents(): PointerEvent[]\n {\n throw new Error('getPredictedEvents is not supported!');\n }\n}\n","import { FederatedMouseEvent } from './FederatedMouseEvent';\n\n/**\n * A {@link PIXI.FederatedEvent} for wheel events.\n * @memberof PIXI\n */\nexport class FederatedWheelEvent extends FederatedMouseEvent implements WheelEvent\n{\n /**\n * The units of `deltaX`, `deltaY`, and `deltaZ`. This is one of `DOM_DELTA_LINE`,\n * `DOM_DELTA_PAGE`, `DOM_DELTA_PIXEL`.\n */\n deltaMode: number;\n\n /** Horizontal scroll amount */\n deltaX: number;\n\n /** Vertical scroll amount */\n deltaY: number;\n\n /** z-axis scroll amount. */\n deltaZ: number;\n\n /** Units specified in pixels. */\n static readonly DOM_DELTA_PIXEL = 0;\n\n /** Units specified in pixels. */\n readonly DOM_DELTA_PIXEL = 0;\n\n /** Units specified in lines. */\n static readonly DOM_DELTA_LINE = 1;\n\n /** Units specified in lines. */\n readonly DOM_DELTA_LINE = 1;\n\n /** Units specified in pages. */\n static readonly DOM_DELTA_PAGE = 2;\n\n /** Units specified in pages. */\n readonly DOM_DELTA_PAGE = 2;\n}\n","import { Point, utils } from '@pixi/core';\nimport { EventsTicker } from './EventTicker';\nimport { FederatedMouseEvent } from './FederatedMouseEvent';\nimport { FederatedPointerEvent } from './FederatedPointerEvent';\nimport { FederatedWheelEvent } from './FederatedWheelEvent';\n\nimport type { DisplayObject } from '@pixi/display';\nimport type { EmitterListeners, TrackingData } from './EventBoundaryTypes';\nimport type { FederatedEvent } from './FederatedEvent';\nimport type {\n Cursor, EventMode, FederatedEventHandler,\n FederatedEventTarget,\n IFederatedDisplayObject\n} from './FederatedEventTarget';\n\n// The maximum iterations used in propagation. This prevent infinite loops.\nconst PROPAGATION_LIMIT = 2048;\n\nconst tempHitLocation = new Point();\nconst tempLocalMapping = new Point();\n\n/**\n * Event boundaries are \"barriers\" where events coming from an upstream scene are modified before downstream propagation.\n *\n * ## Root event boundary\n *\n * The {@link PIXI.EventSystem#rootBoundary rootBoundary} handles events coming from the <canvas />.\n * {@link PIXI.EventSystem} handles the normalization from native {@link https://dom.spec.whatwg.org/#event Events}\n * into {@link PIXI.FederatedEvent FederatedEvents}. The rootBoundary then does the hit-testing and event dispatch\n * for the upstream normalized event.\n *\n * ## Additional event boundaries\n *\n * An additional event boundary may be desired within an application's scene graph. For example, if a portion of the scene is\n * is flat with many children at one level - a spatial hash maybe needed to accelerate hit testing. In this scenario, the\n * container can be detached from the scene and glued using a custom event boundary.\n *\n * ```ts\n * import { Container } from '@pixi/display';\n * import { EventBoundary } from '@pixi/events';\n * import { SpatialHash } from 'pixi-spatial-hash';\n *\n * class HashedHitTestingEventBoundary\n * {\n * private spatialHash: SpatialHash;\n *\n * constructor(scene: Container, spatialHash: SpatialHash)\n * {\n * super(scene);\n * this.spatialHash = spatialHash;\n * }\n *\n * hitTestRecursive(...)\n * {\n * // TODO: If target === this.rootTarget, then use spatial hash to get a\n * // list of possible children that match the given (x,y) coordinates.\n * }\n * }\n *\n * class VastScene extends DisplayObject\n * {\n * protected eventBoundary: EventBoundary;\n * protected scene: Container;\n * protected spatialHash: SpatialHash;\n *\n * constructor()\n * {\n * this.scene = new Container();\n * this.spatialHash = new SpatialHash();\n * this.eventBoundary = new HashedHitTestingEventBoundary(this.scene, this.spatialHash);\n *\n * // Populate this.scene with a ton of children, while updating this.spatialHash\n * }\n * }\n * ```\n * @memberof PIXI\n */\nexport class EventBoundary\n{\n /**\n * The root event-target residing below the event boundary.\n *\n * All events are dispatched trickling down and bubbling up to this `rootTarget`.\n */\n public rootTarget: DisplayObject;\n\n /**\n * Emits events after they were dispatched into the scene graph.\n *\n * This can be used for global events listening, regardless of the scene graph being used. It should\n * not be used by interactive libraries for normal use.\n *\n * Special events that do not bubble all the way to the root target are not emitted from here,\n * e.g. pointerenter, pointerleave, click.\n */\n public dispatch: utils.EventEmitter = new utils.EventEmitter();\n\n /** The cursor preferred by the event targets underneath this boundary. */\n public cursor: Cursor | string;\n\n /**\n * This flag would emit `pointermove`, `touchmove`, and `mousemove` events on all DisplayObjects.\n *\n * The `moveOnAll` semantics mirror those of earlier versions of PixiJS. This was disabled in favor of\n * the Pointer Event API's approach.\n */\n public moveOnAll = false;\n\n /** Enables the global move events. `globalpointermove`, `globaltouchmove`, and `globalmousemove` */\n public enableGlobalMoveEvents = true;\n\n /**\n * Maps event types to forwarding handles for them.\n *\n * {@link PIXI.EventBoundary EventBoundary} provides mapping for \"pointerdown\", \"pointermove\",\n * \"pointerout\", \"pointerleave\", \"pointerover\", \"pointerup\", and \"pointerupoutside\" by default.\n * @see PIXI.EventBoundary#addEventMapping\n */\n protected mappingTable: Record void,\n priority: number\n }>>;\n\n /**\n * State object for mapping methods.\n * @see PIXI.EventBoundary#trackingData\n */\n protected mappingState: Record = {\n trackingData: {}\n };\n\n /**\n * The event pool maps event constructors to an free pool of instances of those specific events.\n * @see PIXI.EventBoundary#allocateEvent\n * @see PIXI.EventBoundary#freeEvent\n */\n protected eventPool: Map = new Map();\n\n /** Every interactive element gathered from the scene. Only used in `pointermove` */\n private _allInteractiveElements: FederatedEventTarget[] = [];\n /** Every element that passed the hit test. Only used in `pointermove` */\n private _hitElements: FederatedEventTarget[] = [];\n /** Whether or not to collect all the interactive elements from the scene. Enabled in `pointermove` */\n private _isPointerMoveEvent = false;\n\n /**\n * @param rootTarget - The holder of the event boundary.\n */\n constructor(rootTarget?: DisplayObject)\n {\n this.rootTarget = rootTarget;\n\n this.hitPruneFn = this.hitPruneFn.bind(this);\n this.hitTestFn = this.hitTestFn.bind(this);\n this.mapPointerDown = this.mapPointerDown.bind(this);\n this.mapPointerMove = this.mapPointerMove.bind(this);\n this.mapPointerOut = this.mapPointerOut.bind(this);\n this.mapPointerOver = this.mapPointerOver.bind(this);\n this.mapPointerUp = this.mapPointerUp.bind(this);\n this.mapPointerUpOutside = this.mapPointerUpOutside.bind(this);\n this.mapWheel = this.mapWheel.bind(this);\n\n this.mappingTable = {};\n this.addEventMapping('pointerdown', this.mapPointerDown);\n this.addEventMapping('pointermove', this.mapPointerMove);\n this.addEventMapping('pointerout', this.mapPointerOut);\n this.addEventMapping('pointerleave', this.mapPointerOut);\n this.addEventMapping('pointerover', this.mapPointerOver);\n this.addEventMapping('pointerup', this.mapPointerUp);\n this.addEventMapping('pointerupoutside', this.mapPointerUpOutside);\n this.addEventMapping('wheel', this.mapWheel);\n }\n\n /**\n * Adds an event mapping for the event `type` handled by `fn`.\n *\n * Event mappings can be used to implement additional or custom events. They take an event\n * coming from the upstream scene (or directly from the {@link PIXI.EventSystem}) and dispatch new downstream events\n * generally trickling down and bubbling up to {@link PIXI.EventBoundary.rootTarget this.rootTarget}.\n *\n * To modify the semantics of existing events, the built-in mapping methods of EventBoundary should be overridden\n * instead.\n * @param type - The type of upstream event to map.\n * @param fn - The mapping method. The context of this function must be bound manually, if desired.\n */\n public addEventMapping(type: string, fn: (e: FederatedEvent) => void): void\n {\n if (!this.mappingTable[type])\n {\n this.mappingTable[type] = [];\n }\n\n this.mappingTable[type].push({\n fn,\n priority: 0,\n });\n this.mappingTable[type].sort((a, b) => a.priority - b.priority);\n }\n\n /**\n * Dispatches the given event\n * @param e\n * @param type\n */\n public dispatchEvent(e: FederatedEvent, type?: string): void\n {\n e.propagationStopped = false;\n e.propagationImmediatelyStopped = false;\n\n this.propagate(e, type);\n this.dispatch.emit(type || e.type, e);\n }\n\n /**\n * Maps the given upstream event through the event boundary and propagates it downstream.\n * @param e\n */\n public mapEvent(e: FederatedEvent): void\n {\n if (!this.rootTarget)\n {\n return;\n }\n\n const mappers = this.mappingTable[e.type];\n\n if (mappers)\n {\n for (let i = 0, j = mappers.length; i < j; i++)\n {\n mappers[i].fn(e);\n }\n }\n else\n {\n console.warn(`[EventBoundary]: Event mapping not defined for ${e.type}`);\n }\n }\n\n /**\n * Finds the DisplayObject that is the target of a event at the given coordinates.\n *\n * The passed (x,y) coordinates are in the world space above this event boundary.\n * @param x\n * @param y\n */\n public hitTest(\n x: number,\n y: number,\n ): DisplayObject\n {\n EventsTicker.pauseUpdate = true;\n // if we are using global move events, we need to hit test the whole scene graph\n const useMove = this._isPointerMoveEvent && this.enableGlobalMoveEvents;\n const fn = useMove ? 'hitTestMoveRecursive' : 'hitTestRecursive';\n const invertedPath = this[fn](\n this.rootTarget,\n this.rootTarget.eventMode,\n tempHitLocation.set(x, y),\n this.hitTestFn,\n this.hitPruneFn,\n );\n\n return invertedPath && invertedPath[0];\n }\n\n /**\n * Propagate the passed event from from {@link PIXI.EventBoundary.rootTarget this.rootTarget} to its\n * target {@code e.target}.\n * @param e - The event to propagate.\n * @param type\n */\n public propagate(e: FederatedEvent, type?: string): void\n {\n if (!e.target)\n {\n // This usually occurs when the scene graph is not interactive.\n return;\n }\n\n const composedPath = e.composedPath();\n\n // Capturing phase\n e.eventPhase = e.CAPTURING_PHASE;\n\n for (let i = 0, j = composedPath.length - 1; i < j; i++)\n {\n e.currentTarget = composedPath[i];\n\n this.notifyTarget(e, type);\n\n if (e.propagationStopped || e.propagationImmediatelyStopped) return;\n }\n\n // At target phase\n e.eventPhase = e.AT_TARGET;\n e.currentTarget = e.target;\n\n this.notifyTarget(e, type);\n\n if (e.propagationStopped || e.propagationImmediatelyStopped) return;\n\n // Bubbling phase\n e.eventPhase = e.BUBBLING_PHASE;\n\n for (let i = composedPath.length - 2; i >= 0; i--)\n {\n e.currentTarget = composedPath[i];\n\n this.notifyTarget(e, type);\n\n if (e.propagationStopped || e.propagationImmediatelyStopped) return;\n }\n }\n\n /**\n * Emits the event {@code e} to all interactive display objects. The event is propagated in the bubbling phase always.\n *\n * This is used in the `globalpointermove` event.\n * @param e - The emitted event.\n * @param type - The listeners to notify.\n * @param targets - The targets to notify.\n */\n public all(e: FederatedEvent, type?: string | string[], targets = this._allInteractiveElements): void\n {\n if (targets.length === 0) return;\n\n e.eventPhase = e.BUBBLING_PHASE;\n\n const events = Array.isArray(type) ? type : [type];\n\n // loop through all interactive elements and notify them of the event\n // loop through targets backwards\n for (let i = targets.length - 1; i >= 0; i--)\n {\n events.forEach((event) =>\n {\n e.currentTarget = targets[i];\n this.notifyTarget(e, event);\n });\n }\n }\n\n /**\n * Finds the propagation path from {@link PIXI.EventBoundary.rootTarget rootTarget} to the passed\n * {@code target}. The last element in the path is {@code target}.\n * @param target\n */\n public propagationPath(target: FederatedEventTarget): FederatedEventTarget[]\n {\n const propagationPath = [target];\n\n for (let i = 0; i < PROPAGATION_LIMIT && target !== this.rootTarget; i++)\n {\n if (!target.parent)\n {\n throw new Error('Cannot find propagation path to disconnected target');\n }\n\n propagationPath.push(target.parent);\n\n target = target.parent;\n }\n\n propagationPath.reverse();\n\n return propagationPath;\n }\n\n protected hitTestMoveRecursive(\n currentTarget: DisplayObject,\n eventMode: EventMode,\n location: Point,\n testFn: (object: DisplayObject, pt: Point) => boolean,\n pruneFn?: (object: DisplayObject, pt: Point) => boolean,\n ignore = false\n ): DisplayObject[]\n {\n let shouldReturn = false;\n\n // only bail out early if it is not interactive\n if (this._interactivePrune(currentTarget)) return null;\n\n if (currentTarget.eventMode === 'dynamic' || eventMode === 'dynamic')\n {\n EventsTicker.pauseUpdate = false;\n }\n\n if (currentTarget.interactiveChildren && currentTarget.children)\n {\n const children = currentTarget.children;\n\n for (let i = children.length - 1; i >= 0; i--)\n {\n const child = children[i] as DisplayObject;\n\n const nestedHit = this.hitTestMoveRecursive(\n child,\n this._isInteractive(eventMode) ? eventMode : child.eventMode,\n location,\n testFn,\n pruneFn,\n ignore || pruneFn(currentTarget, location)\n );\n\n if (nestedHit)\n {\n // Its a good idea to check if a child has lost its parent.\n // this means it has been removed whilst looping so its best\n if (nestedHit.length > 0 && !nestedHit[nestedHit.length - 1].parent)\n {\n continue;\n }\n\n // Only add the current hit-test target to the hit-test chain if the chain\n // has already started (i.e. the event target has been found) or if the current\n // target is interactive (i.e. it becomes the event target).\n const isInteractive = currentTarget.isInteractive();\n\n if (nestedHit.length > 0 || isInteractive)\n {\n if (isInteractive) this._allInteractiveElements.push(currentTarget);\n nestedHit.push(currentTarget);\n }\n\n // store all hit elements to be returned once we have traversed the whole tree\n if (this._hitElements.length === 0) this._hitElements = nestedHit;\n\n shouldReturn = true;\n }\n }\n }\n\n const isInteractiveMode = this._isInteractive(eventMode);\n const isInteractiveTarget = currentTarget.isInteractive();\n\n if (isInteractiveMode && isInteractiveTarget) this._allInteractiveElements.push(currentTarget);\n\n // we don't carry on hit testing something once we have found a hit,\n // now only care about gathering the interactive elements\n if (ignore || this._hitElements.length > 0) return null;\n\n if (shouldReturn) return this._hitElements as DisplayObject[];\n\n // Finally, hit test this DisplayObject itself.\n if (isInteractiveMode && (!pruneFn(currentTarget, location) && testFn(currentTarget, location)))\n {\n // The current hit-test target is the event's target only if it is interactive. Otherwise,\n // the first interactive ancestor will be the event's target.\n return isInteractiveTarget ? [currentTarget] : [];\n }\n\n return null;\n }\n\n /**\n * Recursive implementation for {@link PIXI.EventBoundary.hitTest hitTest}.\n * @param currentTarget - The DisplayObject that is to be hit tested.\n * @param eventMode - The event mode for the `currentTarget` or one of its parents.\n * @param location - The location that is being tested for overlap.\n * @param testFn - Callback that determines whether the target passes hit testing. This callback\n * can assume that `pruneFn` failed to prune the display object.\n * @param pruneFn - Callback that determiness whether the target and all of its children\n * cannot pass the hit test. It is used as a preliminary optimization to prune entire subtrees\n * of the scene graph.\n * @returns An array holding the hit testing target and all its ancestors in order. The first element\n * is the target itself and the last is {@link PIXI.EventBoundary.rootTarget rootTarget}. This is the opposite\n * order w.r.t. the propagation path. If no hit testing target is found, null is returned.\n */\n protected hitTestRecursive(\n currentTarget: DisplayObject,\n eventMode: EventMode,\n location: Point,\n testFn: (object: DisplayObject, pt: Point) => boolean,\n pruneFn?: (object: DisplayObject, pt: Point) => boolean\n ): DisplayObject[]\n {\n // Attempt to prune this DisplayObject and its subtree as an optimization.\n if (this._interactivePrune(currentTarget) || pruneFn(currentTarget, location))\n {\n return null;\n }\n\n if (currentTarget.eventMode === 'dynamic' || eventMode === 'dynamic')\n {\n EventsTicker.pauseUpdate = false;\n }\n\n // Find a child that passes the hit testing and return one, if any.\n if (currentTarget.interactiveChildren && currentTarget.children)\n {\n const children = currentTarget.children;\n\n for (let i = children.length - 1; i >= 0; i--)\n {\n const child = children[i] as DisplayObject;\n\n const nestedHit = this.hitTestRecursive(\n child,\n this._isInteractive(eventMode) ? eventMode : child.eventMode,\n location,\n testFn,\n pruneFn\n );\n\n if (nestedHit)\n {\n // Its a good idea to check if a child has lost its parent.\n // this means it has been removed whilst looping so its best\n if (nestedHit.length > 0 && !nestedHit[nestedHit.length - 1].parent)\n {\n continue;\n }\n\n // Only add the current hit-test target to the hit-test chain if the chain\n // has already started (i.e. the event target has been found) or if the current\n // target is interactive (i.e. it becomes the event target).\n const isInteractive = currentTarget.isInteractive();\n\n if (nestedHit.length > 0 || isInteractive) nestedHit.push(currentTarget);\n\n return nestedHit;\n }\n }\n }\n\n const isInteractiveMode = this._isInteractive(eventMode);\n const isInteractiveTarget = currentTarget.isInteractive();\n\n // Finally, hit test this DisplayObject itself.\n if (isInteractiveMode && testFn(currentTarget, location))\n {\n // The current hit-test target is the event's target only if it is interactive. Otherwise,\n // the first interactive ancestor will be the event's target.\n return isInteractiveTarget ? [currentTarget] : [];\n }\n\n return null;\n }\n\n private _isInteractive(int: EventMode): int is 'static' | 'dynamic'\n {\n return int === 'static' || int === 'dynamic';\n }\n\n private _interactivePrune(displayObject: DisplayObject): boolean\n {\n // If displayObject is a mask, invisible, or not renderable then it cannot be hit directly.\n if (!displayObject || displayObject.isMask || !displayObject.visible || !displayObject.renderable)\n {\n return true;\n }\n\n // If this DisplayObject is none then it cannot be hit by anything.\n if (displayObject.eventMode === 'none')\n {\n return true;\n }\n\n // If this DisplayObject is passive and it has no interactive children then it cannot be hit\n if (displayObject.eventMode === 'passive' && !displayObject.interactiveChildren)\n {\n return true;\n }\n\n // If displayObject is a mask then it cannot be hit directly.\n if (displayObject.isMask)\n {\n return true;\n }\n\n return false;\n }\n\n /**\n * Checks whether the display object or any of its children cannot pass the hit test at all.\n *\n * {@link PIXI.EventBoundary}'s implementation uses the {@link PIXI.DisplayObject.hitArea hitArea}\n * and {@link PIXI.DisplayObject._mask} for pruning.\n * @param displayObject\n * @param location\n */\n protected hitPruneFn(displayObject: DisplayObject, location: Point): boolean\n {\n if (displayObject.hitArea)\n {\n displayObject.worldTransform.applyInverse(location, tempLocalMapping);\n\n if (!displayObject.hitArea.contains(tempLocalMapping.x, tempLocalMapping.y))\n {\n return true;\n }\n }\n\n if (displayObject._mask)\n {\n const maskObject = ((displayObject._mask as any).isMaskData\n ? (displayObject._mask as any).maskObject : displayObject._mask);\n\n if (maskObject && !maskObject.containsPoint?.(location))\n {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Checks whether the display object passes hit testing for the given location.\n * @param displayObject\n * @param location\n * @returns - Whether `displayObject` passes hit testing for `location`.\n */\n protected hitTestFn(displayObject: DisplayObject, location: Point): boolean\n {\n // If the displayObject is passive then it cannot be hit directly.\n if (displayObject.eventMode === 'passive')\n {\n return false;\n }\n\n // If the display object failed pruning with a hitArea, then it must pass it.\n if (displayObject.hitArea)\n {\n return true;\n }\n\n if ((displayObject as any).containsPoint)\n {\n return (displayObject as any).containsPoint(location) as boolean;\n }\n\n // TODO: Should we hit test based on bounds?\n\n return false;\n }\n\n /**\n * Notify all the listeners to the event's `currentTarget`.\n *\n * If the `currentTarget` contains the property `on`, then it is called here,\n * simulating the behavior from version 6.x and prior.\n * @param e - The event passed to the target.\n * @param type\n */\n protected notifyTarget(e: FederatedEvent, type?: string): void\n {\n type = type ?? e.type;\n\n // call the `on${type}` for the current target if it exists\n const handlerKey = `on${type}` as keyof IFederatedDisplayObject;\n\n (e.currentTarget[handlerKey] as FederatedEventHandler)?.(e);\n\n const key = e.eventPhase === e.CAPTURING_PHASE || e.eventPhase === e.AT_TARGET ? `${type}capture` : type;\n\n this.notifyListeners(e, key);\n\n if (e.eventPhase === e.AT_TARGET)\n {\n this.notifyListeners(e, type);\n }\n }\n\n /**\n * Maps the upstream `pointerdown` events to a downstream `pointerdown` event.\n *\n * `touchstart`, `rightdown`, `mousedown` events are also dispatched for specific pointer types.\n * @param from\n */\n protected mapPointerDown(from: FederatedEvent): void\n {\n if (!(from instanceof FederatedPointerEvent))\n {\n console.warn('EventBoundary cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const e = this.createPointerEvent(from);\n\n this.dispatchEvent(e, 'pointerdown');\n\n if (e.pointerType === 'touch')\n {\n this.dispatchEvent(e, 'touchstart');\n }\n else if (e.pointerType === 'mouse' || e.pointerType === 'pen')\n {\n const isRightButton = e.button === 2;\n\n this.dispatchEvent(e, isRightButton ? 'rightdown' : 'mousedown');\n }\n\n const trackingData = this.trackingData(from.pointerId);\n\n trackingData.pressTargetsByButton[from.button] = e.composedPath();\n\n this.freeEvent(e);\n }\n\n /**\n * Maps the upstream `pointermove` to downstream `pointerout`, `pointerover`, and `pointermove` events, in that order.\n *\n * The tracking data for the specific pointer has an updated `overTarget`. `mouseout`, `mouseover`,\n * `mousemove`, and `touchmove` events are fired as well for specific pointer types.\n * @param from - The upstream `pointermove` event.\n */\n protected mapPointerMove(from: FederatedEvent): void\n {\n if (!(from instanceof FederatedPointerEvent))\n {\n console.warn('EventBoundary cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n this._allInteractiveElements.length = 0;\n this._hitElements.length = 0;\n this._isPointerMoveEvent = true;\n const e = this.createPointerEvent(from);\n\n this._isPointerMoveEvent = false;\n const isMouse = e.pointerType === 'mouse' || e.pointerType === 'pen';\n const trackingData = this.trackingData(from.pointerId);\n const outTarget = this.findMountedTarget(trackingData.overTargets);\n\n // First pointerout/pointerleave\n if (trackingData.overTargets?.length > 0 && outTarget !== e.target)\n {\n // pointerout always occurs on the overTarget when the pointer hovers over another element.\n const outType = from.type === 'mousemove' ? 'mouseout' : 'pointerout';\n const outEvent = this.createPointerEvent(from, outType, outTarget);\n\n this.dispatchEvent(outEvent, 'pointerout');\n if (isMouse) this.dispatchEvent(outEvent, 'mouseout');\n\n // If the pointer exits overTarget and its descendants, then a pointerleave event is also fired. This event\n // is dispatched to all ancestors that no longer capture the pointer.\n if (!e.composedPath().includes(outTarget))\n {\n const leaveEvent = this.createPointerEvent(from, 'pointerleave', outTarget);\n\n leaveEvent.eventPhase = leaveEvent.AT_TARGET;\n\n while (leaveEvent.target && !e.composedPath().includes(leaveEvent.target))\n {\n leaveEvent.currentTarget = leaveEvent.target;\n\n this.notifyTarget(leaveEvent);\n if (isMouse) this.notifyTarget(leaveEvent, 'mouseleave');\n\n leaveEvent.target = leaveEvent.target.parent;\n }\n\n this.freeEvent(leaveEvent);\n }\n\n this.freeEvent(outEvent);\n }\n\n // Then pointerover\n if (outTarget !== e.target)\n {\n // pointerover always occurs on the new overTarget\n const overType = from.type === 'mousemove' ? 'mouseover' : 'pointerover';\n const overEvent = this.clonePointerEvent(e, overType);// clone faster\n\n this.dispatchEvent(overEvent, 'pointerover');\n if (isMouse) this.dispatchEvent(overEvent, 'mouseover');\n\n // Probe whether the newly hovered DisplayObject is an ancestor of the original overTarget.\n let overTargetAncestor = outTarget?.parent;\n\n while (overTargetAncestor && overTargetAncestor !== this.rootTarget.parent)\n {\n if (overTargetAncestor === e.target) break;\n\n overTargetAncestor = overTargetAncestor.parent;\n }\n\n // The pointer has entered a non-ancestor of the original overTarget. This means we need a pointerentered\n // event.\n const didPointerEnter = !overTargetAncestor || overTargetAncestor === this.rootTarget.parent;\n\n if (didPointerEnter)\n {\n const enterEvent = this.clonePointerEvent(e, 'pointerenter');\n\n enterEvent.eventPhase = enterEvent.AT_TARGET;\n\n while (enterEvent.target\n && enterEvent.target !== outTarget\n && enterEvent.target !== this.rootTarget.parent)\n {\n enterEvent.currentTarget = enterEvent.target;\n\n this.notifyTarget(enterEvent);\n if (isMouse) this.notifyTarget(enterEvent, 'mouseenter');\n\n enterEvent.target = enterEvent.target.parent;\n }\n\n this.freeEvent(enterEvent);\n }\n\n this.freeEvent(overEvent);\n }\n\n const allMethods: string[] = [];\n const allowGlobalPointerEvents = this.enableGlobalMoveEvents ?? true;\n\n /* eslint-disable @typescript-eslint/no-unused-expressions */\n this.moveOnAll ? allMethods.push('pointermove') : this.dispatchEvent(e, 'pointermove');\n allowGlobalPointerEvents && allMethods.push('globalpointermove');\n\n // Then pointermove\n if (e.pointerType === 'touch')\n {\n this.moveOnAll ? allMethods.splice(1, 0, 'touchmove') : this.dispatchEvent(e, 'touchmove');\n allowGlobalPointerEvents && allMethods.push('globaltouchmove');\n }\n\n if (isMouse)\n {\n this.moveOnAll ? allMethods.splice(1, 0, 'mousemove') : this.dispatchEvent(e, 'mousemove');\n allowGlobalPointerEvents && allMethods.push('globalmousemove');\n this.cursor = e.target?.cursor;\n }\n\n if (allMethods.length > 0)\n {\n this.all(e, allMethods);\n }\n this._allInteractiveElements.length = 0;\n this._hitElements.length = 0;\n /* eslint-enable @typescript-eslint/no-unused-expressions */\n\n trackingData.overTargets = e.composedPath();\n\n this.freeEvent(e);\n }\n\n /**\n * Maps the upstream `pointerover` to downstream `pointerover` and `pointerenter` events, in that order.\n *\n * The tracking data for the specific pointer gets a new `overTarget`.\n * @param from - The upstream `pointerover` event.\n */\n protected mapPointerOver(from: FederatedEvent): void\n {\n if (!(from instanceof FederatedPointerEvent))\n {\n console.warn('EventBoundary cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const trackingData = this.trackingData(from.pointerId);\n const e = this.createPointerEvent(from);\n const isMouse = e.pointerType === 'mouse' || e.pointerType === 'pen';\n\n this.dispatchEvent(e, 'pointerover');\n if (isMouse) this.dispatchEvent(e, 'mouseover');\n if (e.pointerType === 'mouse') this.cursor = e.target?.cursor;\n\n // pointerenter events must be fired since the pointer entered from upstream.\n const enterEvent = this.clonePointerEvent(e, 'pointerenter');\n\n enterEvent.eventPhase = enterEvent.AT_TARGET;\n\n while (enterEvent.target && enterEvent.target !== this.rootTarget.parent)\n {\n enterEvent.currentTarget = enterEvent.target;\n\n this.notifyTarget(enterEvent);\n if (isMouse) this.notifyTarget(enterEvent, 'mouseenter');\n\n enterEvent.target = enterEvent.target.parent;\n }\n\n trackingData.overTargets = e.composedPath();\n\n this.freeEvent(e);\n this.freeEvent(enterEvent);\n }\n\n /**\n * Maps the upstream `pointerout` to downstream `pointerout`, `pointerleave` events, in that order.\n *\n * The tracking data for the specific pointer is cleared of a `overTarget`.\n * @param from - The upstream `pointerout` event.\n */\n protected mapPointerOut(from: FederatedEvent): void\n {\n if (!(from instanceof FederatedPointerEvent))\n {\n console.warn('EventBoundary cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const trackingData = this.trackingData(from.pointerId);\n\n if (trackingData.overTargets)\n {\n const isMouse = from.pointerType === 'mouse' || from.pointerType === 'pen';\n const outTarget = this.findMountedTarget(trackingData.overTargets);\n\n // pointerout first\n const outEvent = this.createPointerEvent(from, 'pointerout', outTarget);\n\n this.dispatchEvent(outEvent);\n if (isMouse) this.dispatchEvent(outEvent, 'mouseout');\n\n // pointerleave(s) are also dispatched b/c the pointer must've left rootTarget and its descendants to\n // get an upstream pointerout event (upstream events do not know rootTarget has descendants).\n const leaveEvent = this.createPointerEvent(from, 'pointerleave', outTarget);\n\n leaveEvent.eventPhase = leaveEvent.AT_TARGET;\n\n while (leaveEvent.target && leaveEvent.target !== this.rootTarget.parent)\n {\n leaveEvent.currentTarget = leaveEvent.target;\n\n this.notifyTarget(leaveEvent);\n if (isMouse) this.notifyTarget(leaveEvent, 'mouseleave');\n\n leaveEvent.target = leaveEvent.target.parent;\n }\n\n trackingData.overTargets = null;\n\n this.freeEvent(outEvent);\n this.freeEvent(leaveEvent);\n }\n\n this.cursor = null;\n }\n\n /**\n * Maps the upstream `pointerup` event to downstream `pointerup`, `pointerupoutside`,\n * and `click`/`rightclick`/`pointertap` events, in that order.\n *\n * The `pointerupoutside` event bubbles from the original `pointerdown` target to the most specific\n * ancestor of the `pointerdown` and `pointerup` targets, which is also the `click` event's target. `touchend`,\n * `rightup`, `mouseup`, `touchendoutside`, `rightupoutside`, `mouseupoutside`, and `tap` are fired as well for\n * specific pointer types.\n * @param from - The upstream `pointerup` event.\n */\n protected mapPointerUp(from: FederatedEvent): void\n {\n if (!(from instanceof FederatedPointerEvent))\n {\n console.warn('EventBoundary cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const now = performance.now();\n const e = this.createPointerEvent(from);\n\n this.dispatchEvent(e, 'pointerup');\n\n if (e.pointerType === 'touch')\n {\n this.dispatchEvent(e, 'touchend');\n }\n else if (e.pointerType === 'mouse' || e.pointerType === 'pen')\n {\n const isRightButton = e.button === 2;\n\n this.dispatchEvent(e, isRightButton ? 'rightup' : 'mouseup');\n }\n\n const trackingData = this.trackingData(from.pointerId);\n const pressTarget = this.findMountedTarget(trackingData.pressTargetsByButton[from.button]);\n\n let clickTarget = pressTarget;\n\n // pointerupoutside only bubbles. It only bubbles upto the parent that doesn't contain\n // the pointerup location.\n if (pressTarget && !e.composedPath().includes(pressTarget))\n {\n let currentTarget = pressTarget;\n\n while (currentTarget && !e.composedPath().includes(currentTarget))\n {\n e.currentTarget = currentTarget;\n\n this.notifyTarget(e, 'pointerupoutside');\n\n if (e.pointerType === 'touch')\n {\n this.notifyTarget(e, 'touchendoutside');\n }\n else if (e.pointerType === 'mouse' || e.pointerType === 'pen')\n {\n const isRightButton = e.button === 2;\n\n this.notifyTarget(e, isRightButton ? 'rightupoutside' : 'mouseupoutside');\n }\n\n currentTarget = currentTarget.parent;\n }\n\n delete trackingData.pressTargetsByButton[from.button];\n\n // currentTarget is the most specific ancestor holding both the pointerdown and pointerup\n // targets. That is - it's our click target!\n clickTarget = currentTarget;\n }\n\n // click!\n if (clickTarget)\n {\n const clickEvent = this.clonePointerEvent(e, 'click');\n\n clickEvent.target = clickTarget;\n clickEvent.path = null;\n\n if (!trackingData.clicksByButton[from.button])\n {\n trackingData.clicksByButton[from.button] = {\n clickCount: 0,\n target: clickEvent.target,\n timeStamp: now,\n };\n }\n\n const clickHistory = trackingData.clicksByButton[from.button];\n\n if (clickHistory.target === clickEvent.target\n && now - clickHistory.timeStamp < 200)\n {\n ++clickHistory.clickCount;\n }\n else\n {\n clickHistory.clickCount = 1;\n }\n\n clickHistory.target = clickEvent.target;\n clickHistory.timeStamp = now;\n\n clickEvent.detail = clickHistory.clickCount;\n\n if (clickEvent.pointerType === 'mouse')\n {\n const isRightButton = clickEvent.button === 2;\n\n this.dispatchEvent(clickEvent, isRightButton ? 'rightclick' : 'click');\n }\n else if (clickEvent.pointerType === 'touch')\n {\n this.dispatchEvent(clickEvent, 'tap');\n }\n\n this.dispatchEvent(clickEvent, 'pointertap');\n\n this.freeEvent(clickEvent);\n }\n\n this.freeEvent(e);\n }\n\n /**\n * Maps the upstream `pointerupoutside` event to a downstream `pointerupoutside` event, bubbling from the original\n * `pointerdown` target to `rootTarget`.\n *\n * (The most specific ancestor of the `pointerdown` event and the `pointerup` event must the\n * `{@link PIXI.EventBoundary}'s root because the `pointerup` event occurred outside of the boundary.)\n *\n * `touchendoutside`, `mouseupoutside`, and `rightupoutside` events are fired as well for specific pointer\n * types. The tracking data for the specific pointer is cleared of a `pressTarget`.\n * @param from - The upstream `pointerupoutside` event.\n */\n protected mapPointerUpOutside(from: FederatedEvent): void\n {\n if (!(from instanceof FederatedPointerEvent))\n {\n console.warn('EventBoundary cannot map a non-pointer event as a pointer event');\n\n return;\n }\n\n const trackingData = this.trackingData(from.pointerId);\n const pressTarget = this.findMountedTarget(trackingData.pressTargetsByButton[from.button]);\n const e = this.createPointerEvent(from);\n\n if (pressTarget)\n {\n let currentTarget = pressTarget;\n\n while (currentTarget)\n {\n e.currentTarget = currentTarget;\n\n this.notifyTarget(e, 'pointerupoutside');\n\n if (e.pointerType === 'touch')\n {\n this.notifyTarget(e, 'touchendoutside');\n }\n else if (e.pointerType === 'mouse' || e.pointerType === 'pen')\n {\n this.notifyTarget(e, e.button === 2 ? 'rightupoutside' : 'mouseupoutside');\n }\n\n currentTarget = currentTarget.parent;\n }\n\n delete trackingData.pressTargetsByButton[from.button];\n }\n\n this.freeEvent(e);\n }\n\n /**\n * Maps the upstream `wheel` event to a downstream `wheel` event.\n * @param from - The upstream `wheel` event.\n */\n protected mapWheel(from: FederatedEvent): void\n {\n if (!(from instanceof FederatedWheelEvent))\n {\n console.warn('EventBoundary cannot map a non-wheel event as a wheel event');\n\n return;\n }\n\n const wheelEvent = this.createWheelEvent(from);\n\n this.dispatchEvent(wheelEvent);\n this.freeEvent(wheelEvent);\n }\n\n /**\n * Finds the most specific event-target in the given propagation path that is still mounted in the scene graph.\n *\n * This is used to find the correct `pointerup` and `pointerout` target in the case that the original `pointerdown`\n * or `pointerover` target was unmounted from the scene graph.\n * @param propagationPath - The propagation path was valid in the past.\n * @returns - The most specific event-target still mounted at the same location in the scene graph.\n */\n protected findMountedTarget(propagationPath: FederatedEventTarget[]): FederatedEventTarget\n {\n if (!propagationPath)\n {\n return null;\n }\n\n let currentTarget = propagationPath[0];\n\n for (let i = 1; i < propagationPath.length; i++)\n {\n // Set currentTarget to the next target in the path only if it is still attached to the\n // scene graph (i.e. parent still points to the expected ancestor).\n if (propagationPath[i].parent === currentTarget)\n {\n currentTarget = propagationPath[i];\n }\n else\n {\n break;\n }\n }\n\n return currentTarget;\n }\n\n /**\n * Creates an event whose {@code originalEvent} is {@code from}, with an optional `type` and `target` override.\n *\n * The event is allocated using {@link PIXI.EventBoundary#allocateEvent this.allocateEvent}.\n * @param from - The {@code originalEvent} for the returned event.\n * @param [type=from.type] - The type of the returned event.\n * @param target - The target of the returned event.\n */\n protected createPointerEvent(\n from: FederatedPointerEvent,\n type?: string,\n target?: FederatedEventTarget\n ): FederatedPointerEvent\n {\n const event = this.allocateEvent(FederatedPointerEvent);\n\n this.copyPointerData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from;\n event.target = target\n ?? this.hitTest(event.global.x, event.global.y) as FederatedEventTarget\n ?? this._hitElements[0];\n\n if (typeof type === 'string')\n {\n event.type = type;\n }\n\n return event;\n }\n\n /**\n * Creates a wheel event whose {@code originalEvent} is {@code from}.\n *\n * The event is allocated using {@link PIXI.EventBoundary#allocateEvent this.allocateEvent}.\n * @param from - The upstream wheel event.\n */\n protected createWheelEvent(from: FederatedWheelEvent): FederatedWheelEvent\n {\n const event = this.allocateEvent(FederatedWheelEvent);\n\n this.copyWheelData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from;\n event.target = this.hitTest(event.global.x, event.global.y);\n\n return event;\n }\n\n /**\n * Clones the event {@code from}, with an optional {@code type} override.\n *\n * The event is allocated using {@link PIXI.EventBoundary#allocateEvent this.allocateEvent}.\n * @param from - The event to clone.\n * @param [type=from.type] - The type of the returned event.\n */\n protected clonePointerEvent(from: FederatedPointerEvent, type?: string): FederatedPointerEvent\n {\n const event = this.allocateEvent(FederatedPointerEvent);\n\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from.originalEvent;\n\n this.copyPointerData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n\n // copy propagation path for perf\n event.target = from.target;\n event.path = from.composedPath().slice();\n event.type = type ?? event.type;\n\n return event;\n }\n\n /**\n * Copies wheel {@link PIXI.FederatedWheelEvent} data from {@code from} into {@code to}.\n *\n * The following properties are copied:\n * + deltaMode\n * + deltaX\n * + deltaY\n * + deltaZ\n * @param from\n * @param to\n */\n protected copyWheelData(from: FederatedWheelEvent, to: FederatedWheelEvent): void\n {\n to.deltaMode = from.deltaMode;\n to.deltaX = from.deltaX;\n to.deltaY = from.deltaY;\n to.deltaZ = from.deltaZ;\n }\n\n /**\n * Copies pointer {@link PIXI.FederatedPointerEvent} data from {@code from} into {@code to}.\n *\n * The following properties are copied:\n * + pointerId\n * + width\n * + height\n * + isPrimary\n * + pointerType\n * + pressure\n * + tangentialPressure\n * + tiltX\n * + tiltY\n * @param from\n * @param to\n */\n protected copyPointerData(from: FederatedEvent, to: FederatedEvent): void\n {\n if (!(from instanceof FederatedPointerEvent && to instanceof FederatedPointerEvent)) return;\n\n to.pointerId = from.pointerId;\n to.width = from.width;\n to.height = from.height;\n to.isPrimary = from.isPrimary;\n to.pointerType = from.pointerType;\n to.pressure = from.pressure;\n to.tangentialPressure = from.tangentialPressure;\n to.tiltX = from.tiltX;\n to.tiltY = from.tiltY;\n to.twist = from.twist;\n }\n\n /**\n * Copies mouse {@link PIXI.FederatedMouseEvent} data from {@code from} to {@code to}.\n *\n * The following properties are copied:\n * + altKey\n * + button\n * + buttons\n * + clientX\n * + clientY\n * + metaKey\n * + movementX\n * + movementY\n * + pageX\n * + pageY\n * + x\n * + y\n * + screen\n * + shiftKey\n * + global\n * @param from\n * @param to\n */\n protected copyMouseData(from: FederatedEvent, to: FederatedEvent): void\n {\n if (!(from instanceof FederatedMouseEvent && to instanceof FederatedMouseEvent)) return;\n\n to.altKey = from.altKey;\n to.button = from.button;\n to.buttons = from.buttons;\n to.client.copyFrom(from.client);\n to.ctrlKey = from.ctrlKey;\n to.metaKey = from.metaKey;\n to.movement.copyFrom(from.movement);\n to.screen.copyFrom(from.screen);\n to.shiftKey = from.shiftKey;\n to.global.copyFrom(from.global);\n }\n\n /**\n * Copies base {@link PIXI.FederatedEvent} data from {@code from} into {@code to}.\n *\n * The following properties are copied:\n * + isTrusted\n * + srcElement\n * + timeStamp\n * + type\n * @param from - The event to copy data from.\n * @param to - The event to copy data into.\n */\n protected copyData(from: FederatedEvent, to: FederatedEvent): void\n {\n to.isTrusted = from.isTrusted;\n to.srcElement = from.srcElement;\n to.timeStamp = performance.now();\n to.type = from.type;\n to.detail = from.detail;\n to.view = from.view;\n to.which = from.which;\n to.layer.copyFrom(from.layer);\n to.page.copyFrom(from.page);\n }\n\n /**\n * @param id - The pointer ID.\n * @returns The tracking data stored for the given pointer. If no data exists, a blank\n * state will be created.\n */\n protected trackingData(id: number): TrackingData\n {\n if (!this.mappingState.trackingData[id])\n {\n this.mappingState.trackingData[id] = {\n pressTargetsByButton: {},\n clicksByButton: {},\n overTarget: null\n };\n }\n\n return this.mappingState.trackingData[id];\n }\n\n /**\n * Allocate a specific type of event from {@link PIXI.EventBoundary#eventPool this.eventPool}.\n *\n * This allocation is constructor-agnostic, as long as it only takes one argument - this event\n * boundary.\n * @param constructor - The event's constructor.\n */\n protected allocateEvent(\n constructor: { new(boundary: EventBoundary): T }\n ): T\n {\n if (!this.eventPool.has(constructor as any))\n {\n this.eventPool.set(constructor as any, []);\n }\n\n const event = this.eventPool.get(constructor as any).pop() as T\n || new constructor(this);\n\n event.eventPhase = event.NONE;\n event.currentTarget = null;\n event.path = null;\n event.target = null;\n\n return event;\n }\n\n /**\n * Frees the event and puts it back into the event pool.\n *\n * It is illegal to reuse the event until it is allocated again, using `this.allocateEvent`.\n *\n * It is also advised that events not allocated from {@link PIXI.EventBoundary#allocateEvent this.allocateEvent}\n * not be freed. This is because of the possibility that the same event is freed twice, which can cause\n * it to be allocated twice & result in overwriting.\n * @param event - The event to be freed.\n * @throws Error if the event is managed by another event boundary.\n */\n protected freeEvent(event: T): void\n {\n if (event.manager !== this) throw new Error('It is illegal to free an event not managed by this EventBoundary!');\n\n const constructor = event.constructor;\n\n if (!this.eventPool.has(constructor as any))\n {\n this.eventPool.set(constructor as any, []);\n }\n\n this.eventPool.get(constructor as any).push(event);\n }\n\n /**\n * Similar to {@link PIXI.EventEmitter.emit}, except it stops if the `propagationImmediatelyStopped` flag\n * is set on the event.\n * @param e - The event to call each listener with.\n * @param type - The event key.\n */\n private notifyListeners(e: FederatedEvent, type: string): void\n {\n const listeners = ((e.currentTarget as any)._events as EmitterListeners)[type];\n\n if (!listeners) return;\n if (!e.currentTarget.isInteractive()) return;\n\n if ('fn' in listeners)\n {\n if (listeners.once) e.currentTarget.removeListener(type, listeners.fn, undefined, true);\n listeners.fn.call(listeners.context, e);\n }\n else\n {\n for (\n let i = 0, j = listeners.length;\n i < j && !e.propagationImmediatelyStopped;\n i++)\n {\n if (listeners[i].once) e.currentTarget.removeListener(type, listeners[i].fn, undefined, true);\n listeners[i].fn.call(listeners[i].context, e);\n }\n }\n }\n}\n","import { extensions, ExtensionType } from '@pixi/core';\nimport { EventBoundary } from './EventBoundary';\nimport { EventsTicker } from './EventTicker';\nimport { FederatedPointerEvent } from './FederatedPointerEvent';\nimport { FederatedWheelEvent } from './FederatedWheelEvent';\n\nimport type { ExtensionMetadata, IPointData, IRenderer, ISystem } from '@pixi/core';\nimport type { DisplayObject } from '@pixi/display';\nimport type { PixiTouch } from './FederatedEvent';\nimport type { EventMode } from './FederatedEventTarget';\nimport type { FederatedMouseEvent } from './FederatedMouseEvent';\n\nconst MOUSE_POINTER_ID = 1;\nconst TOUCH_TO_POINTER: Record = {\n touchstart: 'pointerdown',\n touchend: 'pointerup',\n touchendoutside: 'pointerupoutside',\n touchmove: 'pointermove',\n touchcancel: 'pointercancel',\n};\n\n/** @ignore */\nexport interface EventSystemOptions\n{\n /**\n * The default event mode mode for all display objects.\n * This option only is available when using **@pixi/events** package\n * (included in the **pixi.js** and **pixi.js-legacy** bundle), otherwise it will be ignored.\n * @memberof PIXI.IRendererOptions\n */\n eventMode?: EventMode;\n\n /**\n * The event features that are enabled by the EventSystem\n * This option only is available when using **@pixi/events** package\n * (included in the **pixi.js** and **pixi.js-legacy** bundle), otherwise it will be ignored.\n * @memberof PIXI.IRendererOptions\n * @example\n * const app = new PIXI.Application({\n * view: canvas,\n * events: {\n * move: true,\n * globalMove: false,\n * click: true,\n * wheel: true,\n * },\n * });\n */\n eventFeatures?: Partial\n}\n\n/**\n * The event features that are enabled by the EventSystem\n * This option only is available when using **@pixi/events** package\n * (included in the **pixi.js** and **pixi.js-legacy** bundle), otherwise it will be ignored.\n * @memberof PIXI\n * @since 7.2.0\n */\ninterface EventSystemFeatures\n{\n /**\n * Enables pointer events associated with pointer movement:\n * - `pointermove` / `mousemove` / `touchmove`\n * - `pointerout` / `mouseout`\n * - `pointerover` / `mouseover`\n */\n move: boolean;\n // eslint-disable-next-line jsdoc/multiline-blocks\n /**\n * Enables global pointer move events:\n * - `globalpointermove`\n * - `globalmousemove`\n * - `globaltouchemove`\n */\n globalMove: boolean;\n /**\n * Enables pointer events associated with clicking:\n * - `pointerup` / `mouseup` / `touchend` / 'rightup'\n * - `pointerupoutside` / `mouseupoutside` / `touchendoutside` / 'rightupoutside'\n * - `pointerdown` / 'mousedown' / `touchstart` / 'rightdown'\n * - `click` / `tap`\n */\n click: boolean;\n /** - Enables wheel events. */\n wheel: boolean;\n}\n\n/**\n * The system for handling UI events.\n * @memberof PIXI\n */\nexport class EventSystem implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n name: 'events',\n type: [\n ExtensionType.RendererSystem,\n ExtensionType.CanvasRendererSystem\n ],\n };\n\n /**\n * The event features that are enabled by the EventSystem\n * This option only is available when using **@pixi/events** package\n * (included in the **pixi.js** and **pixi.js-legacy** bundle), otherwise it will be ignored.\n * @since 7.2.0\n */\n public static defaultEventFeatures: EventSystemFeatures = {\n move: true,\n globalMove: true,\n click: true,\n wheel: true,\n };\n\n private static _defaultEventMode: EventMode;\n\n /**\n * The default interaction mode for all display objects.\n * @see PIXI.DisplayObject.eventMode\n * @type {PIXI.EventMode}\n * @readonly\n * @since 7.2.0\n */\n public static get defaultEventMode()\n {\n return this._defaultEventMode;\n }\n\n /**\n * The {@link PIXI.EventBoundary} for the stage.\n *\n * The {@link PIXI.EventBoundary#rootTarget rootTarget} of this root boundary is automatically set to\n * the last rendered object before any event processing is initiated. This means the main scene\n * needs to be rendered atleast once before UI events will start propagating.\n *\n * The root boundary should only be changed during initialization. Otherwise, any state held by the\n * event boundary may be lost (like hovered & pressed DisplayObjects).\n */\n public readonly rootBoundary: EventBoundary;\n\n /** Does the device support touch events https://www.w3.org/TR/touch-events/ */\n public readonly supportsTouchEvents = 'ontouchstart' in globalThis;\n\n /** Does the device support pointer events https://www.w3.org/Submission/pointer-events/ */\n public readonly supportsPointerEvents = !!globalThis.PointerEvent;\n\n /**\n * Should default browser actions automatically be prevented.\n * Does not apply to pointer events for backwards compatibility\n * preventDefault on pointer events stops mouse events from firing\n * Thus, for every pointer event, there will always be either a mouse of touch event alongside it.\n * @default true\n */\n public autoPreventDefault: boolean;\n\n /**\n * Dictionary of how different cursor modes are handled. Strings are handled as CSS cursor\n * values, objects are handled as dictionaries of CSS values for {@code domElement},\n * and functions are called instead of changing the CSS.\n * Default CSS cursor values are provided for 'default' and 'pointer' modes.\n */\n public cursorStyles: Record void) | CSSStyleDeclaration>;\n\n /**\n * The DOM element to which the root event listeners are bound. This is automatically set to\n * the renderer's {@link PIXI.Renderer#view view}.\n */\n public domElement: HTMLElement = null;\n\n /** The resolution used to convert between the DOM client space into world space. */\n public resolution = 1;\n\n /** The renderer managing this {@link PIXI.EventSystem}. */\n public renderer: IRenderer;\n\n /**\n * The event features that are enabled by the EventSystem\n * This option only is available when using **@pixi/events** package\n * (included in the **pixi.js** and **pixi.js-legacy** bundle), otherwise it will be ignored.\n * @since 7.2.0\n * @example\n * const app = new PIXI.Application()\n * app.renderer.events.features.globalMove = false\n *\n * // to override all features use Object.assign\n * Object.assign(app.renderer.events.features, {\n * move: false,\n * globalMove: false,\n * click: false,\n * wheel: false,\n * })\n */\n public readonly features: EventSystemFeatures;\n\n private currentCursor: string;\n private rootPointerEvent: FederatedPointerEvent;\n private rootWheelEvent: FederatedWheelEvent;\n private eventsAdded: boolean;\n\n /**\n * @param {PIXI.Renderer} renderer\n */\n constructor(renderer: IRenderer)\n {\n this.renderer = renderer;\n this.rootBoundary = new EventBoundary(null);\n EventsTicker.init(this);\n\n this.autoPreventDefault = true;\n this.eventsAdded = false;\n\n this.rootPointerEvent = new FederatedPointerEvent(null);\n this.rootWheelEvent = new FederatedWheelEvent(null);\n\n this.cursorStyles = {\n default: 'inherit',\n pointer: 'pointer',\n };\n\n this.features = new Proxy({ ...EventSystem.defaultEventFeatures }, {\n set: (target, key, value) =>\n {\n if (key === 'globalMove')\n {\n this.rootBoundary.enableGlobalMoveEvents = value;\n }\n target[key as keyof EventSystemFeatures] = value;\n\n return true;\n }\n });\n\n this.onPointerDown = this.onPointerDown.bind(this);\n this.onPointerMove = this.onPointerMove.bind(this);\n this.onPointerUp = this.onPointerUp.bind(this);\n this.onPointerOverOut = this.onPointerOverOut.bind(this);\n this.onWheel = this.onWheel.bind(this);\n }\n\n /**\n * Runner init called, view is available at this point.\n * @ignore\n */\n init(options: EventSystemOptions): void\n {\n const { view, resolution } = this.renderer;\n\n this.setTargetElement(view as HTMLCanvasElement);\n this.resolution = resolution;\n EventSystem._defaultEventMode = options.eventMode ?? 'auto';\n Object.assign(this.features, options.eventFeatures ?? {});\n this.rootBoundary.enableGlobalMoveEvents = this.features.globalMove;\n }\n\n /**\n * Handle changing resolution.\n * @ignore\n */\n resolutionChange(resolution: number): void\n {\n this.resolution = resolution;\n }\n\n /** Destroys all event listeners and detaches the renderer. */\n destroy(): void\n {\n this.setTargetElement(null);\n this.renderer = null;\n }\n\n /**\n * Sets the current cursor mode, handling any callbacks or CSS style changes.\n * @param mode - cursor mode, a key from the cursorStyles dictionary\n */\n public setCursor(mode: string): void\n {\n mode = mode || 'default';\n let applyStyles = true;\n\n // offscreen canvas does not support setting styles, but cursor modes can be functions,\n // in order to handle pixi rendered cursors, so we can't bail\n if (globalThis.OffscreenCanvas && this.domElement instanceof OffscreenCanvas)\n {\n applyStyles = false;\n }\n // if the mode didn't actually change, bail early\n if (this.currentCursor === mode)\n {\n return;\n }\n this.currentCursor = mode;\n const style = this.cursorStyles[mode];\n\n // only do things if there is a cursor style for it\n if (style)\n {\n switch (typeof style)\n {\n case 'string':\n // string styles are handled as cursor CSS\n if (applyStyles)\n {\n this.domElement.style.cursor = style;\n }\n break;\n case 'function':\n // functions are just called, and passed the cursor mode\n style(mode);\n break;\n case 'object':\n // if it is an object, assume that it is a dictionary of CSS styles,\n // apply it to the interactionDOMElement\n if (applyStyles)\n {\n Object.assign(this.domElement.style, style);\n }\n break;\n }\n }\n else if (applyStyles && typeof mode === 'string' && !Object.prototype.hasOwnProperty.call(this.cursorStyles, mode))\n {\n // if it mode is a string (not a Symbol) and cursorStyles doesn't have any entry\n // for the mode, then assume that the dev wants it to be CSS for the cursor.\n this.domElement.style.cursor = mode;\n }\n }\n\n /**\n * The global pointer event.\n * Useful for getting the pointer position without listening to events.\n * @since 7.2.0\n */\n public get pointer(): Readonly\n {\n return this.rootPointerEvent;\n }\n\n /**\n * Event handler for pointer down events on {@link PIXI.EventSystem#domElement this.domElement}.\n * @param nativeEvent - The native mouse/pointer/touch event.\n */\n private onPointerDown(nativeEvent: MouseEvent | PointerEvent | TouchEvent): void\n {\n if (!this.features.click) return;\n this.rootBoundary.rootTarget = this.renderer.lastObjectRendered as DisplayObject;\n\n const events = this.normalizeToPointerData(nativeEvent);\n\n /*\n * No need to prevent default on natural pointer events, as there are no side effects\n * Normalized events, however, may have the double mousedown/touchstart issue on the native android browser,\n * so still need to be prevented.\n */\n\n // Guaranteed that there will be at least one event in events, and all events must have the same pointer type\n\n if (this.autoPreventDefault && (events[0] as any).isNormalized)\n {\n const cancelable = nativeEvent.cancelable || !('cancelable' in nativeEvent);\n\n if (cancelable)\n {\n nativeEvent.preventDefault();\n }\n }\n\n for (let i = 0, j = events.length; i < j; i++)\n {\n const nativeEvent = events[i];\n const federatedEvent = this.bootstrapEvent(this.rootPointerEvent, nativeEvent);\n\n this.rootBoundary.mapEvent(federatedEvent);\n }\n\n this.setCursor(this.rootBoundary.cursor);\n }\n\n /**\n * Event handler for pointer move events on on {@link PIXI.EventSystem#domElement this.domElement}.\n * @param nativeEvent - The native mouse/pointer/touch events.\n */\n private onPointerMove(nativeEvent: MouseEvent | PointerEvent | TouchEvent): void\n {\n if (!this.features.move) return;\n this.rootBoundary.rootTarget = this.renderer.lastObjectRendered as DisplayObject;\n\n EventsTicker.pointerMoved();\n\n const normalizedEvents = this.normalizeToPointerData(nativeEvent);\n\n for (let i = 0, j = normalizedEvents.length; i < j; i++)\n {\n const event = this.bootstrapEvent(this.rootPointerEvent, normalizedEvents[i]);\n\n this.rootBoundary.mapEvent(event);\n }\n\n this.setCursor(this.rootBoundary.cursor);\n }\n\n /**\n * Event handler for pointer up events on {@link PIXI.EventSystem#domElement this.domElement}.\n * @param nativeEvent - The native mouse/pointer/touch event.\n */\n private onPointerUp(nativeEvent: MouseEvent | PointerEvent | TouchEvent): void\n {\n if (!this.features.click) return;\n this.rootBoundary.rootTarget = this.renderer.lastObjectRendered as DisplayObject;\n\n let target = nativeEvent.target;\n\n // if in shadow DOM use composedPath to access target\n if (nativeEvent.composedPath && nativeEvent.composedPath().length > 0)\n {\n target = nativeEvent.composedPath()[0];\n }\n\n const outside = target !== this.domElement ? 'outside' : '';\n const normalizedEvents = this.normalizeToPointerData(nativeEvent);\n\n for (let i = 0, j = normalizedEvents.length; i < j; i++)\n {\n const event = this.bootstrapEvent(this.rootPointerEvent, normalizedEvents[i]);\n\n event.type += outside;\n\n this.rootBoundary.mapEvent(event);\n }\n\n this.setCursor(this.rootBoundary.cursor);\n }\n\n /**\n * Event handler for pointer over & out events on {@link PIXI.EventSystem#domElement this.domElement}.\n * @param nativeEvent - The native mouse/pointer/touch event.\n */\n private onPointerOverOut(nativeEvent: MouseEvent | PointerEvent | TouchEvent): void\n {\n if (!this.features.click) return;\n this.rootBoundary.rootTarget = this.renderer.lastObjectRendered as DisplayObject;\n\n const normalizedEvents = this.normalizeToPointerData(nativeEvent);\n\n for (let i = 0, j = normalizedEvents.length; i < j; i++)\n {\n const event = this.bootstrapEvent(this.rootPointerEvent, normalizedEvents[i]);\n\n this.rootBoundary.mapEvent(event);\n }\n\n this.setCursor(this.rootBoundary.cursor);\n }\n\n /**\n * Passive handler for `wheel` events on {@link PIXI.EventSystem.domElement this.domElement}.\n * @param nativeEvent - The native wheel event.\n */\n protected onWheel(nativeEvent: WheelEvent): void\n {\n if (!this.features.wheel) return;\n const wheelEvent = this.normalizeWheelEvent(nativeEvent);\n\n this.rootBoundary.rootTarget = this.renderer.lastObjectRendered as DisplayObject;\n this.rootBoundary.mapEvent(wheelEvent);\n }\n\n /**\n * Sets the {@link PIXI.EventSystem#domElement domElement} and binds event listeners.\n *\n * To deregister the current DOM element without setting a new one, pass {@code null}.\n * @param element - The new DOM element.\n */\n public setTargetElement(element: HTMLElement): void\n {\n this.removeEvents();\n this.domElement = element;\n EventsTicker.domElement = element;\n this.addEvents();\n }\n\n /** Register event listeners on {@link PIXI.Renderer#domElement this.domElement}. */\n private addEvents(): void\n {\n if (this.eventsAdded || !this.domElement)\n {\n return;\n }\n\n EventsTicker.addTickerListener();\n\n const style = this.domElement.style as CrossCSSStyleDeclaration;\n\n if (style)\n {\n if ((globalThis.navigator as any).msPointerEnabled)\n {\n style.msContentZooming = 'none';\n style.msTouchAction = 'none';\n }\n else if (this.supportsPointerEvents)\n {\n style.touchAction = 'none';\n }\n }\n\n /*\n * These events are added first, so that if pointer events are normalized, they are fired\n * in the same order as non-normalized events. ie. pointer event 1st, mouse / touch 2nd\n */\n if (this.supportsPointerEvents)\n {\n globalThis.document.addEventListener('pointermove', this.onPointerMove, true);\n this.domElement.addEventListener('pointerdown', this.onPointerDown, true);\n // pointerout is fired in addition to pointerup (for touch events) and pointercancel\n // we already handle those, so for the purposes of what we do in onPointerOut, we only\n // care about the pointerleave event\n this.domElement.addEventListener('pointerleave', this.onPointerOverOut, true);\n this.domElement.addEventListener('pointerover', this.onPointerOverOut, true);\n // globalThis.addEventListener('pointercancel', this.onPointerCancel, true);\n globalThis.addEventListener('pointerup', this.onPointerUp, true);\n }\n else\n {\n globalThis.document.addEventListener('mousemove', this.onPointerMove, true);\n this.domElement.addEventListener('mousedown', this.onPointerDown, true);\n this.domElement.addEventListener('mouseout', this.onPointerOverOut, true);\n this.domElement.addEventListener('mouseover', this.onPointerOverOut, true);\n globalThis.addEventListener('mouseup', this.onPointerUp, true);\n\n if (this.supportsTouchEvents)\n {\n this.domElement.addEventListener('touchstart', this.onPointerDown, true);\n // this.domElement.addEventListener('touchcancel', this.onPointerCancel, true);\n this.domElement.addEventListener('touchend', this.onPointerUp, true);\n this.domElement.addEventListener('touchmove', this.onPointerMove, true);\n }\n }\n\n this.domElement.addEventListener('wheel', this.onWheel, {\n passive: true,\n capture: true,\n });\n\n this.eventsAdded = true;\n }\n\n /** Unregister event listeners on {@link PIXI.EventSystem#domElement this.domElement}. */\n private removeEvents(): void\n {\n if (!this.eventsAdded || !this.domElement)\n {\n return;\n }\n\n EventsTicker.removeTickerListener();\n\n const style = this.domElement.style as CrossCSSStyleDeclaration;\n\n if ((globalThis.navigator as any).msPointerEnabled)\n {\n style.msContentZooming = '';\n style.msTouchAction = '';\n }\n else if (this.supportsPointerEvents)\n {\n style.touchAction = '';\n }\n\n if (this.supportsPointerEvents)\n {\n globalThis.document.removeEventListener('pointermove', this.onPointerMove, true);\n this.domElement.removeEventListener('pointerdown', this.onPointerDown, true);\n this.domElement.removeEventListener('pointerleave', this.onPointerOverOut, true);\n this.domElement.removeEventListener('pointerover', this.onPointerOverOut, true);\n // globalThis.removeEventListener('pointercancel', this.onPointerCancel, true);\n globalThis.removeEventListener('pointerup', this.onPointerUp, true);\n }\n else\n {\n globalThis.document.removeEventListener('mousemove', this.onPointerMove, true);\n this.domElement.removeEventListener('mousedown', this.onPointerDown, true);\n this.domElement.removeEventListener('mouseout', this.onPointerOverOut, true);\n this.domElement.removeEventListener('mouseover', this.onPointerOverOut, true);\n globalThis.removeEventListener('mouseup', this.onPointerUp, true);\n\n if (this.supportsTouchEvents)\n {\n this.domElement.removeEventListener('touchstart', this.onPointerDown, true);\n // this.domElement.removeEventListener('touchcancel', this.onPointerCancel, true);\n this.domElement.removeEventListener('touchend', this.onPointerUp, true);\n this.domElement.removeEventListener('touchmove', this.onPointerMove, true);\n }\n }\n\n this.domElement.removeEventListener('wheel', this.onWheel, true);\n\n this.domElement = null;\n this.eventsAdded = false;\n }\n\n /**\n * Maps x and y coords from a DOM object and maps them correctly to the PixiJS view. The\n * resulting value is stored in the point. This takes into account the fact that the DOM\n * element could be scaled and positioned anywhere on the screen.\n * @param {PIXI.IPointData} point - the point that the result will be stored in\n * @param {number} x - the x coord of the position to map\n * @param {number} y - the y coord of the position to map\n */\n public mapPositionToPoint(point: IPointData, x: number, y: number): void\n {\n const rect = this.domElement.isConnected\n ? this.domElement.getBoundingClientRect()\n : {\n x: 0,\n y: 0,\n width: (this.domElement as any).width,\n height: (this.domElement as any).height,\n left: 0,\n top: 0\n };\n\n const resolutionMultiplier = 1.0 / this.resolution;\n\n point.x = ((x - rect.left) * ((this.domElement as any).width / rect.width)) * resolutionMultiplier;\n point.y = ((y - rect.top) * ((this.domElement as any).height / rect.height)) * resolutionMultiplier;\n }\n\n /**\n * Ensures that the original event object contains all data that a regular pointer event would have\n * @param event - The original event data from a touch or mouse event\n * @returns An array containing a single normalized pointer event, in the case of a pointer\n * or mouse event, or a multiple normalized pointer events if there are multiple changed touches\n */\n private normalizeToPointerData(event: TouchEvent | MouseEvent | PointerEvent): PointerEvent[]\n {\n const normalizedEvents = [];\n\n if (this.supportsTouchEvents && event instanceof TouchEvent)\n {\n for (let i = 0, li = event.changedTouches.length; i < li; i++)\n {\n const touch = event.changedTouches[i] as PixiTouch;\n\n if (typeof touch.button === 'undefined') touch.button = 0;\n if (typeof touch.buttons === 'undefined') touch.buttons = 1;\n if (typeof touch.isPrimary === 'undefined')\n {\n touch.isPrimary = event.touches.length === 1 && event.type === 'touchstart';\n }\n if (typeof touch.width === 'undefined') touch.width = touch.radiusX || 1;\n if (typeof touch.height === 'undefined') touch.height = touch.radiusY || 1;\n if (typeof touch.tiltX === 'undefined') touch.tiltX = 0;\n if (typeof touch.tiltY === 'undefined') touch.tiltY = 0;\n if (typeof touch.pointerType === 'undefined') touch.pointerType = 'touch';\n if (typeof touch.pointerId === 'undefined') touch.pointerId = touch.identifier || 0;\n if (typeof touch.pressure === 'undefined') touch.pressure = touch.force || 0.5;\n if (typeof touch.twist === 'undefined') touch.twist = 0;\n if (typeof touch.tangentialPressure === 'undefined') touch.tangentialPressure = 0;\n // TODO: Remove these, as layerX/Y is not a standard, is deprecated, has uneven\n // support, and the fill ins are not quite the same\n // offsetX/Y might be okay, but is not the same as clientX/Y when the canvas's top\n // left is not 0,0 on the page\n if (typeof touch.layerX === 'undefined') touch.layerX = touch.offsetX = touch.clientX;\n if (typeof touch.layerY === 'undefined') touch.layerY = touch.offsetY = touch.clientY;\n\n // mark the touch as normalized, just so that we know we did it\n touch.isNormalized = true;\n touch.type = event.type;\n\n normalizedEvents.push(touch);\n }\n }\n // apparently PointerEvent subclasses MouseEvent, so yay\n else if (!globalThis.MouseEvent\n || (event instanceof MouseEvent && (!this.supportsPointerEvents || !(event instanceof globalThis.PointerEvent))))\n {\n const tempEvent = event as PixiPointerEvent;\n\n if (typeof tempEvent.isPrimary === 'undefined') tempEvent.isPrimary = true;\n if (typeof tempEvent.width === 'undefined') tempEvent.width = 1;\n if (typeof tempEvent.height === 'undefined') tempEvent.height = 1;\n if (typeof tempEvent.tiltX === 'undefined') tempEvent.tiltX = 0;\n if (typeof tempEvent.tiltY === 'undefined') tempEvent.tiltY = 0;\n if (typeof tempEvent.pointerType === 'undefined') tempEvent.pointerType = 'mouse';\n if (typeof tempEvent.pointerId === 'undefined') tempEvent.pointerId = MOUSE_POINTER_ID;\n if (typeof tempEvent.pressure === 'undefined') tempEvent.pressure = 0.5;\n if (typeof tempEvent.twist === 'undefined') tempEvent.twist = 0;\n if (typeof tempEvent.tangentialPressure === 'undefined') tempEvent.tangentialPressure = 0;\n\n // mark the mouse event as normalized, just so that we know we did it\n tempEvent.isNormalized = true;\n\n normalizedEvents.push(tempEvent);\n }\n else\n {\n normalizedEvents.push(event);\n }\n\n return normalizedEvents as PointerEvent[];\n }\n\n /**\n * Normalizes the native {@link https://w3c.github.io/uievents/#interface-wheelevent WheelEvent}.\n *\n * The returned {@link PIXI.FederatedWheelEvent} is a shared instance. It will not persist across\n * multiple native wheel events.\n * @param nativeEvent - The native wheel event that occurred on the canvas.\n * @returns A federated wheel event.\n */\n protected normalizeWheelEvent(nativeEvent: WheelEvent): FederatedWheelEvent\n {\n const event = this.rootWheelEvent;\n\n this.transferMouseData(event, nativeEvent);\n\n // When WheelEvent is triggered by scrolling with mouse wheel, reading WheelEvent.deltaMode\n // before deltaX/deltaY/deltaZ on Firefox will result in WheelEvent.DOM_DELTA_LINE (1),\n // while reading WheelEvent.deltaMode after deltaX/deltaY/deltaZ on Firefox or reading\n // in any order on other browsers will result in WheelEvent.DOM_DELTA_PIXEL (0).\n // Therefore, we need to read WheelEvent.deltaMode after deltaX/deltaY/deltaZ in order to\n // make its behavior more consistent across browsers.\n // @see https://github.com/pixijs/pixijs/issues/8970\n event.deltaX = nativeEvent.deltaX;\n event.deltaY = nativeEvent.deltaY;\n event.deltaZ = nativeEvent.deltaZ;\n event.deltaMode = nativeEvent.deltaMode;\n\n this.mapPositionToPoint(event.screen, nativeEvent.clientX, nativeEvent.clientY);\n event.global.copyFrom(event.screen);\n event.offset.copyFrom(event.screen);\n\n event.nativeEvent = nativeEvent;\n event.type = nativeEvent.type;\n\n return event;\n }\n\n /**\n * Normalizes the `nativeEvent` into a federateed {@link PIXI.FederatedPointerEvent}.\n * @param event\n * @param nativeEvent\n */\n private bootstrapEvent(event: FederatedPointerEvent, nativeEvent: PointerEvent): FederatedPointerEvent\n {\n event.originalEvent = null;\n event.nativeEvent = nativeEvent;\n\n event.pointerId = nativeEvent.pointerId;\n event.width = nativeEvent.width;\n event.height = nativeEvent.height;\n event.isPrimary = nativeEvent.isPrimary;\n event.pointerType = nativeEvent.pointerType;\n event.pressure = nativeEvent.pressure;\n event.tangentialPressure = nativeEvent.tangentialPressure;\n event.tiltX = nativeEvent.tiltX;\n event.tiltY = nativeEvent.tiltY;\n event.twist = nativeEvent.twist;\n this.transferMouseData(event, nativeEvent);\n\n this.mapPositionToPoint(event.screen, nativeEvent.clientX, nativeEvent.clientY);\n event.global.copyFrom(event.screen);// global = screen for top-level\n event.offset.copyFrom(event.screen);// EventBoundary recalculates using its rootTarget\n\n event.isTrusted = nativeEvent.isTrusted;\n if (event.type === 'pointerleave')\n {\n event.type = 'pointerout';\n }\n if (event.type.startsWith('mouse'))\n {\n event.type = event.type.replace('mouse', 'pointer');\n }\n if (event.type.startsWith('touch'))\n {\n event.type = TOUCH_TO_POINTER[event.type] || event.type;\n }\n\n return event;\n }\n\n /**\n * Transfers base & mouse event data from the {@code nativeEvent} to the federated event.\n * @param event\n * @param nativeEvent\n */\n private transferMouseData(event: FederatedMouseEvent, nativeEvent: MouseEvent): void\n {\n event.isTrusted = nativeEvent.isTrusted;\n event.srcElement = nativeEvent.srcElement;\n event.timeStamp = performance.now();\n event.type = nativeEvent.type;\n\n event.altKey = nativeEvent.altKey;\n event.button = nativeEvent.button;\n event.buttons = nativeEvent.buttons;\n event.client.x = nativeEvent.clientX;\n event.client.y = nativeEvent.clientY;\n event.ctrlKey = nativeEvent.ctrlKey;\n event.metaKey = nativeEvent.metaKey;\n event.movement.x = nativeEvent.movementX;\n event.movement.y = nativeEvent.movementY;\n event.page.x = nativeEvent.pageX;\n event.page.y = nativeEvent.pageY;\n event.relatedTarget = null;\n event.shiftKey = nativeEvent.shiftKey;\n }\n}\n\ninterface CrossCSSStyleDeclaration extends CSSStyleDeclaration\n{\n msContentZooming: string;\n msTouchAction: string;\n}\n\ninterface PixiPointerEvent extends PointerEvent\n{\n isPrimary: boolean;\n width: number;\n height: number;\n tiltX: number;\n tiltY: number;\n pointerType: string;\n pointerId: number;\n pressure: number;\n twist: number;\n tangentialPressure: number;\n isNormalized: boolean;\n type: string;\n}\n\nextensions.add(EventSystem);\n","import { utils } from '@pixi/core';\nimport { DisplayObject } from '@pixi/display';\nimport { EventSystem } from './EventSystem';\nimport { FederatedEvent } from './FederatedEvent';\n\nimport type { AllFederatedEventMap } from './FederatedEventMap';\nimport type { FederatedPointerEvent } from './FederatedPointerEvent';\nimport type { FederatedWheelEvent } from './FederatedWheelEvent';\n\nexport type Cursor = 'auto'\n| 'default'\n| 'none'\n| 'context-menu'\n| 'help'\n| 'pointer'\n| 'progress'\n| 'wait'\n| 'cell'\n| 'crosshair'\n| 'text'\n| 'vertical-text'\n| 'alias'\n| 'copy'\n| 'move'\n| 'no-drop'\n| 'not-allowed'\n| 'e-resize'\n| 'n-resize'\n| 'ne-resize'\n| 'nw-resize'\n| 's-resize'\n| 'se-resize'\n| 'sw-resize'\n| 'w-resize'\n| 'ns-resize'\n| 'ew-resize'\n| 'nesw-resize'\n| 'col-resize'\n| 'nwse-resize'\n| 'row-resize'\n| 'all-scroll'\n| 'zoom-in'\n| 'zoom-out'\n| 'grab'\n| 'grabbing';\n\n// @ignore - This is documented elsewhere.\nexport interface IHitArea\n{\n contains(x: number, y: number): boolean;\n}\n\n/**\n * Function type for handlers, e.g., onclick\n * @memberof PIXI\n */\nexport type FederatedEventHandler = (event: T) => void;\n\n/**\n * The type of interaction a DisplayObject can be. For more information on values and their meaning,\n * see {@link PIXI.DisplayObject.eventMode DisplayObject's eventMode property}.\n * @memberof PIXI\n * @since 7.2.0\n */\nexport type EventMode = 'none' | 'passive' | 'auto' | 'static' | 'dynamic';\n\n/**\n * Describes the shape for a {@link PIXI.FederatedEvent}'s' `eventTarget`.\n * @memberof PIXI\n */\nexport interface FederatedEventTarget extends utils.EventEmitter, EventTarget\n{\n /** The cursor preferred when the mouse pointer is hovering over. */\n cursor: Cursor | string;\n\n /** The parent of this event target. */\n readonly parent?: FederatedEventTarget;\n\n /** The children of this event target. */\n readonly children?: ReadonlyArray;\n\n /** Whether this event target should fire UI events. */\n interactive: boolean\n _internalInteractive: boolean;\n /** The mode of interaction for this object */\n eventMode: EventMode;\n _internalEventMode: EventMode;\n\n /** Returns true if the DisplayObject has interactive 'static' or 'dynamic' */\n isInteractive: () => boolean;\n\n /** Whether this event target has any children that need UI events. This can be used optimize event propagation. */\n interactiveChildren: boolean;\n\n /** The hit-area specifies the area for which pointer events should be captured by this event target. */\n hitArea: IHitArea | null;\n\n // In Angular projects, zone.js is monkey patching the `EventTarget`\n // by adding its own `removeAllListeners(event?: string): void;` method,\n // so we have to override this signature when extending both `EventTarget` and `utils.EventEmitter`\n // to make it compatible with Angular projects\n // @see https://github.com/pixijs/pixijs/issues/8794\n\n /** Remove all listeners, or those of the specified event. */\n removeAllListeners(event?: string | symbol): this;\n\n /** Handler for 'click' event */\n onclick: FederatedEventHandler | null;\n /** Handler for 'mousedown' event */\n onmousedown: FederatedEventHandler | null;\n /** Handler for 'mouseenter' event */\n onmouseenter: FederatedEventHandler | null;\n /** Handler for 'mouseleave' event */\n onmouseleave: FederatedEventHandler | null;\n /** Handler for 'mousemove' event */\n onmousemove: FederatedEventHandler | null;\n /** Handler for 'globalmousemove' event */\n onglobalmousemove: FederatedEventHandler | null;\n /** Handler for 'mouseout' event */\n onmouseout: FederatedEventHandler | null;\n /** Handler for 'mouseover' event */\n onmouseover: FederatedEventHandler | null;\n /** Handler for 'mouseup' event */\n onmouseup: FederatedEventHandler | null;\n /** Handler for 'mouseupoutside' event */\n onmouseupoutside: FederatedEventHandler | null;\n /** Handler for 'pointercancel' event */\n onpointercancel: FederatedEventHandler | null;\n /** Handler for 'pointerdown' event */\n onpointerdown: FederatedEventHandler | null;\n /** Handler for 'pointerenter' event */\n onpointerenter: FederatedEventHandler | null;\n /** Handler for 'pointerleave' event */\n onpointerleave: FederatedEventHandler | null;\n /** Handler for 'pointermove' event */\n onpointermove: FederatedEventHandler | null;\n /** Handler for 'globalpointermove' event */\n onglobalpointermove: FederatedEventHandler | null;\n /** Handler for 'pointerout' event */\n onpointerout: FederatedEventHandler | null;\n /** Handler for 'pointerover' event */\n onpointerover: FederatedEventHandler | null;\n /** Handler for 'pointertap' event */\n onpointertap: FederatedEventHandler | null;\n /** Handler for 'pointerup' event */\n onpointerup: FederatedEventHandler | null;\n /** Handler for 'pointerupoutside' event */\n onpointerupoutside: FederatedEventHandler | null;\n /** Handler for 'rightclick' event */\n onrightclick: FederatedEventHandler | null;\n /** Handler for 'rightdown' event */\n onrightdown: FederatedEventHandler | null;\n /** Handler for 'rightup' event */\n onrightup: FederatedEventHandler | null;\n /** Handler for 'rightupoutside' event */\n onrightupoutside: FederatedEventHandler | null;\n /** Handler for 'tap' event */\n ontap: FederatedEventHandler | null;\n /** Handler for 'touchcancel' event */\n ontouchcancel: FederatedEventHandler | null;\n /** Handler for 'touchend' event */\n ontouchend: FederatedEventHandler | null;\n /** Handler for 'touchendoutside' event */\n ontouchendoutside: FederatedEventHandler | null;\n /** Handler for 'touchmove' event */\n ontouchmove: FederatedEventHandler | null;\n /** Handler for 'globaltouchmove' event */\n onglobaltouchmove: FederatedEventHandler | null;\n /** Handler for 'touchstart' event */\n ontouchstart: FederatedEventHandler | null;\n /** Handler for 'wheel' event */\n onwheel: FederatedEventHandler | null;\n}\n\ntype AddListenerOptions = boolean | AddEventListenerOptions;\ntype RemoveListenerOptions = boolean | EventListenerOptions;\n\nexport interface IFederatedDisplayObject\n extends Omit\n{\n addEventListener(\n type: K,\n listener: (e: AllFederatedEventMap[K]) => any,\n options?: AddListenerOptions\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: AddListenerOptions\n ): void;\n removeEventListener(\n type: K,\n listener: (e: AllFederatedEventMap[K]) => any,\n options?: RemoveListenerOptions\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: RemoveListenerOptions\n ): void;\n}\n\nfunction convertEventModeToInteractiveMode(mode: EventMode): boolean\n{\n return mode === 'dynamic' || mode === 'static';\n}\n\nexport const FederatedDisplayObject: IFederatedDisplayObject = {\n\n /**\n * Property-based event handler for the `click` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onclick = (event) => {\n * //some function here that happens on click\n * }\n */\n onclick: null,\n\n /**\n * Property-based event handler for the `mousedown` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onmousedown = (event) => {\n * //some function here that happens on mousedown\n * }\n */\n onmousedown: null,\n\n /**\n * Property-based event handler for the `mouseenter` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onmouseenter = (event) => {\n * //some function here that happens on mouseenter\n * }\n */\n onmouseenter: null,\n\n /**\n * Property-based event handler for the `mouseleave` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onmouseleave = (event) => {\n * //some function here that happens on mouseleave\n * }\n */\n onmouseleave: null,\n\n /**\n * Property-based event handler for the `mousemove` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onmousemove = (event) => {\n * //some function here that happens on mousemove\n * }\n */\n onmousemove: null,\n\n /**\n * Property-based event handler for the `globalmousemove` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onglobalmousemove = (event) => {\n * //some function here that happens on globalmousemove\n * }\n */\n onglobalmousemove: null,\n\n /**\n * Property-based event handler for the `mouseout` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onmouseout = (event) => {\n * //some function here that happens on mouseout\n * }\n */\n onmouseout: null,\n\n /**\n * Property-based event handler for the `mouseover` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onmouseover = (event) => {\n * //some function here that happens on mouseover\n * }\n */\n onmouseover: null,\n\n /**\n * Property-based event handler for the `mouseup` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onmouseup = (event) => {\n * //some function here that happens on mouseup\n * }\n */\n onmouseup: null,\n\n /**\n * Property-based event handler for the `mouseupoutside` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onmouseupoutside = (event) => {\n * //some function here that happens on mouseupoutside\n * }\n */\n onmouseupoutside: null,\n\n /**\n * Property-based event handler for the `pointercancel` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onpointercancel = (event) => {\n * //some function here that happens on pointercancel\n * }\n */\n onpointercancel: null,\n\n /**\n * Property-based event handler for the `pointerdown` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onpointerdown = (event) => {\n * //some function here that happens on pointerdown\n * }\n */\n onpointerdown: null,\n\n /**\n * Property-based event handler for the `pointerenter` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onpointerenter = (event) => {\n * //some function here that happens on pointerenter\n * }\n */\n onpointerenter: null,\n\n /**\n * Property-based event handler for the `pointerleave` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onpointerleave = (event) => {\n * //some function here that happens on pointerleave\n * }\n */\n onpointerleave: null,\n\n /**\n * Property-based event handler for the `pointermove` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onpointermove = (event) => {\n * //some function here that happens on pointermove\n * }\n */\n onpointermove: null,\n\n /**\n * Property-based event handler for the `globalpointermove` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onglobalpointermove = (event) => {\n * //some function here that happens on globalpointermove\n * }\n */\n onglobalpointermove: null,\n\n /**\n * Property-based event handler for the `pointerout` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onpointerout = (event) => {\n * //some function here that happens on pointerout\n * }\n */\n onpointerout: null,\n\n /**\n * Property-based event handler for the `pointerover` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onpointerover = (event) => {\n * //some function here that happens on pointerover\n * }\n */\n onpointerover: null,\n\n /**\n * Property-based event handler for the `pointertap` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onpointertap = (event) => {\n * //some function here that happens on pointertap\n * }\n */\n onpointertap: null,\n\n /**\n * Property-based event handler for the `pointerup` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onpointerup = (event) => {\n * //some function here that happens on pointerup\n * }\n */\n onpointerup: null,\n\n /**\n * Property-based event handler for the `pointerupoutside` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onpointerupoutside = (event) => {\n * //some function here that happens on pointerupoutside\n * }\n */\n onpointerupoutside: null,\n\n /**\n * Property-based event handler for the `rightclick` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onrightclick = (event) => {\n * //some function here that happens on rightclick\n * }\n */\n onrightclick: null,\n\n /**\n * Property-based event handler for the `rightdown` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onrightdown = (event) => {\n * //some function here that happens on rightdown\n * }\n */\n onrightdown: null,\n\n /**\n * Property-based event handler for the `rightup` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onrightup = (event) => {\n * //some function here that happens on rightup\n * }\n */\n onrightup: null,\n\n /**\n * Property-based event handler for the `rightupoutside` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onrightupoutside = (event) => {\n * //some function here that happens on rightupoutside\n * }\n */\n onrightupoutside: null,\n\n /**\n * Property-based event handler for the `tap` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.ontap = (event) => {\n * //some function here that happens on tap\n * }\n */\n ontap: null,\n\n /**\n * Property-based event handler for the `touchcancel` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.ontouchcancel = (event) => {\n * //some function here that happens on touchcancel\n * }\n */\n ontouchcancel: null,\n\n /**\n * Property-based event handler for the `touchend` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.ontouchend = (event) => {\n * //some function here that happens on touchend\n * }\n */\n ontouchend: null,\n\n /**\n * Property-based event handler for the `touchendoutside` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.ontouchendoutside = (event) => {\n * //some function here that happens on touchendoutside\n * }\n */\n ontouchendoutside: null,\n\n /**\n * Property-based event handler for the `touchmove` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.ontouchmove = (event) => {\n * //some function here that happens on touchmove\n * }\n */\n ontouchmove: null,\n\n /**\n * Property-based event handler for the `globaltouchmove` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onglobaltouchmove = (event) => {\n * //some function here that happens on globaltouchmove\n * }\n */\n onglobaltouchmove: null,\n\n /**\n * Property-based event handler for the `touchstart` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.ontouchstart = (event) => {\n * //some function here that happens on touchstart\n * }\n */\n ontouchstart: null,\n\n /**\n * Property-based event handler for the `wheel` event.\n * @memberof PIXI.DisplayObject#\n * @default null\n * @example\n * this.onwheel = (event) => {\n * //some function here that happens on wheel\n * }\n */\n onwheel: null,\n /**\n * @ignore\n */\n _internalInteractive: undefined,\n /**\n * Enable interaction events for the DisplayObject. Touch, pointer and mouse\n * @memberof PIXI.DisplayObject#\n */\n get interactive()\n {\n return this._internalInteractive ?? convertEventModeToInteractiveMode(EventSystem.defaultEventMode);\n },\n set interactive(value: boolean)\n {\n if (process.env.DEBUG)\n {\n utils.deprecation(\n '7.2.0',\n // eslint-disable-next-line max-len\n `Setting interactive is deprecated, use eventMode = 'none'/'passive'/'auto'/'static'/'dynamic' instead.`\n );\n }\n\n this._internalInteractive = value;\n this.eventMode = value ? 'static' : 'auto';\n },\n /**\n * @ignore\n */\n _internalEventMode: undefined,\n /**\n * Enable interaction events for the DisplayObject. Touch, pointer and mouse.\n * This now replaces the `interactive` property.\n * There are 5 types of interaction settings:\n * - `'none'`: Ignores all interaction events, even on its children.\n * - `'passive'`: Does not emit events and ignores all hit testing on itself and non-interactive children.\n * Interactive children will still emit events.\n * - `'auto'`: Does not emit events but is hit tested if parent is interactive. Same as `interactive = false` in v7\n * - `'static'`: Emit events and is hit tested. Same as `interaction = true` in v7\n * - `'dynamic'`: Emits events and is hit tested but will also receive mock interaction events fired from a ticker to\n * allow for interaction when the mouse isn't moving\n * @example\n * import { Sprite } from 'pixi.js';\n *\n * const sprite = new Sprite(texture);\n * sprite.eventMode = 'static';\n * sprite.on('tap', (event) => {\n * // Handle event\n * });\n * @memberof PIXI.DisplayObject#\n * @since 7.2.0\n */\n get eventMode()\n {\n return this._internalEventMode ?? EventSystem.defaultEventMode;\n },\n set eventMode(value)\n {\n this._internalInteractive = convertEventModeToInteractiveMode(value);\n this._internalEventMode = value;\n },\n\n /**\n * Determines if the displayObject is interactive or not\n * @returns {boolean} Whether the displayObject is interactive or not\n * @memberof PIXI.DisplayObject#\n * @since 7.2.0\n * @example\n * import { Sprite } from 'pixi.js';\n * const sprite = new Sprite(texture);\n * sprite.eventMode = 'static';\n * sprite.isInteractive(); // true\n *\n * sprite.eventMode = 'dynamic';\n * sprite.isInteractive(); // true\n *\n * sprite.eventMode = 'none';\n * sprite.isInteractive(); // false\n *\n * sprite.eventMode = 'passive';\n * sprite.isInteractive(); // false\n *\n * sprite.eventMode = 'auto';\n * sprite.isInteractive(); // false\n */\n isInteractive()\n {\n return this.eventMode === 'static' || this.eventMode === 'dynamic';\n },\n\n /**\n * Determines if the children to the displayObject can be clicked/touched\n * Setting this to false allows PixiJS to bypass a recursive `hitTest` function\n * @memberof PIXI.Container#\n */\n interactiveChildren: true,\n\n /**\n * Interaction shape. Children will be hit first, then this shape will be checked.\n * Setting this will cause this shape to be checked in hit tests rather than the displayObject's bounds.\n * @example\n * import { Rectangle, Sprite } from 'pixi.js';\n *\n * const sprite = new Sprite(texture);\n * sprite.interactive = true;\n * sprite.hitArea = new Rectangle(0, 0, 100, 100);\n * @member {PIXI.IHitArea}\n * @memberof PIXI.DisplayObject#\n */\n hitArea: null,\n\n /**\n * Unlike `on` or `addListener` which are methods from EventEmitter, `addEventListener`\n * seeks to be compatible with the DOM's `addEventListener` with support for options.\n * **IMPORTANT:** _Only_ available if using the `@pixi/events` package.\n * @memberof PIXI.DisplayObject\n * @param type - The type of event to listen to.\n * @param listener - The listener callback or object.\n * @param options - Listener options, used for capture phase.\n * @example\n * // Tell the user whether they did a single, double, triple, or nth click.\n * button.addEventListener('click', {\n * handleEvent(e): {\n * let prefix;\n *\n * switch (e.detail) {\n * case 1: prefix = 'single'; break;\n * case 2: prefix = 'double'; break;\n * case 3: prefix = 'triple'; break;\n * default: prefix = e.detail + 'th'; break;\n * }\n *\n * console.log('That was a ' + prefix + 'click');\n * }\n * });\n *\n * // But skip the first click!\n * button.parent.addEventListener('click', function blockClickOnce(e) {\n * e.stopImmediatePropagation();\n * button.parent.removeEventListener('click', blockClickOnce, true);\n * }, {\n * capture: true,\n * });\n */\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: AddListenerOptions\n )\n {\n const capture = (typeof options === 'boolean' && options)\n || (typeof options === 'object' && options.capture);\n const context = typeof listener === 'function' ? undefined : listener;\n\n type = capture ? `${type}capture` : type;\n listener = typeof listener === 'function' ? listener : listener.handleEvent;\n\n (this as unknown as utils.EventEmitter).on(type, listener, context);\n },\n\n /**\n * Unlike `off` or `removeListener` which are methods from EventEmitter, `removeEventListener`\n * seeks to be compatible with the DOM's `removeEventListener` with support for options.\n * **IMPORTANT:** _Only_ available if using the `@pixi/events` package.\n * @memberof PIXI.DisplayObject\n * @param type - The type of event the listener is bound to.\n * @param listener - The listener callback or object.\n * @param options - The original listener options. This is required to deregister a capture phase listener.\n */\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: RemoveListenerOptions\n )\n {\n const capture = (typeof options === 'boolean' && options)\n || (typeof options === 'object' && options.capture);\n const context = typeof listener === 'function' ? undefined : listener;\n\n type = capture ? `${type}capture` : type;\n listener = typeof listener === 'function' ? listener : listener.handleEvent;\n\n (this as unknown as utils.EventEmitter).off(type, listener, context);\n },\n\n /**\n * Dispatch the event on this {@link PIXI.DisplayObject} using the event's {@link PIXI.EventBoundary}.\n *\n * The target of the event is set to `this` and the `defaultPrevented` flag is cleared before dispatch.\n *\n * **IMPORTANT:** _Only_ available if using the `@pixi/events` package.\n * @memberof PIXI.DisplayObject\n * @param e - The event to dispatch.\n * @returns Whether the {@link PIXI.FederatedEvent.preventDefault preventDefault}() method was not invoked.\n * @example\n * // Reuse a click event!\n * button.dispatchEvent(clickEvent);\n */\n dispatchEvent(e: Event): boolean\n {\n if (!(e instanceof FederatedEvent))\n {\n throw new Error('DisplayObject cannot propagate events outside of the Federated Events API');\n }\n\n e.defaultPrevented = false;\n e.path = null;\n e.target = this as unknown as FederatedEventTarget;\n e.manager.dispatchEvent(e);\n\n return !e.defaultPrevented;\n }\n};\n\nDisplayObject.mixin(FederatedDisplayObject);\n","import { extensions, ExtensionType, utils } from '@pixi/core';\nimport { DisplayObject } from '@pixi/display';\nimport { FederatedEvent } from '@pixi/events';\nimport { accessibleTarget } from './accessibleTarget';\n\nimport type { ExtensionMetadata, IRenderer, Rectangle } from '@pixi/core';\nimport type { Container } from '@pixi/display';\nimport type { IAccessibleHTMLElement } from './accessibleTarget';\n\n// add some extra variables to the container..\nDisplayObject.mixin(accessibleTarget);\n\nconst KEY_CODE_TAB = 9;\n\nconst DIV_TOUCH_SIZE = 100;\nconst DIV_TOUCH_POS_X = 0;\nconst DIV_TOUCH_POS_Y = 0;\nconst DIV_TOUCH_ZINDEX = 2;\n\nconst DIV_HOOK_SIZE = 1;\nconst DIV_HOOK_POS_X = -1000;\nconst DIV_HOOK_POS_Y = -1000;\nconst DIV_HOOK_ZINDEX = 2;\n\n/**\n * The Accessibility manager recreates the ability to tab and have content read by screen readers.\n * This is very important as it can possibly help people with disabilities access PixiJS content.\n *\n * A DisplayObject can be made accessible just like it can be made interactive. This manager will map the\n * events as if the mouse was being used, minimizing the effort required to implement.\n *\n * An instance of this class is automatically created by default, and can be found at `renderer.plugins.accessibility`\n * @class\n * @memberof PIXI\n */\nexport class AccessibilityManager\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n name: 'accessibility',\n type: [\n ExtensionType.RendererPlugin,\n ExtensionType.CanvasRendererPlugin,\n ],\n };\n\n /** Setting this to true will visually show the divs. */\n public debug = false;\n\n /**\n * The renderer this accessibility manager works for.\n * @type {PIXI.CanvasRenderer|PIXI.Renderer}\n */\n public renderer: IRenderer;\n\n /** Internal variable, see isActive getter. */\n private _isActive = false;\n\n /** Internal variable, see isMobileAccessibility getter. */\n private _isMobileAccessibility = false;\n\n /** Button element for handling touch hooks. */\n private _hookDiv: HTMLElement;\n\n /** This is the dom element that will sit over the PixiJS element. This is where the div overlays will go. */\n private div: HTMLElement;\n\n /** A simple pool for storing divs. */\n private pool: IAccessibleHTMLElement[] = [];\n\n /** This is a tick used to check if an object is no longer being rendered. */\n private renderId = 0;\n\n /** The array of currently active accessible items. */\n private children: DisplayObject[] = [];\n\n /** Count to throttle div updates on android devices. */\n private androidUpdateCount = 0;\n\n /** The frequency to update the div elements. */\n private androidUpdateFrequency = 500; // 2fps\n\n /**\n * @param {PIXI.CanvasRenderer|PIXI.Renderer} renderer - A reference to the current renderer\n */\n constructor(renderer: IRenderer)\n {\n this._hookDiv = null;\n\n if (utils.isMobile.tablet || utils.isMobile.phone)\n {\n this.createTouchHook();\n }\n\n // first we create a div that will sit over the PixiJS element. This is where the div overlays will go.\n const div = document.createElement('div');\n\n div.style.width = `${DIV_TOUCH_SIZE}px`;\n div.style.height = `${DIV_TOUCH_SIZE}px`;\n div.style.position = 'absolute';\n div.style.top = `${DIV_TOUCH_POS_X}px`;\n div.style.left = `${DIV_TOUCH_POS_Y}px`;\n div.style.zIndex = DIV_TOUCH_ZINDEX.toString();\n\n this.div = div;\n this.renderer = renderer;\n\n /**\n * pre-bind the functions\n * @type {Function}\n * @private\n */\n this._onKeyDown = this._onKeyDown.bind(this);\n\n /**\n * pre-bind the functions\n * @type {Function}\n * @private\n */\n this._onMouseMove = this._onMouseMove.bind(this);\n\n // let listen for tab.. once pressed we can fire up and show the accessibility layer\n globalThis.addEventListener('keydown', this._onKeyDown, false);\n }\n\n /**\n * Value of `true` if accessibility is currently active and accessibility layers are showing.\n * @member {boolean}\n * @readonly\n */\n get isActive(): boolean\n {\n return this._isActive;\n }\n\n /**\n * Value of `true` if accessibility is enabled for touch devices.\n * @member {boolean}\n * @readonly\n */\n get isMobileAccessibility(): boolean\n {\n return this._isMobileAccessibility;\n }\n\n /**\n * Creates the touch hooks.\n * @private\n */\n private createTouchHook(): void\n {\n const hookDiv = document.createElement('button');\n\n hookDiv.style.width = `${DIV_HOOK_SIZE}px`;\n hookDiv.style.height = `${DIV_HOOK_SIZE}px`;\n hookDiv.style.position = 'absolute';\n hookDiv.style.top = `${DIV_HOOK_POS_X}px`;\n hookDiv.style.left = `${DIV_HOOK_POS_Y}px`;\n hookDiv.style.zIndex = DIV_HOOK_ZINDEX.toString();\n hookDiv.style.backgroundColor = '#FF0000';\n hookDiv.title = 'select to enable accessibility for this content';\n\n hookDiv.addEventListener('focus', () =>\n {\n this._isMobileAccessibility = true;\n this.activate();\n this.destroyTouchHook();\n });\n\n document.body.appendChild(hookDiv);\n this._hookDiv = hookDiv;\n }\n\n /**\n * Destroys the touch hooks.\n * @private\n */\n private destroyTouchHook(): void\n {\n if (!this._hookDiv)\n {\n return;\n }\n document.body.removeChild(this._hookDiv);\n this._hookDiv = null;\n }\n\n /**\n * Activating will cause the Accessibility layer to be shown.\n * This is called when a user presses the tab key.\n * @private\n */\n private activate(): void\n {\n if (this._isActive)\n {\n return;\n }\n\n this._isActive = true;\n\n globalThis.document.addEventListener('mousemove', this._onMouseMove, true);\n globalThis.removeEventListener('keydown', this._onKeyDown, false);\n\n this.renderer.on('postrender', this.update, this);\n this.renderer.view.parentNode?.appendChild(this.div);\n }\n\n /**\n * Deactivating will cause the Accessibility layer to be hidden.\n * This is called when a user moves the mouse.\n * @private\n */\n private deactivate(): void\n {\n if (!this._isActive || this._isMobileAccessibility)\n {\n return;\n }\n\n this._isActive = false;\n\n globalThis.document.removeEventListener('mousemove', this._onMouseMove, true);\n globalThis.addEventListener('keydown', this._onKeyDown, false);\n\n this.renderer.off('postrender', this.update);\n this.div.parentNode?.removeChild(this.div);\n }\n\n /**\n * This recursive function will run through the scene graph and add any new accessible objects to the DOM layer.\n * @private\n * @param {PIXI.Container} displayObject - The DisplayObject to check.\n */\n private updateAccessibleObjects(displayObject: Container): void\n {\n if (!displayObject.visible || !displayObject.accessibleChildren)\n {\n return;\n }\n\n if (displayObject.accessible && displayObject.isInteractive())\n {\n if (!displayObject._accessibleActive)\n {\n this.addChild(displayObject);\n }\n\n displayObject.renderId = this.renderId;\n }\n\n const children = displayObject.children;\n\n if (children)\n {\n for (let i = 0; i < children.length; i++)\n {\n this.updateAccessibleObjects(children[i] as Container);\n }\n }\n }\n\n /**\n * Before each render this function will ensure that all divs are mapped correctly to their DisplayObjects.\n * @private\n */\n private update(): void\n {\n /* On Android default web browser, tab order seems to be calculated by position rather than tabIndex,\n * moving buttons can cause focus to flicker between two buttons making it hard/impossible to navigate,\n * so I am just running update every half a second, seems to fix it.\n */\n const now = performance.now();\n\n if (utils.isMobile.android.device && now < this.androidUpdateCount)\n {\n return;\n }\n\n this.androidUpdateCount = now + this.androidUpdateFrequency;\n\n if (!this.renderer.renderingToScreen)\n {\n return;\n }\n\n // update children...\n if (this.renderer.lastObjectRendered)\n {\n this.updateAccessibleObjects(this.renderer.lastObjectRendered as Container);\n }\n\n const { x, y, width, height } = this.renderer.view.getBoundingClientRect();\n const { width: viewWidth, height: viewHeight, resolution } = this.renderer;\n\n const sx = (width / viewWidth) * resolution;\n const sy = (height / viewHeight) * resolution;\n\n let div = this.div;\n\n div.style.left = `${x}px`;\n div.style.top = `${y}px`;\n div.style.width = `${viewWidth}px`;\n div.style.height = `${viewHeight}px`;\n\n for (let i = 0; i < this.children.length; i++)\n {\n const child = this.children[i];\n\n if (child.renderId !== this.renderId)\n {\n child._accessibleActive = false;\n\n utils.removeItems(this.children, i, 1);\n this.div.removeChild(child._accessibleDiv);\n this.pool.push(child._accessibleDiv);\n child._accessibleDiv = null;\n\n i--;\n }\n else\n {\n // map div to display..\n div = child._accessibleDiv;\n let hitArea = child.hitArea as Rectangle;\n const wt = child.worldTransform;\n\n if (child.hitArea)\n {\n div.style.left = `${(wt.tx + (hitArea.x * wt.a)) * sx}px`;\n div.style.top = `${(wt.ty + (hitArea.y * wt.d)) * sy}px`;\n\n div.style.width = `${hitArea.width * wt.a * sx}px`;\n div.style.height = `${hitArea.height * wt.d * sy}px`;\n }\n else\n {\n hitArea = child.getBounds();\n\n this.capHitArea(hitArea);\n\n div.style.left = `${hitArea.x * sx}px`;\n div.style.top = `${hitArea.y * sy}px`;\n\n div.style.width = `${hitArea.width * sx}px`;\n div.style.height = `${hitArea.height * sy}px`;\n\n // update button titles and hints if they exist and they've changed\n if (div.title !== child.accessibleTitle && child.accessibleTitle !== null)\n {\n div.title = child.accessibleTitle;\n }\n if (div.getAttribute('aria-label') !== child.accessibleHint\n && child.accessibleHint !== null)\n {\n div.setAttribute('aria-label', child.accessibleHint);\n }\n }\n\n // the title or index may have changed, if so lets update it!\n if (child.accessibleTitle !== div.title || child.tabIndex !== div.tabIndex)\n {\n div.title = child.accessibleTitle;\n div.tabIndex = child.tabIndex;\n if (this.debug) this.updateDebugHTML(div);\n }\n }\n }\n\n // increment the render id..\n this.renderId++;\n }\n\n /**\n * private function that will visually add the information to the\n * accessability div\n * @param {HTMLElement} div -\n */\n public updateDebugHTML(div: IAccessibleHTMLElement): void\n {\n div.innerHTML = `type: ${div.type}
title : ${div.title}
tabIndex: ${div.tabIndex}`;\n }\n\n /**\n * Adjust the hit area based on the bounds of a display object\n * @param {PIXI.Rectangle} hitArea - Bounds of the child\n */\n public capHitArea(hitArea: Rectangle): void\n {\n if (hitArea.x < 0)\n {\n hitArea.width += hitArea.x;\n hitArea.x = 0;\n }\n\n if (hitArea.y < 0)\n {\n hitArea.height += hitArea.y;\n hitArea.y = 0;\n }\n\n const { width: viewWidth, height: viewHeight } = this.renderer;\n\n if (hitArea.x + hitArea.width > viewWidth)\n {\n hitArea.width = viewWidth - hitArea.x;\n }\n\n if (hitArea.y + hitArea.height > viewHeight)\n {\n hitArea.height = viewHeight - hitArea.y;\n }\n }\n\n /**\n * Adds a DisplayObject to the accessibility manager\n * @private\n * @param {PIXI.DisplayObject} displayObject - The child to make accessible.\n */\n private addChild(displayObject: T): void\n {\n // this.activate();\n\n let div = this.pool.pop();\n\n if (!div)\n {\n div = document.createElement('button');\n\n div.style.width = `${DIV_TOUCH_SIZE}px`;\n div.style.height = `${DIV_TOUCH_SIZE}px`;\n div.style.backgroundColor = this.debug ? 'rgba(255,255,255,0.5)' : 'transparent';\n div.style.position = 'absolute';\n div.style.zIndex = DIV_TOUCH_ZINDEX.toString();\n div.style.borderStyle = 'none';\n\n // ARIA attributes ensure that button title and hint updates are announced properly\n if (navigator.userAgent.toLowerCase().includes('chrome'))\n {\n // Chrome doesn't need aria-live to work as intended; in fact it just gets more confused.\n div.setAttribute('aria-live', 'off');\n }\n else\n {\n div.setAttribute('aria-live', 'polite');\n }\n\n if (navigator.userAgent.match(/rv:.*Gecko\\//))\n {\n // FireFox needs this to announce only the new button name\n div.setAttribute('aria-relevant', 'additions');\n }\n else\n {\n // required by IE, other browsers don't much care\n div.setAttribute('aria-relevant', 'text');\n }\n\n div.addEventListener('click', this._onClick.bind(this));\n div.addEventListener('focus', this._onFocus.bind(this));\n div.addEventListener('focusout', this._onFocusOut.bind(this));\n }\n\n // set pointer events\n div.style.pointerEvents = displayObject.accessiblePointerEvents;\n // set the type, this defaults to button!\n div.type = displayObject.accessibleType;\n\n if (displayObject.accessibleTitle && displayObject.accessibleTitle !== null)\n {\n div.title = displayObject.accessibleTitle;\n }\n else if (!displayObject.accessibleHint\n || displayObject.accessibleHint === null)\n {\n div.title = `displayObject ${displayObject.tabIndex}`;\n }\n\n if (displayObject.accessibleHint\n && displayObject.accessibleHint !== null)\n {\n div.setAttribute('aria-label', displayObject.accessibleHint);\n }\n\n if (this.debug) this.updateDebugHTML(div);\n\n displayObject._accessibleActive = true;\n displayObject._accessibleDiv = div;\n div.displayObject = displayObject;\n\n this.children.push(displayObject);\n this.div.appendChild(displayObject._accessibleDiv);\n displayObject._accessibleDiv.tabIndex = displayObject.tabIndex;\n }\n\n /**\n * Dispatch events with the EventSystem.\n * @param e\n * @param type\n * @private\n */\n private _dispatchEvent(e: UIEvent, type: string[]): void\n {\n const { displayObject: target } = e.target as IAccessibleHTMLElement;\n const boundry = this.renderer.events.rootBoundary;\n const event: FederatedEvent = Object.assign(new FederatedEvent(boundry), { target });\n\n boundry.rootTarget = this.renderer.lastObjectRendered as DisplayObject;\n type.forEach((type) => boundry.dispatchEvent(event, type));\n }\n\n /**\n * Maps the div button press to pixi's EventSystem (click)\n * @private\n * @param {MouseEvent} e - The click event.\n */\n private _onClick(e: MouseEvent): void\n {\n this._dispatchEvent(e, ['click', 'pointertap', 'tap']);\n }\n\n /**\n * Maps the div focus events to pixi's EventSystem (mouseover)\n * @private\n * @param {FocusEvent} e - The focus event.\n */\n private _onFocus(e: FocusEvent): void\n {\n if (!(e.target as Element).getAttribute('aria-live'))\n {\n (e.target as Element).setAttribute('aria-live', 'assertive');\n }\n\n this._dispatchEvent(e, ['mouseover']);\n }\n\n /**\n * Maps the div focus events to pixi's EventSystem (mouseout)\n * @private\n * @param {FocusEvent} e - The focusout event.\n */\n private _onFocusOut(e: FocusEvent): void\n {\n if (!(e.target as Element).getAttribute('aria-live'))\n {\n (e.target as Element).setAttribute('aria-live', 'polite');\n }\n\n this._dispatchEvent(e, ['mouseout']);\n }\n\n /**\n * Is called when a key is pressed\n * @private\n * @param {KeyboardEvent} e - The keydown event.\n */\n private _onKeyDown(e: KeyboardEvent): void\n {\n if (e.keyCode !== KEY_CODE_TAB)\n {\n return;\n }\n\n this.activate();\n }\n\n /**\n * Is called when the mouse moves across the renderer element\n * @private\n * @param {MouseEvent} e - The mouse event.\n */\n private _onMouseMove(e: MouseEvent): void\n {\n if (e.movementX === 0 && e.movementY === 0)\n {\n return;\n }\n\n this.deactivate();\n }\n\n /** Destroys the accessibility manager */\n public destroy(): void\n {\n this.destroyTouchHook();\n this.div = null;\n\n globalThis.document.removeEventListener('mousemove', this._onMouseMove, true);\n globalThis.removeEventListener('keydown', this._onKeyDown);\n\n this.pool = null;\n this.children = null;\n this.renderer = null;\n }\n}\n\nextensions.add(AccessibilityManager);\n","import type { DisplayObject } from '@pixi/display';\n\nexport type PointerEvents = 'auto'\n| 'none'\n| 'visiblePainted'\n| 'visibleFill'\n| 'visibleStroke'\n| 'visible'\n| 'painted'\n| 'fill'\n| 'stroke'\n| 'all'\n| 'inherit';\n\nexport interface IAccessibleTarget\n{\n accessible: boolean;\n accessibleTitle: string;\n accessibleHint: string;\n tabIndex: number;\n _accessibleActive: boolean;\n _accessibleDiv: IAccessibleHTMLElement;\n accessibleType: string;\n accessiblePointerEvents: PointerEvents;\n accessibleChildren: boolean;\n renderId: number;\n}\n\nexport interface IAccessibleHTMLElement extends HTMLElement\n{\n type?: string;\n displayObject?: DisplayObject;\n}\n\n/**\n * Default property values of accessible objects\n * used by {@link PIXI.AccessibilityManager}.\n * @private\n * @function accessibleTarget\n * @memberof PIXI\n * @type {object}\n * @example\n * import { accessibleTarget } from 'pixi.js';\n *\n * function MyObject() {}\n * Object.assign(MyObject.prototype, accessibleTarget);\n */\nexport const accessibleTarget: IAccessibleTarget = {\n /**\n * Flag for if the object is accessible. If true AccessibilityManager will overlay a\n * shadow div with attributes set\n * @member {boolean}\n * @memberof PIXI.DisplayObject#\n */\n accessible: false,\n\n /**\n * Sets the title attribute of the shadow div\n * If accessibleTitle AND accessibleHint has not been this will default to 'displayObject [tabIndex]'\n * @member {?string}\n * @memberof PIXI.DisplayObject#\n */\n accessibleTitle: null,\n\n /**\n * Sets the aria-label attribute of the shadow div\n * @member {string}\n * @memberof PIXI.DisplayObject#\n */\n accessibleHint: null,\n\n /**\n * @member {number}\n * @memberof PIXI.DisplayObject#\n * @private\n * @todo Needs docs.\n */\n tabIndex: 0,\n\n /**\n * @member {boolean}\n * @memberof PIXI.DisplayObject#\n * @todo Needs docs.\n */\n _accessibleActive: false,\n\n /**\n * @member {boolean}\n * @memberof PIXI.DisplayObject#\n * @todo Needs docs.\n */\n _accessibleDiv: null,\n\n /**\n * Specify the type of div the accessible layer is. Screen readers treat the element differently\n * depending on this type. Defaults to button.\n * @member {string}\n * @memberof PIXI.DisplayObject#\n * @default 'button'\n */\n accessibleType: 'button',\n\n /**\n * Specify the pointer-events the accessible div will use\n * Defaults to auto.\n * @member {string}\n * @memberof PIXI.DisplayObject#\n * @default 'auto'\n */\n accessiblePointerEvents: 'auto',\n\n /**\n * Setting to false will prevent any children inside this container to\n * be accessible. Defaults to true.\n * @member {boolean}\n * @memberof PIXI.DisplayObject#\n * @default true\n */\n accessibleChildren: true,\n\n renderId: -1,\n};\n","import { autoDetectRenderer, extensions, ExtensionType } from '@pixi/core';\nimport { Container } from '@pixi/display';\n\nimport type { ICanvas, IRenderer, IRendererOptionsAuto, Rectangle } from '@pixi/core';\nimport type { IDestroyOptions } from '@pixi/display';\n\n/**\n * Any plugin that's usable for Application should contain these methods.\n * @memberof PIXI\n */\nexport interface IApplicationPlugin\n{\n /**\n * Called when Application is constructed, scoped to Application instance.\n * Passes in `options` as the only argument, which are Application constructor options.\n * @param {object} options - Application options.\n */\n init(options: Partial): void;\n /** Called when destroying Application, scoped to Application instance. */\n destroy(): void;\n}\n\n/**\n * Application options supplied to constructor.\n * @memberof PIXI\n */\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IApplicationOptions extends IRendererOptionsAuto, GlobalMixins.IApplicationOptions {}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface Application extends GlobalMixins.Application {}\n\n/**\n * Convenience class to create a new PixiJS application.\n *\n * This class automatically creates the renderer, ticker and root container.\n * @example\n * import { Application, Sprite } from 'pixi.js';\n *\n * // Create the application\n * const app = new Application();\n *\n * // Add the view to the DOM\n * document.body.appendChild(app.view);\n *\n * // ex, add display objects\n * app.stage.addChild(Sprite.from('something.png'));\n * @class\n * @memberof PIXI\n */\nexport class Application\n{\n /** Collection of installed plugins. */\n static _plugins: IApplicationPlugin[] = [];\n\n /**\n * The root display container that's rendered.\n * @member {PIXI.Container}\n */\n public stage: Container = new Container();\n\n /**\n * WebGL renderer if available, otherwise CanvasRenderer.\n * @member {PIXI.Renderer|PIXI.CanvasRenderer}\n */\n public renderer: IRenderer;\n\n /**\n * @param options - The optional application and renderer parameters.\n */\n constructor(options?: Partial)\n {\n // The default options\n options = Object.assign({\n forceCanvas: false,\n }, options);\n\n this.renderer = autoDetectRenderer(options);\n\n // install plugins here\n Application._plugins.forEach((plugin) =>\n {\n plugin.init.call(this, options);\n });\n }\n\n /** Render the current stage. */\n public render(): void\n {\n this.renderer.render(this.stage);\n }\n\n /**\n * Reference to the renderer's canvas element.\n * @member {PIXI.ICanvas}\n * @readonly\n */\n get view(): VIEW\n {\n return this.renderer?.view;\n }\n\n /**\n * Reference to the renderer's screen rectangle. Its safe to use as `filterArea` or `hitArea` for the whole screen.\n * @member {PIXI.Rectangle}\n * @readonly\n */\n get screen(): Rectangle\n {\n return this.renderer?.screen;\n }\n\n /**\n * Destroy and don't use after this.\n * @param {boolean} [removeView=false] - Automatically remove canvas from DOM.\n * @param {object|boolean} [stageOptions] - Options parameter. A boolean will act as if all options\n * have been set to that value\n * @param {boolean} [stageOptions.children=false] - if set to true, all the children will have their destroy\n * method called as well. 'stageOptions' will be passed on to those calls.\n * @param {boolean} [stageOptions.texture=false] - Only used for child Sprites if stageOptions.children is set\n * to true. Should it destroy the texture of the child sprite\n * @param {boolean} [stageOptions.baseTexture=false] - Only used for child Sprites if stageOptions.children is set\n * to true. Should it destroy the base texture of the child sprite\n */\n public destroy(removeView?: boolean, stageOptions?: IDestroyOptions | boolean): void\n {\n // Destroy plugins in the opposite order\n // which they were constructed\n const plugins = Application._plugins.slice(0);\n\n plugins.reverse();\n plugins.forEach((plugin) =>\n {\n plugin.destroy.call(this);\n });\n\n this.stage.destroy(stageOptions);\n this.stage = null;\n\n this.renderer.destroy(removeView);\n this.renderer = null;\n }\n}\n\nextensions.handleByList(ExtensionType.Application, Application._plugins);\n","import { extensions, ExtensionType } from '@pixi/core';\n\nimport type { ExtensionMetadata, Renderer } from '@pixi/core';\n\ntype ResizeableRenderer = Pick;\n\nexport interface ResizePluginOptions\n{\n /**\n * Element to automatically resize stage to.\n * @memberof PIXI.IApplicationOptions\n */\n resizeTo?: Window | HTMLElement;\n}\n\n/**\n * Middleware for for Application's resize functionality\n * @private\n * @class\n */\nexport class ResizePlugin\n{\n /** @ignore */\n static extension: ExtensionMetadata = ExtensionType.Application;\n\n public static resizeTo: Window | HTMLElement;\n public static resize: () => void;\n public static renderer: ResizeableRenderer;\n public static queueResize: () => void;\n public static render: () => void;\n private static _resizeId: number;\n private static _resizeTo: Window | HTMLElement;\n private static cancelResize: () => void;\n\n /**\n * Initialize the plugin with scope of application instance\n * @static\n * @private\n * @param {object} [options] - See application options\n */\n static init(options: ResizePluginOptions): void\n {\n Object.defineProperty(this, 'resizeTo',\n /**\n * The HTML element or window to automatically resize the\n * renderer's view element to match width and height.\n * @member {Window|HTMLElement}\n * @name resizeTo\n * @memberof PIXI.Application#\n */\n {\n set(dom: Window | HTMLElement)\n {\n globalThis.removeEventListener('resize', this.queueResize);\n this._resizeTo = dom;\n if (dom)\n {\n globalThis.addEventListener('resize', this.queueResize);\n this.resize();\n }\n },\n get()\n {\n return this._resizeTo;\n },\n });\n\n /**\n * Resize is throttled, so it's safe to call this multiple times per frame and it'll\n * only be called once.\n * @memberof PIXI.Application#\n * @method queueResize\n * @private\n */\n this.queueResize = (): void =>\n {\n if (!this._resizeTo)\n {\n return;\n }\n\n this.cancelResize();\n\n // // Throttle resize events per raf\n this._resizeId = requestAnimationFrame(() => this.resize());\n };\n\n /**\n * Cancel the resize queue.\n * @memberof PIXI.Application#\n * @method cancelResize\n * @private\n */\n this.cancelResize = (): void =>\n {\n if (this._resizeId)\n {\n cancelAnimationFrame(this._resizeId);\n this._resizeId = null;\n }\n };\n\n /**\n * Execute an immediate resize on the renderer, this is not\n * throttled and can be expensive to call many times in a row.\n * Will resize only if `resizeTo` property is set.\n * @memberof PIXI.Application#\n * @method resize\n */\n this.resize = (): void =>\n {\n if (!this._resizeTo)\n {\n return;\n }\n\n // clear queue resize\n this.cancelResize();\n\n let width: number;\n let height: number;\n\n // Resize to the window\n if (this._resizeTo === globalThis.window)\n {\n width = globalThis.innerWidth;\n height = globalThis.innerHeight;\n }\n // Resize to other HTML entities\n else\n {\n const { clientWidth, clientHeight } = this._resizeTo as HTMLElement;\n\n width = clientWidth;\n height = clientHeight;\n }\n\n this.renderer.resize(width, height);\n this.render();\n };\n\n // On resize\n this._resizeId = null;\n this._resizeTo = null;\n this.resizeTo = options.resizeTo || null;\n }\n\n /**\n * Clean up the ticker, scoped to application\n * @static\n * @private\n */\n static destroy(): void\n {\n globalThis.removeEventListener('resize', this.queueResize);\n this.cancelResize();\n this.cancelResize = null;\n this.queueResize = null;\n this.resizeTo = null;\n this.resize = null;\n }\n}\n\nextensions.add(ResizePlugin);\n","import { extensions, ExtensionType } from '@pixi/core';\n\nimport type { CacheParser } from './cache';\nimport type { FormatDetectionParser } from './detections';\nimport type { LoaderParser } from './loader';\nimport type { ResolveURLParser } from './resolver';\n\nconst assetKeyMap = {\n loader: ExtensionType.LoadParser,\n resolver: ExtensionType.ResolveParser,\n cache: ExtensionType.CacheParser,\n detection: ExtensionType.DetectionParser,\n};\n\ntype AssetType = keyof typeof assetKeyMap;\n\n/**\n * This developer convenience object allows developers to group\n * together the various asset parsers into a single object.\n * @memberof PIXI\n */\ninterface AssetExtension\n{\n extension: ExtensionType.Asset,\n loader?: Partial>,\n resolver?: Partial,\n cache?: Partial>,\n detection?: Partial,\n}\n\n// Split the Asset extension into it's various parts\n// these are handled in the Assets.ts file\nextensions.handle(ExtensionType.Asset, (extension) =>\n{\n const ref = extension.ref as AssetExtension;\n\n Object.entries(assetKeyMap)\n .filter(([key]) => !!ref[key as AssetType])\n .forEach(([key, type]) => extensions.add(Object.assign(\n ref[key as AssetType],\n // Allow the function to optionally define it's own\n // ExtensionMetadata, the use cases here is priority for LoaderParsers\n { extension: ref[key as AssetType].extension ?? type },\n )));\n}, (extension) =>\n{\n const ref = extension.ref as AssetExtension;\n\n Object.keys(assetKeyMap)\n .filter((key) => !!ref[key as AssetType])\n .forEach((key) => extensions.remove(ref[key as AssetType]));\n});\n\nexport type { AssetExtension };\n","import type { Loader } from './loader/Loader';\nimport type { ResolvedAsset } from './types';\n\n/**\n * Quietly Loads assets in the background.\n * @memberof PIXI\n */\nexport class BackgroundLoader\n{\n /** Whether or not the loader should continue loading. */\n private _isActive: boolean;\n\n /** Assets to load. */\n private readonly _assetList: ResolvedAsset[];\n\n /** Whether or not the loader is loading. */\n private _isLoading: boolean;\n\n /** Number of assets to load at a time. */\n private readonly _maxConcurrent: number;\n\n /** Should the loader log to the console. */\n public verbose: boolean;\n private readonly _loader: Loader;\n\n /**\n * @param loader\n * @param verbose - should the loader log to the console\n */\n constructor(loader: Loader, verbose = false)\n {\n this._loader = loader;\n this._assetList = [];\n this._isLoading = false;\n this._maxConcurrent = 1;\n this.verbose = verbose;\n }\n\n /**\n * Adds an array of assets to load.\n * @param assetUrls - assets to load\n */\n public add(assetUrls: ResolvedAsset[]): void\n {\n assetUrls.forEach((a) =>\n {\n this._assetList.push(a);\n });\n\n if (this.verbose)\n {\n // eslint-disable-next-line no-console\n console.log('[BackgroundLoader] assets: ', this._assetList);\n }\n\n if (this._isActive && !this._isLoading)\n {\n this._next();\n }\n }\n\n /**\n * Loads the next set of assets. Will try to load as many assets as it can at the same time.\n *\n * The max assets it will try to load at one time will be 4.\n */\n private async _next(): Promise\n {\n if (this._assetList.length && this._isActive)\n {\n this._isLoading = true;\n\n const toLoad = [];\n\n const toLoadAmount = Math.min(this._assetList.length, this._maxConcurrent);\n\n for (let i = 0; i < toLoadAmount; i++)\n {\n toLoad.push(this._assetList.pop());\n }\n\n await this._loader.load(toLoad);\n\n this._isLoading = false;\n\n this._next();\n }\n }\n\n /**\n * Activate/Deactivate the loading. If set to true then it will immediately continue to load the next asset.\n * @returns whether the class is active\n */\n get active(): boolean\n {\n return this._isActive;\n }\n\n set active(value: boolean)\n {\n if (this._isActive === value) return;\n\n this._isActive = value;\n\n if (value && !this._isLoading)\n {\n this._next();\n }\n }\n}\n","import { utils } from '@pixi/core';\n\nexport function checkExtension(url: string, extension: string | string[]): boolean\n{\n const tempURL = url.split('?')[0];\n const ext = utils.path.extname(tempURL).toLowerCase();\n\n if (Array.isArray(extension))\n {\n return extension.includes(ext);\n }\n\n return ext === extension;\n}\n","export const convertToList = (\n input: string | T | (string | T)[],\n transform?: (input: string) => T,\n forceTransform = false\n): T[] =>\n{\n if (!Array.isArray(input))\n {\n input = [input as T];\n }\n\n if (!transform)\n {\n return input as T[];\n }\n\n return (input as (string | T)[]).map((item): T =>\n {\n if (typeof item === 'string' || forceTransform)\n {\n return transform(item as string);\n }\n\n return item as T;\n });\n};\n","import { BaseTexture, Texture } from '@pixi/core';\nimport { convertToList } from '../utils';\n\nimport type { CacheParser } from './CacheParser';\n\n/**\n * A single Cache for all assets.\n *\n * When assets are added to the cache via set they normally are added to the cache as key-value pairs.\n *\n * With this cache, you can add parsers that will take the object and convert it to a list of assets that can be cached.\n * for example a cacheSprite Sheet parser will add all of the textures found within its sprite sheet directly to the cache.\n *\n * This gives devs the flexibility to cache any type of object however we want.\n *\n * It is not intended that this class is created by developers - it is part of the Asset package.\n * This is the first major system of PixiJS' main Assets class.\n * @memberof PIXI\n * @class Cache\n */\nclass CacheClass\n{\n private _parsers: CacheParser[] = [];\n\n private readonly _cache: Map = new Map();\n private readonly _cacheMap: Map = new Map();\n\n /** Clear all entries. */\n public reset(): void\n {\n this._cacheMap.clear();\n this._cache.clear();\n }\n\n /**\n * Check if the key exists\n * @param key - The key to check\n */\n public has(key: string): boolean\n {\n return this._cache.has(key);\n }\n\n /**\n * Fetch entry by key\n * @param key - The key of the entry to get\n */\n public get(key: string): T\n {\n const result = this._cache.get(key);\n\n if (!result)\n {\n if (process.env.DEBUG)\n {\n console.warn(`[Assets] Asset id ${key} was not found in the Cache`);\n }\n }\n\n return result as T;\n }\n\n /**\n * Set a value by key or keys name\n * @param key - The key or keys to set\n * @param value - The value to store in the cache or from which cacheable assets will be derived.\n */\n public set(key: string | string[], value: unknown): void\n {\n const keys = convertToList(key);\n\n let cacheableAssets: Record;\n\n for (let i = 0; i < this.parsers.length; i++)\n {\n const parser = this.parsers[i];\n\n if (parser.test(value))\n {\n cacheableAssets = parser.getCacheableAssets(keys, value);\n\n break;\n }\n }\n\n if (!cacheableAssets)\n {\n cacheableAssets = {};\n\n keys.forEach((key) =>\n {\n cacheableAssets[key] = value;\n });\n }\n\n const cacheKeys = Object.keys(cacheableAssets);\n\n const cachedAssets = {\n cacheKeys,\n keys\n };\n\n // this is so we can remove them later..\n keys.forEach((key) =>\n {\n this._cacheMap.set(key, cachedAssets);\n });\n\n cacheKeys.forEach((key) =>\n {\n if (this._cache.has(key) && this._cache.get(key) !== value)\n {\n if (process.env.DEBUG)\n {\n console.warn('[Cache] already has key:', key);\n }\n }\n\n this._cache.set(key, cacheableAssets[key]);\n });\n\n // temporary to keep compatible with existing texture caching.. until we remove them!\n if (value instanceof Texture)\n {\n const texture: Texture = value;\n\n keys.forEach((key) =>\n {\n if (texture.baseTexture !== Texture.EMPTY.baseTexture)\n {\n BaseTexture.addToCache(texture.baseTexture, key);\n }\n\n Texture.addToCache(texture, key);\n });\n }\n }\n\n /**\n * Remove entry by key\n *\n * This function will also remove any associated alias from the cache also.\n * @param key - The key of the entry to remove\n */\n public remove(key: string): void\n {\n if (!this._cacheMap.has(key))\n {\n if (process.env.DEBUG)\n {\n console.warn(`[Assets] Asset id ${key} was not found in the Cache`);\n }\n\n return;\n }\n\n const cacheMap = this._cacheMap.get(key);\n\n const cacheKeys = cacheMap.cacheKeys;\n\n cacheKeys.forEach((key) =>\n {\n this._cache.delete(key);\n });\n\n cacheMap.keys.forEach((key: string) =>\n {\n this._cacheMap.delete(key);\n });\n }\n\n /** All loader parsers registered */\n public get parsers(): CacheParser[]\n {\n return this._parsers;\n }\n}\n\nexport const Cache = new CacheClass();\n","/**\n * Checks if the given value is an array.\n * @param item - The item to test\n */\nexport const isSingleItem = (item: unknown): boolean => (!Array.isArray(item));\n","import { utils } from '@pixi/core';\nimport { convertToList, isSingleItem } from '../utils';\n\nimport type { ResolvedAsset } from '../types';\nimport type { LoaderParser } from './parsers/LoaderParser';\nimport type { PromiseAndParser } from './types';\n\n/**\n * The Loader is responsible for loading all assets, such as images, spritesheets, audio files, etc.\n * It does not do anything clever with URLs - it just loads stuff!\n * Behind the scenes all things are cached using promises. This means it's impossible to load an asset more than once.\n * Through the use of LoaderParsers, the loader can understand how to load any kind of file!\n *\n * It is not intended that this class is created by developers - its part of the Asset class\n * This is the second major system of PixiJS' main Assets class\n * @memberof PIXI\n * @class AssetLoader\n */\nexport class Loader\n{\n private _parsers: LoaderParser[] = [];\n private _parserHash: Record;\n\n private _parsersValidated = false;\n\n /** All loader parsers registered */\n public parsers = new Proxy(this._parsers, {\n set: (target, key, value) =>\n {\n this._parsersValidated = false;\n\n target[key as any as number] = value;\n\n return true;\n }\n });\n\n /** Cache loading promises that ae currently active */\n public promiseCache: Record = {};\n\n /** function used for testing */\n public reset(): void\n {\n this._parsersValidated = false;\n this.promiseCache = {};\n }\n\n /**\n * Used internally to generate a promise for the asset to be loaded.\n * @param url - The URL to be loaded\n * @param data - any custom additional information relevant to the asset being loaded\n * @returns - a promise that will resolve to an Asset for example a Texture of a JSON object\n */\n private _getLoadPromiseAndParser(url: string, data?: ResolvedAsset): PromiseAndParser\n {\n const result: PromiseAndParser = {\n promise: null,\n parser: null\n };\n\n result.promise = (async () =>\n {\n let asset = null;\n\n let parser: LoaderParser = null;\n\n // first check to see if the user has specified a parser\n if (data.loadParser)\n {\n // they have? lovely, lets use it\n parser = this._parserHash[data.loadParser];\n\n if (!parser)\n {\n if (process.env.DEBUG)\n {\n // eslint-disable-next-line max-len\n console.warn(`[Assets] specified load parser \"${data.loadParser}\" not found while loading ${url}`);\n }\n }\n }\n\n // no parser specified, so lets try and find one using the tests\n if (!parser)\n {\n for (let i = 0; i < this.parsers.length; i++)\n {\n const parserX = this.parsers[i];\n\n if (parserX.load && parserX.test?.(url, data, this))\n {\n parser = parserX;\n break;\n }\n }\n\n if (!parser)\n {\n if (process.env.DEBUG)\n {\n // eslint-disable-next-line max-len\n console.warn(`[Assets] ${url} could not be loaded as we don't know how to parse it, ensure the correct parser has been added`);\n }\n\n return null;\n }\n }\n\n asset = await parser.load(url, data, this);\n result.parser = parser;\n\n for (let i = 0; i < this.parsers.length; i++)\n {\n const parser = this.parsers[i];\n\n if (parser.parse)\n {\n if (parser.parse && await parser.testParse?.(asset, data, this))\n {\n // transform the asset..\n asset = await parser.parse(asset, data, this) || asset;\n\n result.parser = parser;\n }\n }\n }\n\n return asset;\n })();\n\n return result;\n }\n\n /**\n * Loads one or more assets using the parsers added to the Loader.\n * @example\n * // Single asset:\n * const asset = await Loader.load('cool.png');\n * console.log(asset);\n *\n * // Multiple assets:\n * const assets = await Loader.load(['cool.png', 'cooler.png']);\n * console.log(assets);\n * @param assetsToLoadIn - urls that you want to load, or a single one!\n * @param onProgress - For multiple asset loading only, an optional function that is called\n * when progress on asset loading is made. The function is passed a single parameter, `progress`,\n * which represents the percentage (0.0 - 1.0) of the assets loaded. Do not use this function\n * to detect when assets are complete and available, instead use the Promise returned by this function.\n */\n public async load(\n assetsToLoadIn: string | ResolvedAsset,\n onProgress?: (progress: number) => void,\n ): Promise;\n public async load(\n assetsToLoadIn: string[] | ResolvedAsset[],\n onProgress?: (progress: number) => void,\n ): Promise>;\n public async load(\n assetsToLoadIn: string | string[] | ResolvedAsset | ResolvedAsset[],\n onProgress?: (progress: number) => void,\n ): Promise>\n {\n if (!this._parsersValidated)\n {\n this._validateParsers();\n }\n\n let count = 0;\n\n const assets: Record> = {};\n\n const singleAsset = isSingleItem(assetsToLoadIn);\n\n const assetsToLoad = convertToList(assetsToLoadIn, (item) => ({\n alias: [item],\n src: item,\n }));\n\n const total = assetsToLoad.length;\n\n const promises: Promise[] = assetsToLoad.map(async (asset: ResolvedAsset) =>\n {\n const url = utils.path.toAbsolute(asset.src);\n\n if (!assets[asset.src])\n {\n try\n {\n if (!this.promiseCache[url])\n {\n this.promiseCache[url] = this._getLoadPromiseAndParser(url, asset);\n }\n\n assets[asset.src] = await this.promiseCache[url].promise;\n\n // Only progress if nothing goes wrong\n if (onProgress) onProgress(++count / total);\n }\n catch (e)\n {\n // Delete eventually registered file and promises from internal cache\n // so they can be eligible for another loading attempt\n delete this.promiseCache[url];\n delete assets[asset.src];\n\n // Stop further execution\n throw new Error(`[Loader.load] Failed to load ${url}.\\n${e}`);\n }\n }\n });\n\n await Promise.all(promises);\n\n return singleAsset ? assets[assetsToLoad[0].src] : assets;\n }\n\n /**\n * Unloads one or more assets. Any unloaded assets will be destroyed, freeing up memory for your app.\n * The parser that created the asset, will be the one that unloads it.\n * @example\n * // Single asset:\n * const asset = await Loader.load('cool.png');\n *\n * await Loader.unload('cool.png');\n *\n * console.log(asset.destroyed); // true\n * @param assetsToUnloadIn - urls that you want to unload, or a single one!\n */\n public async unload(\n assetsToUnloadIn: string | string[] | ResolvedAsset | ResolvedAsset[],\n ): Promise\n {\n const assetsToUnload = convertToList(assetsToUnloadIn, (item) => ({\n alias: [item],\n src: item,\n }));\n\n const promises: Promise[] = assetsToUnload.map(async (asset: ResolvedAsset) =>\n {\n const url = utils.path.toAbsolute(asset.src);\n\n const loadPromise = this.promiseCache[url];\n\n if (loadPromise)\n {\n const loadedAsset = await loadPromise.promise;\n\n delete this.promiseCache[url];\n\n loadPromise.parser?.unload?.(loadedAsset, asset, this);\n }\n });\n\n await Promise.all(promises);\n }\n\n /** validates our parsers, right now it only checks for name conflicts but we can add more here as required! */\n private _validateParsers()\n {\n this._parsersValidated = true;\n\n this._parserHash = this._parsers\n .filter((parser) => parser.name)\n .reduce((hash, parser) =>\n {\n if (hash[parser.name])\n {\n if (process.env.DEBUG)\n {\n console.warn(`[Assets] loadParser name conflict \"${parser.name}\"`);\n }\n }\n\n return { ...hash, [parser.name]: parser };\n }, {} as Record);\n }\n}\n","import type { ExtensionMetadata } from '@pixi/core';\nimport type { ResolvedAsset } from '../../types';\nimport type { Loader } from '../Loader';\n\n/**\n * The extension priority for loader parsers.\n * Helpful when managing multiple parsers that share the same extension test.\n * The higher priority parsers will be checked first.\n * @memberof PIXI\n * @enum {number}\n */\nexport enum LoaderParserPriority\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /** Generic parsers: txt, json, webfonts */\n Low = 0,\n /** PixiJS assets with generic extensions: spritesheets, bitmapfonts */\n Normal = 1,\n /** Specific texture types: svg, png, ktx, dds, basis */\n High = 2,\n}\n\n/**\n * All functions are optional here. The flow:\n *\n * for every asset,\n *\n * 1. `parser.test()`: Test the asset url.\n * 2. `parser.load()`: If test passes call the load function with the url\n * 3. `parser.testParse()`: Test to see if the asset should be parsed by the plugin\n * 4. `parse.parse()`: If test is parsed, then run the parse function on the asset.\n *\n * some plugins may only be used for parsing,\n * some only for loading\n * and some for both!\n * @memberof PIXI\n */\nexport interface LoaderParser>\n{\n extension?: ExtensionMetadata;\n\n /** A config to adjust the parser */\n config?: CONFIG;\n\n /** The name of the parser (this can be used when specifying loadParser in a ResolvedAsset) */\n name?: string;\n\n /**\n * each URL to load will be tested here,\n * if the test is passed the assets are loaded using the load function below.\n * Good place to test for things like file extensions!\n * @param url - The URL to test\n * @param resolvedAsset - Any custom additional information relevant to the asset being loaded\n * @param loader - The loader instance\n */\n test?: (url: string, resolvedAsset?: ResolvedAsset, loader?: Loader) => boolean;\n\n /**\n * This is the promise that loads the URL provided\n * resolves with a loaded asset if returned by the parser.\n * @param url - The URL to load\n * @param resolvedAsset - Any custom additional information relevant to the asset being loaded\n * @param loader - The loader instance\n */\n load?: (url: string, resolvedAsset?: ResolvedAsset, loader?: Loader) => Promise;\n\n /**\n * This function is used to test if the parse function should be run on the asset\n * If this returns true then parse is called with the asset\n * @param asset - The loaded asset data\n * @param resolvedAsset - Any custom additional information relevant to the asset being loaded\n * @param loader - The loader instance\n */\n testParse?: (asset: ASSET, resolvedAsset?: ResolvedAsset, loader?: Loader) => Promise;\n\n /**\n * Gets called on the asset it testParse passes. Useful to convert a raw asset into something more useful than\n * @param asset - The loaded asset data\n * @param resolvedAsset - Any custom additional information relevant to the asset being loaded\n * @param loader - The loader instance\n */\n parse?: (asset: ASSET, resolvedAsset?: ResolvedAsset, loader?: Loader) => Promise;\n\n /**\n * If an asset is parsed using this parser, the unload function will be called when the user requests an asset\n * to be unloaded. This is useful for things like sounds or textures that can be unloaded from memory\n * @param asset - The asset to unload/destroy\n * @param resolvedAsset - Any custom additional information relevant to the asset being loaded\n * @param loader - The loader instance\n */\n unload?: (asset: ASSET, resolvedAsset?: ResolvedAsset, loader?: Loader) => void;\n}\n","export function checkDataUrl(url: string, mimes: string | string[]): boolean\n{\n if (Array.isArray(mimes))\n {\n for (const mime of mimes)\n {\n if (url.startsWith(`data:${mime}`)) return true;\n }\n\n return false;\n }\n\n return url.startsWith(`data:${mimes}`);\n}\n","import { extensions, ExtensionType, settings } from '@pixi/core';\nimport { checkDataUrl } from '../../utils/checkDataUrl';\nimport { checkExtension } from '../../utils/checkExtension';\nimport { LoaderParserPriority } from './LoaderParser';\n\nimport type { LoaderParser } from './LoaderParser';\n\nconst validJSONExtension = '.json';\nconst validJSONMIME = 'application/json';\n\n/** simple loader plugin for loading json data */\nexport const loadJson = {\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.Low,\n },\n\n name: 'loadJson',\n\n test(url: string): boolean\n {\n return checkDataUrl(url, validJSONMIME) || checkExtension(url, validJSONExtension);\n },\n\n async load(url: string): Promise\n {\n const response = await settings.ADAPTER.fetch(url);\n\n const json = await response.json();\n\n return json as T;\n },\n} as LoaderParser;\n\nextensions.add(loadJson);\n","import { extensions, ExtensionType, settings } from '@pixi/core';\nimport { checkDataUrl } from '../../utils/checkDataUrl';\nimport { checkExtension } from '../../utils/checkExtension';\nimport { LoaderParserPriority } from './LoaderParser';\n\nimport type { LoaderParser } from './LoaderParser';\n\nconst validTXTExtension = '.txt';\nconst validTXTMIME = 'text/plain';\n\n/** Simple loader plugin for loading text data */\nexport const loadTxt = {\n\n name: 'loadTxt',\n\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.Low,\n },\n\n test(url: string): boolean\n {\n return checkDataUrl(url, validTXTMIME) || checkExtension(url, validTXTExtension);\n },\n\n async load(url: string): Promise\n {\n const response = await settings.ADAPTER.fetch(url);\n\n const txt = await response.text();\n\n return txt;\n },\n} as LoaderParser;\n\nextensions.add(loadTxt);\n","import { extensions, ExtensionType, settings, utils } from '@pixi/core';\nimport { checkDataUrl } from '../../utils/checkDataUrl';\nimport { checkExtension } from '../../utils/checkExtension';\nimport { LoaderParserPriority } from './LoaderParser';\n\nimport type { ResolvedAsset } from '../../types';\nimport type { LoaderParser } from './LoaderParser';\n\nconst validWeights = [\n 'normal', 'bold',\n '100', '200', '300', '400', '500', '600', '700', '800', '900',\n];\nconst validFontExtensions = ['.ttf', '.otf', '.woff', '.woff2'];\nconst validFontMIMEs = [\n 'font/ttf',\n 'font/otf',\n 'font/woff',\n 'font/woff2',\n];\n\n/**\n * Loader plugin for handling web fonts\n * @memberof PIXI\n */\nexport type LoadFontData = {\n family: string;\n display: string;\n featureSettings: string;\n stretch: string;\n style: string;\n unicodeRange: string;\n variant: string;\n weights: string[];\n};\n\n/**\n * RegExp for matching CSS . It doesn't consider escape and non-ASCII characters, but enough for us.\n * @see {@link https://www.w3.org/TR/css-syntax-3/#ident-token-diagram}\n */\nconst CSS_IDENT_TOKEN_REGEX = /^(--|-?[A-Z_])[0-9A-Z_-]*$/i;\n\n/**\n * Return font face name from a file name\n * Ex.: 'fonts/tital-one.woff' turns into 'Titan One'\n * @param url - File url\n */\nexport function getFontFamilyName(url: string): string\n{\n const ext = utils.path.extname(url);\n const name = utils.path.basename(url, ext);\n\n // Replace dashes by white spaces\n const nameWithSpaces = name.replace(/(-|_)/g, ' ');\n\n // Upper case first character of each word\n const nameTokens = nameWithSpaces.toLowerCase()\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1));\n\n let valid = nameTokens.length > 0;\n\n for (const token of nameTokens)\n {\n if (!token.match(CSS_IDENT_TOKEN_REGEX))\n {\n valid = false;\n break;\n }\n }\n\n let fontFamilyName = nameTokens.join(' ');\n\n if (!valid)\n {\n fontFamilyName = `\"${fontFamilyName.replace(/[\\\\\"]/g, '\\\\$&')}\"`;\n }\n\n return fontFamilyName;\n}\n\n// See RFC 3986 Chapter 2. Characters\nconst validURICharactersRegex = /^[0-9A-Za-z%:/?#\\[\\]@!\\$&'()\\*\\+,;=\\-._~]*$/;\n\n/**\n * Encode URI only when it contains invalid characters.\n * @param uri - URI to encode.\n */\nfunction encodeURIWhenNeeded(uri: string)\n{\n if (validURICharactersRegex.test(uri))\n {\n return uri;\n }\n\n return encodeURI(uri);\n}\n\n/** Web font loader plugin */\nexport const loadWebFont = {\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.Low,\n },\n\n name: 'loadWebFont',\n\n test(url: string): boolean\n {\n return checkDataUrl(url, validFontMIMEs) || checkExtension(url, validFontExtensions);\n },\n\n async load(url: string, options?: ResolvedAsset): Promise\n {\n const fonts = settings.ADAPTER.getFontFaceSet();\n\n if (fonts)\n {\n const fontFaces: FontFace[] = [];\n const name = options.data?.family ?? getFontFamilyName(url);\n const weights = options.data?.weights?.filter((weight) => validWeights.includes(weight)) ?? ['normal'];\n const data = options.data ?? {};\n\n for (let i = 0; i < weights.length; i++)\n {\n const weight = weights[i];\n\n const font = new FontFace(name, `url(${encodeURIWhenNeeded(url)})`, {\n ...data,\n weight,\n });\n\n await font.load();\n\n fonts.add(font);\n\n fontFaces.push(font);\n }\n\n return fontFaces.length === 1 ? fontFaces[0] : fontFaces;\n }\n\n if (process.env.DEBUG)\n {\n console.warn('[loadWebFont] FontFace API is not supported. Skipping loading font');\n }\n\n return null;\n },\n\n unload(font: FontFace | FontFace[]): void\n {\n (Array.isArray(font) ? font : [font])\n .forEach((t) => settings.ADAPTER.getFontFaceSet().delete(t));\n }\n} as LoaderParser;\n\nextensions.add(loadWebFont);\n","let UUID = 0;\nlet MAX_WORKERS: number;\n\n// 1x1 White PNG Data URL\nconst WHITE_PNG = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42m'\n + 'P8/x8AAwMCAO+ip1sAAAAASUVORK5CYII=';\nconst checkImageBitmapCode = {\n id: 'checkImageBitmap',\n code: `\n async function checkImageBitmap()\n {\n try\n {\n if (typeof createImageBitmap !== 'function') return false;\n\n const response = await fetch('${WHITE_PNG}');\n const imageBlob = await response.blob();\n const imageBitmap = await createImageBitmap(imageBlob);\n\n return imageBitmap.width === 1 && imageBitmap.height === 1;\n }\n catch (e)\n {\n return false;\n }\n }\n checkImageBitmap().then((result) => { self.postMessage(result); });\n `,\n};\n\ntype LoadImageBitmapResult = {\n data?: ImageBitmap,\n error?: Error,\n uuid: number,\n id: string,\n};\n\nconst workerCode = {\n id: 'loadImageBitmap',\n code: `\n async function loadImageBitmap(url)\n {\n const response = await fetch(url);\n\n if (!response.ok)\n {\n throw new Error(\\`[WorkerManager.loadImageBitmap] Failed to fetch \\${url}: \\`\n + \\`\\${response.status} \\${response.statusText}\\`);\n }\n\n const imageBlob = await response.blob();\n const imageBitmap = await createImageBitmap(imageBlob);\n\n return imageBitmap;\n }\n self.onmessage = async (event) =>\n {\n try\n {\n const imageBitmap = await loadImageBitmap(event.data.data[0]);\n\n self.postMessage({\n data: imageBitmap,\n uuid: event.data.uuid,\n id: event.data.id,\n }, [imageBitmap]);\n }\n catch(e)\n {\n self.postMessage({\n error: e,\n uuid: event.data.uuid,\n id: event.data.id,\n });\n }\n };`,\n};\n\nlet workerURL: string;\n\nclass WorkerManagerClass\n{\n public worker: Worker;\n private resolveHash: {\n [key: string]: {\n resolve: (...param: any[]) => void;\n reject: (...param: any[]) => void;\n }\n };\n private readonly workerPool: Worker[];\n private readonly queue: {\n id: string;\n arguments: any[];\n resolve: (...param: any[]) => void;\n reject: (...param: any[]) => void;\n }[];\n private _initialized = false;\n private _createdWorkers = 0;\n private _isImageBitmapSupported?: Promise;\n\n constructor()\n {\n this.workerPool = [];\n this.queue = [];\n\n this.resolveHash = {};\n }\n\n public isImageBitmapSupported(): Promise\n {\n if (this._isImageBitmapSupported !== undefined) return this._isImageBitmapSupported;\n\n this._isImageBitmapSupported = new Promise((resolve) =>\n {\n const workerURL = URL.createObjectURL(new Blob([checkImageBitmapCode.code],\n { type: 'application/javascript' }));\n const worker = new Worker(workerURL);\n\n worker.addEventListener('message', (event: MessageEvent) =>\n {\n worker.terminate();\n URL.revokeObjectURL(workerURL);\n resolve(event.data);\n });\n });\n\n return this._isImageBitmapSupported;\n }\n\n public loadImageBitmap(src: string): Promise\n {\n return this._run('loadImageBitmap', [src]) as Promise;\n }\n\n private async _initWorkers()\n {\n if (this._initialized) return;\n\n this._initialized = true;\n }\n\n private getWorker(): Worker\n {\n if (MAX_WORKERS === undefined)\n {\n MAX_WORKERS = navigator.hardwareConcurrency || 4;\n }\n let worker = this.workerPool.pop();\n\n if (!worker && this._createdWorkers < MAX_WORKERS)\n {\n if (!workerURL)\n {\n workerURL = URL.createObjectURL(new Blob([workerCode.code], { type: 'application/javascript' }));\n }\n\n // only create as many as MAX_WORKERS allows..\n this._createdWorkers++;\n worker = new Worker(workerURL);\n\n worker.addEventListener('message', (event: MessageEvent) =>\n {\n this.complete(event.data);\n\n this.returnWorker(event.target as Worker);\n this.next();\n });\n }\n\n return worker;\n }\n\n private returnWorker(worker: Worker)\n {\n this.workerPool.push(worker);\n }\n\n private complete(data: LoadImageBitmapResult): void\n {\n if (data.error !== undefined)\n {\n this.resolveHash[data.uuid].reject(data.error);\n }\n else\n {\n this.resolveHash[data.uuid].resolve(data.data);\n }\n\n this.resolveHash[data.uuid] = null;\n }\n\n private async _run(id: string, args: any[]): Promise\n {\n await this._initWorkers();\n // push into the queue...\n\n const promise = new Promise((resolve, reject) =>\n {\n this.queue.push({ id, arguments: args, resolve, reject });\n });\n\n this.next();\n\n return promise;\n }\n\n private next(): void\n {\n // nothing to do\n if (!this.queue.length) return;\n\n const worker = this.getWorker();\n\n // no workers available...\n if (!worker)\n {\n return;\n }\n\n const toDo = this.queue.pop();\n\n const id = toDo.id;\n\n this.resolveHash[UUID] = { resolve: toDo.resolve, reject: toDo.reject };\n\n worker.postMessage({\n data: toDo.arguments,\n uuid: UUID++,\n id,\n });\n }\n}\n\nconst WorkerManager = new WorkerManagerClass();\n\nexport {\n WorkerManager,\n};\n","import { Texture } from '@pixi/core';\nimport { Cache } from '../../../../cache/Cache';\n\nimport type { BaseTexture } from '@pixi/core';\nimport type { Loader } from '../../../Loader';\n\nexport function createTexture(base: BaseTexture, loader: Loader, url: string)\n{\n // make sure the resource is destroyed when the base texture is destroyed\n base.resource.internal = true;\n\n const texture = new Texture(base);\n const unload = () =>\n {\n delete loader.promiseCache[url];\n\n if (Cache.has(url))\n {\n Cache.remove(url);\n }\n };\n\n // remove the promise from the loader and the url from the cache when the texture is destroyed\n texture.baseTexture.once('destroyed', () =>\n {\n if (url in loader.promiseCache)\n {\n console.warn('[Assets] A BaseTexture managed by Assets was destroyed instead of unloaded! '\n + 'Use Assets.unload() instead of destroying the BaseTexture.');\n unload();\n }\n });\n texture.once('destroyed', () =>\n {\n if (!base.destroyed)\n {\n console.warn('[Assets] A Texture managed by Assets was destroyed instead of unloaded! '\n + 'Use Assets.unload() instead of destroying the Texture.');\n unload();\n }\n });\n\n return texture;\n}\n","import { BaseTexture, extensions, ExtensionType, settings, utils } from '@pixi/core';\nimport { checkDataUrl } from '../../../utils/checkDataUrl';\nimport { checkExtension } from '../../../utils/checkExtension';\nimport { LoaderParserPriority } from '../LoaderParser';\nimport { WorkerManager } from '../WorkerManager';\nimport { createTexture } from './utils/createTexture';\n\nimport type { IBaseTextureOptions, Texture } from '@pixi/core';\nimport type { ResolvedAsset } from '../../../types';\nimport type { Loader } from '../../Loader';\nimport type { LoaderParser } from '../LoaderParser';\n\nconst validImageExtensions = ['.jpeg', '.jpg', '.png', '.webp', '.avif'];\nconst validImageMIMEs = [\n 'image/jpeg',\n 'image/png',\n 'image/webp',\n 'image/avif',\n];\n\n/**\n * Configuration for the `loadTextures` loader plugin.\n * @memberof PIXI\n * @see PIXI.loadTextures\n */\nexport interface LoadTextureConfig\n{\n /**\n * When set to `true`, loading and decoding images will happen with Worker thread,\n * if available on the browser. This is much more performant as network requests\n * and decoding can be expensive on the CPU. However, not all environments support\n * Workers, in some cases it can be helpful to disable by setting to `false`.\n * @default true\n */\n preferWorkers: boolean;\n /**\n * When set to `true`, loading and decoding images will happen with `createImageBitmap`,\n * otherwise it will use `new Image()`.\n * @default true\n */\n preferCreateImageBitmap: boolean;\n /**\n * The crossOrigin value to use for images when `preferCreateImageBitmap` is `false`.\n * @default 'anonymous'\n */\n crossOrigin: HTMLImageElement['crossOrigin'];\n}\n\n/**\n * Returns a promise that resolves an ImageBitmaps.\n * This function is designed to be used by a worker.\n * Part of WorkerManager!\n * @param url - The image to load an image bitmap for\n */\nexport async function loadImageBitmap(url: string): Promise\n{\n const response = await settings.ADAPTER.fetch(url);\n\n if (!response.ok)\n {\n throw new Error(`[loadImageBitmap] Failed to fetch ${url}: `\n + `${response.status} ${response.statusText}`);\n }\n\n const imageBlob = await response.blob();\n const imageBitmap = await createImageBitmap(imageBlob);\n\n return imageBitmap;\n}\n\n/**\n * Loads our textures!\n * this makes use of imageBitmaps where available.\n * We load the ImageBitmap on a different thread using the WorkerManager\n * We can then use the ImageBitmap as a source for a Pixi Texture\n *\n * You can customize the behavior of this loader by setting the `config` property.\n * ```js\n * // Set the config\n * import { loadTextures } from '@pixi/assets';\n * loadTextures.config = {\n * // If true we will use a worker to load the ImageBitmap\n * preferWorkers: true,\n * // If false we will use new Image() instead of createImageBitmap\n * // If false then this will also disable the use of workers as it requires createImageBitmap\n * preferCreateImageBitmap: true,\n * crossOrigin: 'anonymous',\n * };\n * ```\n * @memberof PIXI\n */\nexport const loadTextures = {\n\n name: 'loadTextures',\n\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.High,\n },\n\n config: {\n preferWorkers: true,\n preferCreateImageBitmap: true,\n crossOrigin: 'anonymous',\n },\n\n test(url: string): boolean\n {\n return checkDataUrl(url, validImageMIMEs) || checkExtension(url, validImageExtensions);\n },\n\n async load(url: string, asset: ResolvedAsset, loader: Loader): Promise\n {\n const useImageBitmap = globalThis.createImageBitmap && this.config.preferCreateImageBitmap;\n let src: HTMLImageElement | ImageBitmap;\n\n if (useImageBitmap)\n {\n if (this.config.preferWorkers && await WorkerManager.isImageBitmapSupported())\n {\n src = await WorkerManager.loadImageBitmap(url);\n }\n else\n {\n src = await loadImageBitmap(url);\n }\n }\n else\n {\n src = await new Promise((resolve, reject) =>\n {\n const src = new Image();\n\n src.crossOrigin = this.config.crossOrigin;\n src.src = url;\n if (src.complete)\n {\n resolve(src);\n }\n else\n {\n src.onload = () => resolve(src);\n src.onerror = (e) => reject(e);\n }\n });\n }\n\n const options = { ...asset.data };\n\n options.resolution ??= utils.getResolutionOfUrl(url);\n if (useImageBitmap && options.resourceOptions?.ownsImageBitmap === undefined)\n {\n options.resourceOptions = { ...options.resourceOptions };\n options.resourceOptions.ownsImageBitmap = true;\n }\n\n const base = new BaseTexture(src, options);\n\n base.resource.src = url;\n\n return createTexture(base, loader, url);\n },\n\n unload(texture: Texture): void\n {\n texture.destroy(true);\n }\n} as LoaderParser;\n\nextensions.add(loadTextures);\n","import { BaseTexture, extensions, ExtensionType, settings, SVGResource, utils } from '@pixi/core';\nimport { checkDataUrl } from '../../../utils/checkDataUrl';\nimport { checkExtension } from '../../../utils/checkExtension';\nimport { LoaderParserPriority } from '../LoaderParser';\nimport { loadTextures } from './loadTextures';\nimport { createTexture } from './utils/createTexture';\n\nimport type { IBaseTextureOptions, Texture } from '@pixi/core';\nimport type { ResolvedAsset } from '../../../types';\nimport type { Loader } from '../../Loader';\nimport type { LoaderParser } from '../LoaderParser';\n\nconst validSVGExtension = '.svg';\nconst validSVGMIME = 'image/svg+xml';\n\n/**\n * Loads SVG's into Textures.\n * @memberof PIXI\n */\nexport const loadSVG = {\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.High,\n },\n\n name: 'loadSVG',\n\n test(url: string): boolean\n {\n return checkDataUrl(url, validSVGMIME) || checkExtension(url, validSVGExtension);\n },\n\n async testParse(data: string): Promise\n {\n return SVGResource.test(data);\n },\n\n async parse(asset: string, data: ResolvedAsset, loader: Loader): Promise\n {\n const src = new SVGResource(asset, data?.data?.resourceOptions);\n\n await src.load();\n\n const base = new BaseTexture(src, {\n resolution: utils.getResolutionOfUrl(asset),\n ...data?.data,\n });\n\n base.resource.src = data.src;\n\n const texture = createTexture(base, loader, data.src);\n\n return texture;\n },\n\n async load(url: string, _options: ResolvedAsset): Promise\n {\n const response = await settings.ADAPTER.fetch(url);\n\n return response.text();\n },\n\n unload: loadTextures.unload,\n\n} as LoaderParser;\n\nextensions.add(loadSVG);\n","import { BaseTexture, extensions, ExtensionType, settings, utils, VideoResource } from '@pixi/core';\nimport { checkDataUrl } from '../../../utils/checkDataUrl';\nimport { checkExtension } from '../../../utils/checkExtension';\nimport { LoaderParserPriority } from '../LoaderParser';\nimport { createTexture } from './utils/createTexture';\n\nimport type { IBaseTextureOptions, IVideoResourceOptions, Texture } from '@pixi/core';\nimport type { ResolvedAsset } from '../../../types';\nimport type { Loader } from '../../Loader';\nimport type { LoaderParser } from '../LoaderParser';\n\nconst validVideoExtensions = ['.mp4', '.m4v', '.webm', '.ogv'];\nconst validVideoMIMEs = [\n 'video/mp4',\n 'video/webm',\n 'video/ogg',\n];\n\n/**\n * Configuration for the `loadVideo` loader paarser.\n * @memberof PIXI\n * @see PIXI.loadVideo\n */\nexport interface LoadVideoConfig\n{\n /**\n * When set to `true`, the video will start playing automatically after being loaded,\n * otherwise it will not start playing automatically.\n * @default true\n */\n defaultAutoPlay: boolean;\n}\n\n/**\n * Loads videos into Textures.\n * @memberof PIXI\n */\nexport const loadVideo = {\n name: 'loadVideo',\n\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.High,\n },\n\n config: {\n defaultAutoPlay: true,\n },\n\n test(url: string): boolean\n {\n return checkDataUrl(url, validVideoMIMEs) || checkExtension(url, validVideoExtensions);\n },\n\n async load(\n url: string,\n loadAsset?: ResolvedAsset>,\n loader?: Loader): Promise\n {\n let texture: Texture;\n const response = await settings.ADAPTER.fetch(url);\n const blob = await response.blob();\n const blobURL = URL.createObjectURL(blob);\n\n try\n {\n const options = {\n autoPlay: this.config.defaultAutoPlay,\n ...loadAsset?.data?.resourceOptions,\n };\n const src = new VideoResource(blobURL, options);\n\n await src.load();\n\n const base = new BaseTexture(src, {\n alphaMode: await utils.detectVideoAlphaMode(),\n resolution: utils.getResolutionOfUrl(url),\n ...loadAsset?.data,\n });\n\n base.resource.src = url;\n texture = createTexture(base, loader, url);\n texture.baseTexture.once('destroyed', () =>\n {\n URL.revokeObjectURL(blobURL);\n });\n }\n catch (e)\n {\n URL.revokeObjectURL(blobURL);\n\n throw e;\n }\n\n return texture;\n },\n\n unload(texture: Texture): void\n {\n texture.destroy(true);\n }\n} as LoaderParser, LoadVideoConfig>;\n\nextensions.add(loadVideo);\n","function processX(base: string, ids: string[][], depth: number, result: string[], tags: string[])\n{\n const id = ids[depth];\n\n for (let i = 0; i < id.length; i++)\n {\n const value = id[i];\n\n if (depth < ids.length - 1)\n {\n processX(base.replace(result[depth], value), ids, depth + 1, result, tags);\n }\n else\n {\n tags.push(base.replace(result[depth], value));\n }\n }\n}\n\n/**\n * Creates a list of all possible combinations of the given strings.\n * @example\n * const out2 = createStringVariations('name is {chicken,wolf,sheep}');\n * console.log(out2); // [ 'name is chicken', 'name is wolf', 'name is sheep' ]\n * @param string - The string to process\n */\nexport function createStringVariations(string: string): string[]\n{\n const regex = /\\{(.*?)\\}/g;\n\n const result = string.match(regex);\n\n const tags: string[] = [];\n\n if (result)\n {\n const ids: string[][] = [];\n\n result.forEach((vars) =>\n {\n // first remove the brackets...\n const split = vars.substring(1, vars.length - 1).split(',');\n\n ids.push(split);\n });\n\n processX(string, ids, 0, result, tags);\n }\n else\n {\n tags.push(string);\n }\n\n return tags;\n}\n","import { utils } from '@pixi/core';\nimport { convertToList } from '../utils/convertToList';\nimport { createStringVariations } from '../utils/createStringVariations';\nimport { isSingleItem } from '../utils/isSingleItem';\n\nimport type {\n ArrayOr,\n AssetsBundle,\n AssetsManifest,\n AssetSrc,\n LoadParserName,\n ResolvedAsset,\n ResolvedSrc,\n UnresolvedAsset,\n UnresolvedAssetObject\n} from '../types';\nimport type { PreferOrder, ResolveURLParser } from './types';\n\nexport interface BundleIdentifierOptions\n{\n /** The character that is used to connect the bundleId and the assetId when generating a bundle asset id key */\n connector?: string;\n /**\n * A function that generates a bundle asset id key from a bundleId and an assetId\n * @param bundleId - the bundleId\n * @param assetId - the assetId\n * @returns the bundle asset id key\n */\n createBundleAssetId?: (bundleId: string, assetId: string) => string;\n /**\n * A function that generates an assetId from a bundle asset id key. This is the reverse of generateBundleAssetId\n * @param bundleId - the bundleId\n * @param assetBundleId - the bundle asset id key\n * @returns the assetId\n */\n extractAssetIdFromBundle?: (bundleId: string, assetBundleId: string) => string;\n}\n\n/**\n * A class that is responsible for resolving mapping asset URLs to keys.\n * At its most basic it can be used for Aliases:\n *\n * ```js\n * resolver.add('foo', 'bar');\n * resolver.resolveUrl('foo') // => 'bar'\n * ```\n *\n * It can also be used to resolve the most appropriate asset for a given URL:\n *\n * ```js\n * resolver.prefer({\n * params: {\n * format: 'webp',\n * resolution: 2,\n * }\n * });\n *\n * resolver.add('foo', ['bar@2x.webp', 'bar@2x.png', 'bar.webp', 'bar.png']);\n *\n * resolver.resolveUrl('foo') // => 'bar@2x.webp'\n * ```\n * Other features include:\n * - Ability to process a manifest file to get the correct understanding of how to resolve all assets\n * - Ability to add custom parsers for specific file types\n * - Ability to add custom prefer rules\n *\n * This class only cares about the URL, not the loading of the asset itself.\n *\n * It is not intended that this class is created by developers - its part of the Asset class\n * This is the third major system of PixiJS' main Assets class\n * @memberof PIXI\n */\nexport class Resolver\n{\n private _defaultBundleIdentifierOptions: Required = {\n connector: '-',\n createBundleAssetId: (bundleId, assetId) =>\n `${bundleId}${this._bundleIdConnector}${assetId}`,\n extractAssetIdFromBundle: (bundleId, assetBundleId) =>\n assetBundleId.replace(`${bundleId}${this._bundleIdConnector}`, ''),\n };\n\n /** The character that is used to connect the bundleId and the assetId when generating a bundle asset id key */\n private _bundleIdConnector = this._defaultBundleIdentifierOptions.connector;\n\n /**\n * A function that generates a bundle asset id key from a bundleId and an assetId\n * @param bundleId - the bundleId\n * @param assetId - the assetId\n * @returns the bundle asset id key\n */\n private _createBundleAssetId: (\n bundleId: string,\n assetId: string\n ) => string = this._defaultBundleIdentifierOptions.createBundleAssetId;\n\n /**\n * A function that generates an assetId from a bundle asset id key. This is the reverse of generateBundleAssetId\n * @param bundleId - the bundleId\n * @param assetBundleId - the bundle asset id key\n * @returns the assetId\n */\n private _extractAssetIdFromBundle: (\n bundleId: string,\n assetBundleId: string\n ) => string = this._defaultBundleIdentifierOptions.extractAssetIdFromBundle;\n\n private _assetMap: Record = {};\n private _preferredOrder: PreferOrder[] = [];\n private _parsers: ResolveURLParser[] = [];\n\n private _resolverHash: Record = {};\n private _rootPath: string;\n private _basePath: string;\n private _manifest: AssetsManifest;\n private _bundles: Record = {};\n private _defaultSearchParams: string;\n\n /**\n * Override how the resolver deals with generating bundle ids.\n * must be called before any bundles are added\n * @param bundleIdentifier - the bundle identifier options\n */\n public setBundleIdentifier(bundleIdentifier: BundleIdentifierOptions): void\n {\n this._bundleIdConnector = bundleIdentifier.connector ?? this._bundleIdConnector;\n this._createBundleAssetId = bundleIdentifier.createBundleAssetId ?? this._createBundleAssetId;\n this._extractAssetIdFromBundle = bundleIdentifier.extractAssetIdFromBundle ?? this._extractAssetIdFromBundle;\n\n if (this._extractAssetIdFromBundle('foo', this._createBundleAssetId('foo', 'bar')) !== 'bar')\n {\n throw new Error('[Resolver] GenerateBundleAssetId are not working correctly');\n }\n }\n\n /**\n * Let the resolver know which assets you prefer to use when resolving assets.\n * Multiple prefer user defined rules can be added.\n * @example\n * resolver.prefer({\n * // first look for something with the correct format, and then then correct resolution\n * priority: ['format', 'resolution'],\n * params:{\n * format:'webp', // prefer webp images\n * resolution: 2, // prefer a resolution of 2\n * }\n * })\n * resolver.add('foo', ['bar@2x.webp', 'bar@2x.png', 'bar.webp', 'bar.png']);\n * resolver.resolveUrl('foo') // => 'bar@2x.webp'\n * @param preferOrders - the prefer options\n */\n public prefer(...preferOrders: PreferOrder[]): void\n {\n preferOrders.forEach((prefer) =>\n {\n this._preferredOrder.push(prefer);\n\n if (!prefer.priority)\n {\n // generate the priority based on the order of the object\n prefer.priority = Object.keys(prefer.params);\n }\n });\n\n this._resolverHash = {};\n }\n\n /**\n * Set the base path to prepend to all urls when resolving\n * @example\n * resolver.basePath = 'https://home.com/';\n * resolver.add('foo', 'bar.ong');\n * resolver.resolveUrl('foo', 'bar.png'); // => 'https://home.com/bar.png'\n * @param basePath - the base path to use\n */\n public set basePath(basePath: string)\n {\n this._basePath = basePath;\n }\n\n public get basePath(): string\n {\n return this._basePath;\n }\n\n /**\n * Set the root path for root-relative URLs. By default the `basePath`'s root is used. If no `basePath` is set, then the\n * default value for browsers is `window.location.origin`\n * @example\n * // Application hosted on https://home.com/some-path/index.html\n * resolver.basePath = 'https://home.com/some-path/';\n * resolver.rootPath = 'https://home.com/';\n * resolver.add('foo', '/bar.png');\n * resolver.resolveUrl('foo', '/bar.png'); // => 'https://home.com/bar.png'\n * @param rootPath - the root path to use\n */\n public set rootPath(rootPath: string)\n {\n this._rootPath = rootPath;\n }\n\n public get rootPath(): string\n {\n return this._rootPath;\n }\n\n /**\n * All the active URL parsers that help the parser to extract information and create\n * an asset object-based on parsing the URL itself.\n *\n * Can be added using the extensions API\n * @example\n * resolver.add('foo', [\n * {\n * resolution: 2,\n * format: 'png',\n * src: 'image@2x.png',\n * },\n * {\n * resolution:1,\n * format:'png',\n * src: 'image.png',\n * },\n * ]);\n *\n * // With a url parser the information such as resolution and file format could extracted from the url itself:\n * extensions.add({\n * extension: ExtensionType.ResolveParser,\n * test: loadTextures.test, // test if url ends in an image\n * parse: (value: string) =>\n * ({\n * resolution: parseFloat(settings.RETINA_PREFIX.exec(value)?.[1] ?? '1'),\n * format: value.split('.').pop(),\n * src: value,\n * }),\n * });\n *\n * // Now resolution and format can be extracted from the url\n * resolver.add('foo', [\n * 'image@2x.png',\n * 'image.png',\n * ]);\n */\n public get parsers(): ResolveURLParser[]\n {\n return this._parsers;\n }\n\n /** Used for testing, this resets the resolver to its initial state */\n public reset(): void\n {\n this.setBundleIdentifier(this._defaultBundleIdentifierOptions);\n\n this._assetMap = {};\n this._preferredOrder = [];\n // Do not reset this._parsers\n\n this._resolverHash = {};\n this._rootPath = null;\n this._basePath = null;\n this._manifest = null;\n this._bundles = {};\n this._defaultSearchParams = null;\n }\n\n /**\n * Sets the default URL search parameters for the URL resolver. The urls can be specified as a string or an object.\n * @param searchParams - the default url parameters to append when resolving urls\n */\n public setDefaultSearchParams(searchParams: string | Record): void\n {\n if (typeof searchParams === 'string')\n {\n this._defaultSearchParams = searchParams;\n }\n else\n {\n const queryValues = searchParams as Record;\n\n this._defaultSearchParams = Object.keys(queryValues)\n .map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(queryValues[key])}`)\n .join('&');\n }\n }\n\n /**\n * Returns the aliases for a given asset\n * @param asset - the asset to get the aliases for\n */\n public getAlias(asset: UnresolvedAsset): string[]\n {\n const { alias, name, src, srcs } = asset;\n const aliasesToUse = convertToList>(\n alias || name || src || srcs, (value: string | AssetSrc) =>\n {\n if (typeof value === 'string') return value;\n\n if (Array.isArray(value)) return value.map((v) => (v as ResolvedSrc)?.src ?? (v as ResolvedSrc)?.srcs ?? v);\n\n if (value?.src || value?.srcs) return value.src ?? value.srcs;\n\n return value;\n }, true) as string[];\n\n return aliasesToUse;\n }\n\n /**\n * Add a manifest to the asset resolver. This is a nice way to add all the asset information in one go.\n * generally a manifest would be built using a tool.\n * @param manifest - the manifest to add to the resolver\n */\n public addManifest(manifest: AssetsManifest): void\n {\n if (this._manifest)\n {\n if (process.env.DEBUG)\n {\n console.warn('[Resolver] Manifest already exists, this will be overwritten');\n }\n }\n\n this._manifest = manifest;\n\n manifest.bundles.forEach((bundle) =>\n {\n this.addBundle(bundle.name, bundle.assets);\n });\n }\n\n /**\n * This adds a bundle of assets in one go so that you can resolve them as a group.\n * For example you could add a bundle for each screen in you pixi app\n * @example\n * resolver.addBundle('animals', {\n * bunny: 'bunny.png',\n * chicken: 'chicken.png',\n * thumper: 'thumper.png',\n * });\n *\n * const resolvedAssets = await resolver.resolveBundle('animals');\n * @param bundleId - The id of the bundle to add\n * @param assets - A record of the asset or assets that will be chosen from when loading via the specified key\n */\n public addBundle(bundleId: string, assets: AssetsBundle['assets']): void\n {\n const assetNames: string[] = [];\n\n // when storing keys against a bundle we prepend the bundleId to each asset key\n // and pass it through as an additional alias for the asset\n // this keeps clashing ids separate on a per-bundle basis\n // you can also resolve a file using the bundleId-assetId syntax\n if (Array.isArray(assets))\n {\n assets.forEach((asset) =>\n {\n const srcs = asset.src ?? asset.srcs;\n const aliases = asset.alias ?? asset.name;\n let ids: string[];\n\n if (typeof aliases === 'string')\n {\n const bundleAssetId = this._createBundleAssetId(bundleId, aliases);\n\n assetNames.push(bundleAssetId);\n ids = [aliases, bundleAssetId];\n }\n else\n {\n const bundleIds = aliases.map((name) => this._createBundleAssetId(bundleId, name));\n\n assetNames.push(...bundleIds);\n ids = [...aliases, ...bundleIds];\n }\n\n this.add({\n ...asset,\n ...{\n alias: ids,\n src: srcs,\n }\n });\n });\n }\n else\n {\n Object.keys(assets).forEach((key) =>\n {\n const aliases: string[] = [key, this._createBundleAssetId(bundleId, key)];\n\n if (typeof assets[key] === 'string')\n {\n this.add({\n alias: aliases,\n src: assets[key] as string,\n });\n }\n else if (Array.isArray(assets[key]))\n {\n this.add({\n alias: aliases,\n src: assets[key] as string[],\n });\n }\n else\n {\n const asset = assets[key] as UnresolvedAssetObject;\n const assetSrc = asset.src ?? asset.srcs;\n\n this.add({\n ...asset,\n ...{\n alias: aliases,\n src: Array.isArray(assetSrc) ? assetSrc : [assetSrc],\n }\n });\n }\n\n assetNames.push(...aliases);\n });\n }\n\n this._bundles[bundleId] = assetNames;\n }\n\n /** @deprecated */\n public add(a: ArrayOr, s?: AssetSrc, d?: unknown, f?: string, lp?: LoadParserName): void;\n /**\n * Tells the resolver what keys are associated with witch asset.\n * The most important thing the resolver does\n * @example\n * // Single key, single asset:\n * resolver.add({alias: 'foo', src: 'bar.png');\n * resolver.resolveUrl('foo') // => 'bar.png'\n *\n * // Multiple keys, single asset:\n * resolver.add({alias: ['foo', 'boo'], src: 'bar.png'});\n * resolver.resolveUrl('foo') // => 'bar.png'\n * resolver.resolveUrl('boo') // => 'bar.png'\n *\n * // Multiple keys, multiple assets:\n * resolver.add({alias: ['foo', 'boo'], src: ['bar.png', 'bar.webp']});\n * resolver.resolveUrl('foo') // => 'bar.png'\n *\n * // Add custom data attached to the resolver\n * Resolver.add({\n * alias: 'bunnyBooBooSmooth',\n * src: 'bunny{png,webp}',\n * data: { scaleMode:SCALE_MODES.NEAREST }, // Base texture options\n * });\n *\n * resolver.resolve('bunnyBooBooSmooth') // => { src: 'bunny.png', data: { scaleMode: SCALE_MODES.NEAREST } }\n * @param data - the data to add to the resolver\n * @param data.aliases - the key or keys that you will reference when loading this asset\n * @param data.srcs - the asset or assets that will be chosen from when loading via the specified key\n * @param data.data - asset-specific data that will be passed to the loaders\n * - Useful if you want to initiate loaded objects with specific data\n * @param data.format - the format of the asset\n * @param data.loadParser - the name of the load parser to use\n */\n public add(data:(ArrayOr)): void;\n public add(\n aliases: ArrayOr | (ArrayOr),\n srcs?: AssetSrc,\n data?: unknown,\n format?: string,\n loadParser?: LoadParserName\n ): void\n {\n const assets: UnresolvedAsset[] = [];\n\n if (typeof aliases === 'string' || (Array.isArray(aliases) && typeof aliases[0] === 'string'))\n {\n if (process.env.DEBUG)\n {\n // eslint-disable-next-line max-len\n utils.deprecation('7.2.0', `Assets.add now uses an object instead of individual parameters.\\nPlease use Assets.add({ alias, src, data, format, loadParser }) instead.`);\n }\n\n assets.push({ alias: aliases as ArrayOr, src: srcs, data, format, loadParser });\n }\n else if (Array.isArray(aliases))\n {\n assets.push(...(aliases as UnresolvedAsset[]));\n }\n else\n {\n assets.push(aliases as UnresolvedAsset);\n }\n\n let keyCheck: (key: string) => void;\n\n if (process.env.DEBUG)\n {\n keyCheck = (key: string) =>\n {\n if (this.hasKey(key))\n {\n console.warn(`[Resolver] already has key: ${key} overwriting`);\n }\n };\n }\n\n const assetArray = convertToList(assets);\n\n // loop through all the assets and generate a resolve asset for each src\n assetArray.forEach((asset) =>\n {\n const { src, srcs } = asset;\n let { data, format, loadParser } = asset;\n\n // src can contain an unresolved asset itself\n // so we need to merge that data with the current asset\n // we dont need to create string variations for the src if it is a ResolvedAsset\n const srcsToUse: (string | ResolvedSrc)[][] = convertToList(src || srcs).map((src) =>\n {\n if (typeof src === 'string')\n { return createStringVariations(src); }\n\n return Array.isArray(src) ? src : [src];\n });\n\n const aliasesToUse = this.getAlias(asset);\n\n if (process.env.DEBUG)\n {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n Array.isArray(aliasesToUse) ? aliasesToUse.forEach(keyCheck) : keyCheck(aliasesToUse);\n }\n\n // loop through all the srcs and generate a resolve asset for each src\n const resolvedAssets: ResolvedAsset[] = [];\n\n srcsToUse.forEach((srcs) =>\n {\n srcs.forEach((src) =>\n {\n let formattedAsset = {} as ResolvedAsset;\n\n if (typeof src !== 'object')\n {\n formattedAsset.src = src;\n // first see if it contains any {} tags...\n for (let i = 0; i < this._parsers.length; i++)\n {\n const parser = this._parsers[i];\n\n if (parser.test(src))\n {\n formattedAsset = parser.parse(src);\n break;\n }\n }\n }\n else\n {\n data = src.data ?? data;\n format = src.format ?? format;\n loadParser = src.loadParser ?? loadParser;\n formattedAsset = {\n ...formattedAsset,\n ...src,\n };\n }\n\n // check if aliases is undefined\n if (!aliasesToUse)\n {\n throw new Error(`[Resolver] alias is undefined for this asset: ${formattedAsset.src}`);\n }\n\n formattedAsset = this.buildResolvedAsset(formattedAsset, {\n aliases: aliasesToUse,\n data,\n format,\n loadParser,\n });\n\n resolvedAssets.push(formattedAsset);\n });\n });\n\n aliasesToUse.forEach((alias) =>\n {\n this._assetMap[alias] = resolvedAssets;\n });\n });\n }\n\n // TODO: this needs an overload like load did in Assets\n /**\n * If the resolver has had a manifest set via setManifest, this will return the assets urls for\n * a given bundleId or bundleIds.\n * @example\n * // Manifest Example\n * const manifest = {\n * bundles: [\n * {\n * name: 'load-screen',\n * assets: [\n * {\n * alias: 'background',\n * src: 'sunset.png',\n * },\n * {\n * alias: 'bar',\n * src: 'load-bar.{png,webp}',\n * },\n * ],\n * },\n * {\n * name: 'game-screen',\n * assets: [\n * {\n * alias: 'character',\n * src: 'robot.png',\n * },\n * {\n * alias: 'enemy',\n * src: 'bad-guy.png',\n * },\n * ],\n * },\n * ]\n * };\n *\n * resolver.setManifest(manifest);\n * const resolved = resolver.resolveBundle('load-screen');\n * @param bundleIds - The bundle ids to resolve\n * @returns All the bundles assets or a hash of assets for each bundle specified\n */\n public resolveBundle(bundleIds: ArrayOr):\n Record | Record>\n {\n const singleAsset = isSingleItem(bundleIds);\n\n bundleIds = convertToList(bundleIds);\n\n const out: Record> = {};\n\n bundleIds.forEach((bundleId) =>\n {\n const assetNames = this._bundles[bundleId];\n\n if (assetNames)\n {\n const results = this.resolve(assetNames) as Record;\n\n const assets: Record = {};\n\n for (const key in results)\n {\n const asset = results[key];\n\n assets[this._extractAssetIdFromBundle(bundleId, key)] = asset;\n }\n\n out[bundleId] = assets;\n }\n });\n\n return singleAsset ? out[bundleIds[0]] : out;\n }\n\n /**\n * Does exactly what resolve does, but returns just the URL rather than the whole asset object\n * @param key - The key or keys to resolve\n * @returns - The URLs associated with the key(s)\n */\n public resolveUrl(key: ArrayOr): string | Record\n {\n const result = this.resolve(key as string) as ResolvedAsset | Record;\n\n if (typeof key !== 'string')\n {\n const out: Record = {};\n\n for (const i in result)\n {\n out[i] = (result as Record)[i].src;\n }\n\n return out;\n }\n\n return (result as ResolvedAsset).src;\n }\n\n /**\n * Resolves each key in the list to an asset object.\n * Another key function of the resolver! After adding all the various key/asset pairs. this will run the logic\n * of finding which asset to return based on any preferences set using the `prefer` function\n * by default the same key passed in will be returned if nothing is matched by the resolver.\n * @example\n * resolver.add('boo', 'bunny.png');\n *\n * resolver.resolve('boo') // => { src: 'bunny.png' }\n *\n * // Will return the same string as no key was added for this value..\n * resolver.resolve('another-thing.png') // => { src: 'another-thing.png' }\n * @param keys - key or keys to resolve\n * @returns - the resolve asset or a hash of resolve assets for each key specified\n */\n public resolve(keys: string): ResolvedAsset;\n public resolve(keys: string[]): Record;\n public resolve(keys: ArrayOr): ResolvedAsset | Record\n {\n const singleAsset = isSingleItem(keys);\n\n keys = convertToList(keys);\n\n const result: Record = {};\n\n keys.forEach((key) =>\n {\n if (!this._resolverHash[key])\n {\n if (this._assetMap[key])\n {\n let assets = this._assetMap[key];\n const bestAsset = assets[0];\n const preferredOrder = this._getPreferredOrder(assets);\n\n preferredOrder?.priority.forEach((priorityKey) =>\n {\n preferredOrder.params[priorityKey].forEach((value: unknown) =>\n {\n const filteredAssets = assets.filter((asset) =>\n {\n if (asset[priorityKey as keyof ResolvedAsset])\n {\n return asset[priorityKey as keyof ResolvedAsset] === value;\n }\n\n return false;\n });\n\n if (filteredAssets.length)\n {\n assets = filteredAssets;\n }\n });\n });\n\n this._resolverHash[key] = (assets[0] ?? bestAsset);\n }\n else\n {\n this._resolverHash[key] = this.buildResolvedAsset({\n alias: [key],\n src: key,\n }, {});\n }\n }\n\n result[key] = this._resolverHash[key];\n });\n\n return singleAsset ? result[keys[0]] : result;\n }\n\n /**\n * Checks if an asset with a given key exists in the resolver\n * @param key - The key of the asset\n */\n public hasKey(key: string): boolean\n {\n return !!this._assetMap[key];\n }\n\n /**\n * Checks if a bundle with the given key exists in the resolver\n * @param key - The key of the bundle\n */\n public hasBundle(key: string): boolean\n {\n return !!this._bundles[key];\n }\n\n /**\n * Internal function for figuring out what prefer criteria an asset should use.\n * @param assets\n */\n private _getPreferredOrder(assets: ResolvedAsset[]): PreferOrder\n {\n for (let i = 0; i < assets.length; i++)\n {\n const asset = assets[0];\n\n const preferred = this._preferredOrder.find((preference: PreferOrder) =>\n preference.params.format.includes(asset.format));\n\n if (preferred)\n {\n return preferred;\n }\n }\n\n return this._preferredOrder[0];\n }\n\n /**\n * Appends the default url parameters to the url\n * @param url - The url to append the default parameters to\n * @returns - The url with the default parameters appended\n */\n private _appendDefaultSearchParams(url: string): string\n {\n if (!this._defaultSearchParams) return url;\n\n const paramConnector = (/\\?/).test(url) ? '&' : '?';\n\n return `${url}${paramConnector}${this._defaultSearchParams}`;\n }\n\n private buildResolvedAsset(formattedAsset: ResolvedAsset, data?: {\n aliases?: string[],\n data?: Record\n loadParser?: string,\n format?: string,\n }): ResolvedAsset\n {\n const { aliases, data: assetData, loadParser, format } = data;\n\n if (this._basePath || this._rootPath)\n {\n formattedAsset.src = utils.path.toAbsolute(formattedAsset.src, this._basePath, this._rootPath);\n }\n\n formattedAsset.alias = aliases ?? formattedAsset.alias ?? [formattedAsset.src];\n formattedAsset.src = this._appendDefaultSearchParams(formattedAsset.src);\n formattedAsset.data = { ...assetData || {}, ...formattedAsset.data };\n formattedAsset.loadParser = loadParser ?? formattedAsset.loadParser;\n formattedAsset.format = format ?? utils.path.extname(formattedAsset.src).slice(1);\n formattedAsset.srcs = formattedAsset.src;\n formattedAsset.name = formattedAsset.alias;\n\n return formattedAsset;\n }\n}\n","import { extensions, ExtensionType, utils } from '@pixi/core';\nimport { BackgroundLoader } from './BackgroundLoader';\nimport { Cache } from './cache/Cache';\nimport { Loader } from './loader/Loader';\nimport { loadTextures } from './loader/parsers';\nimport { Resolver } from './resolver/Resolver';\nimport { convertToList } from './utils/convertToList';\nimport { isSingleItem } from './utils/isSingleItem';\n\nimport type { FormatDetectionParser } from './detections';\nimport type { LoadTextureConfig } from './loader/parsers';\nimport type { BundleIdentifierOptions } from './resolver/Resolver';\nimport type {\n ArrayOr,\n AssetsBundle,\n AssetsManifest,\n AssetSrc,\n LoadParserName,\n ResolvedAsset,\n UnresolvedAsset\n} from './types';\n\nexport type ProgressCallback = (progress: number) => void;\n\n/**\n * Extensible preferences that can be used, for instance, when configuring loaders.\n * @since 7.2.0\n * @memberof PIXI\n */\nexport interface AssetsPreferences extends LoadTextureConfig, GlobalMixins.AssetsPreferences {}\n\n/**\n * Initialization options object for Asset Class.\n * @memberof PIXI\n */\nexport interface AssetInitOptions\n{\n // basic...\n /** a base path for any assets loaded */\n basePath?: string;\n\n /** a default URL parameter string to append to all assets loaded */\n defaultSearchParams?: string | Record;\n\n /**\n * a manifest to tell the asset loader upfront what all your assets are\n * this can be the manifest object itself, or a URL to the manifest.\n */\n manifest?: string | AssetsManifest;\n /**\n * optional preferences for which textures preferences you have when resolving assets\n * for example you might set the resolution to 0.5 if the user is on a rubbish old phone\n * or you might set the resolution to 2 if the user is on a retina display\n */\n texturePreference?: {\n /** the resolution order you prefer, can be an array (priority order - first is prefered) or a single resolutions */\n resolution?: number | number[];\n /**\n * the formats you prefer, by default this will be:\n * ['avif', 'webp', 'png', 'jpg', 'jpeg', 'webm', 'mp4', 'm4v', 'ogv']\n */\n format?: ArrayOr;\n };\n\n /**\n * If true, don't attempt to detect whether browser has preferred formats available.\n * May result in increased performance as it skips detection step.\n */\n skipDetections?: boolean;\n\n /** advanced - override how bundlesIds are generated */\n bundleIdentifier?: BundleIdentifierOptions;\n\n /** Optional loader preferences */\n preferences?: Partial;\n}\n\n/**\n * A one stop shop for all Pixi resource management!\n * Super modern and easy to use, with enough flexibility to customize and do what you need!\n * @memberof PIXI\n * @namespace Assets\n *\n * Only one Asset Class exists accessed via the Global Asset object.\n *\n * It has four main responsibilities:\n * 1. Allows users to map URLs to keys and resolve them according to the user's browser capabilities\n * 2. Loads the resources and transforms them into assets that developers understand.\n * 3. Caches the assets and provides a way to access them.\n * 4. Allow developers to unload assets and clear the cache.\n *\n * It also has a few advanced features:\n * 1. Allows developers to provide a manifest upfront of all assets and help manage them via 'bundles'.\n * 2. Allows users to background load assets. Shortening (or eliminating) load times and improving UX. With this feature,\n * in-game loading bars can be a thing of the past!\n *\n * ### Assets Loading\n *\n * Do not be afraid to load things multiple times - under the hood, it will NEVER load anything more than once.\n *\n * For example:\n *\n * ```js\n * import { Assets } from 'pixi.js';\n *\n * promise1 = Assets.load('bunny.png')\n * promise2 = Assets.load('bunny.png')\n *\n * // promise1 === promise2\n * ```\n *\n * Here both promises will be the same. Once resolved... Forever resolved! It makes for really easy resource management!\n *\n * Out of the box it supports the following files:\n * - textures (avif, webp, png, jpg, gif, svg)\n * - sprite sheets (json)\n * - bitmap fonts (xml, fnt, txt)\n * - web fonts (ttf, woff, woff2)\n * - json files (json)\n * - text files (txt)\n *\n * More types can be added fairly easily by creating additional loader parsers.\n *\n * ### Textures\n * - Textures are loaded as ImageBitmap on a worker thread where possible.\n * Leading to much less janky load + parse times.\n * - By default, we will prefer to load AVIF and WebP image files if you specify them.\n * But if the browser doesn't support AVIF or WebP we will fall back to png and jpg.\n * - Textures can also be accessed via Texture.from(...) and now use this asset manager under the hood!\n * - Don't worry if you set preferences for textures that don't exist (for example you prefer 2x resolutions images\n * but only 1x is available for that texture, the Asset manager will pick that up as a fallback automatically)\n *\n * #### Sprite sheets\n * - It's hard to know what resolution a sprite sheet is without loading it first, to address this\n * there is a naming convention we have added that will let Pixi understand the image format and resolution\n * of the spritesheet via its file name:\n *\n * `my-spritesheet{resolution}.{imageFormat}.json`\n *\n * For example:\n *\n * `my-spritesheet@2x.webp.json` // 2x resolution, WebP sprite sheet\n * `my-spritesheet@0.5x.png.json` // 0.5x resolution, png sprite sheet\n *\n * This is optional! You can just load a sprite sheet as normal.\n * This is only useful if you have a bunch of different res / formatted spritesheets.\n *\n * ### Fonts\n * Web fonts will be loaded with all weights.\n * It is possible to load only specific weights by doing the following:\n *\n * ```js\n * import { Assets } from 'pixi.js';\n *\n * // Load specific weights..\n * await Assets.load({\n * data: {\n * weights: ['normal'], // Only loads the weight\n * },\n * src: `outfit.woff2`,\n * });\n *\n * // Load everything...\n * await Assets.load(`outfit.woff2`);\n * ```\n *\n * ### Background Loading\n * Background loading will load stuff for you passively behind the scenes. To minimize jank,\n * it will only load one asset at a time. As soon as a developer calls `Assets.load(...)` the\n * background loader is paused and requested assets are loaded as a priority.\n * Don't worry if something is in there that's already loaded, it will just get skipped!\n *\n * You still need to call `Assets.load(...)` to get an asset that has been loaded in the background.\n * It's just that this promise will resolve instantly if the asset\n * has already been loaded.\n *\n * ### Manifest and Bundles\n * - Manifest is a JSON file that contains a list of all assets and their properties.\n * - Bundles are a way to group assets together.\n *\n * ```js\n * import { Assets } from 'pixi.js';\n *\n * // Manifest Example\n * const manifest = {\n * bundles: [\n * {\n * name: 'load-screen',\n * assets: [\n * {\n * alias: 'background',\n * src: 'sunset.png',\n * },\n * {\n * alias: 'bar',\n * src: 'load-bar.{png,webp}',\n * },\n * ],\n * },\n * {\n * name: 'game-screen',\n * assets: [\n * {\n * alias: 'character',\n * src: 'robot.png',\n * },\n * {\n * alias: 'enemy',\n * src: 'bad-guy.png',\n * },\n * ],\n * },\n * ]\n * };\n *\n * await Assets.init({ manifest });\n *\n * // Load a bundle...\n * loadScreenAssets = await Assets.loadBundle('load-screen');\n * // Load another bundle...\n * gameScreenAssets = await Assets.loadBundle('game-screen');\n * ```\n * @example\n * import { Assets } from 'pixi.js';\n *\n * const bunny = await Assets.load('bunny.png');\n */\nexport class AssetsClass\n{\n /** the resolver to map various urls */\n public resolver: Resolver;\n /**\n * The loader, loads stuff!\n * @type {PIXI.AssetLoader}\n */\n public loader: Loader;\n /**\n * The global cache of all assets within PixiJS\n * @type {PIXI.Cache}\n */\n public cache: typeof Cache;\n\n /** takes care of loading assets in the background */\n private readonly _backgroundLoader: BackgroundLoader;\n\n private _detections: FormatDetectionParser[] = [];\n\n private _initialized = false;\n\n constructor()\n {\n this.resolver = new Resolver();\n this.loader = new Loader();\n this.cache = Cache;\n\n this._backgroundLoader = new BackgroundLoader(this.loader);\n this._backgroundLoader.active = true;\n\n this.reset();\n }\n\n /**\n * Best practice is to call this function before any loading commences\n * Initiating is the best time to add any customization to the way things are loaded.\n *\n * you do not need to call this for the Asset class to work, only if you want to set any initial properties\n * @param options - options to initialize the Asset manager with\n */\n public async init(options: AssetInitOptions = {}): Promise\n {\n if (this._initialized)\n {\n if (process.env.DEBUG)\n {\n console.warn('[Assets]AssetManager already initialized, did you load before calling this Assets.init()?');\n }\n\n return;\n }\n\n this._initialized = true;\n\n if (options.defaultSearchParams)\n {\n this.resolver.setDefaultSearchParams(options.defaultSearchParams);\n }\n\n if (options.basePath)\n {\n this.resolver.basePath = options.basePath;\n }\n\n if (options.bundleIdentifier)\n {\n this.resolver.setBundleIdentifier(options.bundleIdentifier);\n }\n\n if (options.manifest)\n {\n let manifest = options.manifest;\n\n if (typeof manifest === 'string')\n {\n manifest = await this.load(manifest);\n }\n\n this.resolver.addManifest(manifest);\n }\n\n const resolutionPref = options.texturePreference?.resolution ?? 1;\n const resolution = (typeof resolutionPref === 'number') ? [resolutionPref] : resolutionPref;\n\n const formats = await this._detectFormats({\n preferredFormats: options.texturePreference?.format,\n skipDetections: options.skipDetections,\n detections: this._detections\n });\n\n this.resolver.prefer({\n params: {\n format: formats,\n resolution,\n },\n });\n\n if (options.preferences)\n {\n this.setPreferences(options.preferences);\n }\n }\n\n /** @deprecated */\n public add(a: ArrayOr, s?: string | string[], d?: unknown, f?: string, lp?: LoadParserName): void;\n /**\n * Allows you to specify how to resolve any assets load requests.\n * There are a few ways to add things here as shown below:\n * @example\n * import { Assets } from 'pixi.js';\n *\n * // Simple\n * Assets.add({alias: 'bunnyBooBoo', src: 'bunny.png'});\n * const bunny = await Assets.load('bunnyBooBoo');\n *\n * // Multiple keys:\n * Assets.add({alias: ['burger', 'chicken'], src: 'bunny.png'});\n *\n * const bunny = await Assets.load('burger');\n * const bunny2 = await Assets.load('chicken');\n *\n * // passing options to to the object\n * Assets.add({\n * alias: 'bunnyBooBooSmooth',\n * src: 'bunny{png,webp}',\n * data: { scaleMode: SCALE_MODES.NEAREST }, // Base texture options\n * });\n *\n * // Multiple assets\n *\n * // The following all do the same thing:\n *\n * Assets.add({alias: 'bunnyBooBoo', src: 'bunny{png,webp}'});\n *\n * Assets.add({\n * alias: 'bunnyBooBoo',\n * src: [\n * 'bunny.png',\n * 'bunny.webp',\n * ],\n * });\n *\n * const bunny = await Assets.load('bunnyBooBoo'); // Will try to load WebP if available\n * @param data - the data to add\n * @param data.aliases - the key or keys that you will reference when loading this asset\n * @param data.srcs - the asset or assets that will be chosen from when loading via the specified key\n * @param data.data - asset-specific data that will be passed to the loaders\n * - Useful if you want to initiate loaded objects with specific data\n * @param data.format - the format of the asset\n * @param data.loadParser - the name of the load parser to use\n */\n public add(data:(ArrayOr)): void;\n public add(\n aliases: ArrayOr | ArrayOr,\n srcs?: AssetSrc,\n data?: unknown,\n format?: string,\n loadParser?: LoadParserName\n ): void\n {\n this.resolver.add(aliases as ArrayOr, srcs, data, format, loadParser);\n }\n\n /**\n * Loads your assets! You pass in a key or URL and it will return a promise that\n * resolves to the loaded asset. If multiple assets a requested, it will return a hash of assets.\n *\n * Don't worry about loading things multiple times, behind the scenes assets are only ever loaded\n * once and the same promise reused behind the scenes so you can safely call this function multiple\n * times with the same key and it will always return the same asset.\n * @example\n * import { Assets } from 'pixi.js';\n *\n * // Load a URL:\n * const myImageTexture = await Assets.load('http://some.url.com/image.png'); // => returns a texture\n *\n * Assets.add('thumper', 'bunny.png');\n * Assets.add('chicko', 'chicken.png');\n *\n * // Load multiple assets:\n * const textures = await Assets.load(['thumper', 'chicko']); // => {thumper: Texture, chicko: Texture}\n * @param urls - the urls to load\n * @param onProgress - optional function that is called when progress on asset loading is made.\n * The function is passed a single parameter, `progress`, which represents the percentage\n * (0.0 - 1.0) of the assets loaded.\n * @returns - the assets that were loaded, either a single asset or a hash of assets\n */\n public async load(\n urls: string | UnresolvedAsset,\n onProgress?: ProgressCallback,\n ): Promise;\n public async load(\n urls: string[] | UnresolvedAsset[],\n onProgress?: ProgressCallback,\n ): Promise>;\n public async load(\n urls: ArrayOr | ArrayOr,\n onProgress?: ProgressCallback\n ): Promise>\n {\n if (!this._initialized)\n {\n await this.init();\n }\n\n const singleAsset = isSingleItem(urls);\n\n const urlArray: string[] = convertToList(urls)\n .map((url) =>\n {\n if (typeof url !== 'string')\n {\n const aliases = this.resolver.getAlias(url);\n\n if (aliases.some((alias) => !this.resolver.hasKey(alias)))\n {\n this.add(url);\n }\n\n return Array.isArray(aliases) ? aliases[0] : aliases;\n }\n\n // if it hasn't been added, add it now\n if (!this.resolver.hasKey(url)) this.add({ alias: url, src: url });\n\n return url;\n }) as string[];\n\n // check cache first...\n const resolveResults = this.resolver.resolve(urlArray);\n\n // remap to the keys used..\n const out: Record = await this._mapLoadToResolve(resolveResults, onProgress);\n\n return singleAsset ? out[urlArray[0] as string] : out;\n }\n\n /**\n * This adds a bundle of assets in one go so that you can load them as a group.\n * For example you could add a bundle for each screen in you pixi app\n * @example\n * import { Assets } from 'pixi.js';\n *\n * Assets.addBundle('animals', {\n * bunny: 'bunny.png',\n * chicken: 'chicken.png',\n * thumper: 'thumper.png',\n * });\n *\n * const assets = await Assets.loadBundle('animals');\n * @param bundleId - the id of the bundle to add\n * @param assets - a record of the asset or assets that will be chosen from when loading via the specified key\n */\n public addBundle(bundleId: string, assets: AssetsBundle['assets']): void\n {\n this.resolver.addBundle(bundleId, assets);\n }\n\n /**\n * Bundles are a way to load multiple assets at once.\n * If a manifest has been provided to the init function then you can load a bundle, or bundles.\n * you can also add bundles via `addBundle`\n * @example\n * import { Assets } from 'pixi.js';\n *\n * // Manifest Example\n * const manifest = {\n * bundles: [\n * {\n * name: 'load-screen',\n * assets: [\n * {\n * alias: 'background',\n * src: 'sunset.png',\n * },\n * {\n * alias: 'bar',\n * src: 'load-bar.{png,webp}',\n * },\n * ],\n * },\n * {\n * name: 'game-screen',\n * assets: [\n * {\n * alias: 'character',\n * src: 'robot.png',\n * },\n * {\n * alias: 'enemy',\n * src: 'bad-guy.png',\n * },\n * ],\n * },\n * ]\n * };\n *\n * await Assets.init({ manifest });\n *\n * // Load a bundle...\n * loadScreenAssets = await Assets.loadBundle('load-screen');\n * // Load another bundle...\n * gameScreenAssets = await Assets.loadBundle('game-screen');\n * @param bundleIds - the bundle id or ids to load\n * @param onProgress - Optional function that is called when progress on asset loading is made.\n * The function is passed a single parameter, `progress`, which represents the percentage (0.0 - 1.0)\n * of the assets loaded. Do not use this function to detect when assets are complete and available,\n * instead use the Promise returned by this function.\n * @returns all the bundles assets or a hash of assets for each bundle specified\n */\n public async loadBundle(bundleIds: ArrayOr, onProgress?: ProgressCallback): Promise\n {\n if (!this._initialized)\n {\n await this.init();\n }\n\n let singleAsset = false;\n\n if (typeof bundleIds === 'string')\n {\n singleAsset = true;\n bundleIds = [bundleIds];\n }\n\n const resolveResults = this.resolver.resolveBundle(bundleIds);\n\n const out: Record> = {};\n\n const keys = Object.keys(resolveResults);\n let count = 0;\n let total = 0;\n const _onProgress = () =>\n {\n onProgress?.(++count / total);\n };\n const promises = keys.map((bundleId) =>\n {\n const resolveResult = resolveResults[bundleId];\n\n total += Object.keys(resolveResult).length;\n\n return this._mapLoadToResolve(resolveResult, _onProgress)\n .then((resolveResult) =>\n {\n out[bundleId] = resolveResult;\n });\n });\n\n await Promise.all(promises);\n\n return singleAsset ? out[bundleIds[0]] : out;\n }\n\n /**\n * Initiate a background load of some assets. It will passively begin to load these assets in the background.\n * So when you actually come to loading them you will get a promise that resolves to the loaded assets immediately\n *\n * An example of this might be that you would background load game assets after your inital load.\n * then when you got to actually load your game screen assets when a player goes to the game - the loading\n * would already have stared or may even be complete, saving you having to show an interim load bar.\n * @example\n * import { Assets } from 'pixi.js';\n *\n * Assets.backgroundLoad('bunny.png');\n *\n * // later on in your app...\n * await Assets.loadBundle('bunny.png'); // Will resolve quicker as loading may have completed!\n * @param urls - the url / urls you want to background load\n */\n public async backgroundLoad(urls: ArrayOr): Promise\n {\n if (!this._initialized)\n {\n await this.init();\n }\n\n if (typeof urls === 'string')\n {\n urls = [urls];\n }\n\n const resolveResults = this.resolver.resolve(urls);\n\n this._backgroundLoader.add(Object.values(resolveResults));\n }\n\n /**\n * Initiate a background of a bundle, works exactly like backgroundLoad but for bundles.\n * this can only be used if the loader has been initiated with a manifest\n * @example\n * import { Assets } from 'pixi.js';\n *\n * await Assets.init({\n * manifest: {\n * bundles: [\n * {\n * name: 'load-screen',\n * assets: [...],\n * },\n * ...\n * ],\n * },\n * });\n *\n * Assets.backgroundLoadBundle('load-screen');\n *\n * // Later on in your app...\n * await Assets.loadBundle('load-screen'); // Will resolve quicker as loading may have completed!\n * @param bundleIds - the bundleId / bundleIds you want to background load\n */\n public async backgroundLoadBundle(bundleIds: ArrayOr): Promise\n {\n if (!this._initialized)\n {\n await this.init();\n }\n\n if (typeof bundleIds === 'string')\n {\n bundleIds = [bundleIds];\n }\n\n const resolveResults = this.resolver.resolveBundle(bundleIds);\n\n Object.values(resolveResults).forEach((resolveResult) =>\n {\n this._backgroundLoader.add(Object.values(resolveResult));\n });\n }\n\n /**\n * Only intended for development purposes.\n * This will wipe the resolver and caches.\n * You will need to reinitialize the Asset\n */\n public reset(): void\n {\n this.resolver.reset();\n this.loader.reset();\n this.cache.reset();\n\n this._initialized = false;\n }\n\n /**\n * Instantly gets an asset already loaded from the cache. If the asset has not yet been loaded,\n * it will return undefined. So it's on you! When in doubt just use `Assets.load` instead.\n * (Remember, the loader will never load things more than once!)\n * @param keys - The key or keys for the assets that you want to access\n * @returns - The assets or hash of assets requested\n */\n public get(keys: string): T;\n public get(keys: string[]): Record;\n public get(keys: ArrayOr): T | Record\n {\n if (typeof keys === 'string')\n {\n return Cache.get(keys);\n }\n\n const assets: Record = {};\n\n for (let i = 0; i < keys.length; i++)\n {\n assets[i] = Cache.get(keys[i]);\n }\n\n return assets;\n }\n\n /**\n * helper function to map resolved assets back to loaded assets\n * @param resolveResults - the resolve results from the resolver\n * @param onProgress - the progress callback\n */\n private async _mapLoadToResolve(\n resolveResults: ResolvedAsset | Record,\n onProgress?: ProgressCallback\n ): Promise>\n {\n const resolveArray = Object.values(resolveResults) as ResolvedAsset[];\n const resolveKeys = Object.keys(resolveResults);\n\n // pause background loader...\n this._backgroundLoader.active = false;\n\n const loadedAssets = await this.loader.load(resolveArray, onProgress);\n\n // resume background loader...\n this._backgroundLoader.active = true;\n\n // remap to the keys used..\n\n const out: Record = {};\n\n resolveArray.forEach((resolveResult, i) =>\n {\n const asset = loadedAssets[resolveResult.src];\n\n const keys = [resolveResult.src];\n\n if (resolveResult.alias)\n {\n keys.push(...resolveResult.alias);\n }\n\n out[resolveKeys[i]] = asset;\n\n Cache.set(keys, asset);\n });\n\n return out;\n }\n\n /**\n * Unload an asset or assets. As the Assets class is responsible for creating the assets via the `load` function\n * this will make sure to destroy any assets and release them from memory.\n * Once unloaded, you will need to load the asset again.\n *\n * Use this to help manage assets if you find that you have a large app and you want to free up memory.\n *\n * - it's up to you as the developer to make sure that textures are not actively being used when you unload them,\n * Pixi won't break but you will end up with missing assets. Not a good look for the user!\n * @example\n * import { Assets } from 'pixi.js';\n *\n * // Load a URL:\n * const myImageTexture = await Assets.load('http://some.url.com/image.png'); // => returns a texture\n *\n * await Assets.unload('http://some.url.com/image.png')\n *\n * // myImageTexture will be destroyed now.\n *\n * // Unload multiple assets:\n * const textures = await Assets.unload(['thumper', 'chicko']);\n * @param urls - the urls to unload\n */\n public async unload(\n urls: ArrayOr | ResolvedAsset | ResolvedAsset[]\n ): Promise\n {\n if (!this._initialized)\n {\n await this.init();\n }\n\n const urlArray = convertToList(urls)\n .map((url) =>\n ((typeof url !== 'string') ? url.src : url));\n\n // check cache first...\n const resolveResults = this.resolver.resolve(urlArray);\n\n await this._unloadFromResolved(resolveResults);\n }\n\n /**\n * Bundles are a way to manage multiple assets at once.\n * this will unload all files in a bundle.\n *\n * once a bundle has been unloaded, you need to load it again to have access to the assets.\n * @example\n * import { Assets } from 'pixi.js';\n *\n * Assets.addBundle({\n * 'thumper': 'http://some.url.com/thumper.png',\n * })\n *\n * const assets = await Assets.loadBundle('thumper');\n *\n * // Now to unload...\n *\n * await Assets.unloadBundle('thumper');\n *\n * // All assets in the assets object will now have been destroyed and purged from the cache\n * @param bundleIds - the bundle id or ids to unload\n */\n public async unloadBundle(bundleIds: ArrayOr): Promise\n {\n if (!this._initialized)\n {\n await this.init();\n }\n\n bundleIds = convertToList(bundleIds);\n\n const resolveResults = this.resolver.resolveBundle(bundleIds);\n\n const promises = Object.keys(resolveResults).map((bundleId) =>\n this._unloadFromResolved(resolveResults[bundleId]));\n\n await Promise.all(promises);\n }\n\n private async _unloadFromResolved(resolveResult: ResolvedAsset | Record)\n {\n const resolveArray = Object.values(resolveResult);\n\n resolveArray.forEach((resolveResult) =>\n {\n Cache.remove(resolveResult.src);\n });\n\n await this.loader.unload(resolveArray);\n }\n\n /**\n * Detects the supported formats for the browser, and returns an array of supported formats, respecting\n * the users preferred formats order.\n * @param options - the options to use when detecting formats\n * @param options.preferredFormats - the preferred formats to use\n * @param options.skipDetections - if we should skip the detections altogether\n * @param options.detections - the detections to use\n * @returns - the detected formats\n */\n private async _detectFormats(options: {\n preferredFormats: string | string[],\n skipDetections: boolean,\n detections: FormatDetectionParser[]\n }): Promise\n {\n let formats: string[] = [];\n\n // set preferred formats\n if (options.preferredFormats)\n {\n formats = Array.isArray(options.preferredFormats)\n ? options.preferredFormats : [options.preferredFormats];\n }\n\n // we should add any formats that are supported by the browser\n for (const detection of options.detections)\n {\n if (options.skipDetections || await detection.test())\n {\n formats = await detection.add(formats);\n }\n else if (!options.skipDetections)\n {\n formats = await detection.remove(formats);\n }\n }\n\n // remove any duplicates\n formats = formats.filter((format, index) => formats.indexOf(format) === index);\n\n return formats;\n }\n\n /** All the detection parsers currently added to the Assets class. */\n public get detections(): FormatDetectionParser[]\n {\n return this._detections;\n }\n\n /**\n * @deprecated since 7.2.0\n * @see {@link Assets.setPreferences}\n */\n public get preferWorkers(): boolean\n {\n return loadTextures.config.preferWorkers;\n }\n public set preferWorkers(value: boolean)\n {\n if (process.env.DEBUG)\n {\n utils.deprecation('7.2.0', 'Assets.prefersWorkers is deprecated, '\n + 'use Assets.setPreferences({ preferWorkers: true }) instead.');\n }\n this.setPreferences({ preferWorkers: value });\n }\n\n /**\n * General setter for preferences. This is a helper function to set preferences on all parsers.\n * @param preferences - the preferences to set\n */\n public setPreferences(preferences: Partial): void\n {\n // Find matching config keys in loaders with preferences\n // and set the values\n this.loader.parsers.forEach((parser) =>\n {\n if (!parser.config) return;\n\n (Object.keys(parser.config) as (keyof AssetsPreferences)[])\n .filter((key) => key in preferences)\n .forEach((key) =>\n {\n parser.config[key] = preferences[key];\n });\n });\n }\n}\n\nexport const Assets = new AssetsClass();\n\n// Handle registration of extensions\nextensions\n .handleByList(ExtensionType.LoadParser, Assets.loader.parsers)\n .handleByList(ExtensionType.ResolveParser, Assets.resolver.parsers)\n .handleByList(ExtensionType.CacheParser, Assets.cache.parsers)\n .handleByList(ExtensionType.DetectionParser, Assets.detections);\n","import { extensions, ExtensionType, Texture } from '@pixi/core';\n\nimport type { CacheParser } from '../CacheParser';\n\nexport const cacheTextureArray: CacheParser = {\n extension: ExtensionType.CacheParser,\n\n test: (asset: any[]) => Array.isArray(asset) && asset.every((t) => t instanceof Texture),\n\n getCacheableAssets: (keys: string[], asset: Texture[]) =>\n {\n const out: Record = {};\n\n keys.forEach((key: string) =>\n {\n asset.forEach((item: Texture, i: number) =>\n {\n out[key + (i === 0 ? '' : i + 1)] = item;\n });\n });\n\n return out;\n }\n};\n\nextensions.add(cacheTextureArray);\n","export async function testImageFormat(imageData: string): Promise\n{\n // Some browsers currently do not support createImageBitmap with Blob, so new Image() is preferred when exist.\n // See https://caniuse.com/createimagebitmap for more information.\n\n if ('Image' in globalThis)\n {\n return new Promise((resolve) =>\n {\n const image = new Image();\n\n image.onload = () =>\n {\n resolve(true);\n };\n image.onerror = () =>\n {\n resolve(false);\n };\n image.src = imageData;\n });\n }\n\n if ('createImageBitmap' in globalThis && 'fetch' in globalThis)\n {\n try\n {\n const blob = await (await fetch(imageData)).blob();\n\n await createImageBitmap(blob);\n }\n catch (e)\n {\n return false;\n }\n\n return true;\n }\n\n return false;\n}\n","import { extensions, ExtensionType } from '@pixi/core';\nimport { testImageFormat } from '../utils/testImageFormat';\n\nimport type { FormatDetectionParser } from '..';\n\nexport const detectAvif: FormatDetectionParser = {\n extension: {\n type: ExtensionType.DetectionParser,\n priority: 1,\n },\n test: async (): Promise => testImageFormat(\n // eslint-disable-next-line max-len\n 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A='\n ),\n add: async (formats) => [...formats, 'avif'],\n remove: async (formats) => formats.filter((f) => f !== 'avif'),\n};\n\nextensions.add(detectAvif);\n","import { extensions, ExtensionType } from '@pixi/core';\nimport { testImageFormat } from '../utils/testImageFormat';\n\nimport type { FormatDetectionParser } from '..';\n\nexport const detectWebp = {\n extension: {\n type: ExtensionType.DetectionParser,\n priority: 0,\n },\n test: async (): Promise => testImageFormat(\n 'data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA='\n ),\n add: async (formats) => [...formats, 'webp'],\n remove: async (formats) => formats.filter((f) => f !== 'webp'),\n} as FormatDetectionParser;\n\nextensions.add(detectWebp);\n","import { extensions, ExtensionType } from '@pixi/core';\n\nimport type { FormatDetectionParser } from '..';\n\nconst imageFormats = ['png', 'jpg', 'jpeg'];\n\nexport const detectDefaults = {\n extension: {\n type: ExtensionType.DetectionParser,\n priority: -1,\n },\n test: (): Promise => Promise.resolve(true),\n add: async (formats) => [...formats, ...imageFormats],\n remove: async (formats) => formats.filter((f) => !imageFormats.includes(f)),\n} as FormatDetectionParser;\n\nextensions.add(detectDefaults);\n","const inWorker = 'WorkerGlobalScope' in globalThis\n && globalThis instanceof (globalThis as any).WorkerGlobalScope;\n\nexport function testVideoFormat(mimeType: string): boolean\n{\n if (inWorker)\n {\n return false;\n }\n\n const video = document.createElement('video');\n\n return video.canPlayType(mimeType) !== '';\n}\n","import { extensions, ExtensionType } from '@pixi/core';\nimport { testVideoFormat } from '../utils/testVideoFormat';\n\nimport type { FormatDetectionParser } from '..';\n\nexport const detectWebm = {\n extension: {\n type: ExtensionType.DetectionParser,\n priority: 0,\n },\n test: async (): Promise => testVideoFormat('video/webm'),\n add: async (formats) => [...formats, 'webm'],\n remove: async (formats) => formats.filter((f) => f !== 'webm'),\n} as FormatDetectionParser;\n\nextensions.add(detectWebm);\n","import { extensions, ExtensionType } from '@pixi/core';\nimport { testVideoFormat } from '../utils/testVideoFormat';\n\nimport type { FormatDetectionParser } from '..';\n\nexport const detectMp4 = {\n extension: {\n type: ExtensionType.DetectionParser,\n priority: 0,\n },\n test: async (): Promise => testVideoFormat('video/mp4'),\n add: async (formats) => [...formats, 'mp4', 'm4v'],\n remove: async (formats) => formats.filter((f) => f !== 'mp4' && f !== 'm4v'),\n} as FormatDetectionParser;\n\nextensions.add(detectMp4);\n","import { extensions, ExtensionType } from '@pixi/core';\nimport { testVideoFormat } from '../utils/testVideoFormat';\n\nimport type { FormatDetectionParser } from '..';\n\nexport const detectOgv = {\n extension: {\n type: ExtensionType.DetectionParser,\n priority: 0,\n },\n test: async (): Promise => testVideoFormat('video/ogg'),\n add: async (formats) => [...formats, 'ogv'],\n remove: async (formats) => formats.filter((f) => f !== 'ogv'),\n} as FormatDetectionParser;\n\nextensions.add(detectOgv);\n","import { extensions, ExtensionType, settings, utils } from '@pixi/core';\nimport { loadTextures } from '../../loader';\n\nimport type { UnresolvedAsset } from '../../types';\nimport type { ResolveURLParser } from '../types';\n\nexport const resolveTextureUrl = {\n extension: ExtensionType.ResolveParser,\n test: loadTextures.test,\n parse: (value: string): UnresolvedAsset =>\n ({\n resolution: parseFloat(settings.RETINA_PREFIX.exec(value)?.[1] ?? '1'),\n format: utils.path.extname(value).slice(1),\n src: value,\n }),\n} as ResolveURLParser;\n\nextensions.add(resolveTextureUrl);\n","/**\n * Copies the search params from one url to another\n * @param targetUrl - the url to copy the search params to\n * @param sourceUrl - the url container the search params we want to copy\n * @returns the url with the search params copied\n */\nexport const copySearchParams = (targetUrl: string, sourceUrl: string) =>\n{\n const searchParams = sourceUrl.split('?')[1];\n\n if (searchParams)\n {\n targetUrl += `?${searchParams}`;\n }\n\n return targetUrl;\n};\n","/**\n * WebGL internal formats, including compressed texture formats provided by extensions\n * @memberof PIXI\n * @static\n * @name INTERNAL_FORMATS\n * @enum {number}\n */\nexport enum INTERNAL_FORMATS\n// eslint-disable-next-line @typescript-eslint/indent\n{\n // WEBGL_compressed_texture_s3tc\n /**\n * @default 0x83F0\n */\n COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0,\n /**\n * @default 0x83F1\n */\n COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1,\n /**\n * @default 0x83F2\n */\n COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2,\n /**\n * @default 0x83F3\n */\n COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3,\n\n // WEBGL_compressed_texture_s3tc_srgb\n /**\n * @default 35917\n */\n COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT = 35917,\n /**\n * @default 35918\n */\n COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT = 35918,\n /**\n * @default 35919\n */\n COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT = 35919,\n /**\n * @default 35916\n */\n COMPRESSED_SRGB_S3TC_DXT1_EXT = 35916,\n\n // WEBGL_compressed_texture_etc\n /**\n * @default 0x9270\n */\n COMPRESSED_R11_EAC = 0x9270,\n /**\n * @default 0x9271\n */\n COMPRESSED_SIGNED_R11_EAC = 0x9271,\n /**\n * @default 0x9272\n */\n COMPRESSED_RG11_EAC = 0x9272,\n /**\n * @default 0x9273\n */\n COMPRESSED_SIGNED_RG11_EAC = 0x9273,\n /**\n * @default 0x9274\n */\n COMPRESSED_RGB8_ETC2 = 0x9274,\n /**\n * @default 0x9278\n */\n COMPRESSED_RGBA8_ETC2_EAC = 0x9278,\n /**\n * @default 0x9275\n */\n COMPRESSED_SRGB8_ETC2 = 0x9275,\n /**\n * @default 0x9279\n */\n COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279,\n /**\n * @default 0x9276\n */\n COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276,\n /**\n * @default 0x9277\n */\n COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277,\n\n // WEBGL_compressed_texture_pvrtc\n /**\n * @default 0x8C00\n */\n COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8C00,\n /**\n * @default 0x8C02\n */\n COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8C02,\n /**\n * @default 0x8C01\n */\n COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 0x8C01,\n /**\n * @default 0x8C03\n */\n COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x8C03,\n\n // WEBGL_compressed_texture_etc1\n /**\n * @default 0x8D64\n */\n COMPRESSED_RGB_ETC1_WEBGL = 0x8D64,\n\n // WEBGL_compressed_texture_atc\n /**\n * @default 0x8C92\n */\n COMPRESSED_RGB_ATC_WEBGL = 0x8C92,\n /**\n * @default 0x8C93\n */\n COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL = 0x8C93,\n /**\n * @default 0x87EE\n */\n COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL = 0x87EE,\n\n // WEBGL_compressed_texture_astc\n /* eslint-disable-next-line camelcase */\n /**\n * @default 0x93B0\n */\n COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93B0,\n}\n\n/**\n * Maps the compressed texture formats in {@link PIXI.INTERNAL_FORMATS} to the number of bytes taken by\n * each texel.\n * @memberof PIXI\n * @static\n * @ignore\n */\nexport const INTERNAL_FORMAT_TO_BYTES_PER_PIXEL: { [id: number]: number } = {\n // WEBGL_compressed_texture_s3tc\n [INTERNAL_FORMATS.COMPRESSED_RGB_S3TC_DXT1_EXT]: 0.5,\n [INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT1_EXT]: 0.5,\n [INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT3_EXT]: 1,\n [INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT5_EXT]: 1,\n\n // WEBGL_compressed_texture_s3tc\n [INTERNAL_FORMATS.COMPRESSED_SRGB_S3TC_DXT1_EXT]: 0.5,\n [INTERNAL_FORMATS.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT]: 0.5,\n [INTERNAL_FORMATS.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT]: 1,\n [INTERNAL_FORMATS.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT]: 1,\n\n // WEBGL_compressed_texture_etc\n [INTERNAL_FORMATS.COMPRESSED_R11_EAC]: 0.5,\n [INTERNAL_FORMATS.COMPRESSED_SIGNED_R11_EAC]: 0.5,\n [INTERNAL_FORMATS.COMPRESSED_RG11_EAC]: 1,\n [INTERNAL_FORMATS.COMPRESSED_SIGNED_RG11_EAC]: 1,\n [INTERNAL_FORMATS.COMPRESSED_RGB8_ETC2]: 0.5,\n [INTERNAL_FORMATS.COMPRESSED_RGBA8_ETC2_EAC]: 1,\n [INTERNAL_FORMATS.COMPRESSED_SRGB8_ETC2]: 0.5,\n [INTERNAL_FORMATS.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC]: 1,\n [INTERNAL_FORMATS.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2]: 0.5, // ~~\n [INTERNAL_FORMATS.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2]: 0.5, // ~~\n\n // WEBGL_compressed_texture_pvrtc\n [INTERNAL_FORMATS.COMPRESSED_RGB_PVRTC_4BPPV1_IMG]: 0.5,\n [INTERNAL_FORMATS.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG]: 0.5,\n [INTERNAL_FORMATS.COMPRESSED_RGB_PVRTC_2BPPV1_IMG]: 0.25,\n [INTERNAL_FORMATS.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG]: 0.25,\n\n // WEBGL_compressed_texture_etc1\n [INTERNAL_FORMATS.COMPRESSED_RGB_ETC1_WEBGL]: 0.5,\n\n // @see https://www.khronos.org/registry/OpenGL/extensions/AMD/AMD_compressed_ATC_texture.txt\n // WEBGL_compressed_texture_atc\n [INTERNAL_FORMATS.COMPRESSED_RGB_ATC_WEBGL]: 0.5,\n [INTERNAL_FORMATS.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL]: 1,\n [INTERNAL_FORMATS.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL]: 1,\n\n // @see https://registry.khronos.org/OpenGL/extensions/KHR/KHR_texture_compression_astc_hdr.txt\n // WEBGL_compressed_texture_astc\n /* eslint-disable-next-line camelcase */\n [INTERNAL_FORMATS.COMPRESSED_RGBA_ASTC_4x4_KHR]: 1,\n};\n","import { extensions as ext, ExtensionType, settings } from '@pixi/core';\n\nimport type { FormatDetectionParser } from '@pixi/assets';\nimport type { CompressedTextureExtensionRef, CompressedTextureExtensions } from './compressedTextureExtensions';\n\nlet storedGl: WebGLRenderingContext;\nlet extensions: Partial;\n\nfunction getCompressedTextureExtensions()\n{\n extensions = {\n s3tc: storedGl.getExtension('WEBGL_compressed_texture_s3tc'),\n s3tc_sRGB: storedGl.getExtension('WEBGL_compressed_texture_s3tc_srgb'), /* eslint-disable-line camelcase */\n etc: storedGl.getExtension('WEBGL_compressed_texture_etc'),\n etc1: storedGl.getExtension('WEBGL_compressed_texture_etc1'),\n pvrtc: storedGl.getExtension('WEBGL_compressed_texture_pvrtc')\n || storedGl.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc'),\n atc: storedGl.getExtension('WEBGL_compressed_texture_atc'),\n astc: storedGl.getExtension('WEBGL_compressed_texture_astc')\n } as Partial;\n}\n\nexport const detectCompressedTextures = {\n extension: {\n type: ExtensionType.DetectionParser,\n priority: 2,\n },\n test: async (): Promise =>\n {\n // Auto-detect WebGL compressed-texture extensions\n const canvas = settings.ADAPTER.createCanvas();\n const gl = canvas.getContext('webgl');\n\n if (!gl)\n {\n if (process.env.DEBUG)\n {\n console.warn('WebGL not available for compressed textures.');\n }\n\n return false;\n }\n\n storedGl = gl;\n\n return true;\n },\n add: async (formats: string[]): Promise =>\n {\n if (!extensions) getCompressedTextureExtensions();\n\n const textureFormats = [];\n\n // Assign all available compressed-texture formats\n for (const extensionName in extensions)\n {\n const extension = extensions[extensionName as CompressedTextureExtensionRef];\n\n if (!extension)\n {\n continue;\n }\n\n textureFormats.push(extensionName);\n }\n\n return [...textureFormats, ...formats];\n },\n remove: async (formats: string[]): Promise =>\n {\n if (!extensions) getCompressedTextureExtensions();\n\n return formats.filter((f) => !(f in extensions));\n },\n} as FormatDetectionParser;\n\next.add(detectCompressedTextures);\n","import { BufferResource, ViewableBuffer } from '@pixi/core';\n\nimport type { BufferType, IBufferResourceOptions } from '@pixi/core';\n\n/**\n * Constructor options for BlobResource.\n * @memberof PIXI\n */\nexport interface IBlobResourceOptions extends IBufferResourceOptions\n{\n autoLoad?: boolean;\n}\n\n/**\n * Resource that fetches texture data over the network and stores it in a buffer.\n * @class\n * @extends PIXI.Resource\n * @memberof PIXI\n */\nexport abstract class BlobResource extends BufferResource\n{\n /** The URL of the texture file. */\n protected origin: string | null;\n\n /** The viewable buffer on the data. */\n protected buffer: ViewableBuffer | null;\n\n protected loaded: boolean;\n\n /**\n * Promise when loading.\n * @default null\n */\n private _load: Promise;\n\n /**\n * @param source - The buffer/URL of the texture file.\n * @param {PIXI.IBlobResourceOptions} [options]\n * @param {boolean} [options.autoLoad=false] - Whether to fetch the data immediately;\n * you can fetch it later via {@link PIXI.BlobResource#load}.\n * @param {number} [options.width=1] - The width in pixels.\n * @param {number} [options.height=1] - The height in pixels.\n * @param {1|2|4|8} [options.unpackAlignment=4] - The alignment of the pixel rows.\n */\n constructor(source: string | BufferType, options: IBlobResourceOptions = { width: 1, height: 1, autoLoad: true })\n {\n let origin: string | null;\n let data: BufferType;\n\n if (typeof source === 'string')\n {\n origin = source;\n data = new Uint8Array();\n }\n else\n {\n origin = null;\n data = source;\n }\n\n super(data, options);\n\n this.origin = origin;\n this.buffer = data ? new ViewableBuffer(data) : null;\n\n this._load = null;\n this.loaded = false;\n\n // Allow autoLoad = \"undefined\" still load the resource by default\n if (this.origin !== null && options.autoLoad !== false)\n {\n this.load();\n }\n if (this.origin === null && this.buffer)\n {\n this._load = Promise.resolve(this);\n this.loaded = true;\n this.onBlobLoaded(this.buffer.rawBinaryData);\n }\n }\n\n protected onBlobLoaded(_data: ArrayBuffer): void\n {\n // TODO: Override this method\n }\n\n /** Loads the blob */\n load(): Promise\n {\n if (this._load)\n {\n return this._load;\n }\n\n this._load = fetch(this.origin)\n .then((response) => response.blob())\n .then((blob) => blob.arrayBuffer())\n .then((arrayBuffer) =>\n {\n this.data = new Uint32Array(arrayBuffer);\n this.buffer = new ViewableBuffer(arrayBuffer);\n this.loaded = true;\n\n this.onBlobLoaded(arrayBuffer);\n this.update();\n\n return this;\n });\n\n return this._load;\n }\n}\n","import { INTERNAL_FORMAT_TO_BYTES_PER_PIXEL } from '../const';\nimport { BlobResource } from './BlobResource';\n\nimport type { BaseTexture, BufferType, GLTexture, Renderer } from '@pixi/core';\nimport type { INTERNAL_FORMATS } from '../const';\n\n/**\n * Used in parseKTX\n * @ignore\n */\nexport type CompressedLevelBuffer = {\n levelID: number,\n levelWidth: number,\n levelHeight: number,\n levelBuffer: Uint8Array\n};\n\n/**\n * @ignore\n */\nexport interface ICompressedTextureResourceOptions\n{\n format: INTERNAL_FORMATS;\n width: number;\n height: number;\n levels?: number;\n levelBuffers?: CompressedLevelBuffer[];\n}\n\n/**\n * Resource for compressed texture formats, as follows: S3TC/DXTn (& their sRGB formats), ATC, ASTC, ETC 1/2, PVRTC.\n *\n * Compressed textures improve performance when rendering is texture-bound. The texture data stays compressed in\n * graphics memory, increasing memory locality and speeding up texture fetches. These formats can also be used to store\n * more detail in the same amount of memory.\n *\n * For most developers, container file formats are a better abstraction instead of directly handling raw texture\n * data. PixiJS provides native support for the following texture file formats\n * (via {@link PIXI.loadBasis}, {@link PIXI.loadKTX}, and {@link PIXI.loadDDS}):\n *\n * **.dds** - the DirectDraw Surface file format stores DXTn (DXT-1,3,5) data. See {@link PIXI.parseDDS}\n * **.ktx** - the Khronos Texture Container file format supports storing all the supported WebGL compression formats.\n * See {@link PIXI.parseKTX}.\n * **.basis** - the BASIS supercompressed file format stores texture data in an internal format that is transcoded\n * to the compression format supported on the device at _runtime_. It also supports transcoding into a uncompressed\n * format as a fallback; you must install the `@pixi/basis-loader`, `@pixi/basis-transcoder` packages separately to\n * use these files. See {@link PIXI.BasisParser}.\n *\n * The loaders for the aforementioned formats use `CompressedTextureResource` internally. It is strongly suggested that\n * they be used instead.\n *\n * ## Working directly with CompressedTextureResource\n *\n * Since `CompressedTextureResource` inherits `BlobResource`, you can provide it a URL pointing to a file containing\n * the raw texture data (with no file headers!):\n * @example\n * import { CompressedTextureResource, INTERNAL_FORMATS } from '@pixi/compressed-textures';\n * import { BaseTexture, Texture, ALPHA_MODES } from 'pixi.js';\n *\n * // The resource backing the texture data for your textures.\n * // NOTE: You can also provide a ArrayBufferView instead of a URL. This is used when loading data from a container file\n * // format such as KTX, DDS, or BASIS.\n * const compressedResource = new CompressedTextureResource('bunny.dxt5', {\n * format: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n * width: 256,\n * height: 256,\n * });\n *\n * // You can create a base-texture to the cache, so that future `Texture`s can be created using the `Texture.from` API.\n * const baseTexture = new BaseTexture(compressedResource, { pmaMode: ALPHA_MODES.NPM });\n *\n * // Create a Texture to add to the TextureCache\n * const texture = new Texture(baseTexture);\n *\n * // Add baseTexture & texture to the global texture cache\n * BaseTexture.addToCache(baseTexture, 'bunny.dxt5');\n * Texture.addToCache(texture, 'bunny.dxt5');\n * @memberof PIXI\n */\nexport class CompressedTextureResource extends BlobResource\n{\n /** The compression format */\n public format: INTERNAL_FORMATS;\n /**\n * The number of mipmap levels stored in the resource buffer.\n * @default 1\n */\n public levels: number;\n\n // Easy access to the WebGL extension providing support for the compression format via ContextSystem\n private _extension: 's3tc' | 's3tc_sRGB' | 'atc' | 'astc' | 'etc' | 'etc1' | 'pvrtc';\n // Buffer views for each mipmap level in the main buffer\n private _levelBuffers: CompressedLevelBuffer[];\n\n /**\n * @param source - the buffer/URL holding the compressed texture data\n * @param options\n * @param {PIXI.INTERNAL_FORMATS} options.format - the compression format\n * @param {number} options.width - the image width in pixels.\n * @param {number} options.height - the image height in pixels.\n * @param {number} [options.level=1] - the mipmap levels stored in the compressed texture, including level 0.\n * @param {number} [options.levelBuffers] - the buffers for each mipmap level. `CompressedTextureResource` can allows you\n * to pass `null` for `source`, for cases where each level is stored in non-contiguous memory.\n */\n constructor(source: string | BufferType, options: ICompressedTextureResourceOptions)\n {\n super(source, options);\n\n this.format = options.format;\n this.levels = options.levels || 1;\n\n this._width = options.width;\n this._height = options.height;\n\n this._extension = CompressedTextureResource._formatToExtension(this.format);\n\n if (options.levelBuffers || this.buffer)\n {\n // ViewableBuffer doesn't support byteOffset :-( so allow source to be Uint8Array\n this._levelBuffers = options.levelBuffers\n || CompressedTextureResource._createLevelBuffers(\n source instanceof Uint8Array ? source : this.buffer.uint8View,\n this.format,\n this.levels,\n 4, 4, // PVRTC has 8x4 blocks in 2bpp mode\n this.width,\n this.height);\n }\n }\n\n /**\n * @override\n * @param renderer - A reference to the current renderer\n * @param _texture - the texture\n * @param _glTexture - texture instance for this webgl context\n */\n upload(renderer: Renderer, _texture: BaseTexture, _glTexture: GLTexture): boolean\n {\n const gl = renderer.gl;\n const extension = renderer.context.extensions[this._extension];\n\n if (!extension)\n {\n throw new Error(`${this._extension} textures are not supported on the current machine`);\n }\n if (!this._levelBuffers)\n {\n // Do not try to upload data before BlobResource loads, unless the levelBuffers were provided directly!\n return false;\n }\n\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 4);\n\n for (let i = 0, j = this.levels; i < j; i++)\n {\n const { levelID, levelWidth, levelHeight, levelBuffer } = this._levelBuffers[i];\n\n gl.compressedTexImage2D(gl.TEXTURE_2D, levelID, this.format, levelWidth, levelHeight, 0, levelBuffer);\n }\n\n return true;\n }\n\n /** @protected */\n protected onBlobLoaded(): void\n {\n this._levelBuffers = CompressedTextureResource._createLevelBuffers(\n this.buffer.uint8View,\n this.format,\n this.levels,\n 4, 4, // PVRTC has 8x4 blocks in 2bpp mode\n this.width,\n this.height);\n }\n\n /**\n * Returns the key (to ContextSystem#extensions) for the WebGL extension supporting the compression format\n * @private\n * @param format - the compression format to get the extension for.\n */\n private static _formatToExtension(format: INTERNAL_FORMATS):\n 's3tc' | 's3tc_sRGB' | 'atc' |\n 'astc' | 'etc' | 'etc1' | 'pvrtc'\n {\n if (format >= 0x83F0 && format <= 0x83F3)\n {\n return 's3tc';\n }\n else if (format >= 0x9270 && format <= 0x9279)\n {\n return 'etc';\n }\n else if (format >= 0x8C00 && format <= 0x8C03)\n {\n return 'pvrtc';\n }\n else if (format >= 0x8D64)\n {\n return 'etc1';\n }\n else if (format >= 0x8C92 && format <= 0x87EE)\n {\n return 'atc';\n }\n\n throw new Error('Invalid (compressed) texture format given!');\n }\n\n /**\n * Pre-creates buffer views for each mipmap level\n * @private\n * @param buffer -\n * @param format - compression formats\n * @param levels - mipmap levels\n * @param blockWidth -\n * @param blockHeight -\n * @param imageWidth - width of the image in pixels\n * @param imageHeight - height of the image in pixels\n */\n private static _createLevelBuffers(\n buffer: Uint8Array,\n format: INTERNAL_FORMATS,\n levels: number,\n blockWidth: number,\n blockHeight: number,\n imageWidth: number,\n imageHeight: number\n ): CompressedLevelBuffer[]\n {\n // The byte-size of the first level buffer\n const buffers = new Array(levels);\n\n let offset = buffer.byteOffset;\n\n let levelWidth = imageWidth;\n let levelHeight = imageHeight;\n let alignedLevelWidth = (levelWidth + blockWidth - 1) & ~(blockWidth - 1);\n let alignedLevelHeight = (levelHeight + blockHeight - 1) & ~(blockHeight - 1);\n\n let levelSize = alignedLevelWidth * alignedLevelHeight * INTERNAL_FORMAT_TO_BYTES_PER_PIXEL[format];\n\n for (let i = 0; i < levels; i++)\n {\n buffers[i] = {\n levelID: i,\n levelWidth: levels > 1 ? levelWidth : alignedLevelWidth,\n levelHeight: levels > 1 ? levelHeight : alignedLevelHeight,\n levelBuffer: new Uint8Array(buffer.buffer, offset, levelSize)\n };\n\n offset += levelSize;\n\n // Calculate levelBuffer dimensions for next iteration\n levelWidth = (levelWidth >> 1) || 1;\n levelHeight = (levelHeight >> 1) || 1;\n alignedLevelWidth = (levelWidth + blockWidth - 1) & ~(blockWidth - 1);\n alignedLevelHeight = (levelHeight + blockHeight - 1) & ~(blockHeight - 1);\n levelSize = alignedLevelWidth * alignedLevelHeight * INTERNAL_FORMAT_TO_BYTES_PER_PIXEL[format];\n }\n\n return buffers;\n }\n}\n","import { INTERNAL_FORMAT_TO_BYTES_PER_PIXEL, INTERNAL_FORMATS } from '../const';\nimport { CompressedTextureResource } from '../resources';\n\nconst DDS_MAGIC_SIZE = 4;\nconst DDS_HEADER_SIZE = 124;\nconst DDS_HEADER_PF_SIZE = 32;\nconst DDS_HEADER_DX10_SIZE = 20;\n\n// DDS file format magic word\nconst DDS_MAGIC = 0x20534444;\n\n/**\n * DWORD offsets of the DDS file header fields (relative to file start).\n * @ignore\n */\nconst DDS_FIELDS = {\n SIZE: 1,\n FLAGS: 2,\n HEIGHT: 3,\n WIDTH: 4,\n MIPMAP_COUNT: 7,\n PIXEL_FORMAT: 19,\n};\n\n/**\n * DWORD offsets of the DDS PIXEL_FORMAT fields.\n * @ignore\n */\nconst DDS_PF_FIELDS = {\n SIZE: 0,\n FLAGS: 1,\n FOURCC: 2,\n RGB_BITCOUNT: 3,\n R_BIT_MASK: 4,\n G_BIT_MASK: 5,\n B_BIT_MASK: 6,\n A_BIT_MASK: 7\n};\n\n/**\n * DWORD offsets of the DDS_HEADER_DX10 fields.\n * @ignore\n */\nconst DDS_DX10_FIELDS = {\n DXGI_FORMAT: 0,\n RESOURCE_DIMENSION: 1,\n MISC_FLAG: 2,\n ARRAY_SIZE: 3,\n MISC_FLAGS2: 4\n};\n\n/**\n * @see https://docs.microsoft.com/en-us/windows/win32/api/dxgiformat/ne-dxgiformat-dxgi_format\n * This is way over-blown for us! Lend us a hand, and remove the ones that aren't used (but set the remaining\n * ones to their correct value)\n * @ignore\n */\nenum DXGI_FORMAT\n {\n DXGI_FORMAT_UNKNOWN,\n DXGI_FORMAT_R32G32B32A32_TYPELESS,\n DXGI_FORMAT_R32G32B32A32_FLOAT,\n DXGI_FORMAT_R32G32B32A32_UINT,\n DXGI_FORMAT_R32G32B32A32_SINT,\n DXGI_FORMAT_R32G32B32_TYPELESS,\n DXGI_FORMAT_R32G32B32_FLOAT,\n DXGI_FORMAT_R32G32B32_UINT,\n DXGI_FORMAT_R32G32B32_SINT,\n DXGI_FORMAT_R16G16B16A16_TYPELESS,\n DXGI_FORMAT_R16G16B16A16_FLOAT,\n DXGI_FORMAT_R16G16B16A16_UNORM,\n DXGI_FORMAT_R16G16B16A16_UINT,\n DXGI_FORMAT_R16G16B16A16_SNORM,\n DXGI_FORMAT_R16G16B16A16_SINT,\n DXGI_FORMAT_R32G32_TYPELESS,\n DXGI_FORMAT_R32G32_FLOAT,\n DXGI_FORMAT_R32G32_UINT,\n DXGI_FORMAT_R32G32_SINT,\n DXGI_FORMAT_R32G8X24_TYPELESS,\n DXGI_FORMAT_D32_FLOAT_S8X24_UINT,\n DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,\n DXGI_FORMAT_X32_TYPELESS_G8X24_UINT,\n DXGI_FORMAT_R10G10B10A2_TYPELESS,\n DXGI_FORMAT_R10G10B10A2_UNORM,\n DXGI_FORMAT_R10G10B10A2_UINT,\n DXGI_FORMAT_R11G11B10_FLOAT,\n DXGI_FORMAT_R8G8B8A8_TYPELESS,\n DXGI_FORMAT_R8G8B8A8_UNORM,\n DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,\n DXGI_FORMAT_R8G8B8A8_UINT,\n DXGI_FORMAT_R8G8B8A8_SNORM,\n DXGI_FORMAT_R8G8B8A8_SINT,\n DXGI_FORMAT_R16G16_TYPELESS,\n DXGI_FORMAT_R16G16_FLOAT,\n DXGI_FORMAT_R16G16_UNORM,\n DXGI_FORMAT_R16G16_UINT,\n DXGI_FORMAT_R16G16_SNORM,\n DXGI_FORMAT_R16G16_SINT,\n DXGI_FORMAT_R32_TYPELESS,\n DXGI_FORMAT_D32_FLOAT,\n DXGI_FORMAT_R32_FLOAT,\n DXGI_FORMAT_R32_UINT,\n DXGI_FORMAT_R32_SINT,\n DXGI_FORMAT_R24G8_TYPELESS,\n DXGI_FORMAT_D24_UNORM_S8_UINT,\n DXGI_FORMAT_R24_UNORM_X8_TYPELESS,\n DXGI_FORMAT_X24_TYPELESS_G8_UINT,\n DXGI_FORMAT_R8G8_TYPELESS,\n DXGI_FORMAT_R8G8_UNORM,\n DXGI_FORMAT_R8G8_UINT,\n DXGI_FORMAT_R8G8_SNORM,\n DXGI_FORMAT_R8G8_SINT,\n DXGI_FORMAT_R16_TYPELESS,\n DXGI_FORMAT_R16_FLOAT,\n DXGI_FORMAT_D16_UNORM,\n DXGI_FORMAT_R16_UNORM,\n DXGI_FORMAT_R16_UINT,\n DXGI_FORMAT_R16_SNORM,\n DXGI_FORMAT_R16_SINT,\n DXGI_FORMAT_R8_TYPELESS,\n DXGI_FORMAT_R8_UNORM,\n DXGI_FORMAT_R8_UINT,\n DXGI_FORMAT_R8_SNORM,\n DXGI_FORMAT_R8_SINT,\n DXGI_FORMAT_A8_UNORM,\n DXGI_FORMAT_R1_UNORM,\n DXGI_FORMAT_R9G9B9E5_SHAREDEXP,\n DXGI_FORMAT_R8G8_B8G8_UNORM,\n DXGI_FORMAT_G8R8_G8B8_UNORM,\n DXGI_FORMAT_BC1_TYPELESS,\n DXGI_FORMAT_BC1_UNORM,\n DXGI_FORMAT_BC1_UNORM_SRGB,\n DXGI_FORMAT_BC2_TYPELESS,\n DXGI_FORMAT_BC2_UNORM,\n DXGI_FORMAT_BC2_UNORM_SRGB,\n DXGI_FORMAT_BC3_TYPELESS,\n DXGI_FORMAT_BC3_UNORM,\n DXGI_FORMAT_BC3_UNORM_SRGB,\n DXGI_FORMAT_BC4_TYPELESS,\n DXGI_FORMAT_BC4_UNORM,\n DXGI_FORMAT_BC4_SNORM,\n DXGI_FORMAT_BC5_TYPELESS,\n DXGI_FORMAT_BC5_UNORM,\n DXGI_FORMAT_BC5_SNORM,\n DXGI_FORMAT_B5G6R5_UNORM,\n DXGI_FORMAT_B5G5R5A1_UNORM,\n DXGI_FORMAT_B8G8R8A8_UNORM,\n DXGI_FORMAT_B8G8R8X8_UNORM,\n DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM,\n DXGI_FORMAT_B8G8R8A8_TYPELESS,\n DXGI_FORMAT_B8G8R8A8_UNORM_SRGB,\n DXGI_FORMAT_B8G8R8X8_TYPELESS,\n DXGI_FORMAT_B8G8R8X8_UNORM_SRGB,\n DXGI_FORMAT_BC6H_TYPELESS,\n DXGI_FORMAT_BC6H_UF16,\n DXGI_FORMAT_BC6H_SF16,\n DXGI_FORMAT_BC7_TYPELESS,\n DXGI_FORMAT_BC7_UNORM,\n DXGI_FORMAT_BC7_UNORM_SRGB,\n DXGI_FORMAT_AYUV,\n DXGI_FORMAT_Y410,\n DXGI_FORMAT_Y416,\n DXGI_FORMAT_NV12,\n DXGI_FORMAT_P010,\n DXGI_FORMAT_P016,\n DXGI_FORMAT_420_OPAQUE,\n DXGI_FORMAT_YUY2,\n DXGI_FORMAT_Y210,\n DXGI_FORMAT_Y216,\n DXGI_FORMAT_NV11,\n DXGI_FORMAT_AI44,\n DXGI_FORMAT_IA44,\n DXGI_FORMAT_P8,\n DXGI_FORMAT_A8P8,\n DXGI_FORMAT_B4G4R4A4_UNORM,\n DXGI_FORMAT_P208,\n DXGI_FORMAT_V208,\n DXGI_FORMAT_V408,\n DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE,\n DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE,\n DXGI_FORMAT_FORCE_UINT\n}\n\n/**\n * Possible values of the field {@link DDS_DX10_FIELDS.RESOURCE_DIMENSION}\n * @ignore\n */\nenum D3D10_RESOURCE_DIMENSION\n {\n DDS_DIMENSION_TEXTURE1D = 2,\n DDS_DIMENSION_TEXTURE2D = 3,\n DDS_DIMENSION_TEXTURE3D = 6\n}\n\nconst PF_FLAGS = 1;\n\n// PIXEL_FORMAT flags\nconst DDPF_ALPHA = 0x2;\nconst DDPF_FOURCC = 0x4;\nconst DDPF_RGB = 0x40;\nconst DDPF_YUV = 0x200;\nconst DDPF_LUMINANCE = 0x20000;\n\n// Four character codes for DXTn formats\nconst FOURCC_DXT1 = 0x31545844;\nconst FOURCC_DXT3 = 0x33545844;\nconst FOURCC_DXT5 = 0x35545844;\nconst FOURCC_DX10 = 0x30315844;\n\n// Cubemap texture flag (for DDS_DX10_FIELDS.MISC_FLAG)\nconst DDS_RESOURCE_MISC_TEXTURECUBE = 0x4;\n\n/**\n * Maps `FOURCC_*` formats to internal formats (see {@link PIXI.INTERNAL_FORMATS}).\n * @ignore\n */\nconst FOURCC_TO_FORMAT: { [id: number]: number } = {\n [FOURCC_DXT1]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT1_EXT,\n [FOURCC_DXT3]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n [FOURCC_DXT5]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT5_EXT\n};\n\n/**\n * Maps {@link DXGI_FORMAT} to types/internal-formats (see {@link PIXI.TYPES}, {@link PIXI.INTERNAL_FORMATS})\n * @ignore\n */\nconst DXGI_TO_FORMAT: { [id: number]: number } = {\n // WEBGL_compressed_texture_s3tc\n [DXGI_FORMAT.DXGI_FORMAT_BC1_TYPELESS]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT1_EXT,\n [DXGI_FORMAT.DXGI_FORMAT_BC1_UNORM]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT1_EXT,\n [DXGI_FORMAT.DXGI_FORMAT_BC2_TYPELESS]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n [DXGI_FORMAT.DXGI_FORMAT_BC2_UNORM]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT3_EXT,\n [DXGI_FORMAT.DXGI_FORMAT_BC3_TYPELESS]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n [DXGI_FORMAT.DXGI_FORMAT_BC3_UNORM]: INTERNAL_FORMATS.COMPRESSED_RGBA_S3TC_DXT5_EXT,\n\n // WEBGL_compressed_texture_s3tc_srgb\n [DXGI_FORMAT.DXGI_FORMAT_BC1_UNORM_SRGB]: INTERNAL_FORMATS.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,\n [DXGI_FORMAT.DXGI_FORMAT_BC2_UNORM_SRGB]: INTERNAL_FORMATS.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,\n [DXGI_FORMAT.DXGI_FORMAT_BC3_UNORM_SRGB]: INTERNAL_FORMATS.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT\n};\n\n/**\n * Parses the DDS file header, generates base-textures, and puts them into the texture cache.\n * @see https://docs.microsoft.com/en-us/windows/win32/direct3ddds/dx-graphics-dds-pguide\n * @param arrayBuffer\n * @memberof PIXI\n */\nexport function parseDDS(arrayBuffer: ArrayBuffer): CompressedTextureResource[]\n{\n const data = new Uint32Array(arrayBuffer);\n const magicWord = data[0];\n\n if (magicWord !== DDS_MAGIC)\n {\n throw new Error('Invalid DDS file magic word');\n }\n\n const header = new Uint32Array(arrayBuffer, 0, DDS_HEADER_SIZE / Uint32Array.BYTES_PER_ELEMENT);\n\n // DDS header fields\n const height = header[DDS_FIELDS.HEIGHT];\n const width = header[DDS_FIELDS.WIDTH];\n const mipmapCount = header[DDS_FIELDS.MIPMAP_COUNT];\n\n // PIXEL_FORMAT fields\n const pixelFormat = new Uint32Array(\n arrayBuffer,\n DDS_FIELDS.PIXEL_FORMAT * Uint32Array.BYTES_PER_ELEMENT,\n DDS_HEADER_PF_SIZE / Uint32Array.BYTES_PER_ELEMENT);\n const formatFlags = pixelFormat[PF_FLAGS];\n\n // File contains compressed texture(s)\n if (formatFlags & DDPF_FOURCC)\n {\n const fourCC = pixelFormat[DDS_PF_FIELDS.FOURCC];\n\n // File contains one DXTn compressed texture\n if (fourCC !== FOURCC_DX10)\n {\n const internalFormat = FOURCC_TO_FORMAT[fourCC];\n\n const dataOffset = DDS_MAGIC_SIZE + DDS_HEADER_SIZE;\n const texData = new Uint8Array(arrayBuffer, dataOffset);\n\n const resource = new CompressedTextureResource(texData, {\n format: internalFormat,\n width,\n height,\n levels: mipmapCount // CompressedTextureResource will separate the levelBuffers for us!\n });\n\n return [resource];\n }\n\n // FOURCC_DX10 indicates there is a 20-byte DDS_HEADER_DX10 after DDS_HEADER\n const dx10Offset = DDS_MAGIC_SIZE + DDS_HEADER_SIZE;\n const dx10Header = new Uint32Array(\n data.buffer,\n dx10Offset,\n DDS_HEADER_DX10_SIZE / Uint32Array.BYTES_PER_ELEMENT);\n const dxgiFormat = dx10Header[DDS_DX10_FIELDS.DXGI_FORMAT];\n const resourceDimension = dx10Header[DDS_DX10_FIELDS.RESOURCE_DIMENSION];\n const miscFlag = dx10Header[DDS_DX10_FIELDS.MISC_FLAG];\n const arraySize = dx10Header[DDS_DX10_FIELDS.ARRAY_SIZE];\n\n // Map dxgiFormat to PIXI.INTERNAL_FORMATS\n const internalFormat = DXGI_TO_FORMAT[dxgiFormat];\n\n if (internalFormat === undefined)\n {\n throw new Error(`DDSParser cannot parse texture data with DXGI format ${dxgiFormat}`);\n }\n if (miscFlag === DDS_RESOURCE_MISC_TEXTURECUBE)\n {\n // FIXME: Anybody excited about cubemap compressed textures?\n throw new Error('DDSParser does not support cubemap textures');\n }\n if (resourceDimension === D3D10_RESOURCE_DIMENSION.DDS_DIMENSION_TEXTURE3D)\n {\n // FIXME: Anybody excited about 3D compressed textures?\n throw new Error('DDSParser does not supported 3D texture data');\n }\n\n // Uint8Array buffers of image data, including all mipmap levels in each image\n const imageBuffers = new Array();\n const dataOffset = DDS_MAGIC_SIZE\n + DDS_HEADER_SIZE\n + DDS_HEADER_DX10_SIZE;\n\n if (arraySize === 1)\n {\n // No need bothering with the imageSize calculation!\n imageBuffers.push(new Uint8Array(arrayBuffer, dataOffset));\n }\n else\n {\n // Calculate imageSize for each texture, and then locate each image's texture data\n\n const pixelSize = INTERNAL_FORMAT_TO_BYTES_PER_PIXEL[internalFormat];\n let imageSize = 0;\n let levelWidth = width;\n let levelHeight = height;\n\n for (let i = 0; i < mipmapCount; i++)\n {\n const alignedLevelWidth = Math.max(1, (levelWidth + 3) & ~3);\n const alignedLevelHeight = Math.max(1, (levelHeight + 3) & ~3);\n\n const levelSize = alignedLevelWidth * alignedLevelHeight * pixelSize;\n\n imageSize += levelSize;\n\n levelWidth = levelWidth >>> 1;\n levelHeight = levelHeight >>> 1;\n }\n\n let imageOffset = dataOffset;\n\n // NOTE: Cubemaps have 6-images per texture (but they aren't supported so ^_^)\n for (let i = 0; i < arraySize; i++)\n {\n imageBuffers.push(new Uint8Array(arrayBuffer, imageOffset, imageSize));\n imageOffset += imageSize;\n }\n }\n\n // Uint8Array -> CompressedTextureResource, and we're done!\n return imageBuffers.map((buffer) => new CompressedTextureResource(buffer, {\n format: internalFormat,\n width,\n height,\n levels: mipmapCount\n }));\n }\n if (formatFlags & DDPF_RGB)\n {\n // FIXME: We might want to allow uncompressed *.dds files?\n throw new Error('DDSParser does not support uncompressed texture data.');\n }\n if (formatFlags & DDPF_YUV)\n {\n // FIXME: Does anybody need this feature?\n throw new Error('DDSParser does not supported YUV uncompressed texture data.');\n }\n if (formatFlags & DDPF_LUMINANCE)\n {\n // FIXME: Microsoft says older DDS filers use this feature! Probably not worth the effort!\n throw new Error('DDSParser does not support single-channel (lumninance) texture data!');\n }\n if (formatFlags & DDPF_ALPHA)\n {\n // FIXME: I'm tired! See above =)\n throw new Error('DDSParser does not support single-channel (alpha) texture data!');\n }\n\n throw new Error('DDSParser failed to load a texture file due to an unknown reason!');\n}\n\n","import { BufferResource, FORMATS, TYPES } from '@pixi/core';\nimport { INTERNAL_FORMAT_TO_BYTES_PER_PIXEL } from '../const';\nimport { CompressedTextureResource } from '../resources';\n\nimport type { CompressedLevelBuffer } from '../resources';\n\n/**\n * The 12-byte KTX file identifier\n * @see https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/#2.1\n * @ignore\n */\nconst FILE_IDENTIFIER = [0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A];\n\n/**\n * The value stored in the \"endianness\" field.\n * @see https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/#2.2\n * @ignore\n */\nconst ENDIANNESS = 0x04030201;\n\n/**\n * Byte offsets of the KTX file header fields\n * @ignore\n */\nconst KTX_FIELDS = {\n FILE_IDENTIFIER: 0,\n ENDIANNESS: 12,\n GL_TYPE: 16,\n GL_TYPE_SIZE: 20,\n GL_FORMAT: 24,\n GL_INTERNAL_FORMAT: 28,\n GL_BASE_INTERNAL_FORMAT: 32,\n PIXEL_WIDTH: 36,\n PIXEL_HEIGHT: 40,\n PIXEL_DEPTH: 44,\n NUMBER_OF_ARRAY_ELEMENTS: 48,\n NUMBER_OF_FACES: 52,\n NUMBER_OF_MIPMAP_LEVELS: 56,\n BYTES_OF_KEY_VALUE_DATA: 60\n};\n\n/**\n * Byte size of the file header fields in {@code KTX_FIELDS}\n * @ignore\n */\nconst FILE_HEADER_SIZE = 64;\n\n/**\n * Maps {@link PIXI.TYPES} to the bytes taken per component, excluding those ones that are bit-fields.\n * @ignore\n */\nexport const TYPES_TO_BYTES_PER_COMPONENT: { [id: number]: number } = {\n [TYPES.UNSIGNED_BYTE]: 1,\n [TYPES.UNSIGNED_SHORT]: 2,\n [TYPES.INT]: 4,\n [TYPES.UNSIGNED_INT]: 4,\n [TYPES.FLOAT]: 4,\n [TYPES.HALF_FLOAT]: 8\n};\n\n/**\n * Number of components in each {@link PIXI.FORMATS}\n * @ignore\n */\nexport const FORMATS_TO_COMPONENTS: { [id: number]: number } = {\n [FORMATS.RGBA]: 4,\n [FORMATS.RGB]: 3,\n [FORMATS.RG]: 2,\n [FORMATS.RED]: 1,\n [FORMATS.LUMINANCE]: 1,\n [FORMATS.LUMINANCE_ALPHA]: 2,\n [FORMATS.ALPHA]: 1\n};\n\n/**\n * Number of bytes per pixel in bit-field types in {@link PIXI.TYPES}\n * @ignore\n */\nexport const TYPES_TO_BYTES_PER_PIXEL: { [id: number]: number } = {\n [TYPES.UNSIGNED_SHORT_4_4_4_4]: 2,\n [TYPES.UNSIGNED_SHORT_5_5_5_1]: 2,\n [TYPES.UNSIGNED_SHORT_5_6_5]: 2\n};\n\nexport function parseKTX(url: string, arrayBuffer: ArrayBuffer, loadKeyValueData = false): {\n compressed?: CompressedTextureResource[]\n uncompressed?: { resource: BufferResource, type: TYPES, format: FORMATS }[]\n kvData: Map | null\n}\n{\n const dataView = new DataView(arrayBuffer);\n\n if (!validate(url, dataView))\n {\n return null;\n }\n\n const littleEndian = dataView.getUint32(KTX_FIELDS.ENDIANNESS, true) === ENDIANNESS;\n const glType = dataView.getUint32(KTX_FIELDS.GL_TYPE, littleEndian);\n // const glTypeSize = dataView.getUint32(KTX_FIELDS.GL_TYPE_SIZE, littleEndian);\n const glFormat = dataView.getUint32(KTX_FIELDS.GL_FORMAT, littleEndian);\n const glInternalFormat = dataView.getUint32(KTX_FIELDS.GL_INTERNAL_FORMAT, littleEndian);\n const pixelWidth = dataView.getUint32(KTX_FIELDS.PIXEL_WIDTH, littleEndian);\n const pixelHeight = dataView.getUint32(KTX_FIELDS.PIXEL_HEIGHT, littleEndian) || 1;// \"pixelHeight = 0\" -> \"1\"\n const pixelDepth = dataView.getUint32(KTX_FIELDS.PIXEL_DEPTH, littleEndian) || 1;// ^^\n const numberOfArrayElements = dataView.getUint32(KTX_FIELDS.NUMBER_OF_ARRAY_ELEMENTS, littleEndian) || 1;// ^^\n const numberOfFaces = dataView.getUint32(KTX_FIELDS.NUMBER_OF_FACES, littleEndian);\n const numberOfMipmapLevels = dataView.getUint32(KTX_FIELDS.NUMBER_OF_MIPMAP_LEVELS, littleEndian);\n const bytesOfKeyValueData = dataView.getUint32(KTX_FIELDS.BYTES_OF_KEY_VALUE_DATA, littleEndian);\n\n // Whether the platform architecture is little endian. If littleEndian !== platformLittleEndian, then the\n // file contents must be endian-converted!\n // TODO: Endianness conversion\n // const platformLittleEndian = new Uint8Array((new Uint32Array([ENDIANNESS])).buffer)[0] === 0x01;\n\n if (pixelHeight === 0 || pixelDepth !== 1)\n {\n throw new Error('Only 2D textures are supported');\n }\n if (numberOfFaces !== 1)\n {\n throw new Error('CubeTextures are not supported by KTXLoader yet!');\n }\n if (numberOfArrayElements !== 1)\n {\n // TODO: Support splitting array-textures into multiple BaseTextures\n throw new Error('WebGL does not support array textures');\n }\n\n // TODO: 8x4 blocks for 2bpp pvrtc\n const blockWidth = 4;\n const blockHeight = 4;\n\n const alignedWidth = (pixelWidth + 3) & ~3;\n const alignedHeight = (pixelHeight + 3) & ~3;\n const imageBuffers = new Array(numberOfArrayElements);\n let imagePixels = pixelWidth * pixelHeight;\n\n if (glType === 0)\n {\n // Align to 16 pixels (4x4 blocks)\n imagePixels = alignedWidth * alignedHeight;\n }\n\n let imagePixelByteSize: number;\n\n if (glType !== 0)\n {\n // Uncompressed texture format\n if (TYPES_TO_BYTES_PER_COMPONENT[glType])\n {\n imagePixelByteSize = TYPES_TO_BYTES_PER_COMPONENT[glType] * FORMATS_TO_COMPONENTS[glFormat];\n }\n else\n {\n imagePixelByteSize = TYPES_TO_BYTES_PER_PIXEL[glType];\n }\n }\n else\n {\n imagePixelByteSize = INTERNAL_FORMAT_TO_BYTES_PER_PIXEL[glInternalFormat];\n }\n\n if (imagePixelByteSize === undefined)\n {\n throw new Error('Unable to resolve the pixel format stored in the *.ktx file!');\n }\n\n const kvData: Map | null = loadKeyValueData\n ? parseKvData(dataView, bytesOfKeyValueData, littleEndian)\n : null;\n\n const imageByteSize = imagePixels * imagePixelByteSize;\n let mipByteSize = imageByteSize;\n let mipWidth = pixelWidth;\n let mipHeight = pixelHeight;\n let alignedMipWidth = alignedWidth;\n let alignedMipHeight = alignedHeight;\n let imageOffset = FILE_HEADER_SIZE + bytesOfKeyValueData;\n\n for (let mipmapLevel = 0; mipmapLevel < numberOfMipmapLevels; mipmapLevel++)\n {\n const imageSize = dataView.getUint32(imageOffset, littleEndian);\n let elementOffset = imageOffset + 4;\n\n for (let arrayElement = 0; arrayElement < numberOfArrayElements; arrayElement++)\n {\n // TODO: Maybe support 3D textures? :-)\n // for (let zSlice = 0; zSlice < pixelDepth; zSlice)\n\n let mips = imageBuffers[arrayElement];\n\n if (!mips)\n {\n mips = imageBuffers[arrayElement] = new Array(numberOfMipmapLevels);\n }\n\n mips[mipmapLevel] = {\n levelID: mipmapLevel,\n\n // don't align mipWidth when texture not compressed! (glType not zero)\n levelWidth: numberOfMipmapLevels > 1 || glType !== 0 ? mipWidth : alignedMipWidth,\n levelHeight: numberOfMipmapLevels > 1 || glType !== 0 ? mipHeight : alignedMipHeight,\n levelBuffer: new Uint8Array(arrayBuffer, elementOffset, mipByteSize)\n };\n elementOffset += mipByteSize;\n }\n\n // HINT: Aligns to 4-byte boundary after jumping imageSize (in lieu of mipPadding)\n imageOffset += imageSize + 4;// (+4 to jump the imageSize field itself)\n imageOffset = imageOffset % 4 !== 0 ? imageOffset + 4 - (imageOffset % 4) : imageOffset;\n\n // Calculate mipWidth, mipHeight for _next_ iteration\n mipWidth = (mipWidth >> 1) || 1;\n mipHeight = (mipHeight >> 1) || 1;\n alignedMipWidth = (mipWidth + blockWidth - 1) & ~(blockWidth - 1);\n alignedMipHeight = (mipHeight + blockHeight - 1) & ~(blockHeight - 1);\n\n // Each mipmap level is 4-times smaller?\n mipByteSize = alignedMipWidth * alignedMipHeight * imagePixelByteSize;\n }\n\n // We use the levelBuffers feature of CompressedTextureResource b/c texture data is image-major, not level-major.\n if (glType !== 0)\n {\n return {\n uncompressed: imageBuffers.map((levelBuffers) =>\n {\n let buffer: Float32Array | Uint32Array | Int32Array | Uint8Array = levelBuffers[0].levelBuffer;\n let convertToInt = false;\n\n if (glType === TYPES.FLOAT)\n {\n buffer = new Float32Array(\n levelBuffers[0].levelBuffer.buffer,\n levelBuffers[0].levelBuffer.byteOffset,\n levelBuffers[0].levelBuffer.byteLength / 4);\n }\n else if (glType === TYPES.UNSIGNED_INT)\n {\n convertToInt = true;\n buffer = new Uint32Array(\n levelBuffers[0].levelBuffer.buffer,\n levelBuffers[0].levelBuffer.byteOffset,\n levelBuffers[0].levelBuffer.byteLength / 4);\n }\n else if (glType === TYPES.INT)\n {\n convertToInt = true;\n buffer = new Int32Array(\n levelBuffers[0].levelBuffer.buffer,\n levelBuffers[0].levelBuffer.byteOffset,\n levelBuffers[0].levelBuffer.byteLength / 4);\n }\n\n return {\n resource: new BufferResource(\n buffer,\n {\n width: levelBuffers[0].levelWidth,\n height: levelBuffers[0].levelHeight,\n }\n ),\n type: glType,\n format: convertToInt ? convertFormatToInteger(glFormat) : glFormat,\n };\n }),\n kvData\n };\n }\n\n return {\n compressed: imageBuffers.map((levelBuffers) => new CompressedTextureResource(null, {\n format: glInternalFormat,\n width: pixelWidth,\n height: pixelHeight,\n levels: numberOfMipmapLevels,\n levelBuffers,\n })),\n kvData\n };\n}\n\n/**\n * Checks whether the arrayBuffer contains a valid *.ktx file.\n * @param url\n * @param dataView\n */\nfunction validate(url: string, dataView: DataView): boolean\n{\n // NOTE: Do not optimize this into 3 32-bit integer comparison because the endianness\n // of the data is not specified.\n for (let i = 0; i < FILE_IDENTIFIER.length; i++)\n {\n if (dataView.getUint8(i) !== FILE_IDENTIFIER[i])\n {\n if (process.env.DEBUG)\n {\n console.error(`${url} is not a valid *.ktx file!`);\n }\n\n return false;\n }\n }\n\n return true;\n}\n\nfunction convertFormatToInteger(format: FORMATS)\n{\n switch (format)\n {\n case FORMATS.RGBA: return FORMATS.RGBA_INTEGER;\n case FORMATS.RGB: return FORMATS.RGB_INTEGER;\n case FORMATS.RG: return FORMATS.RG_INTEGER;\n case FORMATS.RED: return FORMATS.RED_INTEGER;\n default: return format;\n }\n}\n\nfunction parseKvData(dataView: DataView, bytesOfKeyValueData: number, littleEndian: boolean): Map\n{\n const kvData = new Map();\n let bytesIntoKeyValueData = 0;\n\n while (bytesIntoKeyValueData < bytesOfKeyValueData)\n {\n const keyAndValueByteSize = dataView.getUint32(FILE_HEADER_SIZE + bytesIntoKeyValueData, littleEndian);\n const keyAndValueByteOffset = FILE_HEADER_SIZE + bytesIntoKeyValueData + 4;\n const valuePadding = 3 - ((keyAndValueByteSize + 3) % 4);\n\n // Bounds check\n if (keyAndValueByteSize === 0 || keyAndValueByteSize > bytesOfKeyValueData - bytesIntoKeyValueData)\n {\n console.error('KTXLoader: keyAndValueByteSize out of bounds');\n break;\n }\n\n // Note: keyNulByte can't be 0 otherwise the key is an empty string.\n let keyNulByte = 0;\n\n for (; keyNulByte < keyAndValueByteSize; keyNulByte++)\n {\n if (dataView.getUint8(keyAndValueByteOffset + keyNulByte) === 0x00)\n {\n break;\n }\n }\n\n if (keyNulByte === -1)\n {\n console.error('KTXLoader: Failed to find null byte terminating kvData key');\n break;\n }\n\n const key = new TextDecoder().decode(\n new Uint8Array(dataView.buffer, keyAndValueByteOffset, keyNulByte)\n );\n const value = new DataView(\n dataView.buffer,\n keyAndValueByteOffset + keyNulByte + 1,\n keyAndValueByteSize - keyNulByte - 1,\n );\n\n kvData.set(key, value);\n\n // 4 = the keyAndValueByteSize field itself\n // keyAndValueByteSize = the bytes taken by the key and value\n // valuePadding = extra padding to align with 4 bytes\n bytesIntoKeyValueData += 4 + keyAndValueByteSize + valuePadding;\n }\n\n return kvData;\n}\n","import { checkExtension, createTexture, LoaderParserPriority } from '@pixi/assets';\nimport { ALPHA_MODES, BaseTexture, extensions, ExtensionType, MIPMAP_MODES, settings, utils } from '@pixi/core';\nimport { parseDDS } from '../parsers';\n\nimport type { Loader, LoaderParser, ResolvedAsset } from '@pixi/assets';\nimport type { IBaseTextureOptions, Texture } from '@pixi/core';\n\n/** Load our DDS textures! */\nexport const loadDDS: LoaderParser = {\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.High,\n },\n\n name: 'loadDDS',\n\n test(url: string): boolean\n {\n return checkExtension(url, '.dds');\n },\n\n async load(url: string, asset: ResolvedAsset, loader: Loader): Promise\n {\n // get an array buffer...\n const response = await settings.ADAPTER.fetch(url);\n\n const arrayBuffer = await response.arrayBuffer();\n\n const resources = parseDDS(arrayBuffer);\n\n const textures = resources.map((resource) =>\n {\n const base = new BaseTexture(resource, {\n mipmap: MIPMAP_MODES.OFF,\n alphaMode: ALPHA_MODES.NO_PREMULTIPLIED_ALPHA,\n resolution: utils.getResolutionOfUrl(url),\n ...asset.data,\n });\n\n return createTexture(base, loader, url);\n });\n\n return textures.length === 1 ? textures[0] : textures;\n },\n\n unload(texture: Texture | Texture[]): void\n {\n if (Array.isArray(texture))\n {\n texture.forEach((t) => t.destroy(true));\n }\n else\n {\n texture.destroy(true);\n }\n }\n\n} as LoaderParser;\n\nextensions.add(loadDDS);\n","import { checkExtension, createTexture, LoaderParserPriority } from '@pixi/assets';\nimport { ALPHA_MODES, BaseTexture, extensions, ExtensionType, MIPMAP_MODES, settings, utils } from '@pixi/core';\nimport { parseKTX } from '../parsers';\n\nimport type { Loader, LoaderParser, ResolvedAsset } from '@pixi/assets';\nimport type { IBaseTextureOptions, Texture } from '@pixi/core';\n\n/** Loads KTX textures! */\nexport const loadKTX = {\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.High,\n },\n\n name: 'loadKTX',\n\n test(url: string): boolean\n {\n return checkExtension(url, '.ktx');\n },\n\n async load(url: string, asset: ResolvedAsset, loader: Loader): Promise\n {\n // get an array buffer...\n const response = await settings.ADAPTER.fetch(url);\n\n const arrayBuffer = await response.arrayBuffer();\n\n const { compressed, uncompressed, kvData } = parseKTX(url, arrayBuffer);\n\n const resources = compressed ?? uncompressed;\n\n const options = {\n mipmap: MIPMAP_MODES.OFF,\n alphaMode: ALPHA_MODES.NO_PREMULTIPLIED_ALPHA,\n resolution: utils.getResolutionOfUrl(url),\n ...asset.data,\n };\n\n const textures = resources.map((resource) =>\n {\n if (resources === uncompressed)\n {\n Object.assign(options, {\n type: (resource as typeof uncompressed[0]).type,\n format: (resource as typeof uncompressed[0]).format,\n });\n }\n\n const res = (resource as typeof uncompressed[0]).resource ?? (resource as typeof compressed[0]);\n\n const base = new BaseTexture(res, options);\n\n base.ktxKeyValueData = kvData;\n\n return createTexture(base, loader, url);\n });\n\n return textures.length === 1 ? textures[0] : textures;\n },\n\n unload(texture: Texture | Texture[]): void\n {\n if (Array.isArray(texture))\n {\n texture.forEach((t) => t.destroy(true));\n }\n else\n {\n texture.destroy(true);\n }\n }\n\n} as LoaderParser;\n\nextensions.add(loadKTX);\n","import { extensions, ExtensionType, settings, utils } from '@pixi/core';\n\nimport type { ResolveURLParser, UnresolvedAsset } from '@pixi/assets';\n\nexport const resolveCompressedTextureUrl = {\n extension: ExtensionType.ResolveParser,\n test: (value: string) =>\n {\n const extension = utils.path.extname(value).slice(1);\n\n return ['basis', 'ktx', 'dds'].includes(extension);\n },\n parse: (value: string): UnresolvedAsset =>\n {\n const extension = utils.path.extname(value).slice(1);\n\n if (extension === 'ktx')\n {\n const extensions = [\n '.s3tc.ktx',\n '.s3tc_sRGB.ktx',\n '.etc.ktx',\n '.etc1.ktx',\n '.pvrt.ktx',\n '.atc.ktx',\n '.astc.ktx'\n ];\n\n // check if value ends with one of the extensions\n if (extensions.some((ext) => value.endsWith(ext)))\n {\n return {\n resolution: parseFloat(settings.RETINA_PREFIX.exec(value)?.[1] ?? '1'),\n format: extensions.find((ext) => value.endsWith(ext)),\n src: value,\n };\n }\n }\n\n return {\n resolution: parseFloat(settings.RETINA_PREFIX.exec(value)?.[1] ?? '1'),\n format: extension,\n src: value,\n };\n },\n} as ResolveURLParser;\n\nextensions.add(resolveCompressedTextureUrl);\n","import { extensions, ExtensionType, FORMATS, Rectangle, RenderTexture, utils } from '@pixi/core';\n\nimport type { ExtensionMetadata, ICanvas, ISystem, Renderer } from '@pixi/core';\nimport type { DisplayObject } from '@pixi/display';\n\nconst TEMP_RECT = new Rectangle();\nconst BYTES_PER_PIXEL = 4;\n\nexport interface IExtract\n{\n image(target?: DisplayObject | RenderTexture, format?: string, quality?: number,\n frame?: Rectangle): Promise;\n base64(target?: DisplayObject | RenderTexture, format?: string, quality?: number,\n frame?: Rectangle): Promise;\n canvas(target?: DisplayObject | RenderTexture, frame?: Rectangle): ICanvas;\n pixels(target?: DisplayObject | RenderTexture, frame?: Rectangle): Uint8Array | Uint8ClampedArray;\n}\n\n/**\n * This class provides renderer-specific plugins for exporting content from a renderer.\n * For instance, these plugins can be used for saving an Image, Canvas element or for exporting the raw image data (pixels).\n *\n * Do not instantiate these plugins directly. It is available from the `renderer.extract` property.\n * @example\n * import { Application, Graphics } from 'pixi.js';\n *\n * // Create a new application (extract will be auto-added to renderer)\n * const app = new Application();\n *\n * // Draw a red circle\n * const graphics = new Graphics()\n * .beginFill(0xFF0000)\n * .drawCircle(0, 0, 50);\n *\n * // Render the graphics as an HTMLImageElement\n * const image = await app.renderer.extract.image(graphics);\n * document.body.appendChild(image);\n * @memberof PIXI\n */\n\nexport class Extract implements ISystem, IExtract\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n name: 'extract',\n type: ExtensionType.RendererSystem,\n };\n\n private renderer: Renderer | null;\n\n /** Does the renderer have alpha and are its color channels stored premultipled by the alpha channel? */\n private _rendererPremultipliedAlpha: boolean;\n\n /**\n * @param renderer - A reference to the current renderer\n */\n constructor(renderer: Renderer)\n {\n this.renderer = renderer;\n this._rendererPremultipliedAlpha = false;\n }\n\n protected contextChange(): void\n {\n const attributes = this.renderer?.gl.getContextAttributes();\n\n this._rendererPremultipliedAlpha = !!(attributes && attributes.alpha && attributes.premultipliedAlpha);\n }\n\n /**\n * Will return a HTML Image of the target\n * @param target - A displayObject or renderTexture\n * to convert. If left empty will use the main renderer\n * @param format - Image format, e.g. \"image/jpeg\" or \"image/webp\".\n * @param quality - JPEG or Webp compression from 0 to 1. Default is 0.92.\n * @param frame - The frame the extraction is restricted to.\n * @returns - HTML Image of the target\n */\n public async image(target?: DisplayObject | RenderTexture, format?: string, quality?: number,\n frame?: Rectangle): Promise\n {\n const image = new Image();\n\n image.src = await this.base64(target, format, quality, frame);\n\n return image;\n }\n\n /**\n * Will return a base64 encoded string of this target. It works by calling\n * `Extract.canvas` and then running toDataURL on that.\n * @param target - A displayObject or renderTexture\n * to convert. If left empty will use the main renderer\n * @param format - Image format, e.g. \"image/jpeg\" or \"image/webp\".\n * @param quality - JPEG or Webp compression from 0 to 1. Default is 0.92.\n * @param frame - The frame the extraction is restricted to.\n * @returns - A base64 encoded string of the texture.\n */\n public async base64(target?: DisplayObject | RenderTexture, format?: string, quality?: number,\n frame?: Rectangle): Promise\n {\n const canvas = this.canvas(target, frame);\n\n if (canvas.toBlob !== undefined)\n {\n return new Promise((resolve, reject) =>\n {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n canvas.toBlob!((blob) =>\n {\n if (!blob)\n {\n reject(new Error('ICanvas.toBlob failed!'));\n\n return;\n }\n\n const reader = new FileReader();\n\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n }, format, quality);\n });\n }\n if (canvas.toDataURL !== undefined)\n {\n return canvas.toDataURL(format, quality);\n }\n if (canvas.convertToBlob !== undefined)\n {\n const blob = await canvas.convertToBlob({ type: format, quality });\n\n return new Promise((resolve, reject) =>\n {\n const reader = new FileReader();\n\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n }\n\n throw new Error('Extract.base64() requires ICanvas.toDataURL, ICanvas.toBlob, '\n + 'or ICanvas.convertToBlob to be implemented');\n }\n\n /**\n * Creates a Canvas element, renders this target to it and then returns it.\n * @param target - A displayObject or renderTexture\n * to convert. If left empty will use the main renderer\n * @param frame - The frame the extraction is restricted to.\n * @returns - A Canvas element with the texture rendered on.\n */\n public canvas(target?: DisplayObject | RenderTexture, frame?: Rectangle): ICanvas\n {\n const { pixels, width, height, flipY, premultipliedAlpha } = this._rawPixels(target, frame);\n\n // Flipping pixels\n if (flipY)\n {\n Extract._flipY(pixels, width, height);\n }\n\n if (premultipliedAlpha)\n {\n Extract._unpremultiplyAlpha(pixels);\n }\n\n const canvasBuffer = new utils.CanvasRenderTarget(width, height, 1);\n\n // Add the pixels to the canvas\n const imageData = new ImageData(new Uint8ClampedArray(pixels.buffer), width, height);\n\n canvasBuffer.context.putImageData(imageData, 0, 0);\n\n // Send the canvas back\n return canvasBuffer.canvas;\n }\n\n /**\n * Will return a one-dimensional array containing the pixel data of the entire texture in RGBA\n * order, with integer values between 0 and 255 (included).\n * @param target - A displayObject or renderTexture\n * to convert. If left empty will use the main renderer\n * @param frame - The frame the extraction is restricted to.\n * @returns - One-dimensional array containing the pixel data of the entire texture\n */\n public pixels(target?: DisplayObject | RenderTexture, frame?: Rectangle): Uint8Array\n {\n const { pixels, width, height, flipY, premultipliedAlpha } = this._rawPixels(target, frame);\n\n if (flipY)\n {\n Extract._flipY(pixels, width, height);\n }\n\n if (premultipliedAlpha)\n {\n Extract._unpremultiplyAlpha(pixels);\n }\n\n return pixels;\n }\n\n private _rawPixels(target?: DisplayObject | RenderTexture, frame?: Rectangle): {\n pixels: Uint8Array, width: number, height: number, flipY: boolean, premultipliedAlpha: boolean\n }\n {\n const renderer = this.renderer;\n\n if (!renderer)\n {\n throw new Error('The Extract has already been destroyed');\n }\n\n let resolution;\n let flipY = false;\n let premultipliedAlpha = false;\n let renderTexture;\n let generated = false;\n\n if (target)\n {\n if (target instanceof RenderTexture)\n {\n renderTexture = target;\n }\n else\n {\n renderTexture = renderer.generateTexture(target, {\n region: frame,\n resolution: renderer.resolution,\n multisample: renderer.multisample\n });\n generated = true;\n\n if (frame)\n {\n TEMP_RECT.width = frame.width;\n TEMP_RECT.height = frame.height;\n frame = TEMP_RECT;\n }\n }\n }\n\n const gl = renderer.gl;\n\n if (renderTexture)\n {\n resolution = renderTexture.baseTexture.resolution;\n frame = frame ?? renderTexture.frame;\n flipY = false;\n premultipliedAlpha = renderTexture.baseTexture.alphaMode > 0\n && renderTexture.baseTexture.format === FORMATS.RGBA;\n\n if (!generated)\n {\n renderer.renderTexture.bind(renderTexture);\n\n const fbo = renderTexture.framebuffer.glFramebuffers[renderer.CONTEXT_UID];\n\n if (fbo.blitFramebuffer)\n {\n renderer.framebuffer.bind(fbo.blitFramebuffer);\n }\n }\n }\n else\n {\n resolution = renderer.resolution;\n\n if (!frame)\n {\n frame = TEMP_RECT;\n frame.width = renderer.width / resolution;\n frame.height = renderer.height / resolution;\n }\n\n flipY = true;\n premultipliedAlpha = this._rendererPremultipliedAlpha;\n renderer.renderTexture.bind();\n }\n\n const width = Math.max(Math.round(frame.width * resolution), 1);\n const height = Math.max(Math.round(frame.height * resolution), 1);\n\n const pixels = new Uint8Array(BYTES_PER_PIXEL * width * height);\n\n // Read pixels to the array\n gl.readPixels(\n Math.round(frame.x * resolution),\n Math.round(frame.y * resolution),\n width,\n height,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n pixels\n );\n\n if (generated)\n {\n renderTexture?.destroy(true);\n }\n\n return { pixels, width, height, flipY, premultipliedAlpha };\n }\n\n /** Destroys the extract. */\n public destroy(): void\n {\n this.renderer = null;\n }\n\n private static _flipY(pixels: Uint8Array | Uint8ClampedArray, width: number, height: number): void\n {\n const w = width << 2;\n const h = height >> 1;\n const temp = new Uint8Array(w);\n\n for (let y = 0; y < h; y++)\n {\n const t = y * w;\n const b = (height - y - 1) * w;\n\n temp.set(pixels.subarray(t, t + w));\n pixels.copyWithin(t, b, b + w);\n pixels.set(temp, b);\n }\n }\n\n private static _unpremultiplyAlpha(pixels: Uint8Array | Uint8ClampedArray): void\n {\n if (pixels instanceof Uint8ClampedArray)\n {\n pixels = new Uint8Array(pixels.buffer);\n }\n\n const n = pixels.length;\n\n for (let i = 0; i < n; i += 4)\n {\n const alpha = pixels[i + 3];\n\n if (alpha !== 0)\n {\n const a = 255.001 / alpha;\n\n pixels[i] = (pixels[i] * a) + 0.5;\n pixels[i + 1] = (pixels[i + 1] * a) + 0.5;\n pixels[i + 2] = (pixels[i + 2] * a) + 0.5;\n }\n }\n }\n}\n\nextensions.add(Extract);\n","// for type only\nimport { SHAPES } from '@pixi/core';\n\nimport type { Circle, Ellipse, RoundedRectangle } from '@pixi/core';\nimport type { IShapeBuildCommand } from './IShapeBuildCommand';\n\n/**\n * Builds a circle to draw\n *\n * Ignored from docs since it is not directly exposed.\n * @ignore\n * @private\n * @param {PIXI.WebGLGraphicsData} graphicsData - The graphics object to draw\n * @param {object} webGLData - an object containing all the WebGL-specific information to create this shape\n * @param {object} webGLDataNativeLines - an object containing all the WebGL-specific information to create nativeLines\n */\nexport const buildCircle: IShapeBuildCommand = {\n\n build(graphicsData)\n {\n // need to convert points to a nice regular data\n const points = graphicsData.points;\n\n let x;\n let y;\n let dx;\n let dy;\n let rx;\n let ry;\n\n if (graphicsData.type === SHAPES.CIRC)\n {\n const circle = graphicsData.shape as Circle;\n\n x = circle.x;\n y = circle.y;\n rx = ry = circle.radius;\n dx = dy = 0;\n }\n else if (graphicsData.type === SHAPES.ELIP)\n {\n const ellipse = graphicsData.shape as Ellipse;\n\n x = ellipse.x;\n y = ellipse.y;\n rx = ellipse.width;\n ry = ellipse.height;\n dx = dy = 0;\n }\n else\n {\n const roundedRect = graphicsData.shape as RoundedRectangle;\n const halfWidth = roundedRect.width / 2;\n const halfHeight = roundedRect.height / 2;\n\n x = roundedRect.x + halfWidth;\n y = roundedRect.y + halfHeight;\n rx = ry = Math.max(0, Math.min(roundedRect.radius, Math.min(halfWidth, halfHeight)));\n dx = halfWidth - rx;\n dy = halfHeight - ry;\n }\n\n if (!(rx >= 0 && ry >= 0 && dx >= 0 && dy >= 0))\n {\n points.length = 0;\n\n return;\n }\n\n // Choose a number of segments such that the maximum absolute deviation from the circle is approximately 0.029\n const n = Math.ceil(2.3 * Math.sqrt(rx + ry));\n const m = (n * 8) + (dx ? 4 : 0) + (dy ? 4 : 0);\n\n points.length = m;\n\n if (m === 0)\n {\n return;\n }\n\n if (n === 0)\n {\n points.length = 8;\n points[0] = points[6] = x + dx;\n points[1] = points[3] = y + dy;\n points[2] = points[4] = x - dx;\n points[5] = points[7] = y - dy;\n\n return;\n }\n\n let j1 = 0;\n let j2 = (n * 4) + (dx ? 2 : 0) + 2;\n let j3 = j2;\n let j4 = m;\n\n {\n const x0 = dx + rx;\n const y0 = dy;\n const x1 = x + x0;\n const x2 = x - x0;\n const y1 = y + y0;\n\n points[j1++] = x1;\n points[j1++] = y1;\n points[--j2] = y1;\n points[--j2] = x2;\n\n if (dy)\n {\n const y2 = y - y0;\n\n points[j3++] = x2;\n points[j3++] = y2;\n points[--j4] = y2;\n points[--j4] = x1;\n }\n }\n\n for (let i = 1; i < n; i++)\n {\n const a = Math.PI / 2 * (i / n);\n const x0 = dx + (Math.cos(a) * rx);\n const y0 = dy + (Math.sin(a) * ry);\n const x1 = x + x0;\n const x2 = x - x0;\n const y1 = y + y0;\n const y2 = y - y0;\n\n points[j1++] = x1;\n points[j1++] = y1;\n points[--j2] = y1;\n points[--j2] = x2;\n points[j3++] = x2;\n points[j3++] = y2;\n points[--j4] = y2;\n points[--j4] = x1;\n }\n\n {\n const x0 = dx;\n const y0 = dy + ry;\n const x1 = x + x0;\n const x2 = x - x0;\n const y1 = y + y0;\n const y2 = y - y0;\n\n points[j1++] = x1;\n points[j1++] = y1;\n points[--j4] = y2;\n points[--j4] = x1;\n\n if (dx)\n {\n points[j1++] = x2;\n points[j1++] = y1;\n points[--j4] = y2;\n points[--j4] = x2;\n }\n }\n },\n\n triangulate(graphicsData, graphicsGeometry)\n {\n const points = graphicsData.points;\n const verts = graphicsGeometry.points;\n const indices = graphicsGeometry.indices;\n\n if (points.length === 0)\n {\n return;\n }\n\n let vertPos = verts.length / 2;\n const center = vertPos;\n\n let x;\n let y;\n\n if (graphicsData.type !== SHAPES.RREC)\n {\n const circle = graphicsData.shape as Circle;\n\n x = circle.x;\n y = circle.y;\n }\n else\n {\n const roundedRect = graphicsData.shape as RoundedRectangle;\n\n x = roundedRect.x + (roundedRect.width / 2);\n y = roundedRect.y + (roundedRect.height / 2);\n }\n\n const matrix = graphicsData.matrix;\n\n // Push center (special point)\n verts.push(\n graphicsData.matrix ? (matrix.a * x) + (matrix.c * y) + matrix.tx : x,\n graphicsData.matrix ? (matrix.b * x) + (matrix.d * y) + matrix.ty : y);\n\n vertPos++;\n\n verts.push(points[0], points[1]);\n\n for (let i = 2; i < points.length; i += 2)\n {\n verts.push(points[i], points[i + 1]);\n\n // add some uvs\n indices.push(vertPos++, center, vertPos);\n }\n\n indices.push(center + 1, center, vertPos);\n },\n};\n","import { utils } from '@pixi/core';\n\nimport type { Polygon } from '@pixi/core';\nimport type { IShapeBuildCommand } from './IShapeBuildCommand';\n\nfunction fixOrientation(points: number[], hole = false)\n{\n const m = points.length;\n\n if (m < 6)\n {\n return;\n }\n\n let area = 0;\n\n for (let i = 0, x1 = points[m - 2], y1 = points[m - 1]; i < m; i += 2)\n {\n const x2 = points[i];\n const y2 = points[i + 1];\n\n area += (x2 - x1) * (y2 + y1);\n\n x1 = x2;\n y1 = y2;\n }\n\n if ((!hole && area > 0) || (hole && area <= 0))\n {\n const n = m / 2;\n\n for (let i = n + (n % 2); i < m; i += 2)\n {\n const i1 = m - i - 2;\n const i2 = m - i - 1;\n const i3 = i;\n const i4 = i + 1;\n\n [points[i1], points[i3]] = [points[i3], points[i1]];\n [points[i2], points[i4]] = [points[i4], points[i2]];\n }\n }\n}\n/**\n * Builds a polygon to draw\n *\n * Ignored from docs since it is not directly exposed.\n * @ignore\n * @private\n * @param {PIXI.WebGLGraphicsData} graphicsData - The graphics object containing all the necessary properties\n * @param {object} webGLData - an object containing all the WebGL-specific information to create this shape\n * @param {object} webGLDataNativeLines - an object containing all the WebGL-specific information to create nativeLines\n */\nexport const buildPoly: IShapeBuildCommand = {\n\n build(graphicsData)\n {\n graphicsData.points = (graphicsData.shape as Polygon).points.slice();\n },\n\n triangulate(graphicsData, graphicsGeometry)\n {\n let points = graphicsData.points;\n const holes = graphicsData.holes;\n const verts = graphicsGeometry.points;\n const indices = graphicsGeometry.indices;\n\n if (points.length >= 6)\n {\n fixOrientation(points, false);\n\n const holeArray = [];\n // Process holes..\n\n for (let i = 0; i < holes.length; i++)\n {\n const hole = holes[i];\n\n fixOrientation(hole.points, true);\n\n holeArray.push(points.length / 2);\n points = points.concat(hole.points);\n }\n\n // sort color\n const triangles = utils.earcut(points, holeArray, 2);\n\n if (!triangles)\n {\n return;\n }\n\n const vertPos = verts.length / 2;\n\n for (let i = 0; i < triangles.length; i += 3)\n {\n indices.push(triangles[i] + vertPos);\n indices.push(triangles[i + 1] + vertPos);\n indices.push(triangles[i + 2] + vertPos);\n }\n\n for (let i = 0; i < points.length; i++)\n {\n verts.push(points[i]);\n }\n }\n },\n};\n","import type { Rectangle } from '@pixi/core';\nimport type { IShapeBuildCommand } from './IShapeBuildCommand';\n\n/**\n * Builds a rectangle to draw\n *\n * Ignored from docs since it is not directly exposed.\n * @ignore\n * @private\n * @param {PIXI.WebGLGraphicsData} graphicsData - The graphics object containing all the necessary properties\n * @param {object} webGLData - an object containing all the WebGL-specific information to create this shape\n * @param {object} webGLDataNativeLines - an object containing all the WebGL-specific information to create nativeLines\n */\nexport const buildRectangle: IShapeBuildCommand = {\n\n build(graphicsData)\n {\n // --- //\n // need to convert points to a nice regular data\n //\n const rectData = graphicsData.shape as Rectangle;\n const x = rectData.x;\n const y = rectData.y;\n const width = rectData.width;\n const height = rectData.height;\n\n const points = graphicsData.points;\n\n points.length = 0;\n\n if (!(width >= 0 && height >= 0))\n {\n return;\n }\n\n points.push(x, y,\n x + width, y,\n x + width, y + height,\n x, y + height);\n },\n\n triangulate(graphicsData, graphicsGeometry)\n {\n const points = graphicsData.points;\n const verts = graphicsGeometry.points;\n\n if (points.length === 0)\n {\n return;\n }\n\n const vertPos = verts.length / 2;\n\n verts.push(points[0], points[1],\n points[2], points[3],\n points[6], points[7],\n points[4], points[5]);\n\n graphicsGeometry.indices.push(vertPos, vertPos + 1, vertPos + 2,\n vertPos + 1, vertPos + 2, vertPos + 3);\n },\n};\n","// for type only\nimport { buildCircle } from './buildCircle';\n\nimport type { IShapeBuildCommand } from './IShapeBuildCommand';\n\n/**\n * Builds a rounded rectangle to draw\n *\n * Ignored from docs since it is not directly exposed.\n * @ignore\n * @private\n * @param {PIXI.WebGLGraphicsData} graphicsData - The graphics object containing all the necessary properties\n * @param {object} webGLData - an object containing all the WebGL-specific information to create this shape\n * @param {object} webGLDataNativeLines - an object containing all the WebGL-specific information to create nativeLines\n */\nexport const buildRoundedRectangle: IShapeBuildCommand = {\n\n build(graphicsData)\n {\n buildCircle.build(graphicsData);\n },\n\n triangulate(graphicsData, graphicsGeometry)\n {\n buildCircle.triangulate(graphicsData, graphicsGeometry);\n },\n};\n","/**\n * Supported line joints in `PIXI.LineStyle` for graphics.\n * @see PIXI.Graphics#lineStyle\n * @see https://graphicdesign.stackexchange.com/questions/59018/what-is-a-bevel-join-of-two-lines-exactly-illustrator\n * @memberof PIXI\n * @static\n * @enum {string}\n */\nexport enum LINE_JOIN\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * 'miter': make a sharp corner where outer part of lines meet\n * @default miter\n */\n MITER = 'miter',\n /**\n * 'bevel': add a square butt at each end of line segment and fill the triangle at turn\n * @default bevel\n */\n BEVEL = 'bevel',\n /**\n * 'round': add an arc at the joint\n * @default round\n */\n ROUND = 'round'\n}\n\n/**\n * Support line caps in `PIXI.LineStyle` for graphics.\n * @see PIXI.Graphics#lineStyle\n * @memberof PIXI\n * @static\n * @enum {string}\n */\nexport enum LINE_CAP\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * 'butt': don't add any cap at line ends (leaves orthogonal edges)\n * @default butt\n */\n BUTT = 'butt',\n /**\n * 'round': add semicircle at ends\n * @default round\n */\n ROUND = 'round',\n /**\n * 'square': add square at end (like `BUTT` except more length at end)\n * @default square\n */\n SQUARE = 'square'\n}\n\n/**\n * @memberof PIXI\n * @deprecated\n */\nexport interface IGraphicsCurvesSettings\n{\n adaptive: boolean;\n maxLength: number;\n minSegments: number;\n maxSegments: number;\n\n epsilon: number;\n\n _segmentsCount(length: number, defaultSegments?: number): number;\n}\n\n/**\n * @private\n */\nexport const curves = {\n adaptive: true,\n maxLength: 10,\n minSegments: 8,\n maxSegments: 2048,\n\n epsilon: 0.0001,\n\n _segmentsCount(length: number, defaultSegments = 20)\n {\n if (!this.adaptive || !length || isNaN(length))\n {\n return defaultSegments;\n }\n\n let result = Math.ceil(length / this.maxLength);\n\n if (result < this.minSegments)\n {\n result = this.minSegments;\n }\n else if (result > this.maxSegments)\n {\n result = this.maxSegments;\n }\n\n return result;\n },\n};\n\n/**\n * @static\n * @readonly\n * @memberof PIXI\n * @name GRAPHICS_CURVES\n * @type {object}\n * @deprecated since 7.1.0\n * @see PIXI.Graphics.curves\n */\nexport const GRAPHICS_CURVES = curves;\n","import { PI_2 } from '@pixi/core';\nimport { curves } from '../const';\n\ninterface IArcLikeShape\n{\n cx: number;\n cy: number;\n radius: number;\n startAngle: number;\n endAngle: number;\n anticlockwise: boolean;\n}\n\n/**\n * Utilities for arc curves.\n * @private\n */\nexport class ArcUtils\n{\n /**\n * Calculate information of the arc for {@link PIXI.Graphics.arcTo}.\n * @private\n * @param x1 - The x-coordinate of the first control point of the arc\n * @param y1 - The y-coordinate of the first control point of the arc\n * @param x2 - The x-coordinate of the second control point of the arc\n * @param y2 - The y-coordinate of the second control point of the arc\n * @param radius - The radius of the arc\n * @param points - Collection of points to add to\n * @returns - If the arc length is valid, return center of circle, radius and other info otherwise `null`.\n */\n static curveTo(x1: number, y1: number, x2: number, y2: number, radius: number, points: Array): IArcLikeShape\n {\n const fromX = points[points.length - 2];\n const fromY = points[points.length - 1];\n\n const a1 = fromY - y1;\n const b1 = fromX - x1;\n const a2 = y2 - y1;\n const b2 = x2 - x1;\n const mm = Math.abs((a1 * b2) - (b1 * a2));\n\n if (mm < 1.0e-8 || radius === 0)\n {\n if (points[points.length - 2] !== x1 || points[points.length - 1] !== y1)\n {\n points.push(x1, y1);\n }\n\n return null;\n }\n\n const dd = (a1 * a1) + (b1 * b1);\n const cc = (a2 * a2) + (b2 * b2);\n const tt = (a1 * a2) + (b1 * b2);\n const k1 = radius * Math.sqrt(dd) / mm;\n const k2 = radius * Math.sqrt(cc) / mm;\n const j1 = k1 * tt / dd;\n const j2 = k2 * tt / cc;\n const cx = (k1 * b2) + (k2 * b1);\n const cy = (k1 * a2) + (k2 * a1);\n const px = b1 * (k2 + j1);\n const py = a1 * (k2 + j1);\n const qx = b2 * (k1 + j2);\n const qy = a2 * (k1 + j2);\n const startAngle = Math.atan2(py - cy, px - cx);\n const endAngle = Math.atan2(qy - cy, qx - cx);\n\n return {\n cx: (cx + x1),\n cy: (cy + y1),\n radius,\n startAngle,\n endAngle,\n anticlockwise: (b1 * a2 > b2 * a1),\n };\n }\n\n /**\n * The arc method creates an arc/curve (used to create circles, or parts of circles).\n * @private\n * @param _startX - Start x location of arc\n * @param _startY - Start y location of arc\n * @param cx - The x-coordinate of the center of the circle\n * @param cy - The y-coordinate of the center of the circle\n * @param radius - The radius of the circle\n * @param startAngle - The starting angle, in radians (0 is at the 3 o'clock position\n * of the arc's circle)\n * @param endAngle - The ending angle, in radians\n * @param _anticlockwise - Specifies whether the drawing should be\n * counter-clockwise or clockwise. False is default, and indicates clockwise, while true\n * indicates counter-clockwise.\n * @param points - Collection of points to add to\n */\n static arc(_startX: number, _startY: number, cx: number, cy: number, radius: number,\n startAngle: number, endAngle: number, _anticlockwise: boolean, points: Array): void\n {\n const sweep = endAngle - startAngle;\n const n = curves._segmentsCount(\n Math.abs(sweep) * radius,\n Math.ceil(Math.abs(sweep) / PI_2) * 40\n );\n\n const theta = (sweep) / (n * 2);\n const theta2 = theta * 2;\n const cTheta = Math.cos(theta);\n const sTheta = Math.sin(theta);\n const segMinus = n - 1;\n const remainder = (segMinus % 1) / segMinus;\n\n for (let i = 0; i <= segMinus; ++i)\n {\n const real = i + (remainder * i);\n const angle = ((theta) + startAngle + (theta2 * real));\n const c = Math.cos(angle);\n const s = -Math.sin(angle);\n\n points.push(\n (((cTheta * c) + (sTheta * s)) * radius) + cx,\n (((cTheta * -s) + (sTheta * c)) * radius) + cy\n );\n }\n }\n}\n","import { curves } from '../const';\n\n/**\n * Utilities for bezier curves\n * @private\n */\nexport class BezierUtils\n{\n /**\n * Calculate length of bezier curve.\n * Analytical solution is impossible, since it involves an integral that does not integrate in general.\n * Therefore numerical solution is used.\n * @private\n * @param fromX - Starting point x\n * @param fromY - Starting point y\n * @param cpX - Control point x\n * @param cpY - Control point y\n * @param cpX2 - Second Control point x\n * @param cpY2 - Second Control point y\n * @param toX - Destination point x\n * @param toY - Destination point y\n * @returns - Length of bezier curve\n */\n static curveLength(\n fromX: number, fromY: number,\n cpX: number, cpY: number,\n cpX2: number, cpY2: number,\n toX: number, toY: number): number\n {\n const n = 10;\n let result = 0.0;\n let t = 0.0;\n let t2 = 0.0;\n let t3 = 0.0;\n let nt = 0.0;\n let nt2 = 0.0;\n let nt3 = 0.0;\n let x = 0.0;\n let y = 0.0;\n let dx = 0.0;\n let dy = 0.0;\n let prevX = fromX;\n let prevY = fromY;\n\n for (let i = 1; i <= n; ++i)\n {\n t = i / n;\n t2 = t * t;\n t3 = t2 * t;\n nt = (1.0 - t);\n nt2 = nt * nt;\n nt3 = nt2 * nt;\n\n x = (nt3 * fromX) + (3.0 * nt2 * t * cpX) + (3.0 * nt * t2 * cpX2) + (t3 * toX);\n y = (nt3 * fromY) + (3.0 * nt2 * t * cpY) + (3 * nt * t2 * cpY2) + (t3 * toY);\n dx = prevX - x;\n dy = prevY - y;\n prevX = x;\n prevY = y;\n\n result += Math.sqrt((dx * dx) + (dy * dy));\n }\n\n return result;\n }\n\n /**\n * Calculate the points for a bezier curve and then draws it.\n *\n * Ignored from docs since it is not directly exposed.\n * @ignore\n * @param cpX - Control point x\n * @param cpY - Control point y\n * @param cpX2 - Second Control point x\n * @param cpY2 - Second Control point y\n * @param toX - Destination point x\n * @param toY - Destination point y\n * @param points - Path array to push points into\n */\n static curveTo(\n cpX: number, cpY: number,\n cpX2: number, cpY2: number,\n toX: number, toY: number,\n points: Array): void\n {\n const fromX = points[points.length - 2];\n const fromY = points[points.length - 1];\n\n points.length -= 2;\n\n const n = curves._segmentsCount(\n BezierUtils.curveLength(fromX, fromY, cpX, cpY, cpX2, cpY2, toX, toY)\n );\n\n let dt = 0;\n let dt2 = 0;\n let dt3 = 0;\n let t2 = 0;\n let t3 = 0;\n\n points.push(fromX, fromY);\n\n for (let i = 1, j = 0; i <= n; ++i)\n {\n j = i / n;\n\n dt = (1 - j);\n dt2 = dt * dt;\n dt3 = dt2 * dt;\n\n t2 = j * j;\n t3 = t2 * j;\n\n points.push(\n (dt3 * fromX) + (3 * dt2 * j * cpX) + (3 * dt * t2 * cpX2) + (t3 * toX),\n (dt3 * fromY) + (3 * dt2 * j * cpY) + (3 * dt * t2 * cpY2) + (t3 * toY)\n );\n }\n }\n}\n","import { Point, SHAPES } from '@pixi/core';\nimport { curves, LINE_CAP, LINE_JOIN } from '../const';\n\nimport type { Polygon } from '@pixi/core';\nimport type { GraphicsData } from '../GraphicsData';\nimport type { GraphicsGeometry } from '../GraphicsGeometry';\n\n/**\n * Buffers vertices to draw a square cap.\n *\n * Ignored from docs since it is not directly exposed.\n * @ignore\n * @private\n * @param {number} x - X-coord of end point\n * @param {number} y - Y-coord of end point\n * @param {number} nx - X-coord of line normal pointing inside\n * @param {number} ny - Y-coord of line normal pointing inside\n * @param {number} innerWeight - Weight of inner points\n * @param {number} outerWeight - Weight of outer points\n * @param {boolean} clockwise - Whether the cap is drawn clockwise\n * @param {Array} verts - vertex buffer\n * @returns {number} - no. of vertices pushed\n */\nfunction square(\n x: number,\n y: number,\n nx: number,\n ny: number,\n innerWeight: number,\n outerWeight: number,\n clockwise: boolean, /* rotation for square (true at left end, false at right end) */\n verts: Array\n): number\n{\n const ix = x - (nx * innerWeight);\n const iy = y - (ny * innerWeight);\n const ox = x + (nx * outerWeight);\n const oy = y + (ny * outerWeight);\n\n /* Rotate nx,ny for extension vector */\n let exx; let\n eyy;\n\n if (clockwise)\n {\n exx = ny;\n eyy = -nx;\n }\n else\n {\n exx = -ny;\n eyy = nx;\n }\n\n /* [i|0]x,y extended at cap */\n const eix = ix + exx;\n const eiy = iy + eyy;\n const eox = ox + exx;\n const eoy = oy + eyy;\n\n /* Square itself must be inserted clockwise*/\n verts.push(\n eix, eiy,\n eox, eoy);\n\n return 2;\n}\n\n/**\n * Buffers vertices to draw an arc at the line joint or cap.\n *\n * Ignored from docs since it is not directly exposed.\n * @ignore\n * @private\n * @param {number} cx - X-coord of center\n * @param {number} cy - Y-coord of center\n * @param {number} sx - X-coord of arc start\n * @param {number} sy - Y-coord of arc start\n * @param {number} ex - X-coord of arc end\n * @param {number} ey - Y-coord of arc end\n * @param {Array} verts - buffer of vertices\n * @param {boolean} clockwise - orientation of vertices\n * @returns {number} - no. of vertices pushed\n */\nfunction round(\n cx: number,\n cy: number,\n sx: number,\n sy: number,\n ex: number,\n ey: number,\n verts: Array,\n clockwise: boolean, /* if not cap, then clockwise is turn of joint, otherwise rotation from angle0 to angle1 */\n): number\n{\n const cx2p0x = sx - cx;\n const cy2p0y = sy - cy;\n\n let angle0 = Math.atan2(cx2p0x, cy2p0y);\n let angle1 = Math.atan2(ex - cx, ey - cy);\n\n if (clockwise && angle0 < angle1)\n {\n angle0 += Math.PI * 2;\n }\n else if (!clockwise && angle0 > angle1)\n {\n angle1 += Math.PI * 2;\n }\n\n let startAngle = angle0;\n const angleDiff = angle1 - angle0;\n const absAngleDiff = Math.abs(angleDiff);\n\n /* if (absAngleDiff >= PI_LBOUND && absAngleDiff <= PI_UBOUND)\n {\n const r1x = cx - nxtPx;\n const r1y = cy - nxtPy;\n\n if (r1x === 0)\n {\n if (r1y > 0)\n {\n angleDiff = -angleDiff;\n }\n }\n else if (r1x >= -curves.epsilon)\n {\n angleDiff = -angleDiff;\n }\n }*/\n\n const radius = Math.sqrt((cx2p0x * cx2p0x) + (cy2p0y * cy2p0y));\n const segCount = ((15 * absAngleDiff * Math.sqrt(radius) / Math.PI) >> 0) + 1;\n const angleInc = angleDiff / segCount;\n\n startAngle += angleInc;\n\n if (clockwise)\n {\n verts.push(\n cx, cy,\n sx, sy);\n\n for (let i = 1, angle = startAngle; i < segCount; i++, angle += angleInc)\n {\n verts.push(\n cx, cy,\n cx + ((Math.sin(angle) * radius)), cy + ((Math.cos(angle) * radius)));\n }\n\n verts.push(\n cx, cy,\n ex, ey);\n }\n else\n {\n verts.push(\n sx, sy,\n cx, cy);\n\n for (let i = 1, angle = startAngle; i < segCount; i++, angle += angleInc)\n {\n verts.push(\n cx + ((Math.sin(angle) * radius)), cy + ((Math.cos(angle) * radius)),\n cx, cy);\n }\n\n verts.push(\n ex, ey,\n cx, cy);\n }\n\n return segCount * 2;\n}\n\n/**\n * Builds a line to draw using the polygon method.\n *\n * Ignored from docs since it is not directly exposed.\n * @ignore\n * @private\n * @param {PIXI.GraphicsData} graphicsData - The graphics object containing all the necessary properties\n * @param {PIXI.GraphicsGeometry} graphicsGeometry - Geometry where to append output\n */\nfunction buildNonNativeLine(graphicsData: GraphicsData, graphicsGeometry: GraphicsGeometry): void\n{\n const shape = graphicsData.shape as Polygon;\n let points = graphicsData.points || shape.points.slice();\n const eps = graphicsGeometry.closePointEps;\n\n if (points.length === 0)\n {\n return;\n }\n // if the line width is an odd number add 0.5 to align to a whole pixel\n // commenting this out fixes #711 and #1620\n // if (graphicsData.lineWidth%2)\n // {\n // for (i = 0; i < points.length; i++)\n // {\n // points[i] += 0.5;\n // }\n // }\n\n const style = graphicsData.lineStyle;\n\n // get first and last point.. figure out the middle!\n const firstPoint = new Point(points[0], points[1]);\n const lastPoint = new Point(points[points.length - 2], points[points.length - 1]);\n const closedShape = shape.type !== SHAPES.POLY || shape.closeStroke;\n const closedPath = Math.abs(firstPoint.x - lastPoint.x) < eps\n && Math.abs(firstPoint.y - lastPoint.y) < eps;\n\n // if the first point is the last point - gonna have issues :)\n if (closedShape)\n {\n // need to clone as we are going to slightly modify the shape..\n points = points.slice();\n\n if (closedPath)\n {\n points.pop();\n points.pop();\n lastPoint.set(points[points.length - 2], points[points.length - 1]);\n }\n\n const midPointX = (firstPoint.x + lastPoint.x) * 0.5;\n const midPointY = (lastPoint.y + firstPoint.y) * 0.5;\n\n points.unshift(midPointX, midPointY);\n points.push(midPointX, midPointY);\n }\n\n const verts = graphicsGeometry.points;\n const length = points.length / 2;\n let indexCount = points.length;\n const indexStart = verts.length / 2;\n\n // Max. inner and outer width\n const width = style.width / 2;\n const widthSquared = width * width;\n const miterLimitSquared = style.miterLimit * style.miterLimit;\n\n /* Line segments of interest where (x1,y1) forms the corner. */\n let x0 = points[0];\n let y0 = points[1];\n let x1 = points[2];\n let y1 = points[3];\n let x2 = 0;\n let y2 = 0;\n\n /* perp[?](x|y) = the line normal with magnitude lineWidth. */\n let perpx = -(y0 - y1);\n let perpy = x0 - x1;\n let perp1x = 0;\n let perp1y = 0;\n\n let dist = Math.sqrt((perpx * perpx) + (perpy * perpy));\n\n perpx /= dist;\n perpy /= dist;\n perpx *= width;\n perpy *= width;\n\n const ratio = style.alignment;// 0.5;\n const innerWeight = (1 - ratio) * 2;\n const outerWeight = ratio * 2;\n\n if (!closedShape)\n {\n if (style.cap === LINE_CAP.ROUND)\n {\n indexCount += round(\n x0 - (perpx * (innerWeight - outerWeight) * 0.5),\n y0 - (perpy * (innerWeight - outerWeight) * 0.5),\n x0 - (perpx * innerWeight),\n y0 - (perpy * innerWeight),\n x0 + (perpx * outerWeight),\n y0 + (perpy * outerWeight),\n verts,\n true,\n ) + 2;\n }\n else if (style.cap === LINE_CAP.SQUARE)\n {\n indexCount += square(x0, y0, perpx, perpy, innerWeight, outerWeight, true, verts);\n }\n }\n\n // Push first point (below & above vertices)\n verts.push(\n x0 - (perpx * innerWeight), y0 - (perpy * innerWeight),\n x0 + (perpx * outerWeight), y0 + (perpy * outerWeight));\n\n for (let i = 1; i < length - 1; ++i)\n {\n x0 = points[(i - 1) * 2];\n y0 = points[((i - 1) * 2) + 1];\n\n x1 = points[i * 2];\n y1 = points[(i * 2) + 1];\n\n x2 = points[(i + 1) * 2];\n y2 = points[((i + 1) * 2) + 1];\n\n perpx = -(y0 - y1);\n perpy = x0 - x1;\n\n dist = Math.sqrt((perpx * perpx) + (perpy * perpy));\n perpx /= dist;\n perpy /= dist;\n perpx *= width;\n perpy *= width;\n\n perp1x = -(y1 - y2);\n perp1y = x1 - x2;\n\n dist = Math.sqrt((perp1x * perp1x) + (perp1y * perp1y));\n perp1x /= dist;\n perp1y /= dist;\n perp1x *= width;\n perp1y *= width;\n\n /* d[x|y](0|1) = the component displacement between points p(0,1|1,2) */\n const dx0 = x1 - x0;\n const dy0 = y0 - y1;\n const dx1 = x1 - x2;\n const dy1 = y2 - y1;\n\n /* +ve if internal angle < 90 degree, -ve if internal angle > 90 degree. */\n const dot = (dx0 * dx1) + (dy0 * dy1);\n /* +ve if internal angle counterclockwise, -ve if internal angle clockwise. */\n const cross = (dy0 * dx1) - (dy1 * dx0);\n const clockwise = (cross < 0);\n\n /* Going nearly parallel? */\n /* atan(0.001) ~= 0.001 rad ~= 0.057 degree */\n if (Math.abs(cross) < 0.001 * Math.abs(dot))\n {\n verts.push(\n x1 - (perpx * innerWeight), y1 - (perpy * innerWeight),\n x1 + (perpx * outerWeight), y1 + (perpy * outerWeight));\n\n /* 180 degree corner? */\n if (dot >= 0)\n {\n if (style.join === LINE_JOIN.ROUND)\n {\n indexCount += round(\n x1, y1,\n x1 - (perpx * innerWeight), y1 - (perpy * innerWeight),\n x1 - (perp1x * innerWeight), y1 - (perp1y * innerWeight),\n verts, false) + 4;\n }\n else\n {\n indexCount += 2;\n }\n\n verts.push(\n x1 - (perp1x * outerWeight), y1 - (perp1y * outerWeight),\n x1 + (perp1x * innerWeight), y1 + (perp1y * innerWeight));\n }\n\n continue;\n }\n\n /* p[x|y] is the miter point. pdist is the distance between miter point and p1. */\n const c1 = ((-perpx + x0) * (-perpy + y1)) - ((-perpx + x1) * (-perpy + y0));\n const c2 = ((-perp1x + x2) * (-perp1y + y1)) - ((-perp1x + x1) * (-perp1y + y2));\n const px = ((dx0 * c2) - (dx1 * c1)) / cross;\n const py = ((dy1 * c1) - (dy0 * c2)) / cross;\n const pdist = ((px - x1) * (px - x1)) + ((py - y1) * (py - y1));\n\n /* Inner miter point */\n const imx = x1 + ((px - x1) * innerWeight);\n const imy = y1 + ((py - y1) * innerWeight);\n /* Outer miter point */\n const omx = x1 - ((px - x1) * outerWeight);\n const omy = y1 - ((py - y1) * outerWeight);\n\n /* Is the inside miter point too far away, creating a spike? */\n const smallerInsideSegmentSq = Math.min((dx0 * dx0) + (dy0 * dy0), (dx1 * dx1) + (dy1 * dy1));\n const insideWeight = clockwise ? innerWeight : outerWeight;\n const smallerInsideDiagonalSq = smallerInsideSegmentSq + (insideWeight * insideWeight * widthSquared);\n const insideMiterOk = pdist <= smallerInsideDiagonalSq;\n\n let join = style.join;\n\n if (join === LINE_JOIN.MITER && pdist / widthSquared > miterLimitSquared)\n {\n join = LINE_JOIN.BEVEL;\n }\n\n if (insideMiterOk)\n {\n switch (join)\n {\n case LINE_JOIN.MITER:\n {\n verts.push(\n imx, imy,\n omx, omy);\n break;\n }\n case LINE_JOIN.BEVEL:\n {\n if (clockwise) /* rotating at inner angle */\n {\n verts.push(\n imx, imy, // inner miter point\n x1 + (perpx * outerWeight), y1 + (perpy * outerWeight), // first segment's outer vertex\n imx, imy, // inner miter point\n x1 + (perp1x * outerWeight), y1 + (perp1y * outerWeight)); // second segment's outer vertex\n }\n else /* rotating at outer angle */\n {\n verts.push(\n x1 - (perpx * innerWeight), y1 - (perpy * innerWeight), // first segment's inner vertex\n omx, omy, // outer miter point\n x1 - (perp1x * innerWeight), y1 - (perp1y * innerWeight), // second segment's outer vertex\n omx, omy); // outer miter point\n }\n\n indexCount += 2;\n break;\n }\n case LINE_JOIN.ROUND:\n {\n if (clockwise) /* arc is outside */\n {\n verts.push(\n imx, imy,\n x1 + (perpx * outerWeight), y1 + (perpy * outerWeight));\n\n indexCount += round(\n x1, y1,\n x1 + (perpx * outerWeight), y1 + (perpy * outerWeight),\n x1 + (perp1x * outerWeight), y1 + (perp1y * outerWeight),\n verts, true\n ) + 4;\n\n verts.push(\n imx, imy,\n x1 + (perp1x * outerWeight), y1 + (perp1y * outerWeight));\n }\n else /* arc is inside */\n {\n verts.push(\n x1 - (perpx * innerWeight), y1 - (perpy * innerWeight),\n omx, omy);\n\n indexCount += round(\n x1, y1,\n x1 - (perpx * innerWeight), y1 - (perpy * innerWeight),\n x1 - (perp1x * innerWeight), y1 - (perp1y * innerWeight),\n verts, false\n ) + 4;\n\n verts.push(\n x1 - (perp1x * innerWeight), y1 - (perp1y * innerWeight),\n omx, omy);\n }\n break;\n }\n }\n }\n else // inside miter is NOT ok\n {\n verts.push(\n x1 - (perpx * innerWeight), y1 - (perpy * innerWeight), // first segment's inner vertex\n x1 + (perpx * outerWeight), y1 + (perpy * outerWeight)); // first segment's outer vertex\n switch (join)\n {\n case LINE_JOIN.MITER:\n {\n if (clockwise)\n {\n verts.push(\n omx, omy, // inner miter point\n omx, omy); // inner miter point\n }\n else\n {\n verts.push(\n imx, imy, // outer miter point\n imx, imy); // outer miter point\n }\n indexCount += 2;\n break;\n }\n case LINE_JOIN.ROUND:\n {\n if (clockwise) /* arc is outside */\n {\n indexCount += round(\n x1, y1,\n x1 + (perpx * outerWeight), y1 + (perpy * outerWeight),\n x1 + (perp1x * outerWeight), y1 + (perp1y * outerWeight),\n verts, true\n ) + 2;\n }\n else /* arc is inside */\n {\n indexCount += round(\n x1, y1,\n x1 - (perpx * innerWeight), y1 - (perpy * innerWeight),\n x1 - (perp1x * innerWeight), y1 - (perp1y * innerWeight),\n verts, false\n ) + 2;\n }\n break;\n }\n }\n verts.push(\n x1 - (perp1x * innerWeight), y1 - (perp1y * innerWeight), // second segment's inner vertex\n x1 + (perp1x * outerWeight), y1 + (perp1y * outerWeight)); // second segment's outer vertex\n indexCount += 2;\n }\n }\n\n x0 = points[(length - 2) * 2];\n y0 = points[((length - 2) * 2) + 1];\n\n x1 = points[(length - 1) * 2];\n y1 = points[((length - 1) * 2) + 1];\n\n perpx = -(y0 - y1);\n perpy = x0 - x1;\n\n dist = Math.sqrt((perpx * perpx) + (perpy * perpy));\n perpx /= dist;\n perpy /= dist;\n perpx *= width;\n perpy *= width;\n\n verts.push(\n x1 - (perpx * innerWeight), y1 - (perpy * innerWeight),\n x1 + (perpx * outerWeight), y1 + (perpy * outerWeight));\n\n if (!closedShape)\n {\n if (style.cap === LINE_CAP.ROUND)\n {\n indexCount += round(\n x1 - (perpx * (innerWeight - outerWeight) * 0.5),\n y1 - (perpy * (innerWeight - outerWeight) * 0.5),\n x1 - (perpx * innerWeight),\n y1 - (perpy * innerWeight),\n x1 + (perpx * outerWeight),\n y1 + (perpy * outerWeight),\n verts,\n false\n ) + 2;\n }\n else if (style.cap === LINE_CAP.SQUARE)\n {\n indexCount += square(x1, y1, perpx, perpy, innerWeight, outerWeight, false, verts);\n }\n }\n\n const indices = graphicsGeometry.indices;\n const eps2 = curves.epsilon * curves.epsilon;\n\n // indices.push(indexStart);\n for (let i = indexStart; i < indexCount + indexStart - 2; ++i)\n {\n x0 = verts[(i * 2)];\n y0 = verts[(i * 2) + 1];\n\n x1 = verts[(i + 1) * 2];\n y1 = verts[((i + 1) * 2) + 1];\n\n x2 = verts[(i + 2) * 2];\n y2 = verts[((i + 2) * 2) + 1];\n\n /* Skip zero area triangles */\n if (Math.abs((x0 * (y1 - y2)) + (x1 * (y2 - y0)) + (x2 * (y0 - y1))) < eps2)\n {\n continue;\n }\n\n indices.push(i, i + 1, i + 2);\n }\n}\n\n/**\n * Builds a line to draw using the gl.drawArrays(gl.LINES) method\n *\n * Ignored from docs since it is not directly exposed.\n * @ignore\n * @private\n * @param {PIXI.GraphicsData} graphicsData - The graphics object containing all the necessary properties\n * @param {PIXI.GraphicsGeometry} graphicsGeometry - Geometry where to append output\n */\nfunction buildNativeLine(graphicsData: GraphicsData, graphicsGeometry: GraphicsGeometry): void\n{\n let i = 0;\n\n const shape = graphicsData.shape as Polygon;\n const points = graphicsData.points || shape.points;\n const closedShape = shape.type !== SHAPES.POLY || shape.closeStroke;\n\n if (points.length === 0) return;\n\n const verts = graphicsGeometry.points;\n const indices = graphicsGeometry.indices;\n const length = points.length / 2;\n\n const startIndex = verts.length / 2;\n let currentIndex = startIndex;\n\n verts.push(points[0], points[1]);\n\n for (i = 1; i < length; i++)\n {\n verts.push(points[i * 2], points[(i * 2) + 1]);\n indices.push(currentIndex, currentIndex + 1);\n\n currentIndex++;\n }\n\n if (closedShape)\n {\n indices.push(currentIndex, startIndex);\n }\n}\n\n/**\n * Builds a line to draw\n *\n * Ignored from docs since it is not directly exposed.\n * @ignore\n * @private\n * @param {PIXI.GraphicsData} graphicsData - The graphics object containing all the necessary properties\n * @param {PIXI.GraphicsGeometry} graphicsGeometry - Geometry where to append output\n */\nexport function buildLine(graphicsData: GraphicsData, graphicsGeometry: GraphicsGeometry): void\n{\n if (graphicsData.lineStyle.native)\n {\n buildNativeLine(graphicsData, graphicsGeometry);\n }\n else\n {\n buildNonNativeLine(graphicsData, graphicsGeometry);\n }\n}\n","import { curves } from '../const';\n\n/**\n * Utilities for quadratic curves.\n * @private\n */\nexport class QuadraticUtils\n{\n /**\n * Calculate length of quadratic curve\n * @see {@link http://www.malczak.linuxpl.com/blog/quadratic-bezier-curve-length/}\n * for the detailed explanation of math behind this.\n * @private\n * @param fromX - x-coordinate of curve start point\n * @param fromY - y-coordinate of curve start point\n * @param cpX - x-coordinate of curve control point\n * @param cpY - y-coordinate of curve control point\n * @param toX - x-coordinate of curve end point\n * @param toY - y-coordinate of curve end point\n * @returns - Length of quadratic curve\n */\n static curveLength(\n fromX: number, fromY: number,\n cpX: number, cpY: number,\n toX: number, toY: number): number\n {\n const ax = fromX - (2.0 * cpX) + toX;\n const ay = fromY - (2.0 * cpY) + toY;\n const bx = (2.0 * cpX) - (2.0 * fromX);\n const by = (2.0 * cpY) - (2.0 * fromY);\n const a = 4.0 * ((ax * ax) + (ay * ay));\n const b = 4.0 * ((ax * bx) + (ay * by));\n const c = (bx * bx) + (by * by);\n\n const s = 2.0 * Math.sqrt(a + b + c);\n const a2 = Math.sqrt(a);\n const a32 = 2.0 * a * a2;\n const c2 = 2.0 * Math.sqrt(c);\n const ba = b / a2;\n\n return (\n (a32 * s)\n + (a2 * b * (s - c2))\n + (\n ((4.0 * c * a) - (b * b))\n * Math.log(((2.0 * a2) + ba + s) / (ba + c2))\n )\n ) / (4.0 * a32);\n }\n\n /**\n * Calculate the points for a quadratic bezier curve and then draws it.\n * Based on: https://stackoverflow.com/questions/785097/how-do-i-implement-a-bezier-curve-in-c\n * @private\n * @param cpX - Control point x\n * @param cpY - Control point y\n * @param toX - Destination point x\n * @param toY - Destination point y\n * @param points - Points to add segments to.\n */\n static curveTo(cpX: number, cpY: number, toX: number, toY: number, points: Array): void\n {\n const fromX = points[points.length - 2];\n const fromY = points[points.length - 1];\n\n const n = curves._segmentsCount(\n QuadraticUtils.curveLength(fromX, fromY, cpX, cpY, toX, toY)\n );\n\n let xa = 0;\n let ya = 0;\n\n for (let i = 1; i <= n; ++i)\n {\n const j = i / n;\n\n xa = fromX + ((cpX - fromX) * j);\n ya = fromY + ((cpY - fromY) * j);\n\n points.push(xa + (((cpX + ((toX - cpX) * j)) - xa) * j),\n ya + (((cpY + ((toY - cpY) * j)) - ya) * j));\n }\n }\n}\n","/**\n * Generalized convenience utilities for Graphics.\n * @namespace graphicsUtils\n * @memberof PIXI\n */\n\n// for type only\nimport { SHAPES } from '@pixi/core';\nimport { buildCircle } from './buildCircle';\nimport { buildPoly } from './buildPoly';\nimport { buildRectangle } from './buildRectangle';\nimport { buildRoundedRectangle } from './buildRoundedRectangle';\n\nimport type { BatchDrawCall } from '@pixi/core';\nimport type { BatchPart } from './BatchPart';\nimport type { IShapeBuildCommand } from './IShapeBuildCommand';\n\nexport * from './ArcUtils';\nexport * from './BatchPart';\nexport * from './BezierUtils';\nexport * from './buildCircle';\nexport * from './buildLine';\nexport * from './buildPoly';\nexport * from './buildRectangle';\nexport * from './buildRoundedRectangle';\nexport * from './QuadraticUtils';\n\n/**\n * Map of fill commands for each shape type.\n * @memberof PIXI.graphicsUtils\n * @member {object} FILL_COMMANDS\n */\nexport const FILL_COMMANDS: Record = {\n [SHAPES.POLY]: buildPoly,\n [SHAPES.CIRC]: buildCircle,\n [SHAPES.ELIP]: buildCircle,\n [SHAPES.RECT]: buildRectangle,\n [SHAPES.RREC]: buildRoundedRectangle,\n};\n\n/**\n * Batch pool, stores unused batches for preventing allocations.\n * @memberof PIXI.graphicsUtils\n * @member {Array} BATCH_POOL\n */\nexport const BATCH_POOL: Array = [];\n\n/**\n * Draw call pool, stores unused draw calls for preventing allocations.\n * @memberof PIXI.graphicsUtils\n * @member {Array} DRAW_CALL_POOL\n */\nexport const DRAW_CALL_POOL: Array = [];\n","import type { IShape, Matrix, SHAPES } from '@pixi/core';\nimport type { FillStyle } from './styles/FillStyle';\nimport type { LineStyle } from './styles/LineStyle';\n\n/**\n * A class to contain data useful for Graphics objects\n * @memberof PIXI\n */\nexport class GraphicsData\n{\n /**\n * The shape object to draw.\n * @member {PIXI.Circle|PIXI.Ellipse|PIXI.Polygon|PIXI.Rectangle|PIXI.RoundedRectangle}\n */\n shape: IShape;\n\n /** The style of the line. */\n lineStyle: LineStyle;\n\n /** The style of the fill. */\n fillStyle: FillStyle;\n\n /** The transform matrix. */\n matrix: Matrix;\n\n /** The type of the shape, see the Const.Shapes file for all the existing types, */\n type: SHAPES;\n\n /** The collection of points. */\n points: number[] = [];\n\n /** The collection of holes. */\n\n holes: Array = [];\n\n /**\n * @param {PIXI.Circle|PIXI.Ellipse|PIXI.Polygon|PIXI.Rectangle|PIXI.RoundedRectangle} shape - The shape object to draw.\n * @param fillStyle - the width of the line to draw\n * @param lineStyle - the color of the line to draw\n * @param matrix - Transform matrix\n */\n constructor(shape: IShape, fillStyle: FillStyle = null, lineStyle: LineStyle = null, matrix: Matrix = null)\n {\n this.shape = shape;\n this.lineStyle = lineStyle;\n this.fillStyle = fillStyle;\n this.matrix = matrix;\n this.type = shape.type;\n }\n\n /**\n * Creates a new GraphicsData object with the same values as this one.\n * @returns - Cloned GraphicsData object\n */\n public clone(): GraphicsData\n {\n return new GraphicsData(\n this.shape,\n this.fillStyle,\n this.lineStyle,\n this.matrix\n );\n }\n\n /** Destroys the Graphics data. */\n public destroy(): void\n {\n this.shape = null;\n this.holes.length = 0;\n this.holes = null;\n this.points.length = 0;\n this.points = null;\n this.lineStyle = null;\n this.fillStyle = null;\n }\n}\n","import type { FillStyle } from '../styles/FillStyle';\nimport type { LineStyle } from '../styles/LineStyle';\n\n/**\n * A structure to hold interim batch objects for Graphics.\n * @memberof PIXI.graphicsUtils\n */\nexport class BatchPart\n{\n public style: LineStyle | FillStyle;\n public start: number;\n public size: number;\n public attribStart: number;\n public attribSize: number;\n\n constructor()\n {\n this.reset();\n }\n\n /**\n * Begin batch part.\n * @param style\n * @param startIndex\n * @param attribStart\n */\n public begin(style: LineStyle | FillStyle, startIndex: number, attribStart: number): void\n {\n this.reset();\n this.style = style;\n this.start = startIndex;\n this.attribStart = attribStart;\n }\n\n /**\n * End batch part.\n * @param endIndex\n * @param endAttrib\n */\n public end(endIndex: number, endAttrib: number): void\n {\n this.attribSize = endAttrib - this.attribStart;\n this.size = endIndex - this.start;\n }\n\n public reset(): void\n {\n this.style = null;\n this.size = 0;\n this.start = 0;\n this.attribStart = 0;\n this.attribSize = 0;\n }\n}\n","import {\n BaseTexture,\n BatchDrawCall,\n BatchGeometry,\n BatchTextureArray,\n Color,\n DRAW_MODES,\n Point,\n WRAP_MODES\n} from '@pixi/core';\nimport { Bounds } from '@pixi/display';\nimport { GraphicsData } from './GraphicsData';\nimport {\n BATCH_POOL, BatchPart, buildLine,\n buildPoly,\n DRAW_CALL_POOL,\n FILL_COMMANDS\n} from './utils';\n\nimport type { IPointData, IShape, Matrix, Texture } from '@pixi/core';\nimport type { FillStyle } from './styles/FillStyle';\nimport type { LineStyle } from './styles/LineStyle';\n\nconst tmpPoint = new Point();\n\n/**\n * The Graphics class contains methods used to draw primitive shapes such as lines, circles and\n * rectangles to the display, and to color and fill them.\n *\n * GraphicsGeometry is designed to not be continually updating the geometry since it's expensive\n * to re-tesselate using **earcut**. Consider using {@link PIXI.Mesh} for this use-case, it's much faster.\n * @memberof PIXI\n */\nexport class GraphicsGeometry extends BatchGeometry\n{\n /** The maximum number of points to consider an object \"batchable\", able to be batched by the renderer's batch system. */\n public static BATCHABLE_SIZE = 100;\n\n /** Minimal distance between points that are considered different. Affects line tesselation. */\n public closePointEps = 1e-4;\n\n /** Padding to add to the bounds. */\n public boundsPadding = 0;\n\n uvsFloat32: Float32Array = null;\n indicesUint16: Uint16Array | Uint32Array = null;\n batchable = false;\n\n /** An array of points to draw, 2 numbers per point */\n points: number[] = [];\n\n /** The collection of colors */\n colors: number[] = [];\n\n /** The UVs collection */\n uvs: number[] = [];\n\n /** The indices of the vertices */\n indices: number[] = [];\n\n /** Reference to the texture IDs. */\n textureIds: number[] = [];\n\n /**\n * The collection of drawn shapes.\n * @member {PIXI.GraphicsData[]}\n */\n graphicsData: Array = [];\n\n /**\n * List of current draw calls drived from the batches.\n * @member {PIXI.BatchDrawCall[]}\n */\n drawCalls: Array = [];\n\n /** Batches need to regenerated if the geometry is updated. */\n batchDirty = -1;\n\n /**\n * Intermediate abstract format sent to batch system.\n * Can be converted to drawCalls or to batchable objects.\n * @member {PIXI.graphicsUtils.BatchPart[]}\n */\n batches: Array = [];\n\n /** Used to detect if the graphics object has changed. */\n protected dirty = 0;\n\n /** Used to check if the cache is dirty. */\n protected cacheDirty = -1;\n\n /** Used to detect if we cleared the graphicsData. */\n protected clearDirty = 0;\n\n /** Index of the last batched shape in the stack of calls. */\n protected shapeIndex = 0;\n\n /** Cached bounds. */\n protected _bounds: Bounds = new Bounds();\n\n /** The bounds dirty flag. */\n protected boundsDirty = -1;\n\n // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n constructor()\n {\n super();\n }\n\n /**\n * Get the current bounds of the graphic geometry.\n *\n * Since 6.5.0, bounds of the graphics geometry are calculated based on the vertices of generated geometry.\n * Since shapes or strokes with full transparency (`alpha: 0`) will not generate geometry, they are not considered\n * when calculating bounds for the graphics geometry. See PR [#8343]{@link https://github.com/pixijs/pixijs/pull/8343}\n * and issue [#8623]{@link https://github.com/pixijs/pixijs/pull/8623}.\n * @readonly\n */\n public get bounds(): Bounds\n {\n this.updateBatches();\n\n if (this.boundsDirty !== this.dirty)\n {\n this.boundsDirty = this.dirty;\n this.calculateBounds();\n }\n\n return this._bounds;\n }\n\n /** Call if you changed graphicsData manually. Empties all batch buffers. */\n protected invalidate(): void\n {\n this.boundsDirty = -1;\n this.dirty++;\n this.batchDirty++;\n this.shapeIndex = 0;\n\n this.points.length = 0;\n this.colors.length = 0;\n this.uvs.length = 0;\n this.indices.length = 0;\n this.textureIds.length = 0;\n\n for (let i = 0; i < this.drawCalls.length; i++)\n {\n this.drawCalls[i].texArray.clear();\n DRAW_CALL_POOL.push(this.drawCalls[i]);\n }\n\n this.drawCalls.length = 0;\n\n for (let i = 0; i < this.batches.length; i++)\n {\n const batchPart = this.batches[i];\n\n batchPart.reset();\n BATCH_POOL.push(batchPart);\n }\n\n this.batches.length = 0;\n }\n\n /**\n * Clears the graphics that were drawn to this Graphics object, and resets fill and line style settings.\n * @returns - This GraphicsGeometry object. Good for chaining method calls\n */\n public clear(): GraphicsGeometry\n {\n if (this.graphicsData.length > 0)\n {\n this.invalidate();\n this.clearDirty++;\n this.graphicsData.length = 0;\n }\n\n return this;\n }\n\n /**\n * Draws the given shape to this Graphics object. Can be any of Circle, Rectangle, Ellipse, Line or Polygon.\n * @param {PIXI.Circle|PIXI.Ellipse|PIXI.Polygon|PIXI.Rectangle|PIXI.RoundedRectangle} shape - The shape object to draw.\n * @param fillStyle - Defines style of the fill.\n * @param lineStyle - Defines style of the lines.\n * @param matrix - Transform applied to the points of the shape.\n * @returns - Returns geometry for chaining.\n */\n public drawShape(\n shape: IShape,\n fillStyle: FillStyle = null,\n lineStyle: LineStyle = null,\n matrix: Matrix = null): GraphicsGeometry\n {\n const data = new GraphicsData(shape, fillStyle, lineStyle, matrix);\n\n this.graphicsData.push(data);\n this.dirty++;\n\n return this;\n }\n\n /**\n * Draws the given shape to this Graphics object. Can be any of Circle, Rectangle, Ellipse, Line or Polygon.\n * @param {PIXI.Circle|PIXI.Ellipse|PIXI.Polygon|PIXI.Rectangle|PIXI.RoundedRectangle} shape - The shape object to draw.\n * @param matrix - Transform applied to the points of the shape.\n * @returns - Returns geometry for chaining.\n */\n public drawHole(shape: IShape, matrix: Matrix = null): GraphicsGeometry\n {\n if (!this.graphicsData.length)\n {\n return null;\n }\n\n const data = new GraphicsData(shape, null, null, matrix);\n\n const lastShape = this.graphicsData[this.graphicsData.length - 1];\n\n data.lineStyle = lastShape.lineStyle;\n\n lastShape.holes.push(data);\n\n this.dirty++;\n\n return this;\n }\n\n /** Destroys the GraphicsGeometry object. */\n public destroy(): void\n {\n super.destroy();\n\n // destroy each of the GraphicsData objects\n for (let i = 0; i < this.graphicsData.length; ++i)\n {\n this.graphicsData[i].destroy();\n }\n\n this.points.length = 0;\n this.points = null;\n this.colors.length = 0;\n this.colors = null;\n this.uvs.length = 0;\n this.uvs = null;\n this.indices.length = 0;\n this.indices = null;\n this.indexBuffer.destroy();\n this.indexBuffer = null;\n this.graphicsData.length = 0;\n this.graphicsData = null;\n this.drawCalls.length = 0;\n this.drawCalls = null;\n this.batches.length = 0;\n this.batches = null;\n this._bounds = null;\n }\n\n /**\n * Check to see if a point is contained within this geometry.\n * @param point - Point to check if it's contained.\n * @returns {boolean} `true` if the point is contained within geometry.\n */\n public containsPoint(point: IPointData): boolean\n {\n const graphicsData = this.graphicsData;\n\n for (let i = 0; i < graphicsData.length; ++i)\n {\n const data = graphicsData[i];\n\n if (!data.fillStyle.visible)\n {\n continue;\n }\n\n // only deal with fills..\n if (data.shape)\n {\n if (data.matrix)\n {\n data.matrix.applyInverse(point, tmpPoint);\n }\n else\n {\n tmpPoint.copyFrom(point);\n }\n\n if (data.shape.contains(tmpPoint.x, tmpPoint.y))\n {\n let hitHole = false;\n\n if (data.holes)\n {\n for (let i = 0; i < data.holes.length; i++)\n {\n const hole = data.holes[i];\n\n if (hole.shape.contains(tmpPoint.x, tmpPoint.y))\n {\n hitHole = true;\n break;\n }\n }\n }\n\n if (!hitHole)\n {\n return true;\n }\n }\n }\n }\n\n return false;\n }\n\n /**\n * Generates intermediate batch data. Either gets converted to drawCalls\n * or used to convert to batch objects directly by the Graphics object.\n */\n updateBatches(): void\n {\n if (!this.graphicsData.length)\n {\n this.batchable = true;\n\n return;\n }\n\n if (!this.validateBatching())\n {\n return;\n }\n\n this.cacheDirty = this.dirty;\n\n const uvs = this.uvs;\n const graphicsData = this.graphicsData;\n\n let batchPart: BatchPart = null;\n\n let currentStyle = null;\n\n if (this.batches.length > 0)\n {\n batchPart = this.batches[this.batches.length - 1];\n currentStyle = batchPart.style;\n }\n\n for (let i = this.shapeIndex; i < graphicsData.length; i++)\n {\n this.shapeIndex++;\n\n const data = graphicsData[i];\n const fillStyle = data.fillStyle;\n const lineStyle = data.lineStyle;\n const command = FILL_COMMANDS[data.type];\n\n // build out the shapes points..\n command.build(data);\n\n if (data.matrix)\n {\n this.transformPoints(data.points, data.matrix);\n }\n\n if (fillStyle.visible || lineStyle.visible)\n {\n this.processHoles(data.holes);\n }\n\n for (let j = 0; j < 2; j++)\n {\n const style = (j === 0) ? fillStyle : lineStyle;\n\n if (!style.visible) continue;\n\n const nextTexture = style.texture.baseTexture;\n const index = this.indices.length;\n const attribIndex = this.points.length / 2;\n\n nextTexture.wrapMode = WRAP_MODES.REPEAT;\n\n if (j === 0)\n {\n this.processFill(data);\n }\n else\n {\n this.processLine(data);\n }\n\n const size = (this.points.length / 2) - attribIndex;\n\n if (size === 0) continue;\n // close batch if style is different\n if (batchPart && !this._compareStyles(currentStyle, style))\n {\n batchPart.end(index, attribIndex);\n batchPart = null;\n }\n // spawn new batch if its first batch or previous was closed\n if (!batchPart)\n {\n batchPart = BATCH_POOL.pop() || new BatchPart();\n batchPart.begin(style, index, attribIndex);\n this.batches.push(batchPart);\n currentStyle = style;\n }\n\n this.addUvs(this.points, uvs, style.texture, attribIndex, size, style.matrix);\n }\n }\n\n const index = this.indices.length;\n const attrib = this.points.length / 2;\n\n if (batchPart)\n {\n batchPart.end(index, attrib);\n }\n\n if (this.batches.length === 0)\n {\n // there are no visible styles in GraphicsData\n // its possible that someone wants Graphics just for the bounds\n this.batchable = true;\n\n return;\n }\n\n const need32 = attrib > 0xffff;\n\n // prevent allocation when length is same as buffer\n if (this.indicesUint16 && this.indices.length === this.indicesUint16.length\n && need32 === (this.indicesUint16.BYTES_PER_ELEMENT > 2))\n {\n this.indicesUint16.set(this.indices);\n }\n else\n {\n this.indicesUint16 = need32 ? new Uint32Array(this.indices) : new Uint16Array(this.indices);\n }\n\n // TODO make this a const..\n this.batchable = this.isBatchable();\n\n if (this.batchable)\n {\n this.packBatches();\n }\n else\n {\n this.buildDrawCalls();\n }\n }\n\n /**\n * Affinity check\n * @param styleA\n * @param styleB\n */\n protected _compareStyles(styleA: FillStyle | LineStyle, styleB: FillStyle | LineStyle): boolean\n {\n if (!styleA || !styleB)\n {\n return false;\n }\n\n if (styleA.texture.baseTexture !== styleB.texture.baseTexture)\n {\n return false;\n }\n\n if (styleA.color + styleA.alpha !== styleB.color + styleB.alpha)\n {\n return false;\n }\n\n if (!!(styleA as LineStyle).native !== !!(styleB as LineStyle).native)\n {\n return false;\n }\n\n return true;\n }\n\n /** Test geometry for batching process. */\n protected validateBatching(): boolean\n {\n if (this.dirty === this.cacheDirty || !this.graphicsData.length)\n {\n return false;\n }\n\n for (let i = 0, l = this.graphicsData.length; i < l; i++)\n {\n const data = this.graphicsData[i];\n const fill = data.fillStyle;\n const line = data.lineStyle;\n\n if (fill && !fill.texture.baseTexture.valid) return false;\n if (line && !line.texture.baseTexture.valid) return false;\n }\n\n return true;\n }\n\n /** Offset the indices so that it works with the batcher. */\n protected packBatches(): void\n {\n this.batchDirty++;\n this.uvsFloat32 = new Float32Array(this.uvs);\n\n const batches = this.batches;\n\n for (let i = 0, l = batches.length; i < l; i++)\n {\n const batch = batches[i];\n\n for (let j = 0; j < batch.size; j++)\n {\n const index = batch.start + j;\n\n this.indicesUint16[index] = this.indicesUint16[index] - batch.attribStart;\n }\n }\n }\n\n /**\n * Checks to see if this graphics geometry can be batched.\n * Currently it needs to be small enough and not contain any native lines.\n */\n protected isBatchable(): boolean\n {\n // prevent heavy mesh batching\n if (this.points.length > 0xffff * 2)\n {\n return false;\n }\n\n const batches = this.batches;\n\n for (let i = 0; i < batches.length; i++)\n {\n if ((batches[i].style as LineStyle).native)\n {\n return false;\n }\n }\n\n return (this.points.length < GraphicsGeometry.BATCHABLE_SIZE * 2);\n }\n\n /** Converts intermediate batches data to drawCalls. */\n protected buildDrawCalls(): void\n {\n let TICK = ++BaseTexture._globalBatch;\n\n for (let i = 0; i < this.drawCalls.length; i++)\n {\n this.drawCalls[i].texArray.clear();\n DRAW_CALL_POOL.push(this.drawCalls[i]);\n }\n\n this.drawCalls.length = 0;\n\n const colors = this.colors;\n const textureIds = this.textureIds;\n\n let currentGroup: BatchDrawCall = DRAW_CALL_POOL.pop();\n\n if (!currentGroup)\n {\n currentGroup = new BatchDrawCall();\n currentGroup.texArray = new BatchTextureArray();\n }\n currentGroup.texArray.count = 0;\n currentGroup.start = 0;\n currentGroup.size = 0;\n currentGroup.type = DRAW_MODES.TRIANGLES;\n\n let textureCount = 0;\n let currentTexture = null;\n let textureId = 0;\n let native = false;\n let drawMode = DRAW_MODES.TRIANGLES;\n\n let index = 0;\n\n this.drawCalls.push(currentGroup);\n\n // TODO - this can be simplified\n for (let i = 0; i < this.batches.length; i++)\n {\n const data = this.batches[i];\n\n // TODO add some full on MAX_TEXTURE CODE..\n const maxTextures = 8;\n\n // Forced cast for checking `native` without errors\n const style = data.style as LineStyle;\n\n const nextTexture = style.texture.baseTexture;\n\n if (native !== !!style.native)\n {\n native = !!style.native;\n drawMode = native ? DRAW_MODES.LINES : DRAW_MODES.TRIANGLES;\n\n // force the batch to break!\n currentTexture = null;\n textureCount = maxTextures;\n TICK++;\n }\n\n if (currentTexture !== nextTexture)\n {\n currentTexture = nextTexture;\n\n if (nextTexture._batchEnabled !== TICK)\n {\n if (textureCount === maxTextures)\n {\n TICK++;\n\n textureCount = 0;\n\n if (currentGroup.size > 0)\n {\n currentGroup = DRAW_CALL_POOL.pop();\n if (!currentGroup)\n {\n currentGroup = new BatchDrawCall();\n currentGroup.texArray = new BatchTextureArray();\n }\n this.drawCalls.push(currentGroup);\n }\n\n currentGroup.start = index;\n currentGroup.size = 0;\n currentGroup.texArray.count = 0;\n currentGroup.type = drawMode;\n }\n\n // TODO add this to the render part..\n // Hack! Because texture has protected `touched`\n nextTexture.touched = 1;// touch;\n\n nextTexture._batchEnabled = TICK;\n nextTexture._batchLocation = textureCount;\n nextTexture.wrapMode = WRAP_MODES.REPEAT;\n\n currentGroup.texArray.elements[currentGroup.texArray.count++] = nextTexture;\n textureCount++;\n }\n }\n\n currentGroup.size += data.size;\n index += data.size;\n\n textureId = nextTexture._batchLocation;\n\n this.addColors(colors, style.color, style.alpha, data.attribSize, data.attribStart);\n this.addTextureIds(textureIds, textureId, data.attribSize, data.attribStart);\n }\n\n BaseTexture._globalBatch = TICK;\n\n // upload..\n // merge for now!\n this.packAttributes();\n }\n\n /** Packs attributes to single buffer. */\n protected packAttributes(): void\n {\n const verts = this.points;\n const uvs = this.uvs;\n const colors = this.colors;\n const textureIds = this.textureIds;\n\n // verts are 2 positions.. so we * by 3 as there are 6 properties.. then 4 cos its bytes\n const glPoints = new ArrayBuffer(verts.length * 3 * 4);\n const f32 = new Float32Array(glPoints);\n const u32 = new Uint32Array(glPoints);\n\n let p = 0;\n\n for (let i = 0; i < verts.length / 2; i++)\n {\n f32[p++] = verts[i * 2];\n f32[p++] = verts[(i * 2) + 1];\n\n f32[p++] = uvs[i * 2];\n f32[p++] = uvs[(i * 2) + 1];\n\n u32[p++] = colors[i];\n\n f32[p++] = textureIds[i];\n }\n\n this._buffer.update(glPoints);\n this._indexBuffer.update(this.indicesUint16);\n }\n\n /**\n * Process fill part of Graphics.\n * @param data\n */\n protected processFill(data: GraphicsData): void\n {\n if (data.holes.length)\n {\n buildPoly.triangulate(data, this);\n }\n else\n {\n const command = FILL_COMMANDS[data.type];\n\n command.triangulate(data, this);\n }\n }\n\n /**\n * Process line part of Graphics.\n * @param data\n */\n protected processLine(data: GraphicsData): void\n {\n buildLine(data, this);\n\n for (let i = 0; i < data.holes.length; i++)\n {\n buildLine(data.holes[i], this);\n }\n }\n\n /**\n * Process the holes data.\n * @param holes\n */\n protected processHoles(holes: Array): void\n {\n for (let i = 0; i < holes.length; i++)\n {\n const hole = holes[i];\n const command = FILL_COMMANDS[hole.type];\n\n command.build(hole);\n\n if (hole.matrix)\n {\n this.transformPoints(hole.points, hole.matrix);\n }\n }\n }\n\n /** Update the local bounds of the object. Expensive to use performance-wise. */\n protected calculateBounds(): void\n {\n const bounds = this._bounds;\n\n bounds.clear();\n bounds.addVertexData((this.points as any), 0, this.points.length);\n bounds.pad(this.boundsPadding, this.boundsPadding);\n }\n\n /**\n * Transform points using matrix.\n * @param points - Points to transform\n * @param matrix - Transform matrix\n */\n protected transformPoints(points: Array, matrix: Matrix): void\n {\n for (let i = 0; i < points.length / 2; i++)\n {\n const x = points[(i * 2)];\n const y = points[(i * 2) + 1];\n\n points[(i * 2)] = (matrix.a * x) + (matrix.c * y) + matrix.tx;\n points[(i * 2) + 1] = (matrix.b * x) + (matrix.d * y) + matrix.ty;\n }\n }\n\n /**\n * Add colors.\n * @param colors - List of colors to add to\n * @param color - Color to add\n * @param alpha - Alpha to use\n * @param size - Number of colors to add\n * @param offset\n */\n protected addColors(\n colors: Array,\n color: number,\n alpha: number,\n size: number,\n offset = 0): void\n {\n const bgr = Color.shared\n .setValue(color)\n .toLittleEndianNumber();\n\n const result = Color.shared\n .setValue(bgr)\n .toPremultiplied(alpha);\n\n colors.length = Math.max(colors.length, offset + size);\n\n for (let i = 0; i < size; i++)\n {\n colors[offset + i] = result;\n }\n }\n\n /**\n * Add texture id that the shader/fragment wants to use.\n * @param textureIds\n * @param id\n * @param size\n * @param offset\n */\n protected addTextureIds(\n textureIds: Array,\n id: number,\n size: number,\n offset = 0): void\n {\n textureIds.length = Math.max(textureIds.length, offset + size);\n\n for (let i = 0; i < size; i++)\n {\n textureIds[offset + i] = id;\n }\n }\n\n /**\n * Generates the UVs for a shape.\n * @param verts - Vertices\n * @param uvs - UVs\n * @param texture - Reference to Texture\n * @param start - Index buffer start index.\n * @param size - The size/length for index buffer.\n * @param matrix - Optional transform for all points.\n */\n protected addUvs(\n verts: Array,\n uvs: Array,\n texture: Texture,\n start: number,\n size: number,\n matrix: Matrix = null): void\n {\n let index = 0;\n const uvsStart = uvs.length;\n const frame = texture.frame;\n\n while (index < size)\n {\n let x = verts[(start + index) * 2];\n let y = verts[((start + index) * 2) + 1];\n\n if (matrix)\n {\n const nx = (matrix.a * x) + (matrix.c * y) + matrix.tx;\n\n y = (matrix.b * x) + (matrix.d * y) + matrix.ty;\n x = nx;\n }\n\n index++;\n\n uvs.push(x / frame.width, y / frame.height);\n }\n\n const baseTexture = texture.baseTexture;\n\n if (frame.width < baseTexture.width\n || frame.height < baseTexture.height)\n {\n this.adjustUvs(uvs, texture, uvsStart, size);\n }\n }\n\n /**\n * Modify uvs array according to position of texture region\n * Does not work with rotated or trimmed textures\n * @param uvs - array\n * @param texture - region\n * @param start - starting index for uvs\n * @param size - how many points to adjust\n */\n protected adjustUvs(uvs: Array, texture: Texture, start: number, size: number): void\n {\n const baseTexture = texture.baseTexture;\n const eps = 1e-6;\n const finish = start + (size * 2);\n const frame = texture.frame;\n const scaleX = frame.width / baseTexture.width;\n const scaleY = frame.height / baseTexture.height;\n let offsetX = frame.x / frame.width;\n let offsetY = frame.y / frame.height;\n let minX = Math.floor(uvs[start] + eps);\n let minY = Math.floor(uvs[start + 1] + eps);\n\n for (let i = start + 2; i < finish; i += 2)\n {\n minX = Math.min(minX, Math.floor(uvs[i] + eps));\n minY = Math.min(minY, Math.floor(uvs[i + 1] + eps));\n }\n offsetX -= minX;\n offsetY -= minY;\n for (let i = start; i < finish; i += 2)\n {\n uvs[i] = (uvs[i] + offsetX) * scaleX;\n uvs[i + 1] = (uvs[i + 1] + offsetY) * scaleY;\n }\n }\n}\n","import { Texture } from '@pixi/core';\n\nimport type { Matrix } from '@pixi/core';\n\n/**\n * Fill style object for Graphics.\n * @memberof PIXI\n */\nexport class FillStyle\n{\n /**\n * The hex color value used when coloring the Graphics object.\n * @default 0xFFFFFF\n */\n public color = 0xFFFFFF;\n\n /** The alpha value used when filling the Graphics object. */\n public alpha = 1.0;\n\n /**\n * The texture to be used for the fill.\n * @default 0\n */\n public texture: Texture = Texture.WHITE;\n\n /**\n * The transform applied to the texture.\n * @default null\n */\n public matrix: Matrix = null;\n\n /** If the current fill is visible. */\n public visible = false;\n\n constructor()\n {\n this.reset();\n }\n\n /** Clones the object */\n public clone(): FillStyle\n {\n const obj = new FillStyle();\n\n obj.color = this.color;\n obj.alpha = this.alpha;\n obj.texture = this.texture;\n obj.matrix = this.matrix;\n obj.visible = this.visible;\n\n return obj;\n }\n\n /** Reset */\n public reset(): void\n {\n this.color = 0xFFFFFF;\n this.alpha = 1;\n this.texture = Texture.WHITE;\n this.matrix = null;\n this.visible = false;\n }\n\n /** Destroy and don't use after this. */\n public destroy(): void\n {\n this.texture = null;\n this.matrix = null;\n }\n}\n","import { LINE_CAP, LINE_JOIN } from '../const';\nimport { FillStyle } from './FillStyle';\n\n/**\n * Represents the line style for Graphics.\n * @memberof PIXI\n */\nexport class LineStyle extends FillStyle\n{\n /** The width (thickness) of any lines drawn. */\n public width = 0;\n\n /** The alignment of any lines drawn (0.5 = middle, 1 = outer, 0 = inner). WebGL only. */\n public alignment = 0.5;\n\n /** If true the lines will be draw using LINES instead of TRIANGLE_STRIP. */\n public native = false;\n\n /**\n * Line cap style.\n * @member {PIXI.LINE_CAP}\n * @default PIXI.LINE_CAP.BUTT\n */\n public cap = LINE_CAP.BUTT;\n\n /**\n * Line join style.\n * @member {PIXI.LINE_JOIN}\n * @default PIXI.LINE_JOIN.MITER\n */\n public join = LINE_JOIN.MITER;\n\n /** Miter limit. */\n public miterLimit = 10;\n\n /** Clones the object. */\n public clone(): LineStyle\n {\n const obj = new LineStyle();\n\n obj.color = this.color;\n obj.alpha = this.alpha;\n obj.texture = this.texture;\n obj.matrix = this.matrix;\n obj.visible = this.visible;\n obj.width = this.width;\n obj.alignment = this.alignment;\n obj.native = this.native;\n obj.cap = this.cap;\n obj.join = this.join;\n obj.miterLimit = this.miterLimit;\n\n return obj;\n }\n\n /** Reset the line style to default. */\n public reset(): void\n {\n super.reset();\n\n // Override default line style color\n this.color = 0x0;\n\n this.alignment = 0.5;\n this.width = 0;\n this.native = false;\n this.cap = LINE_CAP.BUTT;\n this.join = LINE_JOIN.MITER;\n this.miterLimit = 10;\n }\n}\n","import {\n BLEND_MODES,\n Circle,\n Color,\n Ellipse,\n Matrix,\n PI_2,\n Point,\n Polygon,\n Rectangle,\n RoundedRectangle,\n Shader,\n SHAPES,\n State,\n Texture,\n UniformGroup,\n} from '@pixi/core';\nimport { Container } from '@pixi/display';\nimport { curves, LINE_CAP, LINE_JOIN } from './const';\nimport { GraphicsGeometry } from './GraphicsGeometry';\nimport { FillStyle } from './styles/FillStyle';\nimport { LineStyle } from './styles/LineStyle';\nimport { ArcUtils, BezierUtils, QuadraticUtils } from './utils';\n\nimport type { BatchDrawCall, ColorSource, IPointData, IShape, Renderer } from '@pixi/core';\nimport type { IDestroyOptions } from '@pixi/display';\n\n/**\n * Batch element computed from Graphics geometry.\n * @memberof PIXI\n */\nexport interface IGraphicsBatchElement\n{\n vertexData: Float32Array;\n blendMode: BLEND_MODES;\n indices: Uint16Array | Uint32Array;\n uvs: Float32Array;\n alpha: number;\n worldAlpha: number;\n _batchRGB: number[];\n _tintRGB: number;\n _texture: Texture;\n}\n\nexport interface IFillStyleOptions\n{\n color?: ColorSource;\n alpha?: number;\n texture?: Texture;\n matrix?: Matrix;\n}\n\nexport interface ILineStyleOptions extends IFillStyleOptions\n{\n width?: number;\n alignment?: number;\n native?: boolean;\n cap?: LINE_CAP;\n join?: LINE_JOIN;\n miterLimit?: number;\n}\n\n// a default shaders map used by graphics..\nconst DEFAULT_SHADERS: {[key: string]: Shader} = {};\n\nexport interface Graphics extends GlobalMixins.Graphics, Container {}\n\n/**\n * The Graphics class is primarily used to render primitive shapes such as lines, circles and\n * rectangles to the display, and to color and fill them. However, you can also use a Graphics\n * object to build a list of primitives to use as a mask, or as a complex hitArea.\n *\n * Please note that due to legacy naming conventions, the behavior of some functions in this class\n * can be confusing. Each call to `drawRect()`, `drawPolygon()`, etc. actually stores that primitive\n * in the Geometry class's GraphicsGeometry object for later use in rendering or hit testing - the\n * functions do not directly draw anything to the screen. Similarly, the `clear()` function doesn't\n * change the screen, it simply resets the list of primitives, which can be useful if you want to\n * rebuild the contents of an existing Graphics object.\n *\n * Once a GraphicsGeometry list is built, you can re-use it in other Geometry objects as\n * an optimization, by passing it into a new Geometry object's constructor. Because of this\n * ability, it's important to call `destroy()` on Geometry objects once you are done with them, to\n * properly dereference each GraphicsGeometry and prevent memory leaks.\n * @memberof PIXI\n */\nexport class Graphics extends Container\n{\n /**\n * Graphics curves resolution settings. If `adaptive` flag is set to `true`,\n * the resolution is calculated based on the curve's length to ensure better visual quality.\n * Adaptive draw works with `bezierCurveTo` and `quadraticCurveTo`.\n * @static\n * @property {boolean} [adaptive=true] - flag indicating if the resolution should be adaptive\n * @property {number} [maxLength=10] - maximal length of a single segment of the curve (if adaptive = false, ignored)\n * @property {number} [minSegments=8] - minimal number of segments in the curve (if adaptive = false, ignored)\n * @property {number} [maxSegments=2048] - maximal number of segments in the curve (if adaptive = false, ignored)\n * @property {number} [epsilon=0.0001] - precision of the curve fitting\n */\n public static readonly curves = curves;\n\n /**\n * Temporary point to use for containsPoint.\n * @private\n */\n static _TEMP_POINT = new Point();\n\n /**\n * Represents the vertex and fragment shaders that processes the geometry and runs on the GPU.\n * Can be shared between multiple Graphics objects.\n */\n public shader: Shader = null;\n\n /** Renderer plugin for batching */\n public pluginName = 'batch';\n\n /**\n * Current path\n * @readonly\n */\n public currentPath: Polygon = null;\n\n /** A collections of batches! These can be drawn by the renderer batch system. */\n protected batches: Array = [];\n\n /** Update dirty for limiting calculating tints for batches. */\n protected batchTint = -1;\n\n /** Update dirty for limiting calculating batches.*/\n protected batchDirty = -1;\n\n /** Copy of the object vertex data. */\n protected vertexData: Float32Array = null;\n\n /** Current fill style. */\n protected _fillStyle: FillStyle = new FillStyle();\n\n /** Current line style. */\n protected _lineStyle: LineStyle = new LineStyle();\n\n /** Current shape transform matrix. */\n protected _matrix: Matrix = null;\n\n /** Current hole mode is enabled. */\n protected _holeMode = false;\n protected _transformID: number;\n protected _tintColor: Color;\n\n /**\n * Represents the WebGL state the Graphics required to render, excludes shader and geometry. E.g.,\n * blend mode, culling, depth testing, direction of rendering triangles, backface, etc.\n */\n private state: State = State.for2d();\n private _geometry: GraphicsGeometry;\n\n /**\n * Includes vertex positions, face indices, normals, colors, UVs, and\n * custom attributes within buffers, reducing the cost of passing all\n * this data to the GPU. Can be shared between multiple Mesh or Graphics objects.\n * @readonly\n */\n public get geometry(): GraphicsGeometry\n {\n return this._geometry;\n }\n\n /**\n * @param geometry - Geometry to use, if omitted will create a new GraphicsGeometry instance.\n */\n constructor(geometry: GraphicsGeometry = null)\n {\n super();\n\n this._geometry = geometry || new GraphicsGeometry();\n this._geometry.refCount++;\n\n /**\n * When cacheAsBitmap is set to true the graphics object will be rendered as if it was a sprite.\n * This is useful if your graphics element does not change often, as it will speed up the rendering\n * of the object in exchange for taking up texture memory. It is also useful if you need the graphics\n * object to be anti-aliased, because it will be rendered using canvas. This is not recommended if\n * you are constantly redrawing the graphics element.\n * @name cacheAsBitmap\n * @member {boolean}\n * @memberof PIXI.Graphics#\n * @default false\n */\n\n this._transformID = -1;\n\n // Set default\n this._tintColor = new Color(0xFFFFFF);\n this.blendMode = BLEND_MODES.NORMAL;\n }\n\n /**\n * Creates a new Graphics object with the same values as this one.\n * Note that only the geometry of the object is cloned, not its transform (position,scale,etc)\n * @returns - A clone of the graphics object\n */\n public clone(): Graphics\n {\n this.finishPoly();\n\n return new Graphics(this._geometry);\n }\n\n /**\n * The blend mode to be applied to the graphic shape. Apply a value of\n * `PIXI.BLEND_MODES.NORMAL` to reset the blend mode. Note that, since each\n * primitive in the GraphicsGeometry list is rendered sequentially, modes\n * such as `PIXI.BLEND_MODES.ADD` and `PIXI.BLEND_MODES.MULTIPLY` will\n * be applied per-primitive.\n * @default PIXI.BLEND_MODES.NORMAL\n */\n public set blendMode(value: BLEND_MODES)\n {\n this.state.blendMode = value;\n }\n\n public get blendMode(): BLEND_MODES\n {\n return this.state.blendMode;\n }\n\n /**\n * The tint applied to each graphic shape. This is a hex value. A value of\n * 0xFFFFFF will remove any tint effect.\n * @default 0xFFFFFF\n */\n public get tint(): ColorSource\n {\n return this._tintColor.value;\n }\n\n public set tint(value: ColorSource)\n {\n this._tintColor.setValue(value);\n }\n\n /**\n * The current fill style.\n * @readonly\n */\n public get fill(): FillStyle\n {\n return this._fillStyle;\n }\n\n /**\n * The current line style.\n * @readonly\n */\n public get line(): LineStyle\n {\n return this._lineStyle;\n }\n\n /**\n * Specifies the line style used for subsequent calls to Graphics methods such as the lineTo()\n * method or the drawCircle() method.\n * @param [width=0] - width of the line to draw, will update the objects stored style\n * @param [color=0x0] - color of the line to draw, will update the objects stored style\n * @param [alpha=1] - alpha of the line to draw, will update the objects stored style\n * @param [alignment=0.5] - alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outer).\n * WebGL only.\n * @param [native=false] - If true the lines will be draw using LINES instead of TRIANGLE_STRIP\n * @returns - This Graphics object. Good for chaining method calls\n */\n public lineStyle(width: number, color?: ColorSource, alpha?: number, alignment?: number, native?: boolean): this;\n\n /**\n * Specifies the line style used for subsequent calls to Graphics methods such as the lineTo()\n * method or the drawCircle() method.\n * @param options - Line style options\n * @param {number} [options.width=0] - width of the line to draw, will update the objects stored style\n * @param {PIXI.ColorSource} [options.color=0x0] - color of the line to draw, will update the objects stored style\n * @param {number} [options.alpha] - alpha of the line to draw, will update the objects stored style\n * @param {number} [options.alignment=0.5] - alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outer).\n * WebGL only.\n * @param {boolean} [options.native=false] - If true the lines will be draw using LINES instead of TRIANGLE_STRIP\n * @param {PIXI.LINE_CAP}[options.cap=PIXI.LINE_CAP.BUTT] - line cap style\n * @param {PIXI.LINE_JOIN}[options.join=PIXI.LINE_JOIN.MITER] - line join style\n * @param {number}[options.miterLimit=10] - miter limit ratio\n * @returns {PIXI.Graphics} This Graphics object. Good for chaining method calls\n */\n public lineStyle(options?: ILineStyleOptions): this;\n\n public lineStyle(options: ILineStyleOptions | number = null,\n color: ColorSource = 0x0, alpha?: number, alignment = 0.5, native = false): this\n {\n // Support non-object params: (width, color, alpha, alignment, native)\n if (typeof options === 'number')\n {\n options = { width: options, color, alpha, alignment, native } as ILineStyleOptions;\n }\n\n return this.lineTextureStyle(options);\n }\n\n /**\n * Like line style but support texture for line fill.\n * @param [options] - Collection of options for setting line style.\n * @param {number} [options.width=0] - width of the line to draw, will update the objects stored style\n * @param {PIXI.Texture} [options.texture=PIXI.Texture.WHITE] - Texture to use\n * @param {PIXI.ColorSource} [options.color=0x0] - color of the line to draw, will update the objects stored style.\n * Default 0xFFFFFF if texture present.\n * @param {number} [options.alpha=1] - alpha of the line to draw, will update the objects stored style\n * @param {PIXI.Matrix} [options.matrix=null] - Texture matrix to transform texture\n * @param {number} [options.alignment=0.5] - alignment of the line to draw, (0 = inner, 0.5 = middle, 1 = outer).\n * WebGL only.\n * @param {boolean} [options.native=false] - If true the lines will be draw using LINES instead of TRIANGLE_STRIP\n * @param {PIXI.LINE_CAP}[options.cap=PIXI.LINE_CAP.BUTT] - line cap style\n * @param {PIXI.LINE_JOIN}[options.join=PIXI.LINE_JOIN.MITER] - line join style\n * @param {number}[options.miterLimit=10] - miter limit ratio\n * @returns {PIXI.Graphics} This Graphics object. Good for chaining method calls\n */\n public lineTextureStyle(options?: ILineStyleOptions): this\n {\n // Apply defaults\n const defaultLineStyleOptions: ILineStyleOptions = {\n width: 0,\n texture: Texture.WHITE,\n color: options?.texture ? 0xFFFFFF : 0x0,\n matrix: null,\n alignment: 0.5,\n native: false,\n cap: LINE_CAP.BUTT,\n join: LINE_JOIN.MITER,\n miterLimit: 10,\n };\n\n options = Object.assign(defaultLineStyleOptions, options);\n\n this.normalizeColor(options);\n\n if (this.currentPath)\n {\n this.startPoly();\n }\n\n const visible = options.width > 0 && options.alpha > 0;\n\n if (!visible)\n {\n this._lineStyle.reset();\n }\n else\n {\n if (options.matrix)\n {\n options.matrix = options.matrix.clone();\n options.matrix.invert();\n }\n\n Object.assign(this._lineStyle, { visible }, options);\n }\n\n return this;\n }\n\n /**\n * Start a polygon object internally.\n * @protected\n */\n protected startPoly(): void\n {\n if (this.currentPath)\n {\n const points = this.currentPath.points;\n const len = this.currentPath.points.length;\n\n if (len > 2)\n {\n this.drawShape(this.currentPath);\n this.currentPath = new Polygon();\n this.currentPath.closeStroke = false;\n this.currentPath.points.push(points[len - 2], points[len - 1]);\n }\n }\n else\n {\n this.currentPath = new Polygon();\n this.currentPath.closeStroke = false;\n }\n }\n\n /**\n * Finish the polygon object.\n * @protected\n */\n finishPoly(): void\n {\n if (this.currentPath)\n {\n if (this.currentPath.points.length > 2)\n {\n this.drawShape(this.currentPath);\n this.currentPath = null;\n }\n else\n {\n this.currentPath.points.length = 0;\n }\n }\n }\n\n /**\n * Moves the current drawing position to x, y.\n * @param x - the X coordinate to move to\n * @param y - the Y coordinate to move to\n * @returns - This Graphics object. Good for chaining method calls\n */\n public moveTo(x: number, y: number): this\n {\n this.startPoly();\n this.currentPath.points[0] = x;\n this.currentPath.points[1] = y;\n\n return this;\n }\n\n /**\n * Draws a line using the current line style from the current drawing position to (x, y);\n * The current drawing position is then set to (x, y).\n * @param x - the X coordinate to draw to\n * @param y - the Y coordinate to draw to\n * @returns - This Graphics object. Good for chaining method calls\n */\n public lineTo(x: number, y: number): this\n {\n if (!this.currentPath)\n {\n this.moveTo(0, 0);\n }\n\n // remove duplicates..\n const points = this.currentPath.points;\n const fromX = points[points.length - 2];\n const fromY = points[points.length - 1];\n\n if (fromX !== x || fromY !== y)\n {\n points.push(x, y);\n }\n\n return this;\n }\n\n /**\n * Initialize the curve\n * @param x\n * @param y\n */\n protected _initCurve(x = 0, y = 0): void\n {\n if (this.currentPath)\n {\n if (this.currentPath.points.length === 0)\n {\n this.currentPath.points = [x, y];\n }\n }\n else\n {\n this.moveTo(x, y);\n }\n }\n\n /**\n * Calculate the points for a quadratic bezier curve and then draws it.\n * Based on: https://stackoverflow.com/questions/785097/how-do-i-implement-a-bezier-curve-in-c\n * @param cpX - Control point x\n * @param cpY - Control point y\n * @param toX - Destination point x\n * @param toY - Destination point y\n * @returns - This Graphics object. Good for chaining method calls\n */\n public quadraticCurveTo(cpX: number, cpY: number, toX: number, toY: number): this\n {\n this._initCurve();\n\n const points = this.currentPath.points;\n\n if (points.length === 0)\n {\n this.moveTo(0, 0);\n }\n\n QuadraticUtils.curveTo(cpX, cpY, toX, toY, points);\n\n return this;\n }\n\n /**\n * Calculate the points for a bezier curve and then draws it.\n * @param cpX - Control point x\n * @param cpY - Control point y\n * @param cpX2 - Second Control point x\n * @param cpY2 - Second Control point y\n * @param toX - Destination point x\n * @param toY - Destination point y\n * @returns This Graphics object. Good for chaining method calls\n */\n public bezierCurveTo(cpX: number, cpY: number, cpX2: number, cpY2: number, toX: number, toY: number): this\n {\n this._initCurve();\n\n BezierUtils.curveTo(cpX, cpY, cpX2, cpY2, toX, toY, this.currentPath.points);\n\n return this;\n }\n\n /**\n * The `arcTo` method creates an arc/curve between two tangents on the canvas.\n * The first tangent is from the start point to the first control point,\n * and the second tangent is from the first control point to the second control point.\n * Note that the second control point is not necessarily the end point of the arc.\n *\n * \"borrowed\" from https://code.google.com/p/fxcanvas/ - thanks google!\n * @param x1 - The x-coordinate of the first control point of the arc\n * @param y1 - The y-coordinate of the first control point of the arc\n * @param x2 - The x-coordinate of the second control point of the arc\n * @param y2 - The y-coordinate of the second control point of the arc\n * @param radius - The radius of the arc\n * @returns - This Graphics object. Good for chaining method calls\n */\n public arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): this\n {\n this._initCurve(x1, y1);\n\n const points = this.currentPath.points;\n\n const result = ArcUtils.curveTo(x1, y1, x2, y2, radius, points);\n\n if (result)\n {\n const { cx, cy, radius, startAngle, endAngle, anticlockwise } = result;\n\n this.arc(cx, cy, radius, startAngle, endAngle, anticlockwise);\n }\n\n return this;\n }\n\n /**\n * The arc method creates an arc/curve (used to create circles, or parts of circles).\n * @param cx - The x-coordinate of the center of the circle\n * @param cy - The y-coordinate of the center of the circle\n * @param radius - The radius of the circle\n * @param startAngle - The starting angle, in radians (0 is at the 3 o'clock position\n * of the arc's circle)\n * @param endAngle - The ending angle, in radians\n * @param anticlockwise - Specifies whether the drawing should be\n * counter-clockwise or clockwise. False is default, and indicates clockwise, while true\n * indicates counter-clockwise.\n * @returns - This Graphics object. Good for chaining method calls\n */\n public arc(cx: number, cy: number, radius: number, startAngle: number, endAngle: number, anticlockwise = false): this\n {\n if (startAngle === endAngle)\n {\n return this;\n }\n\n if (!anticlockwise && endAngle <= startAngle)\n {\n endAngle += PI_2;\n }\n else if (anticlockwise && startAngle <= endAngle)\n {\n startAngle += PI_2;\n }\n\n const sweep = endAngle - startAngle;\n\n if (sweep === 0)\n {\n return this;\n }\n\n const startX = cx + (Math.cos(startAngle) * radius);\n const startY = cy + (Math.sin(startAngle) * radius);\n const eps = this._geometry.closePointEps;\n\n // If the currentPath exists, take its points. Otherwise call `moveTo` to start a path.\n let points = this.currentPath ? this.currentPath.points : null;\n\n if (points)\n {\n // TODO: make a better fix.\n\n // We check how far our start is from the last existing point\n const xDiff = Math.abs(points[points.length - 2] - startX);\n const yDiff = Math.abs(points[points.length - 1] - startY);\n\n if (xDiff < eps && yDiff < eps)\n {\n // If the point is very close, we don't add it, since this would lead to artifacts\n // during tessellation due to floating point imprecision.\n }\n else\n {\n points.push(startX, startY);\n }\n }\n else\n {\n this.moveTo(startX, startY);\n points = this.currentPath.points;\n }\n\n ArcUtils.arc(startX, startY, cx, cy, radius, startAngle, endAngle, anticlockwise, points);\n\n return this;\n }\n\n /**\n * Specifies a simple one-color fill that subsequent calls to other Graphics methods\n * (such as lineTo() or drawCircle()) use when drawing.\n * @param {PIXI.ColorSource} color - the color of the fill\n * @param alpha - the alpha of the fill, will override the color's alpha\n * @returns - This Graphics object. Suitable for chaining method calls\n */\n public beginFill(color: ColorSource = 0, alpha?: number): this\n {\n return this.beginTextureFill({ texture: Texture.WHITE, color, alpha });\n }\n\n /**\n * Normalize the color input from options for line style or fill\n * @param {PIXI.IFillStyleOptions} options - Fill style object.\n */\n private normalizeColor(options: Pick): void\n {\n const temp = Color.shared.setValue(options.color ?? 0);\n\n options.color = temp.toNumber();\n options.alpha ??= temp.alpha;\n }\n\n /**\n * Begin the texture fill.\n * Note: The wrap mode of the texture is forced to REPEAT on render.\n * @param options - Fill style object.\n * @param {PIXI.Texture} [options.texture=PIXI.Texture.WHITE] - Texture to fill\n * @param {PIXI.ColorSource} [options.color=0xffffff] - Background to fill behind texture\n * @param {number} [options.alpha] - Alpha of fill, overrides the color's alpha\n * @param {PIXI.Matrix} [options.matrix=null] - Transform matrix\n * @returns {PIXI.Graphics} This Graphics object. Good for chaining method calls\n */\n beginTextureFill(options?: IFillStyleOptions): this\n {\n // Apply defaults\n const defaultOptions: IFillStyleOptions = {\n texture: Texture.WHITE,\n color: 0xFFFFFF,\n matrix: null,\n };\n\n options = Object.assign(defaultOptions, options);\n\n this.normalizeColor(options);\n\n if (this.currentPath)\n {\n this.startPoly();\n }\n\n const visible = options.alpha > 0;\n\n if (!visible)\n {\n this._fillStyle.reset();\n }\n else\n {\n if (options.matrix)\n {\n options.matrix = options.matrix.clone();\n options.matrix.invert();\n }\n\n Object.assign(this._fillStyle, { visible }, options);\n }\n\n return this;\n }\n\n /**\n * Applies a fill to the lines and shapes that were added since the last call to the beginFill() method.\n * @returns - This Graphics object. Good for chaining method calls\n */\n public endFill(): this\n {\n this.finishPoly();\n\n this._fillStyle.reset();\n\n return this;\n }\n\n /**\n * Draws a rectangle shape.\n * @param x - The X coord of the top-left of the rectangle\n * @param y - The Y coord of the top-left of the rectangle\n * @param width - The width of the rectangle\n * @param height - The height of the rectangle\n * @returns - This Graphics object. Good for chaining method calls\n */\n public drawRect(x: number, y: number, width: number, height: number): this\n {\n return this.drawShape(new Rectangle(x, y, width, height));\n }\n\n /**\n * Draw a rectangle shape with rounded/beveled corners.\n * @param x - The X coord of the top-left of the rectangle\n * @param y - The Y coord of the top-left of the rectangle\n * @param width - The width of the rectangle\n * @param height - The height of the rectangle\n * @param radius - Radius of the rectangle corners\n * @returns - This Graphics object. Good for chaining method calls\n */\n public drawRoundedRect(x: number, y: number, width: number, height: number, radius: number): this\n {\n return this.drawShape(new RoundedRectangle(x, y, width, height, radius));\n }\n\n /**\n * Draws a circle.\n * @param x - The X coordinate of the center of the circle\n * @param y - The Y coordinate of the center of the circle\n * @param radius - The radius of the circle\n * @returns - This Graphics object. Good for chaining method calls\n */\n public drawCircle(x: number, y: number, radius: number): this\n {\n return this.drawShape(new Circle(x, y, radius));\n }\n\n /**\n * Draws an ellipse.\n * @param x - The X coordinate of the center of the ellipse\n * @param y - The Y coordinate of the center of the ellipse\n * @param width - The half width of the ellipse\n * @param height - The half height of the ellipse\n * @returns - This Graphics object. Good for chaining method calls\n */\n public drawEllipse(x: number, y: number, width: number, height: number): this\n {\n return this.drawShape(new Ellipse(x, y, width, height));\n }\n\n public drawPolygon(...path: Array | Array): this;\n public drawPolygon(path: Array | Array | Polygon): this;\n\n /**\n * Draws a polygon using the given path.\n * @param {number[]|PIXI.IPointData[]|PIXI.Polygon} path - The path data used to construct the polygon.\n * @returns - This Graphics object. Good for chaining method calls\n */\n public drawPolygon(...path: any[]): this\n {\n let points: Array | Array;\n let closeStroke = true;// !!this._fillStyle;\n\n const poly = path[0] as Polygon;\n\n // check if data has points..\n if (poly.points)\n {\n closeStroke = poly.closeStroke;\n points = poly.points;\n }\n else\n if (Array.isArray(path[0]))\n {\n points = path[0];\n }\n else\n {\n points = path;\n }\n\n const shape = new Polygon(points);\n\n shape.closeStroke = closeStroke;\n\n this.drawShape(shape);\n\n return this;\n }\n\n /**\n * Draw any shape.\n * @param {PIXI.Circle|PIXI.Ellipse|PIXI.Polygon|PIXI.Rectangle|PIXI.RoundedRectangle} shape - Shape to draw\n * @returns - This Graphics object. Good for chaining method calls\n */\n public drawShape(shape: IShape): this\n {\n if (!this._holeMode)\n {\n this._geometry.drawShape(\n shape,\n this._fillStyle.clone(),\n this._lineStyle.clone(),\n this._matrix\n );\n }\n else\n {\n this._geometry.drawHole(shape, this._matrix);\n }\n\n return this;\n }\n\n /**\n * Clears the graphics that were drawn to this Graphics object, and resets fill and line style settings.\n * @returns - This Graphics object. Good for chaining method calls\n */\n public clear(): this\n {\n this._geometry.clear();\n this._lineStyle.reset();\n this._fillStyle.reset();\n\n this._boundsID++;\n this._matrix = null;\n this._holeMode = false;\n this.currentPath = null;\n\n return this;\n }\n\n /**\n * True if graphics consists of one rectangle, and thus, can be drawn like a Sprite and\n * masked with gl.scissor.\n * @returns - True if only 1 rect.\n */\n public isFastRect(): boolean\n {\n const data = this._geometry.graphicsData;\n\n return data.length === 1\n && data[0].shape.type === SHAPES.RECT\n && !data[0].matrix\n && !data[0].holes.length\n && !(data[0].lineStyle.visible && data[0].lineStyle.width);\n }\n\n /**\n * Renders the object using the WebGL renderer\n * @param renderer - The renderer\n */\n protected _render(renderer: Renderer): void\n {\n this.finishPoly();\n\n const geometry = this._geometry;\n // batch part..\n // batch it!\n\n geometry.updateBatches();\n\n if (geometry.batchable)\n {\n if (this.batchDirty !== geometry.batchDirty)\n {\n this._populateBatches();\n }\n\n this._renderBatched(renderer);\n }\n else\n {\n // no batching...\n renderer.batch.flush();\n\n this._renderDirect(renderer);\n }\n }\n\n /** Populating batches for rendering. */\n protected _populateBatches(): void\n {\n const geometry = this._geometry;\n const blendMode = this.blendMode;\n const len = geometry.batches.length;\n\n this.batchTint = -1;\n this._transformID = -1;\n this.batchDirty = geometry.batchDirty;\n this.batches.length = len;\n\n this.vertexData = new Float32Array(geometry.points);\n\n for (let i = 0; i < len; i++)\n {\n const gI = geometry.batches[i];\n const color = gI.style.color;\n const vertexData = new Float32Array(this.vertexData.buffer,\n gI.attribStart * 4 * 2,\n gI.attribSize * 2);\n\n const uvs = new Float32Array(geometry.uvsFloat32.buffer,\n gI.attribStart * 4 * 2,\n gI.attribSize * 2);\n\n const indices = new Uint16Array(geometry.indicesUint16.buffer,\n gI.start * 2,\n gI.size);\n\n const batch = {\n vertexData,\n blendMode,\n indices,\n uvs,\n _batchRGB: Color.shared.setValue(color).toRgbArray(),\n _tintRGB: color,\n _texture: gI.style.texture,\n alpha: gI.style.alpha,\n worldAlpha: 1\n };\n\n this.batches[i] = batch;\n }\n }\n\n /**\n * Renders the batches using the BathedRenderer plugin\n * @param renderer - The renderer\n */\n protected _renderBatched(renderer: Renderer): void\n {\n if (!this.batches.length)\n {\n return;\n }\n\n renderer.batch.setObjectRenderer(renderer.plugins[this.pluginName]);\n\n this.calculateVertices();\n this.calculateTints();\n\n for (let i = 0, l = this.batches.length; i < l; i++)\n {\n const batch = this.batches[i];\n\n batch.worldAlpha = this.worldAlpha * batch.alpha;\n\n renderer.plugins[this.pluginName].render(batch);\n }\n }\n\n /**\n * Renders the graphics direct\n * @param renderer - The renderer\n */\n protected _renderDirect(renderer: Renderer): void\n {\n const shader = this._resolveDirectShader(renderer);\n\n const geometry = this._geometry;\n const worldAlpha = this.worldAlpha;\n const uniforms = shader.uniforms;\n const drawCalls = geometry.drawCalls;\n\n // lets set the transfomr\n uniforms.translationMatrix = this.transform.worldTransform;\n\n // and then lets set the tint..\n Color.shared.setValue(this._tintColor)\n .premultiply(worldAlpha)\n .toArray(uniforms.tint);\n\n // the first draw call, we can set the uniforms of the shader directly here.\n\n // this means that we can tack advantage of the sync function of pixi!\n // bind and sync uniforms..\n // there is a way to optimise this..\n renderer.shader.bind(shader);\n renderer.geometry.bind(geometry, shader);\n\n // set state..\n renderer.state.set(this.state);\n\n // then render the rest of them...\n for (let i = 0, l = drawCalls.length; i < l; i++)\n {\n this._renderDrawCallDirect(renderer, geometry.drawCalls[i]);\n }\n }\n\n /**\n * Renders specific DrawCall\n * @param renderer\n * @param drawCall\n */\n protected _renderDrawCallDirect(renderer: Renderer, drawCall: BatchDrawCall): void\n {\n const { texArray, type, size, start } = drawCall;\n const groupTextureCount = texArray.count;\n\n for (let j = 0; j < groupTextureCount; j++)\n {\n renderer.texture.bind(texArray.elements[j], j);\n }\n\n renderer.geometry.draw(type, size, start);\n }\n\n /**\n * Resolves shader for direct rendering\n * @param renderer - The renderer\n */\n protected _resolveDirectShader(renderer: Renderer): Shader\n {\n let shader = this.shader;\n\n const pluginName = this.pluginName;\n\n if (!shader)\n {\n // if there is no shader here, we can use the default shader.\n // and that only gets created if we actually need it..\n // but may be more than one plugins for graphics\n if (!DEFAULT_SHADERS[pluginName])\n {\n const { maxTextures } = renderer.plugins[pluginName];\n const sampleValues = new Int32Array(maxTextures);\n\n for (let i = 0; i < maxTextures; i++)\n {\n sampleValues[i] = i;\n }\n\n const uniforms = {\n tint: new Float32Array([1, 1, 1, 1]),\n translationMatrix: new Matrix(),\n default: UniformGroup.from({ uSamplers: sampleValues }, true),\n };\n\n const program = renderer.plugins[pluginName]._shader.program;\n\n DEFAULT_SHADERS[pluginName] = new Shader(program, uniforms);\n }\n\n shader = DEFAULT_SHADERS[pluginName];\n }\n\n return shader;\n }\n\n /**\n * Retrieves the bounds of the graphic shape as a rectangle object.\n * @see PIXI.GraphicsGeometry#bounds\n */\n protected _calculateBounds(): void\n {\n this.finishPoly();\n\n const geometry = this._geometry;\n\n // skipping when graphics is empty, like a container\n if (!geometry.graphicsData.length)\n {\n return;\n }\n\n const { minX, minY, maxX, maxY } = geometry.bounds;\n\n this._bounds.addFrame(this.transform, minX, minY, maxX, maxY);\n }\n\n /**\n * Tests if a point is inside this graphics object\n * @param point - the point to test\n * @returns - the result of the test\n */\n public containsPoint(point: IPointData): boolean\n {\n this.worldTransform.applyInverse(point, Graphics._TEMP_POINT);\n\n return this._geometry.containsPoint(Graphics._TEMP_POINT);\n }\n\n /** Recalculate the tint by applying tint to batches using Graphics tint. */\n protected calculateTints(): void\n {\n if (this.batchTint !== this.tint)\n {\n this.batchTint = this._tintColor.toNumber();\n\n for (let i = 0; i < this.batches.length; i++)\n {\n const batch = this.batches[i];\n\n batch._tintRGB = Color.shared\n .setValue(this._tintColor)\n .multiply(batch._batchRGB)\n .toLittleEndianNumber();\n }\n }\n }\n\n /** If there's a transform update or a change to the shape of the geometry, recalculate the vertices. */\n protected calculateVertices(): void\n {\n const wtID = this.transform._worldID;\n\n if (this._transformID === wtID)\n {\n return;\n }\n\n this._transformID = wtID;\n\n const wt = this.transform.worldTransform;\n const a = wt.a;\n const b = wt.b;\n const c = wt.c;\n const d = wt.d;\n const tx = wt.tx;\n const ty = wt.ty;\n\n const data = this._geometry.points;// batch.vertexDataOriginal;\n const vertexData = this.vertexData;\n\n let count = 0;\n\n for (let i = 0; i < data.length; i += 2)\n {\n const x = data[i];\n const y = data[i + 1];\n\n vertexData[count++] = (a * x) + (c * y) + tx;\n vertexData[count++] = (d * y) + (b * x) + ty;\n }\n }\n\n /**\n * Closes the current path.\n * @returns - Returns itself.\n */\n public closePath(): this\n {\n const currentPath = this.currentPath;\n\n if (currentPath)\n {\n // we don't need to add extra point in the end because buildLine will take care of that\n currentPath.closeStroke = true;\n // ensure that the polygon is completed, and is available for hit detection\n // (even if the graphics is not rendered yet)\n this.finishPoly();\n }\n\n return this;\n }\n\n /**\n * Apply a matrix to the positional data.\n * @param matrix - Matrix to use for transform current shape.\n * @returns - Returns itself.\n */\n public setMatrix(matrix: Matrix): this\n {\n this._matrix = matrix;\n\n return this;\n }\n\n /**\n * Begin adding holes to the last draw shape\n * IMPORTANT: holes must be fully inside a shape to work\n * Also weirdness ensues if holes overlap!\n * Ellipses, Circles, Rectangles and Rounded Rectangles cannot be holes or host for holes in CanvasRenderer,\n * please use `moveTo` `lineTo`, `quadraticCurveTo` if you rely on pixi-legacy bundle.\n * @returns - Returns itself.\n */\n public beginHole(): this\n {\n this.finishPoly();\n this._holeMode = true;\n\n return this;\n }\n\n /**\n * End adding holes to the last draw shape.\n * @returns - Returns itself.\n */\n public endHole(): this\n {\n this.finishPoly();\n this._holeMode = false;\n\n return this;\n }\n\n /**\n * Destroys the Graphics object.\n * @param options - Options parameter. A boolean will act as if all\n * options have been set to that value\n * @param {boolean} [options.children=false] - if set to true, all the children will have\n * their destroy method called as well. 'options' will be passed on to those calls.\n * @param {boolean} [options.texture=false] - Only used for child Sprites if options.children is set to true\n * Should it destroy the texture of the child sprite\n * @param {boolean} [options.baseTexture=false] - Only used for child Sprites if options.children is set to true\n * Should it destroy the base texture of the child sprite\n */\n public destroy(options?: IDestroyOptions | boolean): void\n {\n this._geometry.refCount--;\n if (this._geometry.refCount === 0)\n {\n this._geometry.dispose();\n }\n\n this._matrix = null;\n this.currentPath = null;\n this._lineStyle.destroy();\n this._lineStyle = null;\n this._fillStyle.destroy();\n this._fillStyle = null;\n this._geometry = null;\n this.shader = null;\n this.vertexData = null;\n this.batches.length = 0;\n this.batches = null;\n\n super.destroy(options);\n }\n}\n","import type { Buffer, TextureMatrix } from '@pixi/core';\n\n/**\n * Class controls cache for UV mapping from Texture normal space to BaseTexture normal space.\n * @memberof PIXI\n */\nexport class MeshBatchUvs\n{\n /** UV Buffer data. */\n public readonly data: Float32Array;\n\n /** Buffer with normalized UV's. */\n public uvBuffer: Buffer;\n\n /** Material UV matrix. */\n public uvMatrix: TextureMatrix;\n\n private _bufferUpdateId: number;\n private _textureUpdateId: number;\n\n // Internal-only properties\n _updateID: number;\n\n /**\n * @param uvBuffer - Buffer with normalized uv's\n * @param uvMatrix - Material UV matrix\n */\n constructor(uvBuffer: Buffer, uvMatrix: TextureMatrix)\n {\n this.uvBuffer = uvBuffer;\n this.uvMatrix = uvMatrix;\n this.data = null;\n\n this._bufferUpdateId = -1;\n this._textureUpdateId = -1;\n this._updateID = 0;\n }\n\n /**\n * Updates\n * @param forceUpdate - force the update\n */\n public update(forceUpdate?: boolean): void\n {\n if (!forceUpdate\n && this._bufferUpdateId === this.uvBuffer._updateID\n && this._textureUpdateId === this.uvMatrix._updateID\n )\n {\n return;\n }\n\n this._bufferUpdateId = this.uvBuffer._updateID;\n this._textureUpdateId = this.uvMatrix._updateID;\n\n const data = this.uvBuffer.data as Float32Array;\n\n if (!this.data || this.data.length !== data.length)\n {\n (this.data as any) = new Float32Array(data.length);\n }\n\n this.uvMatrix.multiplyUvs(data, this.data);\n\n this._updateID++;\n }\n}\n","import { DRAW_MODES, Point, Polygon, settings, State } from '@pixi/core';\nimport { Container } from '@pixi/display';\nimport { MeshBatchUvs } from './MeshBatchUvs';\n\nimport type { BLEND_MODES, Buffer, ColorSource, Geometry, IPointData, Renderer, Shader, Texture } from '@pixi/core';\nimport type { IDestroyOptions } from '@pixi/display';\nimport type { MeshMaterial } from './MeshMaterial';\n\nconst tempPoint = new Point();\nconst tempPolygon = new Polygon();\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface Mesh extends GlobalMixins.Mesh {}\n\n/**\n * Base mesh class.\n *\n * This class empowers you to have maximum flexibility to render any kind of WebGL visuals you can think of.\n * This class assumes a certain level of WebGL knowledge.\n * If you know a bit this should abstract enough away to make your life easier!\n *\n * Pretty much ALL WebGL can be broken down into the following:\n * - Geometry - The structure and data for the mesh. This can include anything from positions, uvs, normals, colors etc..\n * - Shader - This is the shader that PixiJS will render the geometry with (attributes in the shader must match the geometry)\n * - State - This is the state of WebGL required to render the mesh.\n *\n * Through a combination of the above elements you can render anything you want, 2D or 3D!\n * @memberof PIXI\n */\nexport class Mesh extends Container\n{\n /**\n * Used by the @pixi/canvas-mesh package to draw meshes using canvas.\n * Added here because we cannot mixin a static property to Mesh type.\n * @ignore\n */\n public static defaultCanvasPadding: number;\n\n /**\n * Represents the vertex and fragment shaders that processes the geometry and runs on the GPU.\n * Can be shared between multiple Mesh objects.\n * @type {PIXI.Shader|PIXI.MeshMaterial}\n */\n public shader: T;\n\n /**\n * Represents the WebGL state the Mesh required to render, excludes shader and geometry. E.g.,\n * blend mode, culling, depth testing, direction of rendering triangles, backface, etc.\n */\n public state: State;\n\n /** The way the Mesh should be drawn, can be any of the {@link PIXI.DRAW_MODES} constants. */\n public drawMode: DRAW_MODES;\n\n /**\n * Typically the index of the IndexBuffer where to start drawing.\n * @default 0\n */\n public start: number;\n\n /**\n * How much of the geometry to draw, by default `0` renders everything.\n * @default 0\n */\n public size: number;\n\n private _geometry: Geometry;\n\n /** This is the caching layer used by the batcher. */\n private vertexData: Float32Array;\n\n /** If geometry is changed used to decide to re-transform the vertexData. */\n private vertexDirty: number;\n private _transformID: number;\n\n /** Internal roundPixels field. */\n private _roundPixels: boolean;\n\n /** Batched UV's are cached for atlas textures. */\n private batchUvs: MeshBatchUvs;\n\n // Internal-only properties\n /**\n * These are used as easy access for batching.\n * @private\n */\n uvs: Float32Array;\n\n /**\n * These are used as easy access for batching.\n * @private\n */\n indices: Uint16Array;\n _tintRGB: number;\n _texture: Texture;\n\n /**\n * @param geometry - The geometry the mesh will use.\n * @param {PIXI.MeshMaterial} shader - The shader the mesh will use.\n * @param state - The state that the WebGL context is required to be in to render the mesh\n * if no state is provided, uses {@link PIXI.State.for2d} to create a 2D state for PixiJS.\n * @param drawMode - The drawMode, can be any of the {@link PIXI.DRAW_MODES} constants.\n */\n constructor(geometry: Geometry, shader: T, state?: State, drawMode: DRAW_MODES = DRAW_MODES.TRIANGLES)\n {\n super();\n\n this.geometry = geometry;\n this.shader = shader;\n this.state = state || State.for2d();\n this.drawMode = drawMode;\n this.start = 0;\n this.size = 0;\n\n this.uvs = null;\n this.indices = null;\n this.vertexData = new Float32Array(1);\n this.vertexDirty = -1;\n\n this._transformID = -1;\n this._roundPixels = settings.ROUND_PIXELS;\n this.batchUvs = null;\n }\n\n /**\n * Includes vertex positions, face indices, normals, colors, UVs, and\n * custom attributes within buffers, reducing the cost of passing all\n * this data to the GPU. Can be shared between multiple Mesh objects.\n */\n get geometry(): Geometry\n {\n return this._geometry;\n }\n\n set geometry(value: Geometry)\n {\n if (this._geometry === value)\n {\n return;\n }\n\n if (this._geometry)\n {\n this._geometry.refCount--;\n\n if (this._geometry.refCount === 0)\n {\n this._geometry.dispose();\n }\n }\n\n this._geometry = value;\n\n if (this._geometry)\n {\n this._geometry.refCount++;\n }\n\n this.vertexDirty = -1;\n }\n\n /**\n * To change mesh uv's, change its uvBuffer data and increment its _updateID.\n * @readonly\n */\n get uvBuffer(): Buffer\n {\n return this.geometry.buffers[1];\n }\n\n /**\n * To change mesh vertices, change its uvBuffer data and increment its _updateID.\n * Incrementing _updateID is optional because most of Mesh objects do it anyway.\n * @readonly\n */\n get verticesBuffer(): Buffer\n {\n return this.geometry.buffers[0];\n }\n\n /** Alias for {@link PIXI.Mesh#shader}. */\n set material(value: T)\n {\n this.shader = value;\n }\n\n get material(): T\n {\n return this.shader;\n }\n\n /**\n * The blend mode to be applied to the Mesh. Apply a value of\n * `PIXI.BLEND_MODES.NORMAL` to reset the blend mode.\n * @default PIXI.BLEND_MODES.NORMAL;\n */\n set blendMode(value: BLEND_MODES)\n {\n this.state.blendMode = value;\n }\n\n get blendMode(): BLEND_MODES\n {\n return this.state.blendMode;\n }\n\n /**\n * If true PixiJS will Math.floor() x/y values when rendering, stopping pixel interpolation.\n * Advantages can include sharper image quality (like text) and faster rendering on canvas.\n * The main disadvantage is movement of objects may appear less smooth.\n * To set the global default, change {@link PIXI.settings.ROUND_PIXELS}\n * @default false\n */\n set roundPixels(value: boolean)\n {\n if (this._roundPixels !== value)\n {\n this._transformID = -1;\n }\n this._roundPixels = value;\n }\n\n get roundPixels(): boolean\n {\n return this._roundPixels;\n }\n\n /**\n * The multiply tint applied to the Mesh. This is a hex value. A value of\n * `0xFFFFFF` will remove any tint effect.\n *\n * Null for non-MeshMaterial shaders\n * @default 0xFFFFFF\n */\n get tint(): ColorSource\n {\n return 'tint' in this.shader ? (this.shader as unknown as MeshMaterial).tint : null;\n }\n\n set tint(value: ColorSource)\n {\n (this.shader as unknown as MeshMaterial).tint = value;\n }\n\n /**\n * The tint color as a RGB integer\n * @ignore\n */\n get tintValue(): number\n {\n return (this.shader as unknown as MeshMaterial).tintValue;\n }\n\n /** The texture that the Mesh uses. Null for non-MeshMaterial shaders */\n get texture(): Texture\n {\n return 'texture' in this.shader ? (this.shader as unknown as MeshMaterial).texture : null;\n }\n\n set texture(value: Texture)\n {\n (this.shader as unknown as MeshMaterial).texture = value;\n }\n\n /**\n * Standard renderer draw.\n * @param renderer - Instance to renderer.\n */\n protected _render(renderer: Renderer): void\n {\n // set properties for batching..\n // TODO could use a different way to grab verts?\n const vertices = this.geometry.buffers[0].data;\n const shader = this.shader as unknown as MeshMaterial;\n\n // TODO benchmark check for attribute size..\n if (\n shader.batchable\n && this.drawMode === DRAW_MODES.TRIANGLES\n && vertices.length < Mesh.BATCHABLE_SIZE * 2\n )\n {\n this._renderToBatch(renderer);\n }\n else\n {\n this._renderDefault(renderer);\n }\n }\n\n /**\n * Standard non-batching way of rendering.\n * @param renderer - Instance to renderer.\n */\n protected _renderDefault(renderer: Renderer): void\n {\n const shader = this.shader as unknown as MeshMaterial;\n\n shader.alpha = this.worldAlpha;\n if (shader.update)\n {\n shader.update();\n }\n\n renderer.batch.flush();\n\n // bind and sync uniforms..\n shader.uniforms.translationMatrix = this.transform.worldTransform.toArray(true);\n renderer.shader.bind(shader);\n\n // set state..\n renderer.state.set(this.state);\n\n // bind the geometry...\n renderer.geometry.bind(this.geometry, shader);\n\n // then render it\n renderer.geometry.draw(this.drawMode, this.size, this.start, this.geometry.instanceCount);\n }\n\n /**\n * Rendering by using the Batch system.\n * @param renderer - Instance to renderer.\n */\n protected _renderToBatch(renderer: Renderer): void\n {\n const geometry = this.geometry;\n const shader = this.shader as unknown as MeshMaterial;\n\n if (shader.uvMatrix)\n {\n shader.uvMatrix.update();\n this.calculateUvs();\n }\n\n // set properties for batching..\n this.calculateVertices();\n this.indices = geometry.indexBuffer.data as Uint16Array;\n this._tintRGB = shader._tintRGB;\n this._texture = shader.texture;\n\n const pluginName = (this.material as unknown as MeshMaterial).pluginName;\n\n renderer.batch.setObjectRenderer(renderer.plugins[pluginName]);\n renderer.plugins[pluginName].render(this);\n }\n\n /** Updates vertexData field based on transform and vertices. */\n public calculateVertices(): void\n {\n const geometry = this.geometry;\n const verticesBuffer = geometry.buffers[0];\n const vertices = verticesBuffer.data;\n const vertexDirtyId = verticesBuffer._updateID;\n\n if (vertexDirtyId === this.vertexDirty && this._transformID === this.transform._worldID)\n {\n return;\n }\n\n this._transformID = this.transform._worldID;\n\n if (this.vertexData.length !== vertices.length)\n {\n this.vertexData = new Float32Array(vertices.length);\n }\n\n const wt = this.transform.worldTransform;\n const a = wt.a;\n const b = wt.b;\n const c = wt.c;\n const d = wt.d;\n const tx = wt.tx;\n const ty = wt.ty;\n\n const vertexData = this.vertexData;\n\n for (let i = 0; i < vertexData.length / 2; i++)\n {\n const x = vertices[(i * 2)];\n const y = vertices[(i * 2) + 1];\n\n vertexData[(i * 2)] = (a * x) + (c * y) + tx;\n vertexData[(i * 2) + 1] = (b * x) + (d * y) + ty;\n }\n\n if (this._roundPixels)\n {\n const resolution = settings.RESOLUTION;\n\n for (let i = 0; i < vertexData.length; ++i)\n {\n vertexData[i] = Math.round(vertexData[i] * resolution) / resolution;\n }\n }\n\n this.vertexDirty = vertexDirtyId;\n }\n\n /** Updates uv field based on from geometry uv's or batchUvs. */\n public calculateUvs(): void\n {\n const geomUvs = this.geometry.buffers[1];\n const shader = this.shader as unknown as MeshMaterial;\n\n if (!shader.uvMatrix.isSimple)\n {\n if (!this.batchUvs)\n {\n this.batchUvs = new MeshBatchUvs(geomUvs, shader.uvMatrix);\n }\n this.batchUvs.update();\n this.uvs = this.batchUvs.data;\n }\n else\n {\n this.uvs = geomUvs.data as Float32Array;\n }\n }\n\n /**\n * Updates the bounds of the mesh as a rectangle. The bounds calculation takes the worldTransform into account.\n * there must be a aVertexPosition attribute present in the geometry for bounds to be calculated correctly.\n */\n protected _calculateBounds(): void\n {\n this.calculateVertices();\n\n this._bounds.addVertexData(this.vertexData, 0, this.vertexData.length);\n }\n\n /**\n * Tests if a point is inside this mesh. Works only for PIXI.DRAW_MODES.TRIANGLES.\n * @param point - The point to test.\n * @returns - The result of the test.\n */\n public containsPoint(point: IPointData): boolean\n {\n if (!this.getBounds().contains(point.x, point.y))\n {\n return false;\n }\n\n this.worldTransform.applyInverse(point, tempPoint);\n\n const vertices = this.geometry.getBuffer('aVertexPosition').data;\n\n const points = tempPolygon.points;\n const indices = this.geometry.getIndex().data;\n const len = indices.length;\n const step = this.drawMode === 4 ? 3 : 1;\n\n for (let i = 0; i + 2 < len; i += step)\n {\n const ind0 = indices[i] * 2;\n const ind1 = indices[i + 1] * 2;\n const ind2 = indices[i + 2] * 2;\n\n points[0] = vertices[ind0];\n points[1] = vertices[ind0 + 1];\n points[2] = vertices[ind1];\n points[3] = vertices[ind1 + 1];\n points[4] = vertices[ind2];\n points[5] = vertices[ind2 + 1];\n\n if (tempPolygon.contains(tempPoint.x, tempPoint.y))\n {\n return true;\n }\n }\n\n return false;\n }\n\n public destroy(options?: IDestroyOptions | boolean): void\n {\n super.destroy(options);\n\n if (this._cachedTexture)\n {\n this._cachedTexture.destroy();\n this._cachedTexture = null;\n }\n\n this.geometry = null;\n this.shader = null;\n this.state = null;\n this.uvs = null;\n this.indices = null;\n this.vertexData = null;\n }\n\n /** The maximum number of vertices to consider batchable. Generally, the complexity of the geometry. */\n public static BATCHABLE_SIZE = 100;\n}\n","import { Buffer, Geometry, TYPES } from '@pixi/core';\n\nimport type { IArrayBuffer } from '@pixi/core';\n\n/**\n * Standard 2D geometry used in PixiJS.\n *\n * Geometry can be defined without passing in a style or data if required.\n * @example\n * import { Geometry } from 'pixi.js';\n *\n * const geometry = new Geometry();\n *\n * geometry.addAttribute('positions', [0, 0, 100, 0, 100, 100, 0, 100], 2);\n * geometry.addAttribute('uvs', [0, 0, 1, 0, 1, 1, 0, 1], 2);\n * geometry.addIndex([0, 1, 2, 1, 3, 2]);\n * @memberof PIXI\n */\nexport class MeshGeometry extends Geometry\n{\n // Internal-only properties\n /**\n * Dirty flag to limit update calls on Mesh. For example,\n * limiting updates on a single Mesh instance with a shared Geometry\n * within the render loop.\n * @private\n * @default -1\n */\n _updateId: number;\n\n /**\n * @param {Float32Array|number[]} [vertices] - Positional data on geometry.\n * @param {Float32Array|number[]} [uvs] - Texture UVs.\n * @param {Uint16Array|number[]} [index] - IndexBuffer\n */\n constructor(vertices?: IArrayBuffer, uvs?: IArrayBuffer, index?: IArrayBuffer)\n {\n super();\n\n const verticesBuffer = new Buffer(vertices);\n const uvsBuffer = new Buffer(uvs, true);\n const indexBuffer = new Buffer(index, true, true);\n\n this.addAttribute('aVertexPosition', verticesBuffer, 2, false, TYPES.FLOAT)\n .addAttribute('aTextureCoord', uvsBuffer, 2, false, TYPES.FLOAT)\n .addIndex(indexBuffer);\n\n this._updateId = -1;\n }\n\n /**\n * If the vertex position is updated.\n * @readonly\n * @private\n */\n get vertexDirtyId(): number\n {\n return this.buffers[0]._updateID;\n }\n}\n","import { Color, Matrix, Program, Shader, TextureMatrix } from '@pixi/core';\nimport fragment from './shader/mesh.frag';\nimport vertex from './shader/mesh.vert';\n\nimport type { ColorSource, Texture, utils } from '@pixi/core';\n\nexport interface IMeshMaterialOptions\n{\n alpha?: number;\n tint?: ColorSource;\n pluginName?: string;\n program?: Program;\n uniforms?: utils.Dict;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface MeshMaterial extends GlobalMixins.MeshMaterial {}\n\n/**\n * Slightly opinionated default shader for PixiJS 2D objects.\n * @memberof PIXI\n */\nexport class MeshMaterial extends Shader\n{\n /**\n * TextureMatrix instance for this Mesh, used to track Texture changes.\n * @readonly\n */\n public readonly uvMatrix: TextureMatrix;\n\n /**\n * `true` if shader can be batch with the renderer's batch system.\n * @default true\n */\n public batchable: boolean;\n\n /**\n * Renderer plugin for batching.\n * @default 'batch'\n */\n public pluginName: string;\n\n // Internal-only properties\n _tintRGB: number;\n\n /**\n * Only do update if tint or alpha changes.\n * @private\n * @default false\n */\n private _colorDirty: boolean;\n private _alpha: number;\n private _tintColor: Color;\n\n /**\n * @param uSampler - Texture that material uses to render.\n * @param options - Additional options\n * @param {number} [options.alpha=1] - Default alpha.\n * @param {PIXI.ColorSource} [options.tint=0xFFFFFF] - Default tint.\n * @param {string} [options.pluginName='batch'] - Renderer plugin for batching.\n * @param {PIXI.Program} [options.program=0xFFFFFF] - Custom program.\n * @param {object} [options.uniforms] - Custom uniforms.\n */\n constructor(uSampler: Texture, options?: IMeshMaterialOptions)\n {\n const uniforms = {\n uSampler,\n alpha: 1,\n uTextureMatrix: Matrix.IDENTITY,\n uColor: new Float32Array([1, 1, 1, 1]),\n };\n\n // Set defaults\n options = Object.assign({\n tint: 0xFFFFFF,\n alpha: 1,\n pluginName: 'batch',\n }, options);\n\n if (options.uniforms)\n {\n Object.assign(uniforms, options.uniforms);\n }\n\n super(options.program || Program.from(vertex, fragment), uniforms);\n\n this._colorDirty = false;\n\n this.uvMatrix = new TextureMatrix(uSampler);\n this.batchable = options.program === undefined;\n this.pluginName = options.pluginName;\n\n this._tintColor = new Color(options.tint);\n this._tintRGB = this._tintColor.toLittleEndianNumber();\n this._colorDirty = true;\n this.alpha = options.alpha;\n }\n\n /** Reference to the texture being rendered. */\n get texture(): Texture\n {\n return this.uniforms.uSampler;\n }\n set texture(value: Texture)\n {\n if (this.uniforms.uSampler !== value)\n {\n if (!this.uniforms.uSampler.baseTexture.alphaMode !== !value.baseTexture.alphaMode)\n {\n this._colorDirty = true;\n }\n\n this.uniforms.uSampler = value;\n this.uvMatrix.texture = value;\n }\n }\n\n /**\n * This gets automatically set by the object using this.\n * @default 1\n */\n set alpha(value: number)\n {\n if (value === this._alpha) return;\n\n this._alpha = value;\n this._colorDirty = true;\n }\n get alpha(): number\n {\n return this._alpha;\n }\n\n /**\n * Multiply tint for the material.\n * @default 0xFFFFFF\n */\n set tint(value: ColorSource)\n {\n if (value === this.tint) return;\n\n this._tintColor.setValue(value);\n this._tintRGB = this._tintColor.toLittleEndianNumber();\n this._colorDirty = true;\n }\n get tint(): ColorSource\n {\n return this._tintColor.value;\n }\n\n /**\n * Get the internal number from tint color\n * @ignore\n */\n get tintValue(): number\n {\n return this._tintColor.toNumber();\n }\n\n /** Gets called automatically by the Mesh. Intended to be overridden for custom {@link PIXI.MeshMaterial} objects. */\n public update(): void\n {\n if (this._colorDirty)\n {\n this._colorDirty = false;\n const baseTexture = this.texture.baseTexture;\n const applyToChannels = (baseTexture.alphaMode as unknown as boolean);\n\n Color.shared\n .setValue(this._tintColor)\n .premultiply(this._alpha, applyToChannels)\n .toArray(this.uniforms.uColor);\n }\n if (this.uvMatrix.update())\n {\n this.uniforms.uTextureMatrix = this.uvMatrix.mapCoord;\n }\n }\n}\n","import { Buffer, Geometry, TYPES, utils } from '@pixi/core';\n\nimport type { Sprite } from '@pixi/sprite';\nimport type { IParticleRendererProperty } from './ParticleRenderer';\n\n/*\n * @author Mat Groves\n *\n * Big thanks to the very clever Matt DesLauriers https://github.com/mattdesl/\n * for creating the original PixiJS version!\n * Also a thanks to https://github.com/bchevalier for tweaking the tint and alpha so that\n * they now share 4 bytes on the vertex buffer\n *\n * Heavily inspired by LibGDX's ParticleBuffer:\n * https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/g2d/ParticleBuffer.java\n */\n\n/**\n * The particle buffer manages the static and dynamic buffers for a particle container.\n * @private\n * @memberof PIXI\n */\nexport class ParticleBuffer\n{\n public geometry: Geometry;\n public staticStride: number;\n public staticBuffer: Buffer;\n public staticData: Float32Array;\n public staticDataUint32: Uint32Array;\n public dynamicStride: number;\n public dynamicBuffer: Buffer;\n public dynamicData: Float32Array;\n public dynamicDataUint32: Uint32Array;\n public _updateID: number;\n\n /** Holds the indices of the geometry (quads) to draw. */\n indexBuffer: Buffer;\n\n /** The number of particles the buffer can hold. */\n private size: number;\n\n /** A list of the properties that are dynamic. */\n private dynamicProperties: IParticleRendererProperty[];\n\n /** A list of the properties that are static. */\n private staticProperties: IParticleRendererProperty[];\n\n /**\n * @param {object} properties - The properties to upload.\n * @param {boolean[]} dynamicPropertyFlags - Flags for which properties are dynamic.\n * @param {number} size - The size of the batch.\n */\n constructor(properties: IParticleRendererProperty[], dynamicPropertyFlags: boolean[], size: number)\n {\n this.geometry = new Geometry();\n\n this.indexBuffer = null;\n\n this.size = size;\n this.dynamicProperties = [];\n this.staticProperties = [];\n\n for (let i = 0; i < properties.length; ++i)\n {\n let property = properties[i];\n\n // Make copy of properties object so that when we edit the offset it doesn't\n // change all other instances of the object literal\n property = {\n attributeName: property.attributeName,\n size: property.size,\n uploadFunction: property.uploadFunction,\n type: property.type || TYPES.FLOAT,\n offset: property.offset,\n };\n\n if (dynamicPropertyFlags[i])\n {\n this.dynamicProperties.push(property);\n }\n else\n {\n this.staticProperties.push(property);\n }\n }\n\n this.staticStride = 0;\n this.staticBuffer = null;\n this.staticData = null;\n this.staticDataUint32 = null;\n\n this.dynamicStride = 0;\n this.dynamicBuffer = null;\n this.dynamicData = null;\n this.dynamicDataUint32 = null;\n\n this._updateID = 0;\n\n this.initBuffers();\n }\n\n /** Sets up the renderer context and necessary buffers. */\n private initBuffers(): void\n {\n const geometry = this.geometry;\n\n let dynamicOffset = 0;\n\n this.indexBuffer = new Buffer(utils.createIndicesForQuads(this.size), true, true);\n geometry.addIndex(this.indexBuffer);\n\n this.dynamicStride = 0;\n\n for (let i = 0; i < this.dynamicProperties.length; ++i)\n {\n const property = this.dynamicProperties[i];\n\n property.offset = dynamicOffset;\n dynamicOffset += property.size;\n this.dynamicStride += property.size;\n }\n\n const dynBuffer = new ArrayBuffer(this.size * this.dynamicStride * 4 * 4);\n\n this.dynamicData = new Float32Array(dynBuffer);\n this.dynamicDataUint32 = new Uint32Array(dynBuffer);\n this.dynamicBuffer = new Buffer(this.dynamicData, false, false);\n\n // static //\n let staticOffset = 0;\n\n this.staticStride = 0;\n\n for (let i = 0; i < this.staticProperties.length; ++i)\n {\n const property = this.staticProperties[i];\n\n property.offset = staticOffset;\n staticOffset += property.size;\n this.staticStride += property.size;\n }\n\n const statBuffer = new ArrayBuffer(this.size * this.staticStride * 4 * 4);\n\n this.staticData = new Float32Array(statBuffer);\n this.staticDataUint32 = new Uint32Array(statBuffer);\n this.staticBuffer = new Buffer(this.staticData, true, false);\n\n for (let i = 0; i < this.dynamicProperties.length; ++i)\n {\n const property = this.dynamicProperties[i];\n\n geometry.addAttribute(\n property.attributeName,\n this.dynamicBuffer,\n 0,\n property.type === TYPES.UNSIGNED_BYTE,\n property.type,\n this.dynamicStride * 4,\n property.offset * 4\n );\n }\n\n for (let i = 0; i < this.staticProperties.length; ++i)\n {\n const property = this.staticProperties[i];\n\n geometry.addAttribute(\n property.attributeName,\n this.staticBuffer,\n 0,\n property.type === TYPES.UNSIGNED_BYTE,\n property.type,\n this.staticStride * 4,\n property.offset * 4\n );\n }\n }\n\n /**\n * Uploads the dynamic properties.\n * @param children - The children to upload.\n * @param startIndex - The index to start at.\n * @param amount - The number to upload.\n */\n uploadDynamic(children: Sprite[], startIndex: number, amount: number): void\n {\n for (let i = 0; i < this.dynamicProperties.length; i++)\n {\n const property = this.dynamicProperties[i];\n\n property.uploadFunction(children, startIndex, amount,\n property.type === TYPES.UNSIGNED_BYTE ? this.dynamicDataUint32 : this.dynamicData,\n this.dynamicStride, property.offset);\n }\n\n this.dynamicBuffer._updateID++;\n }\n\n /**\n * Uploads the static properties.\n * @param children - The children to upload.\n * @param startIndex - The index to start at.\n * @param amount - The number to upload.\n */\n uploadStatic(children: Sprite[], startIndex: number, amount: number): void\n {\n for (let i = 0; i < this.staticProperties.length; i++)\n {\n const property = this.staticProperties[i];\n\n property.uploadFunction(children, startIndex, amount,\n property.type === TYPES.UNSIGNED_BYTE ? this.staticDataUint32 : this.staticData,\n this.staticStride, property.offset);\n }\n\n this.staticBuffer._updateID++;\n }\n\n /** Destroys the ParticleBuffer. */\n destroy(): void\n {\n this.indexBuffer = null;\n\n this.dynamicProperties = null;\n this.dynamicBuffer = null;\n this.dynamicData = null;\n this.dynamicDataUint32 = null;\n\n this.staticProperties = null;\n this.staticBuffer = null;\n this.staticData = null;\n this.staticDataUint32 = null;\n // all buffers are destroyed inside geometry\n this.geometry.destroy();\n }\n}\n","/**\n * Generic Mask Stack data structure\n * @memberof PIXI.utils\n * @function createIndicesForQuads\n * @param {number} size - Number of quads\n * @param {Uint16Array|Uint32Array} [outBuffer] - Buffer for output, length has to be `6 * size`\n * @returns {Uint16Array|Uint32Array} - Resulting index buffer\n */\nexport function createIndicesForQuads(\n size: number,\n outBuffer: Uint16Array | Uint32Array | null = null\n): Uint16Array | Uint32Array\n{\n // the total number of indices in our array, there are 6 points per quad.\n const totalIndices = size * 6;\n\n outBuffer = outBuffer || new Uint16Array(totalIndices);\n\n if (outBuffer.length !== totalIndices)\n {\n throw new Error(`Out buffer length is incorrect, got ${outBuffer.length} and expected ${totalIndices}`);\n }\n\n // fill the indices with the quads to draw\n for (let i = 0, j = 0; i < totalIndices; i += 6, j += 4)\n {\n outBuffer[i + 0] = j + 0;\n outBuffer[i + 1] = j + 1;\n outBuffer[i + 2] = j + 2;\n outBuffer[i + 3] = j + 0;\n outBuffer[i + 4] = j + 2;\n outBuffer[i + 5] = j + 3;\n }\n\n return outBuffer;\n}\n","import { Color, extensions, ExtensionType, Matrix, ObjectRenderer, Shader, State, TYPES, utils } from '@pixi/core';\nimport { ParticleBuffer } from './ParticleBuffer';\nimport fragment from './particles.frag';\nimport vertex from './particles.vert';\n\nimport type { ExtensionMetadata, Renderer } from '@pixi/core';\nimport type { Sprite } from '@pixi/sprite';\nimport type { ParticleContainer } from './ParticleContainer';\n\nexport interface IParticleRendererProperty\n{\n attributeName: string;\n size: number;\n type?: TYPES;\n uploadFunction: (...params: any[]) => any;\n offset: number;\n}\n\n/*\n * @author Mat Groves\n *\n * Big thanks to the very clever Matt DesLauriers https://github.com/mattdesl/\n * for creating the original PixiJS version!\n * Also a thanks to https://github.com/bchevalier for tweaking the tint and alpha so that they now\n * share 4 bytes on the vertex buffer\n *\n * Heavily inspired by LibGDX's ParticleRenderer:\n * https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/g2d/ParticleRenderer.java\n */\n\n/**\n * Renderer for Particles that is designer for speed over feature set.\n * @memberof PIXI\n */\nexport class ParticleRenderer extends ObjectRenderer\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n name: 'particle',\n type: ExtensionType.RendererPlugin,\n };\n\n /** The WebGL state in which this renderer will work. */\n public readonly state: State;\n\n /** The default shader that is used if a sprite doesn't have a more specific one. */\n public shader: Shader;\n public tempMatrix: Matrix;\n public properties: IParticleRendererProperty[];\n\n /**\n * @param renderer - The renderer this sprite batch works for.\n */\n constructor(renderer: Renderer)\n {\n super(renderer);\n\n // 65535 is max vertex index in the index buffer (see ParticleRenderer)\n // so max number of particles is 65536 / 4 = 16384\n // and max number of element in the index buffer is 16384 * 6 = 98304\n // Creating a full index buffer, overhead is 98304 * 2 = 196Ko\n // let numIndices = 98304;\n\n this.shader = null;\n\n this.properties = null;\n\n this.tempMatrix = new Matrix();\n\n this.properties = [\n // verticesData\n {\n attributeName: 'aVertexPosition',\n size: 2,\n uploadFunction: this.uploadVertices,\n offset: 0,\n },\n // positionData\n {\n attributeName: 'aPositionCoord',\n size: 2,\n uploadFunction: this.uploadPosition,\n offset: 0,\n },\n // rotationData\n {\n attributeName: 'aRotation',\n size: 1,\n uploadFunction: this.uploadRotation,\n offset: 0,\n },\n // uvsData\n {\n attributeName: 'aTextureCoord',\n size: 2,\n uploadFunction: this.uploadUvs,\n offset: 0,\n },\n // tintData\n {\n attributeName: 'aColor',\n size: 1,\n type: TYPES.UNSIGNED_BYTE,\n uploadFunction: this.uploadTint,\n offset: 0,\n },\n ];\n\n this.shader = Shader.from(vertex, fragment, {});\n this.state = State.for2d();\n }\n\n /**\n * Renders the particle container object.\n * @param container - The container to render using this ParticleRenderer.\n */\n public render(container: ParticleContainer): void\n {\n const children = container.children;\n const maxSize = container._maxSize;\n const batchSize = container._batchSize;\n const renderer = this.renderer;\n let totalChildren = children.length;\n\n if (totalChildren === 0)\n {\n return;\n }\n else if (totalChildren > maxSize && !container.autoResize)\n {\n totalChildren = maxSize;\n }\n\n let buffers = container._buffers;\n\n if (!buffers)\n {\n buffers = container._buffers = this.generateBuffers(container);\n }\n\n const baseTexture = children[0]._texture.baseTexture;\n const premultiplied = baseTexture.alphaMode > 0;\n\n // if the uvs have not updated then no point rendering just yet!\n this.state.blendMode = utils.correctBlendMode(container.blendMode, premultiplied);\n renderer.state.set(this.state);\n\n const gl = renderer.gl;\n\n const m = container.worldTransform.copyTo(this.tempMatrix);\n\n m.prepend(renderer.globalUniforms.uniforms.projectionMatrix);\n\n this.shader.uniforms.translationMatrix = m.toArray(true);\n\n this.shader.uniforms.uColor = Color.shared\n .setValue(container.tintRgb)\n .premultiply(container.worldAlpha, premultiplied)\n .toArray(this.shader.uniforms.uColor);\n\n this.shader.uniforms.uSampler = baseTexture;\n\n this.renderer.shader.bind(this.shader);\n\n let updateStatic = false;\n\n // now lets upload and render the buffers..\n for (let i = 0, j = 0; i < totalChildren; i += batchSize, j += 1)\n {\n let amount = (totalChildren - i);\n\n if (amount > batchSize)\n {\n amount = batchSize;\n }\n\n if (j >= buffers.length)\n {\n buffers.push(this._generateOneMoreBuffer(container));\n }\n\n const buffer = buffers[j];\n\n // we always upload the dynamic\n buffer.uploadDynamic(children, i, amount);\n\n const bid = container._bufferUpdateIDs[j] || 0;\n\n updateStatic = updateStatic || (buffer._updateID < bid);\n // we only upload the static content when we have to!\n if (updateStatic)\n {\n buffer._updateID = container._updateID;\n buffer.uploadStatic(children, i, amount);\n }\n\n // bind the buffer\n renderer.geometry.bind(buffer.geometry);\n gl.drawElements(gl.TRIANGLES, amount * 6, gl.UNSIGNED_SHORT, 0);\n }\n }\n\n /**\n * Creates one particle buffer for each child in the container we want to render and updates internal properties.\n * @param container - The container to render using this ParticleRenderer\n * @returns - The buffers\n */\n private generateBuffers(container: ParticleContainer): ParticleBuffer[]\n {\n const buffers = [];\n const size = container._maxSize;\n const batchSize = container._batchSize;\n const dynamicPropertyFlags = container._properties;\n\n for (let i = 0; i < size; i += batchSize)\n {\n buffers.push(new ParticleBuffer(this.properties, dynamicPropertyFlags, batchSize));\n }\n\n return buffers;\n }\n\n /**\n * Creates one more particle buffer, because container has autoResize feature.\n * @param container - The container to render using this ParticleRenderer\n * @returns - The generated buffer\n */\n private _generateOneMoreBuffer(container: ParticleContainer): ParticleBuffer\n {\n const batchSize = container._batchSize;\n const dynamicPropertyFlags = container._properties;\n\n return new ParticleBuffer(this.properties, dynamicPropertyFlags, batchSize);\n }\n\n /**\n * Uploads the vertices.\n * @param children - the array of sprites to render\n * @param startIndex - the index to start from in the children array\n * @param amount - the amount of children that will have their vertices uploaded\n * @param array - The vertices to upload.\n * @param stride - Stride to use for iteration.\n * @param offset - Offset to start at.\n */\n public uploadVertices(\n children: Sprite[], startIndex: number, amount: number,\n array: number[], stride: number, offset: number\n ): void\n {\n let w0 = 0;\n let w1 = 0;\n let h0 = 0;\n let h1 = 0;\n\n for (let i = 0; i < amount; ++i)\n {\n const sprite = children[startIndex + i];\n const texture = sprite._texture;\n const sx = sprite.scale.x;\n const sy = sprite.scale.y;\n const trim = texture.trim;\n const orig = texture.orig;\n\n if (trim)\n {\n // if the sprite is trimmed and is not a tilingsprite then we need to add the\n // extra space before transforming the sprite coords..\n w1 = trim.x - (sprite.anchor.x * orig.width);\n w0 = w1 + trim.width;\n\n h1 = trim.y - (sprite.anchor.y * orig.height);\n h0 = h1 + trim.height;\n }\n else\n {\n w0 = (orig.width) * (1 - sprite.anchor.x);\n w1 = (orig.width) * -sprite.anchor.x;\n\n h0 = orig.height * (1 - sprite.anchor.y);\n h1 = orig.height * -sprite.anchor.y;\n }\n\n array[offset] = w1 * sx;\n array[offset + 1] = h1 * sy;\n\n array[offset + stride] = w0 * sx;\n array[offset + stride + 1] = h1 * sy;\n\n array[offset + (stride * 2)] = w0 * sx;\n array[offset + (stride * 2) + 1] = h0 * sy;\n\n array[offset + (stride * 3)] = w1 * sx;\n array[offset + (stride * 3) + 1] = h0 * sy;\n\n offset += stride * 4;\n }\n }\n\n /**\n * Uploads the position.\n * @param children - the array of sprites to render\n * @param startIndex - the index to start from in the children array\n * @param amount - the amount of children that will have their positions uploaded\n * @param array - The vertices to upload.\n * @param stride - Stride to use for iteration.\n * @param offset - Offset to start at.\n */\n public uploadPosition(\n children: Sprite[], startIndex: number, amount: number,\n array: number[], stride: number, offset: number\n ): void\n {\n for (let i = 0; i < amount; i++)\n {\n const spritePosition = children[startIndex + i].position;\n\n array[offset] = spritePosition.x;\n array[offset + 1] = spritePosition.y;\n\n array[offset + stride] = spritePosition.x;\n array[offset + stride + 1] = spritePosition.y;\n\n array[offset + (stride * 2)] = spritePosition.x;\n array[offset + (stride * 2) + 1] = spritePosition.y;\n\n array[offset + (stride * 3)] = spritePosition.x;\n array[offset + (stride * 3) + 1] = spritePosition.y;\n\n offset += stride * 4;\n }\n }\n\n /**\n * Uploads the rotation.\n * @param children - the array of sprites to render\n * @param startIndex - the index to start from in the children array\n * @param amount - the amount of children that will have their rotation uploaded\n * @param array - The vertices to upload.\n * @param stride - Stride to use for iteration.\n * @param offset - Offset to start at.\n */\n public uploadRotation(\n children: Sprite[], startIndex: number, amount: number,\n array: number[], stride: number, offset: number\n ): void\n {\n for (let i = 0; i < amount; i++)\n {\n const spriteRotation = children[startIndex + i].rotation;\n\n array[offset] = spriteRotation;\n array[offset + stride] = spriteRotation;\n array[offset + (stride * 2)] = spriteRotation;\n array[offset + (stride * 3)] = spriteRotation;\n\n offset += stride * 4;\n }\n }\n\n /**\n * Uploads the UVs.\n * @param children - the array of sprites to render\n * @param startIndex - the index to start from in the children array\n * @param amount - the amount of children that will have their rotation uploaded\n * @param array - The vertices to upload.\n * @param stride - Stride to use for iteration.\n * @param offset - Offset to start at.\n */\n public uploadUvs(\n children: Sprite[], startIndex: number, amount: number,\n array: number[], stride: number, offset: number\n ): void\n {\n for (let i = 0; i < amount; ++i)\n {\n const textureUvs = children[startIndex + i]._texture._uvs;\n\n if (textureUvs)\n {\n array[offset] = textureUvs.x0;\n array[offset + 1] = textureUvs.y0;\n\n array[offset + stride] = textureUvs.x1;\n array[offset + stride + 1] = textureUvs.y1;\n\n array[offset + (stride * 2)] = textureUvs.x2;\n array[offset + (stride * 2) + 1] = textureUvs.y2;\n\n array[offset + (stride * 3)] = textureUvs.x3;\n array[offset + (stride * 3) + 1] = textureUvs.y3;\n\n offset += stride * 4;\n }\n else\n {\n // TODO you know this can be easier!\n array[offset] = 0;\n array[offset + 1] = 0;\n\n array[offset + stride] = 0;\n array[offset + stride + 1] = 0;\n\n array[offset + (stride * 2)] = 0;\n array[offset + (stride * 2) + 1] = 0;\n\n array[offset + (stride * 3)] = 0;\n array[offset + (stride * 3) + 1] = 0;\n\n offset += stride * 4;\n }\n }\n }\n\n /**\n * Uploads the tint.\n * @param children - the array of sprites to render\n * @param startIndex - the index to start from in the children array\n * @param amount - the amount of children that will have their rotation uploaded\n * @param array - The vertices to upload.\n * @param stride - Stride to use for iteration.\n * @param offset - Offset to start at.\n */\n public uploadTint(\n children: Sprite[], startIndex: number, amount: number,\n array: number[], stride: number, offset: number\n ): void\n {\n for (let i = 0; i < amount; ++i)\n {\n const sprite = children[startIndex + i];\n const result = Color.shared\n .setValue(sprite._tintRGB)\n .toPremultiplied(sprite.alpha, sprite.texture.baseTexture.alphaMode > 0);\n\n array[offset] = result;\n array[offset + stride] = result;\n array[offset + (stride * 2)] = result;\n array[offset + (stride * 3)] = result;\n\n offset += stride * 4;\n }\n }\n\n /** Destroys the ParticleRenderer. */\n public destroy(): void\n {\n super.destroy();\n\n if (this.shader)\n {\n this.shader.destroy();\n this.shader = null;\n }\n\n this.tempMatrix = null;\n }\n}\n\nextensions.add(ParticleRenderer);\n","/**\n * Constants that define the type of gradient on text.\n * @static\n * @memberof PIXI\n * @type {object}\n */\nexport enum TEXT_GRADIENT\n// eslint-disable-next-line @typescript-eslint/indent\n{\n /**\n * Vertical gradient\n * @default 0\n */\n LINEAR_VERTICAL = 0,\n /**\n * Linear gradient\n * @default 1\n */\n LINEAR_HORIZONTAL = 1\n}\n","import { settings } from '@pixi/core';\n\nimport type { ICanvas, ICanvasRenderingContext2D, ICanvasRenderingContext2DSettings } from '@pixi/core';\nimport type { TextStyle, TextStyleWhiteSpace } from './TextStyle';\n\n// The type for Intl.Segmenter is only available since TypeScript 4.7.2, so let's make a polyfill for it.\ninterface ISegmentData\n{\n segment: string;\n}\ninterface ISegments\n{\n [Symbol.iterator](): IterableIterator;\n}\ninterface ISegmenter\n{\n segment(input: string): ISegments;\n}\ninterface IIntl\n{\n Segmenter?: {\n prototype: ISegmenter;\n new(): ISegmenter;\n };\n}\n\n/**\n * Internal return object for {@link PIXI.TextMetrics.measureFont `TextMetrics.measureFont`}.\n * @typedef {object} FontMetrics\n * @property {number} ascent - The ascent distance\n * @property {number} descent - The descent distance\n * @property {number} fontSize - Font size from ascent to descent\n * @memberof PIXI.TextMetrics\n * @private\n */\n\n/**\n * A number, or a string containing a number.\n * @memberof PIXI\n * @typedef {object} IFontMetrics\n * @property {number} ascent - Font ascent\n * @property {number} descent - Font descent\n * @property {number} fontSize - Font size\n */\ninterface IFontMetrics\n{\n ascent: number;\n descent: number;\n fontSize: number;\n}\n\ntype CharacterWidthCache = Record;\n\n// Default settings used for all getContext calls\nconst contextSettings: ICanvasRenderingContext2DSettings = {\n // TextMetrics requires getImageData readback for measuring fonts.\n willReadFrequently: true,\n};\n\n/**\n * The TextMetrics object represents the measurement of a block of text with a specified style.\n * @example\n * import { TextMetrics, TextStyle } from 'pixi.js';\n *\n * const style = new TextStyle({\n * fontFamily: 'Arial',\n * fontSize: 24,\n * fill: 0xff1010,\n * align: 'center',\n * });\n * const textMetrics = TextMetrics.measureText('Your text', style);\n * @memberof PIXI\n */\nexport class TextMetrics\n{\n /** The text that was measured. */\n public text: string;\n\n /** The style that was measured. */\n public style: TextStyle;\n\n /** The measured width of the text. */\n public width: number;\n\n /** The measured height of the text. */\n public height: number;\n\n /** An array of lines of the text broken by new lines and wrapping is specified in style. */\n public lines: string[];\n\n /** An array of the line widths for each line matched to `lines`. */\n public lineWidths: number[];\n\n /** The measured line height for this style. */\n public lineHeight: number;\n\n /** The maximum line width for all measured lines. */\n public maxLineWidth: number;\n\n /** The font properties object from TextMetrics.measureFont. */\n public fontProperties: IFontMetrics;\n\n /**\n * String used for calculate font metrics.\n * These characters are all tall to help calculate the height required for text.\n */\n public static METRICS_STRING = '|ÉqÅ';\n\n /** Baseline symbol for calculate font metrics. */\n public static BASELINE_SYMBOL = 'M';\n\n /** Baseline multiplier for calculate font metrics. */\n public static BASELINE_MULTIPLIER = 1.4;\n\n /** Height multiplier for setting height of canvas to calculate font metrics. */\n public static HEIGHT_MULTIPLIER = 2.0;\n\n /**\n * A Unicode \"character\", or \"grapheme cluster\", can be composed of multiple Unicode code points,\n * such as letters with diacritical marks (e.g. `'\\u0065\\u0301'`, letter e with acute)\n * or emojis with modifiers (e.g. `'\\uD83E\\uDDD1\\u200D\\uD83D\\uDCBB'`, technologist).\n * The new `Intl.Segmenter` API in ES2022 can split the string into grapheme clusters correctly. If it is not available,\n * PixiJS will fallback to use the iterator of String, which can only spilt the string into code points.\n * If you want to get full functionality in environments that don't support `Intl.Segmenter` (such as Firefox),\n * you can use other libraries such as [grapheme-splitter]{@link https://www.npmjs.com/package/grapheme-splitter}\n * or [graphemer]{@link https://www.npmjs.com/package/graphemer} to create a polyfill. Since these libraries can be\n * relatively large in size to handle various Unicode grapheme clusters properly, PixiJS won't use them directly.\n */\n public static graphemeSegmenter: (s: string) => string[] = (() =>\n {\n if (typeof (Intl as IIntl)?.Segmenter === 'function')\n {\n const segmenter = new (Intl as IIntl).Segmenter();\n\n return (s: string) => [...segmenter.segment(s)].map((x) => x.segment);\n }\n\n return (s: string) => [...s];\n })();\n\n public static _experimentalLetterSpacingSupported?: boolean;\n\n /**\n * Checking that we can use modern canvas 2D API.\n *\n * Note: This is an unstable API, Chrome < 94 use `textLetterSpacing`, later versions use `letterSpacing`.\n * @see PIXI.TextMetrics.experimentalLetterSpacing\n * @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/letterSpacing\n * @see https://developer.chrome.com/origintrials/#/view_trial/3585991203293757441\n */\n public static get experimentalLetterSpacingSupported(): boolean\n {\n let result = TextMetrics._experimentalLetterSpacingSupported;\n\n if (result !== undefined)\n {\n const proto = settings.ADAPTER.getCanvasRenderingContext2D().prototype;\n\n result\n = TextMetrics._experimentalLetterSpacingSupported\n = 'letterSpacing' in proto || 'textLetterSpacing' in proto;\n }\n\n return result;\n }\n\n /**\n * New rendering behavior for letter-spacing which uses Chrome's new native API. This will\n * lead to more accurate letter-spacing results because it does not try to manually draw\n * each character. However, this Chrome API is experimental and may not serve all cases yet.\n * @see PIXI.TextMetrics.experimentalLetterSpacingSupported\n */\n public static experimentalLetterSpacing = false;\n\n /** Cache of {@see PIXI.TextMetrics.FontMetrics} objects. */\n private static _fonts: Record = {};\n\n /** Cache of new line chars. */\n private static _newlines: number[] = [\n 0x000A, // line feed\n 0x000D, // carriage return\n ];\n\n /** Cache of breaking spaces. */\n private static _breakingSpaces: number[] = [\n 0x0009, // character tabulation\n 0x0020, // space\n 0x2000, // en quad\n 0x2001, // em quad\n 0x2002, // en space\n 0x2003, // em space\n 0x2004, // three-per-em space\n 0x2005, // four-per-em space\n 0x2006, // six-per-em space\n 0x2008, // punctuation space\n 0x2009, // thin space\n 0x200A, // hair space\n 0x205F, // medium mathematical space\n 0x3000, // ideographic space\n ];\n\n private static __canvas: ICanvas;\n private static __context: ICanvasRenderingContext2D;\n\n /**\n * @param text - the text that was measured\n * @param style - the style that was measured\n * @param width - the measured width of the text\n * @param height - the measured height of the text\n * @param lines - an array of the lines of text broken by new lines and wrapping if specified in style\n * @param lineWidths - an array of the line widths for each line matched to `lines`\n * @param lineHeight - the measured line height for this style\n * @param maxLineWidth - the maximum line width for all measured lines\n * @param {PIXI.IFontMetrics} fontProperties - the font properties object from TextMetrics.measureFont\n */\n constructor(text: string, style: TextStyle, width: number, height: number, lines: string[], lineWidths: number[],\n lineHeight: number, maxLineWidth: number, fontProperties: IFontMetrics)\n {\n this.text = text;\n this.style = style;\n this.width = width;\n this.height = height;\n this.lines = lines;\n this.lineWidths = lineWidths;\n this.lineHeight = lineHeight;\n this.maxLineWidth = maxLineWidth;\n this.fontProperties = fontProperties;\n }\n\n /**\n * Measures the supplied string of text and returns a Rectangle.\n * @param text - The text to measure.\n * @param style - The text style to use for measuring\n * @param wordWrap - Override for if word-wrap should be applied to the text.\n * @param canvas - optional specification of the canvas to use for measuring.\n * @returns Measured width and height of the text.\n */\n public static measureText(\n text: string,\n style: TextStyle,\n wordWrap?: boolean,\n canvas: ICanvas = TextMetrics._canvas\n ): TextMetrics\n {\n wordWrap = (wordWrap === undefined || wordWrap === null) ? style.wordWrap : wordWrap;\n const font = style.toFontString();\n const fontProperties = TextMetrics.measureFont(font);\n\n // fallback in case UA disallow canvas data extraction\n // (toDataURI, getImageData functions)\n if (fontProperties.fontSize === 0)\n {\n fontProperties.fontSize = style.fontSize as number;\n fontProperties.ascent = style.fontSize as number;\n }\n\n const context = canvas.getContext('2d', contextSettings);\n\n context.font = font;\n\n const outputText = wordWrap ? TextMetrics.wordWrap(text, style, canvas) : text;\n const lines = outputText.split(/(?:\\r\\n|\\r|\\n)/);\n const lineWidths = new Array(lines.length);\n let maxLineWidth = 0;\n\n for (let i = 0; i < lines.length; i++)\n {\n const lineWidth = TextMetrics._measureText(lines[i], style.letterSpacing, context);\n\n lineWidths[i] = lineWidth;\n maxLineWidth = Math.max(maxLineWidth, lineWidth);\n }\n let width = maxLineWidth + style.strokeThickness;\n\n if (style.dropShadow)\n {\n width += style.dropShadowDistance;\n }\n\n const lineHeight = style.lineHeight || fontProperties.fontSize + style.strokeThickness;\n let height\n = Math.max(lineHeight, fontProperties.fontSize + (style.strokeThickness * 2)) + style.leading\n + ((lines.length - 1) * (lineHeight + style.leading));\n\n if (style.dropShadow)\n {\n height += style.dropShadowDistance;\n }\n\n return new TextMetrics(\n text,\n style,\n width,\n height,\n lines,\n lineWidths,\n lineHeight + style.leading,\n maxLineWidth,\n fontProperties\n );\n }\n\n private static _measureText(\n text: string,\n letterSpacing: number,\n context: ICanvasRenderingContext2D\n )\n {\n let useExperimentalLetterSpacing = false;\n\n if (TextMetrics.experimentalLetterSpacingSupported)\n {\n if (TextMetrics.experimentalLetterSpacing)\n {\n context.letterSpacing = `${letterSpacing}px`;\n context.textLetterSpacing = `${letterSpacing}px`;\n useExperimentalLetterSpacing = true;\n }\n else\n {\n context.letterSpacing = '0px';\n context.textLetterSpacing = '0px';\n }\n }\n\n let width = context.measureText(text).width;\n\n if (width > 0)\n {\n if (useExperimentalLetterSpacing)\n {\n width -= letterSpacing;\n }\n else\n {\n width += (TextMetrics.graphemeSegmenter(text).length - 1) * letterSpacing;\n }\n }\n\n return width;\n }\n\n /**\n * Applies newlines to a string to have it optimally fit into the horizontal\n * bounds set by the Text object's wordWrapWidth property.\n * @param text - String to apply word wrapping to\n * @param style - the style to use when wrapping\n * @param canvas - optional specification of the canvas to use for measuring.\n * @returns New string with new lines applied where required\n */\n private static wordWrap(\n text: string,\n style: TextStyle,\n canvas: ICanvas = TextMetrics._canvas\n ): string\n {\n const context = canvas.getContext('2d', contextSettings);\n\n let width = 0;\n let line = '';\n let lines = '';\n\n const cache: CharacterWidthCache = Object.create(null);\n const { letterSpacing, whiteSpace } = style;\n\n // How to handle whitespaces\n const collapseSpaces = TextMetrics.collapseSpaces(whiteSpace);\n const collapseNewlines = TextMetrics.collapseNewlines(whiteSpace);\n\n // whether or not spaces may be added to the beginning of lines\n let canPrependSpaces = !collapseSpaces;\n\n // There is letterSpacing after every char except the last one\n // t_h_i_s_' '_i_s_' '_a_n_' '_e_x_a_m_p_l_e_' '_!\n // so for convenience the above needs to be compared to width + 1 extra letterSpace\n // t_h_i_s_' '_i_s_' '_a_n_' '_e_x_a_m_p_l_e_' '_!_\n // ________________________________________________\n // And then the final space is simply no appended to each line\n const wordWrapWidth = style.wordWrapWidth + letterSpacing;\n\n // break text into words, spaces and newline chars\n const tokens = TextMetrics.tokenize(text);\n\n for (let i = 0; i < tokens.length; i++)\n {\n // get the word, space or newlineChar\n let token = tokens[i];\n\n // if word is a new line\n if (TextMetrics.isNewline(token))\n {\n // keep the new line\n if (!collapseNewlines)\n {\n lines += TextMetrics.addLine(line);\n canPrependSpaces = !collapseSpaces;\n line = '';\n width = 0;\n continue;\n }\n\n // if we should collapse new lines\n // we simply convert it into a space\n token = ' ';\n }\n\n // if we should collapse repeated whitespaces\n if (collapseSpaces)\n {\n // check both this and the last tokens for spaces\n const currIsBreakingSpace = TextMetrics.isBreakingSpace(token);\n const lastIsBreakingSpace = TextMetrics.isBreakingSpace(line[line.length - 1]);\n\n if (currIsBreakingSpace && lastIsBreakingSpace)\n {\n continue;\n }\n }\n\n // get word width from cache if possible\n const tokenWidth = TextMetrics.getFromCache(token, letterSpacing, cache, context);\n\n // word is longer than desired bounds\n if (tokenWidth > wordWrapWidth)\n {\n // if we are not already at the beginning of a line\n if (line !== '')\n {\n // start newlines for overflow words\n lines += TextMetrics.addLine(line);\n line = '';\n width = 0;\n }\n\n // break large word over multiple lines\n if (TextMetrics.canBreakWords(token, style.breakWords))\n {\n // break word into characters\n const characters = TextMetrics.wordWrapSplit(token);\n\n // loop the characters\n for (let j = 0; j < characters.length; j++)\n {\n let char = characters[j];\n let lastChar = char;\n\n let k = 1;\n\n // we are not at the end of the token\n while (characters[j + k])\n {\n const nextChar = characters[j + k];\n\n // should not split chars\n if (!TextMetrics.canBreakChars(lastChar, nextChar, token, j, style.breakWords))\n {\n // combine chars & move forward one\n char += nextChar;\n }\n else\n {\n break;\n }\n\n lastChar = nextChar;\n k++;\n }\n\n j += k - 1;\n\n const characterWidth = TextMetrics.getFromCache(char, letterSpacing, cache, context);\n\n if (characterWidth + width > wordWrapWidth)\n {\n lines += TextMetrics.addLine(line);\n canPrependSpaces = false;\n line = '';\n width = 0;\n }\n\n line += char;\n width += characterWidth;\n }\n }\n\n // run word out of the bounds\n else\n {\n // if there are words in this line already\n // finish that line and start a new one\n if (line.length > 0)\n {\n lines += TextMetrics.addLine(line);\n line = '';\n width = 0;\n }\n\n const isLastToken = i === tokens.length - 1;\n\n // give it its own line if it's not the end\n lines += TextMetrics.addLine(token, !isLastToken);\n canPrependSpaces = false;\n line = '';\n width = 0;\n }\n }\n\n // word could fit\n else\n {\n // word won't fit because of existing words\n // start a new line\n if (tokenWidth + width > wordWrapWidth)\n {\n // if its a space we don't want it\n canPrependSpaces = false;\n\n // add a new line\n lines += TextMetrics.addLine(line);\n\n // start a new line\n line = '';\n width = 0;\n }\n\n // don't add spaces to the beginning of lines\n if (line.length > 0 || !TextMetrics.isBreakingSpace(token) || canPrependSpaces)\n {\n // add the word to the current line\n line += token;\n\n // update width counter\n width += tokenWidth;\n }\n }\n }\n\n lines += TextMetrics.addLine(line, false);\n\n return lines;\n }\n\n /**\n * Convienience function for logging each line added during the wordWrap method.\n * @param line - The line of text to add\n * @param newLine - Add new line character to end\n * @returns A formatted line\n */\n private static addLine(line: string, newLine = true): string\n {\n line = TextMetrics.trimRight(line);\n\n line = (newLine) ? `${line}\\n` : line;\n\n return line;\n }\n\n /**\n * Gets & sets the widths of calculated characters in a cache object\n * @param key - The key\n * @param letterSpacing - The letter spacing\n * @param cache - The cache\n * @param context - The canvas context\n * @returns The from cache.\n */\n private static getFromCache(key: string, letterSpacing: number, cache: CharacterWidthCache,\n context: ICanvasRenderingContext2D): number\n {\n let width = cache[key];\n\n if (typeof width !== 'number')\n {\n width = TextMetrics._measureText(key, letterSpacing, context) + letterSpacing;\n cache[key] = width;\n }\n\n return width;\n }\n\n /**\n * Determines whether we should collapse breaking spaces.\n * @param whiteSpace - The TextStyle property whiteSpace\n * @returns Should collapse\n */\n private static collapseSpaces(whiteSpace: TextStyleWhiteSpace): boolean\n {\n return (whiteSpace === 'normal' || whiteSpace === 'pre-line');\n }\n\n /**\n * Determines whether we should collapse newLine chars.\n * @param whiteSpace - The white space\n * @returns should collapse\n */\n private static collapseNewlines(whiteSpace: TextStyleWhiteSpace): boolean\n {\n return (whiteSpace === 'normal');\n }\n\n /**\n * Trims breaking whitespaces from string.\n * @param text - The text\n * @returns Trimmed string\n */\n private static trimRight(text: string): string\n {\n if (typeof text !== 'string')\n {\n return '';\n }\n\n for (let i = text.length - 1; i >= 0; i--)\n {\n const char = text[i];\n\n if (!TextMetrics.isBreakingSpace(char))\n {\n break;\n }\n\n text = text.slice(0, -1);\n }\n\n return text;\n }\n\n /**\n * Determines if char is a newline.\n * @param char - The character\n * @returns True if newline, False otherwise.\n */\n private static isNewline(char: string): boolean\n {\n if (typeof char !== 'string')\n {\n return false;\n }\n\n return TextMetrics._newlines.includes(char.charCodeAt(0));\n }\n\n /**\n * Determines if char is a breaking whitespace.\n *\n * It allows one to determine whether char should be a breaking whitespace\n * For example certain characters in CJK langs or numbers.\n * It must return a boolean.\n * @param char - The character\n * @param [_nextChar] - The next character\n * @returns True if whitespace, False otherwise.\n */\n static isBreakingSpace(char: string, _nextChar?: string): boolean\n {\n if (typeof char !== 'string')\n {\n return false;\n }\n\n return TextMetrics._breakingSpaces.includes(char.charCodeAt(0));\n }\n\n /**\n * Splits a string into words, breaking-spaces and newLine characters\n * @param text - The text\n * @returns A tokenized array\n */\n private static tokenize(text: string): string[]\n {\n const tokens: string[] = [];\n let token = '';\n\n if (typeof text !== 'string')\n {\n return tokens;\n }\n\n for (let i = 0; i < text.length; i++)\n {\n const char = text[i];\n const nextChar = text[i + 1];\n\n if (TextMetrics.isBreakingSpace(char, nextChar) || TextMetrics.isNewline(char))\n {\n if (token !== '')\n {\n tokens.push(token);\n token = '';\n }\n\n tokens.push(char);\n\n continue;\n }\n\n token += char;\n }\n\n if (token !== '')\n {\n tokens.push(token);\n }\n\n return tokens;\n }\n\n /**\n * Overridable helper method used internally by TextMetrics, exposed to allow customizing the class's behavior.\n *\n * It allows one to customise which words should break\n * Examples are if the token is CJK or numbers.\n * It must return a boolean.\n * @param _token - The token\n * @param breakWords - The style attr break words\n * @returns Whether to break word or not\n */\n static canBreakWords(_token: string, breakWords: boolean): boolean\n {\n return breakWords;\n }\n\n /**\n * Overridable helper method used internally by TextMetrics, exposed to allow customizing the class's behavior.\n *\n * It allows one to determine whether a pair of characters\n * should be broken by newlines\n * For example certain characters in CJK langs or numbers.\n * It must return a boolean.\n * @param _char - The character\n * @param _nextChar - The next character\n * @param _token - The token/word the characters are from\n * @param _index - The index in the token of the char\n * @param _breakWords - The style attr break words\n * @returns whether to break word or not\n */\n static canBreakChars(_char: string, _nextChar: string, _token: string, _index: number,\n _breakWords: boolean): boolean\n {\n return true;\n }\n\n /**\n * Overridable helper method used internally by TextMetrics, exposed to allow customizing the class's behavior.\n *\n * It is called when a token (usually a word) has to be split into separate pieces\n * in order to determine the point to break a word.\n * It must return an array of characters.\n * @param token - The token to split\n * @returns The characters of the token\n * @see TextMetrics.graphemeSegmenter\n */\n static wordWrapSplit(token: string): string[]\n {\n return TextMetrics.graphemeSegmenter(token);\n }\n\n /**\n * Calculates the ascent, descent and fontSize of a given font-style\n * @param font - String representing the style of the font\n * @returns Font properties object\n */\n public static measureFont(font: string): IFontMetrics\n {\n // as this method is used for preparing assets, don't recalculate things if we don't need to\n if (TextMetrics._fonts[font])\n {\n return TextMetrics._fonts[font];\n }\n\n const properties: IFontMetrics = {\n ascent: 0,\n descent: 0,\n fontSize: 0,\n };\n\n const canvas = TextMetrics._canvas;\n const context = TextMetrics._context;\n\n context.font = font;\n\n const metricsString = TextMetrics.METRICS_STRING + TextMetrics.BASELINE_SYMBOL;\n const width = Math.ceil(context.measureText(metricsString).width);\n let baseline = Math.ceil(context.measureText(TextMetrics.BASELINE_SYMBOL).width);\n const height = Math.ceil(TextMetrics.HEIGHT_MULTIPLIER * baseline);\n\n baseline = baseline * TextMetrics.BASELINE_MULTIPLIER | 0;\n\n if (width === 0 || height === 0)\n {\n TextMetrics._fonts[font] = properties;\n\n return properties;\n }\n\n canvas.width = width;\n canvas.height = height;\n\n context.fillStyle = '#f00';\n context.fillRect(0, 0, width, height);\n\n context.font = font;\n\n context.textBaseline = 'alphabetic';\n context.fillStyle = '#000';\n context.fillText(metricsString, 0, baseline);\n\n const imagedata = context.getImageData(0, 0, width, height).data;\n const pixels = imagedata.length;\n const line = width * 4;\n\n let i = 0;\n let idx = 0;\n let stop = false;\n\n // ascent. scan from top to bottom until we find a non red pixel\n for (i = 0; i < baseline; ++i)\n {\n for (let j = 0; j < line; j += 4)\n {\n if (imagedata[idx + j] !== 255)\n {\n stop = true;\n break;\n }\n }\n if (!stop)\n {\n idx += line;\n }\n else\n {\n break;\n }\n }\n\n properties.ascent = baseline - i;\n\n idx = pixels - line;\n stop = false;\n\n // descent. scan from bottom to top until we find a non red pixel\n for (i = height; i > baseline; --i)\n {\n for (let j = 0; j < line; j += 4)\n {\n if (imagedata[idx + j] !== 255)\n {\n stop = true;\n break;\n }\n }\n\n if (!stop)\n {\n idx -= line;\n }\n else\n {\n break;\n }\n }\n\n properties.descent = i - baseline;\n properties.fontSize = properties.ascent + properties.descent;\n\n TextMetrics._fonts[font] = properties;\n\n return properties;\n }\n\n /**\n * Clear font metrics in metrics cache.\n * @param {string} [font] - font name. If font name not set then clear cache for all fonts.\n */\n public static clearMetrics(font = ''): void\n {\n if (font)\n {\n delete TextMetrics._fonts[font];\n }\n else\n {\n TextMetrics._fonts = {};\n }\n }\n\n /**\n * Cached canvas element for measuring text\n * TODO: this should be private, but isn't because of backward compat, will fix later.\n * @ignore\n */\n public static get _canvas(): ICanvas\n {\n if (!TextMetrics.__canvas)\n {\n let canvas: ICanvas;\n\n try\n {\n // OffscreenCanvas2D measureText can be up to 40% faster.\n const c = new OffscreenCanvas(0, 0);\n const context = c.getContext('2d', contextSettings);\n\n if (context?.measureText)\n {\n TextMetrics.__canvas = c;\n\n return c;\n }\n\n canvas = settings.ADAPTER.createCanvas();\n }\n catch (ex)\n {\n canvas = settings.ADAPTER.createCanvas();\n }\n canvas.width = canvas.height = 10;\n TextMetrics.__canvas = canvas;\n }\n\n return TextMetrics.__canvas;\n }\n\n /**\n * TODO: this should be private, but isn't because of backward compat, will fix later.\n * @ignore\n */\n public static get _context(): ICanvasRenderingContext2D\n {\n if (!TextMetrics.__context)\n {\n TextMetrics.__context = TextMetrics._canvas.getContext('2d', contextSettings);\n }\n\n return TextMetrics.__context;\n }\n}\n","// disabling eslint for now, going to rewrite this in v5\n/* eslint-disable */\n\nimport { TEXT_GRADIENT } from './const';\nimport { Color } from '@pixi/core';\n\nexport type TextStyleAlign = 'left'|'center'|'right'|'justify';\nexport type TextStyleFill = string|string[]|number|number[]|CanvasGradient|CanvasPattern;\nexport type TextStyleFontStyle = 'normal'|'italic'|'oblique';\nexport type TextStyleFontVariant = 'normal'|'small-caps';\nexport type TextStyleFontWeight = 'normal'|'bold'|'bolder'|'lighter'|'100'|'200'|'300'|'400'|'500'|'600'|'700'|'800'|'900';\nexport type TextStyleLineJoin = 'miter'|'round'|'bevel';\nexport type TextStyleTextBaseline = 'alphabetic'|'top'|'hanging'|'middle'|'ideographic'|'bottom';\nexport type TextStyleWhiteSpace = 'normal'|'pre'|'pre-line';\n\n/**\n * Generic interface for TextStyle options.\n * @memberof PIXI\n */\nexport interface ITextStyle {\n /**\n * Alignment for multiline text, does not affect single line text\n * @type {'left'|'center'|'right'|'justify'}\n */\n align: TextStyleAlign;\n /** Indicates if lines can be wrapped within words, it needs wordWrap to be set to true */\n breakWords: boolean;\n /** Set a drop shadow for the text */\n dropShadow: boolean;\n /** Set alpha for the drop shadow */\n dropShadowAlpha: number;\n /** Set a angle of the drop shadow */\n dropShadowAngle: number;\n /** Set a shadow blur radius */\n dropShadowBlur: number;\n /** A fill style to be used on the dropshadow e.g., 'red', '#00FF00' */\n dropShadowColor: string|number;\n /** Set a distance of the drop shadow */\n dropShadowDistance: number;\n /**\n * A canvas fillstyle that will be used on the text e.g., 'red', '#00FF00'.\n * Can be an array to create a gradient, e.g., `['#000000','#FFFFFF']`\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/fillStyle|MDN}\n * @type {string|string[]|number|number[]|CanvasGradient|CanvasPattern}\n */\n fill: TextStyleFill;\n /**\n * If fill is an array of colours to create a gradient, this can change the\n * type/direction of the gradient. See {@link PIXI.TEXT_GRADIENT}\n * @type {PIXI.TEXT_GRADIENT}\n */\n fillGradientType: TEXT_GRADIENT;\n /**\n * If fill is an array of colours to create a gradient, this array can set\n * the stop points (numbers between 0 and 1) for the color, overriding the\n * default behaviour of evenly spacing them.\n */\n fillGradientStops: number[];\n /**\n * The font family, can be a single font name, or a list of names where the first\n * is the preferred font.\n */\n fontFamily: string | string[];\n /**\n * The font size (as a number it converts to px, but as a string,\n * equivalents are '26px','20pt','160%' or '1.6em')\n */\n fontSize: number | string;\n /**\n * The font style.\n * @type {'normal'|'italic'|'oblique'}\n */\n fontStyle: TextStyleFontStyle;\n /**\n * The font variant.\n * @type {'normal'|'small-caps'}\n */\n fontVariant: TextStyleFontVariant;\n /**\n * The font weight.\n * @type {'normal'|'bold'|'bolder'|'lighter'|'100'|'200'|'300'|'400'|'500'|'600'|'700'|'800'|'900'}\n */\n fontWeight: TextStyleFontWeight;\n /** The height of the line, a number that represents the vertical space that a letter uses. */\n leading: number;\n /** The amount of spacing between letters, default is 0 */\n letterSpacing: number;\n /** The line height, a number that represents the vertical space that a letter uses */\n lineHeight: number;\n /**\n * The lineJoin property sets the type of corner created, it can resolve\n * spiked text issues. Possible values \"miter\" (creates a sharp corner),\n * \"round\" (creates a round corner) or \"bevel\" (creates a squared corner).\n * @type {'miter'|'round'|'bevel'}\n */\n lineJoin: TextStyleLineJoin;\n /**\n * The miter limit to use when using the 'miter' lineJoin mode. This can reduce\n * or increase the spikiness of rendered text.\n */\n miterLimit: number;\n /**\n * Occasionally some fonts are cropped. Adding some padding will prevent this from\n * happening by adding padding to all sides of the text.\n */\n padding: number;\n /** A canvas fillstyle that will be used on the text stroke, e.g., 'blue', '#FCFF00' */\n stroke: string|number;\n /** A number that represents the thickness of the stroke. A value of 0 will disable stroke. */\n strokeThickness: number;\n /**\n * The baseline of the text that is rendered.\n * @type {'alphabetic'|'top'|'hanging'|'middle'|'ideographic'|'bottom'}\n */\n textBaseline: TextStyleTextBaseline;\n /** Trim transparent borders */\n trim: boolean;\n /**\n * Determines whether newlines & spaces are collapsed or preserved \"normal\"\n * (collapse, collapse), \"pre\" (preserve, preserve) | \"pre-line\" (preserve,\n * collapse). It needs wordWrap to be set to true.\n * @type {'normal'|'pre'|'pre-line'}\n */\n whiteSpace: TextStyleWhiteSpace;\n /** Indicates if word wrap should be used */\n wordWrap: boolean;\n /** The width at which text will wrap, it needs wordWrap to be set to true */\n wordWrapWidth: number;\n}\n\nconst genericFontFamilies = [\n 'serif',\n 'sans-serif',\n 'monospace',\n 'cursive',\n 'fantasy',\n 'system-ui',\n];\n\n/**\n * A TextStyle Object contains information to decorate a Text objects.\n *\n * An instance can be shared between multiple Text objects; then changing the style will update all text objects using it.\n *\n * A tool can be used to generate a text style [here](https://pixijs.io/pixi-text-style).\n *\n * @memberof PIXI\n * @example\n * import { TextStyle } from 'pixi.js';\n * const style = new TextStyle({\n * fontFamily: ['Helvetica', 'Arial', 'sans-serif'],\n * fontSize: 36,\n * });\n */\nexport class TextStyle implements ITextStyle\n{\n /**\n * Default style options used for all TextStyle instances.\n * @type {PIXI.ITextStyle}\n */\n public static defaultStyle: ITextStyle = {\n /**\n * See {@link PIXI.TextStyle.align}\n * @type {'left'|'center'|'right'|'justify'}\n */\n align: 'left',\n /** See {@link PIXI.TextStyle.breakWords} */\n breakWords: false,\n /** See {@link PIXI.TextStyle.dropShadow} */\n dropShadow: false,\n /** See {@link PIXI.TextStyle.dropShadowAlpha} */\n dropShadowAlpha: 1,\n /**\n * See {@link PIXI.TextStyle.dropShadowAngle}\n * @type {number}\n * @default Math.PI / 6\n */\n dropShadowAngle: Math.PI / 6,\n /** See {@link PIXI.TextStyle.dropShadowBlur} */\n dropShadowBlur: 0,\n /**\n * See {@link PIXI.TextStyle.dropShadowColor}\n * @type {string|number}\n */\n dropShadowColor: 'black',\n /** See {@link PIXI.TextStyle.dropShadowDistance} */\n dropShadowDistance: 5,\n /**\n * See {@link PIXI.TextStyle.fill}\n * @type {string|string[]|number|number[]|CanvasGradient|CanvasPattern}\n */\n fill: 'black',\n /**\n * See {@link PIXI.TextStyle.fillGradientType}\n * @type {PIXI.TEXT_GRADIENT}\n * @default PIXI.TEXT_GRADIENT.LINEAR_VERTICAL\n */\n fillGradientType: TEXT_GRADIENT.LINEAR_VERTICAL,\n /**\n * See {@link PIXI.TextStyle.fillGradientStops}\n * @type {number[]}\n * @default []\n */\n fillGradientStops: [],\n /**\n * See {@link PIXI.TextStyle.fontFamily}\n * @type {string|string[]}\n */\n fontFamily: 'Arial',\n /**\n * See {@link PIXI.TextStyle.fontSize}\n * @type {number|string} \n */\n fontSize: 26,\n /**\n * See {@link PIXI.TextStyle.fontStyle}\n * @type {'normal'|'italic'|'oblique'}\n */\n fontStyle: 'normal',\n /**\n * See {@link PIXI.TextStyle.fontVariant}\n * @type {'normal'|'small-caps'}\n */\n fontVariant: 'normal',\n /**\n * See {@link PIXI.TextStyle.fontWeight}\n * @type {'normal'|'bold'|'bolder'|'lighter'|'100'|'200'|'300'|'400'|'500'|'600'|'700'|'800'|'900'}\n */\n fontWeight: 'normal',\n /** See {@link PIXI.TextStyle.leading} */\n leading: 0,\n /** See {@link PIXI.TextStyle.letterSpacing} */\n letterSpacing: 0,\n /** See {@link PIXI.TextStyle.lineHeight} */\n lineHeight: 0,\n /**\n * See {@link PIXI.TextStyle.lineJoin}\n * @type {'miter'|'round'|'bevel'}\n */\n lineJoin: 'miter',\n /** See {@link PIXI.TextStyle.miterLimit} */\n miterLimit: 10,\n /** See {@link PIXI.TextStyle.padding} */\n padding: 0,\n /**\n * See {@link PIXI.TextStyle.stroke}\n * @type {string|number}\n */\n stroke: 'black',\n /** See {@link PIXI.TextStyle.strokeThickness} */\n strokeThickness: 0,\n /**\n * See {@link PIXI.TextStyle.textBaseline} \n * @type {'alphabetic'|'top'|'hanging'|'middle'|'ideographic'|'bottom'}\n */\n textBaseline: 'alphabetic',\n /** See {@link PIXI.TextStyle.trim} */\n trim: false,\n /**\n * See {@link PIXI.TextStyle.whiteSpace}\n * @type {'normal'|'pre'|'pre-line'}\n */\n whiteSpace: 'pre',\n /** See {@link PIXI.TextStyle.wordWrap} */\n wordWrap: false,\n /** See {@link PIXI.TextStyle.wordWrapWidth} */\n wordWrapWidth: 100,\n };\n\n public styleID: number;\n\n protected _align: TextStyleAlign;\n protected _breakWords: boolean;\n protected _dropShadow: boolean;\n protected _dropShadowAlpha: number;\n protected _dropShadowAngle: number;\n protected _dropShadowBlur: number;\n protected _dropShadowColor: string|number;\n protected _dropShadowDistance: number;\n protected _fill: TextStyleFill;\n protected _fillGradientType: TEXT_GRADIENT;\n protected _fillGradientStops: number[];\n protected _fontFamily: string|string[];\n protected _fontSize: number|string;\n protected _fontStyle: TextStyleFontStyle;\n protected _fontVariant: TextStyleFontVariant;\n protected _fontWeight: TextStyleFontWeight;\n protected _letterSpacing: number;\n protected _lineHeight: number;\n protected _lineJoin: TextStyleLineJoin;\n protected _miterLimit: number;\n protected _padding: number;\n protected _stroke: string|number;\n protected _strokeThickness: number;\n protected _textBaseline: TextStyleTextBaseline;\n protected _trim: boolean;\n protected _whiteSpace: TextStyleWhiteSpace;\n protected _wordWrap: boolean;\n protected _wordWrapWidth: number;\n protected _leading: number;\n\n /**\n * @param style - TextStyle properties to be set on the text. See {@link PIXI.TextStyle.defaultStyle}\n * for the default values.\n */\n constructor(style?: Partial)\n {\n this.styleID = 0;\n\n this.reset();\n\n deepCopyProperties(this, style, style);\n }\n\n /**\n * Creates a new TextStyle object with the same values as this one.\n * Note that the only the properties of the object are cloned.\n *\n * @return New cloned TextStyle object\n */\n public clone(): TextStyle\n {\n const clonedProperties: Partial = {};\n\n deepCopyProperties(clonedProperties, this, TextStyle.defaultStyle);\n\n return new TextStyle(clonedProperties);\n }\n\n /** Resets all properties to the defaults specified in TextStyle.prototype._default */\n public reset(): void\n {\n deepCopyProperties(this, TextStyle.defaultStyle, TextStyle.defaultStyle);\n }\n\n /**\n * Alignment for multiline text, does not affect single line text.\n *\n * @member {'left'|'center'|'right'|'justify'}\n */\n get align(): TextStyleAlign\n {\n return this._align;\n }\n set align(align: TextStyleAlign)\n {\n if (this._align !== align)\n {\n this._align = align;\n this.styleID++;\n }\n }\n\n /** Indicates if lines can be wrapped within words, it needs wordWrap to be set to true. */\n get breakWords(): boolean\n {\n return this._breakWords;\n }\n set breakWords(breakWords: boolean)\n {\n if (this._breakWords !== breakWords)\n {\n this._breakWords = breakWords;\n this.styleID++;\n }\n }\n\n /** Set a drop shadow for the text. */\n get dropShadow(): boolean\n {\n return this._dropShadow;\n }\n set dropShadow(dropShadow: boolean)\n {\n if (this._dropShadow !== dropShadow)\n {\n this._dropShadow = dropShadow;\n this.styleID++;\n }\n }\n\n /** Set alpha for the drop shadow. */\n get dropShadowAlpha(): number\n {\n return this._dropShadowAlpha;\n }\n set dropShadowAlpha(dropShadowAlpha: number)\n {\n if (this._dropShadowAlpha !== dropShadowAlpha)\n {\n this._dropShadowAlpha = dropShadowAlpha;\n this.styleID++;\n }\n }\n\n /** Set a angle of the drop shadow. */\n get dropShadowAngle(): number\n {\n return this._dropShadowAngle;\n }\n set dropShadowAngle(dropShadowAngle: number)\n {\n if (this._dropShadowAngle !== dropShadowAngle)\n {\n this._dropShadowAngle = dropShadowAngle;\n this.styleID++;\n }\n }\n\n /** Set a shadow blur radius. */\n get dropShadowBlur(): number\n {\n return this._dropShadowBlur;\n }\n set dropShadowBlur(dropShadowBlur: number)\n {\n if (this._dropShadowBlur !== dropShadowBlur)\n {\n this._dropShadowBlur = dropShadowBlur;\n this.styleID++;\n }\n }\n\n /** A fill style to be used on the dropshadow e.g., 'red', '#00FF00'. */\n get dropShadowColor(): number | string\n {\n return this._dropShadowColor;\n }\n set dropShadowColor(dropShadowColor: number | string)\n {\n const outputColor = getColor(dropShadowColor);\n if (this._dropShadowColor !== outputColor)\n {\n this._dropShadowColor = outputColor;\n this.styleID++;\n }\n }\n\n /** Set a distance of the drop shadow. */\n get dropShadowDistance(): number\n {\n return this._dropShadowDistance;\n }\n set dropShadowDistance(dropShadowDistance: number)\n {\n if (this._dropShadowDistance !== dropShadowDistance)\n {\n this._dropShadowDistance = dropShadowDistance;\n this.styleID++;\n }\n }\n\n /**\n * A canvas fillstyle that will be used on the text e.g., 'red', '#00FF00'.\n *\n * Can be an array to create a gradient e.g., `['#000000','#FFFFFF']`\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/fillStyle|MDN}\n *\n * @member {string|string[]|number|number[]|CanvasGradient|CanvasPattern}\n */\n get fill(): TextStyleFill\n {\n return this._fill;\n }\n set fill(fill: TextStyleFill)\n {\n // TODO: Can't have different types for getter and setter. The getter shouldn't have the number type as\n // the setter converts to string. See this thread for more details:\n // https://github.com/microsoft/TypeScript/issues/2521\n // TODO: Not sure if getColor works properly with CanvasGradient and/or CanvasPattern, can't pass in\n // without casting here.\n const outputColor = getColor(fill as any);\n if (this._fill !== outputColor)\n {\n this._fill = outputColor;\n this.styleID++;\n }\n }\n\n /**\n * If fill is an array of colours to create a gradient, this can change the type/direction of the gradient.\n *\n * @type {PIXI.TEXT_GRADIENT}\n */\n get fillGradientType(): TEXT_GRADIENT\n {\n return this._fillGradientType;\n }\n set fillGradientType(fillGradientType: TEXT_GRADIENT)\n {\n if (this._fillGradientType !== fillGradientType)\n {\n this._fillGradientType = fillGradientType;\n this.styleID++;\n }\n }\n\n /**\n * If fill is an array of colours to create a gradient, this array can set the stop points\n * (numbers between 0 and 1) for the color, overriding the default behaviour of evenly spacing them.\n */\n get fillGradientStops(): number[]\n {\n return this._fillGradientStops;\n }\n set fillGradientStops(fillGradientStops: number[])\n {\n if (!areArraysEqual(this._fillGradientStops,fillGradientStops))\n {\n this._fillGradientStops = fillGradientStops;\n this.styleID++;\n }\n }\n\n /**\n * The font family, can be a single font name, or a list of names where the first\n * is the preferred font.\n */\n get fontFamily(): string | string[]\n {\n return this._fontFamily;\n }\n set fontFamily(fontFamily: string | string[])\n {\n if (this.fontFamily !== fontFamily)\n {\n this._fontFamily = fontFamily;\n this.styleID++;\n }\n }\n\n /**\n * The font size\n * (as a number it converts to px, but as a string, equivalents are '26px','20pt','160%' or '1.6em')\n */\n get fontSize(): number | string\n {\n return this._fontSize;\n }\n set fontSize(fontSize: number | string)\n {\n if (this._fontSize !== fontSize)\n {\n this._fontSize = fontSize;\n this.styleID++;\n }\n }\n\n /**\n * The font style.\n *\n * @member {'normal'|'italic'|'oblique'}\n */\n get fontStyle(): TextStyleFontStyle\n {\n return this._fontStyle;\n }\n set fontStyle(fontStyle: TextStyleFontStyle)\n {\n if (this._fontStyle !== fontStyle)\n {\n this._fontStyle = fontStyle;\n this.styleID++;\n }\n }\n\n /**\n * The font variant.\n *\n * @member {'normal'|'small-caps'}\n */\n get fontVariant(): TextStyleFontVariant\n {\n return this._fontVariant;\n }\n set fontVariant(fontVariant: TextStyleFontVariant)\n {\n if (this._fontVariant !== fontVariant)\n {\n this._fontVariant = fontVariant;\n this.styleID++;\n }\n }\n\n /**\n * The font weight.\n *\n * @member {'normal'|'bold'|'bolder'|'lighter'|'100'|'200'|'300'|'400'|'500'|'600'|'700'|'800'|'900'}\n */\n get fontWeight(): TextStyleFontWeight\n {\n return this._fontWeight;\n }\n set fontWeight(fontWeight: TextStyleFontWeight)\n {\n if (this._fontWeight !== fontWeight)\n {\n this._fontWeight = fontWeight;\n this.styleID++;\n }\n }\n\n /** The amount of spacing between letters, default is 0. */\n get letterSpacing(): number\n {\n return this._letterSpacing;\n }\n set letterSpacing(letterSpacing: number)\n {\n if (this._letterSpacing !== letterSpacing)\n {\n this._letterSpacing = letterSpacing;\n this.styleID++;\n }\n }\n\n /** The line height, a number that represents the vertical space that a letter uses. */\n get lineHeight(): number\n {\n return this._lineHeight;\n }\n set lineHeight(lineHeight: number)\n {\n if (this._lineHeight !== lineHeight)\n {\n this._lineHeight = lineHeight;\n this.styleID++;\n }\n }\n\n /** The space between lines. */\n get leading(): number\n {\n return this._leading;\n }\n set leading(leading: number)\n {\n if (this._leading !== leading)\n {\n this._leading = leading;\n this.styleID++;\n }\n }\n\n /**\n * The lineJoin property sets the type of corner created, it can resolve spiked text issues.\n * Default is 'miter' (creates a sharp corner).\n *\n * @member {'miter'|'round'|'bevel'}\n */\n get lineJoin(): TextStyleLineJoin\n {\n return this._lineJoin;\n }\n set lineJoin(lineJoin: TextStyleLineJoin)\n {\n if (this._lineJoin !== lineJoin)\n {\n this._lineJoin = lineJoin;\n this.styleID++;\n }\n }\n\n /**\n * The miter limit to use when using the 'miter' lineJoin mode.\n *\n * This can reduce or increase the spikiness of rendered text.\n */\n get miterLimit(): number\n {\n return this._miterLimit;\n }\n set miterLimit(miterLimit: number)\n {\n if (this._miterLimit !== miterLimit)\n {\n this._miterLimit = miterLimit;\n this.styleID++;\n }\n }\n\n /**\n * Occasionally some fonts are cropped. Adding some padding will prevent this from happening\n * by adding padding to all sides of the text.\n */\n get padding(): number\n {\n return this._padding;\n }\n set padding(padding: number)\n {\n if (this._padding !== padding)\n {\n this._padding = padding;\n this.styleID++;\n }\n }\n\n /**\n * A canvas fillstyle that will be used on the text stroke, e.g., 'blue', '#FCFF00'\n */\n get stroke(): string | number\n {\n return this._stroke;\n }\n set stroke(stroke: string | number)\n {\n // TODO: Can't have different types for getter and setter. The getter shouldn't have the number type as\n // the setter converts to string. See this thread for more details:\n // https://github.com/microsoft/TypeScript/issues/2521\n const outputColor = getColor(stroke);\n if (this._stroke !== outputColor)\n {\n this._stroke = outputColor;\n this.styleID++;\n }\n }\n\n /**\n * A number that represents the thickness of the stroke.\n *\n * @default 0\n */\n get strokeThickness(): number\n {\n return this._strokeThickness;\n }\n set strokeThickness(strokeThickness: number)\n {\n if (this._strokeThickness !== strokeThickness)\n {\n this._strokeThickness = strokeThickness;\n this.styleID++;\n }\n }\n\n /**\n * The baseline of the text that is rendered.\n *\n * @member {'alphabetic'|'top'|'hanging'|'middle'|'ideographic'|'bottom'}\n */\n get textBaseline(): TextStyleTextBaseline\n {\n return this._textBaseline;\n }\n set textBaseline(textBaseline: TextStyleTextBaseline)\n {\n if (this._textBaseline !== textBaseline)\n {\n this._textBaseline = textBaseline;\n this.styleID++;\n }\n }\n\n /** Trim transparent borders. */\n get trim(): boolean\n {\n return this._trim;\n }\n set trim(trim: boolean)\n {\n if (this._trim !== trim)\n {\n this._trim = trim;\n this.styleID++;\n }\n }\n\n /**\n * How newlines and spaces should be handled.\n * Default is 'pre' (preserve, preserve).\n *\n * value | New lines | Spaces\n * --- | --- | ---\n * 'normal' | Collapse | Collapse\n * 'pre' | Preserve | Preserve\n * 'pre-line' | Preserve | Collapse\n *\n * @member {'normal'|'pre'|'pre-line'}\n */\n get whiteSpace(): TextStyleWhiteSpace\n {\n return this._whiteSpace;\n }\n set whiteSpace(whiteSpace: TextStyleWhiteSpace)\n {\n if (this._whiteSpace !== whiteSpace)\n {\n this._whiteSpace = whiteSpace;\n this.styleID++;\n }\n }\n\n /** Indicates if word wrap should be used. */\n get wordWrap(): boolean\n {\n return this._wordWrap;\n }\n set wordWrap(wordWrap: boolean)\n {\n if (this._wordWrap !== wordWrap)\n {\n this._wordWrap = wordWrap;\n this.styleID++;\n }\n }\n\n /** The width at which text will wrap, it needs wordWrap to be set to true. */\n get wordWrapWidth(): number\n {\n return this._wordWrapWidth;\n }\n set wordWrapWidth(wordWrapWidth: number)\n {\n if (this._wordWrapWidth !== wordWrapWidth)\n {\n this._wordWrapWidth = wordWrapWidth;\n this.styleID++;\n }\n }\n\n /**\n * Generates a font style string to use for `TextMetrics.measureFont()`.\n *\n * @return Font style string, for passing to `TextMetrics.measureFont()`\n */\n public toFontString(): string\n {\n // build canvas api font setting from individual components. Convert a numeric this.fontSize to px\n const fontSizeString = (typeof this.fontSize === 'number') ? `${this.fontSize}px` : this.fontSize;\n\n // Clean-up fontFamily property by quoting each font name\n // this will support font names with spaces\n let fontFamilies: string|string[] = this.fontFamily;\n\n if (!Array.isArray(this.fontFamily))\n {\n fontFamilies = this.fontFamily.split(',');\n }\n\n for (let i = fontFamilies.length - 1; i >= 0; i--)\n {\n // Trim any extra white-space\n let fontFamily = fontFamilies[i].trim();\n\n // Check if font already contains strings\n if (!(/([\\\"\\'])[^\\'\\\"]+\\1/).test(fontFamily) && !genericFontFamilies.includes(fontFamily))\n {\n fontFamily = `\"${fontFamily}\"`;\n }\n (fontFamilies as string[])[i] = fontFamily;\n }\n\n return `${this.fontStyle} ${this.fontVariant} ${this.fontWeight} ${fontSizeString} ${(fontFamilies as string[]).join(',')}`;\n }\n}\n\n/**\n * Utility function to convert hexadecimal colors to strings, and simply return the color if it's a string.\n * This version can also convert array of colors\n * @private\n * @param color\n * @return The color as a string.\n */\nfunction getColor(color: (string|number)[]): string[];\nfunction getColor(color: string|number): string;\nfunction getColor(color: string|number|(string|number)[]): string|string[]\n{\n const temp = Color.shared;\n\n const format = (color: string | number) => {\n const res = temp.setValue(color);\n return res.alpha === 1 ? res.toHex() : res.toRgbaString();\n }\n\n if (!Array.isArray(color))\n {\n return format(color);\n }\n else\n {\n return color.map(format);\n }\n}\n\n/**\n * Utility function to convert hexadecimal colors to strings, and simply return the color if it's a string.\n * This version can also convert array of colors\n * @private\n * @param array1 - First array to compare\n * @param array2 - Second array to compare\n * @return Do the arrays contain the same values in the same order\n */\nfunction areArraysEqual(array1: T[], array2: T[]): boolean\n{\n if (!Array.isArray(array1) || !Array.isArray(array2))\n {\n return false;\n }\n\n if (array1.length !== array2.length)\n {\n return false;\n }\n\n for (let i = 0; i < array1.length; ++i)\n {\n if (array1[i] !== array2[i])\n {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Utility function to ensure that object properties are copied by value, and not by reference\n * @private\n * @param target - Target object to copy properties into\n * @param source - Source object for the properties to copy\n * @param propertyObj - Object containing properties names we want to loop over\n */\nfunction deepCopyProperties(target: Record, source: Record, propertyObj: Record): void {\n for (const prop in propertyObj) {\n if (Array.isArray(source[prop])) {\n target[prop] = source[prop].slice();\n } else {\n target[prop] = source[prop];\n }\n }\n}\n","/* eslint max-depth: [2, 8] */\nimport { Color, Rectangle, settings, Texture, utils } from '@pixi/core';\nimport { Sprite } from '@pixi/sprite';\nimport { TEXT_GRADIENT } from './const';\nimport { TextMetrics } from './TextMetrics';\nimport { TextStyle } from './TextStyle';\n\nimport type { ICanvas, ICanvasRenderingContext2D, Renderer } from '@pixi/core';\nimport type { IDestroyOptions } from '@pixi/display';\nimport type { ITextStyle } from './TextStyle';\n\nconst defaultDestroyOptions: IDestroyOptions = {\n texture: true,\n children: false,\n baseTexture: true,\n};\n\n/**\n * A Text Object will create a line or multiple lines of text.\n *\n * The text is created using the [Canvas API](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API).\n *\n * The primary advantage of this class over BitmapText is that you have great control over the style of the text,\n * which you can change at runtime.\n *\n * The primary disadvantages is that each piece of text has it's own texture, which can use more memory.\n * When text changes, this texture has to be re-generated and re-uploaded to the GPU, taking up time.\n *\n * To split a line you can use '\\n' in your text string, or, on the `style` object,\n * change its `wordWrap` property to true and and give the `wordWrapWidth` property a value.\n *\n * A Text can be created directly from a string and a style object,\n * which can be generated [here](https://pixijs.io/pixi-text-style).\n * @example\n * import { Text } from 'pixi.js';\n *\n * const text = new Text('This is a PixiJS text', {\n * fontFamily: 'Arial',\n * fontSize: 24,\n * fill: 0xff1010,\n * align: 'center',\n * });\n * @memberof PIXI\n */\nexport class Text extends Sprite\n{\n /**\n * Override whether or not the resolution of the text is automatically adjusted to match the resolution of the renderer.\n * Setting this to false can allow you to get crisper text at lower render resolutions.\n * @example\n * // renderer has a resolution of 1\n * const app = new Application();\n *\n * Text.defaultResolution = 2;\n * Text.defaultAutoResolution = false;\n * // text has a resolution of 2\n * const text = new Text('This is a PixiJS text');\n */\n public static defaultAutoResolution = true;\n\n /**\n * If {@link PIXI.Text.defaultAutoResolution} is false, this will be the default resolution of the text.\n * If not set it will default to {@link PIXI.settings.RESOLUTION}.\n * @example\n * Text.defaultResolution = 2;\n * Text.defaultAutoResolution = false;\n *\n * // text has a resolution of 2\n * const text = new Text('This is a PixiJS text');\n */\n public static defaultResolution: number;\n\n /**\n * @see PIXI.TextMetrics.experimentalLetterSpacing\n * @deprecated since 7.1.0\n */\n public static get experimentalLetterSpacing()\n {\n return TextMetrics.experimentalLetterSpacing;\n }\n public static set experimentalLetterSpacing(value)\n {\n if (process.env.DEBUG)\n {\n utils.deprecation('7.1.0',\n 'Text.experimentalLetterSpacing is deprecated, use TextMetrics.experimentalLetterSpacing');\n }\n\n TextMetrics.experimentalLetterSpacing = value;\n }\n\n /** The canvas element that everything is drawn to. */\n public canvas: ICanvas;\n /** The canvas 2d context that everything is drawn with. */\n public context: ICanvasRenderingContext2D;\n public localStyleID: number;\n public dirty: boolean;\n\n /**\n * The resolution / device pixel ratio of the canvas.\n *\n * This is set to automatically match the renderer resolution by default, but can be overridden by setting manually.\n * @default PIXI.settings.RESOLUTION\n */\n _resolution: number;\n _autoResolution: boolean;\n\n /**\n * Private tracker for the current text.\n * @private\n */\n protected _text: string;\n\n /**\n * Private tracker for the current font.\n * @private\n */\n protected _font: string;\n\n /**\n * Private tracker for the current style.\n * @private\n */\n protected _style: TextStyle;\n\n /**\n * Private listener to track style changes.\n * @private\n */\n protected _styleListener: () => void;\n\n /**\n * Keep track if this Text object created it's own canvas\n * element (`true`) or uses the constructor argument (`false`).\n * Used to workaround a GC issues with Safari < 13 when\n * destroying Text. See `destroy` for more info.\n */\n private _ownCanvas: boolean;\n\n /**\n * @param text - The string that you would like the text to display\n * @param style - The style parameters\n * @param canvas - The canvas element for drawing text\n */\n constructor(text?: string | number, style?: Partial | TextStyle, canvas?: ICanvas)\n {\n let ownCanvas = false;\n\n if (!canvas)\n {\n canvas = settings.ADAPTER.createCanvas();\n ownCanvas = true;\n }\n\n canvas.width = 3;\n canvas.height = 3;\n\n const texture = Texture.from(canvas);\n\n texture.orig = new Rectangle();\n texture.trim = new Rectangle();\n\n super(texture);\n\n this._ownCanvas = ownCanvas;\n this.canvas = canvas;\n this.context = canvas.getContext('2d', {\n // required for trimming to work without warnings\n willReadFrequently: true,\n });\n\n this._resolution = Text.defaultResolution ?? settings.RESOLUTION;\n this._autoResolution = Text.defaultAutoResolution;\n this._text = null;\n this._style = null;\n this._styleListener = null;\n this._font = '';\n\n this.text = text;\n this.style = style;\n\n this.localStyleID = -1;\n }\n\n /**\n * Renders text to its canvas, and updates its texture.\n *\n * By default this is used internally to ensure the texture is correct before rendering,\n * but it can be used called externally, for example from this class to 'pre-generate' the texture from a piece of text,\n * and then shared across multiple Sprites.\n * @param respectDirty - Whether to abort updating the text if the Text isn't dirty and the function is called.\n */\n public updateText(respectDirty: boolean): void\n {\n const style = this._style;\n\n // check if style has changed..\n if (this.localStyleID !== style.styleID)\n {\n this.dirty = true;\n this.localStyleID = style.styleID;\n }\n\n if (!this.dirty && respectDirty)\n {\n return;\n }\n\n this._font = this._style.toFontString();\n\n const context = this.context;\n const measured = TextMetrics.measureText(this._text || ' ', this._style, this._style.wordWrap, this.canvas);\n const width = measured.width;\n const height = measured.height;\n const lines = measured.lines;\n const lineHeight = measured.lineHeight;\n const lineWidths = measured.lineWidths;\n const maxLineWidth = measured.maxLineWidth;\n const fontProperties = measured.fontProperties;\n\n this.canvas.width = Math.ceil(Math.ceil((Math.max(1, width) + (style.padding * 2))) * this._resolution);\n this.canvas.height = Math.ceil(Math.ceil((Math.max(1, height) + (style.padding * 2))) * this._resolution);\n\n context.scale(this._resolution, this._resolution);\n\n context.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\n context.font = this._font;\n context.lineWidth = style.strokeThickness;\n context.textBaseline = style.textBaseline;\n context.lineJoin = style.lineJoin;\n context.miterLimit = style.miterLimit;\n\n let linePositionX: number;\n let linePositionY: number;\n\n // require 2 passes if a shadow; the first to draw the drop shadow, the second to draw the text\n const passesCount = style.dropShadow ? 2 : 1;\n\n // For v4, we drew text at the colours of the drop shadow underneath the normal text. This gave the correct zIndex,\n // but features such as alpha and shadowblur did not look right at all, since we were using actual text as a shadow.\n //\n // For v5.0.0, we moved over to just use the canvas API for drop shadows, which made them look much nicer and more\n // visually please, but now because the stroke is drawn and then the fill, drop shadows would appear on both the fill\n // and the stroke; and fill drop shadows would appear over the top of the stroke.\n //\n // For v5.1.1, the new route is to revert to v4 style of drawing text first to get the drop shadows underneath normal\n // text, but instead drawing text in the correct location, we'll draw it off screen (-paddingY), and then adjust the\n // drop shadow so only that appears on screen (+paddingY). Now we'll have the correct draw order of the shadow\n // beneath the text, whilst also having the proper text shadow styling.\n for (let i = 0; i < passesCount; ++i)\n {\n const isShadowPass = style.dropShadow && i === 0;\n // we only want the drop shadow, so put text way off-screen\n const dsOffsetText = isShadowPass ? Math.ceil(Math.max(1, height) + (style.padding * 2)) : 0;\n const dsOffsetShadow = dsOffsetText * this._resolution;\n\n if (isShadowPass)\n {\n // On Safari, text with gradient and drop shadows together do not position correctly\n // if the scale of the canvas is not 1: https://bugs.webkit.org/show_bug.cgi?id=197689\n // Therefore we'll set the styles to be a plain black whilst generating this drop shadow\n context.fillStyle = 'black';\n context.strokeStyle = 'black';\n\n const dropShadowColor = style.dropShadowColor;\n const dropShadowBlur = style.dropShadowBlur * this._resolution;\n const dropShadowDistance = style.dropShadowDistance * this._resolution;\n\n context.shadowColor = Color.shared\n .setValue(dropShadowColor)\n .setAlpha(style.dropShadowAlpha)\n .toRgbaString();\n context.shadowBlur = dropShadowBlur;\n context.shadowOffsetX = Math.cos(style.dropShadowAngle) * dropShadowDistance;\n context.shadowOffsetY = (Math.sin(style.dropShadowAngle) * dropShadowDistance) + dsOffsetShadow;\n }\n else\n {\n // set canvas text styles\n context.fillStyle = this._generateFillStyle(style, lines, measured);\n // TODO: Can't have different types for getter and setter. The getter shouldn't have the number type as\n // the setter converts to string. See this thread for more details:\n // https://github.com/microsoft/TypeScript/issues/2521\n context.strokeStyle = style.stroke as string;\n\n context.shadowColor = 'black';\n context.shadowBlur = 0;\n context.shadowOffsetX = 0;\n context.shadowOffsetY = 0;\n }\n\n let linePositionYShift = (lineHeight - fontProperties.fontSize) / 2;\n\n if (lineHeight - fontProperties.fontSize < 0)\n {\n linePositionYShift = 0;\n }\n\n // draw lines line by line\n for (let i = 0; i < lines.length; i++)\n {\n linePositionX = style.strokeThickness / 2;\n linePositionY = ((style.strokeThickness / 2) + (i * lineHeight)) + fontProperties.ascent\n + linePositionYShift;\n\n if (style.align === 'right')\n {\n linePositionX += maxLineWidth - lineWidths[i];\n }\n else if (style.align === 'center')\n {\n linePositionX += (maxLineWidth - lineWidths[i]) / 2;\n }\n\n if (style.stroke && style.strokeThickness)\n {\n this.drawLetterSpacing(\n lines[i],\n linePositionX + style.padding,\n linePositionY + style.padding - dsOffsetText,\n true\n );\n }\n\n if (style.fill)\n {\n this.drawLetterSpacing(\n lines[i],\n linePositionX + style.padding,\n linePositionY + style.padding - dsOffsetText\n );\n }\n }\n }\n\n this.updateTexture();\n }\n\n /**\n * Render the text with letter-spacing.\n * @param text - The text to draw\n * @param x - Horizontal position to draw the text\n * @param y - Vertical position to draw the text\n * @param isStroke - Is this drawing for the outside stroke of the\n * text? If not, it's for the inside fill\n */\n private drawLetterSpacing(text: string, x: number, y: number, isStroke = false): void\n {\n const style = this._style;\n\n // letterSpacing of 0 means normal\n const letterSpacing = style.letterSpacing;\n\n let useExperimentalLetterSpacing = false;\n\n if (TextMetrics.experimentalLetterSpacingSupported)\n {\n if (TextMetrics.experimentalLetterSpacing)\n {\n this.context.letterSpacing = `${letterSpacing}px`;\n this.context.textLetterSpacing = `${letterSpacing}px`;\n useExperimentalLetterSpacing = true;\n }\n else\n {\n this.context.letterSpacing = '0px';\n this.context.textLetterSpacing = '0px';\n }\n }\n\n if (letterSpacing === 0 || useExperimentalLetterSpacing)\n {\n if (isStroke)\n {\n this.context.strokeText(text, x, y);\n }\n else\n {\n this.context.fillText(text, x, y);\n }\n\n return;\n }\n\n let currentPosition = x;\n\n const stringArray = TextMetrics.graphemeSegmenter(text);\n let previousWidth = this.context.measureText(text).width;\n let currentWidth = 0;\n\n for (let i = 0; i < stringArray.length; ++i)\n {\n const currentChar = stringArray[i];\n\n if (isStroke)\n {\n this.context.strokeText(currentChar, currentPosition, y);\n }\n else\n {\n this.context.fillText(currentChar, currentPosition, y);\n }\n let textStr = '';\n\n for (let j = i + 1; j < stringArray.length; ++j)\n {\n textStr += stringArray[j];\n }\n currentWidth = this.context.measureText(textStr).width;\n currentPosition += previousWidth - currentWidth + letterSpacing;\n previousWidth = currentWidth;\n }\n }\n\n /** Updates texture size based on canvas size. */\n private updateTexture(): void\n {\n const canvas = this.canvas;\n\n if (this._style.trim)\n {\n const trimmed = utils.trimCanvas(canvas);\n\n if (trimmed.data)\n {\n canvas.width = trimmed.width;\n canvas.height = trimmed.height;\n this.context.putImageData(trimmed.data, 0, 0);\n }\n }\n\n const texture = this._texture;\n const style = this._style;\n const padding = style.trim ? 0 : style.padding;\n const baseTexture = texture.baseTexture;\n\n texture.trim.width = texture._frame.width = canvas.width / this._resolution;\n texture.trim.height = texture._frame.height = canvas.height / this._resolution;\n texture.trim.x = -padding;\n texture.trim.y = -padding;\n\n texture.orig.width = texture._frame.width - (padding * 2);\n texture.orig.height = texture._frame.height - (padding * 2);\n\n // call sprite onTextureUpdate to update scale if _width or _height were set\n this._onTextureUpdate();\n\n baseTexture.setRealSize(canvas.width, canvas.height, this._resolution);\n\n texture.updateUvs();\n\n this.dirty = false;\n }\n\n /**\n * Renders the object using the WebGL renderer\n * @param renderer - The renderer\n */\n protected _render(renderer: Renderer): void\n {\n if (this._autoResolution && this._resolution !== renderer.resolution)\n {\n this._resolution = renderer.resolution;\n this.dirty = true;\n }\n\n this.updateText(true);\n\n super._render(renderer);\n }\n\n /** Updates the transform on all children of this container for rendering. */\n public updateTransform(): void\n {\n this.updateText(true);\n\n super.updateTransform();\n }\n\n public getBounds(skipUpdate?: boolean, rect?: Rectangle): Rectangle\n {\n this.updateText(true);\n\n if (this._textureID === -1)\n {\n // texture was updated: recalculate transforms\n skipUpdate = false;\n }\n\n return super.getBounds(skipUpdate, rect);\n }\n\n /**\n * Gets the local bounds of the text object.\n * @param rect - The output rectangle.\n * @returns The bounds.\n */\n public getLocalBounds(rect?: Rectangle): Rectangle\n {\n this.updateText(true);\n\n return super.getLocalBounds.call(this, rect);\n }\n\n /** Calculates the bounds of the Text as a rectangle. The bounds calculation takes the worldTransform into account. */\n protected _calculateBounds(): void\n {\n this.calculateVertices();\n // if we have already done this on THIS frame.\n this._bounds.addQuad(this.vertexData);\n }\n\n /**\n * Generates the fill style. Can automatically generate a gradient based on the fill style being an array\n * @param style - The style.\n * @param lines - The lines of text.\n * @param metrics\n * @returns The fill style\n */\n private _generateFillStyle(\n style: TextStyle, lines: string[], metrics: TextMetrics\n ): string | CanvasGradient | CanvasPattern\n {\n // TODO: Can't have different types for getter and setter. The getter shouldn't have the number type as\n // the setter converts to string. See this thread for more details:\n // https://github.com/microsoft/TypeScript/issues/2521\n const fillStyle: string | string[] | CanvasGradient | CanvasPattern = style.fill as any;\n\n if (!Array.isArray(fillStyle))\n {\n return fillStyle;\n }\n else if (fillStyle.length === 1)\n {\n return fillStyle[0];\n }\n\n // the gradient will be evenly spaced out according to how large the array is.\n // ['#FF0000', '#00FF00', '#0000FF'] would created stops at 0.25, 0.5 and 0.75\n let gradient: string[] | CanvasGradient;\n\n // a dropshadow will enlarge the canvas and result in the gradient being\n // generated with the incorrect dimensions\n const dropShadowCorrection = (style.dropShadow) ? style.dropShadowDistance : 0;\n\n // should also take padding into account, padding can offset the gradient\n const padding = style.padding || 0;\n\n const width = (this.canvas.width / this._resolution) - dropShadowCorrection - (padding * 2);\n const height = (this.canvas.height / this._resolution) - dropShadowCorrection - (padding * 2);\n\n // make a copy of the style settings, so we can manipulate them later\n const fill = fillStyle.slice();\n const fillGradientStops = style.fillGradientStops.slice();\n\n // wanting to evenly distribute the fills. So an array of 4 colours should give fills of 0.25, 0.5 and 0.75\n if (!fillGradientStops.length)\n {\n const lengthPlus1 = fill.length + 1;\n\n for (let i = 1; i < lengthPlus1; ++i)\n {\n fillGradientStops.push(i / lengthPlus1);\n }\n }\n\n // stop the bleeding of the last gradient on the line above to the top gradient of the this line\n // by hard defining the first gradient colour at point 0, and last gradient colour at point 1\n fill.unshift(fillStyle[0]);\n fillGradientStops.unshift(0);\n\n fill.push(fillStyle[fillStyle.length - 1]);\n fillGradientStops.push(1);\n\n if (style.fillGradientType === TEXT_GRADIENT.LINEAR_VERTICAL)\n {\n // start the gradient at the top center of the canvas, and end at the bottom middle of the canvas\n gradient = this.context.createLinearGradient(width / 2, padding, width / 2, height + padding);\n\n // we need to repeat the gradient so that each individual line of text has the same vertical gradient effect\n // ['#FF0000', '#00FF00', '#0000FF'] over 2 lines would create stops at 0.125, 0.25, 0.375, 0.625, 0.75, 0.875\n\n // Actual height of the text itself, not counting spacing for lineHeight/leading/dropShadow etc\n const textHeight = metrics.fontProperties.fontSize + style.strokeThickness;\n\n for (let i = 0; i < lines.length; i++)\n {\n const lastLineBottom = (metrics.lineHeight * (i - 1)) + textHeight;\n const thisLineTop = metrics.lineHeight * i;\n let thisLineGradientStart = thisLineTop;\n\n // Handle case where last & this line overlap\n if (i > 0 && lastLineBottom > thisLineTop)\n {\n thisLineGradientStart = (thisLineTop + lastLineBottom) / 2;\n }\n\n const thisLineBottom = thisLineTop + textHeight;\n const nextLineTop = metrics.lineHeight * (i + 1);\n let thisLineGradientEnd = thisLineBottom;\n\n // Handle case where this & next line overlap\n if (i + 1 < lines.length && nextLineTop < thisLineBottom)\n {\n thisLineGradientEnd = (thisLineBottom + nextLineTop) / 2;\n }\n\n // textHeight, but as a 0-1 size in global gradient stop space\n const gradStopLineHeight = (thisLineGradientEnd - thisLineGradientStart) / height;\n\n for (let j = 0; j < fill.length; j++)\n {\n // 0-1 stop point for the current line, multiplied to global space afterwards\n let lineStop = 0;\n\n if (typeof fillGradientStops[j] === 'number')\n {\n lineStop = fillGradientStops[j];\n }\n else\n {\n lineStop = j / fill.length;\n }\n\n let globalStop = Math.min(1, Math.max(0,\n (thisLineGradientStart / height) + (lineStop * gradStopLineHeight)));\n\n // There's potential for floating point precision issues at the seams between gradient repeats.\n globalStop = Number(globalStop.toFixed(5));\n gradient.addColorStop(globalStop, fill[j]);\n }\n }\n }\n else\n {\n // start the gradient at the center left of the canvas, and end at the center right of the canvas\n gradient = this.context.createLinearGradient(padding, height / 2, width + padding, height / 2);\n\n // can just evenly space out the gradients in this case, as multiple lines makes no difference\n // to an even left to right gradient\n const totalIterations = fill.length + 1;\n let currentIteration = 1;\n\n for (let i = 0; i < fill.length; i++)\n {\n let stop: number;\n\n if (typeof fillGradientStops[i] === 'number')\n {\n stop = fillGradientStops[i];\n }\n else\n {\n stop = currentIteration / totalIterations;\n }\n gradient.addColorStop(stop, fill[i]);\n currentIteration++;\n }\n }\n\n return gradient;\n }\n\n /**\n * Destroys this text object.\n *\n * Note* Unlike a Sprite, a Text object will automatically destroy its baseTexture and texture as\n * the majority of the time the texture will not be shared with any other Sprites.\n * @param options - Options parameter. A boolean will act as if all options\n * have been set to that value\n * @param {boolean} [options.children=false] - if set to true, all the children will have their\n * destroy method called as well. 'options' will be passed on to those calls.\n * @param {boolean} [options.texture=true] - Should it destroy the current texture of the sprite as well\n * @param {boolean} [options.baseTexture=true] - Should it destroy the base texture of the sprite as well\n */\n public destroy(options?: IDestroyOptions | boolean): void\n {\n if (typeof options === 'boolean')\n {\n options = { children: options };\n }\n\n options = Object.assign({}, defaultDestroyOptions, options);\n\n super.destroy(options);\n\n // set canvas width and height to 0 to workaround memory leak in Safari < 13\n // https://stackoverflow.com/questions/52532614/total-canvas-memory-use-exceeds-the-maximum-limit-safari-12\n if (this._ownCanvas)\n {\n this.canvas.height = this.canvas.width = 0;\n }\n\n // make sure to reset the context and canvas.. dont want this hanging around in memory!\n this.context = null;\n this.canvas = null;\n\n this._style = null;\n }\n\n /** The width of the Text, setting this will actually modify the scale to achieve the value set. */\n get width(): number\n {\n this.updateText(true);\n\n return Math.abs(this.scale.x) * this._texture.orig.width;\n }\n\n set width(value: number)\n {\n this.updateText(true);\n\n const s = utils.sign(this.scale.x) || 1;\n\n this.scale.x = s * value / this._texture.orig.width;\n this._width = value;\n }\n\n /** The height of the Text, setting this will actually modify the scale to achieve the value set. */\n get height(): number\n {\n this.updateText(true);\n\n return Math.abs(this.scale.y) * this._texture.orig.height;\n }\n\n set height(value: number)\n {\n this.updateText(true);\n\n const s = utils.sign(this.scale.y) || 1;\n\n this.scale.y = s * value / this._texture.orig.height;\n this._height = value;\n }\n\n /**\n * Set the style of the text.\n *\n * Set up an event listener to listen for changes on the style object and mark the text as dirty.\n *\n * If setting the `style` can also be partial {@link PIXI.ITextStyle}.\n */\n get style(): TextStyle\n {\n return this._style;\n }\n\n set style(style: TextStyle | Partial)\n {\n style = style || {};\n\n if (style instanceof TextStyle)\n {\n this._style = style;\n }\n else\n {\n this._style = new TextStyle(style);\n }\n\n this.localStyleID = -1;\n this.dirty = true;\n }\n\n /** Set the copy for the text object. To split a line you can use '\\n'. */\n get text(): string\n {\n return this._text;\n }\n\n set text(text: string | number)\n {\n text = String(text === null || text === undefined ? '' : text);\n\n if (this._text === text)\n {\n return;\n }\n this._text = text;\n this.dirty = true;\n }\n\n /**\n * The resolution / device pixel ratio of the canvas.\n *\n * This is set to automatically match the renderer resolution by default, but can be overridden by setting manually.\n * @default 1\n */\n get resolution(): number\n {\n return this._resolution;\n }\n\n set resolution(value: number)\n {\n this._autoResolution = false;\n\n if (this._resolution === value)\n {\n return;\n }\n\n this._resolution = value;\n this.dirty = true;\n }\n}\n","/**\n * CountLimiter limits the number of items handled by a {@link PIXI.BasePrepare} to a specified\n * number of items per frame.\n * @memberof PIXI\n */\nexport class CountLimiter\n{\n /** The maximum number of items that can be prepared each frame. */\n public maxItemsPerFrame: number;\n\n /** The number of items that can be prepared in the current frame. */\n public itemsLeft: number;\n\n /**\n * @param maxItemsPerFrame - The maximum number of items that can be prepared each frame.\n */\n constructor(maxItemsPerFrame: number)\n {\n this.maxItemsPerFrame = maxItemsPerFrame;\n this.itemsLeft = 0;\n }\n\n /** Resets any counting properties to start fresh on a new frame. */\n beginFrame(): void\n {\n this.itemsLeft = this.maxItemsPerFrame;\n }\n\n /**\n * Checks to see if another item can be uploaded. This should only be called once per item.\n * @returns If the item is allowed to be uploaded.\n */\n allowedToUpload(): boolean\n {\n return this.itemsLeft-- > 0;\n }\n}\n","import { BaseTexture, Texture, Ticker, UPDATE_PRIORITY } from '@pixi/core';\nimport { Container } from '@pixi/display';\nimport { Text, TextMetrics, TextStyle } from '@pixi/text';\nimport { CountLimiter } from './CountLimiter';\n\nimport type { IRenderer } from '@pixi/core';\nimport type { DisplayObject } from '@pixi/display';\n\ninterface IArrowFunction\n{\n (): void;\n}\ninterface IUploadHook\n{\n (helper: IRenderer | BasePrepare, item: IDisplayObjectExtended): boolean;\n}\n\ninterface IFindHook\n{\n (item: any, queue: Array): boolean;\n}\n\nexport interface IDisplayObjectExtended extends DisplayObject\n{\n _textures?: Array;\n _texture?: Texture;\n style?: TextStyle | Partial;\n}\n\n/**\n * Built-in hook to find multiple textures from objects like AnimatedSprites.\n * @private\n * @param item - Display object to check\n * @param queue - Collection of items to upload\n * @returns If a PIXI.Texture object was found.\n */\nfunction findMultipleBaseTextures(item: IDisplayObjectExtended, queue: Array): boolean\n{\n let result = false;\n\n // Objects with multiple textures\n if (item?._textures?.length)\n {\n for (let i = 0; i < item._textures.length; i++)\n {\n if (item._textures[i] instanceof Texture)\n {\n const baseTexture = item._textures[i].baseTexture;\n\n if (!queue.includes(baseTexture))\n {\n queue.push(baseTexture);\n result = true;\n }\n }\n }\n }\n\n return result;\n}\n\n/**\n * Built-in hook to find BaseTextures from Texture.\n * @private\n * @param item - Display object to check\n * @param queue - Collection of items to upload\n * @returns If a PIXI.Texture object was found.\n */\nfunction findBaseTexture(item: Texture, queue: Array): boolean\n{\n if (item.baseTexture instanceof BaseTexture)\n {\n const texture = item.baseTexture;\n\n if (!queue.includes(texture))\n {\n queue.push(texture);\n }\n\n return true;\n }\n\n return false;\n}\n\n/**\n * Built-in hook to find textures from objects.\n * @private\n * @param item - Display object to check\n * @param queue - Collection of items to upload\n * @returns If a PIXI.Texture object was found.\n */\nfunction findTexture(item: IDisplayObjectExtended, queue: Array): boolean\n{\n if (item._texture && item._texture instanceof Texture)\n {\n const texture = item._texture.baseTexture;\n\n if (!queue.includes(texture))\n {\n queue.push(texture);\n }\n\n return true;\n }\n\n return false;\n}\n\n/**\n * Built-in hook to draw PIXI.Text to its texture.\n * @private\n * @param _helper - Not used by this upload handler\n * @param item - Item to check\n * @returns If item was uploaded.\n */\nfunction drawText(_helper: IRenderer | BasePrepare, item: IDisplayObjectExtended): boolean\n{\n if (item instanceof Text)\n {\n // updating text will return early if it is not dirty\n item.updateText(true);\n\n return true;\n }\n\n return false;\n}\n\n/**\n * Built-in hook to calculate a text style for a PIXI.Text object.\n * @private\n * @param _helper - Not used by this upload handler\n * @param item - Item to check\n * @returns If item was uploaded.\n */\nfunction calculateTextStyle(_helper: IRenderer | BasePrepare, item: IDisplayObjectExtended): boolean\n{\n if (item instanceof TextStyle)\n {\n const font = item.toFontString();\n\n TextMetrics.measureFont(font);\n\n return true;\n }\n\n return false;\n}\n\n/**\n * Built-in hook to find Text objects.\n * @private\n * @param item - Display object to check\n * @param queue - Collection of items to upload\n * @returns if a PIXI.Text object was found.\n */\nfunction findText(item: IDisplayObjectExtended, queue: Array): boolean\n{\n if (item instanceof Text)\n {\n // push the text style to prepare it - this can be really expensive\n if (!queue.includes(item.style))\n {\n queue.push(item.style);\n }\n // also push the text object so that we can render it (to canvas/texture) if needed\n if (!queue.includes(item))\n {\n queue.push(item);\n }\n // also push the Text's texture for upload to GPU\n const texture = item._texture.baseTexture;\n\n if (!queue.includes(texture))\n {\n queue.push(texture);\n }\n\n return true;\n }\n\n return false;\n}\n\n/**\n * Built-in hook to find TextStyle objects.\n * @private\n * @param item - Display object to check\n * @param queue - Collection of items to upload\n * @returns If a PIXI.TextStyle object was found.\n */\nfunction findTextStyle(item: TextStyle, queue: Array): boolean\n{\n if (item instanceof TextStyle)\n {\n if (!queue.includes(item))\n {\n queue.push(item);\n }\n\n return true;\n }\n\n return false;\n}\n\n/**\n * The prepare manager provides functionality to upload content to the GPU.\n *\n * BasePrepare handles basic queuing functionality and is extended by\n * {@link PIXI.Prepare} and {@link PIXI.CanvasPrepare}\n * to provide preparation capabilities specific to their respective renderers.\n * @example\n * // Create a sprite\n * const sprite = PIXI.Sprite.from('something.png');\n *\n * // Load object into GPU\n * app.renderer.prepare.upload(sprite, () => {\n * // Texture(s) has been uploaded to GPU\n * app.stage.addChild(sprite);\n * });\n * @abstract\n * @memberof PIXI\n */\nexport class BasePrepare\n{\n /**\n * The default maximum uploads per frame.\n * @static\n */\n public static uploadsPerFrame = 4;\n\n /**\n * The limiter to be used to control how quickly items are prepared.\n * @type {PIXI.CountLimiter|PIXI.TimeLimiter}\n */\n private limiter: CountLimiter;\n\n /** Reference to the renderer. */\n protected renderer: IRenderer;\n\n /**\n * The only real difference between CanvasPrepare and Prepare is what they pass\n * to upload hooks. That different parameter is stored here.\n */\n protected uploadHookHelper: any;\n\n /** Collection of items to uploads at once. */\n protected queue: Array;\n\n /**\n * Collection of additional hooks for finding assets.\n * @type {Array}\n */\n public addHooks: Array;\n\n /**\n * Collection of additional hooks for processing assets.\n * @type {Array}\n */\n public uploadHooks: Array;\n\n /**\n * Callback to call after completed.\n * @type {Array}\n */\n public completes: Array;\n\n /**\n * If prepare is ticking (running).\n * @type {boolean}\n */\n public ticking: boolean;\n\n /**\n * 'bound' call for prepareItems().\n * @type {Function}\n */\n private delayedTick: IArrowFunction;\n\n /**\n * @param {PIXI.IRenderer} renderer - A reference to the current renderer\n */\n constructor(renderer: IRenderer)\n {\n this.limiter = new CountLimiter(BasePrepare.uploadsPerFrame);\n this.renderer = renderer;\n this.uploadHookHelper = null;\n this.queue = [];\n this.addHooks = [];\n this.uploadHooks = [];\n this.completes = [];\n this.ticking = false;\n this.delayedTick = (): void =>\n {\n // unlikely, but in case we were destroyed between tick() and delayedTick()\n if (!this.queue)\n {\n return;\n }\n this.prepareItems();\n };\n\n // hooks to find the correct texture\n this.registerFindHook(findText);\n this.registerFindHook(findTextStyle);\n this.registerFindHook(findMultipleBaseTextures);\n this.registerFindHook(findBaseTexture);\n this.registerFindHook(findTexture);\n\n // upload hooks\n this.registerUploadHook(drawText);\n this.registerUploadHook(calculateTextStyle);\n }\n\n /**\n * Upload all the textures and graphics to the GPU.\n * @method PIXI.BasePrepare#upload\n * @param {PIXI.DisplayObject|PIXI.Container|PIXI.BaseTexture|PIXI.Texture|PIXI.Graphics|PIXI.Text} [item] -\n * Container or display object to search for items to upload or the items to upload themselves,\n * or optionally ommitted, if items have been added using {@link PIXI.BasePrepare#add `prepare.add`}.\n */\n upload(item?: IDisplayObjectExtended | Container | BaseTexture | Texture): Promise\n {\n return new Promise((resolve) =>\n {\n // If a display object, search for items\n // that we could upload\n if (item)\n {\n this.add(item as IDisplayObjectExtended | Container | BaseTexture | Texture);\n }\n\n // Get the items for upload from the display\n if (this.queue.length)\n {\n this.completes.push(resolve);\n\n if (!this.ticking)\n {\n this.ticking = true;\n Ticker.system.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY);\n }\n }\n else\n {\n resolve();\n }\n });\n }\n\n /**\n * Handle tick update\n * @private\n */\n tick(): void\n {\n setTimeout(this.delayedTick, 0);\n }\n\n /**\n * Actually prepare items. This is handled outside of the tick because it will take a while\n * and we do NOT want to block the current animation frame from rendering.\n * @private\n */\n prepareItems(): void\n {\n this.limiter.beginFrame();\n // Upload the graphics\n while (this.queue.length && this.limiter.allowedToUpload())\n {\n const item = this.queue[0];\n let uploaded = false;\n\n if (item && !item._destroyed)\n {\n for (let i = 0, len = this.uploadHooks.length; i < len; i++)\n {\n if (this.uploadHooks[i](this.uploadHookHelper, item))\n {\n this.queue.shift();\n uploaded = true;\n break;\n }\n }\n }\n\n if (!uploaded)\n {\n this.queue.shift();\n }\n }\n\n // We're finished\n if (!this.queue.length)\n {\n this.ticking = false;\n\n const completes = this.completes.slice(0);\n\n this.completes.length = 0;\n\n for (let i = 0, len = completes.length; i < len; i++)\n {\n completes[i]();\n }\n }\n else\n {\n // if we are not finished, on the next rAF do this again\n Ticker.system.addOnce(this.tick, this, UPDATE_PRIORITY.UTILITY);\n }\n }\n\n /**\n * Adds hooks for finding items.\n * @param {Function} addHook - Function call that takes two parameters: `item:*, queue:Array`\n * function must return `true` if it was able to add item to the queue.\n * @returns Instance of plugin for chaining.\n */\n registerFindHook(addHook: IFindHook): this\n {\n if (addHook)\n {\n this.addHooks.push(addHook);\n }\n\n return this;\n }\n\n /**\n * Adds hooks for uploading items.\n * @param {Function} uploadHook - Function call that takes two parameters: `prepare:CanvasPrepare, item:*` and\n * function must return `true` if it was able to handle upload of item.\n * @returns Instance of plugin for chaining.\n */\n registerUploadHook(uploadHook: IUploadHook): this\n {\n if (uploadHook)\n {\n this.uploadHooks.push(uploadHook);\n }\n\n return this;\n }\n\n /**\n * Manually add an item to the uploading queue.\n * @param {PIXI.DisplayObject|PIXI.Container|PIXI.BaseTexture|PIXI.Texture|PIXI.Graphics|PIXI.Text|*} item - Object to\n * add to the queue\n * @returns Instance of plugin for chaining.\n */\n add(item: IDisplayObjectExtended | Container | BaseTexture | Texture): this\n {\n // Add additional hooks for finding elements on special\n // types of objects that\n for (let i = 0, len = this.addHooks.length; i < len; i++)\n {\n if (this.addHooks[i](item, this.queue))\n {\n break;\n }\n }\n\n // Get children recursively\n if (item instanceof Container)\n {\n for (let i = item.children.length - 1; i >= 0; i--)\n {\n this.add(item.children[i]);\n }\n }\n\n return this;\n }\n\n /** Destroys the plugin, don't use after this. */\n destroy(): void\n {\n if (this.ticking)\n {\n Ticker.system.remove(this.tick, this);\n }\n this.ticking = false;\n this.addHooks = null;\n this.uploadHooks = null;\n this.renderer = null;\n this.completes = null;\n this.queue = null;\n this.limiter = null;\n this.uploadHookHelper = null;\n }\n}\n","import { BaseTexture, extensions, ExtensionType } from '@pixi/core';\nimport { Graphics } from '@pixi/graphics';\nimport { BasePrepare } from './BasePrepare';\n\nimport type { ExtensionMetadata, IRenderer, ISystem, Renderer } from '@pixi/core';\nimport type { IDisplayObjectExtended } from './BasePrepare';\n\n/**\n * Built-in hook to upload PIXI.Texture objects to the GPU.\n * @private\n * @param renderer - instance of the webgl renderer\n * @param item - Item to check\n * @returns If item was uploaded.\n */\nfunction uploadBaseTextures(renderer: IRenderer | BasePrepare, item: IDisplayObjectExtended | BaseTexture): boolean\n{\n if (item instanceof BaseTexture)\n {\n // if the texture already has a GL texture, then the texture has been prepared or rendered\n // before now. If the texture changed, then the changer should be calling texture.update() which\n // reuploads the texture without need for preparing it again\n if (!item._glTextures[(renderer as Renderer).CONTEXT_UID])\n {\n (renderer as Renderer).texture.bind(item);\n }\n\n return true;\n }\n\n return false;\n}\n\n/**\n * Built-in hook to upload PIXI.Graphics to the GPU.\n * @private\n * @param renderer - instance of the webgl renderer\n * @param item - Item to check\n * @returns If item was uploaded.\n */\nfunction uploadGraphics(renderer: IRenderer | BasePrepare, item: IDisplayObjectExtended): boolean\n{\n if (!(item instanceof Graphics))\n {\n return false;\n }\n\n const { geometry } = item;\n\n // update dirty graphics to get batches\n item.finishPoly();\n geometry.updateBatches();\n\n const { batches } = geometry;\n\n // upload all textures found in styles\n for (let i = 0; i < batches.length; i++)\n {\n const { texture } = batches[i].style;\n\n if (texture)\n {\n uploadBaseTextures(renderer, texture.baseTexture);\n }\n }\n\n // if its not batchable - update vao for particular shader\n if (!geometry.batchable)\n {\n (renderer as Renderer).geometry.bind(geometry, (item as any)._resolveDirectShader((renderer as Renderer)));\n }\n\n return true;\n}\n\n/**\n * Built-in hook to find graphics.\n * @private\n * @param item - Display object to check\n * @param queue - Collection of items to upload\n * @returns if a PIXI.Graphics object was found.\n */\nfunction findGraphics(item: IDisplayObjectExtended, queue: Array): boolean\n{\n if (item instanceof Graphics)\n {\n queue.push(item);\n\n return true;\n }\n\n return false;\n}\n\n/**\n * The prepare plugin provides renderer-specific plugins for pre-rendering DisplayObjects. These plugins are useful for\n * asynchronously preparing and uploading to the GPU assets, textures, graphics waiting to be displayed.\n *\n * Do not instantiate this plugin directly. It is available from the `renderer.prepare` property.\n * @example\n * import { Application, Graphics } from 'pixi.js';\n *\n * // Create a new application (prepare will be auto-added to renderer)\n * const app = new Application();\n * document.body.appendChild(app.view);\n *\n * // Don't start rendering right away\n * app.stop();\n *\n * // Create a display object\n * const rect = new Graphics()\n * .beginFill(0x00ff00)\n * .drawRect(40, 40, 200, 200);\n *\n * // Add to the stage\n * app.stage.addChild(rect);\n *\n * // Don't start rendering until the graphic is uploaded to the GPU\n * app.renderer.prepare.upload(app.stage, () => {\n * app.start();\n * });\n * @memberof PIXI\n */\nexport class Prepare extends BasePrepare implements ISystem\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n name: 'prepare',\n type: ExtensionType.RendererSystem,\n };\n\n /**\n * @param {PIXI.Renderer} renderer - A reference to the current renderer\n */\n constructor(renderer: Renderer)\n {\n super(renderer);\n\n this.uploadHookHelper = this.renderer;\n\n // Add textures and graphics to upload\n this.registerFindHook(findGraphics);\n this.registerUploadHook(uploadBaseTextures);\n this.registerUploadHook(uploadGraphics);\n }\n}\n\nextensions.add(Prepare);\n","import { settings, utils } from '@pixi/core';\nimport { BasePrepare } from './BasePrepare';\n\nObject.defineProperties(settings, {\n /**\n * Default number of uploads per frame using prepare plugin.\n * @static\n * @memberof PIXI.settings\n * @name UPLOADS_PER_FRAME\n * @deprecated since 7.1.0\n * @see PIXI.BasePrepare.uploadsPerFrame\n * @type {number}\n */\n UPLOADS_PER_FRAME:\n {\n get()\n {\n return BasePrepare.uploadsPerFrame;\n },\n set(value: number)\n {\n if (process.env.DEBUG)\n {\n // eslint-disable-next-line max-len\n utils.deprecation('7.1.0', 'settings.UPLOADS_PER_FRAME is deprecated, use prepare.BasePrepare.uploadsPerFrame');\n }\n BasePrepare.uploadsPerFrame = value;\n },\n },\n});\n\nexport { settings };\n","import { Point, Rectangle, Texture, TextureMatrix, Transform } from '@pixi/core';\nimport { Sprite } from '@pixi/sprite';\n\nimport type { IBaseTextureOptions, IPoint, IPointData, ISize, ObservablePoint, Renderer, TextureSource } from '@pixi/core';\nimport type { IDestroyOptions } from '@pixi/display';\n\nconst tempPoint = new Point();\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface TilingSprite extends GlobalMixins.TilingSprite {}\n\n/**\n * A tiling sprite is a fast way of rendering a tiling image.\n * @memberof PIXI\n */\nexport class TilingSprite extends Sprite\n{\n /** Tile transform */\n public tileTransform: Transform;\n\n /** Matrix that is applied to UV to get the coords in Texture normalized space to coords in BaseTexture space. */\n public uvMatrix: TextureMatrix;\n\n /**\n * Flags whether the tiling pattern should originate from the origin instead of the top-left corner in\n * local space.\n *\n * This will make the texture coordinates assigned to each vertex dependent on the value of the anchor. Without\n * this, the top-left corner always gets the (0, 0) texture coordinate.\n * @default false\n */\n public uvRespectAnchor: boolean;\n\n /**\n * Note: The wrap mode of the texture is forced to REPEAT on render if the size of the texture\n * is a power of two, the texture's wrap mode is CLAMP, and the texture hasn't been bound yet.\n * @param texture - The texture of the tiling sprite.\n * @param width - The width of the tiling sprite.\n * @param height - The height of the tiling sprite.\n */\n constructor(texture: Texture, width = 100, height = 100)\n {\n super(texture);\n\n this.tileTransform = new Transform();\n\n // The width of the tiling sprite\n this._width = width;\n\n // The height of the tiling sprite\n this._height = height;\n\n this.uvMatrix = this.texture.uvMatrix || new TextureMatrix(texture);\n\n /**\n * Plugin that is responsible for rendering this element.\n * Allows to customize the rendering process without overriding '_render' method.\n * @default 'tilingSprite'\n */\n this.pluginName = 'tilingSprite';\n\n this.uvRespectAnchor = false;\n }\n /**\n * Changes frame clamping in corresponding textureTransform, shortcut\n * Change to -0.5 to add a pixel to the edge, recommended for transparent trimmed textures in atlas\n * @default 0.5\n * @member {number}\n */\n get clampMargin(): number\n {\n return this.uvMatrix.clampMargin;\n }\n\n set clampMargin(value: number)\n {\n this.uvMatrix.clampMargin = value;\n this.uvMatrix.update(true);\n }\n\n /** The scaling of the image that is being tiled. */\n get tileScale(): ObservablePoint\n {\n return this.tileTransform.scale;\n }\n\n set tileScale(value: IPointData)\n {\n this.tileTransform.scale.copyFrom(value as IPoint);\n }\n\n /** The offset of the image that is being tiled. */\n get tilePosition(): ObservablePoint\n {\n return this.tileTransform.position;\n }\n\n set tilePosition(value: ObservablePoint)\n {\n this.tileTransform.position.copyFrom(value as IPoint);\n }\n\n /**\n * @protected\n */\n protected _onTextureUpdate(): void\n {\n if (this.uvMatrix)\n {\n this.uvMatrix.texture = this._texture;\n }\n this._cachedTint = 0xFFFFFF;\n }\n\n /**\n * Renders the object using the WebGL renderer\n * @param renderer - The renderer\n */\n protected _render(renderer: Renderer): void\n {\n // tweak our texture temporarily..\n const texture = this._texture;\n\n if (!texture || !texture.valid)\n {\n return;\n }\n\n this.tileTransform.updateLocalTransform();\n this.uvMatrix.update();\n\n renderer.batch.setObjectRenderer(renderer.plugins[this.pluginName]);\n renderer.plugins[this.pluginName].render(this);\n }\n\n /** Updates the bounds of the tiling sprite. */\n protected _calculateBounds(): void\n {\n const minX = this._width * -this._anchor._x;\n const minY = this._height * -this._anchor._y;\n const maxX = this._width * (1 - this._anchor._x);\n const maxY = this._height * (1 - this._anchor._y);\n\n this._bounds.addFrame(this.transform, minX, minY, maxX, maxY);\n }\n\n /**\n * Gets the local bounds of the sprite object.\n * @param rect - Optional output rectangle.\n * @returns The bounds.\n */\n public getLocalBounds(rect?: Rectangle): Rectangle\n {\n // we can do a fast local bounds if the sprite has no children!\n if (this.children.length === 0)\n {\n this._bounds.minX = this._width * -this._anchor._x;\n this._bounds.minY = this._height * -this._anchor._y;\n this._bounds.maxX = this._width * (1 - this._anchor._x);\n this._bounds.maxY = this._height * (1 - this._anchor._y);\n\n if (!rect)\n {\n if (!this._localBoundsRect)\n {\n this._localBoundsRect = new Rectangle();\n }\n\n rect = this._localBoundsRect;\n }\n\n return this._bounds.getRectangle(rect);\n }\n\n return super.getLocalBounds.call(this, rect);\n }\n\n /**\n * Checks if a point is inside this tiling sprite.\n * @param point - The point to check.\n * @returns Whether or not the sprite contains the point.\n */\n public containsPoint(point: IPointData): boolean\n {\n this.worldTransform.applyInverse(point, tempPoint);\n\n const width = this._width;\n const height = this._height;\n const x1 = -width * this.anchor._x;\n\n if (tempPoint.x >= x1 && tempPoint.x < x1 + width)\n {\n const y1 = -height * this.anchor._y;\n\n if (tempPoint.y >= y1 && tempPoint.y < y1 + height)\n {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Destroys this sprite and optionally its texture and children\n * @param {object|boolean} [options] - Options parameter. A boolean will act as if all options\n * have been set to that value\n * @param {boolean} [options.children=false] - if set to true, all the children will have their destroy\n * method called as well. 'options' will be passed on to those calls.\n * @param {boolean} [options.texture=false] - Should it destroy the current texture of the sprite as well\n * @param {boolean} [options.baseTexture=false] - Should it destroy the base texture of the sprite as well\n */\n public destroy(options?: IDestroyOptions | boolean): void\n {\n super.destroy(options);\n\n this.tileTransform = null;\n this.uvMatrix = null;\n }\n\n /**\n * Helper function that creates a new tiling sprite based on the source you provide.\n * The source can be - frame id, image url, video url, canvas element, video element, base texture\n * @static\n * @param {string|PIXI.Texture|HTMLCanvasElement|HTMLVideoElement} source - Source to create texture from\n * @param {object} options - See {@link PIXI.BaseTexture}'s constructor for options.\n * @param {number} options.width - required width of the tiling sprite\n * @param {number} options.height - required height of the tiling sprite\n * @returns {PIXI.TilingSprite} The newly created texture\n */\n static from(source: TextureSource | Texture, options: ISize & IBaseTextureOptions): TilingSprite\n {\n const texture = (source instanceof Texture)\n ? source\n : Texture.from(source, options);\n\n return new TilingSprite(\n texture,\n options.width,\n options.height\n );\n }\n\n /** The width of the sprite, setting this will actually modify the scale to achieve the value set. */\n get width(): number\n {\n return this._width;\n }\n\n set width(value: number)\n {\n this._width = value;\n }\n\n /** The height of the TilingSprite, setting this will actually modify the scale to achieve the value set. */\n get height(): number\n {\n return this._height;\n }\n\n set height(value: number)\n {\n this._height = value;\n }\n}\n","import {\n Color,\n extensions,\n ExtensionType,\n Matrix,\n ObjectRenderer,\n QuadUv,\n Shader,\n State,\n utils,\n WRAP_MODES\n} from '@pixi/core';\nimport gl2FragmentSrc from './sprite-tiling.frag';\nimport gl2VertexSrc from './sprite-tiling.vert';\nimport gl1FragmentSrc from './sprite-tiling-fallback.frag';\nimport gl1VertexSrc from './sprite-tiling-fallback.vert';\nimport fragmentSimpleSrc from './sprite-tiling-simple.frag';\n\nimport type { ExtensionMetadata, Renderer } from '@pixi/core';\nimport type { TilingSprite } from './TilingSprite';\n\nconst tempMat = new Matrix();\n\n/**\n * WebGL renderer plugin for tiling sprites\n * @class\n * @memberof PIXI\n * @extends PIXI.ObjectRenderer\n */\nexport class TilingSpriteRenderer extends ObjectRenderer\n{\n /** @ignore */\n static extension: ExtensionMetadata = {\n name: 'tilingSprite',\n type: ExtensionType.RendererPlugin,\n };\n\n public shader: Shader;\n public simpleShader: Shader;\n public quad: QuadUv;\n public readonly state: State;\n\n /**\n * constructor for renderer\n * @param {PIXI.Renderer} renderer - The renderer this tiling awesomeness works for.\n */\n constructor(renderer: Renderer)\n {\n super(renderer);\n\n // WebGL version is not available during initialization!\n renderer.runners.contextChange.add(this);\n\n this.quad = new QuadUv();\n\n /**\n * The WebGL state in which this renderer will work.\n * @member {PIXI.State}\n * @readonly\n */\n this.state = State.for2d();\n }\n\n /** Creates shaders when context is initialized. */\n contextChange(): void\n {\n const renderer = this.renderer;\n const uniforms = { globals: renderer.globalUniforms };\n\n this.simpleShader = Shader.from(gl1VertexSrc, fragmentSimpleSrc, uniforms);\n this.shader = renderer.context.webGLVersion > 1\n ? Shader.from(gl2VertexSrc, gl2FragmentSrc, uniforms)\n : Shader.from(gl1VertexSrc, gl1FragmentSrc, uniforms);\n }\n\n /**\n * @param {PIXI.TilingSprite} ts - tilingSprite to be rendered\n */\n public render(ts: TilingSprite): void\n {\n const renderer = this.renderer;\n const quad = this.quad;\n\n let vertices = quad.vertices;\n\n vertices[0] = vertices[6] = (ts._width) * -ts.anchor.x;\n vertices[1] = vertices[3] = ts._height * -ts.anchor.y;\n\n vertices[2] = vertices[4] = (ts._width) * (1.0 - ts.anchor.x);\n vertices[5] = vertices[7] = ts._height * (1.0 - ts.anchor.y);\n\n const anchorX = ts.uvRespectAnchor ? ts.anchor.x : 0;\n const anchorY = ts.uvRespectAnchor ? ts.anchor.y : 0;\n\n vertices = quad.uvs;\n\n vertices[0] = vertices[6] = -anchorX;\n vertices[1] = vertices[3] = -anchorY;\n\n vertices[2] = vertices[4] = 1.0 - anchorX;\n vertices[5] = vertices[7] = 1.0 - anchorY;\n\n quad.invalidate();\n\n const tex = ts._texture;\n const baseTex = tex.baseTexture;\n const premultiplied = baseTex.alphaMode > 0;\n const lt = ts.tileTransform.localTransform;\n const uv = ts.uvMatrix;\n let isSimple = baseTex.isPowerOfTwo\n && tex.frame.width === baseTex.width && tex.frame.height === baseTex.height;\n\n // auto, force repeat wrapMode for big tiling textures\n if (isSimple)\n {\n if (!baseTex._glTextures[renderer.CONTEXT_UID])\n {\n if (baseTex.wrapMode === WRAP_MODES.CLAMP)\n {\n baseTex.wrapMode = WRAP_MODES.REPEAT;\n }\n }\n else\n {\n isSimple = baseTex.wrapMode !== WRAP_MODES.CLAMP;\n }\n }\n\n const shader = isSimple ? this.simpleShader : this.shader;\n\n const w = tex.width;\n const h = tex.height;\n const W = ts._width;\n const H = ts._height;\n\n tempMat.set(lt.a * w / W,\n lt.b * w / H,\n lt.c * h / W,\n lt.d * h / H,\n lt.tx / W,\n lt.ty / H);\n\n // that part is the same as above:\n // tempMat.identity();\n // tempMat.scale(tex.width, tex.height);\n // tempMat.prepend(lt);\n // tempMat.scale(1.0 / ts._width, 1.0 / ts._height);\n\n tempMat.invert();\n if (isSimple)\n {\n tempMat.prepend(uv.mapCoord);\n }\n else\n {\n shader.uniforms.uMapCoord = uv.mapCoord.toArray(true);\n shader.uniforms.uClampFrame = uv.uClampFrame;\n shader.uniforms.uClampOffset = uv.uClampOffset;\n }\n\n shader.uniforms.uTransform = tempMat.toArray(true);\n shader.uniforms.uColor = Color.shared\n .setValue(ts.tint)\n .premultiply(ts.worldAlpha, premultiplied)\n .toArray(shader.uniforms.uColor);\n\n shader.uniforms.translationMatrix = ts.transform.worldTransform.toArray(true);\n shader.uniforms.uSampler = tex;\n\n renderer.shader.bind(shader);\n renderer.geometry.bind(quad);\n\n this.state.blendMode = utils.correctBlendMode(ts.blendMode, premultiplied);\n renderer.state.set(this.state);\n renderer.geometry.draw(this.renderer.gl.TRIANGLES, 6, 0);\n }\n}\n\nextensions.add(TilingSpriteRenderer);\n","import { BaseTexture, Rectangle, Texture, utils } from '@pixi/core';\n\nimport type { ImageResource, IPointData, ITextureBorders } from '@pixi/core';\n\n/**\n * Represents the JSON data for a spritesheet atlas.\n * @memberof PIXI\n */\nexport interface ISpritesheetFrameData\n{\n frame: {\n h: number;\n w: number;\n x: number;\n y: number;\n };\n trimmed?: boolean;\n rotated?: boolean;\n sourceSize?: {\n h: number;\n w: number;\n };\n spriteSourceSize?: {\n h?: number;\n w?: number;\n x: number;\n y: number;\n };\n anchor?: IPointData;\n borders?: ITextureBorders;\n}\n\n/**\n * Atlas format.\n * @memberof PIXI\n */\nexport interface ISpritesheetData\n{\n animations?: utils.Dict;\n frames: utils.Dict;\n meta: {\n app?: string;\n format?: string;\n frameTags?: {\n from: number;\n name: string;\n to: number;\n direction: string;\n }[];\n image?: string;\n layers?: {\n blendMode: string;\n name: string;\n opacity: number;\n }[];\n scale: string | number;\n size?: {\n h: number;\n w: number;\n };\n slices?: {\n color: string;\n name: string;\n keys: {\n frame: number,\n bounds: {\n x: number;\n y: number;\n w: number;\n h: number;\n };\n }[];\n }[];\n // eslint-disable-next-line camelcase\n related_multi_packs?: string[];\n version?: string;\n };\n}\n\n/**\n * Utility class for maintaining reference to a collection\n * of Textures on a single Spritesheet.\n *\n * To access a sprite sheet from your code you may pass its JSON data file to Pixi's loader:\n *\n * ```js\n * import { Assets } from 'pixi.js';\n *\n * const sheet = await Assets.load('images/spritesheet.json');\n * ```\n *\n * Alternately, you may circumvent the loader by instantiating the Spritesheet directly:\n *\n * ```js\n * import { Spritesheet } from 'pixi.js';\n *\n * const sheet = new Spritesheet(texture, spritesheetData);\n * await sheet.parse();\n * console.log('Spritesheet ready to use!');\n * ```\n *\n * With the `sheet.textures` you can create Sprite objects, and `sheet.animations` can be used to create an AnimatedSprite.\n *\n * Here's an example of a sprite sheet JSON data file:\n * ```json\n * {\n * \"frames\": {\n * \"enemy1.png\":\n * {\n * \"frame\": {\"x\":103,\"y\":1,\"w\":32,\"h\":32},\n * \"spriteSourceSize\": {\"x\":0,\"y\":0,\"w\":32,\"h\":32},\n * \"sourceSize\": {\"w\":32,\"h\":32},\n * \"anchor\": {\"x\":16,\"y\":16}\n * },\n * \"enemy2.png\":\n * {\n * \"frame\": {\"x\":103,\"y\":35,\"w\":32,\"h\":32},\n * \"spriteSourceSize\": {\"x\":0,\"y\":0,\"w\":32,\"h\":32},\n * \"sourceSize\": {\"w\":32,\"h\":32},\n * \"anchor\": {\"x\":16,\"y\":16}\n * },\n * \"button.png\":\n * {\n * \"frame\": {\"x\":1,\"y\":1,\"w\":100,\"h\":100},\n * \"spriteSourceSize\": {\"x\":0,\"y\":0,\"w\":100,\"h\":100},\n * \"sourceSize\": {\"w\":100,\"h\":100},\n * \"anchor\": {\"x\":0,\"y\":0},\n * \"borders\": {\"left\":35,\"top\":35,\"right\":35,\"bottom\":35}\n * }\n * },\n *\n * \"animations\": {\n * \"enemy\": [\"enemy1.png\",\"enemy2.png\"]\n * },\n *\n * \"meta\": {\n * \"image\": \"sheet.png\",\n * \"format\": \"RGBA8888\",\n * \"size\": {\"w\":136,\"h\":102},\n * \"scale\": \"1\"\n * }\n * }\n * ```\n * Sprite sheets can be packed using tools like {@link https://codeandweb.com/texturepacker|TexturePacker},\n * {@link https://renderhjs.net/shoebox/|Shoebox} or {@link https://github.com/krzysztof-o/spritesheet.js|Spritesheet.js}.\n * Default anchor points (see {@link PIXI.Texture#defaultAnchor}), default 9-slice borders\n * (see {@link PIXI.Texture#defaultBorders}) and grouping of animation sprites are currently only\n * supported by TexturePacker.\n * @memberof PIXI\n */\nexport class Spritesheet\n{\n /** The maximum number of Textures to build per process. */\n static readonly BATCH_SIZE = 1000;\n\n /** For multi-packed spritesheets, this contains a reference to all the other spritesheets it depends on. */\n public linkedSheets: Spritesheet[] = [];\n\n /** Reference to ths source texture. */\n public baseTexture: BaseTexture;\n\n /**\n * A map containing all textures of the sprite sheet.\n * Can be used to create a {@link PIXI.Sprite|Sprite}:\n * @example\n * import { Sprite } from 'pixi.js';\n *\n * new Sprite(sheet.textures['image.png']);\n */\n public textures: Record;\n\n /**\n * A map containing the textures for each animation.\n * Can be used to create an {@link PIXI.AnimatedSprite|AnimatedSprite}:\n * @example\n * import { AnimatedSprite } from 'pixi.js';\n *\n * new AnimatedSprite(sheet.animations['anim_name']);\n */\n public animations: Record, Texture[]>;\n\n /**\n * Reference to the original JSON data.\n * @type {object}\n */\n public data: S;\n\n /** The resolution of the spritesheet. */\n public resolution: number;\n\n /**\n * Reference to original source image from the Loader. This reference is retained so we\n * can destroy the Texture later on. It is never used internally.\n */\n private _texture: Texture;\n\n /**\n * Map of spritesheet frames.\n * @type {object}\n */\n private _frames: S['frames'];\n\n /** Collection of frame names. */\n private _frameKeys: (keyof S['frames'])[];\n\n /** Current batch index being processed. */\n private _batchIndex: number;\n\n /**\n * Callback when parse is completed.\n * @type {Function}\n */\n private _callback: (textures: utils.Dict) => void;\n\n /**\n * @param texture - Reference to the source BaseTexture object.\n * @param {object} data - Spritesheet image data.\n * @param resolutionFilename - The filename to consider when determining\n * the resolution of the spritesheet. If not provided, the imageUrl will\n * be used on the BaseTexture.\n */\n constructor(texture: BaseTexture | Texture, data: S, resolutionFilename: string = null)\n {\n this._texture = texture instanceof Texture ? texture : null;\n this.baseTexture = texture instanceof BaseTexture ? texture : this._texture.baseTexture;\n this.textures = {} as Record;\n this.animations = {} as Record, Texture[]>;\n this.data = data;\n\n const resource = this.baseTexture.resource as ImageResource;\n\n this.resolution = this._updateResolution(resolutionFilename || (resource ? resource.url : null));\n this._frames = this.data.frames;\n this._frameKeys = Object.keys(this._frames);\n this._batchIndex = 0;\n this._callback = null;\n }\n\n /**\n * Generate the resolution from the filename or fallback\n * to the meta.scale field of the JSON data.\n * @param resolutionFilename - The filename to use for resolving\n * the default resolution.\n * @returns Resolution to use for spritesheet.\n */\n private _updateResolution(resolutionFilename: string = null): number\n {\n const { scale } = this.data.meta;\n\n // Use a defaultValue of `null` to check if a url-based resolution is set\n let resolution = utils.getResolutionOfUrl(resolutionFilename, null);\n\n // No resolution found via URL\n if (resolution === null)\n {\n // Use the scale value or default to 1\n resolution = typeof scale === 'number' ? scale : parseFloat(scale ?? '1');\n }\n\n // For non-1 resolutions, update baseTexture\n if (resolution !== 1)\n {\n this.baseTexture.setResolution(resolution);\n }\n\n return resolution;\n }\n\n /**\n * Parser spritesheet from loaded data. This is done asynchronously\n * to prevent creating too many Texture within a single process.\n * @method PIXI.Spritesheet#parse\n */\n public parse(): Promise>\n {\n return new Promise((resolve) =>\n {\n this._callback = resolve;\n this._batchIndex = 0;\n\n if (this._frameKeys.length <= Spritesheet.BATCH_SIZE)\n {\n this._processFrames(0);\n this._processAnimations();\n this._parseComplete();\n }\n else\n {\n this._nextBatch();\n }\n });\n }\n\n /**\n * Process a batch of frames\n * @param initialFrameIndex - The index of frame to start.\n */\n private _processFrames(initialFrameIndex: number): void\n {\n let frameIndex = initialFrameIndex;\n const maxFrames = Spritesheet.BATCH_SIZE;\n\n while (frameIndex - initialFrameIndex < maxFrames && frameIndex < this._frameKeys.length)\n {\n const i = this._frameKeys[frameIndex];\n const data = this._frames[i];\n const rect = data.frame;\n\n if (rect)\n {\n let frame = null;\n let trim = null;\n const sourceSize = data.trimmed !== false && data.sourceSize\n ? data.sourceSize : data.frame;\n\n const orig = new Rectangle(\n 0,\n 0,\n Math.floor(sourceSize.w) / this.resolution,\n Math.floor(sourceSize.h) / this.resolution\n );\n\n if (data.rotated)\n {\n frame = new Rectangle(\n Math.floor(rect.x) / this.resolution,\n Math.floor(rect.y) / this.resolution,\n Math.floor(rect.h) / this.resolution,\n Math.floor(rect.w) / this.resolution\n );\n }\n else\n {\n frame = new Rectangle(\n Math.floor(rect.x) / this.resolution,\n Math.floor(rect.y) / this.resolution,\n Math.floor(rect.w) / this.resolution,\n Math.floor(rect.h) / this.resolution\n );\n }\n\n // Check to see if the sprite is trimmed\n if (data.trimmed !== false && data.spriteSourceSize)\n {\n trim = new Rectangle(\n Math.floor(data.spriteSourceSize.x) / this.resolution,\n Math.floor(data.spriteSourceSize.y) / this.resolution,\n Math.floor(rect.w) / this.resolution,\n Math.floor(rect.h) / this.resolution\n );\n }\n\n this.textures[i] = new Texture(\n this.baseTexture,\n frame,\n orig,\n trim,\n data.rotated ? 2 : 0,\n data.anchor,\n data.borders\n );\n\n // lets also add the frame to pixi's global cache for 'from' and 'fromLoader' functions\n Texture.addToCache(this.textures[i], i.toString());\n }\n\n frameIndex++;\n }\n }\n\n /** Parse animations config. */\n private _processAnimations(): void\n {\n const animations = this.data.animations || {};\n\n for (const animName in animations)\n {\n this.animations[animName as keyof S['animations']] = [];\n for (let i = 0; i < animations[animName].length; i++)\n {\n const frameName = animations[animName][i];\n\n this.animations[animName].push(this.textures[frameName]);\n }\n }\n }\n\n /** The parse has completed. */\n private _parseComplete(): void\n {\n const callback = this._callback;\n\n this._callback = null;\n this._batchIndex = 0;\n callback.call(this, this.textures);\n }\n\n /** Begin the next batch of textures. */\n private _nextBatch(): void\n {\n this._processFrames(this._batchIndex * Spritesheet.BATCH_SIZE);\n this._batchIndex++;\n setTimeout(() =>\n {\n if (this._batchIndex * Spritesheet.BATCH_SIZE < this._frameKeys.length)\n {\n this._nextBatch();\n }\n else\n {\n this._processAnimations();\n this._parseComplete();\n }\n }, 0);\n }\n\n /**\n * Destroy Spritesheet and don't use after this.\n * @param {boolean} [destroyBase=false] - Whether to destroy the base texture as well\n */\n public destroy(destroyBase = false): void\n {\n for (const i in this.textures)\n {\n this.textures[i].destroy();\n }\n this._frames = null;\n this._frameKeys = null;\n this.data = null;\n this.textures = null;\n if (destroyBase)\n {\n this._texture?.destroy();\n this.baseTexture.destroy();\n }\n this._texture = null;\n this.baseTexture = null;\n this.linkedSheets = [];\n }\n}\n","import { copySearchParams, LoaderParserPriority } from '@pixi/assets';\nimport { extensions, ExtensionType, settings, utils } from '@pixi/core';\nimport { Spritesheet } from './Spritesheet';\n\nimport type { AssetExtension, Loader, ResolvedAsset, UnresolvedAsset } from '@pixi/assets';\nimport type { Texture } from '@pixi/core';\nimport type { ISpritesheetData } from './Spritesheet';\n\nexport interface SpriteSheetJson extends ISpritesheetData\n{\n meta: {\n image: string;\n scale: string;\n // eslint-disable-next-line camelcase\n related_multi_packs?: string[];\n };\n}\n\nconst validImages = ['jpg', 'png', 'jpeg', 'avif', 'webp'];\n\nfunction getCacheableAssets(keys: string[], asset: Spritesheet, ignoreMultiPack: boolean)\n{\n const out: Record = {};\n\n keys.forEach((key: string) =>\n {\n out[key] = asset;\n });\n\n Object.keys(asset.textures).forEach((key) =>\n {\n out[key] = asset.textures[key];\n });\n\n if (!ignoreMultiPack)\n {\n const basePath = utils.path.dirname(keys[0]);\n\n asset.linkedSheets.forEach((item: Spritesheet, i) =>\n {\n const out2 = getCacheableAssets([`${basePath}/${asset.data.meta.related_multi_packs[i]}`], item, true);\n\n Object.assign(out, out2);\n });\n }\n\n return out;\n}\n\n/**\n * Asset extension for loading spritesheets.\n * @memberof PIXI\n * @type {PIXI.AssetExtension}\n */\nexport const spritesheetAsset = {\n extension: ExtensionType.Asset,\n /** Handle the caching of the related Spritesheet Textures */\n cache: {\n test: (asset: Spritesheet) => asset instanceof Spritesheet,\n getCacheableAssets: (keys: string[], asset: Spritesheet) => getCacheableAssets(keys, asset, false),\n },\n /** Resolve the the resolution of the asset. */\n resolver: {\n test: (value: string): boolean =>\n {\n const tempURL = value.split('?')[0];\n const split = tempURL.split('.');\n const extension = split.pop();\n const format = split.pop();\n\n return extension === 'json' && validImages.includes(format);\n },\n parse: (value: string): UnresolvedAsset =>\n {\n const split = value.split('.');\n\n return {\n resolution: parseFloat(settings.RETINA_PREFIX.exec(value)?.[1] ?? '1'),\n format: split[split.length - 2],\n src: value,\n };\n },\n },\n /**\n * Loader plugin that parses sprite sheets!\n * once the JSON has been loaded this checks to see if the JSON is spritesheet data.\n * If it is, we load the spritesheets image and parse the data into PIXI.Spritesheet\n * All textures in the sprite sheet are then added to the cache\n * @ignore\n */\n loader: {\n name: 'spritesheetLoader',\n\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.Normal,\n },\n\n async testParse(asset: SpriteSheetJson, options: ResolvedAsset): Promise\n {\n return (utils.path.extname(options.src).toLowerCase() === '.json' && !!asset.frames);\n },\n\n async parse(asset: SpriteSheetJson, options: ResolvedAsset, loader: Loader): Promise\n {\n let basePath = utils.path.dirname(options.src);\n\n if (basePath && basePath.lastIndexOf('/') !== (basePath.length - 1))\n {\n basePath += '/';\n }\n\n let imagePath = basePath + asset.meta.image;\n\n imagePath = copySearchParams(imagePath, options.src);\n\n const assets = await loader.load([imagePath]);\n const texture = assets[imagePath];\n const spritesheet = new Spritesheet(\n texture.baseTexture,\n asset,\n options.src,\n );\n\n await spritesheet.parse();\n\n // Check and add the multi atlas\n // Heavily influenced and based on https://github.com/rocket-ua/pixi-tps-loader/blob/master/src/ResourceLoader.js\n // eslint-disable-next-line camelcase\n const multiPacks = asset?.meta?.related_multi_packs;\n\n if (Array.isArray(multiPacks))\n {\n const promises: Promise>[] = [];\n\n for (const item of multiPacks)\n {\n if (typeof item !== 'string')\n {\n continue;\n }\n\n let itemUrl = basePath + item;\n\n // Check if the file wasn't already added as multipack\n if (options.data?.ignoreMultiPack)\n {\n continue;\n }\n\n itemUrl = copySearchParams(itemUrl, options.src);\n\n promises.push(loader.load>({\n src: itemUrl,\n data: {\n ignoreMultiPack: true,\n }\n }));\n }\n\n const res = await Promise.all(promises);\n\n spritesheet.linkedSheets = res;\n res.forEach((item) =>\n {\n item.linkedSheets = [spritesheet].concat(spritesheet.linkedSheets.filter((sp) => (sp !== item)));\n });\n }\n\n return spritesheet;\n },\n\n unload(spritesheet: Spritesheet)\n {\n spritesheet.destroy(true);\n },\n },\n} as AssetExtension;\n\nextensions.add(spritesheetAsset);\n","/* eslint-disable max-len */\n\n/**\n * Normalized parsed data from .fnt files.\n * @memberof PIXI\n */\nexport class BitmapFontData\n{\n /** @readonly */\n public info: IBitmapFontDataInfo[];\n\n /** @readonly */\n public common: IBitmapFontDataCommon[];\n\n /** @readonly */\n public page: IBitmapFontDataPage[];\n\n /** @readonly */\n public char: IBitmapFontDataChar[];\n\n /** @readonly */\n public kerning: IBitmapFontDataKerning[];\n\n /** @readonly */\n public distanceField: IBitmapFontDataDistanceField[];\n\n constructor()\n {\n this.info = [];\n this.common = [];\n this.page = [];\n this.char = [];\n this.kerning = [];\n this.distanceField = [];\n }\n}\n\n/** @memberof PIXI */\nexport interface IBitmapFontDataInfo\n{\n /** Font face */\n face: string;\n\n /** Font size */\n size: number;\n}\n\n/** @memberof PIXI */\nexport interface IBitmapFontDataCommon\n{\n /** Line height, in pixels. */\n lineHeight: number;\n}\n\n/** @memberof PIXI */\nexport interface IBitmapFontDataPage\n{\n /** Unique id for bitmap texture */\n id: number;\n\n /** File name */\n file: string;\n}\n\n/** @memberof PIXI */\nexport interface IBitmapFontDataChar\n{\n /** Unique id of character */\n id: number;\n\n /** {@link PIXI.IBitmapFontDataPage} id */\n page: number;\n\n /** x-position of character in page. */\n x: number;\n\n /** y-position of character in page. */\n y: number;\n\n /** Width of character in page. */\n width: number;\n\n /** Height of character in page. */\n height: number;\n\n /** x-offset to apply when rendering character */\n xoffset: number;\n\n /** y-offset to apply when rendering character. */\n yoffset: number;\n\n /** Advancement to apply to next character. */\n xadvance: number;\n}\n\n/** @memberof PIXI */\nexport interface IBitmapFontDataKerning\n{\n /** First character of pair */\n first: number;\n\n /** Second character of pair */\n second: number;\n\n /** x-offset to apply between first & second characters when they are next to each other. */\n amount: number;\n}\n\n/** @memberof PIXI */\nexport interface IBitmapFontDataDistanceField\n{\n /** Type of distance field */\n fieldType: string;\n\n /** Range of distance */\n distanceRange: number;\n}\n","import { BitmapFontData } from '../BitmapFontData';\n\n/**\n * Internal data format used to convert to BitmapFontData.\n * @private\n */\nexport interface IBitmapFontRawData\n{\n info: {\n face: string;\n size: string;\n }[];\n common: { lineHeight: string }[];\n page: {\n id: string;\n file: string;\n }[];\n chars: {\n count: number;\n }[];\n char: {\n id: string;\n page: string;\n x: string;\n y: string;\n width: string;\n height: string;\n xoffset: string;\n yoffset: string;\n xadvance: string;\n }[];\n kernings?: {\n count: number;\n }[];\n kerning?: {\n first: string;\n second: string;\n amount: string;\n }[];\n distanceField?: {\n fieldType: string;\n distanceRange: string;\n }[]\n}\n\n/**\n * BitmapFont format that's Text-based.\n * @private\n */\nexport class TextFormat\n{\n /**\n * Check if resource refers to txt font data.\n * @param data\n * @returns - True if resource could be treated as font data, false otherwise.\n */\n static test(data: string | XMLDocument | BitmapFontData): boolean\n {\n return typeof data === 'string' && data.startsWith('info face=');\n }\n\n /**\n * Convert text font data to a javascript object.\n * @param txt - Raw string data to be converted\n * @returns - Parsed font data\n */\n static parse(txt: string): BitmapFontData\n {\n // Retrieve data item\n const items = txt.match(/^[a-z]+\\s+.+$/gm);\n const rawData: IBitmapFontRawData = {\n info: [],\n common: [],\n page: [],\n char: [],\n chars: [],\n kerning: [],\n kernings: [],\n distanceField: [],\n };\n\n for (const i in items)\n {\n // Extract item name\n const name = items[i].match(/^[a-z]+/gm)[0] as keyof BitmapFontData;\n\n // Extract item attribute list as string ex.: \"width=10\"\n const attributeList = items[i].match(/[a-zA-Z]+=([^\\s\"']+|\"([^\"]*)\")/gm);\n\n // Convert attribute list into an object\n const itemData: any = {};\n\n for (const i in attributeList)\n {\n // Split key-value pairs\n const split = attributeList[i].split('=');\n const key = split[0];\n\n // Remove eventual quotes from value\n const strValue = split[1].replace(/\"/gm, '');\n\n // Try to convert value into float\n const floatValue = parseFloat(strValue);\n\n // Use string value case float value is NaN\n const value = isNaN(floatValue) ? strValue : floatValue;\n\n itemData[key] = value;\n }\n\n // Push current item to the resulting data\n rawData[name].push(itemData);\n }\n\n const font = new BitmapFontData();\n\n rawData.info.forEach((info) => font.info.push({\n face: info.face,\n size: parseInt(info.size, 10),\n }));\n\n rawData.common.forEach((common) => font.common.push({\n lineHeight: parseInt(common.lineHeight, 10),\n }));\n\n rawData.page.forEach((page) => font.page.push({\n id: parseInt(page.id, 10),\n file: page.file,\n }));\n\n rawData.char.forEach((char) => font.char.push({\n id: parseInt(char.id, 10),\n page: parseInt(char.page, 10),\n x: parseInt(char.x, 10),\n y: parseInt(char.y, 10),\n width: parseInt(char.width, 10),\n height: parseInt(char.height, 10),\n xoffset: parseInt(char.xoffset, 10),\n yoffset: parseInt(char.yoffset, 10),\n xadvance: parseInt(char.xadvance, 10),\n }));\n\n rawData.kerning.forEach((kerning) => font.kerning.push({\n first: parseInt(kerning.first, 10),\n second: parseInt(kerning.second, 10),\n amount: parseInt(kerning.amount, 10),\n }));\n\n rawData.distanceField.forEach((df) => font.distanceField.push({\n distanceRange: parseInt(df.distanceRange, 10),\n fieldType: df.fieldType,\n }));\n\n return font;\n }\n}\n","import { BitmapFontData } from '../BitmapFontData';\n\n/**\n * BitmapFont format that's XML-based.\n * @private\n */\nexport class XMLFormat\n{\n /**\n * Check if resource refers to xml font data.\n * @param data\n * @returns - True if resource could be treated as font data, false otherwise.\n */\n static test(data: string | XMLDocument | BitmapFontData): boolean\n {\n const xml = data as Document;\n\n return typeof data !== 'string'\n && 'getElementsByTagName' in data\n && xml.getElementsByTagName('page').length\n && xml.getElementsByTagName('info')[0].getAttribute('face') !== null;\n }\n\n /**\n * Convert the XML into BitmapFontData that we can use.\n * @param xml\n * @returns - Data to use for BitmapFont\n */\n static parse(xml: Document): BitmapFontData\n {\n const data = new BitmapFontData();\n const info = xml.getElementsByTagName('info');\n const common = xml.getElementsByTagName('common');\n const page = xml.getElementsByTagName('page');\n const char = xml.getElementsByTagName('char');\n const kerning = xml.getElementsByTagName('kerning');\n const distanceField = xml.getElementsByTagName('distanceField');\n\n for (let i = 0; i < info.length; i++)\n {\n data.info.push({\n face: info[i].getAttribute('face'),\n size: parseInt(info[i].getAttribute('size'), 10),\n });\n }\n\n for (let i = 0; i < common.length; i++)\n {\n data.common.push({\n lineHeight: parseInt(common[i].getAttribute('lineHeight'), 10),\n });\n }\n\n for (let i = 0; i < page.length; i++)\n {\n data.page.push({\n id: parseInt(page[i].getAttribute('id'), 10) || 0,\n file: page[i].getAttribute('file'),\n });\n }\n\n for (let i = 0; i < char.length; i++)\n {\n const letter = char[i];\n\n data.char.push({\n id: parseInt(letter.getAttribute('id'), 10),\n page: parseInt(letter.getAttribute('page'), 10) || 0,\n x: parseInt(letter.getAttribute('x'), 10),\n y: parseInt(letter.getAttribute('y'), 10),\n width: parseInt(letter.getAttribute('width'), 10),\n height: parseInt(letter.getAttribute('height'), 10),\n xoffset: parseInt(letter.getAttribute('xoffset'), 10),\n yoffset: parseInt(letter.getAttribute('yoffset'), 10),\n xadvance: parseInt(letter.getAttribute('xadvance'), 10),\n });\n }\n\n for (let i = 0; i < kerning.length; i++)\n {\n data.kerning.push({\n first: parseInt(kerning[i].getAttribute('first'), 10),\n second: parseInt(kerning[i].getAttribute('second'), 10),\n amount: parseInt(kerning[i].getAttribute('amount'), 10),\n });\n }\n\n for (let i = 0; i < distanceField.length; i++)\n {\n data.distanceField.push({\n fieldType: distanceField[i].getAttribute('fieldType'),\n distanceRange: parseInt(distanceField[i].getAttribute('distanceRange'), 10),\n });\n }\n\n return data;\n }\n}\n","import { settings } from '@pixi/core';\nimport { XMLFormat } from './XMLFormat';\n\nimport type { BitmapFontData } from '../BitmapFontData';\n\n/**\n * BitmapFont format that's XML-based.\n * @private\n */\nexport class XMLStringFormat\n{\n /**\n * Check if resource refers to text xml font data.\n * @param data\n * @returns - True if resource could be treated as font data, false otherwise.\n */\n static test(data: string | XMLDocument | BitmapFontData): boolean\n {\n if (typeof data === 'string' && data.includes(''))\n {\n return XMLFormat.test(settings.ADAPTER.parseXML(data));\n }\n\n return false;\n }\n\n /**\n * Convert the text XML into BitmapFontData that we can use.\n * @param xmlTxt\n * @returns - Data to use for BitmapFont\n */\n static parse(xmlTxt: string): BitmapFontData\n {\n return XMLFormat.parse(settings.ADAPTER.parseXML(xmlTxt));\n }\n}\n","import { TextFormat } from './TextFormat';\nimport { XMLFormat } from './XMLFormat';\nimport { XMLStringFormat } from './XMLStringFormat';\n\nimport type { BitmapFontData } from '../BitmapFontData';\n\n// Registered formats, maybe make this extensible in the future?\nconst formats = [\n TextFormat,\n XMLFormat,\n XMLStringFormat,\n] as const;\n\n/**\n * Auto-detect BitmapFont parsing format based on data.\n * @private\n * @param {any} data - Data to detect format\n * @returns {any} Format or null\n */\nexport function autoDetectFormat(data: string | XMLDocument | BitmapFontData): typeof formats[number] | null\n{\n for (let i = 0; i < formats.length; i++)\n {\n if (formats[i].test(data))\n {\n return formats[i];\n }\n }\n\n return null;\n}\n\nexport type { IBitmapFontRawData } from './TextFormat';\nexport { TextFormat, XMLFormat, XMLStringFormat };\n","import { Color } from '@pixi/core';\nimport { generateFillStyle } from './generateFillStyle';\n\nimport type { ICanvas, ICanvasRenderingContext2D } from '@pixi/core';\nimport type { TextMetrics, TextStyle } from '@pixi/text';\n\n// TODO: Prevent code duplication b/w drawGlyph & Text#updateText\n\n/**\n * Draws the glyph `metrics.text` on the given canvas.\n *\n * Ignored because not directly exposed.\n * @ignore\n * @param {PIXI.ICanvas} canvas\n * @param {PIXI.ICanvasRenderingContext2D} context\n * @param {TextMetrics} metrics\n * @param {number} x\n * @param {number} y\n * @param {number} resolution\n * @param {TextStyle} style\n */\nexport function drawGlyph(\n canvas: ICanvas,\n context: ICanvasRenderingContext2D,\n metrics: TextMetrics,\n x: number,\n y: number,\n resolution: number,\n style: TextStyle\n): void\n{\n const char = metrics.text;\n const fontProperties = metrics.fontProperties;\n\n context.translate(x, y);\n context.scale(resolution, resolution);\n\n const tx = style.strokeThickness / 2;\n const ty = -(style.strokeThickness / 2);\n\n context.font = style.toFontString();\n context.lineWidth = style.strokeThickness;\n context.textBaseline = style.textBaseline;\n context.lineJoin = style.lineJoin;\n context.miterLimit = style.miterLimit;\n\n // set canvas text styles\n context.fillStyle = generateFillStyle(canvas, context, style, resolution, [char], metrics);\n context.strokeStyle = style.stroke as string;\n\n if (style.dropShadow)\n {\n const dropShadowColor = style.dropShadowColor;\n const dropShadowBlur = style.dropShadowBlur * resolution;\n const dropShadowDistance = style.dropShadowDistance * resolution;\n\n context.shadowColor = Color.shared\n .setValue(dropShadowColor)\n .setAlpha(style.dropShadowAlpha)\n .toRgbaString();\n context.shadowBlur = dropShadowBlur;\n context.shadowOffsetX = Math.cos(style.dropShadowAngle) * dropShadowDistance;\n context.shadowOffsetY = Math.sin(style.dropShadowAngle) * dropShadowDistance;\n }\n else\n {\n context.shadowColor = 'black';\n context.shadowBlur = 0;\n context.shadowOffsetX = 0;\n context.shadowOffsetY = 0;\n }\n\n if (style.stroke && style.strokeThickness)\n {\n context.strokeText(char, tx, ty + metrics.lineHeight - fontProperties.descent);\n }\n if (style.fill)\n {\n context.fillText(char, tx, ty + metrics.lineHeight - fontProperties.descent);\n }\n\n context.setTransform(1, 0, 0, 1, 0, 0); // defaults needed for older browsers (e.g. Opera 29)\n\n context.fillStyle = 'rgba(0, 0, 0, 0)';\n}\n","import { TEXT_GRADIENT } from '@pixi/text';\n\nimport type { ICanvas, ICanvasRenderingContext2D } from '@pixi/core';\nimport type { TextMetrics, TextStyle } from '@pixi/text';\n\n// TODO: Prevent code duplication b/w generateFillStyle & Text#generateFillStyle\n\n/**\n * Generates the fill style. Can automatically generate a gradient based on the fill style being an array\n * @private\n * @param canvas\n * @param context\n * @param {object} style - The style.\n * @param resolution\n * @param {string[]} lines - The lines of text.\n * @param metrics\n * @returns {string|number|CanvasGradient} The fill style\n */\nexport function generateFillStyle(\n canvas: ICanvas,\n context: ICanvasRenderingContext2D,\n style: TextStyle,\n resolution: number,\n lines: string[],\n metrics: TextMetrics\n): string | CanvasGradient | CanvasPattern\n{\n // TODO: Can't have different types for getter and setter. The getter shouldn't have the number type as\n // the setter converts to string. See this thread for more details:\n // https://github.com/microsoft/TypeScript/issues/2521\n const fillStyle: string | string[] | CanvasGradient | CanvasPattern = style.fill as any;\n\n if (!Array.isArray(fillStyle))\n {\n return fillStyle;\n }\n else if (fillStyle.length === 1)\n {\n return fillStyle[0];\n }\n\n // the gradient will be evenly spaced out according to how large the array is.\n // ['#FF0000', '#00FF00', '#0000FF'] would created stops at 0.25, 0.5 and 0.75\n let gradient: string[] | CanvasGradient;\n\n // a dropshadow will enlarge the canvas and result in the gradient being\n // generated with the incorrect dimensions\n const dropShadowCorrection = (style.dropShadow) ? style.dropShadowDistance : 0;\n\n // should also take padding into account, padding can offset the gradient\n const padding = style.padding || 0;\n\n const width = (canvas.width / resolution) - dropShadowCorrection - (padding * 2);\n const height = (canvas.height / resolution) - dropShadowCorrection - (padding * 2);\n\n // make a copy of the style settings, so we can manipulate them later\n const fill = fillStyle.slice();\n const fillGradientStops = style.fillGradientStops.slice();\n\n // wanting to evenly distribute the fills. So an array of 4 colours should give fills of 0.25, 0.5 and 0.75\n if (!fillGradientStops.length)\n {\n const lengthPlus1 = fill.length + 1;\n\n for (let i = 1; i < lengthPlus1; ++i)\n {\n fillGradientStops.push(i / lengthPlus1);\n }\n }\n\n // stop the bleeding of the last gradient on the line above to the top gradient of the this line\n // by hard defining the first gradient colour at point 0, and last gradient colour at point 1\n fill.unshift(fillStyle[0]);\n fillGradientStops.unshift(0);\n\n fill.push(fillStyle[fillStyle.length - 1]);\n fillGradientStops.push(1);\n\n if (style.fillGradientType === TEXT_GRADIENT.LINEAR_VERTICAL)\n {\n // start the gradient at the top center of the canvas, and end at the bottom middle of the canvas\n gradient = context.createLinearGradient(width / 2, padding, width / 2, height + padding);\n\n // we need to repeat the gradient so that each individual line of text has the same vertical gradient effect\n // ['#FF0000', '#00FF00', '#0000FF'] over 2 lines would create stops at 0.125, 0.25, 0.375, 0.625, 0.75, 0.875\n\n // There's potential for floating point precision issues at the seams between gradient repeats.\n // The loop below generates the stops in order, so track the last generated one to prevent\n // floating point precision from making us go the teeniest bit backwards, resulting in\n // the first and last colors getting swapped.\n let lastIterationStop = 0;\n\n // Actual height of the text itself, not counting spacing for lineHeight/leading/dropShadow etc\n const textHeight = metrics.fontProperties.fontSize + style.strokeThickness;\n\n // textHeight, but as a 0-1 size in global gradient stop space\n const gradStopLineHeight = textHeight / height;\n\n for (let i = 0; i < lines.length; i++)\n {\n const thisLineTop = metrics.lineHeight * i;\n\n for (let j = 0; j < fill.length; j++)\n {\n // 0-1 stop point for the current line, multiplied to global space afterwards\n let lineStop = 0;\n\n if (typeof fillGradientStops[j] === 'number')\n {\n lineStop = fillGradientStops[j];\n }\n else\n {\n lineStop = j / fill.length;\n }\n\n const globalStop = (thisLineTop / height) + (lineStop * gradStopLineHeight);\n\n // Prevent color stop generation going backwards from floating point imprecision\n let clampedStop = Math.max(lastIterationStop, globalStop);\n\n clampedStop = Math.min(clampedStop, 1); // Cap at 1 as well for safety's sake to avoid a possible throw.\n gradient.addColorStop(clampedStop, fill[j]);\n lastIterationStop = clampedStop;\n }\n }\n }\n else\n {\n // start the gradient at the center left of the canvas, and end at the center right of the canvas\n gradient = context.createLinearGradient(padding, height / 2, width + padding, height / 2);\n\n // can just evenly space out the gradients in this case, as multiple lines makes no difference\n // to an even left to right gradient\n const totalIterations = fill.length + 1;\n let currentIteration = 1;\n\n for (let i = 0; i < fill.length; i++)\n {\n let stop: number;\n\n if (typeof fillGradientStops[i] === 'number')\n {\n stop = fillGradientStops[i];\n }\n else\n {\n stop = currentIteration / totalIterations;\n }\n gradient.addColorStop(stop, fill[i]);\n currentIteration++;\n }\n }\n\n return gradient;\n}\n","/**\n * Ponyfill for IE because it doesn't support `Array.from`\n * @param text\n * @private\n */\nexport function splitTextToCharacters(text: string): string[]\n{\n return Array.from ? Array.from(text) : text.split('');\n}\n","/**\n * Ponyfill for IE because it doesn't support `codePointAt`\n * @param str\n * @private\n */\nexport function extractCharCode(str: string): number\n{\n return str.codePointAt ? str.codePointAt(0) : str.charCodeAt(0);\n}\n","import { ALPHA_MODES, BaseTexture, MIPMAP_MODES, Rectangle, settings, Texture, utils } from '@pixi/core';\nimport { TextMetrics, TextStyle } from '@pixi/text';\nimport { BitmapFontData } from './BitmapFontData';\nimport { autoDetectFormat } from './formats';\nimport { drawGlyph, extractCharCode, resolveCharacters } from './utils';\n\nimport type { IBaseTextureOptions, ICanvas, ICanvasRenderingContext2D, SCALE_MODES } from '@pixi/core';\nimport type { ITextStyle } from '@pixi/text';\n\nexport interface IBitmapFontCharacter\n{\n xOffset: number;\n yOffset: number;\n xAdvance: number;\n texture: Texture;\n page: number;\n kerning: utils.Dict;\n}\n\ntype BaseOptions = Pick;\n\n/** @memberof PIXI */\nexport interface IBitmapFontOptions extends BaseOptions\n{\n /**\n * Characters included in the font set. You can also use ranges.\n * For example, `[['a', 'z'], ['A', 'Z'], \"!@#$%^&*()~{}[] \"]`.\n * Don't forget to include spaces ' ' in your character set!\n * @default PIXI.BitmapFont.ALPHANUMERIC\n */\n chars?: string | (string | string[])[];\n\n /**\n * Render resolution for glyphs.\n * @default 1\n */\n resolution?: number;\n\n /**\n * Padding between glyphs on texture atlas. Lower values could mean more visual artifacts\n * and bleeding from other glyphs, larger values increase the space required on the texture.\n * @default 4\n */\n padding?: number;\n\n /**\n * Optional width of atlas, smaller values to reduce memory.\n * @default 512\n */\n textureWidth?: number;\n\n /**\n * Optional height of atlas, smaller values to reduce memory.\n * @default 512\n */\n textureHeight?: number;\n\n /**\n * If mipmapping is enabled for texture. For instance, by default PixiJS only enables mipmapping\n * on Power-of-Two textures. If your textureWidth or textureHeight are not power-of-two, you\n * may consider enabling mipmapping to get better quality with lower font sizes. Note:\n * for MSDF/SDF fonts, mipmapping is not supported.\n * @default PIXI.BaseTexture.defaultOptions.mipmap\n */\n mipmap?: MIPMAP_MODES;\n\n /**\n * Anisotropic filtering level of texture.\n * @default PIXI.BaseTexture.defaultOptions.anisotropicLevel\n */\n anisotropicLevel?: number;\n\n /**\n * Default scale mode, linear, nearest. Nearest can be helpful for bitmap-style fonts.\n * @default PIXI.BaseTexture.defaultOptions.scaleMode\n */\n scaleMode?: SCALE_MODES;\n\n /**\n * Pre multiply the image alpha. Note: for MSDF/SDF fonts, alphaMode is not supported.\n * @default PIXI.BaseTexture.defaultOptions.alphaMode\n */\n alphaMode?: ALPHA_MODES;\n\n /**\n * Skip generation of kerning information for the BitmapFont.\n * If true, this could potentially increase the performance, but may impact the rendered text appearance.\n * @default false\n */\n skipKerning?: boolean;\n}\n\n/**\n * BitmapFont represents a typeface available for use with the BitmapText class. Use the `install`\n * method for adding a font to be used.\n * @memberof PIXI\n */\nexport class BitmapFont\n{\n /**\n * This character set includes all the letters in the alphabet (both lower- and upper- case).\n * @type {string[][]}\n * @example\n * BitmapFont.from('ExampleFont', style, { chars: BitmapFont.ALPHA })\n */\n public static readonly ALPHA = [['a', 'z'], ['A', 'Z'], ' '];\n\n /**\n * This character set includes all decimal digits (from 0 to 9).\n * @type {string[][]}\n * @example\n * BitmapFont.from('ExampleFont', style, { chars: BitmapFont.NUMERIC })\n */\n public static readonly NUMERIC = [['0', '9']];\n\n /**\n * This character set is the union of `BitmapFont.ALPHA` and `BitmapFont.NUMERIC`.\n * @type {string[][]}\n */\n public static readonly ALPHANUMERIC = [['a', 'z'], ['A', 'Z'], ['0', '9'], ' '];\n\n /**\n * This character set consists of all the ASCII table.\n * @member {string[][]}\n * @see http://www.asciitable.com/\n */\n public static readonly ASCII = [[' ', '~']];\n\n /**\n * Collection of default options when using `BitmapFont.from`.\n * @property {number} [resolution=1] -\n * @property {number} [textureWidth=512] -\n * @property {number} [textureHeight=512] -\n * @property {number} [padding=4] -\n * @property {string|string[]|string[][]} chars = PIXI.BitmapFont.ALPHANUMERIC\n */\n public static readonly defaultOptions: IBitmapFontOptions = {\n resolution: 1,\n textureWidth: 512,\n textureHeight: 512,\n padding: 4,\n chars: BitmapFont.ALPHANUMERIC,\n };\n\n /** Collection of available/installed fonts. */\n public static readonly available: utils.Dict = {};\n\n /** The name of the font face. */\n public readonly font: string;\n\n /** The size of the font face in pixels. */\n public readonly size: number;\n\n /** The line-height of the font face in pixels. */\n public readonly lineHeight: number;\n\n /** The map of characters by character code. */\n public readonly chars: utils.Dict;\n\n /** The map of base page textures (i.e., sheets of glyphs). */\n public readonly pageTextures: utils.Dict;\n\n /** The range of the distance field in pixels. */\n public readonly distanceFieldRange: number;\n\n /** The kind of distance field for this font or \"none\". */\n public readonly distanceFieldType: string;\n\n private _ownsTextures: boolean;\n\n /**\n * @param data\n * @param textures\n * @param ownsTextures - Setting to `true` will destroy page textures\n * when the font is uninstalled.\n */\n constructor(data: BitmapFontData, textures: Texture[] | utils.Dict, ownsTextures?: boolean)\n {\n const [info] = data.info;\n const [common] = data.common;\n const [page] = data.page;\n const [distanceField] = data.distanceField;\n const res = utils.getResolutionOfUrl(page.file);\n const pageTextures: utils.Dict = {};\n\n this._ownsTextures = ownsTextures;\n this.font = info.face;\n this.size = info.size;\n this.lineHeight = common.lineHeight / res;\n this.chars = {};\n this.pageTextures = pageTextures;\n\n // Convert the input Texture, Textures or object\n // into a page Texture lookup by \"id\"\n for (let i = 0; i < data.page.length; i++)\n {\n const { id, file } = data.page[i];\n\n pageTextures[id] = textures instanceof Array\n ? textures[i] : textures[file];\n\n // only MSDF and SDF fonts need no-premultiplied-alpha\n if (distanceField?.fieldType && distanceField.fieldType !== 'none')\n {\n pageTextures[id].baseTexture.alphaMode = ALPHA_MODES.NO_PREMULTIPLIED_ALPHA;\n pageTextures[id].baseTexture.mipmap = MIPMAP_MODES.OFF;\n }\n }\n\n // parse letters\n for (let i = 0; i < data.char.length; i++)\n {\n const { id, page } = data.char[i];\n let { x, y, width, height, xoffset, yoffset, xadvance } = data.char[i];\n\n x /= res;\n y /= res;\n width /= res;\n height /= res;\n xoffset /= res;\n yoffset /= res;\n xadvance /= res;\n\n const rect = new Rectangle(\n x + (pageTextures[page].frame.x / res),\n y + (pageTextures[page].frame.y / res),\n width,\n height\n );\n\n this.chars[id] = {\n xOffset: xoffset,\n yOffset: yoffset,\n xAdvance: xadvance,\n kerning: {},\n texture: new Texture(\n pageTextures[page].baseTexture,\n rect\n ),\n page,\n };\n }\n\n // parse kernings\n for (let i = 0; i < data.kerning.length; i++)\n {\n let { first, second, amount } = data.kerning[i];\n\n first /= res;\n second /= res;\n amount /= res;\n\n if (this.chars[second])\n {\n this.chars[second].kerning[first] = amount;\n }\n }\n\n // Store distance field information\n this.distanceFieldRange = distanceField?.distanceRange;\n this.distanceFieldType = distanceField?.fieldType?.toLowerCase() ?? 'none';\n }\n\n /** Remove references to created glyph textures. */\n public destroy(): void\n {\n for (const id in this.chars)\n {\n this.chars[id].texture.destroy();\n this.chars[id].texture = null;\n }\n\n for (const id in this.pageTextures)\n {\n if (this._ownsTextures)\n {\n this.pageTextures[id].destroy(true);\n }\n\n this.pageTextures[id] = null;\n }\n\n // Set readonly null.\n (this as any).chars = null;\n (this as any).pageTextures = null;\n }\n\n /**\n * Register a new bitmap font.\n * @param data - The\n * characters map that could be provided as xml or raw string.\n * @param textures - List of textures for each page.\n * @param ownsTextures - Set to `true` to destroy page textures\n * when the font is uninstalled. By default fonts created with\n * `BitmapFont.from` or from the `BitmapFontLoader` are `true`.\n * @returns {PIXI.BitmapFont} Result font object with font, size, lineHeight\n * and char fields.\n */\n public static install(\n data: string | XMLDocument | BitmapFontData,\n textures: Texture | Texture[] | utils.Dict,\n ownsTextures?: boolean\n ): BitmapFont\n {\n let fontData;\n\n if (data instanceof BitmapFontData)\n {\n fontData = data;\n }\n else\n {\n const format = autoDetectFormat(data);\n\n if (!format)\n {\n throw new Error('Unrecognized data format for font.');\n }\n\n fontData = format.parse(data as any);\n }\n\n // Single texture, convert to list\n if (textures instanceof Texture)\n {\n textures = [textures];\n }\n\n const font = new BitmapFont(fontData, textures, ownsTextures);\n\n BitmapFont.available[font.font] = font;\n\n return font;\n }\n\n /**\n * Remove bitmap font by name.\n * @param name - Name of the font to uninstall.\n */\n public static uninstall(name: string): void\n {\n const font = BitmapFont.available[name];\n\n if (!font)\n {\n throw new Error(`No font found named '${name}'`);\n }\n\n font.destroy();\n delete BitmapFont.available[name];\n }\n\n /**\n * Generates a bitmap-font for the given style and character set. This does not support\n * kernings yet. With `style` properties, only the following non-layout properties are used:\n *\n * - {@link PIXI.TextStyle#dropShadow|dropShadow}\n * - {@link PIXI.TextStyle#dropShadowDistance|dropShadowDistance}\n * - {@link PIXI.TextStyle#dropShadowColor|dropShadowColor}\n * - {@link PIXI.TextStyle#dropShadowBlur|dropShadowBlur}\n * - {@link PIXI.TextStyle#dropShadowAngle|dropShadowAngle}\n * - {@link PIXI.TextStyle#fill|fill}\n * - {@link PIXI.TextStyle#fillGradientStops|fillGradientStops}\n * - {@link PIXI.TextStyle#fillGradientType|fillGradientType}\n * - {@link PIXI.TextStyle#fontFamily|fontFamily}\n * - {@link PIXI.TextStyle#fontSize|fontSize}\n * - {@link PIXI.TextStyle#fontVariant|fontVariant}\n * - {@link PIXI.TextStyle#fontWeight|fontWeight}\n * - {@link PIXI.TextStyle#lineJoin|lineJoin}\n * - {@link PIXI.TextStyle#miterLimit|miterLimit}\n * - {@link PIXI.TextStyle#stroke|stroke}\n * - {@link PIXI.TextStyle#strokeThickness|strokeThickness}\n * - {@link PIXI.TextStyle#textBaseline|textBaseline}\n * @param name - The name of the custom font to use with BitmapText.\n * @param textStyle - Style options to render with BitmapFont.\n * @param options - Setup options for font or name of the font.\n * @returns Font generated by style options.\n * @example\n * import { BitmapFont, BitmapText } from 'pixi.js';\n *\n * BitmapFont.from('TitleFont', {\n * fontFamily: 'Arial',\n * fontSize: 12,\n * strokeThickness: 2,\n * fill: 'purple',\n * });\n *\n * const title = new BitmapText('This is the title', { fontName: 'TitleFont' });\n */\n public static from(name: string, textStyle?: TextStyle | Partial, options?: IBitmapFontOptions): BitmapFont\n {\n if (!name)\n {\n throw new Error('[BitmapFont] Property `name` is required.');\n }\n\n const {\n chars,\n padding,\n resolution,\n textureWidth,\n textureHeight,\n ...baseOptions\n } = Object.assign({}, BitmapFont.defaultOptions, options);\n\n const charsList = resolveCharacters(chars);\n const style = textStyle instanceof TextStyle ? textStyle : new TextStyle(textStyle);\n const lineWidth = textureWidth;\n const fontData = new BitmapFontData();\n\n fontData.info[0] = {\n face: style.fontFamily as string,\n size: style.fontSize as number,\n };\n fontData.common[0] = {\n lineHeight: style.fontSize as number,\n };\n\n let positionX = 0;\n let positionY = 0;\n\n let canvas: ICanvas;\n let context: ICanvasRenderingContext2D;\n let baseTexture: BaseTexture;\n let maxCharHeight = 0;\n const baseTextures: BaseTexture[] = [];\n const textures: Texture[] = [];\n\n for (let i = 0; i < charsList.length; i++)\n {\n if (!canvas)\n {\n canvas = settings.ADAPTER.createCanvas();\n canvas.width = textureWidth;\n canvas.height = textureHeight;\n\n context = canvas.getContext('2d');\n baseTexture = new BaseTexture(canvas, { resolution, ...baseOptions });\n\n baseTextures.push(baseTexture);\n textures.push(new Texture(baseTexture));\n\n fontData.page.push({\n id: textures.length - 1,\n file: '',\n });\n }\n\n // Measure glyph dimensions\n const character = charsList[i];\n const metrics = TextMetrics.measureText(character, style, false, canvas);\n const width = metrics.width;\n const height = Math.ceil(metrics.height);\n\n // This is ugly - but italics are given more space so they don't overlap\n const textureGlyphWidth = Math.ceil((style.fontStyle === 'italic' ? 2 : 1) * width);\n\n // Can't fit char anymore: next canvas please!\n if (positionY >= textureHeight - (height * resolution))\n {\n if (positionY === 0)\n {\n // We don't want user debugging an infinite loop (or do we? :)\n throw new Error(`[BitmapFont] textureHeight ${textureHeight}px is too small `\n + `(fontFamily: '${style.fontFamily}', fontSize: ${style.fontSize}px, char: '${character}')`);\n }\n\n --i;\n\n // Create new atlas once current has filled up\n canvas = null;\n context = null;\n baseTexture = null;\n positionY = 0;\n positionX = 0;\n maxCharHeight = 0;\n\n continue;\n }\n\n maxCharHeight = Math.max(height + metrics.fontProperties.descent, maxCharHeight);\n\n // Wrap line once full row has been rendered\n if ((textureGlyphWidth * resolution) + positionX >= lineWidth)\n {\n if (positionX === 0)\n {\n // Avoid infinite loop (There can be some very wide char like '\\uFDFD'!)\n throw new Error(`[BitmapFont] textureWidth ${textureWidth}px is too small `\n + `(fontFamily: '${style.fontFamily}', fontSize: ${style.fontSize}px, char: '${character}')`);\n }\n\n --i;\n positionY += maxCharHeight * resolution;\n positionY = Math.ceil(positionY);\n positionX = 0;\n maxCharHeight = 0;\n\n continue;\n }\n\n drawGlyph(canvas, context, metrics, positionX, positionY, resolution, style);\n\n // Unique (numeric) ID mapping to this glyph\n const id = extractCharCode(metrics.text);\n\n // Create a texture holding just the glyph\n fontData.char.push({\n id,\n page: textures.length - 1,\n x: positionX / resolution,\n y: positionY / resolution,\n width: textureGlyphWidth,\n height,\n xoffset: 0,\n yoffset: 0,\n xadvance: width\n - (style.dropShadow ? style.dropShadowDistance : 0)\n - (style.stroke ? style.strokeThickness : 0),\n });\n\n positionX += (textureGlyphWidth + (2 * padding)) * resolution;\n positionX = Math.ceil(positionX);\n }\n\n if (!options?.skipKerning)\n {\n // Brute-force kerning info, this can be expensive b/c it's an O(n²),\n // but we're using measureText which is native and fast.\n for (let i = 0, len = charsList.length; i < len; i++)\n {\n const first = charsList[i];\n\n for (let j = 0; j < len; j++)\n {\n const second = charsList[j];\n const c1 = context.measureText(first).width;\n const c2 = context.measureText(second).width;\n const total = context.measureText(first + second).width;\n const amount = total - (c1 + c2);\n\n if (amount)\n {\n fontData.kerning.push({\n first: extractCharCode(first),\n second: extractCharCode(second),\n amount,\n });\n }\n }\n }\n }\n\n const font = new BitmapFont(fontData, textures, true);\n\n // Make it easier to replace a font\n if (BitmapFont.available[name] !== undefined)\n {\n BitmapFont.uninstall(name);\n }\n\n BitmapFont.available[name] = font;\n\n return font;\n }\n}\n","import { splitTextToCharacters } from './splitTextToCharacters';\n\n/**\n * Processes the passed character set data and returns a flattened array of all the characters.\n *\n * Ignored because not directly exposed.\n * @ignore\n * @param {string | string[] | string[][] } chars\n * @returns {string[]} the flattened array of characters\n */\nexport function resolveCharacters(chars: string | (string | string[])[]): string[]\n{\n // Split the chars string into individual characters\n if (typeof chars === 'string')\n {\n chars = [chars];\n }\n\n // Handle an array of characters+ranges\n const result: string[] = [];\n\n for (let i = 0, j = chars.length; i < j; i++)\n {\n const item = chars[i];\n\n // Handle range delimited by start/end chars\n if (Array.isArray(item))\n {\n if (item.length !== 2)\n {\n throw new Error(`[BitmapFont]: Invalid character range length, expecting 2 got ${item.length}.`);\n }\n\n const startCode = item[0].charCodeAt(0);\n const endCode = item[1].charCodeAt(0);\n\n if (endCode < startCode)\n {\n throw new Error('[BitmapFont]: Invalid character range.');\n }\n\n for (let i = startCode, j = endCode; i <= j; i++)\n {\n result.push(String.fromCharCode(i));\n }\n }\n // Handle a character set string\n else\n {\n result.push(...splitTextToCharacters(item));\n }\n }\n\n if (result.length === 0)\n {\n throw new Error('[BitmapFont]: Empty set when resolving characters.');\n }\n\n return result;\n}\n","import { BLEND_MODES, Color, ObservablePoint, Point, Program, settings, Texture, utils } from '@pixi/core';\nimport { Container } from '@pixi/display';\nimport { Mesh, MeshGeometry, MeshMaterial } from '@pixi/mesh';\nimport { BitmapFont } from './BitmapFont';\nimport msdfFrag from './shader/msdf.frag';\nimport msdfVert from './shader/msdf.vert';\nimport { extractCharCode, splitTextToCharacters } from './utils';\n\nimport type { ColorSource, Rectangle, Renderer } from '@pixi/core';\nimport type { IDestroyOptions } from '@pixi/display';\nimport type { TextStyleAlign } from '@pixi/text';\nimport type { IBitmapTextStyle } from './BitmapTextStyle';\n\ninterface PageMeshData\n{\n index: number;\n indexCount: number;\n vertexCount: number;\n uvsCount: number;\n total: number;\n mesh: Mesh;\n vertices?: Float32Array;\n uvs?: Float32Array;\n indices?: Uint16Array;\n}\ninterface CharRenderData\n{\n texture: Texture;\n line: number;\n charCode: number;\n position: Point;\n prevSpaces: number;\n}\n\n// If we ever need more than two pools, please make a Dict or something better.\nconst pageMeshDataDefaultPageMeshData: PageMeshData[] = [];\nconst pageMeshDataMSDFPageMeshData: PageMeshData[] = [];\nconst charRenderDataPool: CharRenderData[] = [];\n\n/**\n * A BitmapText object will create a line or multiple lines of text using bitmap font.\n *\n * The primary advantage of this class over Text is that all of your textures are pre-generated and loading,\n * meaning that rendering is fast, and changing text has no performance implications.\n *\n * Supporting character sets other than latin, such as CJK languages, may be impractical due to the number of characters.\n *\n * To split a line you can use '\\n', '\\r' or '\\r\\n' in your string.\n *\n * PixiJS can auto-generate fonts on-the-fly using BitmapFont or use fnt files provided by:\n * http://www.angelcode.com/products/bmfont/ for Windows or\n * http://www.bmglyph.com/ for Mac.\n *\n * You can also use SDF, MSDF and MTSDF BitmapFonts for vector-like scaling appearance provided by:\n * https://github.com/soimy/msdf-bmfont-xml for SDF and MSDF fnt files or\n * https://github.com/Chlumsky/msdf-atlas-gen for SDF, MSDF and MTSDF json files\n *\n * A BitmapText can only be created when the font is loaded.\n * @example\n * import { BitmapText } from 'pixi.js';\n *\n * // in this case the font is in a file called 'desyrel.fnt'\n * const bitmapText = new BitmapText('text using a fancy font!', {\n * fontName: 'Desyrel',\n * fontSize: 35,\n * align: 'right',\n * });\n * @memberof PIXI\n */\nexport class BitmapText extends Container\n{\n public static styleDefaults: Partial = {\n align: 'left',\n tint: 0xFFFFFF,\n maxWidth: 0,\n letterSpacing: 0,\n };\n\n /** Set to `true` if the BitmapText needs to be redrawn. */\n public dirty: boolean;\n\n /**\n * The resolution / device pixel ratio of the canvas.\n *\n * This is set to automatically match the renderer resolution by default, but can be overridden by setting manually.\n * @default PIXI.settings.RESOLUTION\n */\n _resolution: number;\n _autoResolution: boolean;\n\n /**\n * Private tracker for the width of the overall text.\n * @private\n */\n protected _textWidth: number;\n\n /**\n * Private tracker for the height of the overall text.\n * @private\n */\n protected _textHeight: number;\n\n /**\n * Private tracker for the current text.\n * @private\n */\n protected _text: string;\n\n /**\n * The max width of this bitmap text in pixels. If the text provided is longer than the\n * value provided, line breaks will be automatically inserted in the last whitespace.\n * Disable by setting value to 0\n * @private\n */\n protected _maxWidth: number;\n\n /**\n * The max line height. This is useful when trying to use the total height of the Text,\n * ie: when trying to vertically align. (Internally used)\n * @private\n */\n protected _maxLineHeight: number;\n\n /**\n * Letter spacing. This is useful for setting the space between characters.\n * @private\n */\n protected _letterSpacing: number;\n\n /**\n * Text anchor.\n * @readonly\n * @private\n */\n protected _anchor: ObservablePoint;\n\n /**\n * Private tracker for the current font.\n * @private\n */\n protected _font?: BitmapFont;\n\n /**\n * Private tracker for the current font name.\n * @private\n */\n protected _fontName: string;\n\n /**\n * Private tracker for the current font size.\n * @private\n */\n protected _fontSize?: number;\n\n /**\n * Private tracker for the current text align.\n * @type {string}\n * @private\n */\n protected _align: TextStyleAlign;\n\n /** Collection of page mesh data. */\n protected _activePagesMeshData: PageMeshData[];\n\n /**\n * Private tracker for the current tint.\n * @private\n */\n protected _tintColor: Color;\n\n /**\n * If true PixiJS will Math.floor() x/y values when rendering.\n * @default PIXI.settings.ROUND_PIXELS\n */\n protected _roundPixels: boolean;\n\n /** Cached char texture is destroyed when BitmapText is destroyed. */\n private _textureCache: Record;\n\n /**\n * @param text - A string that you would like the text to display.\n * @param style - The style parameters.\n * @param {string} style.fontName - The installed BitmapFont name.\n * @param {number} [style.fontSize] - The size of the font in pixels, e.g. 24. If undefined,\n *. this will default to the BitmapFont size.\n * @param {string} [style.align='left'] - Alignment for multiline text ('left', 'center', 'right' or 'justify'),\n * does not affect single line text.\n * @param {PIXI.ColorSource} [style.tint=0xFFFFFF] - The tint color.\n * @param {number} [style.letterSpacing=0] - The amount of spacing between letters.\n * @param {number} [style.maxWidth=0] - The max width of the text before line wrapping.\n */\n constructor(text: string, style: Partial = {})\n {\n super();\n\n // Apply the defaults\n const { align, tint, maxWidth, letterSpacing, fontName, fontSize } = Object.assign(\n {}, BitmapText.styleDefaults, style);\n\n if (!BitmapFont.available[fontName])\n {\n throw new Error(`Missing BitmapFont \"${fontName}\"`);\n }\n\n this._activePagesMeshData = [];\n this._textWidth = 0;\n this._textHeight = 0;\n this._align = align;\n this._tintColor = new Color(tint);\n this._font = undefined;\n this._fontName = fontName;\n this._fontSize = fontSize;\n this.text = text;\n this._maxWidth = maxWidth;\n this._maxLineHeight = 0;\n this._letterSpacing = letterSpacing;\n this._anchor = new ObservablePoint((): void => { this.dirty = true; }, this, 0, 0);\n this._roundPixels = settings.ROUND_PIXELS;\n this.dirty = true;\n this._resolution = settings.RESOLUTION;\n this._autoResolution = true;\n this._textureCache = {};\n }\n\n /** Renders text and updates it when needed. This should only be called if the BitmapFont is regenerated. */\n public updateText(): void\n {\n const data = BitmapFont.available[this._fontName];\n const fontSize = this.fontSize;\n const scale = fontSize / data.size;\n const pos = new Point();\n const chars: CharRenderData[] = [];\n const lineWidths = [];\n const lineSpaces = [];\n const text = this._text.replace(/(?:\\r\\n|\\r)/g, '\\n') || ' ';\n const charsInput = splitTextToCharacters(text);\n const maxWidth = this._maxWidth * data.size / fontSize;\n const pageMeshDataPool = data.distanceFieldType === 'none'\n ? pageMeshDataDefaultPageMeshData : pageMeshDataMSDFPageMeshData;\n\n let prevCharCode = null;\n let lastLineWidth = 0;\n let maxLineWidth = 0;\n let line = 0;\n let lastBreakPos = -1;\n let lastBreakWidth = 0;\n let spacesRemoved = 0;\n let maxLineHeight = 0;\n let spaceCount = 0;\n\n for (let i = 0; i < charsInput.length; i++)\n {\n const char = charsInput[i];\n const charCode = extractCharCode(char);\n\n if ((/(?:\\s)/).test(char))\n {\n lastBreakPos = i;\n lastBreakWidth = lastLineWidth;\n spaceCount++;\n }\n\n if (char === '\\r' || char === '\\n')\n {\n lineWidths.push(lastLineWidth);\n lineSpaces.push(-1);\n maxLineWidth = Math.max(maxLineWidth, lastLineWidth);\n ++line;\n ++spacesRemoved;\n\n pos.x = 0;\n pos.y += data.lineHeight;\n prevCharCode = null;\n spaceCount = 0;\n continue;\n }\n\n const charData = data.chars[charCode];\n\n if (!charData)\n {\n continue;\n }\n\n if (prevCharCode && charData.kerning[prevCharCode])\n {\n pos.x += charData.kerning[prevCharCode];\n }\n\n const charRenderData: CharRenderData = charRenderDataPool.pop() || {\n texture: Texture.EMPTY,\n line: 0,\n charCode: 0,\n prevSpaces: 0,\n position: new Point(),\n };\n\n charRenderData.texture = charData.texture;\n charRenderData.line = line;\n charRenderData.charCode = charCode;\n charRenderData.position.x = Math.round(pos.x + charData.xOffset + (this._letterSpacing / 2));\n charRenderData.position.y = Math.round(pos.y + charData.yOffset);\n charRenderData.prevSpaces = spaceCount;\n\n chars.push(charRenderData);\n\n lastLineWidth = charRenderData.position.x\n + Math.max(charData.xAdvance - charData.xOffset, charData.texture.orig.width);\n pos.x += charData.xAdvance + this._letterSpacing;\n maxLineHeight = Math.max(maxLineHeight, (charData.yOffset + charData.texture.height));\n prevCharCode = charCode;\n\n if (lastBreakPos !== -1 && maxWidth > 0 && pos.x > maxWidth)\n {\n ++spacesRemoved;\n utils.removeItems(chars, 1 + lastBreakPos - spacesRemoved, 1 + i - lastBreakPos);\n i = lastBreakPos;\n lastBreakPos = -1;\n\n lineWidths.push(lastBreakWidth);\n lineSpaces.push(chars.length > 0 ? chars[chars.length - 1].prevSpaces : 0);\n maxLineWidth = Math.max(maxLineWidth, lastBreakWidth);\n line++;\n\n pos.x = 0;\n pos.y += data.lineHeight;\n prevCharCode = null;\n spaceCount = 0;\n }\n }\n\n const lastChar = charsInput[charsInput.length - 1];\n\n if (lastChar !== '\\r' && lastChar !== '\\n')\n {\n if ((/(?:\\s)/).test(lastChar))\n {\n lastLineWidth = lastBreakWidth;\n }\n\n lineWidths.push(lastLineWidth);\n maxLineWidth = Math.max(maxLineWidth, lastLineWidth);\n lineSpaces.push(-1);\n }\n\n const lineAlignOffsets = [];\n\n for (let i = 0; i <= line; i++)\n {\n let alignOffset = 0;\n\n if (this._align === 'right')\n {\n alignOffset = maxLineWidth - lineWidths[i];\n }\n else if (this._align === 'center')\n {\n alignOffset = (maxLineWidth - lineWidths[i]) / 2;\n }\n else if (this._align === 'justify')\n {\n alignOffset = lineSpaces[i] < 0 ? 0 : (maxLineWidth - lineWidths[i]) / lineSpaces[i];\n }\n\n lineAlignOffsets.push(alignOffset);\n }\n\n const lenChars = chars.length;\n\n const pagesMeshData: Record = {};\n\n const newPagesMeshData: PageMeshData[] = [];\n\n const activePagesMeshData = this._activePagesMeshData;\n\n pageMeshDataPool.push(...activePagesMeshData);\n\n for (let i = 0; i < lenChars; i++)\n {\n const texture = chars[i].texture;\n const baseTextureUid = texture.baseTexture.uid;\n\n if (!pagesMeshData[baseTextureUid])\n {\n let pageMeshData = pageMeshDataPool.pop();\n\n if (!pageMeshData)\n {\n const geometry = new MeshGeometry();\n let material: MeshMaterial;\n let meshBlendMode: BLEND_MODES;\n\n if (data.distanceFieldType === 'none')\n {\n material = new MeshMaterial(Texture.EMPTY);\n meshBlendMode = BLEND_MODES.NORMAL;\n }\n else\n {\n material = new MeshMaterial(Texture.EMPTY,\n { program: Program.from(msdfVert, msdfFrag), uniforms: { uFWidth: 0 } });\n meshBlendMode = BLEND_MODES.NORMAL_NPM;\n }\n\n const mesh = new Mesh(geometry, material);\n\n mesh.blendMode = meshBlendMode;\n\n pageMeshData = {\n index: 0,\n indexCount: 0,\n vertexCount: 0,\n uvsCount: 0,\n total: 0,\n mesh,\n vertices: null,\n uvs: null,\n indices: null,\n };\n }\n\n // reset data..\n pageMeshData.index = 0;\n pageMeshData.indexCount = 0;\n pageMeshData.vertexCount = 0;\n pageMeshData.uvsCount = 0;\n pageMeshData.total = 0;\n\n // TODO need to get page texture here somehow..\n const { _textureCache } = this;\n\n _textureCache[baseTextureUid] = _textureCache[baseTextureUid] || new Texture(texture.baseTexture);\n pageMeshData.mesh.texture = _textureCache[baseTextureUid];\n\n pageMeshData.mesh.tint = this._tintColor.value;\n\n newPagesMeshData.push(pageMeshData);\n\n pagesMeshData[baseTextureUid] = pageMeshData;\n }\n\n pagesMeshData[baseTextureUid].total++;\n }\n\n // lets find any previously active pageMeshDatas that are no longer required for\n // the updated text (if any), removed and return them to the pool.\n for (let i = 0; i < activePagesMeshData.length; i++)\n {\n if (!newPagesMeshData.includes(activePagesMeshData[i]))\n {\n this.removeChild(activePagesMeshData[i].mesh);\n }\n }\n\n // next lets add any new meshes, that have not yet been added to this BitmapText\n // we only add if its not already a child of this BitmapObject\n for (let i = 0; i < newPagesMeshData.length; i++)\n {\n if (newPagesMeshData[i].mesh.parent !== this)\n {\n this.addChild(newPagesMeshData[i].mesh);\n }\n }\n\n // active page mesh datas are set to be the new pages added.\n this._activePagesMeshData = newPagesMeshData;\n\n for (const i in pagesMeshData)\n {\n const pageMeshData = pagesMeshData[i];\n const total = pageMeshData.total;\n\n // lets only allocate new buffers if we can fit the new text in the current ones..\n // unless that is, we will be batching. Currently batching dose not respect the size property of mesh\n if (!(pageMeshData.indices?.length > 6 * total) || pageMeshData.vertices.length < Mesh.BATCHABLE_SIZE * 2)\n {\n pageMeshData.vertices = new Float32Array(4 * 2 * total);\n pageMeshData.uvs = new Float32Array(4 * 2 * total);\n pageMeshData.indices = new Uint16Array(6 * total);\n }\n else\n {\n const total = pageMeshData.total;\n const vertices = pageMeshData.vertices;\n\n // Clear the garbage at the end of the vertices buffer. This will prevent the bounds miscalculation.\n for (let i = total * 4 * 2; i < vertices.length; i++)\n {\n vertices[i] = 0;\n }\n }\n\n // as a buffer maybe bigger than the current word, we set the size of the meshMaterial\n // to match the number of letters needed\n pageMeshData.mesh.size = 6 * total;\n }\n\n for (let i = 0; i < lenChars; i++)\n {\n const char = chars[i];\n let offset = char.position.x + (lineAlignOffsets[char.line] * (this._align === 'justify' ? char.prevSpaces : 1));\n\n if (this._roundPixels)\n {\n offset = Math.round(offset);\n }\n\n const xPos = offset * scale;\n const yPos = char.position.y * scale;\n const texture = char.texture;\n\n const pageMesh = pagesMeshData[texture.baseTexture.uid];\n\n const textureFrame = texture.frame;\n const textureUvs = texture._uvs;\n\n const index = pageMesh.index++;\n\n pageMesh.indices[(index * 6) + 0] = 0 + (index * 4);\n pageMesh.indices[(index * 6) + 1] = 1 + (index * 4);\n pageMesh.indices[(index * 6) + 2] = 2 + (index * 4);\n pageMesh.indices[(index * 6) + 3] = 0 + (index * 4);\n pageMesh.indices[(index * 6) + 4] = 2 + (index * 4);\n pageMesh.indices[(index * 6) + 5] = 3 + (index * 4);\n\n pageMesh.vertices[(index * 8) + 0] = xPos;\n pageMesh.vertices[(index * 8) + 1] = yPos;\n\n pageMesh.vertices[(index * 8) + 2] = xPos + (textureFrame.width * scale);\n pageMesh.vertices[(index * 8) + 3] = yPos;\n\n pageMesh.vertices[(index * 8) + 4] = xPos + (textureFrame.width * scale);\n pageMesh.vertices[(index * 8) + 5] = yPos + (textureFrame.height * scale);\n\n pageMesh.vertices[(index * 8) + 6] = xPos;\n pageMesh.vertices[(index * 8) + 7] = yPos + (textureFrame.height * scale);\n\n pageMesh.uvs[(index * 8) + 0] = textureUvs.x0;\n pageMesh.uvs[(index * 8) + 1] = textureUvs.y0;\n\n pageMesh.uvs[(index * 8) + 2] = textureUvs.x1;\n pageMesh.uvs[(index * 8) + 3] = textureUvs.y1;\n\n pageMesh.uvs[(index * 8) + 4] = textureUvs.x2;\n pageMesh.uvs[(index * 8) + 5] = textureUvs.y2;\n\n pageMesh.uvs[(index * 8) + 6] = textureUvs.x3;\n pageMesh.uvs[(index * 8) + 7] = textureUvs.y3;\n }\n\n this._textWidth = maxLineWidth * scale;\n this._textHeight = (pos.y + data.lineHeight) * scale;\n\n for (const i in pagesMeshData)\n {\n const pageMeshData = pagesMeshData[i];\n\n // apply anchor\n if (this.anchor.x !== 0 || this.anchor.y !== 0)\n {\n let vertexCount = 0;\n\n const anchorOffsetX = this._textWidth * this.anchor.x;\n const anchorOffsetY = this._textHeight * this.anchor.y;\n\n for (let i = 0; i < pageMeshData.total; i++)\n {\n pageMeshData.vertices[vertexCount++] -= anchorOffsetX;\n pageMeshData.vertices[vertexCount++] -= anchorOffsetY;\n\n pageMeshData.vertices[vertexCount++] -= anchorOffsetX;\n pageMeshData.vertices[vertexCount++] -= anchorOffsetY;\n\n pageMeshData.vertices[vertexCount++] -= anchorOffsetX;\n pageMeshData.vertices[vertexCount++] -= anchorOffsetY;\n\n pageMeshData.vertices[vertexCount++] -= anchorOffsetX;\n pageMeshData.vertices[vertexCount++] -= anchorOffsetY;\n }\n }\n\n this._maxLineHeight = maxLineHeight * scale;\n\n const vertexBuffer = pageMeshData.mesh.geometry.getBuffer('aVertexPosition');\n const textureBuffer = pageMeshData.mesh.geometry.getBuffer('aTextureCoord');\n const indexBuffer = pageMeshData.mesh.geometry.getIndex();\n\n vertexBuffer.data = pageMeshData.vertices;\n textureBuffer.data = pageMeshData.uvs;\n indexBuffer.data = pageMeshData.indices;\n\n vertexBuffer.update();\n textureBuffer.update();\n indexBuffer.update();\n }\n\n for (let i = 0; i < chars.length; i++)\n {\n charRenderDataPool.push(chars[i]);\n }\n\n this._font = data;\n this.dirty = false;\n }\n\n updateTransform(): void\n {\n this.validate();\n this.containerUpdateTransform();\n }\n\n _render(renderer: Renderer): void\n {\n if (this._autoResolution && this._resolution !== renderer.resolution)\n {\n this._resolution = renderer.resolution;\n this.dirty = true;\n }\n\n // Update the uniform\n const { distanceFieldRange, distanceFieldType, size } = BitmapFont.available[this._fontName];\n\n if (distanceFieldType !== 'none')\n {\n // Inject the shader code with the correct value\n const { a, b, c, d } = this.worldTransform;\n\n const dx = Math.sqrt((a * a) + (b * b));\n const dy = Math.sqrt((c * c) + (d * d));\n const worldScale = (Math.abs(dx) + Math.abs(dy)) / 2;\n\n const fontScale = this.fontSize / size;\n\n const resolution = renderer._view.resolution;\n\n for (const mesh of this._activePagesMeshData)\n {\n mesh.mesh.shader.uniforms.uFWidth = worldScale * distanceFieldRange * fontScale * resolution;\n }\n }\n\n super._render(renderer);\n }\n\n /**\n * Validates text before calling parent's getLocalBounds\n * @returns - The rectangular bounding area\n */\n public getLocalBounds(): Rectangle\n {\n this.validate();\n\n return super.getLocalBounds();\n }\n\n /**\n * Updates text when needed\n * @private\n */\n protected validate(): void\n {\n const font = BitmapFont.available[this._fontName];\n\n if (!font)\n {\n throw new Error(`Missing BitmapFont \"${this._fontName}\"`);\n }\n if (this._font !== font)\n {\n this.dirty = true;\n }\n\n if (this.dirty)\n {\n this.updateText();\n }\n }\n\n /**\n * The tint of the BitmapText object.\n * @default 0xffffff\n */\n public get tint(): ColorSource\n {\n return this._tintColor.value;\n }\n\n public set tint(value: ColorSource)\n {\n if (this.tint === value) return;\n\n this._tintColor.setValue(value);\n\n for (let i = 0; i < this._activePagesMeshData.length; i++)\n {\n this._activePagesMeshData[i].mesh.tint = value;\n }\n }\n\n /**\n * The alignment of the BitmapText object.\n * @member {string}\n * @default 'left'\n */\n public get align(): TextStyleAlign\n {\n return this._align;\n }\n\n public set align(value: TextStyleAlign)\n {\n if (this._align !== value)\n {\n this._align = value;\n this.dirty = true;\n }\n }\n\n /** The name of the BitmapFont. */\n public get fontName(): string\n {\n return this._fontName;\n }\n\n public set fontName(value: string)\n {\n if (!BitmapFont.available[value])\n {\n throw new Error(`Missing BitmapFont \"${value}\"`);\n }\n\n if (this._fontName !== value)\n {\n this._fontName = value;\n this.dirty = true;\n }\n }\n\n /** The size of the font to display. */\n public get fontSize(): number\n {\n return this._fontSize ?? BitmapFont.available[this._fontName].size;\n }\n\n public set fontSize(value: number | undefined)\n {\n if (this._fontSize !== value)\n {\n this._fontSize = value;\n this.dirty = true;\n }\n }\n\n /**\n * The anchor sets the origin point of the text.\n *\n * The default is `(0,0)`, this means the text's origin is the top left.\n *\n * Setting the anchor to `(0.5,0.5)` means the text's origin is centered.\n *\n * Setting the anchor to `(1,1)` would mean the text's origin point will be the bottom right corner.\n */\n public get anchor(): ObservablePoint\n {\n return this._anchor;\n }\n\n public set anchor(value: ObservablePoint)\n {\n if (typeof value === 'number')\n {\n this._anchor.set(value);\n }\n else\n {\n this._anchor.copyFrom(value);\n }\n }\n\n /** The text of the BitmapText object. */\n public get text(): string\n {\n return this._text;\n }\n\n public set text(text: string)\n {\n text = String(text === null || text === undefined ? '' : text);\n\n if (this._text === text)\n {\n return;\n }\n this._text = text;\n this.dirty = true;\n }\n\n /**\n * The max width of this bitmap text in pixels. If the text provided is longer than the\n * value provided, line breaks will be automatically inserted in the last whitespace.\n * Disable by setting the value to 0.\n */\n public get maxWidth(): number\n {\n return this._maxWidth;\n }\n\n public set maxWidth(value: number)\n {\n if (this._maxWidth === value)\n {\n return;\n }\n this._maxWidth = value;\n this.dirty = true;\n }\n\n /**\n * The max line height. This is useful when trying to use the total height of the Text,\n * i.e. when trying to vertically align.\n * @readonly\n */\n public get maxLineHeight(): number\n {\n this.validate();\n\n return this._maxLineHeight;\n }\n\n /**\n * The width of the overall text, different from fontSize,\n * which is defined in the style object.\n * @readonly\n */\n public get textWidth(): number\n {\n this.validate();\n\n return this._textWidth;\n }\n\n /** Additional space between characters. */\n public get letterSpacing(): number\n {\n return this._letterSpacing;\n }\n\n public set letterSpacing(value: number)\n {\n if (this._letterSpacing !== value)\n {\n this._letterSpacing = value;\n this.dirty = true;\n }\n }\n\n /**\n * If true PixiJS will Math.floor() x/y values when rendering, stopping pixel interpolation.\n * Advantages can include sharper image quality (like text) and faster rendering on canvas.\n * The main disadvantage is movement of objects may appear less smooth.\n * To set the global default, change {@link PIXI.settings.ROUND_PIXELS}\n * @default PIXI.settings.ROUND_PIXELS\n */\n public get roundPixels(): boolean\n {\n return this._roundPixels;\n }\n\n public set roundPixels(value: boolean)\n {\n if (value !== this._roundPixels)\n {\n this._roundPixels = value;\n this.dirty = true;\n }\n }\n\n /**\n * The height of the overall text, different from fontSize,\n * which is defined in the style object.\n * @readonly\n */\n public get textHeight(): number\n {\n this.validate();\n\n return this._textHeight;\n }\n\n /**\n * The resolution / device pixel ratio of the canvas.\n *\n * This is set to automatically match the renderer resolution by default, but can be overridden by setting manually.\n * @default 1\n */\n get resolution(): number\n {\n return this._resolution;\n }\n\n set resolution(value: number)\n {\n this._autoResolution = false;\n\n if (this._resolution === value)\n {\n return;\n }\n\n this._resolution = value;\n this.dirty = true;\n }\n\n destroy(options?: boolean | IDestroyOptions): void\n {\n const { _textureCache } = this;\n const data = BitmapFont.available[this._fontName];\n const pageMeshDataPool = data.distanceFieldType === 'none'\n ? pageMeshDataDefaultPageMeshData : pageMeshDataMSDFPageMeshData;\n\n pageMeshDataPool.push(...this._activePagesMeshData);\n for (const pageMeshData of this._activePagesMeshData)\n {\n this.removeChild(pageMeshData.mesh);\n }\n this._activePagesMeshData = [];\n\n // Release references to any cached textures in page pool\n pageMeshDataPool\n .filter((page) => _textureCache[page.mesh.texture.baseTexture.uid])\n .forEach((page) =>\n {\n page.mesh.texture = Texture.EMPTY;\n });\n\n for (const id in _textureCache)\n {\n const texture = _textureCache[id];\n\n texture.destroy();\n delete _textureCache[id];\n }\n\n this._font = null;\n this._tintColor = null;\n this._textureCache = null;\n\n super.destroy(options);\n }\n}\n","import { copySearchParams, LoaderParserPriority } from '@pixi/assets';\nimport { extensions, ExtensionType, settings, utils } from '@pixi/core';\nimport { BitmapFont } from './BitmapFont';\nimport { TextFormat, XMLStringFormat } from './formats';\n\nimport type { Loader, LoaderParser, ResolvedAsset } from '@pixi/assets';\nimport type { Texture } from '@pixi/core';\nimport type { BitmapFontData } from './BitmapFontData';\n\nconst validExtensions = ['.xml', '.fnt'];\n\n/** simple loader plugin for loading in bitmap fonts! */\nexport const loadBitmapFont = {\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.Normal,\n },\n\n name: 'loadBitmapFont',\n\n test(url: string): boolean\n {\n return validExtensions.includes(utils.path.extname(url).toLowerCase());\n },\n\n async testParse(data: string): Promise\n {\n return TextFormat.test(data) || XMLStringFormat.test(data);\n },\n\n async parse(asset: string, data: ResolvedAsset, loader: Loader): Promise\n {\n const fontData: BitmapFontData = TextFormat.test(asset)\n ? TextFormat.parse(asset)\n : XMLStringFormat.parse(asset);\n\n const { src } = data;\n const { page: pages } = fontData;\n const textureUrls = [];\n\n for (let i = 0; i < pages.length; ++i)\n {\n const pageFile = pages[i].file;\n let imagePath = utils.path.join(utils.path.dirname(src), pageFile);\n\n imagePath = copySearchParams(imagePath, src);\n\n textureUrls.push(imagePath);\n }\n\n const loadedTextures = await loader.load(textureUrls);\n const textures = textureUrls.map((url) => loadedTextures[url]);\n\n return BitmapFont.install(fontData, textures, true);\n },\n\n async load(url: string, _options: ResolvedAsset): Promise\n {\n const response = await settings.ADAPTER.fetch(url);\n\n return response.text();\n },\n\n unload(bitmapFont: BitmapFont): void\n {\n bitmapFont.destroy();\n }\n} as LoaderParser;\n\nextensions.add(loadBitmapFont);\n","import { settings, utils } from '@pixi/core';\nimport { TextStyle } from '@pixi/text';\n\nimport type {\n ITextStyle,\n TextStyleFontStyle,\n TextStyleFontWeight,\n TextStyleLineJoin,\n TextStyleTextBaseline\n} from '@pixi/text';\n\n/**\n * HTMLText support more white-space options.\n * @memberof PIXI\n * @since 7.2.0\n * @see PIXI.IHTMLTextStyle\n */\nexport type HTMLTextStyleWhiteSpace = 'normal' | 'pre' | 'pre-line' | 'nowrap' | 'pre-wrap';\n\n/**\n * FontFace display options.\n * @memberof PIXI\n * @since 7.3.0\n */\nexport type FontDisplay = 'auto' | 'block' | 'swap' | 'fallback' | 'optional';\n\n// Subset of ITextStyle\ntype ITextStyleIgnore = 'whiteSpace'\n| 'fillGradientStops'\n| 'fillGradientType'\n| 'miterLimit'\n| 'textBaseline'\n| 'trim'\n| 'leading'\n| 'lineJoin';\n\n/**\n * Modifed versions from ITextStyle.\n * @memberof PIXI\n * @extends PIXI.ITextStyle\n * @since 7.2.0\n */\nexport interface IHTMLTextStyle extends Omit\n{\n /** White-space with expanded options. */\n whiteSpace: HTMLTextStyleWhiteSpace;\n}\n\nexport interface IHTMLTextFontOptions extends Pick\n{\n /** font-display property */\n display: FontDisplay;\n}\n\n/**\n * Font information for HTMLText\n * @memberof PIXI\n * @since 7.2.0\n */\nexport interface IHTMLFont\n{\n /** User-supplied URL request */\n originalUrl: string;\n /** Base64 string for font */\n dataSrc: string;\n /** FontFace installed in the document */\n fontFace: FontFace | null;\n /** Blob-based URL for font */\n src: string;\n /** Family name of font */\n family: string;\n /** Weight of the font */\n weight: TextStyleFontWeight;\n /** Style of the font */\n style: TextStyleFontStyle;\n /** Display property of the font */\n display: FontDisplay;\n /** Reference counter */\n refs: number;\n}\n\n/**\n * Used internally to restrict text style usage and convert easily to CSS.\n * @class\n * @memberof PIXI\n * @param {PIXI.ITextStyle|PIXI.IHTMLTextStyle} [style] - Style to copy.\n * @since 7.2.0\n */\nexport class HTMLTextStyle extends TextStyle\n{\n /** The collection of installed fonts */\n public static availableFonts: Record = {};\n\n /**\n * List of default options, these are largely the same as TextStyle,\n * with the exception of whiteSpace, which is set to 'normal' by default.\n */\n public static readonly defaultOptions: IHTMLTextStyle = {\n /** Align */\n align: 'left',\n /** Break words */\n breakWords: false,\n /** Drop shadow */\n dropShadow: false,\n /** Drop shadow alpha */\n dropShadowAlpha: 1,\n /**\n * Drop shadow angle\n * @type {number}\n * @default Math.PI / 6\n */\n dropShadowAngle: Math.PI / 6,\n /** Drop shadow blur */\n dropShadowBlur: 0,\n /** Drop shadow color */\n dropShadowColor: 'black',\n /** Drop shadow distance */\n dropShadowDistance: 5,\n /** Fill */\n fill: 'black',\n /** Font family */\n fontFamily: 'Arial',\n /** Font size */\n fontSize: 26,\n /** Font style */\n fontStyle: 'normal',\n /** Font variant */\n fontVariant: 'normal',\n /** Font weight */\n fontWeight: 'normal',\n /** Letter spacing */\n letterSpacing: 0,\n /** Line height */\n lineHeight: 0,\n /** Padding */\n padding: 0,\n /** Stroke */\n stroke: 'black',\n /** Stroke thickness */\n strokeThickness: 0,\n /** White space */\n whiteSpace: 'normal',\n /** Word wrap */\n wordWrap: false,\n /** Word wrap width */\n wordWrapWidth: 100,\n };\n\n /** For using custom fonts */\n private _fonts: IHTMLFont[] = [];\n\n /** List of internal style rules */\n private _overrides: string[] = [];\n\n /** Global rules or stylesheet, useful for creating rules for rendering */\n private _stylesheet = '';\n\n /** Track font changes internally */\n private fontsDirty = false;\n\n /**\n * Convert a TextStyle to HTMLTextStyle\n * @param originalStyle\n * @example\n * import {TextStyle } from 'pixi.js';\n * import {HTMLTextStyle} from '@pixi/text-html';\n * const style = new TextStyle();\n * const htmlStyle = HTMLTextStyle.from(style);\n */\n static from(originalStyle: TextStyle | Partial): HTMLTextStyle\n {\n return new HTMLTextStyle(Object.keys(HTMLTextStyle.defaultOptions)\n .reduce((obj, prop) => ({ ...obj, [prop]: originalStyle[prop as keyof IHTMLTextStyle] }), {})\n );\n }\n\n /** Clear the current font */\n public cleanFonts(): void\n {\n if (this._fonts.length > 0)\n {\n this._fonts.forEach((font) =>\n {\n URL.revokeObjectURL(font.src);\n font.refs--;\n if (font.refs === 0)\n {\n if (font.fontFace)\n {\n document.fonts.delete(font.fontFace);\n }\n delete HTMLTextStyle.availableFonts[font.originalUrl];\n }\n });\n this.fontFamily = 'Arial';\n this._fonts.length = 0;\n this.styleID++;\n this.fontsDirty = true;\n }\n }\n\n /**\n * Because of how HTMLText renders, fonts need to be imported\n * @param url\n * @param options\n */\n public loadFont(url: string, options: Partial = {}): Promise\n {\n const { availableFonts } = HTMLTextStyle;\n\n // Font is already installed\n if (availableFonts[url])\n {\n const font = availableFonts[url];\n\n this._fonts.push(font);\n font.refs++;\n this.styleID++;\n this.fontsDirty = true;\n\n return Promise.resolve();\n }\n\n return settings.ADAPTER.fetch(url)\n .then((response) => response.blob())\n .then(async (blob) => new Promise<[string, string]>((resolve, reject) =>\n {\n const src = URL.createObjectURL(blob);\n const reader = new FileReader();\n\n reader.onload = () => resolve([src, reader.result as string]);\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n }))\n .then(async ([src, dataSrc]) =>\n {\n const font: IHTMLFont = Object.assign({\n family: utils.path.basename(url, utils.path.extname(url)),\n weight: 'normal',\n style: 'normal',\n display: 'auto',\n src,\n dataSrc,\n refs: 1,\n originalUrl: url,\n fontFace: null,\n }, options);\n\n availableFonts[url] = font;\n this._fonts.push(font);\n this.styleID++;\n\n // Load it into the current DOM so we can properly measure it!\n const fontFace = new FontFace(font.family, `url(${font.src})`, {\n weight: font.weight,\n style: font.style,\n display: font.display,\n });\n\n // Keep this reference so we can remove it later from document\n font.fontFace = fontFace;\n\n await fontFace.load();\n document.fonts.add(fontFace);\n await document.fonts.ready;\n\n this.styleID++;\n this.fontsDirty = true;\n });\n }\n\n /**\n * Add a style override, this can be any CSS property\n * it will override any built-in style. This is the\n * property and the value as a string (e.g., `color: red`).\n * This will override any other internal style.\n * @param {string} value - CSS style(s) to add.\n * @example\n * style.addOverride('background-color: red');\n */\n public addOverride(...value: string[]): void\n {\n const toAdd = value.filter((v) => !this._overrides.includes(v));\n\n if (toAdd.length > 0)\n {\n this._overrides.push(...toAdd);\n this.styleID++;\n }\n }\n\n /**\n * Remove any overrides that match the value.\n * @param {string} value - CSS style to remove.\n * @example\n * style.removeOverride('background-color: red');\n */\n public removeOverride(...value: string[]): void\n {\n const toRemove = value.filter((v) => this._overrides.includes(v));\n\n if (toRemove.length > 0)\n {\n this._overrides = this._overrides.filter((v) => !toRemove.includes(v));\n this.styleID++;\n }\n }\n\n /**\n * Internally converts all of the style properties into CSS equivalents.\n * @param scale\n * @returns The CSS style string, for setting `style` property of root HTMLElement.\n */\n public toCSS(scale: number): string\n {\n return [\n `transform: scale(${scale})`,\n `transform-origin: top left`,\n 'display: inline-block',\n `color: ${this.normalizeColor(this.fill)}`,\n `font-size: ${(this.fontSize as number)}px`,\n `font-family: ${this.fontFamily}`,\n `font-weight: ${this.fontWeight}`,\n `font-style: ${this.fontStyle}`,\n `font-variant: ${this.fontVariant}`,\n `letter-spacing: ${this.letterSpacing}px`,\n `text-align: ${this.align}`,\n `padding: ${this.padding}px`,\n `white-space: ${this.whiteSpace}`,\n ...this.lineHeight ? [`line-height: ${this.lineHeight}px`] : [],\n ...this.wordWrap ? [\n `word-wrap: ${this.breakWords ? 'break-all' : 'break-word'}`,\n `max-width: ${this.wordWrapWidth}px`\n ] : [],\n ...this.strokeThickness ? [\n `-webkit-text-stroke-width: ${this.strokeThickness}px`,\n `-webkit-text-stroke-color: ${this.normalizeColor(this.stroke)}`,\n `text-stroke-width: ${this.strokeThickness}px`,\n `text-stroke-color: ${this.normalizeColor(this.stroke)}`,\n 'paint-order: stroke',\n ] : [],\n ...this.dropShadow ? [this.dropShadowToCSS()] : [],\n ...this._overrides,\n ].join(';');\n }\n\n /** Get the font CSS styles from the loaded font, If available. */\n public toGlobalCSS(): string\n {\n return this._fonts.reduce((result, font) => (\n `${result}\n @font-face {\n font-family: \"${font.family}\";\n src: url('${font.dataSrc}');\n font-weight: ${font.weight};\n font-style: ${font.style};\n font-display: ${font.display};\n }`\n ), this._stylesheet);\n }\n\n /** Internal stylesheet contents, useful for creating rules for rendering */\n public get stylesheet(): string\n {\n return this._stylesheet;\n }\n public set stylesheet(value: string)\n {\n if (this._stylesheet !== value)\n {\n this._stylesheet = value;\n this.styleID++;\n }\n }\n\n /**\n * Convert numerical colors into hex-strings\n * @param color\n */\n private normalizeColor(color: any): string\n {\n if (Array.isArray(color))\n {\n color = utils.rgb2hex(color);\n }\n\n if (typeof color === 'number')\n {\n return utils.hex2string(color);\n }\n\n return color;\n }\n\n /** Convert the internal drop-shadow settings to CSS text-shadow */\n private dropShadowToCSS(): string\n {\n let color = this.normalizeColor(this.dropShadowColor);\n const alpha = this.dropShadowAlpha;\n const x = Math.round(Math.cos(this.dropShadowAngle) * this.dropShadowDistance);\n const y = Math.round(Math.sin(this.dropShadowAngle) * this.dropShadowDistance);\n\n // Append alpha to color\n if (color.startsWith('#') && alpha < 1)\n {\n color += (alpha * 255 | 0).toString(16).padStart(2, '0');\n }\n\n const position = `${x}px ${y}px`;\n\n if (this.dropShadowBlur > 0)\n {\n return `text-shadow: ${position} ${this.dropShadowBlur}px ${color}`;\n }\n\n return `text-shadow: ${position} ${color}`;\n }\n\n /** Resets all properties to the defaults specified in TextStyle.prototype._default */\n public reset(): void\n {\n Object.assign(this, HTMLTextStyle.defaultOptions);\n }\n\n /**\n * Called after the image is loaded but before drawing to the canvas.\n * Mostly used to handle Safari's font loading bug.\n * @ignore\n */\n public onBeforeDraw()\n {\n const { fontsDirty: prevFontsDirty } = this;\n\n this.fontsDirty = false;\n\n // Safari has a known bug where embedded fonts are not available\n // immediately after the image loads, to compensate we wait an\n // arbitrary amount of time\n // @see https://bugs.webkit.org/show_bug.cgi?id=219770\n if (this.isSafari && this._fonts.length > 0 && prevFontsDirty)\n {\n return new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n return Promise.resolve();\n }\n\n /**\n * Proving that Safari is the new IE\n * @ignore\n */\n private get isSafari(): boolean\n {\n const { userAgent } = settings.ADAPTER.getNavigator();\n\n return (/^((?!chrome|android).)*safari/i).test(userAgent);\n }\n\n override set fillGradientStops(_value: number[])\n {\n console.warn('[HTMLTextStyle] fillGradientStops is not supported by HTMLText');\n }\n override get fillGradientStops()\n {\n return super.fillGradientStops;\n }\n\n override set fillGradientType(_value: number)\n {\n console.warn('[HTMLTextStyle] fillGradientType is not supported by HTMLText');\n }\n override get fillGradientType()\n {\n return super.fillGradientType;\n }\n\n override set miterLimit(_value: number)\n {\n console.warn('[HTMLTextStyle] miterLimit is not supported by HTMLText');\n }\n override get miterLimit()\n {\n return super.miterLimit;\n }\n\n override set trim(_value: boolean)\n {\n console.warn('[HTMLTextStyle] trim is not supported by HTMLText');\n }\n override get trim()\n {\n return super.trim;\n }\n\n override set textBaseline(_value: TextStyleTextBaseline)\n {\n console.warn('[HTMLTextStyle] textBaseline is not supported by HTMLText');\n }\n override get textBaseline()\n {\n return super.textBaseline;\n }\n\n override set leading(_value: number)\n {\n console.warn('[HTMLTextStyle] leading is not supported by HTMLText');\n }\n override get leading()\n {\n return super.leading;\n }\n\n override set lineJoin(_value: TextStyleLineJoin)\n {\n console.warn('[HTMLTextStyle] lineJoin is not supported by HTMLText');\n }\n override get lineJoin()\n {\n return super.lineJoin;\n }\n}\n","import { Color } from '@pixi/color';\nimport { deprecation } from '../logging/deprecation';\n\n/**\n * Converts a hexadecimal color number to an [R, G, B] array of normalized floats (numbers from 0.0 to 1.0).\n * @memberof PIXI.utils\n * @function hex2rgb\n * @see PIXI.Color.toRgbArray\n * @deprecated since 7.2.0\n * @param {number} hex - The hexadecimal number to convert\n * @param {number[]} [out=[]] - If supplied, this array will be used rather than returning a new one\n * @returns {number[]} An array representing the [R, G, B] of the color where all values are floats.\n */\nexport function hex2rgb(hex: number, out: Array | Float32Array = []): Array | Float32Array\n{\n if (process.env.DEBUG)\n {\n deprecation('7.2.0', 'utils.hex2rgb is deprecated, use Color#toRgbArray instead');\n }\n\n return Color.shared.setValue(hex).toRgbArray(out);\n}\n\n/**\n * Converts a hexadecimal color number to a string.\n * @see PIXI.Color.toHex\n * @deprecated since 7.2.0\n * @memberof PIXI.utils\n * @function hex2string\n * @param {number} hex - Number in hex (e.g., `0xffffff`)\n * @returns {string} The string color (e.g., `\"#ffffff\"`).\n */\nexport function hex2string(hex: number): string\n{\n if (process.env.DEBUG)\n {\n deprecation('7.2.0', 'utils.hex2string is deprecated, use Color#toHex instead');\n }\n\n return Color.shared.setValue(hex).toHex();\n}\n\n/**\n * Converts a string to a hexadecimal color number.\n * @deprecated since 7.2.0\n * @see PIXI.Color.toNumber\n * @memberof PIXI.utils\n * @function string2hex\n * @param {string} string - The string color (e.g., `\"#ffffff\"`)\n * @returns {number} Number in hexadecimal.\n */\nexport function string2hex(string: string): number\n{\n if (process.env.DEBUG)\n {\n deprecation('7.2.0', 'utils.string2hex is deprecated, use Color#toNumber instead');\n }\n\n return Color.shared.setValue(string).toNumber();\n}\n\n/**\n * Converts a color as an [R, G, B] array of normalized floats to a hexadecimal number.\n * @deprecated since 7.2.0\n * @see PIXI.Color.toNumber\n * @memberof PIXI.utils\n * @function rgb2hex\n * @param {number[]} rgb - Array of numbers where all values are normalized floats from 0.0 to 1.0.\n * @returns {number} Number in hexadecimal.\n */\nexport function rgb2hex(rgb: number[] | Float32Array): number\n{\n if (process.env.DEBUG)\n {\n deprecation('7.2.0', 'utils.rgb2hex is deprecated, use Color#toNumber instead');\n }\n\n return Color.shared.setValue(rgb).toNumber();\n}\n","import { Rectangle, settings, Texture, utils } from '@pixi/core';\nimport { Sprite } from '@pixi/sprite';\nimport { TextStyle } from '@pixi/text';\nimport { HTMLTextStyle } from './HTMLTextStyle';\n\nimport type { ImageResource, IRenderer, ISize, Renderer } from '@pixi/core';\nimport type { IDestroyOptions } from '@pixi/display';\nimport type { ITextStyle } from '@pixi/text';\n\n/**\n * Alternative to {@link PIXI.Text|Text} but supports multi-style HTML text. There are\n * few key differences between this and {@link PIXI.Text|Text}:\n *
• HTMLText not support {@link https://caniuse.com/mdn-svg_elements_foreignobject|Internet Explorer}.\n *
• Rendering is text asynchronous. If statically rendering, listen to `update` event on BaseTexture.\n *
• Does not support all style options (e.g., `lineJoin`, `leading`, `textBaseline`, `trim`, `miterLimit`,\n * `fillGradientStops`, `fillGradientType`)\n * @example\n * import { HTMLText } from 'pixi.js';\n *\n * const text = new HTMLText(\"Hello World\", { fontSize: 20 });\n *\n * text.texture.baseTexture.on('update', () => {\n * console.log('Text is redrawn!');\n * });\n * @class\n * @memberof PIXI\n * @extends PIXI.Sprite\n * @since 7.2.0\n */\nexport class HTMLText extends Sprite\n{\n /**\n * Default opens when destroying.\n * @type {PIXI.IDestroyOptions}\n * @property {boolean} [texture=true] - Whether to destroy the texture.\n * @property {boolean} [children=false] - Whether to destroy the children.\n * @property {boolean} [baseTexture=true] - Whether to destroy the base texture.\n */\n public static defaultDestroyOptions: IDestroyOptions = {\n texture: true,\n children: false,\n baseTexture: true,\n };\n\n /** Default maxWidth, set at construction */\n public static defaultMaxWidth = 2024;\n\n /** Default maxHeight, set at construction */\n public static defaultMaxHeight = 2024;\n\n /** Default resolution, make sure autoResolution or defaultAutoResolution is `false`. */\n public static defaultResolution: number | undefined;\n\n /** Default autoResolution for all HTMLText objects */\n public static defaultAutoResolution = true;\n\n /** The maximum width in rendered pixels that the content can be, any larger will be hidden */\n public maxWidth: number;\n\n /** The maximum height in rendered pixels that the content can be, any larger will be hidden */\n public maxHeight: number;\n\n private _domElement: HTMLElement;\n private _styleElement: HTMLElement;\n private _svgRoot: SVGSVGElement;\n private _foreignObject: SVGForeignObjectElement;\n private _image: HTMLImageElement;\n private _loadImage: HTMLImageElement;\n private _resolution: number;\n private _text: string | null = null;\n private _style: HTMLTextStyle | null = null;\n private _autoResolution = true;\n private localStyleID = -1;\n private dirty = false;\n private _updateID = 0;\n\n /** The HTMLTextStyle object is owned by this instance */\n private ownsStyle = false;\n\n /**\n * @param {string} [text] - Text contents\n * @param {PIXI.HTMLTextStyle|PIXI.TextStyle|PIXI.ITextStyle} [style] - Style setting to use.\n * Strongly recommend using an HTMLTextStyle object. Providing a PIXI.TextStyle\n * will convert the TextStyle to an HTMLTextStyle and will no longer be linked.\n */\n constructor(text = '', style: HTMLTextStyle | TextStyle | Partial = {})\n {\n super(Texture.EMPTY);\n\n const image = new Image();\n const texture = Texture.from(image, {\n scaleMode: settings.SCALE_MODE,\n resourceOptions: {\n autoLoad: false,\n },\n });\n\n texture.orig = new Rectangle();\n texture.trim = new Rectangle();\n\n this.texture = texture;\n\n const nssvg = 'http://www.w3.org/2000/svg';\n const nsxhtml = 'http://www.w3.org/1999/xhtml';\n const svgRoot = document.createElementNS(nssvg, 'svg');\n const foreignObject = document.createElementNS(nssvg, 'foreignObject');\n const domElement = document.createElementNS(nsxhtml, 'div');\n const styleElement = document.createElementNS(nsxhtml, 'style');\n\n // Arbitrary max size\n foreignObject.setAttribute('width', '10000');\n foreignObject.setAttribute('height', '10000');\n foreignObject.style.overflow = 'hidden';\n svgRoot.appendChild(foreignObject);\n\n this.maxWidth = HTMLText.defaultMaxWidth;\n this.maxHeight = HTMLText.defaultMaxHeight;\n this._domElement = domElement;\n this._styleElement = styleElement;\n this._svgRoot = svgRoot;\n this._foreignObject = foreignObject;\n this._foreignObject.appendChild(styleElement);\n this._foreignObject.appendChild(domElement);\n this._image = image;\n this._loadImage = new Image();\n this._autoResolution = HTMLText.defaultAutoResolution;\n this._resolution = HTMLText.defaultResolution ?? settings.RESOLUTION;\n this.text = text;\n this.style = style;\n }\n\n /**\n * Calculate the size of the output text without actually drawing it.\n * This includes the `padding` in the `style` object.\n * This can be used as a fast-pass to do things like text-fitting.\n * @param {object} [overrides] - Overrides for the text, style, and resolution.\n * @param {string} [overrides.text] - The text to measure, if not specified, the current text is used.\n * @param {PIXI.HTMLTextStyle} [overrides.style] - The style to measure, if not specified, the current style is used.\n * @param {number} [overrides.resolution] - The resolution to measure, if not specified, the current resolution is used.\n * @returns {PIXI.ISize} Width and height of the measured text.\n */\n measureText(overrides?: { text?: string, style?: HTMLTextStyle, resolution?: number }): ISize\n {\n const { text, style, resolution } = Object.assign({\n text: this._text,\n style: this._style,\n resolution: this._resolution,\n }, overrides);\n\n Object.assign(this._domElement, {\n innerHTML: text,\n style: style.toCSS(resolution),\n });\n this._styleElement.textContent = style.toGlobalCSS();\n\n // Measure the contents using the shadow DOM\n document.body.appendChild(this._svgRoot);\n const contentBounds = this._domElement.getBoundingClientRect();\n\n this._svgRoot.remove();\n\n const { width, height } = contentBounds;\n\n if (process.env.DEBUG)\n {\n if (width > this.maxWidth || height > this.maxHeight)\n {\n console.warn('[HTMLText] Large expanse of text, increase HTMLText.maxWidth or HTMLText.maxHeight property.');\n }\n }\n\n const contentWidth = Math.min(this.maxWidth, Math.ceil(width));\n const contentHeight = Math.min(this.maxHeight, Math.ceil(height));\n\n this._svgRoot.setAttribute('width', contentWidth.toString());\n this._svgRoot.setAttribute('height', contentHeight.toString());\n\n // Undo the changes to the DOM element\n if (text !== this._text)\n {\n this._domElement.innerHTML = this._text as string;\n }\n if (style !== this._style)\n {\n Object.assign(this._domElement, { style: this._style?.toCSS(resolution) });\n this._styleElement.textContent = this._style?.toGlobalCSS() as string;\n }\n\n return {\n width: contentWidth + (style.padding * 2),\n height: contentHeight + (style.padding * 2),\n };\n }\n\n /**\n * Manually refresh the text.\n * @public\n * @param {boolean} respectDirty - Whether to abort updating the\n * text if the Text isn't dirty and the function is called.\n */\n async updateText(respectDirty = true): Promise\n {\n const { style, _image: image, _loadImage: loadImage } = this;\n\n // check if style has changed..\n if (this.localStyleID !== style.styleID)\n {\n this.dirty = true;\n this.localStyleID = style.styleID;\n }\n\n if (!this.dirty && respectDirty)\n {\n return;\n }\n\n const { width, height } = this.measureText();\n\n // Make sure canvas is at least 1x1 so it drawable\n // for sub-pixel sizes, round up to avoid clipping\n // we update both images, to make sure bounds are correct synchronously\n image.width = loadImage.width = Math.ceil((Math.max(1, width)));\n image.height = loadImage.height = Math.ceil((Math.max(1, height)));\n\n this._updateID++;\n\n const updateID = this._updateID;\n\n await new Promise((resolve) =>\n {\n loadImage.onload = async () =>\n {\n if (updateID < this._updateID)\n {\n resolve();\n\n return;\n }\n\n // Fake waiting for the image to load\n await style.onBeforeDraw();\n\n // Swap image and loadImage, we do this to avoid\n // flashes between updateText calls, usually when\n // the onload time is longer than updateText time\n image.src = loadImage.src;\n loadImage.onload = null;\n loadImage.src = '';\n\n // Force update the texture\n this.updateTexture();\n resolve();\n };\n const svgURL = new XMLSerializer().serializeToString(this._svgRoot);\n\n loadImage.src = `data:image/svg+xml;charset=utf8,${encodeURIComponent(svgURL)}`;\n });\n }\n\n /** The raw image element that is rendered under-the-hood. */\n public get source(): HTMLImageElement\n {\n return this._image;\n }\n\n /**\n * Update the texture resource.\n * @private\n */\n updateTexture()\n {\n const { style, texture, _image: image, resolution } = this;\n const { padding } = style;\n const { baseTexture } = texture;\n\n texture.trim.width = texture._frame.width = image.width / resolution;\n texture.trim.height = texture._frame.height = image.height / resolution;\n texture.trim.x = -padding;\n texture.trim.y = -padding;\n\n texture.orig.width = texture._frame.width - (padding * 2);\n texture.orig.height = texture._frame.height - (padding * 2);\n\n // call sprite onTextureUpdate to update scale if _width or _height were set\n this._onTextureUpdate();\n\n baseTexture.setRealSize(image.width, image.height, resolution);\n\n this.dirty = false;\n }\n\n /**\n * Renders the object using the WebGL renderer\n * @param {PIXI.Renderer} renderer - The renderer\n * @private\n */\n _render(renderer: Renderer)\n {\n if (this._autoResolution && this._resolution !== renderer.resolution)\n {\n this._resolution = renderer.resolution;\n this.dirty = true;\n }\n\n this.updateText(true);\n\n super._render(renderer);\n }\n\n /**\n * Renders the object using the Canvas Renderer.\n * @private\n * @param {PIXI.CanvasRenderer} renderer - The renderer\n */\n _renderCanvas(renderer: IRenderer)\n {\n if (this._autoResolution && this._resolution !== renderer.resolution)\n {\n this._resolution = renderer.resolution;\n this.dirty = true;\n }\n\n this.updateText(true);\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n super._renderCanvas(renderer);\n }\n\n /**\n * Get the local bounds.\n * @param {PIXI.Rectangle} rect - Input rectangle.\n * @returns {PIXI.Rectangle} Local bounds\n */\n getLocalBounds(rect: Rectangle)\n {\n this.updateText(true);\n\n return super.getLocalBounds(rect);\n }\n\n _calculateBounds()\n {\n this.updateText(true);\n this.calculateVertices();\n // if we have already done this on THIS frame.\n (this as any)._bounds.addQuad(this.vertexData);\n }\n\n /**\n * Handle dirty style changes\n * @private\n */\n _onStyleChange()\n {\n this.dirty = true;\n }\n\n /**\n * Destroy this Text object. Don't use after calling.\n * @param {boolean|object} options - Same as Sprite destroy options.\n */\n destroy(options?: boolean | IDestroyOptions | undefined)\n {\n if (typeof options === 'boolean')\n {\n options = { children: options };\n }\n\n options = Object.assign({}, HTMLText.defaultDestroyOptions, options);\n\n super.destroy(options);\n\n const forceClear: any = null;\n\n // Remove any loaded fonts if we created the HTMLTextStyle\n if (this.ownsStyle)\n {\n this._style?.cleanFonts();\n }\n this._style = forceClear;\n this._svgRoot?.remove();\n this._svgRoot = forceClear;\n this._domElement?.remove();\n this._domElement = forceClear;\n this._foreignObject?.remove();\n this._foreignObject = forceClear;\n this._styleElement?.remove();\n this._styleElement = forceClear;\n\n this._loadImage.src = '';\n this._loadImage.onload = null;\n this._loadImage = forceClear;\n this._image.src = '';\n this._image = forceClear;\n }\n\n /**\n * Get the width in pixels.\n * @member {number}\n */\n get width()\n {\n this.updateText(true);\n\n return Math.abs(this.scale.x) * this._image.width / this.resolution;\n }\n\n set width(value) // eslint-disable-line require-jsdoc\n {\n this.updateText(true);\n\n const s = utils.sign(this.scale.x) || 1;\n\n this.scale.x = s * value / this._image.width / this.resolution;\n this._width = value;\n }\n\n /**\n * Get the height in pixels.\n * @member {number}\n */\n get height()\n {\n this.updateText(true);\n\n return Math.abs(this.scale.y) * this._image.height / this.resolution;\n }\n\n set height(value) // eslint-disable-line require-jsdoc\n {\n this.updateText(true);\n\n const s = utils.sign(this.scale.y) || 1;\n\n this.scale.y = s * value / this._image.height / this.resolution;\n this._height = value;\n }\n\n /** The base style to render with text. */\n get style(): HTMLTextStyle\n {\n return this._style as HTMLTextStyle;\n }\n\n set style(style: HTMLTextStyle | TextStyle | Partial) // eslint-disable-line require-jsdoc\n {\n // Don't do anything if we're re-assigning\n if (this._style === style)\n {\n return;\n }\n\n style = style || {};\n\n if (style instanceof HTMLTextStyle)\n {\n this.ownsStyle = false;\n this._style = style;\n }\n // Clone TextStyle\n else if (style instanceof TextStyle)\n {\n console.warn('[HTMLText] Cloning TextStyle, if this is not what you want, use HTMLTextStyle');\n\n this.ownsStyle = true;\n this._style = HTMLTextStyle.from(style);\n }\n else\n {\n this.ownsStyle = true;\n this._style = new HTMLTextStyle(style);\n }\n\n this.localStyleID = -1;\n this.dirty = true;\n }\n\n /**\n * Contents of text. This can be HTML text and include tags.\n * @example\n * const text = new HTMLText('This is a styled text!');\n * @member {string}\n */\n get text()\n {\n return this._text;\n }\n\n set text(text) // eslint-disable-line require-jsdoc\n {\n text = String(text === '' || text === null || text === undefined ? ' ' : text);\n text = this.sanitiseText(text);\n\n if (this._text === text)\n {\n return;\n }\n this._text = text;\n this.dirty = true;\n }\n\n /**\n * The resolution / device pixel ratio of the canvas.\n * This is set to automatically match the renderer resolution by default, but can be overridden by setting manually.\n * @member {number}\n * @default 1\n */\n get resolution(): number\n {\n return this._resolution;\n }\n\n set resolution(value: number) // eslint-disable-line require-jsdoc\n {\n this._autoResolution = false;\n\n if (this._resolution === value)\n {\n return;\n }\n\n this._resolution = value;\n this.dirty = true;\n }\n\n /**\n * Sanitise text - replace `
` with `
`, ` ` with ` `\n * @param text\n * @see https://www.sitepoint.com/community/t/xhtml-1-0-transitional-xml-parsing-error-entity-nbsp-not-defined/3392/3\n */\n private sanitiseText(text: string): string\n {\n return text\n .replace(/
/gi, '
')\n .replace(/


/gi, '
')\n .replace(/ /gi, ' ');\n }\n}\n","var resizeObservers = [];\nexport { resizeObservers };\n","var ResizeObserverBoxOptions;\n(function (ResizeObserverBoxOptions) {\n ResizeObserverBoxOptions[\"BORDER_BOX\"] = \"border-box\";\n ResizeObserverBoxOptions[\"CONTENT_BOX\"] = \"content-box\";\n ResizeObserverBoxOptions[\"DEVICE_PIXEL_CONTENT_BOX\"] = \"device-pixel-content-box\";\n})(ResizeObserverBoxOptions || (ResizeObserverBoxOptions = {}));\nexport { ResizeObserverBoxOptions };\n","var msg = 'ResizeObserver loop completed with undelivered notifications.';\nvar deliverResizeLoopError = function () {\n var event;\n if (typeof ErrorEvent === 'function') {\n event = new ErrorEvent('error', {\n message: msg\n });\n }\n else {\n event = document.createEvent('Event');\n event.initEvent('error', false, false);\n event.message = msg;\n }\n window.dispatchEvent(event);\n};\nexport { deliverResizeLoopError };\n","export var freeze = function (obj) { return Object.freeze(obj); };\n","var trigger;\nvar callbacks = [];\nvar notify = function () { return callbacks.splice(0).forEach(function (cb) { return cb(); }); };\nvar queueMicroTask = function (callback) {\n if (!trigger) {\n var toggle_1 = 0;\n var el_1 = document.createTextNode('');\n var config = { characterData: true };\n new MutationObserver(function () { return notify(); }).observe(el_1, config);\n trigger = function () { el_1.textContent = \"\".concat(toggle_1 ? toggle_1-- : toggle_1++); };\n }\n callbacks.push(callback);\n trigger();\n};\nexport { queueMicroTask };\n","import { freeze } from './utils/freeze';\nvar ResizeObserverSize = (function () {\n function ResizeObserverSize(inlineSize, blockSize) {\n this.inlineSize = inlineSize;\n this.blockSize = blockSize;\n freeze(this);\n }\n return ResizeObserverSize;\n}());\nexport { ResizeObserverSize };\n","import { freeze } from './utils/freeze';\nvar DOMRectReadOnly = (function () {\n function DOMRectReadOnly(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n this.top = this.y;\n this.left = this.x;\n this.bottom = this.top + this.height;\n this.right = this.left + this.width;\n return freeze(this);\n }\n DOMRectReadOnly.prototype.toJSON = function () {\n var _a = this, x = _a.x, y = _a.y, top = _a.top, right = _a.right, bottom = _a.bottom, left = _a.left, width = _a.width, height = _a.height;\n return { x: x, y: y, top: top, right: right, bottom: bottom, left: left, width: width, height: height };\n };\n DOMRectReadOnly.fromRect = function (rectangle) {\n return new DOMRectReadOnly(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n };\n return DOMRectReadOnly;\n}());\nexport { DOMRectReadOnly };\n","var isSVG = function (target) { return target instanceof SVGElement && 'getBBox' in target; };\nvar isHidden = function (target) {\n if (isSVG(target)) {\n var _a = target.getBBox(), width = _a.width, height = _a.height;\n return !width && !height;\n }\n var _b = target, offsetWidth = _b.offsetWidth, offsetHeight = _b.offsetHeight;\n return !(offsetWidth || offsetHeight || target.getClientRects().length);\n};\nvar isElement = function (obj) {\n var _a;\n if (obj instanceof Element) {\n return true;\n }\n var scope = (_a = obj === null || obj === void 0 ? void 0 : obj.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView;\n return !!(scope && obj instanceof scope.Element);\n};\nvar isReplacedElement = function (target) {\n switch (target.tagName) {\n case 'INPUT':\n if (target.type !== 'image') {\n break;\n }\n case 'VIDEO':\n case 'AUDIO':\n case 'EMBED':\n case 'OBJECT':\n case 'CANVAS':\n case 'IFRAME':\n case 'IMG':\n return true;\n }\n return false;\n};\nexport { isSVG, isHidden, isElement, isReplacedElement };\n","export var global = typeof window !== 'undefined' ? window : {};\n","import { ResizeObserverBoxOptions } from '../ResizeObserverBoxOptions';\nimport { ResizeObserverSize } from '../ResizeObserverSize';\nimport { DOMRectReadOnly } from '../DOMRectReadOnly';\nimport { isSVG, isHidden } from '../utils/element';\nimport { freeze } from '../utils/freeze';\nimport { global } from '../utils/global';\nvar cache = new WeakMap();\nvar scrollRegexp = /auto|scroll/;\nvar verticalRegexp = /^tb|vertical/;\nvar IE = (/msie|trident/i).test(global.navigator && global.navigator.userAgent);\nvar parseDimension = function (pixel) { return parseFloat(pixel || '0'); };\nvar size = function (inlineSize, blockSize, switchSizes) {\n if (inlineSize === void 0) { inlineSize = 0; }\n if (blockSize === void 0) { blockSize = 0; }\n if (switchSizes === void 0) { switchSizes = false; }\n return new ResizeObserverSize((switchSizes ? blockSize : inlineSize) || 0, (switchSizes ? inlineSize : blockSize) || 0);\n};\nvar zeroBoxes = freeze({\n devicePixelContentBoxSize: size(),\n borderBoxSize: size(),\n contentBoxSize: size(),\n contentRect: new DOMRectReadOnly(0, 0, 0, 0)\n});\nvar calculateBoxSizes = function (target, forceRecalculation) {\n if (forceRecalculation === void 0) { forceRecalculation = false; }\n if (cache.has(target) && !forceRecalculation) {\n return cache.get(target);\n }\n if (isHidden(target)) {\n cache.set(target, zeroBoxes);\n return zeroBoxes;\n }\n var cs = getComputedStyle(target);\n var svg = isSVG(target) && target.ownerSVGElement && target.getBBox();\n var removePadding = !IE && cs.boxSizing === 'border-box';\n var switchSizes = verticalRegexp.test(cs.writingMode || '');\n var canScrollVertically = !svg && scrollRegexp.test(cs.overflowY || '');\n var canScrollHorizontally = !svg && scrollRegexp.test(cs.overflowX || '');\n var paddingTop = svg ? 0 : parseDimension(cs.paddingTop);\n var paddingRight = svg ? 0 : parseDimension(cs.paddingRight);\n var paddingBottom = svg ? 0 : parseDimension(cs.paddingBottom);\n var paddingLeft = svg ? 0 : parseDimension(cs.paddingLeft);\n var borderTop = svg ? 0 : parseDimension(cs.borderTopWidth);\n var borderRight = svg ? 0 : parseDimension(cs.borderRightWidth);\n var borderBottom = svg ? 0 : parseDimension(cs.borderBottomWidth);\n var borderLeft = svg ? 0 : parseDimension(cs.borderLeftWidth);\n var horizontalPadding = paddingLeft + paddingRight;\n var verticalPadding = paddingTop + paddingBottom;\n var horizontalBorderArea = borderLeft + borderRight;\n var verticalBorderArea = borderTop + borderBottom;\n var horizontalScrollbarThickness = !canScrollHorizontally ? 0 : target.offsetHeight - verticalBorderArea - target.clientHeight;\n var verticalScrollbarThickness = !canScrollVertically ? 0 : target.offsetWidth - horizontalBorderArea - target.clientWidth;\n var widthReduction = removePadding ? horizontalPadding + horizontalBorderArea : 0;\n var heightReduction = removePadding ? verticalPadding + verticalBorderArea : 0;\n var contentWidth = svg ? svg.width : parseDimension(cs.width) - widthReduction - verticalScrollbarThickness;\n var contentHeight = svg ? svg.height : parseDimension(cs.height) - heightReduction - horizontalScrollbarThickness;\n var borderBoxWidth = contentWidth + horizontalPadding + verticalScrollbarThickness + horizontalBorderArea;\n var borderBoxHeight = contentHeight + verticalPadding + horizontalScrollbarThickness + verticalBorderArea;\n var boxes = freeze({\n devicePixelContentBoxSize: size(Math.round(contentWidth * devicePixelRatio), Math.round(contentHeight * devicePixelRatio), switchSizes),\n borderBoxSize: size(borderBoxWidth, borderBoxHeight, switchSizes),\n contentBoxSize: size(contentWidth, contentHeight, switchSizes),\n contentRect: new DOMRectReadOnly(paddingLeft, paddingTop, contentWidth, contentHeight)\n });\n cache.set(target, boxes);\n return boxes;\n};\nvar calculateBoxSize = function (target, observedBox, forceRecalculation) {\n var _a = calculateBoxSizes(target, forceRecalculation), borderBoxSize = _a.borderBoxSize, contentBoxSize = _a.contentBoxSize, devicePixelContentBoxSize = _a.devicePixelContentBoxSize;\n switch (observedBox) {\n case ResizeObserverBoxOptions.DEVICE_PIXEL_CONTENT_BOX:\n return devicePixelContentBoxSize;\n case ResizeObserverBoxOptions.BORDER_BOX:\n return borderBoxSize;\n default:\n return contentBoxSize;\n }\n};\nexport { calculateBoxSize, calculateBoxSizes };\n","import { calculateBoxSizes } from './algorithms/calculateBoxSize';\nimport { freeze } from './utils/freeze';\nvar ResizeObserverEntry = (function () {\n function ResizeObserverEntry(target) {\n var boxes = calculateBoxSizes(target);\n this.target = target;\n this.contentRect = boxes.contentRect;\n this.borderBoxSize = freeze([boxes.borderBoxSize]);\n this.contentBoxSize = freeze([boxes.contentBoxSize]);\n this.devicePixelContentBoxSize = freeze([boxes.devicePixelContentBoxSize]);\n }\n return ResizeObserverEntry;\n}());\nexport { ResizeObserverEntry };\n","import { isHidden } from '../utils/element';\nvar calculateDepthForNode = function (node) {\n if (isHidden(node)) {\n return Infinity;\n }\n var depth = 0;\n var parent = node.parentNode;\n while (parent) {\n depth += 1;\n parent = parent.parentNode;\n }\n return depth;\n};\nexport { calculateDepthForNode };\n","import { resizeObservers } from '../utils/resizeObservers';\nimport { ResizeObserverEntry } from '../ResizeObserverEntry';\nimport { calculateDepthForNode } from './calculateDepthForNode';\nimport { calculateBoxSize } from './calculateBoxSize';\nvar broadcastActiveObservations = function () {\n var shallowestDepth = Infinity;\n var callbacks = [];\n resizeObservers.forEach(function processObserver(ro) {\n if (ro.activeTargets.length === 0) {\n return;\n }\n var entries = [];\n ro.activeTargets.forEach(function processTarget(ot) {\n var entry = new ResizeObserverEntry(ot.target);\n var targetDepth = calculateDepthForNode(ot.target);\n entries.push(entry);\n ot.lastReportedSize = calculateBoxSize(ot.target, ot.observedBox);\n if (targetDepth < shallowestDepth) {\n shallowestDepth = targetDepth;\n }\n });\n callbacks.push(function resizeObserverCallback() {\n ro.callback.call(ro.observer, entries, ro.observer);\n });\n ro.activeTargets.splice(0, ro.activeTargets.length);\n });\n for (var _i = 0, callbacks_1 = callbacks; _i < callbacks_1.length; _i++) {\n var callback = callbacks_1[_i];\n callback();\n }\n return shallowestDepth;\n};\nexport { broadcastActiveObservations };\n","import { resizeObservers } from '../utils/resizeObservers';\nimport { calculateDepthForNode } from './calculateDepthForNode';\nvar gatherActiveObservationsAtDepth = function (depth) {\n resizeObservers.forEach(function processObserver(ro) {\n ro.activeTargets.splice(0, ro.activeTargets.length);\n ro.skippedTargets.splice(0, ro.skippedTargets.length);\n ro.observationTargets.forEach(function processTarget(ot) {\n if (ot.isActive()) {\n if (calculateDepthForNode(ot.target) > depth) {\n ro.activeTargets.push(ot);\n }\n else {\n ro.skippedTargets.push(ot);\n }\n }\n });\n });\n};\nexport { gatherActiveObservationsAtDepth };\n","import { hasActiveObservations } from '../algorithms/hasActiveObservations';\nimport { hasSkippedObservations } from '../algorithms/hasSkippedObservations';\nimport { deliverResizeLoopError } from '../algorithms/deliverResizeLoopError';\nimport { broadcastActiveObservations } from '../algorithms/broadcastActiveObservations';\nimport { gatherActiveObservationsAtDepth } from '../algorithms/gatherActiveObservationsAtDepth';\nvar process = function () {\n var depth = 0;\n gatherActiveObservationsAtDepth(depth);\n while (hasActiveObservations()) {\n depth = broadcastActiveObservations();\n gatherActiveObservationsAtDepth(depth);\n }\n if (hasSkippedObservations()) {\n deliverResizeLoopError();\n }\n return depth > 0;\n};\nexport { process };\n","import { resizeObservers } from '../utils/resizeObservers';\nvar hasActiveObservations = function () {\n return resizeObservers.some(function (ro) { return ro.activeTargets.length > 0; });\n};\nexport { hasActiveObservations };\n","import { resizeObservers } from '../utils/resizeObservers';\nvar hasSkippedObservations = function () {\n return resizeObservers.some(function (ro) { return ro.skippedTargets.length > 0; });\n};\nexport { hasSkippedObservations };\n","import { process } from './process';\nimport { global } from './global';\nimport { queueResizeObserver } from './queueResizeObserver';\nvar watching = 0;\nvar isWatching = function () { return !!watching; };\nvar CATCH_PERIOD = 250;\nvar observerConfig = { attributes: true, characterData: true, childList: true, subtree: true };\nvar events = [\n 'resize',\n 'load',\n 'transitionend',\n 'animationend',\n 'animationstart',\n 'animationiteration',\n 'keyup',\n 'keydown',\n 'mouseup',\n 'mousedown',\n 'mouseover',\n 'mouseout',\n 'blur',\n 'focus'\n];\nvar time = function (timeout) {\n if (timeout === void 0) { timeout = 0; }\n return Date.now() + timeout;\n};\nvar scheduled = false;\nvar Scheduler = (function () {\n function Scheduler() {\n var _this = this;\n this.stopped = true;\n this.listener = function () { return _this.schedule(); };\n }\n Scheduler.prototype.run = function (timeout) {\n var _this = this;\n if (timeout === void 0) { timeout = CATCH_PERIOD; }\n if (scheduled) {\n return;\n }\n scheduled = true;\n var until = time(timeout);\n queueResizeObserver(function () {\n var elementsHaveResized = false;\n try {\n elementsHaveResized = process();\n }\n finally {\n scheduled = false;\n timeout = until - time();\n if (!isWatching()) {\n return;\n }\n if (elementsHaveResized) {\n _this.run(1000);\n }\n else if (timeout > 0) {\n _this.run(timeout);\n }\n else {\n _this.start();\n }\n }\n });\n };\n Scheduler.prototype.schedule = function () {\n this.stop();\n this.run();\n };\n Scheduler.prototype.observe = function () {\n var _this = this;\n var cb = function () { return _this.observer && _this.observer.observe(document.body, observerConfig); };\n document.body ? cb() : global.addEventListener('DOMContentLoaded', cb);\n };\n Scheduler.prototype.start = function () {\n var _this = this;\n if (this.stopped) {\n this.stopped = false;\n this.observer = new MutationObserver(this.listener);\n this.observe();\n events.forEach(function (name) { return global.addEventListener(name, _this.listener, true); });\n }\n };\n Scheduler.prototype.stop = function () {\n var _this = this;\n if (!this.stopped) {\n this.observer && this.observer.disconnect();\n events.forEach(function (name) { return global.removeEventListener(name, _this.listener, true); });\n this.stopped = true;\n }\n };\n return Scheduler;\n}());\nvar scheduler = new Scheduler();\nvar updateCount = function (n) {\n !watching && n > 0 && scheduler.start();\n watching += n;\n !watching && scheduler.stop();\n};\nexport { scheduler, updateCount };\n","import { queueMicroTask } from './queueMicroTask';\nvar queueResizeObserver = function (cb) {\n queueMicroTask(function ResizeObserver() {\n requestAnimationFrame(cb);\n });\n};\nexport { queueResizeObserver };\n","import { ResizeObserverBoxOptions } from './ResizeObserverBoxOptions';\nimport { calculateBoxSize } from './algorithms/calculateBoxSize';\nimport { isSVG, isReplacedElement } from './utils/element';\nvar skipNotifyOnElement = function (target) {\n return !isSVG(target)\n && !isReplacedElement(target)\n && getComputedStyle(target).display === 'inline';\n};\nvar ResizeObservation = (function () {\n function ResizeObservation(target, observedBox) {\n this.target = target;\n this.observedBox = observedBox || ResizeObserverBoxOptions.CONTENT_BOX;\n this.lastReportedSize = {\n inlineSize: 0,\n blockSize: 0\n };\n }\n ResizeObservation.prototype.isActive = function () {\n var size = calculateBoxSize(this.target, this.observedBox, true);\n if (skipNotifyOnElement(this.target)) {\n this.lastReportedSize = size;\n }\n if (this.lastReportedSize.inlineSize !== size.inlineSize\n || this.lastReportedSize.blockSize !== size.blockSize) {\n return true;\n }\n return false;\n };\n return ResizeObservation;\n}());\nexport { ResizeObservation };\n","var ResizeObserverDetail = (function () {\n function ResizeObserverDetail(resizeObserver, callback) {\n this.activeTargets = [];\n this.skippedTargets = [];\n this.observationTargets = [];\n this.observer = resizeObserver;\n this.callback = callback;\n }\n return ResizeObserverDetail;\n}());\nexport { ResizeObserverDetail };\n","import { scheduler, updateCount } from './utils/scheduler';\nimport { ResizeObservation } from './ResizeObservation';\nimport { ResizeObserverDetail } from './ResizeObserverDetail';\nimport { resizeObservers } from './utils/resizeObservers';\nvar observerMap = new WeakMap();\nvar getObservationIndex = function (observationTargets, target) {\n for (var i = 0; i < observationTargets.length; i += 1) {\n if (observationTargets[i].target === target) {\n return i;\n }\n }\n return -1;\n};\nvar ResizeObserverController = (function () {\n function ResizeObserverController() {\n }\n ResizeObserverController.connect = function (resizeObserver, callback) {\n var detail = new ResizeObserverDetail(resizeObserver, callback);\n observerMap.set(resizeObserver, detail);\n };\n ResizeObserverController.observe = function (resizeObserver, target, options) {\n var detail = observerMap.get(resizeObserver);\n var firstObservation = detail.observationTargets.length === 0;\n if (getObservationIndex(detail.observationTargets, target) < 0) {\n firstObservation && resizeObservers.push(detail);\n detail.observationTargets.push(new ResizeObservation(target, options && options.box));\n updateCount(1);\n scheduler.schedule();\n }\n };\n ResizeObserverController.unobserve = function (resizeObserver, target) {\n var detail = observerMap.get(resizeObserver);\n var index = getObservationIndex(detail.observationTargets, target);\n var lastObservation = detail.observationTargets.length === 1;\n if (index >= 0) {\n lastObservation && resizeObservers.splice(resizeObservers.indexOf(detail), 1);\n detail.observationTargets.splice(index, 1);\n updateCount(-1);\n }\n };\n ResizeObserverController.disconnect = function (resizeObserver) {\n var _this = this;\n var detail = observerMap.get(resizeObserver);\n detail.observationTargets.slice().forEach(function (ot) { return _this.unobserve(resizeObserver, ot.target); });\n detail.activeTargets.splice(0, detail.activeTargets.length);\n };\n return ResizeObserverController;\n}());\nexport { ResizeObserverController };\n","import { ResizeObserverController } from './ResizeObserverController';\nimport { isElement } from './utils/element';\nvar ResizeObserver = (function () {\n function ResizeObserver(callback) {\n if (arguments.length === 0) {\n throw new TypeError(\"Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.\");\n }\n if (typeof callback !== 'function') {\n throw new TypeError(\"Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.\");\n }\n ResizeObserverController.connect(this, callback);\n }\n ResizeObserver.prototype.observe = function (target, options) {\n if (arguments.length === 0) {\n throw new TypeError(\"Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.\");\n }\n if (!isElement(target)) {\n throw new TypeError(\"Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element\");\n }\n ResizeObserverController.observe(this, target, options);\n };\n ResizeObserver.prototype.unobserve = function (target) {\n if (arguments.length === 0) {\n throw new TypeError(\"Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.\");\n }\n if (!isElement(target)) {\n throw new TypeError(\"Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element\");\n }\n ResizeObserverController.unobserve(this, target);\n };\n ResizeObserver.prototype.disconnect = function () {\n ResizeObserverController.disconnect(this);\n };\n ResizeObserver.toString = function () {\n return 'function ResizeObserver () { [polyfill code] }';\n };\n return ResizeObserver;\n}());\nexport { ResizeObserver };\n","import React from 'react';\nconst usePassiveLayoutEffect = React[typeof document !== 'undefined' && document.createElement !== void 0 ? 'useLayoutEffect' : 'useEffect'];\nexport default usePassiveLayoutEffect;","import * as React from 'react';\n\nconst useLatest = current => {\n const storedValue = React.useRef(current);\n React.useEffect(() => {\n storedValue.current = current;\n });\n return storedValue;\n};\n\nexport default useLatest;","/* eslint-disable no-return-assign */\n\n/* eslint-disable no-underscore-dangle */\nimport { ResizeObserver as Polyfill } from '@juggle/resize-observer';\nimport useLayoutEffect from '@react-hook/passive-layout-effect';\nimport useLatest from '@react-hook/latest';\nconst ResizeObserver = typeof window !== 'undefined' && 'ResizeObserver' in window ? // @ts-ignore\nwindow.ResizeObserver : Polyfill;\n/**\n * A React hook that fires a callback whenever ResizeObserver detects a change to its size\n *\n * @param target A React ref created by `useRef()` or an HTML element\n * @param callback Invoked with a single `ResizeObserverEntry` any time\n * the `target` resizes\n */\n\nfunction _ref() {}\n\nfunction useResizeObserver(target, callback) {\n const resizeObserver = getResizeObserver();\n const storedCallback = useLatest(callback);\n useLayoutEffect(() => {\n let didUnsubscribe = false;\n const targetEl = target && 'current' in target ? target.current : target;\n if (!targetEl) return _ref;\n\n function cb(entry, observer) {\n if (didUnsubscribe) return;\n storedCallback.current(entry, observer);\n }\n\n resizeObserver.subscribe(targetEl, cb);\n return () => {\n didUnsubscribe = true;\n resizeObserver.unsubscribe(targetEl, cb);\n };\n }, [target, resizeObserver, storedCallback]);\n return resizeObserver.observer;\n}\n\nfunction createResizeObserver() {\n let ticking = false;\n let allEntries = [];\n const callbacks = new Map();\n const observer = new ResizeObserver((entries, obs) => {\n allEntries = allEntries.concat(entries);\n\n function _ref2() {\n const triggered = new Set();\n\n for (let i = 0; i < allEntries.length; i++) {\n if (triggered.has(allEntries[i].target)) continue;\n triggered.add(allEntries[i].target);\n const cbs = callbacks.get(allEntries[i].target);\n cbs === null || cbs === void 0 ? void 0 : cbs.forEach(cb => cb(allEntries[i], obs));\n }\n\n allEntries = [];\n ticking = false;\n }\n\n if (!ticking) {\n window.requestAnimationFrame(_ref2);\n }\n\n ticking = true;\n });\n return {\n observer,\n\n subscribe(target, callback) {\n var _callbacks$get;\n\n observer.observe(target);\n const cbs = (_callbacks$get = callbacks.get(target)) !== null && _callbacks$get !== void 0 ? _callbacks$get : [];\n cbs.push(callback);\n callbacks.set(target, cbs);\n },\n\n unsubscribe(target, callback) {\n var _callbacks$get2;\n\n const cbs = (_callbacks$get2 = callbacks.get(target)) !== null && _callbacks$get2 !== void 0 ? _callbacks$get2 : [];\n\n if (cbs.length === 1) {\n observer.unobserve(target);\n callbacks.delete(target);\n return;\n }\n\n const cbIndex = cbs.indexOf(callback);\n if (cbIndex !== -1) cbs.splice(cbIndex, 1);\n callbacks.set(target, cbs);\n }\n\n };\n}\n\nlet _resizeObserver;\n\nconst getResizeObserver = () => !_resizeObserver ? _resizeObserver = createResizeObserver() : _resizeObserver;\n\nexport default useResizeObserver;","import * as React from 'react';\nimport useResizeObserver from '@react-hook/resize-observer';\nimport useLayoutEffect from '@react-hook/passive-layout-effect';\n/**\n * A React hook for measuring the size of HTML elements including when they change\n *\n * @param target A React ref created by `useRef()` or an HTML element\n * @param options Configures the initial width and initial height of the hook's state\n */\n\nconst useSize = (target, options) => {\n const [size, setSize] = React.useState(() => {\n var _options$initialWidth, _options$initialHeigh;\n\n const targetEl = target && 'current' in target ? target.current : target;\n return targetEl ? [targetEl.offsetWidth, targetEl.offsetHeight] : [(_options$initialWidth = options === null || options === void 0 ? void 0 : options.initialWidth) !== null && _options$initialWidth !== void 0 ? _options$initialWidth : 0, (_options$initialHeigh = options === null || options === void 0 ? void 0 : options.initialHeight) !== null && _options$initialHeigh !== void 0 ? _options$initialHeigh : 0];\n });\n useLayoutEffect(() => {\n const targetEl = target && 'current' in target ? target.current : target;\n if (!targetEl) return;\n setSize([targetEl.offsetWidth, targetEl.offsetHeight]);\n }, [target]); // Where the magic happens\n\n useResizeObserver(target, entry => {\n const target = entry.target;\n setSize([target.offsetWidth, target.offsetHeight]);\n });\n return size;\n};\n\nexport default useSize;","/**\n * Hook for monitoring resizes. This needs to be placed in an absolute or relatively\n * positioned element to work.\n *\n * partially inspired by:\n * https://medium.com/@teh_builder/ref-objects-inside-useeffect-hooks-eb7c15198780\n */\nimport \"./ResizeSensor.scss\";\nimport React, { useRef, ReactNode, useEffect } from \"react\";\nimport useSize from \"@react-hook/size\"\n\nexport interface IBounds {\n width: number;\n height: number;\n\n //the resize sensor does not detect position changes, only width/height\n //changes. The positional info can be stale if the size doesn't change\n //but the position does (e.g., hover tracking after a barplot/logo etc is \n //removed) - so query position when the user wants it and try to make\n //clear that the sensor isn't detecting position changes..\n getLiveLeft: ()=>number;\n getLiveRight: ()=>number;\n getLiveTop: ()=>number;\n}\nexport interface IAlignmentMetadataProps {\n onSizeChanged(bounds: IBounds): void;\n children?: ReactNode;\n logId: string;\n}\n\nexport function ReactResizeSensor(props: IAlignmentMetadataProps) {\n //props\n const { onSizeChanged, children, logId} = props;\n\n const target = useRef(null);\n const [width, height] = useSize(target);\n\n useEffect(()=>{\n onSizeChanged({\n width: width,\n height: height,\n getLiveLeft: ()=>{ \n const toreturn = target.current ? target.current.getBoundingClientRect().left : 0;\n return toreturn;\n },\n getLiveRight: ()=>{ \n const toreturn = target.current\n ? target.current.getBoundingClientRect().width + \n target.current!.getBoundingClientRect().left\n : 0;\n return toreturn;\n },\n getLiveTop: ()=>{ \n const toreturn = target.current ? target.current.getBoundingClientRect().top : 0;\n return toreturn;\n }\n });\n }, [onSizeChanged, width, height, logId]);\n\n return (\n <>\n
\n {children}\n \n );\n}\n","// Should be no imports here!\n\n/**\n * The sentinel value returned by producers to replace the draft with undefined.\n */\nexport const NOTHING: unique symbol = Symbol.for(\"immer-nothing\")\n\n/**\n * To let Immer treat your class instances as plain immutable objects\n * (albeit with a custom prototype), you must define either an instance property\n * or a static property on each of your custom classes.\n *\n * Otherwise, your class instance will never be drafted, which means it won't be\n * safe to mutate in a produce callback.\n */\nexport const DRAFTABLE: unique symbol = Symbol.for(\"immer-draftable\")\n\nexport const DRAFT_STATE: unique symbol = Symbol.for(\"immer-state\")\n","export const errors =\n\tprocess.env.NODE_ENV !== \"production\"\n\t\t? [\n\t\t\t\t// All error codes, starting by 0:\n\t\t\t\tfunction(plugin: string) {\n\t\t\t\t\treturn `The plugin for '${plugin}' has not been loaded into Immer. To enable the plugin, import and call \\`enable${plugin}()\\` when initializing your application.`\n\t\t\t\t},\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '${thing}'`\n\t\t\t\t},\n\t\t\t\t\"This object has been frozen and should not be mutated\",\n\t\t\t\tfunction(data: any) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t\"Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? \" +\n\t\t\t\t\t\tdata\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\t\"An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.\",\n\t\t\t\t\"Immer forbids circular references\",\n\t\t\t\t\"The first or second argument to `produce` must be a function\",\n\t\t\t\t\"The third argument to `produce` must be a function or undefined\",\n\t\t\t\t\"First argument to `createDraft` must be a plain object, an array, or an immerable object\",\n\t\t\t\t\"First argument to `finishDraft` must be a draft returned by `createDraft`\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'current' expects a draft, got: ${thing}`\n\t\t\t\t},\n\t\t\t\t\"Object.defineProperty() cannot be used on an Immer draft\",\n\t\t\t\t\"Object.setPrototypeOf() cannot be used on an Immer draft\",\n\t\t\t\t\"Immer only supports deleting array indices\",\n\t\t\t\t\"Immer only supports setting array indices and the 'length' property\",\n\t\t\t\tfunction(thing: string) {\n\t\t\t\t\treturn `'original' expects a draft, got: ${thing}`\n\t\t\t\t}\n\t\t\t\t// Note: if more errors are added, the errorOffset in Patches.ts should be increased\n\t\t\t\t// See Patches.ts for additional errors\n\t\t ]\n\t\t: []\n\nexport function die(error: number, ...args: any[]): never {\n\tif (process.env.NODE_ENV !== \"production\") {\n\t\tconst e = errors[error]\n\t\tconst msg = typeof e === \"function\" ? e.apply(null, args as any) : e\n\t\tthrow new Error(`[Immer] ${msg}`)\n\t}\n\tthrow new Error(\n\t\t`[Immer] minified error nr: ${error}. Full error at: https://bit.ly/3cXEKWf`\n\t)\n}\n","import {\n\tDRAFT_STATE,\n\tDRAFTABLE,\n\tObjectish,\n\tDrafted,\n\tAnyObject,\n\tAnyMap,\n\tAnySet,\n\tImmerState,\n\tArchType,\n\tdie\n} from \"../internal\"\n\nexport const getPrototypeOf = Object.getPrototypeOf\n\n/** Returns true if the given value is an Immer draft */\n/*#__PURE__*/\nexport function isDraft(value: any): boolean {\n\treturn !!value && !!value[DRAFT_STATE]\n}\n\n/** Returns true if the given value can be drafted by Immer */\n/*#__PURE__*/\nexport function isDraftable(value: any): boolean {\n\tif (!value) return false\n\treturn (\n\t\tisPlainObject(value) ||\n\t\tArray.isArray(value) ||\n\t\t!!value[DRAFTABLE] ||\n\t\t!!value.constructor?.[DRAFTABLE] ||\n\t\tisMap(value) ||\n\t\tisSet(value)\n\t)\n}\n\nconst objectCtorString = Object.prototype.constructor.toString()\n/*#__PURE__*/\nexport function isPlainObject(value: any): boolean {\n\tif (!value || typeof value !== \"object\") return false\n\tconst proto = getPrototypeOf(value)\n\tif (proto === null) {\n\t\treturn true\n\t}\n\tconst Ctor =\n\t\tObject.hasOwnProperty.call(proto, \"constructor\") && proto.constructor\n\n\tif (Ctor === Object) return true\n\n\treturn (\n\t\ttypeof Ctor == \"function\" &&\n\t\tFunction.toString.call(Ctor) === objectCtorString\n\t)\n}\n\n/** Get the underlying object that is represented by the given draft */\n/*#__PURE__*/\nexport function original(value: T): T | undefined\nexport function original(value: Drafted): any {\n\tif (!isDraft(value)) die(15, value)\n\treturn value[DRAFT_STATE].base_\n}\n\nexport function each(\n\tobj: T,\n\titer: (key: string | number, value: any, source: T) => void,\n\tenumerableOnly?: boolean\n): void\nexport function each(obj: any, iter: any) {\n\tif (getArchtype(obj) === ArchType.Object) {\n\t\tObject.entries(obj).forEach(([key, value]) => {\n\t\t\titer(key, value, obj)\n\t\t})\n\t} else {\n\t\tobj.forEach((entry: any, index: any) => iter(index, entry, obj))\n\t}\n}\n\n/*#__PURE__*/\nexport function getArchtype(thing: any): ArchType {\n\tconst state: undefined | ImmerState = thing[DRAFT_STATE]\n\treturn state\n\t\t? state.type_\n\t\t: Array.isArray(thing)\n\t\t? ArchType.Array\n\t\t: isMap(thing)\n\t\t? ArchType.Map\n\t\t: isSet(thing)\n\t\t? ArchType.Set\n\t\t: ArchType.Object\n}\n\n/*#__PURE__*/\nexport function has(thing: any, prop: PropertyKey): boolean {\n\treturn getArchtype(thing) === ArchType.Map\n\t\t? thing.has(prop)\n\t\t: Object.prototype.hasOwnProperty.call(thing, prop)\n}\n\n/*#__PURE__*/\nexport function get(thing: AnyMap | AnyObject, prop: PropertyKey): any {\n\t// @ts-ignore\n\treturn getArchtype(thing) === ArchType.Map ? thing.get(prop) : thing[prop]\n}\n\n/*#__PURE__*/\nexport function set(thing: any, propOrOldValue: PropertyKey, value: any) {\n\tconst t = getArchtype(thing)\n\tif (t === ArchType.Map) thing.set(propOrOldValue, value)\n\telse if (t === ArchType.Set) {\n\t\tthing.add(value)\n\t} else thing[propOrOldValue] = value\n}\n\n/*#__PURE__*/\nexport function is(x: any, y: any): boolean {\n\t// From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js\n\tif (x === y) {\n\t\treturn x !== 0 || 1 / x === 1 / y\n\t} else {\n\t\treturn x !== x && y !== y\n\t}\n}\n\n/*#__PURE__*/\nexport function isMap(target: any): target is AnyMap {\n\treturn target instanceof Map\n}\n\n/*#__PURE__*/\nexport function isSet(target: any): target is AnySet {\n\treturn target instanceof Set\n}\n/*#__PURE__*/\nexport function latest(state: ImmerState): any {\n\treturn state.copy_ || state.base_\n}\n\n/*#__PURE__*/\nexport function shallowCopy(base: any, strict: boolean) {\n\tif (isMap(base)) {\n\t\treturn new Map(base)\n\t}\n\tif (isSet(base)) {\n\t\treturn new Set(base)\n\t}\n\tif (Array.isArray(base)) return Array.prototype.slice.call(base)\n\n\tif (!strict && isPlainObject(base)) {\n\t\tif (!getPrototypeOf(base)) {\n\t\t\tconst obj = Object.create(null)\n\t\t\treturn Object.assign(obj, base)\n\t\t}\n\t\treturn {...base}\n\t}\n\n\tconst descriptors = Object.getOwnPropertyDescriptors(base)\n\tdelete descriptors[DRAFT_STATE as any]\n\tlet keys = Reflect.ownKeys(descriptors)\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tconst key: any = keys[i]\n\t\tconst desc = descriptors[key]\n\t\tif (desc.writable === false) {\n\t\t\tdesc.writable = true\n\t\t\tdesc.configurable = true\n\t\t}\n\t\t// like object.assign, we will read any _own_, get/set accessors. This helps in dealing\n\t\t// with libraries that trap values, like mobx or vue\n\t\t// unlike object.assign, non-enumerables will be copied as well\n\t\tif (desc.get || desc.set)\n\t\t\tdescriptors[key] = {\n\t\t\t\tconfigurable: true,\n\t\t\t\twritable: true, // could live with !!desc.set as well here...\n\t\t\t\tenumerable: desc.enumerable,\n\t\t\t\tvalue: base[key]\n\t\t\t}\n\t}\n\treturn Object.create(getPrototypeOf(base), descriptors)\n}\n\n/**\n * Freezes draftable objects. Returns the original object.\n * By default freezes shallowly, but if the second argument is `true` it will freeze recursively.\n *\n * @param obj\n * @param deep\n */\nexport function freeze(obj: T, deep?: boolean): T\nexport function freeze(obj: any, deep: boolean = false): T {\n\tif (isFrozen(obj) || isDraft(obj) || !isDraftable(obj)) return obj\n\tif (getArchtype(obj) > 1 /* Map or Set */) {\n\t\tobj.set = obj.add = obj.clear = obj.delete = dontMutateFrozenCollections as any\n\t}\n\tObject.freeze(obj)\n\tif (deep) each(obj, (_key, value) => freeze(value, true), true)\n\treturn obj\n}\n\nfunction dontMutateFrozenCollections() {\n\tdie(2)\n}\n\nexport function isFrozen(obj: any): boolean {\n\treturn Object.isFrozen(obj)\n}\n","import {\n\tImmerState,\n\tPatch,\n\tDrafted,\n\tImmerBaseState,\n\tAnyMap,\n\tAnySet,\n\tArchType,\n\tdie\n} from \"../internal\"\n\n/** Plugin utilities */\nconst plugins: {\n\tPatches?: {\n\t\tgeneratePatches_(\n\t\t\tstate: ImmerState,\n\t\t\tbasePath: PatchPath,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tgenerateReplacementPatches_(\n\t\t\tbase: any,\n\t\t\treplacement: any,\n\t\t\tpatches: Patch[],\n\t\t\tinversePatches: Patch[]\n\t\t): void\n\t\tapplyPatches_(draft: T, patches: Patch[]): T\n\t}\n\tMapSet?: {\n\t\tproxyMap_(target: T, parent?: ImmerState): T\n\t\tproxySet_(target: T, parent?: ImmerState): T\n\t}\n} = {}\n\ntype Plugins = typeof plugins\n\nexport function getPlugin(\n\tpluginKey: K\n): Exclude {\n\tconst plugin = plugins[pluginKey]\n\tif (!plugin) {\n\t\tdie(0, pluginKey)\n\t}\n\t// @ts-ignore\n\treturn plugin\n}\n\nexport function loadPlugin(\n\tpluginKey: K,\n\timplementation: Plugins[K]\n): void {\n\tif (!plugins[pluginKey]) plugins[pluginKey] = implementation\n}\n/** Map / Set plugin */\n\nexport interface MapState extends ImmerBaseState {\n\ttype_: ArchType.Map\n\tcopy_: AnyMap | undefined\n\tassigned_: Map | undefined\n\tbase_: AnyMap\n\trevoked_: boolean\n\tdraft_: Drafted\n}\n\nexport interface SetState extends ImmerBaseState {\n\ttype_: ArchType.Set\n\tcopy_: AnySet | undefined\n\tbase_: AnySet\n\tdrafts_: Map // maps the original value to the draft value in the new set\n\trevoked_: boolean\n\tdraft_: Drafted\n}\n\n/** Patches plugin */\n\nexport type PatchPath = (string | number)[]\n","import {\n\tPatch,\n\tPatchListener,\n\tDrafted,\n\tImmer,\n\tDRAFT_STATE,\n\tImmerState,\n\tArchType,\n\tgetPlugin\n} from \"../internal\"\n\n/** Each scope represents a `produce` call. */\n\nexport interface ImmerScope {\n\tpatches_?: Patch[]\n\tinversePatches_?: Patch[]\n\tcanAutoFreeze_: boolean\n\tdrafts_: any[]\n\tparent_?: ImmerScope\n\tpatchListener_?: PatchListener\n\timmer_: Immer\n\tunfinalizedDrafts_: number\n}\n\nlet currentScope: ImmerScope | undefined\n\nexport function getCurrentScope() {\n\treturn currentScope!\n}\n\nfunction createScope(\n\tparent_: ImmerScope | undefined,\n\timmer_: Immer\n): ImmerScope {\n\treturn {\n\t\tdrafts_: [],\n\t\tparent_,\n\t\timmer_,\n\t\t// Whenever the modified draft contains a draft from another scope, we\n\t\t// need to prevent auto-freezing so the unowned draft can be finalized.\n\t\tcanAutoFreeze_: true,\n\t\tunfinalizedDrafts_: 0\n\t}\n}\n\nexport function usePatchesInScope(\n\tscope: ImmerScope,\n\tpatchListener?: PatchListener\n) {\n\tif (patchListener) {\n\t\tgetPlugin(\"Patches\") // assert we have the plugin\n\t\tscope.patches_ = []\n\t\tscope.inversePatches_ = []\n\t\tscope.patchListener_ = patchListener\n\t}\n}\n\nexport function revokeScope(scope: ImmerScope) {\n\tleaveScope(scope)\n\tscope.drafts_.forEach(revokeDraft)\n\t// @ts-ignore\n\tscope.drafts_ = null\n}\n\nexport function leaveScope(scope: ImmerScope) {\n\tif (scope === currentScope) {\n\t\tcurrentScope = scope.parent_\n\t}\n}\n\nexport function enterScope(immer: Immer) {\n\treturn (currentScope = createScope(currentScope, immer))\n}\n\nfunction revokeDraft(draft: Drafted) {\n\tconst state: ImmerState = draft[DRAFT_STATE]\n\tif (state.type_ === ArchType.Object || state.type_ === ArchType.Array)\n\t\tstate.revoke_()\n\telse state.revoked_ = true\n}\n","import {\n\tImmerScope,\n\tDRAFT_STATE,\n\tisDraftable,\n\tNOTHING,\n\tPatchPath,\n\teach,\n\thas,\n\tfreeze,\n\tImmerState,\n\tisDraft,\n\tSetState,\n\tset,\n\tArchType,\n\tgetPlugin,\n\tdie,\n\trevokeScope,\n\tisFrozen\n} from \"../internal\"\n\nexport function processResult(result: any, scope: ImmerScope) {\n\tscope.unfinalizedDrafts_ = scope.drafts_.length\n\tconst baseDraft = scope.drafts_![0]\n\tconst isReplaced = result !== undefined && result !== baseDraft\n\tif (isReplaced) {\n\t\tif (baseDraft[DRAFT_STATE].modified_) {\n\t\t\trevokeScope(scope)\n\t\t\tdie(4)\n\t\t}\n\t\tif (isDraftable(result)) {\n\t\t\t// Finalize the result in case it contains (or is) a subset of the draft.\n\t\t\tresult = finalize(scope, result)\n\t\t\tif (!scope.parent_) maybeFreeze(scope, result)\n\t\t}\n\t\tif (scope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(\n\t\t\t\tbaseDraft[DRAFT_STATE].base_,\n\t\t\t\tresult,\n\t\t\t\tscope.patches_,\n\t\t\t\tscope.inversePatches_!\n\t\t\t)\n\t\t}\n\t} else {\n\t\t// Finalize the base draft.\n\t\tresult = finalize(scope, baseDraft, [])\n\t}\n\trevokeScope(scope)\n\tif (scope.patches_) {\n\t\tscope.patchListener_!(scope.patches_, scope.inversePatches_!)\n\t}\n\treturn result !== NOTHING ? result : undefined\n}\n\nfunction finalize(rootScope: ImmerScope, value: any, path?: PatchPath) {\n\t// Don't recurse in tho recursive data structures\n\tif (isFrozen(value)) return value\n\n\tconst state: ImmerState = value[DRAFT_STATE]\n\t// A plain object, might need freezing, might contain drafts\n\tif (!state) {\n\t\teach(\n\t\t\tvalue,\n\t\t\t(key, childValue) =>\n\t\t\t\tfinalizeProperty(rootScope, state, value, key, childValue, path),\n\t\t\ttrue // See #590, don't recurse into non-enumerable of non drafted objects\n\t\t)\n\t\treturn value\n\t}\n\t// Never finalize drafts owned by another scope.\n\tif (state.scope_ !== rootScope) return value\n\t// Unmodified draft, return the (frozen) original\n\tif (!state.modified_) {\n\t\tmaybeFreeze(rootScope, state.base_, true)\n\t\treturn state.base_\n\t}\n\t// Not finalized yet, let's do that now\n\tif (!state.finalized_) {\n\t\tstate.finalized_ = true\n\t\tstate.scope_.unfinalizedDrafts_--\n\t\tconst result = state.copy_\n\t\t// Finalize all children of the copy\n\t\t// For sets we clone before iterating, otherwise we can get in endless loop due to modifying during iteration, see #628\n\t\t// To preserve insertion order in all cases we then clear the set\n\t\t// And we let finalizeProperty know it needs to re-add non-draft children back to the target\n\t\tlet resultEach = result\n\t\tlet isSet = false\n\t\tif (state.type_ === ArchType.Set) {\n\t\t\tresultEach = new Set(result)\n\t\t\tresult.clear()\n\t\t\tisSet = true\n\t\t}\n\t\teach(resultEach, (key, childValue) =>\n\t\t\tfinalizeProperty(rootScope, state, result, key, childValue, path, isSet)\n\t\t)\n\t\t// everything inside is frozen, we can freeze here\n\t\tmaybeFreeze(rootScope, result, false)\n\t\t// first time finalizing, let's create those patches\n\t\tif (path && rootScope.patches_) {\n\t\t\tgetPlugin(\"Patches\").generatePatches_(\n\t\t\t\tstate,\n\t\t\t\tpath,\n\t\t\t\trootScope.patches_,\n\t\t\t\trootScope.inversePatches_!\n\t\t\t)\n\t\t}\n\t}\n\treturn state.copy_\n}\n\nfunction finalizeProperty(\n\trootScope: ImmerScope,\n\tparentState: undefined | ImmerState,\n\ttargetObject: any,\n\tprop: string | number,\n\tchildValue: any,\n\trootPath?: PatchPath,\n\ttargetIsSet?: boolean\n) {\n\tif (process.env.NODE_ENV !== \"production\" && childValue === targetObject)\n\t\tdie(5)\n\tif (isDraft(childValue)) {\n\t\tconst path =\n\t\t\trootPath &&\n\t\t\tparentState &&\n\t\t\tparentState!.type_ !== ArchType.Set && // Set objects are atomic since they have no keys.\n\t\t\t!has((parentState as Exclude).assigned_!, prop) // Skip deep patches for assigned keys.\n\t\t\t\t? rootPath!.concat(prop)\n\t\t\t\t: undefined\n\t\t// Drafts owned by `scope` are finalized here.\n\t\tconst res = finalize(rootScope, childValue, path)\n\t\tset(targetObject, prop, res)\n\t\t// Drafts from another scope must prevented to be frozen\n\t\t// if we got a draft back from finalize, we're in a nested produce and shouldn't freeze\n\t\tif (isDraft(res)) {\n\t\t\trootScope.canAutoFreeze_ = false\n\t\t} else return\n\t} else if (targetIsSet) {\n\t\ttargetObject.add(childValue)\n\t}\n\t// Search new objects for unfinalized drafts. Frozen objects should never contain drafts.\n\tif (isDraftable(childValue) && !isFrozen(childValue)) {\n\t\tif (!rootScope.immer_.autoFreeze_ && rootScope.unfinalizedDrafts_ < 1) {\n\t\t\t// optimization: if an object is not a draft, and we don't have to\n\t\t\t// deepfreeze everything, and we are sure that no drafts are left in the remaining object\n\t\t\t// cause we saw and finalized all drafts already; we can stop visiting the rest of the tree.\n\t\t\t// This benefits especially adding large data tree's without further processing.\n\t\t\t// See add-data.js perf test\n\t\t\treturn\n\t\t}\n\t\tfinalize(rootScope, childValue)\n\t\t// immer deep freezes plain objects, so if there is no parent state, we freeze as well\n\t\tif (!parentState || !parentState.scope_.parent_)\n\t\t\tmaybeFreeze(rootScope, childValue)\n\t}\n}\n\nfunction maybeFreeze(scope: ImmerScope, value: any, deep = false) {\n\t// we never freeze for a non-root scope; as it would prevent pruning for drafts inside wrapping objects\n\tif (!scope.parent_ && scope.immer_.autoFreeze_ && scope.canAutoFreeze_) {\n\t\tfreeze(value, deep)\n\t}\n}\n","import {\n\teach,\n\thas,\n\tis,\n\tisDraftable,\n\tshallowCopy,\n\tlatest,\n\tImmerBaseState,\n\tImmerState,\n\tDrafted,\n\tAnyObject,\n\tAnyArray,\n\tObjectish,\n\tgetCurrentScope,\n\tgetPrototypeOf,\n\tDRAFT_STATE,\n\tdie,\n\tcreateProxy,\n\tArchType,\n\tImmerScope\n} from \"../internal\"\n\ninterface ProxyBaseState extends ImmerBaseState {\n\tassigned_: {\n\t\t[property: string]: boolean\n\t}\n\tparent_?: ImmerState\n\trevoke_(): void\n}\n\nexport interface ProxyObjectState extends ProxyBaseState {\n\ttype_: ArchType.Object\n\tbase_: any\n\tcopy_: any\n\tdraft_: Drafted\n}\n\nexport interface ProxyArrayState extends ProxyBaseState {\n\ttype_: ArchType.Array\n\tbase_: AnyArray\n\tcopy_: AnyArray | null\n\tdraft_: Drafted\n}\n\ntype ProxyState = ProxyObjectState | ProxyArrayState\n\n/**\n * Returns a new draft of the `base` object.\n *\n * The second argument is the parent draft-state (used internally).\n */\nexport function createProxyProxy(\n\tbase: T,\n\tparent?: ImmerState\n): Drafted {\n\tconst isArray = Array.isArray(base)\n\tconst state: ProxyState = {\n\t\ttype_: isArray ? ArchType.Array : (ArchType.Object as any),\n\t\t// Track which produce call this is associated with.\n\t\tscope_: parent ? parent.scope_ : getCurrentScope()!,\n\t\t// True for both shallow and deep changes.\n\t\tmodified_: false,\n\t\t// Used during finalization.\n\t\tfinalized_: false,\n\t\t// Track which properties have been assigned (true) or deleted (false).\n\t\tassigned_: {},\n\t\t// The parent draft state.\n\t\tparent_: parent,\n\t\t// The base state.\n\t\tbase_: base,\n\t\t// The base proxy.\n\t\tdraft_: null as any, // set below\n\t\t// The base copy with any updated values.\n\t\tcopy_: null,\n\t\t// Called by the `produce` function.\n\t\trevoke_: null as any,\n\t\tisManual_: false\n\t}\n\n\t// the traps must target something, a bit like the 'real' base.\n\t// but also, we need to be able to determine from the target what the relevant state is\n\t// (to avoid creating traps per instance to capture the state in closure,\n\t// and to avoid creating weird hidden properties as well)\n\t// So the trick is to use 'state' as the actual 'target'! (and make sure we intercept everything)\n\t// Note that in the case of an array, we put the state in an array to have better Reflect defaults ootb\n\tlet target: T = state as any\n\tlet traps: ProxyHandler> = objectTraps\n\tif (isArray) {\n\t\ttarget = [state] as any\n\t\ttraps = arrayTraps\n\t}\n\n\tconst {revoke, proxy} = Proxy.revocable(target, traps)\n\tstate.draft_ = proxy as any\n\tstate.revoke_ = revoke\n\treturn proxy as any\n}\n\n/**\n * Object drafts\n */\nexport const objectTraps: ProxyHandler = {\n\tget(state, prop) {\n\t\tif (prop === DRAFT_STATE) return state\n\n\t\tconst source = latest(state)\n\t\tif (!has(source, prop)) {\n\t\t\t// non-existing or non-own property...\n\t\t\treturn readPropFromProto(state, source, prop)\n\t\t}\n\t\tconst value = source[prop]\n\t\tif (state.finalized_ || !isDraftable(value)) {\n\t\t\treturn value\n\t\t}\n\t\t// Check for existing draft in modified state.\n\t\t// Assigned values are never drafted. This catches any drafts we created, too.\n\t\tif (value === peek(state.base_, prop)) {\n\t\t\tprepareCopy(state)\n\t\t\treturn (state.copy_![prop as any] = createProxy(value, state))\n\t\t}\n\t\treturn value\n\t},\n\thas(state, prop) {\n\t\treturn prop in latest(state)\n\t},\n\townKeys(state) {\n\t\treturn Reflect.ownKeys(latest(state))\n\t},\n\tset(\n\t\tstate: ProxyObjectState,\n\t\tprop: string /* strictly not, but helps TS */,\n\t\tvalue\n\t) {\n\t\tconst desc = getDescriptorFromProto(latest(state), prop)\n\t\tif (desc?.set) {\n\t\t\t// special case: if this write is captured by a setter, we have\n\t\t\t// to trigger it with the correct context\n\t\t\tdesc.set.call(state.draft_, value)\n\t\t\treturn true\n\t\t}\n\t\tif (!state.modified_) {\n\t\t\t// the last check is because we need to be able to distinguish setting a non-existing to undefined (which is a change)\n\t\t\t// from setting an existing property with value undefined to undefined (which is not a change)\n\t\t\tconst current = peek(latest(state), prop)\n\t\t\t// special case, if we assigning the original value to a draft, we can ignore the assignment\n\t\t\tconst currentState: ProxyObjectState = current?.[DRAFT_STATE]\n\t\t\tif (currentState && currentState.base_ === value) {\n\t\t\t\tstate.copy_![prop] = value\n\t\t\t\tstate.assigned_[prop] = false\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (is(value, current) && (value !== undefined || has(state.base_, prop)))\n\t\t\t\treturn true\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t}\n\n\t\tif (\n\t\t\t(state.copy_![prop] === value &&\n\t\t\t\t// special case: handle new props with value 'undefined'\n\t\t\t\t(value !== undefined || prop in state.copy_)) ||\n\t\t\t// special case: NaN\n\t\t\t(Number.isNaN(value) && Number.isNaN(state.copy_![prop]))\n\t\t)\n\t\t\treturn true\n\n\t\t// @ts-ignore\n\t\tstate.copy_![prop] = value\n\t\tstate.assigned_[prop] = true\n\t\treturn true\n\t},\n\tdeleteProperty(state, prop: string) {\n\t\t// The `undefined` check is a fast path for pre-existing keys.\n\t\tif (peek(state.base_, prop) !== undefined || prop in state.base_) {\n\t\t\tstate.assigned_[prop] = false\n\t\t\tprepareCopy(state)\n\t\t\tmarkChanged(state)\n\t\t} else {\n\t\t\t// if an originally not assigned property was deleted\n\t\t\tdelete state.assigned_[prop]\n\t\t}\n\t\tif (state.copy_) {\n\t\t\tdelete state.copy_[prop]\n\t\t}\n\t\treturn true\n\t},\n\t// Note: We never coerce `desc.value` into an Immer draft, because we can't make\n\t// the same guarantee in ES5 mode.\n\tgetOwnPropertyDescriptor(state, prop) {\n\t\tconst owner = latest(state)\n\t\tconst desc = Reflect.getOwnPropertyDescriptor(owner, prop)\n\t\tif (!desc) return desc\n\t\treturn {\n\t\t\twritable: true,\n\t\t\tconfigurable: state.type_ !== ArchType.Array || prop !== \"length\",\n\t\t\tenumerable: desc.enumerable,\n\t\t\tvalue: owner[prop]\n\t\t}\n\t},\n\tdefineProperty() {\n\t\tdie(11)\n\t},\n\tgetPrototypeOf(state) {\n\t\treturn getPrototypeOf(state.base_)\n\t},\n\tsetPrototypeOf() {\n\t\tdie(12)\n\t}\n}\n\n/**\n * Array drafts\n */\n\nconst arrayTraps: ProxyHandler<[ProxyArrayState]> = {}\neach(objectTraps, (key, fn) => {\n\t// @ts-ignore\n\tarrayTraps[key] = function() {\n\t\targuments[0] = arguments[0][0]\n\t\treturn fn.apply(this, arguments)\n\t}\n})\narrayTraps.deleteProperty = function(state, prop) {\n\tif (process.env.NODE_ENV !== \"production\" && isNaN(parseInt(prop as any)))\n\t\tdie(13)\n\t// @ts-ignore\n\treturn arrayTraps.set!.call(this, state, prop, undefined)\n}\narrayTraps.set = function(state, prop, value) {\n\tif (\n\t\tprocess.env.NODE_ENV !== \"production\" &&\n\t\tprop !== \"length\" &&\n\t\tisNaN(parseInt(prop as any))\n\t)\n\t\tdie(14)\n\treturn objectTraps.set!.call(this, state[0], prop, value, state[0])\n}\n\n// Access a property without creating an Immer draft.\nfunction peek(draft: Drafted, prop: PropertyKey) {\n\tconst state = draft[DRAFT_STATE]\n\tconst source = state ? latest(state) : draft\n\treturn source[prop]\n}\n\nfunction readPropFromProto(state: ImmerState, source: any, prop: PropertyKey) {\n\tconst desc = getDescriptorFromProto(source, prop)\n\treturn desc\n\t\t? `value` in desc\n\t\t\t? desc.value\n\t\t\t: // This is a very special case, if the prop is a getter defined by the\n\t\t\t // prototype, we should invoke it with the draft as context!\n\t\t\t desc.get?.call(state.draft_)\n\t\t: undefined\n}\n\nfunction getDescriptorFromProto(\n\tsource: any,\n\tprop: PropertyKey\n): PropertyDescriptor | undefined {\n\t// 'in' checks proto!\n\tif (!(prop in source)) return undefined\n\tlet proto = getPrototypeOf(source)\n\twhile (proto) {\n\t\tconst desc = Object.getOwnPropertyDescriptor(proto, prop)\n\t\tif (desc) return desc\n\t\tproto = getPrototypeOf(proto)\n\t}\n\treturn undefined\n}\n\nexport function markChanged(state: ImmerState) {\n\tif (!state.modified_) {\n\t\tstate.modified_ = true\n\t\tif (state.parent_) {\n\t\t\tmarkChanged(state.parent_)\n\t\t}\n\t}\n}\n\nexport function prepareCopy(state: {\n\tbase_: any\n\tcopy_: any\n\tscope_: ImmerScope\n}) {\n\tif (!state.copy_) {\n\t\tstate.copy_ = shallowCopy(\n\t\t\tstate.base_,\n\t\t\tstate.scope_.immer_.useStrictShallowCopy_\n\t\t)\n\t}\n}\n","import {\n\tIProduceWithPatches,\n\tIProduce,\n\tImmerState,\n\tDrafted,\n\tisDraftable,\n\tprocessResult,\n\tPatch,\n\tObjectish,\n\tDRAFT_STATE,\n\tDraft,\n\tPatchListener,\n\tisDraft,\n\tisMap,\n\tisSet,\n\tcreateProxyProxy,\n\tgetPlugin,\n\tdie,\n\tenterScope,\n\trevokeScope,\n\tleaveScope,\n\tusePatchesInScope,\n\tgetCurrentScope,\n\tNOTHING,\n\tfreeze,\n\tcurrent\n} from \"../internal\"\n\ninterface ProducersFns {\n\tproduce: IProduce\n\tproduceWithPatches: IProduceWithPatches\n}\n\nexport class Immer implements ProducersFns {\n\tautoFreeze_: boolean = true\n\tuseStrictShallowCopy_: boolean = false\n\n\tconstructor(config?: {autoFreeze?: boolean; useStrictShallowCopy?: boolean}) {\n\t\tif (typeof config?.autoFreeze === \"boolean\")\n\t\t\tthis.setAutoFreeze(config!.autoFreeze)\n\t\tif (typeof config?.useStrictShallowCopy === \"boolean\")\n\t\t\tthis.setUseStrictShallowCopy(config!.useStrictShallowCopy)\n\t}\n\n\t/**\n\t * The `produce` function takes a value and a \"recipe function\" (whose\n\t * return value often depends on the base state). The recipe function is\n\t * free to mutate its first argument however it wants. All mutations are\n\t * only ever applied to a __copy__ of the base state.\n\t *\n\t * Pass only a function to create a \"curried producer\" which relieves you\n\t * from passing the recipe function every time.\n\t *\n\t * Only plain objects and arrays are made mutable. All other objects are\n\t * considered uncopyable.\n\t *\n\t * Note: This function is __bound__ to its `Immer` instance.\n\t *\n\t * @param {any} base - the initial state\n\t * @param {Function} recipe - function that receives a proxy of the base state as first argument and which can be freely modified\n\t * @param {Function} patchListener - optional function that will be called with all the patches produced here\n\t * @returns {any} a new state, or the initial state if nothing was modified\n\t */\n\tproduce: IProduce = (base: any, recipe?: any, patchListener?: any) => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\" && typeof recipe !== \"function\") {\n\t\t\tconst defaultBase = recipe\n\t\t\trecipe = base\n\n\t\t\tconst self = this\n\t\t\treturn function curriedProduce(\n\t\t\t\tthis: any,\n\t\t\t\tbase = defaultBase,\n\t\t\t\t...args: any[]\n\t\t\t) {\n\t\t\t\treturn self.produce(base, (draft: Drafted) => recipe.call(this, draft, ...args)) // prettier-ignore\n\t\t\t}\n\t\t}\n\n\t\tif (typeof recipe !== \"function\") die(6)\n\t\tif (patchListener !== undefined && typeof patchListener !== \"function\")\n\t\t\tdie(7)\n\n\t\tlet result\n\n\t\t// Only plain objects, arrays, and \"immerable classes\" are drafted.\n\t\tif (isDraftable(base)) {\n\t\t\tconst scope = enterScope(this)\n\t\t\tconst proxy = createProxy(base, undefined)\n\t\t\tlet hasError = true\n\t\t\ttry {\n\t\t\t\tresult = recipe(proxy)\n\t\t\t\thasError = false\n\t\t\t} finally {\n\t\t\t\t// finally instead of catch + rethrow better preserves original stack\n\t\t\t\tif (hasError) revokeScope(scope)\n\t\t\t\telse leaveScope(scope)\n\t\t\t}\n\t\t\tusePatchesInScope(scope, patchListener)\n\t\t\treturn processResult(result, scope)\n\t\t} else if (!base || typeof base !== \"object\") {\n\t\t\tresult = recipe(base)\n\t\t\tif (result === undefined) result = base\n\t\t\tif (result === NOTHING) result = undefined\n\t\t\tif (this.autoFreeze_) freeze(result, true)\n\t\t\tif (patchListener) {\n\t\t\t\tconst p: Patch[] = []\n\t\t\t\tconst ip: Patch[] = []\n\t\t\t\tgetPlugin(\"Patches\").generateReplacementPatches_(base, result, p, ip)\n\t\t\t\tpatchListener(p, ip)\n\t\t\t}\n\t\t\treturn result\n\t\t} else die(1, base)\n\t}\n\n\tproduceWithPatches: IProduceWithPatches = (base: any, recipe?: any): any => {\n\t\t// curried invocation\n\t\tif (typeof base === \"function\") {\n\t\t\treturn (state: any, ...args: any[]) =>\n\t\t\t\tthis.produceWithPatches(state, (draft: any) => base(draft, ...args))\n\t\t}\n\n\t\tlet patches: Patch[], inversePatches: Patch[]\n\t\tconst result = this.produce(base, recipe, (p: Patch[], ip: Patch[]) => {\n\t\t\tpatches = p\n\t\t\tinversePatches = ip\n\t\t})\n\t\treturn [result, patches!, inversePatches!]\n\t}\n\n\tcreateDraft(base: T): Draft {\n\t\tif (!isDraftable(base)) die(8)\n\t\tif (isDraft(base)) base = current(base)\n\t\tconst scope = enterScope(this)\n\t\tconst proxy = createProxy(base, undefined)\n\t\tproxy[DRAFT_STATE].isManual_ = true\n\t\tleaveScope(scope)\n\t\treturn proxy as any\n\t}\n\n\tfinishDraft>(\n\t\tdraft: D,\n\t\tpatchListener?: PatchListener\n\t): D extends Draft ? T : never {\n\t\tconst state: ImmerState = draft && (draft as any)[DRAFT_STATE]\n\t\tif (!state || !state.isManual_) die(9)\n\t\tconst {scope_: scope} = state\n\t\tusePatchesInScope(scope, patchListener)\n\t\treturn processResult(undefined, scope)\n\t}\n\n\t/**\n\t * Pass true to automatically freeze all copies created by Immer.\n\t *\n\t * By default, auto-freezing is enabled.\n\t */\n\tsetAutoFreeze(value: boolean) {\n\t\tthis.autoFreeze_ = value\n\t}\n\n\t/**\n\t * Pass true to enable strict shallow copy.\n\t *\n\t * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n\t */\n\tsetUseStrictShallowCopy(value: boolean) {\n\t\tthis.useStrictShallowCopy_ = value\n\t}\n\n\tapplyPatches(base: T, patches: Patch[]): T {\n\t\t// If a patch replaces the entire state, take that replacement as base\n\t\t// before applying patches\n\t\tlet i: number\n\t\tfor (i = patches.length - 1; i >= 0; i--) {\n\t\t\tconst patch = patches[i]\n\t\t\tif (patch.path.length === 0 && patch.op === \"replace\") {\n\t\t\t\tbase = patch.value\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\t// If there was a patch that replaced the entire state, start from the\n\t\t// patch after that.\n\t\tif (i > -1) {\n\t\t\tpatches = patches.slice(i + 1)\n\t\t}\n\n\t\tconst applyPatchesImpl = getPlugin(\"Patches\").applyPatches_\n\t\tif (isDraft(base)) {\n\t\t\t// N.B: never hits if some patch a replacement, patches are never drafts\n\t\t\treturn applyPatchesImpl(base, patches)\n\t\t}\n\t\t// Otherwise, produce a copy of the base state.\n\t\treturn this.produce(base, (draft: Drafted) =>\n\t\t\tapplyPatchesImpl(draft, patches)\n\t\t)\n\t}\n}\n\nexport function createProxy(\n\tvalue: T,\n\tparent?: ImmerState\n): Drafted {\n\t// precondition: createProxy should be guarded by isDraftable, so we know we can safely draft\n\tconst draft: Drafted = isMap(value)\n\t\t? getPlugin(\"MapSet\").proxyMap_(value, parent)\n\t\t: isSet(value)\n\t\t? getPlugin(\"MapSet\").proxySet_(value, parent)\n\t\t: createProxyProxy(value, parent)\n\n\tconst scope = parent ? parent.scope_ : getCurrentScope()\n\tscope.drafts_.push(draft)\n\treturn draft\n}\n","import {\n\tdie,\n\tisDraft,\n\tshallowCopy,\n\teach,\n\tDRAFT_STATE,\n\tset,\n\tImmerState,\n\tisDraftable,\n\tisFrozen\n} from \"../internal\"\n\n/** Takes a snapshot of the current state of a draft and finalizes it (but without freezing). This is a great utility to print the current state during debugging (no Proxies in the way). The output of current can also be safely leaked outside the producer. */\nexport function current(value: T): T\nexport function current(value: any): any {\n\tif (!isDraft(value)) die(10, value)\n\treturn currentImpl(value)\n}\n\nfunction currentImpl(value: any): any {\n\tif (!isDraftable(value) || isFrozen(value)) return value\n\tconst state: ImmerState | undefined = value[DRAFT_STATE]\n\tlet copy: any\n\tif (state) {\n\t\tif (!state.modified_) return state.base_\n\t\t// Optimization: avoid generating new drafts during copying\n\t\tstate.finalized_ = true\n\t\tcopy = shallowCopy(value, state.scope_.immer_.useStrictShallowCopy_)\n\t} else {\n\t\tcopy = shallowCopy(value, true)\n\t}\n\t// recurse\n\teach(copy, (key, childValue) => {\n\t\tset(copy, key, currentImpl(childValue))\n\t})\n\tif (state) {\n\t\tstate.finalized_ = false\n\t}\n\treturn copy\n}\n","import {\n\tIProduce,\n\tIProduceWithPatches,\n\tImmer,\n\tDraft,\n\tImmutable\n} from \"./internal\"\n\nexport {\n\tDraft,\n\tImmutable,\n\tPatch,\n\tPatchListener,\n\toriginal,\n\tcurrent,\n\tisDraft,\n\tisDraftable,\n\tNOTHING as nothing,\n\tDRAFTABLE as immerable,\n\tfreeze,\n\tObjectish\n} from \"./internal\"\n\nconst immer = new Immer()\n\n/**\n * The `produce` function takes a value and a \"recipe function\" (whose\n * return value often depends on the base state). The recipe function is\n * free to mutate its first argument however it wants. All mutations are\n * only ever applied to a __copy__ of the base state.\n *\n * Pass only a function to create a \"curried producer\" which relieves you\n * from passing the recipe function every time.\n *\n * Only plain objects and arrays are made mutable. All other objects are\n * considered uncopyable.\n *\n * Note: This function is __bound__ to its `Immer` instance.\n *\n * @param {any} base - the initial state\n * @param {Function} producer - function that receives a proxy of the base state as first argument and which can be freely modified\n * @param {Function} patchListener - optional function that will be called with all the patches produced here\n * @returns {any} a new state, or the initial state if nothing was modified\n */\nexport const produce: IProduce = immer.produce\n\n/**\n * Like `produce`, but `produceWithPatches` always returns a tuple\n * [nextState, patches, inversePatches] (instead of just the next state)\n */\nexport const produceWithPatches: IProduceWithPatches = immer.produceWithPatches.bind(\n\timmer\n)\n\n/**\n * Pass true to automatically freeze all copies created by Immer.\n *\n * Always freeze by default, even in production mode\n */\nexport const setAutoFreeze = immer.setAutoFreeze.bind(immer)\n\n/**\n * Pass true to enable strict shallow copy.\n *\n * By default, immer does not copy the object descriptors such as getter, setter and non-enumrable properties.\n */\nexport const setUseStrictShallowCopy = immer.setUseStrictShallowCopy.bind(immer)\n\n/**\n * Apply an array of Immer patches to the first argument.\n *\n * This function is a producer, which means copy-on-write is in effect.\n */\nexport const applyPatches = immer.applyPatches.bind(immer)\n\n/**\n * Create an Immer draft from the given base state, which may be a draft itself.\n * The draft can be modified until you finalize it with the `finishDraft` function.\n */\nexport const createDraft = immer.createDraft.bind(immer)\n\n/**\n * Finalize an Immer draft from a `createDraft` call, returning the base state\n * (if no changes were made) or a modified copy. The draft must *not* be\n * mutated afterwards.\n *\n * Pass a function as the 2nd argument to generate Immer patches based on the\n * changes that were made.\n */\nexport const finishDraft = immer.finishDraft.bind(immer)\n\n/**\n * This function is actually a no-op, but can be used to cast an immutable type\n * to an draft type and make TypeScript happy\n *\n * @param value\n */\nexport function castDraft(value: T): Draft {\n\treturn value as any\n}\n\n/**\n * This function is actually a no-op, but can be used to cast a mutable type\n * to an immutable type and make TypeScript happy\n * @param value\n */\nexport function castImmutable(value: T): Immutable {\n\treturn value as any\n}\n\nexport {Immer}\n\nexport {enablePatches} from \"./plugins/patches\"\nexport {enableMapSet} from \"./plugins/mapset\"\n","import { runIdentityFunctionCheck } from './devModeChecks/identityFunctionCheck'\r\nimport { runInputStabilityCheck } from './devModeChecks/inputStabilityCheck'\r\nimport { globalDevModeChecks } from './devModeChecks/setGlobalDevModeChecks'\r\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\r\nimport type {\r\n DevModeChecks,\r\n Selector,\r\n SelectorArray,\r\n DevModeChecksExecutionInfo\r\n} from './types'\r\n\r\nexport const NOT_FOUND = 'NOT_FOUND'\r\nexport type NOT_FOUND_TYPE = typeof NOT_FOUND\r\n\r\n/**\r\n * Assert that the provided value is a function. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param func - The value to be checked.\r\n * @param errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsFunction(\r\n func: unknown,\r\n errorMessage = `expected a function, instead received ${typeof func}`\r\n): asserts func is FunctionType {\r\n if (typeof func !== 'function') {\r\n throw new TypeError(errorMessage)\r\n }\r\n}\r\n\r\n/**\r\n * Assert that the provided value is an object. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param object - The value to be checked.\r\n * @param errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsObject>(\r\n object: unknown,\r\n errorMessage = `expected an object, instead received ${typeof object}`\r\n): asserts object is ObjectType {\r\n if (typeof object !== 'object') {\r\n throw new TypeError(errorMessage)\r\n }\r\n}\r\n\r\n/**\r\n * Assert that the provided array is an array of functions. If the assertion fails,\r\n * a `TypeError` is thrown with an optional custom error message.\r\n *\r\n * @param array - The array to be checked.\r\n * @param errorMessage - An optional custom error message to use if the assertion fails.\r\n * @throws A `TypeError` if the assertion fails.\r\n */\r\nexport function assertIsArrayOfFunctions(\r\n array: unknown[],\r\n errorMessage = `expected all items to be functions, instead received the following types: `\r\n): asserts array is FunctionType[] {\r\n if (\r\n !array.every((item): item is FunctionType => typeof item === 'function')\r\n ) {\r\n const itemTypes = array\r\n .map(item =>\r\n typeof item === 'function'\r\n ? `function ${item.name || 'unnamed'}()`\r\n : typeof item\r\n )\r\n .join(', ')\r\n throw new TypeError(`${errorMessage}[${itemTypes}]`)\r\n }\r\n}\r\n\r\n/**\r\n * Ensure that the input is an array. If it's already an array, it's returned as is.\r\n * If it's not an array, it will be wrapped in a new array.\r\n *\r\n * @param item - The item to be checked.\r\n * @returns An array containing the input item. If the input is already an array, it's returned without modification.\r\n */\r\nexport const ensureIsArray = (item: unknown) => {\r\n return Array.isArray(item) ? item : [item]\r\n}\r\n\r\n/**\r\n * Extracts the \"dependencies\" / \"input selectors\" from the arguments of `createSelector`.\r\n *\r\n * @param createSelectorArgs - Arguments passed to `createSelector` as an array.\r\n * @returns An array of \"input selectors\" / \"dependencies\".\r\n * @throws A `TypeError` if any of the input selectors is not function.\r\n */\r\nexport function getDependencies(createSelectorArgs: unknown[]) {\r\n const dependencies = Array.isArray(createSelectorArgs[0])\r\n ? createSelectorArgs[0]\r\n : createSelectorArgs\r\n\r\n assertIsArrayOfFunctions(\r\n dependencies,\r\n `createSelector expects all input-selectors to be functions, but received the following types: `\r\n )\r\n\r\n return dependencies as SelectorArray\r\n}\r\n\r\n/**\r\n * Runs each input selector and returns their collective results as an array.\r\n *\r\n * @param dependencies - An array of \"dependencies\" or \"input selectors\".\r\n * @param inputSelectorArgs - An array of arguments being passed to the input selectors.\r\n * @returns An array of input selector results.\r\n */\r\nexport function collectInputSelectorResults(\r\n dependencies: SelectorArray,\r\n inputSelectorArgs: unknown[] | IArguments\r\n) {\r\n const inputSelectorResults = []\r\n const { length } = dependencies\r\n for (let i = 0; i < length; i++) {\r\n // @ts-ignore\r\n // apply arguments instead of spreading and mutate a local list of params for performance.\r\n inputSelectorResults.push(dependencies[i].apply(null, inputSelectorArgs))\r\n }\r\n return inputSelectorResults\r\n}\r\n\r\n/**\r\n * Retrieves execution information for development mode checks.\r\n *\r\n * @param devModeChecks - Custom Settings for development mode checks. These settings will override the global defaults.\r\n * @param firstRun - Indicates whether it is the first time the selector has run.\r\n * @returns An object containing the execution information for each development mode check.\r\n */\r\nexport const getDevModeChecksExecutionInfo = (\r\n firstRun: boolean,\r\n devModeChecks: Partial\r\n) => {\r\n const { identityFunctionCheck, inputStabilityCheck } = {\r\n ...globalDevModeChecks,\r\n ...devModeChecks\r\n }\r\n return {\r\n identityFunctionCheck: {\r\n shouldRun:\r\n identityFunctionCheck === 'always' ||\r\n (identityFunctionCheck === 'once' && firstRun),\r\n run: runIdentityFunctionCheck\r\n },\r\n inputStabilityCheck: {\r\n shouldRun:\r\n inputStabilityCheck === 'always' ||\r\n (inputStabilityCheck === 'once' && firstRun),\r\n run: runInputStabilityCheck\r\n }\r\n } satisfies DevModeChecksExecutionInfo\r\n}\r\n","// Original source:\r\n// - https://github.com/simonihmig/tracked-redux/blob/master/packages/tracked-redux/src/-private/proxy.ts\r\n\r\nimport type { Node, Tag } from './tracking'\r\nimport {\r\n consumeCollection,\r\n consumeTag,\r\n createTag,\r\n dirtyCollection,\r\n dirtyTag\r\n} from './tracking'\r\n\r\nexport const REDUX_PROXY_LABEL = Symbol()\r\n\r\nlet nextId = 0\r\n\r\nconst proto = Object.getPrototypeOf({})\r\n\r\nclass ObjectTreeNode> implements Node {\r\n proxy: T = new Proxy(this, objectProxyHandler) as unknown as T\r\n tag = createTag()\r\n tags = {} as Record\r\n children = {} as Record\r\n collectionTag = null\r\n id = nextId++\r\n\r\n constructor(public value: T) {\r\n this.value = value\r\n this.tag.value = value\r\n }\r\n}\r\n\r\nconst objectProxyHandler = {\r\n get(node: Node, key: string | symbol): unknown {\r\n function calculateResult() {\r\n const { value } = node\r\n\r\n const childValue = Reflect.get(value, key)\r\n\r\n if (typeof key === 'symbol') {\r\n return childValue\r\n }\r\n\r\n if (key in proto) {\r\n return childValue\r\n }\r\n\r\n if (typeof childValue === 'object' && childValue !== null) {\r\n let childNode = node.children[key]\r\n\r\n if (childNode === undefined) {\r\n childNode = node.children[key] = createNode(childValue)\r\n }\r\n\r\n if (childNode.tag) {\r\n consumeTag(childNode.tag)\r\n }\r\n\r\n return childNode.proxy\r\n } else {\r\n let tag = node.tags[key]\r\n\r\n if (tag === undefined) {\r\n tag = node.tags[key] = createTag()\r\n tag.value = childValue\r\n }\r\n\r\n consumeTag(tag)\r\n\r\n return childValue\r\n }\r\n }\r\n const res = calculateResult()\r\n return res\r\n },\r\n\r\n ownKeys(node: Node): ArrayLike {\r\n consumeCollection(node)\r\n return Reflect.ownKeys(node.value)\r\n },\r\n\r\n getOwnPropertyDescriptor(\r\n node: Node,\r\n prop: string | symbol\r\n ): PropertyDescriptor | undefined {\r\n return Reflect.getOwnPropertyDescriptor(node.value, prop)\r\n },\r\n\r\n has(node: Node, prop: string | symbol): boolean {\r\n return Reflect.has(node.value, prop)\r\n }\r\n}\r\n\r\nclass ArrayTreeNode> implements Node {\r\n proxy: T = new Proxy([this], arrayProxyHandler) as unknown as T\r\n tag = createTag()\r\n tags = {}\r\n children = {}\r\n collectionTag = null\r\n id = nextId++\r\n\r\n constructor(public value: T) {\r\n this.value = value\r\n this.tag.value = value\r\n }\r\n}\r\n\r\nconst arrayProxyHandler = {\r\n get([node]: [Node], key: string | symbol): unknown {\r\n if (key === 'length') {\r\n consumeCollection(node)\r\n }\r\n\r\n return objectProxyHandler.get(node, key)\r\n },\r\n\r\n ownKeys([node]: [Node]): ArrayLike {\r\n return objectProxyHandler.ownKeys(node)\r\n },\r\n\r\n getOwnPropertyDescriptor(\r\n [node]: [Node],\r\n prop: string | symbol\r\n ): PropertyDescriptor | undefined {\r\n return objectProxyHandler.getOwnPropertyDescriptor(node, prop)\r\n },\r\n\r\n has([node]: [Node], prop: string | symbol): boolean {\r\n return objectProxyHandler.has(node, prop)\r\n }\r\n}\r\n\r\nexport function createNode | Record>(\r\n value: T\r\n): Node {\r\n if (Array.isArray(value)) {\r\n return new ArrayTreeNode(value)\r\n }\r\n\r\n return new ObjectTreeNode(value) as Node\r\n}\r\n\r\nconst keysMap = new WeakMap<\r\n Array | Record,\r\n Set\r\n>()\r\n\r\nexport function updateNode | Record>(\r\n node: Node,\r\n newValue: T\r\n): void {\r\n const { value, tags, children } = node\r\n\r\n node.value = newValue\r\n\r\n if (\r\n Array.isArray(value) &&\r\n Array.isArray(newValue) &&\r\n value.length !== newValue.length\r\n ) {\r\n dirtyCollection(node)\r\n } else {\r\n if (value !== newValue) {\r\n let oldKeysSize = 0\r\n let newKeysSize = 0\r\n let anyKeysAdded = false\r\n\r\n for (const _key in value) {\r\n oldKeysSize++\r\n }\r\n\r\n for (const key in newValue) {\r\n newKeysSize++\r\n if (!(key in value)) {\r\n anyKeysAdded = true\r\n break\r\n }\r\n }\r\n\r\n const isDifferent = anyKeysAdded || oldKeysSize !== newKeysSize\r\n\r\n if (isDifferent) {\r\n dirtyCollection(node)\r\n }\r\n }\r\n }\r\n\r\n for (const key in tags) {\r\n const childValue = (value as Record)[key]\r\n const newChildValue = (newValue as Record)[key]\r\n\r\n if (childValue !== newChildValue) {\r\n dirtyCollection(node)\r\n dirtyTag(tags[key], newChildValue)\r\n }\r\n\r\n if (typeof newChildValue === 'object' && newChildValue !== null) {\r\n delete tags[key]\r\n }\r\n }\r\n\r\n for (const key in children) {\r\n const childNode = children[key]\r\n const newChildValue = (newValue as Record)[key]\r\n\r\n const childValue = childNode.value\r\n\r\n if (childValue === newChildValue) {\r\n continue\r\n } else if (typeof newChildValue === 'object' && newChildValue !== null) {\r\n updateNode(childNode, newChildValue as Record)\r\n } else {\r\n deleteNode(childNode)\r\n delete children[key]\r\n }\r\n }\r\n}\r\n\r\nfunction deleteNode(node: Node): void {\r\n if (node.tag) {\r\n dirtyTag(node.tag, null)\r\n }\r\n dirtyCollection(node)\r\n for (const key in node.tags) {\r\n dirtyTag(node.tags[key], null)\r\n }\r\n for (const key in node.children) {\r\n deleteNode(node.children[key])\r\n }\r\n}\r\n","// Original source:\r\n// - https://github.com/facebook/react/blob/0b974418c9a56f6c560298560265dcf4b65784bc/packages/react/src/ReactCache.js\r\n\r\nimport type {\r\n AnyFunction,\r\n DefaultMemoizeFields,\r\n EqualityFn,\r\n Simplify\r\n} from './types'\r\n\r\nclass StrongRef {\r\n constructor(private value: T) {}\r\n deref() {\r\n return this.value\r\n }\r\n}\r\n\r\nconst Ref =\r\n typeof WeakRef !== 'undefined'\r\n ? WeakRef\r\n : (StrongRef as unknown as typeof WeakRef)\r\n\r\nconst UNTERMINATED = 0\r\nconst TERMINATED = 1\r\n\r\ninterface UnterminatedCacheNode {\r\n /**\r\n * Status, represents whether the cached computation returned a value or threw an error.\r\n */\r\n s: 0\r\n /**\r\n * Value, either the cached result or an error, depending on status.\r\n */\r\n v: void\r\n /**\r\n * Object cache, a `WeakMap` where non-primitive arguments are stored.\r\n */\r\n o: null | WeakMap>\r\n /**\r\n * Primitive cache, a regular Map where primitive arguments are stored.\r\n */\r\n p: null | Map>\r\n}\r\n\r\ninterface TerminatedCacheNode {\r\n /**\r\n * Status, represents whether the cached computation returned a value or threw an error.\r\n */\r\n s: 1\r\n /**\r\n * Value, either the cached result or an error, depending on status.\r\n */\r\n v: T\r\n /**\r\n * Object cache, a `WeakMap` where non-primitive arguments are stored.\r\n */\r\n o: null | WeakMap>\r\n /**\r\n * Primitive cache, a regular `Map` where primitive arguments are stored.\r\n */\r\n p: null | Map>\r\n}\r\n\r\ntype CacheNode = TerminatedCacheNode | UnterminatedCacheNode\r\n\r\nfunction createCacheNode(): CacheNode {\r\n return {\r\n s: UNTERMINATED,\r\n v: undefined,\r\n o: null,\r\n p: null\r\n }\r\n}\r\n\r\n/**\r\n * Configuration options for a memoization function utilizing `WeakMap` for\r\n * its caching mechanism.\r\n *\r\n * @template Result - The type of the return value of the memoized function.\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport interface WeakMapMemoizeOptions {\r\n /**\r\n * If provided, used to compare a newly generated output value against previous values in the cache.\r\n * If a match is found, the old value is returned. This addresses the common\r\n * ```ts\r\n * todos.map(todo => todo.id)\r\n * ```\r\n * use case, where an update to another field in the original data causes a recalculation\r\n * due to changed references, but the output is still effectively the same.\r\n *\r\n * @since 5.0.0\r\n */\r\n resultEqualityCheck?: EqualityFn\r\n}\r\n\r\n/**\r\n * Creates a tree of `WeakMap`-based cache nodes based on the identity of the\r\n * arguments it's been called with (in this case, the extracted values from your input selectors).\r\n * This allows `weakMapMemoize` to have an effectively infinite cache size.\r\n * Cache results will be kept in memory as long as references to the arguments still exist,\r\n * and then cleared out as the arguments are garbage-collected.\r\n *\r\n * __Design Tradeoffs for `weakMapMemoize`:__\r\n * - Pros:\r\n * - It has an effectively infinite cache size, but you have no control over\r\n * how long values are kept in cache as it's based on garbage collection and `WeakMap`s.\r\n * - Cons:\r\n * - There's currently no way to alter the argument comparisons.\r\n * They're based on strict reference equality.\r\n * - It's roughly the same speed as `lruMemoize`, although likely a fraction slower.\r\n *\r\n * __Use Cases for `weakMapMemoize`:__\r\n * - This memoizer is likely best used for cases where you need to call the\r\n * same selector instance with many different arguments, such as a single\r\n * selector instance that is used in a list item component and called with\r\n * item IDs like:\r\n * ```ts\r\n * useSelector(state => selectSomeData(state, props.category))\r\n * ```\r\n * @param func - The function to be memoized.\r\n * @returns A memoized function with a `.clearCache()` method attached.\r\n *\r\n * @example\r\n * Using `createSelector`\r\n * ```ts\r\n * import { createSelector, weakMapMemoize } from 'reselect'\r\n *\r\n * interface RootState {\r\n * items: { id: number; category: string; name: string }[]\r\n * }\r\n *\r\n * const selectItemsByCategory = createSelector(\r\n * [\r\n * (state: RootState) => state.items,\r\n * (state: RootState, category: string) => category\r\n * ],\r\n * (items, category) => items.filter(item => item.category === category),\r\n * {\r\n * memoize: weakMapMemoize,\r\n * argsMemoize: weakMapMemoize\r\n * }\r\n * )\r\n * ```\r\n *\r\n * @example\r\n * Using `createSelectorCreator`\r\n * ```ts\r\n * import { createSelectorCreator, weakMapMemoize } from 'reselect'\r\n *\r\n * const createSelectorWeakMap = createSelectorCreator({ memoize: weakMapMemoize, argsMemoize: weakMapMemoize })\r\n *\r\n * const selectItemsByCategory = createSelectorWeakMap(\r\n * [\r\n * (state: RootState) => state.items,\r\n * (state: RootState, category: string) => category\r\n * ],\r\n * (items, category) => items.filter(item => item.category === category)\r\n * )\r\n * ```\r\n *\r\n * @template Func - The type of the function that is memoized.\r\n *\r\n * @see {@link https://reselect.js.org/api/weakMapMemoize `weakMapMemoize`}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n * @experimental\r\n */\r\nexport function weakMapMemoize(\r\n func: Func,\r\n options: WeakMapMemoizeOptions> = {}\r\n) {\r\n let fnNode = createCacheNode()\r\n const { resultEqualityCheck } = options\r\n\r\n let lastResult: WeakRef | undefined\r\n\r\n let resultsCount = 0\r\n\r\n function memoized() {\r\n let cacheNode = fnNode\r\n const { length } = arguments\r\n for (let i = 0, l = length; i < l; i++) {\r\n const arg = arguments[i]\r\n if (\r\n typeof arg === 'function' ||\r\n (typeof arg === 'object' && arg !== null)\r\n ) {\r\n // Objects go into a WeakMap\r\n let objectCache = cacheNode.o\r\n if (objectCache === null) {\r\n cacheNode.o = objectCache = new WeakMap()\r\n }\r\n const objectNode = objectCache.get(arg)\r\n if (objectNode === undefined) {\r\n cacheNode = createCacheNode()\r\n objectCache.set(arg, cacheNode)\r\n } else {\r\n cacheNode = objectNode\r\n }\r\n } else {\r\n // Primitives go into a regular Map\r\n let primitiveCache = cacheNode.p\r\n if (primitiveCache === null) {\r\n cacheNode.p = primitiveCache = new Map()\r\n }\r\n const primitiveNode = primitiveCache.get(arg)\r\n if (primitiveNode === undefined) {\r\n cacheNode = createCacheNode()\r\n primitiveCache.set(arg, cacheNode)\r\n } else {\r\n cacheNode = primitiveNode\r\n }\r\n }\r\n }\r\n\r\n const terminatedNode = cacheNode as unknown as TerminatedCacheNode\r\n\r\n let result\r\n\r\n if (cacheNode.s === TERMINATED) {\r\n result = cacheNode.v\r\n } else {\r\n // Allow errors to propagate\r\n result = func.apply(null, arguments as unknown as any[])\r\n resultsCount++\r\n }\r\n\r\n terminatedNode.s = TERMINATED\r\n\r\n if (resultEqualityCheck) {\r\n const lastResultValue = lastResult?.deref() ?? lastResult\r\n if (\r\n lastResultValue != null &&\r\n resultEqualityCheck(lastResultValue as ReturnType, result)\r\n ) {\r\n result = lastResultValue\r\n resultsCount !== 0 && resultsCount--\r\n }\r\n\r\n const needsWeakRef =\r\n (typeof result === 'object' && result !== null) ||\r\n typeof result === 'function'\r\n lastResult = needsWeakRef ? new Ref(result) : result\r\n }\r\n terminatedNode.v = result\r\n return result\r\n }\r\n\r\n memoized.clearCache = () => {\r\n fnNode = createCacheNode()\r\n memoized.resetResultsCount()\r\n }\r\n\r\n memoized.resultsCount = () => resultsCount\r\n\r\n memoized.resetResultsCount = () => {\r\n resultsCount = 0\r\n }\r\n\r\n return memoized as Func & Simplify\r\n}\r\n","import { weakMapMemoize } from './weakMapMemoize'\r\n\r\nimport type {\r\n Combiner,\r\n CreateSelectorOptions,\r\n DropFirstParameter,\r\n ExtractMemoizerFields,\r\n GetParamsFromSelectors,\r\n GetStateFromSelectors,\r\n InterruptRecursion,\r\n OutputSelector,\r\n Selector,\r\n SelectorArray,\r\n SetRequired,\r\n Simplify,\r\n UnknownMemoizer\r\n} from './types'\r\n\r\nimport {\r\n assertIsFunction,\r\n collectInputSelectorResults,\r\n ensureIsArray,\r\n getDependencies,\r\n getDevModeChecksExecutionInfo\r\n} from './utils'\r\n\r\n/**\r\n * An instance of `createSelector`, customized with a given memoize implementation.\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n *\r\n * @public\r\n */\r\nexport interface CreateSelectorFunction<\r\n MemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize,\r\n ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n> {\r\n /**\r\n * Creates a memoized selector function.\r\n *\r\n * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments and a `combiner` function.\r\n * @returns A memoized output selector.\r\n *\r\n * @template InputSelectors - The type of the input selectors as an array.\r\n * @template Result - The return type of the `combiner` as well as the output selector.\r\n * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n *\r\n * @see {@link https://github.com/reduxjs/reselect#createselectorinputselectors--inputselectors-resultfunc-createselectoroptions createSelector}\r\n */\r\n (\r\n ...createSelectorArgs: [\r\n ...inputSelectors: InputSelectors,\r\n combiner: Combiner\r\n ]\r\n ): OutputSelector<\r\n InputSelectors,\r\n Result,\r\n MemoizeFunction,\r\n ArgsMemoizeFunction\r\n > &\r\n InterruptRecursion\r\n\r\n /**\r\n * Creates a memoized selector function.\r\n *\r\n * @param createSelectorArgs - An arbitrary number of input selectors as separate inline arguments, a `combiner` function and an `options` object.\r\n * @returns A memoized output selector.\r\n *\r\n * @template InputSelectors - The type of the input selectors as an array.\r\n * @template Result - The return type of the `combiner` as well as the output selector.\r\n * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n *\r\n * @see {@link https://github.com/reduxjs/reselect#createselectorinputselectors--inputselectors-resultfunc-createselectoroptions createSelector}\r\n */\r\n <\r\n InputSelectors extends SelectorArray,\r\n Result,\r\n OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n >(\r\n ...createSelectorArgs: [\r\n ...inputSelectors: InputSelectors,\r\n combiner: Combiner,\r\n createSelectorOptions: Simplify<\r\n CreateSelectorOptions<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction,\r\n OverrideMemoizeFunction,\r\n OverrideArgsMemoizeFunction\r\n >\r\n >\r\n ]\r\n ): OutputSelector<\r\n InputSelectors,\r\n Result,\r\n OverrideMemoizeFunction,\r\n OverrideArgsMemoizeFunction\r\n > &\r\n InterruptRecursion\r\n\r\n /**\r\n * Creates a memoized selector function.\r\n *\r\n * @param inputSelectors - An array of input selectors.\r\n * @param combiner - A function that Combines the input selectors and returns an output selector. Otherwise known as the result function.\r\n * @param createSelectorOptions - An optional options object that allows for further customization per selector.\r\n * @returns A memoized output selector.\r\n *\r\n * @template InputSelectors - The type of the input selectors array.\r\n * @template Result - The return type of the `combiner` as well as the output selector.\r\n * @template OverrideMemoizeFunction - The type of the optional `memoize` function that could be passed into the options object to override the original `memoize` function that was initially passed into `createSelectorCreator`.\r\n * @template OverrideArgsMemoizeFunction - The type of the optional `argsMemoize` function that could be passed into the options object to override the original `argsMemoize` function that was initially passed into `createSelectorCreator`.\r\n *\r\n * @see {@link https://github.com/reduxjs/reselect#createselectorinputselectors--inputselectors-resultfunc-createselectoroptions createSelector}\r\n */\r\n <\r\n InputSelectors extends SelectorArray,\r\n Result,\r\n OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n >(\r\n inputSelectors: [...InputSelectors],\r\n combiner: Combiner,\r\n createSelectorOptions?: Simplify<\r\n CreateSelectorOptions<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction,\r\n OverrideMemoizeFunction,\r\n OverrideArgsMemoizeFunction\r\n >\r\n >\r\n ): OutputSelector<\r\n InputSelectors,\r\n Result,\r\n OverrideMemoizeFunction,\r\n OverrideArgsMemoizeFunction\r\n > &\r\n InterruptRecursion\r\n}\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization function\r\n * and options for customizing memoization behavior.\r\n *\r\n * @param options - An options object containing the `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). It also provides additional options for customizing memoization. While the `memoize` property is mandatory, the rest are optional.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @example\r\n * ```ts\r\n * const customCreateSelector = createSelectorCreator({\r\n * memoize: customMemoize, // Function to be used to memoize `resultFunc`\r\n * memoizeOptions: [memoizeOption1, memoizeOption2], // Options passed to `customMemoize` as the second argument onwards\r\n * argsMemoize: customArgsMemoize, // Function to be used to memoize the selector's arguments\r\n * argsMemoizeOptions: [argsMemoizeOption1, argsMemoizeOption2] // Options passed to `customArgsMemoize` as the second argument onwards\r\n * })\r\n *\r\n * const customSelector = customCreateSelector(\r\n * [inputSelector1, inputSelector2],\r\n * resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`\r\n * )\r\n *\r\n * customSelector(\r\n * ...selectorArgs // Will be memoized by `customArgsMemoize`\r\n * )\r\n * ```\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelectorCreator#using-options-since-500 `createSelectorCreator`}\r\n *\r\n * @since 5.0.0\r\n * @public\r\n */\r\nexport function createSelectorCreator<\r\n MemoizeFunction extends UnknownMemoizer,\r\n ArgsMemoizeFunction extends UnknownMemoizer = typeof weakMapMemoize\r\n>(\r\n options: Simplify<\r\n SetRequired<\r\n CreateSelectorOptions<\r\n typeof weakMapMemoize,\r\n typeof weakMapMemoize,\r\n MemoizeFunction,\r\n ArgsMemoizeFunction\r\n >,\r\n 'memoize'\r\n >\r\n >\r\n): CreateSelectorFunction\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization function\r\n * and options for customizing memoization behavior.\r\n *\r\n * @param memoize - The `memoize` function responsible for memoizing the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @example\r\n * ```ts\r\n * const customCreateSelector = createSelectorCreator(customMemoize, // Function to be used to memoize `resultFunc`\r\n * option1, // Will be passed as second argument to `customMemoize`\r\n * option2, // Will be passed as third argument to `customMemoize`\r\n * option3 // Will be passed as fourth argument to `customMemoize`\r\n * )\r\n *\r\n * const customSelector = customCreateSelector(\r\n * [inputSelector1, inputSelector2],\r\n * resultFunc // `resultFunc` will be passed as the first argument to `customMemoize`\r\n * )\r\n * ```\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelectorCreator#using-memoize-and-memoizeoptions `createSelectorCreator`}\r\n *\r\n * @public\r\n */\r\nexport function createSelectorCreator(\r\n memoize: MemoizeFunction,\r\n ...memoizeOptionsFromArgs: DropFirstParameter\r\n): CreateSelectorFunction\r\n\r\n/**\r\n * Creates a selector creator function with the specified memoization function and options for customizing memoization behavior.\r\n *\r\n * @param memoizeOrOptions - Either A `memoize` function or an `options` object containing the `memoize` function.\r\n * @param memoizeOptionsFromArgs - Optional configuration options for the memoization function. These options are then passed to the memoize function as the second argument onwards.\r\n * @returns A customized `createSelector` function.\r\n *\r\n * @template MemoizeFunction - The type of the memoize function that is used to memoize the `resultFunc` inside `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`).\r\n * @template ArgsMemoizeFunction - The type of the optional memoize function that is used to memoize the arguments passed into the output selector generated by `createSelector` (e.g., `lruMemoize` or `weakMapMemoize`). If none is explicitly provided, `weakMapMemoize` will be used.\r\n * @template MemoizeOrOptions - The type of the first argument. It can either be a `memoize` function or an `options` object containing the `memoize` function.\r\n */\r\nexport function createSelectorCreator<\r\n MemoizeFunction extends UnknownMemoizer,\r\n ArgsMemoizeFunction extends UnknownMemoizer,\r\n MemoizeOrOptions extends\r\n | MemoizeFunction\r\n | SetRequired<\r\n CreateSelectorOptions,\r\n 'memoize'\r\n >\r\n>(\r\n memoizeOrOptions: MemoizeOrOptions,\r\n ...memoizeOptionsFromArgs: MemoizeOrOptions extends SetRequired<\r\n CreateSelectorOptions,\r\n 'memoize'\r\n >\r\n ? never\r\n : DropFirstParameter\r\n) {\r\n /** options initially passed into `createSelectorCreator`. */\r\n const createSelectorCreatorOptions: SetRequired<\r\n CreateSelectorOptions,\r\n 'memoize'\r\n > = typeof memoizeOrOptions === 'function'\r\n ? {\r\n memoize: memoizeOrOptions as MemoizeFunction,\r\n memoizeOptions: memoizeOptionsFromArgs\r\n }\r\n : memoizeOrOptions\r\n\r\n const createSelector = <\r\n InputSelectors extends SelectorArray,\r\n Result,\r\n OverrideMemoizeFunction extends UnknownMemoizer = MemoizeFunction,\r\n OverrideArgsMemoizeFunction extends UnknownMemoizer = ArgsMemoizeFunction\r\n >(\r\n ...createSelectorArgs: [\r\n ...inputSelectors: [...InputSelectors],\r\n combiner: Combiner,\r\n createSelectorOptions?: CreateSelectorOptions<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction,\r\n OverrideMemoizeFunction,\r\n OverrideArgsMemoizeFunction\r\n >\r\n ]\r\n ) => {\r\n let recomputations = 0\r\n let dependencyRecomputations = 0\r\n let lastResult: Result\r\n\r\n // Due to the intricacies of rest params, we can't do an optional arg after `...createSelectorArgs`.\r\n // So, start by declaring the default value here.\r\n // (And yes, the words 'memoize' and 'options' appear too many times in this next sequence.)\r\n let directlyPassedOptions: CreateSelectorOptions<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction,\r\n OverrideMemoizeFunction,\r\n OverrideArgsMemoizeFunction\r\n > = {}\r\n\r\n // Normally, the result func or \"combiner\" is the last arg\r\n let resultFunc = createSelectorArgs.pop() as\r\n | Combiner\r\n | CreateSelectorOptions<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction,\r\n OverrideMemoizeFunction,\r\n OverrideArgsMemoizeFunction\r\n >\r\n\r\n // If the result func is actually an _object_, assume it's our options object\r\n if (typeof resultFunc === 'object') {\r\n directlyPassedOptions = resultFunc\r\n // and pop the real result func off\r\n resultFunc = createSelectorArgs.pop() as Combiner\r\n }\r\n\r\n assertIsFunction(\r\n resultFunc,\r\n `createSelector expects an output function after the inputs, but received: [${typeof resultFunc}]`\r\n )\r\n\r\n // Determine which set of options we're using. Prefer options passed directly,\r\n // but fall back to options given to `createSelectorCreator`.\r\n const combinedOptions = {\r\n ...createSelectorCreatorOptions,\r\n ...directlyPassedOptions\r\n }\r\n\r\n const {\r\n memoize,\r\n memoizeOptions = [],\r\n argsMemoize = weakMapMemoize,\r\n argsMemoizeOptions = [],\r\n devModeChecks = {}\r\n } = combinedOptions\r\n\r\n // Simplifying assumption: it's unlikely that the first options arg of the provided memoizer\r\n // is an array. In most libs I've looked at, it's an equality function or options object.\r\n // Based on that, if `memoizeOptions` _is_ an array, we assume it's a full\r\n // user-provided array of options. Otherwise, it must be just the _first_ arg, and so\r\n // we wrap it in an array so we can apply it.\r\n const finalMemoizeOptions = ensureIsArray(memoizeOptions)\r\n const finalArgsMemoizeOptions = ensureIsArray(argsMemoizeOptions)\r\n const dependencies = getDependencies(createSelectorArgs) as InputSelectors\r\n\r\n const memoizedResultFunc = memoize(function recomputationWrapper() {\r\n recomputations++\r\n // apply arguments instead of spreading for performance.\r\n // @ts-ignore\r\n return (resultFunc as Combiner).apply(\r\n null,\r\n arguments\r\n )\r\n }, ...finalMemoizeOptions) as Combiner &\r\n ExtractMemoizerFields\r\n\r\n let firstRun = true\r\n\r\n // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\r\n const selector = argsMemoize(function dependenciesChecker() {\r\n dependencyRecomputations++\r\n /** Return values of input selectors which the `resultFunc` takes as arguments. */\r\n const inputSelectorResults = collectInputSelectorResults(\r\n dependencies,\r\n arguments\r\n )\r\n\r\n if (process.env.NODE_ENV !== 'production') {\r\n const { identityFunctionCheck, inputStabilityCheck } =\r\n getDevModeChecksExecutionInfo(firstRun, devModeChecks)\r\n if (identityFunctionCheck.shouldRun) {\r\n identityFunctionCheck.run(\r\n resultFunc as Combiner\r\n )\r\n }\r\n\r\n if (inputStabilityCheck.shouldRun) {\r\n // make a second copy of the params, to check if we got the same results\r\n const inputSelectorResultsCopy = collectInputSelectorResults(\r\n dependencies,\r\n arguments\r\n )\r\n\r\n inputStabilityCheck.run(\r\n { inputSelectorResults, inputSelectorResultsCopy },\r\n { memoize, memoizeOptions: finalMemoizeOptions },\r\n arguments\r\n )\r\n }\r\n\r\n if (firstRun) firstRun = false\r\n }\r\n\r\n // apply arguments instead of spreading for performance.\r\n // @ts-ignore\r\n lastResult = memoizedResultFunc.apply(null, inputSelectorResults)\r\n\r\n return lastResult\r\n }, ...finalArgsMemoizeOptions) as unknown as Selector<\r\n GetStateFromSelectors,\r\n Result,\r\n GetParamsFromSelectors\r\n > &\r\n ExtractMemoizerFields\r\n\r\n return Object.assign(selector, {\r\n resultFunc,\r\n memoizedResultFunc,\r\n dependencies,\r\n dependencyRecomputations: () => dependencyRecomputations,\r\n resetDependencyRecomputations: () => {\r\n dependencyRecomputations = 0\r\n },\r\n lastResult: () => lastResult,\r\n recomputations: () => recomputations,\r\n resetRecomputations: () => {\r\n recomputations = 0\r\n },\r\n memoize,\r\n argsMemoize\r\n }) as OutputSelector<\r\n InputSelectors,\r\n Result,\r\n OverrideMemoizeFunction,\r\n OverrideArgsMemoizeFunction\r\n >\r\n }\r\n return createSelector as CreateSelectorFunction<\r\n MemoizeFunction,\r\n ArgsMemoizeFunction\r\n >\r\n}\r\n\r\n/**\r\n * Accepts one or more \"input selectors\" (either as separate arguments or a single array),\r\n * a single \"result function\" / \"combiner\", and an optional options object, and\r\n * generates a memoized selector function.\r\n *\r\n * @see {@link https://reselect.js.org/api/createSelector `createSelector`}\r\n *\r\n * @public\r\n */\r\nexport const createSelector =\r\n /* #__PURE__ */ createSelectorCreator(weakMapMemoize)\r\n","/**\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\n *\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\n * during build.\n * @param {number} code\n */\nexport function formatProdErrorMessage(code: number) {\n return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or ` + 'use the non-minified dev environment for full errors. ';\n}","declare global {\n interface SymbolConstructor {\n readonly observable: symbol;\n }\n}\nconst $$observable = /* #__PURE__ */(() => typeof Symbol === 'function' && Symbol.observable || '@@observable')();\nexport default $$observable;","/**\n * These are private action types reserved by Redux.\n * For any unknown actions, you must return the current state.\n * If the current state is undefined, you must return the initial state.\n * Do not reference these action types directly in your code.\n */\n\nconst randomString = () => Math.random().toString(36).substring(7).split('').join('.');\nconst ActionTypes = {\n INIT: `@@redux/INIT${/* #__PURE__ */randomString()}`,\n REPLACE: `@@redux/REPLACE${/* #__PURE__ */randomString()}`,\n PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nexport default ActionTypes;","/**\n * @param obj The object to inspect.\n * @returns True if the argument appears to be a plain object.\n */\nexport default function isPlainObject(obj: any): obj is object {\n if (typeof obj !== 'object' || obj === null) return false;\n let proto = obj;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(obj) === proto;\n}","import { formatProdErrorMessage as _formatProdErrorMessage13 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage12 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage11 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage10 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage9 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage8 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage7 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage6 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage5 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage4 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage3 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport $$observable from './utils/symbol-observable';\nimport { Store, StoreEnhancer, Dispatch, Observer, ListenerCallback } from './types/store';\nimport { Action } from './types/actions';\nimport { Reducer } from './types/reducers';\nimport ActionTypes from './utils/actionTypes';\nimport isPlainObject from './utils/isPlainObject';\nimport { kindOf } from './utils/kindOf';\n\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore(reducer: Reducer, enhancer?: StoreEnhancer): Store & Ext;\n/**\n * @deprecated\n *\n * **We recommend using the `configureStore` method\n * of the `@reduxjs/toolkit` package**, which replaces `createStore`.\n *\n * Redux Toolkit is our recommended approach for writing Redux logic today,\n * including store setup, reducers, data fetching, and more.\n *\n * **For more details, please read this Redux docs page:**\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * `configureStore` from Redux Toolkit is an improved version of `createStore` that\n * simplifies setup and helps avoid common bugs.\n *\n * You should not be using the `redux` core package by itself today, except for learning purposes.\n * The `createStore` method from the core `redux` package will not be removed, but we encourage\n * all users to migrate to using Redux Toolkit for all Redux code.\n *\n * If you want to use `createStore` without this visual deprecation warning, use\n * the `legacy_createStore` import instead:\n *\n * `import { legacy_createStore as createStore} from 'redux'`\n *\n */\nexport function createStore(reducer: Reducer, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer): Store & Ext;\nexport function createStore(reducer: Reducer, preloadedState?: PreloadedState | StoreEnhancer | undefined, enhancer?: StoreEnhancer): Store & Ext {\n if (typeof reducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n }\n if (typeof preloadedState === 'function' && typeof enhancer === 'function' || typeof enhancer === 'function' && typeof arguments[3] === 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(0) : 'It looks like you are passing several store enhancers to ' + 'createStore(). This is not supported. Instead, compose them ' + 'together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.');\n }\n if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n enhancer = (preloadedState as StoreEnhancer);\n preloadedState = undefined;\n }\n if (typeof enhancer !== 'undefined') {\n if (typeof enhancer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n }\n return enhancer(createStore)(reducer, (preloadedState as PreloadedState | undefined));\n }\n let currentReducer = reducer;\n let currentState: S | PreloadedState | undefined = (preloadedState as PreloadedState | undefined);\n let currentListeners: Map | null = new Map();\n let nextListeners = currentListeners;\n let listenerIdCounter = 0;\n let isDispatching = false;\n\n /**\n * This makes a shallow copy of currentListeners so we can use\n * nextListeners as a temporary list while dispatching.\n *\n * This prevents any bugs around consumers calling\n * subscribe/unsubscribe in the middle of a dispatch.\n */\n function ensureCanMutateNextListeners() {\n if (nextListeners === currentListeners) {\n nextListeners = new Map();\n currentListeners.forEach((listener, key) => {\n nextListeners.set(key, listener);\n });\n }\n }\n\n /**\n * Reads the state tree managed by the store.\n *\n * @returns The current state tree of your application.\n */\n function getState(): S {\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(3) : 'You may not call store.getState() while the reducer is executing. ' + 'The reducer has already received the state as an argument. ' + 'Pass it down from the top reducer instead of reading it from the store.');\n }\n return (currentState as S);\n }\n\n /**\n * Adds a change listener. It will be called any time an action is dispatched,\n * and some part of the state tree may potentially have changed. You may then\n * call `getState()` to read the current state tree inside the callback.\n *\n * You may call `dispatch()` from a change listener, with the following\n * caveats:\n *\n * 1. The subscriptions are snapshotted just before every `dispatch()` call.\n * If you subscribe or unsubscribe while the listeners are being invoked, this\n * will not have any effect on the `dispatch()` that is currently in progress.\n * However, the next `dispatch()` call, whether nested or not, will use a more\n * recent snapshot of the subscription list.\n *\n * 2. The listener should not expect to see all state changes, as the state\n * might have been updated multiple times during a nested `dispatch()` before\n * the listener is called. It is, however, guaranteed that all subscribers\n * registered before the `dispatch()` started will be called with the latest\n * state by the time it exits.\n *\n * @param listener A callback to be invoked on every dispatch.\n * @returns A function to remove this change listener.\n */\n function subscribe(listener: () => void) {\n if (typeof listener !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(5) : 'You may not call store.subscribe() while the reducer is executing. ' + 'If you would like to be notified after the store has been updated, subscribe from a ' + 'component and invoke store.getState() in the callback to access the latest state. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n let isSubscribed = true;\n ensureCanMutateNextListeners();\n const listenerId = listenerIdCounter++;\n nextListeners.set(listenerId, listener);\n return function unsubscribe() {\n if (!isSubscribed) {\n return;\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(6) : 'You may not unsubscribe from a store listener while the reducer is executing. ' + 'See https://redux.js.org/api/store#subscribelistener for more details.');\n }\n isSubscribed = false;\n ensureCanMutateNextListeners();\n nextListeners.delete(listenerId);\n currentListeners = null;\n };\n }\n\n /**\n * Dispatches an action. It is the only way to trigger a state change.\n *\n * The `reducer` function, used to create the store, will be called with the\n * current state tree and the given `action`. Its return value will\n * be considered the **next** state of the tree, and the change listeners\n * will be notified.\n *\n * The base implementation only supports plain object actions. If you want to\n * dispatch a Promise, an Observable, a thunk, or something else, you need to\n * wrap your store creating function into the corresponding middleware. For\n * example, see the documentation for the `redux-thunk` package. Even the\n * middleware will eventually dispatch plain object actions using this method.\n *\n * @param action A plain object representing “what changed”. It is\n * a good idea to keep actions serializable so you can record and replay user\n * sessions, or use the time travelling `redux-devtools`. An action must have\n * a `type` property which may not be `undefined`. It is a good idea to use\n * string constants for action types.\n *\n * @returns For convenience, the same action object you dispatched.\n *\n * Note that, if you use a custom middleware, it may wrap `dispatch()` to\n * return something else (for example, a Promise you can await).\n */\n function dispatch(action: A) {\n if (!isPlainObject(action)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n }\n if (typeof action.type === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage9(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n }\n if (typeof action.type !== 'string') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage10(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n }\n if (isDispatching) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage11(9) : 'Reducers may not dispatch actions.');\n }\n try {\n isDispatching = true;\n currentState = currentReducer(currentState, action);\n } finally {\n isDispatching = false;\n }\n const listeners = currentListeners = nextListeners;\n listeners.forEach(listener => {\n listener();\n });\n return action;\n }\n\n /**\n * Replaces the reducer currently used by the store to calculate the state.\n *\n * You might need this if your app implements code splitting and you want to\n * load some of the reducers dynamically. You might also need this if you\n * implement a hot reloading mechanism for Redux.\n *\n * @param nextReducer The reducer for the store to use instead.\n */\n function replaceReducer(nextReducer: Reducer): void {\n if (typeof nextReducer !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage12(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n }\n currentReducer = ((nextReducer as unknown) as Reducer);\n\n // This action has a similar effect to ActionTypes.INIT.\n // Any reducers that existed in both the new and old rootReducer\n // will receive the previous state. This effectively populates\n // the new state tree with any relevant data from the old one.\n dispatch(({\n type: ActionTypes.REPLACE\n } as A));\n }\n\n /**\n * Interoperability point for observable/reactive libraries.\n * @returns A minimal observable of state changes.\n * For more information, see the observable proposal:\n * https://github.com/tc39/proposal-observable\n */\n function observable() {\n const outerSubscribe = subscribe;\n return {\n /**\n * The minimal observable subscription method.\n * @param observer Any object that can be used as an observer.\n * The observer object should have a `next` method.\n * @returns An object with an `unsubscribe` method that can\n * be used to unsubscribe the observable from the store, and prevent further\n * emission of values from the observable.\n */\n subscribe(observer: unknown) {\n if (typeof observer !== 'object' || observer === null) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage13(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n }\n function observeState() {\n const observerAsObserver = (observer as Observer);\n if (observerAsObserver.next) {\n observerAsObserver.next(getState());\n }\n }\n observeState();\n const unsubscribe = outerSubscribe(observeState);\n return {\n unsubscribe\n };\n },\n [$$observable]() {\n return this;\n }\n };\n }\n\n // When a store is created, an \"INIT\" action is dispatched so that every\n // reducer returns their initial state. This effectively populates\n // the initial state tree.\n dispatch(({\n type: ActionTypes.INIT\n } as A));\n const store = (({\n dispatch: (dispatch as Dispatch),\n subscribe,\n getState,\n replaceReducer,\n [$$observable]: observable\n } as unknown) as Store & Ext);\n return store;\n}\n\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore(reducer: Reducer, enhancer?: StoreEnhancer): Store & Ext;\n/**\n * Creates a Redux store that holds the state tree.\n *\n * **We recommend using `configureStore` from the\n * `@reduxjs/toolkit` package**, which replaces `createStore`:\n * **https://redux.js.org/introduction/why-rtk-is-redux-today**\n *\n * The only way to change the data in the store is to call `dispatch()` on it.\n *\n * There should only be a single store in your app. To specify how different\n * parts of the state tree respond to actions, you may combine several reducers\n * into a single reducer function by using `combineReducers`.\n *\n * @param {Function} reducer A function that returns the next state tree, given\n * the current state tree and the action to handle.\n *\n * @param {any} [preloadedState] The initial state. You may optionally specify it\n * to hydrate the state from the server in universal apps, or to restore a\n * previously serialized user session.\n * If you use `combineReducers` to produce the root reducer function, this must be\n * an object with the same shape as `combineReducers` keys.\n *\n * @param {Function} [enhancer] The store enhancer. You may optionally specify it\n * to enhance the store with third-party capabilities such as middleware,\n * time travel, persistence, etc. The only store enhancer that ships with Redux\n * is `applyMiddleware()`.\n *\n * @returns {Store} A Redux store that lets you read the state, dispatch actions\n * and subscribe to changes.\n */\nexport function legacy_createStore(reducer: Reducer, preloadedState?: PreloadedState | undefined, enhancer?: StoreEnhancer): Store & Ext;\nexport function legacy_createStore(reducer: Reducer, preloadedState?: PreloadedState | StoreEnhancer | undefined, enhancer?: StoreEnhancer): Store & Ext {\n return createStore(reducer, (preloadedState as any), enhancer);\n}","import { formatProdErrorMessage as _formatProdErrorMessage3 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"src/utils/formatProdErrorMessage\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport { Action } from './types/actions';\nimport { ActionFromReducersMapObject, PreloadedStateShapeFromReducersMapObject, Reducer, StateFromReducersMapObject } from './types/reducers';\nimport ActionTypes from './utils/actionTypes';\nimport isPlainObject from './utils/isPlainObject';\nimport warning from './utils/warning';\nimport { kindOf } from './utils/kindOf';\nfunction getUnexpectedStateShapeWarningMessage(inputState: object, reducers: {\n [key: string]: Reducer;\n}, action: Action, unexpectedKeyCache: {\n [key: string]: true;\n}) {\n const reducerKeys = Object.keys(reducers);\n const argumentName = action && action.type === ActionTypes.INIT ? 'preloadedState argument passed to createStore' : 'previous state received by the reducer';\n if (reducerKeys.length === 0) {\n return 'Store does not have a valid reducer. Make sure the argument passed ' + 'to combineReducers is an object whose values are reducers.';\n }\n if (!isPlainObject(inputState)) {\n return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following ` + `keys: \"${reducerKeys.join('\", \"')}\"`;\n }\n const unexpectedKeys = Object.keys(inputState).filter(key => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n unexpectedKeys.forEach(key => {\n unexpectedKeyCache[key] = true;\n });\n if (action && action.type === ActionTypes.REPLACE) return;\n if (unexpectedKeys.length > 0) {\n return `Unexpected ${unexpectedKeys.length > 1 ? 'keys' : 'key'} ` + `\"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. ` + `Expected to find one of the known reducer keys instead: ` + `\"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n }\n}\nfunction assertReducerShape(reducers: {\n [key: string]: Reducer;\n}) {\n Object.keys(reducers).forEach(key => {\n const reducer = reducers[key];\n const initialState = reducer(undefined, {\n type: ActionTypes.INIT\n });\n if (typeof initialState === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. ` + `If the state passed to the reducer is undefined, you must ` + `explicitly return the initial state. The initial state may ` + `not be undefined. If you don't want to set a value for this reducer, ` + `you can use null instead of undefined.`);\n }\n if (typeof reducer(undefined, {\n type: ActionTypes.PROBE_UNKNOWN_ACTION()\n }) === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. ` + `Don't try to handle '${ActionTypes.INIT}' or other actions in \"redux/*\" ` + `namespace. They are considered private. Instead, you must return the ` + `current state for any unknown actions, unless it is undefined, ` + `in which case you must return the initial state, regardless of the ` + `action type. The initial state may not be undefined, but can be null.`);\n }\n });\n}\n\n/**\n * Turns an object whose values are different reducer functions, into a single\n * reducer function. It will call every child reducer, and gather their results\n * into a single state object, whose keys correspond to the keys of the passed\n * reducer functions.\n *\n * @template S Combined state object type.\n *\n * @param reducers An object whose values correspond to different reducer\n * functions that need to be combined into one. One handy way to obtain it\n * is to use `import * as reducers` syntax. The reducers may never\n * return undefined for any action. Instead, they should return their\n * initial state if the state passed to them was undefined, and the current\n * state for any unrecognized action.\n *\n * @returns A reducer function that invokes every reducer inside the passed\n * object, and builds a state object with the same shape.\n */\nexport default function combineReducers(reducers: M): M[keyof M] extends Reducer | undefined ? Reducer, ActionFromReducersMapObject, Partial>> : never;\nexport default function combineReducers(reducers: {\n [key: string]: Reducer;\n}) {\n const reducerKeys = Object.keys(reducers);\n const finalReducers: {\n [key: string]: Reducer;\n } = {};\n for (let i = 0; i < reducerKeys.length; i++) {\n const key = reducerKeys[i];\n if (process.env.NODE_ENV !== 'production') {\n if (typeof reducers[key] === 'undefined') {\n warning(`No reducer provided for key \"${key}\"`);\n }\n }\n if (typeof reducers[key] === 'function') {\n finalReducers[key] = reducers[key];\n }\n }\n const finalReducerKeys = Object.keys(finalReducers);\n\n // This is used to make sure we don't warn about the same\n // keys multiple times.\n let unexpectedKeyCache: {\n [key: string]: true;\n };\n if (process.env.NODE_ENV !== 'production') {\n unexpectedKeyCache = {};\n }\n let shapeAssertionError: unknown;\n try {\n assertReducerShape(finalReducers);\n } catch (e) {\n shapeAssertionError = e;\n }\n return function combination(state: StateFromReducersMapObject = {}, action: Action) {\n if (shapeAssertionError) {\n throw shapeAssertionError;\n }\n if (process.env.NODE_ENV !== 'production') {\n const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n if (warningMessage) {\n warning(warningMessage);\n }\n }\n let hasChanged = false;\n const nextState: StateFromReducersMapObject = {};\n for (let i = 0; i < finalReducerKeys.length; i++) {\n const key = finalReducerKeys[i];\n const reducer = finalReducers[key];\n const previousStateForKey = state[key];\n const nextStateForKey = reducer(previousStateForKey, action);\n if (typeof nextStateForKey === 'undefined') {\n const actionType = action && action.type;\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : '(unknown type)'}, the slice reducer for key \"${key}\" returned undefined. ` + `To ignore an action, you must explicitly return the previous state. ` + `If you want this reducer to hold no value, you can return null instead of undefined.`);\n }\n nextState[key] = nextStateForKey;\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n }\n hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n return hasChanged ? nextState : state;\n };\n}","type Func = (...a: T) => R;\n\n/**\n * Composes single-argument functions from right to left. The rightmost\n * function can take multiple arguments as it provides the signature for the\n * resulting composite function.\n *\n * @param funcs The functions to compose.\n * @returns A function obtained by composing the argument functions from right\n * to left. For example, `compose(f, g, h)` is identical to doing\n * `(...args) => f(g(h(...args)))`.\n */\nexport default function compose(): (a: R) => R;\nexport default function compose(f: F): F;\n\n/* two functions */\nexport default function compose(f1: (a: A) => R, f2: Func): Func;\n\n/* three functions */\nexport default function compose(f1: (b: B) => R, f2: (a: A) => B, f3: Func): Func;\n\n/* four functions */\nexport default function compose(f1: (c: C) => R, f2: (b: B) => C, f3: (a: A) => B, f4: Func): Func;\n\n/* rest */\nexport default function compose(f1: (a: any) => R, ...funcs: Function[]): (...args: any[]) => R;\nexport default function compose(...funcs: Function[]): (...args: any[]) => R;\nexport default function compose(...funcs: Function[]) {\n if (funcs.length === 0) {\n // infer the argument type so it is usable in inference down the line\n return (arg: T) => arg;\n }\n if (funcs.length === 1) {\n return funcs[0];\n }\n return funcs.reduce((a, b) => (...args: any) => a(b(...args)));\n}","// src/index.ts\nfunction createThunkMiddleware(extraArgument) {\n const middleware = ({ dispatch, getState }) => (next) => (action) => {\n if (typeof action === \"function\") {\n return action(dispatch, getState, extraArgument);\n }\n return next(action);\n };\n return middleware;\n}\nvar thunk = createThunkMiddleware();\nvar withExtraArgument = createThunkMiddleware;\nexport {\n thunk,\n withExtraArgument\n};\n","import type { Action, ActionCreator, StoreEnhancer } from 'redux';\nimport { compose } from 'redux';\n/**\r\n * @public\r\n */\n\nexport interface DevToolsEnhancerOptions {\n /**\r\n * the instance name to be showed on the monitor page. Default value is `document.title`.\r\n * If not specified and there's no document title, it will consist of `tabId` and `instanceId`.\r\n */\n name?: string;\n /**\r\n * action creators functions to be available in the Dispatcher.\r\n */\n\n actionCreators?: ActionCreator[] | {\n [key: string]: ActionCreator;\n };\n /**\r\n * if more than one action is dispatched in the indicated interval, all new actions will be collected and sent at once.\r\n * It is the joint between performance and speed. When set to `0`, all actions will be sent instantly.\r\n * Set it to a higher value when experiencing perf issues (also `maxAge` to a lower value).\r\n *\r\n * @default 500 ms.\r\n */\n\n latency?: number;\n /**\r\n * (> 1) - maximum allowed actions to be stored in the history tree. The oldest actions are removed once maxAge is reached. It's critical for performance.\r\n *\r\n * @default 50\r\n */\n\n maxAge?: number;\n /**\r\n * Customizes how actions and state are serialized and deserialized. Can be a boolean or object. If given a boolean, the behavior is the same as if you\r\n * were to pass an object and specify `options` as a boolean. Giving an object allows fine-grained customization using the `replacer` and `reviver`\r\n * functions.\r\n */\n\n serialize?: boolean | {\n /**\r\n * - `undefined` - will use regular `JSON.stringify` to send data (it's the fast mode).\r\n * - `false` - will handle also circular references.\r\n * - `true` - will handle also date, regex, undefined, error objects, symbols, maps, sets and functions.\r\n * - object, which contains `date`, `regex`, `undefined`, `error`, `symbol`, `map`, `set` and `function` keys.\r\n * For each of them you can indicate if to include (by setting as `true`).\r\n * For `function` key you can also specify a custom function which handles serialization.\r\n * See [`jsan`](https://github.com/kolodny/jsan) for more details.\r\n */\n options?: undefined | boolean | {\n date?: true;\n regex?: true;\n undefined?: true;\n error?: true;\n symbol?: true;\n map?: true;\n set?: true;\n function?: true | ((fn: (...args: any[]) => any) => string);\n };\n /**\r\n * [JSON replacer function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#The_replacer_parameter) used for both actions and states stringify.\r\n * In addition, you can specify a data type by adding a [`__serializedType__`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/helpers/index.js#L4)\r\n * key. So you can deserialize it back while importing or persisting data.\r\n * Moreover, it will also [show a nice preview showing the provided custom type](https://cloud.githubusercontent.com/assets/7957859/21814330/a17d556a-d761-11e6-85ef-159dd12f36c5.png):\r\n */\n\n replacer?: (key: string, value: unknown) => any;\n /**\r\n * [JSON `reviver` function](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter)\r\n * used for parsing the imported actions and states. See [`remotedev-serialize`](https://github.com/zalmoxisus/remotedev-serialize/blob/master/immutable/serialize.js#L8-L41)\r\n * as an example on how to serialize special data types and get them back.\r\n */\n\n reviver?: (key: string, value: unknown) => any;\n /**\r\n * Automatically serialize/deserialize immutablejs via [remotedev-serialize](https://github.com/zalmoxisus/remotedev-serialize).\r\n * Just pass the Immutable library. It will support all ImmutableJS structures. You can even export them into a file and get them back.\r\n * The only exception is `Record` class, for which you should pass this in addition the references to your classes in `refs`.\r\n */\n\n immutable?: any;\n /**\r\n * ImmutableJS `Record` classes used to make possible restore its instances back when importing, persisting...\r\n */\n\n refs?: any;\n };\n /**\r\n * function which takes `action` object and id number as arguments, and should return `action` object back.\r\n */\n\n actionSanitizer?: (action: A, id: number) => A;\n /**\r\n * function which takes `state` object and index as arguments, and should return `state` object back.\r\n */\n\n stateSanitizer?: (state: S, index: number) => S;\n /**\r\n * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\r\n */\n\n actionsDenylist?: string | string[];\n /**\r\n * *string or array of strings as regex* - actions types to be hidden / shown in the monitors (while passed to the reducers).\r\n * If `actionsAllowlist` specified, `actionsDenylist` is ignored.\r\n */\n\n actionsAllowlist?: string | string[];\n /**\r\n * called for every action before sending, takes `state` and `action` object, and returns `true` in case it allows sending the current data to the monitor.\r\n * Use it as a more advanced version of `actionsDenylist`/`actionsAllowlist` parameters.\r\n */\n\n predicate?: (state: S, action: A) => boolean;\n /**\r\n * if specified as `false`, it will not record the changes till clicking on `Start recording` button.\r\n * Available only for Redux enhancer, for others use `autoPause`.\r\n *\r\n * @default true\r\n */\n\n shouldRecordChanges?: boolean;\n /**\r\n * if specified, whenever clicking on `Pause recording` button and there are actions in the history log, will add this action type.\r\n * If not specified, will commit when paused. Available only for Redux enhancer.\r\n *\r\n * @default \"@@PAUSED\"\"\r\n */\n\n pauseActionType?: string;\n /**\r\n * auto pauses when the extension’s window is not opened, and so has zero impact on your app when not in use.\r\n * Not available for Redux enhancer (as it already does it but storing the data to be sent).\r\n *\r\n * @default false\r\n */\n\n autoPause?: boolean;\n /**\r\n * if specified as `true`, it will not allow any non-monitor actions to be dispatched till clicking on `Unlock changes` button.\r\n * Available only for Redux enhancer.\r\n *\r\n * @default false\r\n */\n\n shouldStartLocked?: boolean;\n /**\r\n * if set to `false`, will not recompute the states on hot reloading (or on replacing the reducers). Available only for Redux enhancer.\r\n *\r\n * @default true\r\n */\n\n shouldHotReload?: boolean;\n /**\r\n * if specified as `true`, whenever there's an exception in reducers, the monitors will show the error message, and next actions will not be dispatched.\r\n *\r\n * @default false\r\n */\n\n shouldCatchErrors?: boolean;\n /**\r\n * If you want to restrict the extension, specify the features you allow.\r\n * If not specified, all of the features are enabled. When set as an object, only those included as `true` will be allowed.\r\n * Note that except `true`/`false`, `import` and `export` can be set as `custom` (which is by default for Redux enhancer), meaning that the importing/exporting occurs on the client side.\r\n * Otherwise, you'll get/set the data right from the monitor part.\r\n */\n\n features?: {\n /**\r\n * start/pause recording of dispatched actions\r\n */\n pause?: boolean;\n /**\r\n * lock/unlock dispatching actions and side effects\r\n */\n\n lock?: boolean;\n /**\r\n * persist states on page reloading\r\n */\n\n persist?: boolean;\n /**\r\n * export history of actions in a file\r\n */\n\n export?: boolean | 'custom';\n /**\r\n * import history of actions from a file\r\n */\n\n import?: boolean | 'custom';\n /**\r\n * jump back and forth (time travelling)\r\n */\n\n jump?: boolean;\n /**\r\n * skip (cancel) actions\r\n */\n\n skip?: boolean;\n /**\r\n * drag and drop actions in the history list\r\n */\n\n reorder?: boolean;\n /**\r\n * dispatch custom actions or action creators\r\n */\n\n dispatch?: boolean;\n /**\r\n * generate tests for the selected actions\r\n */\n\n test?: boolean;\n };\n /**\r\n * Set to true or a stacktrace-returning function to record call stack traces for dispatched actions.\r\n * Defaults to false.\r\n */\n\n trace?: boolean | ((action: A) => string);\n /**\r\n * The maximum number of stack trace entries to record per action. Defaults to 10.\r\n */\n\n traceLimit?: number;\n}\ntype Compose = typeof compose;\ninterface ComposeWithDevTools {\n (options: DevToolsEnhancerOptions): Compose;\n (...funcs: StoreEnhancer[]): StoreEnhancer;\n}\n/**\r\n * @public\r\n */\n\nexport const composeWithDevTools: ComposeWithDevTools = typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ? (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : function () {\n if (arguments.length === 0) return undefined;\n if (typeof arguments[0] === 'object') return compose;\n return compose.apply(null, ((arguments as any) as Function[]));\n};\n/**\r\n * @public\r\n */\n\nexport const devToolsEnhancer: {\n (options: DevToolsEnhancerOptions): StoreEnhancer;\n} = typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION__ ? (window as any).__REDUX_DEVTOOLS_EXTENSION__ : function () {\n return function (noop) {\n return noop;\n };\n};","import { current, isDraft } from 'immer';\nimport { createSelectorCreator, weakMapMemoize } from 'reselect';\nexport const createDraftSafeSelectorCreator: typeof createSelectorCreator = (...args: unknown[]) => {\n const createSelector = (createSelectorCreator as any)(...args);\n return (...args: unknown[]) => {\n const selector = createSelector(...args);\n\n const wrappedSelector = (value: unknown, ...rest: unknown[]) => selector(isDraft(value) ? current(value) : value, ...rest);\n\n Object.assign(wrappedSelector, selector);\n return (wrappedSelector as any);\n };\n};\n/**\r\n * \"Draft-Safe\" version of `reselect`'s `createSelector`:\r\n * If an `immer`-drafted object is passed into the resulting selector's first argument,\r\n * the selector will act on the current draft value, instead of returning a cached value\r\n * that might be possibly outdated if the draft has been modified since.\r\n * @public\r\n */\n\nexport const createDraftSafeSelector = createDraftSafeSelectorCreator(weakMapMemoize);","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport { isAction } from 'redux';\nimport type { IsUnknownOrNonInferrable, IfMaybeUndefined, IfVoid, IsAny } from './tsHelpers';\nimport { hasMatchFunction } from './tsHelpers';\n/**\r\n * An action with a string type and an associated payload. This is the\r\n * type of action returned by `createAction()` action creators.\r\n *\r\n * @template P The type of the action's payload.\r\n * @template T the type used for the action type.\r\n * @template M The type of the action's meta (optional)\r\n * @template E The type of the action's error (optional)\r\n *\r\n * @public\r\n */\n\nexport type PayloadAction

= {\n payload: P;\n type: T;\n} & ([M] extends [never] ? {} : {\n meta: M;\n}) & ([E] extends [never] ? {} : {\n error: E;\n});\n/**\r\n * A \"prepare\" method to be used as the second parameter of `createAction`.\r\n * Takes any number of arguments and returns a Flux Standard Action without\r\n * type (will be added later) that *must* contain a payload (might be undefined).\r\n *\r\n * @public\r\n */\n\nexport type PrepareAction

= ((...args: any[]) => {\n payload: P;\n}) | ((...args: any[]) => {\n payload: P;\n meta: any;\n}) | ((...args: any[]) => {\n payload: P;\n error: any;\n}) | ((...args: any[]) => {\n payload: P;\n meta: any;\n error: any;\n});\n/**\r\n * Internal version of `ActionCreatorWithPreparedPayload`. Not to be used externally.\r\n *\r\n * @internal\r\n */\n\nexport type _ActionCreatorWithPreparedPayload | void, T extends string = string> = PA extends PrepareAction ? ActionCreatorWithPreparedPayload, P, T, ReturnType extends {\n error: infer E;\n} ? E : never, ReturnType extends {\n meta: infer M;\n} ? M : never> : void;\n/**\r\n * Basic type for all action creators.\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n */\n\nexport interface BaseActionCreator {\n type: T;\n match: (action: unknown) => action is PayloadAction;\n}\n/**\r\n * An action creator that takes multiple arguments that are passed\r\n * to a `PrepareAction` method to create the final Action.\r\n * @typeParam Args arguments for the action creator function\r\n * @typeParam P `payload` type\r\n * @typeParam T `type` name\r\n * @typeParam E optional `error` type\r\n * @typeParam M optional `meta` type\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n *\r\n * @public\r\n */\n\nexport interface ActionCreatorWithPreparedPayload extends BaseActionCreator {\n /**\r\n * Calling this {@link redux#ActionCreator} with `Args` will return\r\n * an Action with a payload of type `P` and (depending on the `PrepareAction`\r\n * method used) a `meta`- and `error` property of types `M` and `E` respectively.\r\n */\n (...args: Args): PayloadAction;\n}\n/**\r\n * An action creator of type `T` that takes an optional payload of type `P`.\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n *\r\n * @public\r\n */\n\nexport interface ActionCreatorWithOptionalPayload extends BaseActionCreator {\n /**\r\n * Calling this {@link redux#ActionCreator} with an argument will\r\n * return a {@link PayloadAction} of type `T` with a payload of `P`.\r\n * Calling it without an argument will return a PayloadAction with a payload of `undefined`.\r\n */\n (payload?: P): PayloadAction;\n}\n/**\r\n * An action creator of type `T` that takes no payload.\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n *\r\n * @public\r\n */\n\nexport interface ActionCreatorWithoutPayload extends BaseActionCreator {\n /**\r\n * Calling this {@link redux#ActionCreator} will\r\n * return a {@link PayloadAction} of type `T` with a payload of `undefined`\r\n */\n (noArgument: void): PayloadAction;\n}\n/**\r\n * An action creator of type `T` that requires a payload of type P.\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n *\r\n * @public\r\n */\n\nexport interface ActionCreatorWithPayload extends BaseActionCreator {\n /**\r\n * Calling this {@link redux#ActionCreator} with an argument will\r\n * return a {@link PayloadAction} of type `T` with a payload of `P`\r\n */\n (payload: P): PayloadAction;\n}\n/**\r\n * An action creator of type `T` whose `payload` type could not be inferred. Accepts everything as `payload`.\r\n *\r\n * @inheritdoc {redux#ActionCreator}\r\n *\r\n * @public\r\n */\n\nexport interface ActionCreatorWithNonInferrablePayload extends BaseActionCreator {\n /**\r\n * Calling this {@link redux#ActionCreator} with an argument will\r\n * return a {@link PayloadAction} of type `T` with a payload\r\n * of exactly the type of the argument.\r\n */\n (payload: PT): PayloadAction;\n}\n/**\r\n * An action creator that produces actions with a `payload` attribute.\r\n *\r\n * @typeParam P the `payload` type\r\n * @typeParam T the `type` of the resulting action\r\n * @typeParam PA if the resulting action is preprocessed by a `prepare` method, the signature of said method.\r\n *\r\n * @public\r\n */\n\nexport type PayloadActionCreator

| void = void> = IfPrepareActionMethodProvided, // else\nIsAny, IsUnknownOrNonInferrable, // else\nIfVoid, // else\nIfMaybeUndefined, // else\nActionCreatorWithPayload>>>>>;\n/**\r\n * A utility function to create an action creator for the given action type\r\n * string. The action creator accepts a single argument, which will be included\r\n * in the action object as a field called payload. The action creator function\r\n * will also have its toString() overridden so that it returns the action type.\r\n *\r\n * @param type The action type to use for created actions.\r\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\r\n * If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\r\n *\r\n * @public\r\n */\n\nexport function createAction

(type: T): PayloadActionCreator;\n/**\r\n * A utility function to create an action creator for the given action type\r\n * string. The action creator accepts a single argument, which will be included\r\n * in the action object as a field called payload. The action creator function\r\n * will also have its toString() overridden so that it returns the action type.\r\n *\r\n * @param type The action type to use for created actions.\r\n * @param prepare (optional) a method that takes any number of arguments and returns { payload } or { payload, meta }.\r\n * If this is given, the resulting action creator will pass its arguments to this method to calculate payload & meta.\r\n *\r\n * @public\r\n */\n\nexport function createAction, T extends string = string>(type: T, prepareAction: PA): PayloadActionCreator['payload'], T, PA>;\nexport function createAction(type: string, prepareAction?: Function): any {\n function actionCreator(...args: any[]) {\n if (prepareAction) {\n let prepared = prepareAction(...args);\n\n if (!prepared) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(0) : 'prepareAction did not return an object');\n }\n\n return {\n type,\n payload: prepared.payload,\n ...('meta' in prepared && {\n meta: prepared.meta\n }),\n ...('error' in prepared && {\n error: prepared.error\n })\n };\n }\n\n return {\n type,\n payload: args[0]\n };\n }\n\n actionCreator.toString = () => `${type}`;\n\n actionCreator.type = type;\n\n actionCreator.match = (action: unknown): action is PayloadAction => isAction(action) && action.type === type;\n\n return actionCreator;\n}\n/**\r\n * Returns true if value is an RTK-like action creator, with a static type property and match method.\r\n */\n\nexport function isActionCreator(action: unknown): action is BaseActionCreator & Function {\n return typeof action === 'function' && 'type' in action && // hasMatchFunction only wants Matchers but I don't see the point in rewriting it\n hasMatchFunction((action as any));\n}\n/**\r\n * Returns true if value is an action with a string type and valid Flux Standard Action keys.\r\n */\n\nexport function isFSA(action: unknown): action is {\n type: string;\n payload?: unknown;\n error?: unknown;\n meta?: unknown;\n} {\n return isAction(action) && Object.keys(action).every(isValidKey);\n}\n\nfunction isValidKey(key: string) {\n return ['type', 'payload', 'error', 'meta'].indexOf(key) > -1;\n} // helper types for more readable typings\n\n\ntype IfPrepareActionMethodProvided | void, True, False> = PA extends (...args: any[]) => any ? True : False;","import { Action } from '../types/actions';\nimport isPlainObject from './isPlainObject';\nexport default function isAction(action: unknown): action is Action {\n return isPlainObject(action) && 'type' in action && typeof (action as Record<'type', unknown>).type === 'string';\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport { produce as createNextState, isDraftable } from 'immer';\nimport type { Middleware, StoreEnhancer } from 'redux';\nexport function getTimeMeasureUtils(maxDelay: number, fnName: string) {\n let elapsed = 0;\n return {\n measureTime(fn: () => T): T {\n const started = Date.now();\n\n try {\n return fn();\n } finally {\n const finished = Date.now();\n elapsed += finished - started;\n }\n },\n\n warnIfExceeded() {\n if (elapsed > maxDelay) {\n console.warn(`${fnName} took ${elapsed}ms, which is more than the warning threshold of ${maxDelay}ms. \nIf your state or actions are very large, you may want to disable the middleware as it might cause too much of a slowdown in development mode. See https://redux-toolkit.js.org/api/getDefaultMiddleware for instructions.\nIt is disabled in production builds, so you don't need to worry about that.`);\n }\n }\n\n };\n}\nexport function delay(ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\nexport function find(iterable: Iterable, comparator: (item: T) => boolean): T | undefined {\n for (const entry of iterable) {\n if (comparator(entry)) {\n return entry;\n }\n }\n\n return undefined;\n}\nexport class Tuple = []> extends Array {\n constructor(length: number);\n constructor(...items: Items);\n\n constructor(...items: any[]) {\n super(...items);\n Object.setPrototypeOf(this, Tuple.prototype);\n }\n\n static get [Symbol.species]() {\n return (Tuple as any);\n }\n\n concat>(items: Tuple): Tuple<[...Items, ...AdditionalItems]>;\n concat>(items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;\n concat>(...items: AdditionalItems): Tuple<[...Items, ...AdditionalItems]>;\n\n concat(...arr: any[]) {\n return super.concat.apply(this, arr);\n }\n\n prepend>(items: Tuple): Tuple<[...AdditionalItems, ...Items]>;\n prepend>(items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;\n prepend>(...items: AdditionalItems): Tuple<[...AdditionalItems, ...Items]>;\n\n prepend(...arr: any[]) {\n if (arr.length === 1 && Array.isArray(arr[0])) {\n return new Tuple(...arr[0].concat(this));\n }\n\n return new Tuple(...arr.concat(this));\n }\n\n}\nexport function freezeDraftable(val: T) {\n return isDraftable(val) ? createNextState(val, () => {}) : val;\n}\ninterface WeakMapEmplaceHandler {\n /**\r\n * Will be called to get value, if no value is currently in map.\r\n */\n insert?(key: K, map: WeakMap): V;\n /**\r\n * Will be called to update a value, if one exists already.\r\n */\n\n update?(previous: V, key: K, map: WeakMap): V;\n}\ninterface MapEmplaceHandler {\n /**\r\n * Will be called to get value, if no value is currently in map.\r\n */\n insert?(key: K, map: Map): V;\n /**\r\n * Will be called to update a value, if one exists already.\r\n */\n\n update?(previous: V, key: K, map: Map): V;\n}\nexport function emplace(map: Map, key: K, handler: MapEmplaceHandler): V;\nexport function emplace(map: WeakMap, key: K, handler: WeakMapEmplaceHandler): V;\n/**\r\n * Allow inserting a new value, or updating an existing one\r\n * @throws if called for a key with no current value and no `insert` handler is provided\r\n * @returns current value in map (after insertion/updating)\r\n * ```ts\r\n * // return current value if already in map, otherwise initialise to 0 and return that\r\n * const num = emplace(map, key, {\r\n * insert: () => 0\r\n * })\r\n *\r\n * // increase current value by one if already in map, otherwise initialise to 0\r\n * const num = emplace(map, key, {\r\n * update: (n) => n + 1,\r\n * insert: () => 0,\r\n * })\r\n *\r\n * // only update if value's already in the map - and increase it by one\r\n * if (map.has(key)) {\r\n * const num = emplace(map, key, {\r\n * update: (n) => n + 1,\r\n * })\r\n * }\r\n * ```\r\n *\r\n * @remarks\r\n * Based on https://github.com/tc39/proposal-upsert currently in Stage 2 - maybe in a few years we'll be able to replace this with direct method calls\r\n */\n\nexport function emplace(map: WeakMap, key: K, handler: WeakMapEmplaceHandler): V {\n if (map.has(key)) {\n let value = (map.get(key) as V);\n\n if (handler.update) {\n value = handler.update(value, key, map);\n map.set(key, value);\n }\n\n return value;\n }\n\n if (!handler.insert) throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(10) : 'No insert provided for key not already in map');\n const inserted = handler.insert(key, map);\n map.set(key, inserted);\n return inserted;\n}","import type { Middleware, UnknownAction } from 'redux';\nimport type { ThunkMiddleware } from 'redux-thunk';\nimport { thunk as thunkMiddleware, withExtraArgument } from 'redux-thunk';\nimport type { ActionCreatorInvariantMiddlewareOptions } from './actionCreatorInvariantMiddleware';\nimport { createActionCreatorInvariantMiddleware } from './actionCreatorInvariantMiddleware';\nimport type { ImmutableStateInvariantMiddlewareOptions } from './immutableStateInvariantMiddleware';\n/* PROD_START_REMOVE_UMD */\n\nimport { createImmutableStateInvariantMiddleware } from './immutableStateInvariantMiddleware';\n/* PROD_STOP_REMOVE_UMD */\n\nimport type { SerializableStateInvariantMiddlewareOptions } from './serializableStateInvariantMiddleware';\nimport { createSerializableStateInvariantMiddleware } from './serializableStateInvariantMiddleware';\nimport type { ExcludeFromTuple } from './tsHelpers';\nimport { Tuple } from './utils';\n\nfunction isBoolean(x: any): x is boolean {\n return typeof x === 'boolean';\n}\n\ninterface ThunkOptions {\n extraArgument: E;\n}\ninterface GetDefaultMiddlewareOptions {\n thunk?: boolean | ThunkOptions;\n immutableCheck?: boolean | ImmutableStateInvariantMiddlewareOptions;\n serializableCheck?: boolean | SerializableStateInvariantMiddlewareOptions;\n actionCreatorCheck?: boolean | ActionCreatorInvariantMiddlewareOptions;\n}\nexport type ThunkMiddlewareFor = O extends {\n thunk: false;\n} ? never : O extends {\n thunk: {\n extraArgument: infer E;\n };\n} ? ThunkMiddleware : ThunkMiddleware;\nexport type GetDefaultMiddleware = (options?: O) => Tuple], never>>;\nexport const buildGetDefaultMiddleware = (): GetDefaultMiddleware => function getDefaultMiddleware(options) {\n const {\n thunk = true,\n immutableCheck = true,\n serializableCheck = true,\n actionCreatorCheck = true\n } = options ?? {};\n let middlewareArray = new Tuple();\n\n if (thunk) {\n if (isBoolean(thunk)) {\n middlewareArray.push(thunkMiddleware);\n } else {\n middlewareArray.push(withExtraArgument(thunk.extraArgument));\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (immutableCheck) {\n /* PROD_START_REMOVE_UMD */\n let immutableOptions: ImmutableStateInvariantMiddlewareOptions = {};\n\n if (!isBoolean(immutableCheck)) {\n immutableOptions = immutableCheck;\n }\n\n middlewareArray.unshift(createImmutableStateInvariantMiddleware(immutableOptions));\n /* PROD_STOP_REMOVE_UMD */\n }\n\n if (serializableCheck) {\n let serializableOptions: SerializableStateInvariantMiddlewareOptions = {};\n\n if (!isBoolean(serializableCheck)) {\n serializableOptions = serializableCheck;\n }\n\n middlewareArray.push(createSerializableStateInvariantMiddleware(serializableOptions));\n }\n\n if (actionCreatorCheck) {\n let actionCreatorOptions: ActionCreatorInvariantMiddlewareOptions = {};\n\n if (!isBoolean(actionCreatorCheck)) {\n actionCreatorOptions = actionCreatorCheck;\n }\n\n middlewareArray.unshift(createActionCreatorInvariantMiddleware(actionCreatorOptions));\n }\n }\n\n return (middlewareArray as any);\n};","import type { StoreEnhancer } from 'redux';\nexport const SHOULD_AUTOBATCH = 'RTK_autoBatch';\nexport const prepareAutoBatched = () => (payload: T): {\n payload: T;\n meta: unknown;\n} => ({\n payload,\n meta: {\n [SHOULD_AUTOBATCH]: true\n }\n});\n\nconst createQueueWithTimer = (timeout: number) => {\n return (notify: () => void) => {\n setTimeout(notify, timeout);\n };\n}; // requestAnimationFrame won't exist in SSR environments.\n// Fall back to a vague approximation just to keep from erroring.\n\n\nconst rAF = typeof window !== 'undefined' && window.requestAnimationFrame ? window.requestAnimationFrame : createQueueWithTimer(10);\nexport type AutoBatchOptions = {\n type: 'tick';\n} | {\n type: 'timer';\n timeout: number;\n} | {\n type: 'raf';\n} | {\n type: 'callback';\n queueNotification: (notify: () => void) => void;\n};\n/**\r\n * A Redux store enhancer that watches for \"low-priority\" actions, and delays\r\n * notifying subscribers until either the queued callback executes or the\r\n * next \"standard-priority\" action is dispatched.\r\n *\r\n * This allows dispatching multiple \"low-priority\" actions in a row with only\r\n * a single subscriber notification to the UI after the sequence of actions\r\n * is finished, thus improving UI re-render performance.\r\n *\r\n * Watches for actions with the `action.meta[SHOULD_AUTOBATCH]` attribute.\r\n * This can be added to `action.meta` manually, or by using the\r\n * `prepareAutoBatched` helper.\r\n *\r\n * By default, it will queue a notification for the end of the event loop tick.\r\n * However, you can pass several other options to configure the behavior:\r\n * - `{type: 'tick'}`: queues using `queueMicrotask`\r\n * - `{type: 'timer, timeout: number}`: queues using `setTimeout`\r\n * - `{type: 'raf'}`: queues using `requestAnimationFrame` (default)\r\n * - `{type: 'callback', queueNotification: (notify: () => void) => void}`: lets you provide your own callback\r\n *\r\n *\r\n */\n\nexport const autoBatchEnhancer = (options: AutoBatchOptions = {\n type: 'raf'\n}): StoreEnhancer => next => (...args) => {\n const store = next(...args);\n let notifying = true;\n let shouldNotifyAtEndOfTick = false;\n let notificationQueued = false;\n const listeners = new Set<() => void>();\n const queueCallback = options.type === 'tick' ? queueMicrotask : options.type === 'raf' ? rAF : options.type === 'callback' ? options.queueNotification : createQueueWithTimer(options.timeout);\n\n const notifyListeners = () => {\n // We're running at the end of the event loop tick.\n // Run the real listener callbacks to actually update the UI.\n notificationQueued = false;\n\n if (shouldNotifyAtEndOfTick) {\n shouldNotifyAtEndOfTick = false;\n listeners.forEach(l => l());\n }\n };\n\n return Object.assign({}, store, {\n // Override the base `store.subscribe` method to keep original listeners\n // from running if we're delaying notifications\n subscribe(listener: () => void) {\n // Each wrapped listener will only call the real listener if\n // the `notifying` flag is currently active when it's called.\n // This lets the base store work as normal, while the actual UI\n // update becomes controlled by this enhancer.\n const wrappedListener: typeof listener = () => notifying && listener();\n\n const unsubscribe = store.subscribe(wrappedListener);\n listeners.add(listener);\n return () => {\n unsubscribe();\n listeners.delete(listener);\n };\n },\n\n // Override the base `store.dispatch` method so that we can check actions\n // for the `shouldAutoBatch` flag and determine if batching is active\n dispatch(action: any) {\n try {\n // If the action does _not_ have the `shouldAutoBatch` flag,\n // we resume/continue normal notify-after-each-dispatch behavior\n notifying = !action?.meta?.[SHOULD_AUTOBATCH]; // If a `notifyListeners` microtask was queued, you can't cancel it.\n // Instead, we set a flag so that it's a no-op when it does run\n\n shouldNotifyAtEndOfTick = !notifying;\n\n if (shouldNotifyAtEndOfTick) {\n // We've seen at least 1 action with `SHOULD_AUTOBATCH`. Try to queue\n // a microtask to notify listeners at the end of the event loop tick.\n // Make sure we only enqueue this _once_ per tick.\n if (!notificationQueued) {\n notificationQueued = true;\n queueCallback(notifyListeners);\n }\n } // Go ahead and process the action as usual, including reducers.\n // If normal notification behavior is enabled, the store will notify\n // all of its own listeners, and the wrapper callbacks above will\n // see `notifying` is true and pass on to the real listener callbacks.\n // If we're \"batching\" behavior, then the wrapped callbacks will\n // bail out, causing the base store notification behavior to be no-ops.\n\n\n return store.dispatch(action);\n } finally {\n // Assume we're back to normal behavior after each action\n notifying = true;\n }\n }\n\n });\n};","import type { StoreEnhancer } from 'redux';\nimport type { AutoBatchOptions } from './autoBatchEnhancer';\nimport { autoBatchEnhancer } from './autoBatchEnhancer';\nimport { Tuple } from './utils';\nimport type { Middlewares } from './configureStore';\nimport type { ExtractDispatchExtensions } from './tsHelpers';\ntype GetDefaultEnhancersOptions = {\n autoBatch?: boolean | AutoBatchOptions;\n};\nexport type GetDefaultEnhancers> = (options?: GetDefaultEnhancersOptions) => Tuple<[StoreEnhancer<{\n dispatch: ExtractDispatchExtensions;\n}>]>;\nexport const buildGetDefaultEnhancers = ,>(middlewareEnhancer: StoreEnhancer<{\n dispatch: ExtractDispatchExtensions;\n}>): GetDefaultEnhancers => function getDefaultEnhancers(options) {\n const {\n autoBatch = true\n } = options ?? {};\n let enhancerArray = new Tuple(middlewareEnhancer);\n\n if (autoBatch) {\n enhancerArray.push(autoBatchEnhancer(typeof autoBatch === 'object' ? autoBatch : undefined));\n }\n\n return (enhancerArray as any);\n};","import { formatProdErrorMessage as _formatProdErrorMessage6 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage5 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage4 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage3 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { Action } from 'redux';\nimport type { CaseReducer, CaseReducers, ActionMatcherDescriptionCollection } from './createReducer';\nimport type { TypeGuard } from './tsHelpers';\nexport interface TypedActionCreator {\n (...args: any[]): Action;\n type: Type;\n}\n/**\r\n * A builder for an action <-> reducer map.\r\n *\r\n * @public\r\n */\n\nexport interface ActionReducerMapBuilder {\n /**\r\n * Adds a case reducer to handle a single exact action type.\r\n * @remarks\r\n * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\r\n * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\r\n * @param reducer - The actual case reducer function.\r\n */\n addCase>(actionCreator: ActionCreator, reducer: CaseReducer>): ActionReducerMapBuilder;\n /**\r\n * Adds a case reducer to handle a single exact action type.\r\n * @remarks\r\n * All calls to `builder.addCase` must come before any calls to `builder.addMatcher` or `builder.addDefaultCase`.\r\n * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\r\n * @param reducer - The actual case reducer function.\r\n */\n\n addCase>(type: Type, reducer: CaseReducer): ActionReducerMapBuilder;\n /**\r\n * Allows you to match your incoming actions against your own filter function instead of only the `action.type` property.\r\n * @remarks\r\n * If multiple matcher reducers match, all of them will be executed in the order\r\n * they were defined in - even if a case reducer already matched.\r\n * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.\r\n * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)\r\n * function\r\n * @param reducer - The actual case reducer function.\r\n *\r\n * @example\r\n ```ts\r\n import {\r\n createAction,\r\n createReducer,\r\n AsyncThunk,\r\n UnknownAction,\r\n } from \"@reduxjs/toolkit\";\r\n type GenericAsyncThunk = AsyncThunk;\r\n type PendingAction = ReturnType;\r\n type RejectedAction = ReturnType;\r\n type FulfilledAction = ReturnType;\r\n const initialState: Record = {};\r\n const resetAction = createAction(\"reset-tracked-loading-state\");\r\n function isPendingAction(action: UnknownAction): action is PendingAction {\r\n return typeof action.type === \"string\" && action.type.endsWith(\"/pending\");\r\n }\r\n const reducer = createReducer(initialState, (builder) => {\r\n builder\r\n .addCase(resetAction, () => initialState)\r\n // matcher can be defined outside as a type predicate function\r\n .addMatcher(isPendingAction, (state, action) => {\r\n state[action.meta.requestId] = \"pending\";\r\n })\r\n .addMatcher(\r\n // matcher can be defined inline as a type predicate function\r\n (action): action is RejectedAction => action.type.endsWith(\"/rejected\"),\r\n (state, action) => {\r\n state[action.meta.requestId] = \"rejected\";\r\n }\r\n )\r\n // matcher can just return boolean and the matcher can receive a generic argument\r\n .addMatcher(\r\n (action) => action.type.endsWith(\"/fulfilled\"),\r\n (state, action) => {\r\n state[action.meta.requestId] = \"fulfilled\";\r\n }\r\n );\r\n });\r\n ```\r\n */\n\n addMatcher(matcher: TypeGuard | ((action: any) => boolean), reducer: CaseReducer): Omit, 'addCase'>;\n /**\r\n * Adds a \"default case\" reducer that is executed if no case reducer and no matcher\r\n * reducer was executed for this action.\r\n * @param reducer - The fallback \"default case\" reducer function.\r\n *\r\n * @example\r\n ```ts\r\n import { createReducer } from '@reduxjs/toolkit'\r\n const initialState = { otherActions: 0 }\r\n const reducer = createReducer(initialState, builder => {\r\n builder\r\n // .addCase(...)\r\n // .addMatcher(...)\r\n .addDefaultCase((state, action) => {\r\n state.otherActions++\r\n })\r\n })\r\n ```\r\n */\n\n addDefaultCase(reducer: CaseReducer): {};\n}\nexport function executeReducerBuilderCallback(builderCallback: (builder: ActionReducerMapBuilder) => void): [CaseReducers, ActionMatcherDescriptionCollection, CaseReducer | undefined] {\n const actionsMap: CaseReducers = {};\n const actionMatchers: ActionMatcherDescriptionCollection = [];\n let defaultCaseReducer: CaseReducer | undefined;\n const builder = {\n addCase(typeOrActionCreator: string | TypedActionCreator, reducer: CaseReducer) {\n if (process.env.NODE_ENV !== 'production') {\n /*\r\n to keep the definition by the user in line with actual behavior,\r\n we enforce `addCase` to always be called before calling `addMatcher`\r\n as matching cases take precedence over matchers\r\n */\n if (actionMatchers.length > 0) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(26) : '`builder.addCase` should only be called before calling `builder.addMatcher`');\n }\n\n if (defaultCaseReducer) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(27) : '`builder.addCase` should only be called before calling `builder.addDefaultCase`');\n }\n }\n\n const type = typeof typeOrActionCreator === 'string' ? typeOrActionCreator : typeOrActionCreator.type;\n\n if (!type) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(28) : '`builder.addCase` cannot be called with an empty action type');\n }\n\n if (type in actionsMap) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(29) : '`builder.addCase` cannot be called with two reducers for the same action type ' + `'${type}'`);\n }\n\n actionsMap[type] = reducer;\n return builder;\n },\n\n addMatcher(matcher: TypeGuard, reducer: CaseReducer) {\n if (process.env.NODE_ENV !== 'production') {\n if (defaultCaseReducer) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(30) : '`builder.addMatcher` should only be called before calling `builder.addDefaultCase`');\n }\n }\n\n actionMatchers.push({\n matcher,\n reducer\n });\n return builder;\n },\n\n addDefaultCase(reducer: CaseReducer) {\n if (process.env.NODE_ENV !== 'production') {\n if (defaultCaseReducer) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(31) : '`builder.addDefaultCase` can only be called once');\n }\n }\n\n defaultCaseReducer = reducer;\n return builder;\n }\n\n };\n builderCallback(builder);\n return [actionsMap, actionMatchers, defaultCaseReducer];\n}","import { formatProdErrorMessage as _formatProdErrorMessage8 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage7 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage6 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage5 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage4 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage3 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { Action, UnknownAction, Reducer } from 'redux';\nimport type { Selector } from 'reselect';\nimport type { ActionCreatorWithoutPayload, PayloadAction, PayloadActionCreator, PrepareAction, _ActionCreatorWithPreparedPayload } from './createAction';\nimport { createAction } from './createAction';\nimport type { ActionMatcherDescriptionCollection, CaseReducer, ReducerWithInitialState } from './createReducer';\nimport { createReducer } from './createReducer';\nimport type { ActionReducerMapBuilder, TypedActionCreator } from './mapBuilders';\nimport { executeReducerBuilderCallback } from './mapBuilders';\nimport type { Id, Tail, TypeGuard } from './tsHelpers';\nimport type { InjectConfig } from './combineSlices';\nimport type { AsyncThunk, AsyncThunkConfig, AsyncThunkOptions, AsyncThunkPayloadCreator, OverrideThunkApiConfigs } from './createAsyncThunk';\nimport { createAsyncThunk as _createAsyncThunk } from './createAsyncThunk';\nimport { emplace } from './utils';\nconst asyncThunkSymbol = Symbol.for('rtk-slice-createasyncthunk'); // type is annotated because it's too long to infer\n\nexport const asyncThunkCreator: {\n [asyncThunkSymbol]: typeof _createAsyncThunk;\n} = {\n [asyncThunkSymbol]: _createAsyncThunk\n};\ninterface InjectIntoConfig extends InjectConfig {\n reducerPath?: NewReducerPath;\n}\n/**\r\n * The return value of `createSlice`\r\n *\r\n * @public\r\n */\n\nexport interface Slice = SliceCaseReducers, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors = SliceSelectors> {\n /**\r\n * The slice name.\r\n */\n name: Name;\n /**\r\n * The slice reducer path.\r\n */\n\n reducerPath: ReducerPath;\n /**\r\n * The slice's reducer.\r\n */\n\n reducer: Reducer;\n /**\r\n * Action creators for the types of actions that are handled by the slice\r\n * reducer.\r\n */\n\n actions: CaseReducerActions;\n /**\r\n * The individual case reducer functions that were passed in the `reducers` parameter.\r\n * This enables reuse and testing if they were defined inline when calling `createSlice`.\r\n */\n\n caseReducers: SliceDefinedCaseReducers;\n /**\r\n * Provides access to the initial state value given to the slice.\r\n * If a lazy state initializer was provided, it will be called and a fresh value returned.\r\n */\n\n getInitialState: () => State;\n /**\r\n * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)\r\n */\n\n getSelectors(this: this): Id>;\n /**\r\n * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)\r\n */\n\n getSelectors(this: this, selectState: (this: this, rootState: RootState) => State): Id>;\n /**\r\n * Selectors that assume the slice's state is `rootState[slice.reducerPath]` (which is usually the case)\r\n *\r\n * Equivalent to `slice.getSelectors((state: RootState) => state[slice.reducerPath])`.\r\n */\n\n selectors: Id>;\n /**\r\n * Inject slice into provided reducer (return value from `combineSlices`), and return injected slice.\r\n */\n\n injectInto(this: this, injectable: {\n inject: (slice: {\n reducerPath: string;\n reducer: Reducer;\n }, config?: InjectConfig) => void;\n }, config?: InjectIntoConfig): InjectedSlice;\n /**\r\n * Select the slice state, using the slice's current reducerPath.\r\n *\r\n * Will throw an error if slice is not found.\r\n */\n\n selectSlice(this: this, state: { [K in ReducerPath]: State }): State;\n}\n/**\r\n * A slice after being called with `injectInto(reducer)`.\r\n *\r\n * Selectors can now be called with an `undefined` value, in which case they use the slice's initial state.\r\n */\n\ninterface InjectedSlice = SliceCaseReducers, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors = SliceSelectors> extends Omit, 'getSelectors' | 'selectors'> {\n /**\r\n * Get localised slice selectors (expects to be called with *just* the slice's state as the first parameter)\r\n */\n getSelectors(): Id>;\n /**\r\n * Get globalised slice selectors (`selectState` callback is expected to receive first parameter and return slice state)\r\n */\n\n getSelectors(selectState: (this: this, rootState: RootState) => State | undefined): Id>;\n /**\r\n * Selectors that assume the slice's state is `rootState[slice.name]` (which is usually the case)\r\n *\r\n * Equivalent to `slice.getSelectors((state: RootState) => state[slice.name])`.\r\n */\n\n selectors: Id>;\n /**\r\n * Select the slice state, using the slice's current reducerPath.\r\n *\r\n * Returns initial state if slice is not found.\r\n */\n\n selectSlice(state: { [K in ReducerPath]?: State | undefined }): State;\n}\n/**\r\n * Options for `createSlice()`.\r\n *\r\n * @public\r\n */\n\nexport interface CreateSliceOptions = SliceCaseReducers, Name extends string = string, ReducerPath extends string = Name, Selectors extends SliceSelectors = SliceSelectors> {\n /**\r\n * The slice's name. Used to namespace the generated action types.\r\n */\n name: Name;\n /**\r\n * The slice's reducer path. Used when injecting into a combined slice reducer.\r\n */\n\n reducerPath?: ReducerPath;\n /**\r\n * The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\r\n */\n\n initialState: State | (() => State);\n /**\r\n * A mapping from action types to action-type-specific *case reducer*\r\n * functions. For every action type, a matching action creator will be\r\n * generated using `createAction()`.\r\n */\n\n reducers: ValidateSliceCaseReducers | ((creators: ReducerCreators) => CR);\n /**\r\n * A callback that receives a *builder* object to define\r\n * case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\r\n * \r\n * \r\n * @example\r\n ```ts\r\n import { createAction, createSlice, Action } from '@reduxjs/toolkit'\r\n const incrementBy = createAction('incrementBy')\r\n const decrement = createAction('decrement')\r\n interface RejectedAction extends Action {\r\n error: Error\r\n }\r\n function isRejectedAction(action: Action): action is RejectedAction {\r\n return action.type.endsWith('rejected')\r\n }\r\n createSlice({\r\n name: 'counter',\r\n initialState: 0,\r\n reducers: {},\r\n extraReducers: builder => {\r\n builder\r\n .addCase(incrementBy, (state, action) => {\r\n // action is inferred correctly here if using TS\r\n })\r\n // You can chain calls, or have separate `builder.addCase()` lines each time\r\n .addCase(decrement, (state, action) => {})\r\n // You can match a range of action types\r\n .addMatcher(\r\n isRejectedAction,\r\n // `action` will be inferred as a RejectedAction due to isRejectedAction being defined as a type guard\r\n (state, action) => {}\r\n )\r\n // and provide a default case if no other handlers matched\r\n .addDefaultCase((state, action) => {})\r\n }\r\n })\r\n ```\r\n */\n\n extraReducers?: (builder: ActionReducerMapBuilder) => void;\n /**\r\n * A map of selectors that receive the slice's state and any additional arguments, and return a result.\r\n */\n\n selectors?: Selectors;\n}\nexport enum ReducerType {\n reducer = 'reducer',\n reducerWithPrepare = 'reducerWithPrepare',\n asyncThunk = 'asyncThunk',\n}\ninterface ReducerDefinition {\n _reducerDefinitionType: T;\n}\nexport interface CaseReducerDefinition extends CaseReducer, ReducerDefinition {}\n/**\r\n * A CaseReducer with a `prepare` method.\r\n *\r\n * @public\r\n */\n\nexport type CaseReducerWithPrepare = {\n reducer: CaseReducer;\n prepare: PrepareAction;\n};\nexport interface CaseReducerWithPrepareDefinition extends CaseReducerWithPrepare, ReducerDefinition {}\nexport interface AsyncThunkSliceReducerConfig {\n pending?: CaseReducer['pending']>>;\n rejected?: CaseReducer['rejected']>>;\n fulfilled?: CaseReducer['fulfilled']>>;\n settled?: CaseReducer['rejected' | 'fulfilled']>>;\n options?: AsyncThunkOptions;\n}\nexport interface AsyncThunkSliceReducerDefinition extends AsyncThunkSliceReducerConfig, ReducerDefinition {\n payloadCreator: AsyncThunkPayloadCreator;\n}\n/**\r\n * Providing these as part of the config would cause circular types, so we disallow passing them\r\n */\n\ntype PreventCircular = { [K in keyof ThunkApiConfig]: K extends 'state' | 'dispatch' ? never : ThunkApiConfig[K] };\ninterface AsyncThunkCreator = PreventCircular> {\n (payloadCreator: AsyncThunkPayloadCreator, config?: AsyncThunkSliceReducerConfig): AsyncThunkSliceReducerDefinition;\n = {}>(payloadCreator: AsyncThunkPayloadCreator, config?: AsyncThunkSliceReducerConfig): AsyncThunkSliceReducerDefinition;\n withTypes>(): AsyncThunkCreator>;\n}\nexport interface ReducerCreators {\n reducer(caseReducer: CaseReducer): CaseReducerDefinition;\n reducer(caseReducer: CaseReducer>): CaseReducerDefinition>;\n asyncThunk: AsyncThunkCreator;\n preparedReducer>(prepare: Prepare, reducer: CaseReducer>>): {\n _reducerDefinitionType: ReducerType.reducerWithPrepare;\n prepare: Prepare;\n reducer: CaseReducer>>;\n };\n}\n/**\r\n * The type describing a slice's `reducers` option.\r\n *\r\n * @public\r\n */\n\nexport type SliceCaseReducers = Record> | CaseReducerWithPrepareDefinition> | AsyncThunkSliceReducerDefinition> | Record> | CaseReducerWithPrepare>>;\n/**\r\n * The type describing a slice's `selectors` option.\r\n */\n\nexport type SliceSelectors = {\n [K: string]: (sliceState: State, ...args: any[]) => any;\n};\ntype SliceActionType = ActionName extends string | number ? `${SliceName}/${ActionName}` : string;\n/**\r\n * Derives the slice's `actions` property from the `reducers` options\r\n *\r\n * @public\r\n */\n\nexport type CaseReducerActions, SliceName extends string> = { [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends {\n prepare: any;\n} ? ActionCreatorForCaseReducerWithPrepare> : Definition extends AsyncThunkSliceReducerDefinition ? AsyncThunk : Definition extends {\n reducer: any;\n} ? ActionCreatorForCaseReducer> : ActionCreatorForCaseReducer> : never };\n/**\r\n * Get a `PayloadActionCreator` type for a passed `CaseReducerWithPrepare`\r\n *\r\n * @internal\r\n */\n\ntype ActionCreatorForCaseReducerWithPrepare = _ActionCreatorWithPreparedPayload;\n/**\r\n * Get a `PayloadActionCreator` type for a passed `CaseReducer`\r\n *\r\n * @internal\r\n */\n\ntype ActionCreatorForCaseReducer = CR extends (state: any, action: infer Action) => any ? Action extends {\n payload: infer P;\n} ? PayloadActionCreator : ActionCreatorWithoutPayload : ActionCreatorWithoutPayload;\n/**\r\n * Extracts the CaseReducers out of a `reducers` object, even if they are\r\n * tested into a `CaseReducerWithPrepare`.\r\n *\r\n * @internal\r\n */\n\ntype SliceDefinedCaseReducers> = { [Type in keyof CaseReducers]: CaseReducers[Type] extends infer Definition ? Definition extends AsyncThunkSliceReducerDefinition ? Id, 'fulfilled' | 'rejected' | 'pending' | 'settled'>> : Definition extends {\n reducer: infer Reducer;\n} ? Reducer : Definition : never };\ntype RemappedSelector = S extends Selector ? Selector & {\n unwrapped: S;\n} : never;\n/**\r\n * Extracts the final selector type from the `selectors` object.\r\n *\r\n * Removes the `string` index signature from the default value.\r\n */\n\ntype SliceDefinedSelectors, RootState> = { [K in keyof Selectors as string extends K ? never : K]: RemappedSelector };\n/**\r\n * Used on a SliceCaseReducers object.\r\n * Ensures that if a CaseReducer is a `CaseReducerWithPrepare`, that\r\n * the `reducer` and the `prepare` function use the same type of `payload`.\r\n *\r\n * Might do additional such checks in the future.\r\n *\r\n * This type is only ever useful if you want to write your own wrapper around\r\n * `createSlice`. Please don't use it otherwise!\r\n *\r\n * @public\r\n */\n\nexport type ValidateSliceCaseReducers> = ACR & { [T in keyof ACR]: ACR[T] extends {\n reducer(s: S, action?: infer A): any;\n} ? {\n prepare(...a: never[]): Omit;\n} : {} };\n\nfunction getType(slice: string, actionKey: string): string {\n return `${slice}/${actionKey}`;\n}\n\ninterface BuildCreateSliceConfig {\n creators?: {\n asyncThunk?: typeof asyncThunkCreator;\n };\n}\nexport function buildCreateSlice({\n creators\n}: BuildCreateSliceConfig = {}) {\n const cAT = creators?.asyncThunk?.[asyncThunkSymbol];\n return function createSlice, Name extends string, Selectors extends SliceSelectors, ReducerPath extends string = Name>(options: CreateSliceOptions): Slice {\n const {\n name,\n reducerPath = ((name as unknown) as ReducerPath)\n } = options;\n\n if (!name) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(11) : '`name` is a required option for createSlice');\n }\n\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n if (options.initialState === undefined) {\n console.error('You must provide an `initialState` value that is not `undefined`. You may have misspelled `initialState`');\n }\n }\n\n const reducers = (typeof options.reducers === 'function' ? options.reducers(buildReducerCreators()) : options.reducers) || {};\n const reducerNames = Object.keys(reducers);\n const context: ReducerHandlingContext = {\n sliceCaseReducersByName: {},\n sliceCaseReducersByType: {},\n actionCreators: {},\n sliceMatchers: []\n };\n const contextMethods: ReducerHandlingContextMethods = {\n addCase(typeOrActionCreator: string | TypedActionCreator, reducer: CaseReducer) {\n const type = typeof typeOrActionCreator === 'string' ? typeOrActionCreator : typeOrActionCreator.type;\n\n if (!type) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(12) : '`context.addCase` cannot be called with an empty action type');\n }\n\n if (type in context.sliceCaseReducersByType) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(13) : '`context.addCase` cannot be called with two reducers for the same action type: ' + type);\n }\n\n context.sliceCaseReducersByType[type] = reducer;\n return contextMethods;\n },\n\n addMatcher(matcher, reducer) {\n context.sliceMatchers.push({\n matcher,\n reducer\n });\n return contextMethods;\n },\n\n exposeAction(name, actionCreator) {\n context.actionCreators[name] = actionCreator;\n return contextMethods;\n },\n\n exposeCaseReducer(name, reducer) {\n context.sliceCaseReducersByName[name] = reducer;\n return contextMethods;\n }\n\n };\n reducerNames.forEach(reducerName => {\n const reducerDefinition = reducers[reducerName];\n const reducerDetails: ReducerDetails = {\n reducerName,\n type: getType(name, reducerName),\n createNotation: typeof options.reducers === 'function'\n };\n\n if (isAsyncThunkSliceReducerDefinition(reducerDefinition)) {\n handleThunkCaseReducerDefinition(reducerDetails, reducerDefinition, contextMethods, cAT);\n } else {\n handleNormalReducerDefinition(reducerDetails, reducerDefinition, contextMethods);\n }\n });\n\n function buildReducer() {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof options.extraReducers === 'object') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(14) : \"The object notation for `createSlice.extraReducers` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createSlice\");\n }\n }\n\n const [extraReducers = {}, actionMatchers = [], defaultCaseReducer = undefined] = typeof options.extraReducers === 'function' ? executeReducerBuilderCallback(options.extraReducers) : [options.extraReducers];\n const finalCaseReducers = { ...extraReducers,\n ...context.sliceCaseReducersByType\n };\n return createReducer(options.initialState, builder => {\n for (let key in finalCaseReducers) {\n builder.addCase(key, (finalCaseReducers[key] as CaseReducer));\n }\n\n for (let sM of context.sliceMatchers) {\n builder.addMatcher(sM.matcher, sM.reducer);\n }\n\n for (let m of actionMatchers) {\n builder.addMatcher(m.matcher, m.reducer);\n }\n\n if (defaultCaseReducer) {\n builder.addDefaultCase(defaultCaseReducer);\n }\n });\n }\n\n const selectSelf = (state: State) => state;\n\n const injectedSelectorCache = new WeakMap, WeakMap<(rootState: any) => State | undefined, Record any>>>();\n\n let _reducer: ReducerWithInitialState;\n\n const slice: Slice = {\n name,\n reducerPath,\n\n reducer(state, action) {\n if (!_reducer) _reducer = buildReducer();\n return _reducer(state, action);\n },\n\n actions: (context.actionCreators as any),\n caseReducers: (context.sliceCaseReducersByName as any),\n\n getInitialState() {\n if (!_reducer) _reducer = buildReducer();\n return _reducer.getInitialState();\n },\n\n getSelectors(selectState: (rootState: any) => State = selectSelf) {\n const selectorCache = emplace(injectedSelectorCache, this, {\n insert: () => new WeakMap()\n });\n return (emplace(selectorCache, selectState, {\n insert: () => {\n const map: Record> = {};\n\n for (const [name, selector] of Object.entries(options.selectors ?? {})) {\n map[name] = wrapSelector(this, selector, selectState, this !== slice);\n }\n\n return map;\n }\n }) as any);\n },\n\n selectSlice(state) {\n let sliceState = state[this.reducerPath];\n\n if (typeof sliceState === 'undefined') {\n // check if injectInto has been called\n if (this !== slice) {\n sliceState = this.getInitialState();\n } else if (process.env.NODE_ENV !== 'production') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(15) : 'selectSlice returned undefined for an uninjected slice reducer');\n }\n }\n\n return sliceState;\n },\n\n get selectors() {\n return this.getSelectors(this.selectSlice);\n },\n\n injectInto(injectable, {\n reducerPath: pathOpt,\n ...config\n } = {}) {\n const reducerPath = pathOpt ?? this.reducerPath;\n injectable.inject({\n reducerPath,\n reducer: this.reducer\n }, config);\n return ({ ...this,\n reducerPath\n } as any);\n }\n\n };\n return slice;\n };\n}\n\nfunction wrapSelector>(slice: Slice, selector: S, selectState: Selector, injected?: boolean) {\n function wrapper(rootState: NewState, ...args: any[]) {\n let sliceState = selectState.call(slice, rootState);\n\n if (typeof sliceState === 'undefined') {\n if (injected) {\n sliceState = slice.getInitialState();\n } else if (process.env.NODE_ENV !== 'production') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(16) : 'selectState returned undefined for an uninjected slice reducer');\n }\n }\n\n return selector(sliceState, ...args);\n }\n\n wrapper.unwrapped = selector;\n return (wrapper as RemappedSelector);\n}\n/**\r\n * A function that accepts an initial state, an object full of reducer\r\n * functions, and a \"slice name\", and automatically generates\r\n * action creators and action types that correspond to the\r\n * reducers and state.\r\n *\r\n * @public\r\n */\n\n\nexport const createSlice = buildCreateSlice();\ninterface ReducerHandlingContext {\n sliceCaseReducersByName: Record | Pick, 'fulfilled' | 'rejected' | 'pending' | 'settled'>>;\n sliceCaseReducersByType: Record>;\n sliceMatchers: ActionMatcherDescriptionCollection;\n actionCreators: Record;\n}\ninterface ReducerHandlingContextMethods {\n /**\r\n * Adds a case reducer to handle a single action type.\r\n * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\r\n * @param reducer - The actual case reducer function.\r\n */\n addCase>(actionCreator: ActionCreator, reducer: CaseReducer>): ReducerHandlingContextMethods;\n /**\r\n * Adds a case reducer to handle a single action type.\r\n * @param actionCreator - Either a plain action type string, or an action creator generated by [`createAction`](./createAction) that can be used to determine the action type.\r\n * @param reducer - The actual case reducer function.\r\n */\n\n addCase>(type: Type, reducer: CaseReducer): ReducerHandlingContextMethods;\n /**\r\n * Allows you to match incoming actions against your own filter function instead of only the `action.type` property.\r\n * @remarks\r\n * If multiple matcher reducers match, all of them will be executed in the order\r\n * they were defined in - even if a case reducer already matched.\r\n * All calls to `builder.addMatcher` must come after any calls to `builder.addCase` and before any calls to `builder.addDefaultCase`.\r\n * @param matcher - A matcher function. In TypeScript, this should be a [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)\r\n * function\r\n * @param reducer - The actual case reducer function.\r\n *\r\n */\n\n addMatcher(matcher: TypeGuard, reducer: CaseReducer): ReducerHandlingContextMethods;\n /**\r\n * Add an action to be exposed under the final `slice.actions` key.\r\n * @param name The key to be exposed as.\r\n * @param actionCreator The action to expose.\r\n * @example\r\n * context.exposeAction(\"addPost\", createAction(\"addPost\"));\r\n *\r\n * export const { addPost } = slice.actions\r\n *\r\n * dispatch(addPost(post))\r\n */\n\n exposeAction(name: string, actionCreator: Function): ReducerHandlingContextMethods;\n /**\r\n * Add a case reducer to be exposed under the final `slice.caseReducers` key.\r\n * @param name The key to be exposed as.\r\n * @param reducer The reducer to expose.\r\n * @example\r\n * context.exposeCaseReducer(\"addPost\", (state, action: PayloadAction) => {\r\n * state.push(action.payload)\r\n * })\r\n *\r\n * slice.caseReducers.addPost([], addPost(post))\r\n */\n\n exposeCaseReducer(name: string, reducer: CaseReducer | Pick, 'fulfilled' | 'rejected' | 'pending' | 'settled'>): ReducerHandlingContextMethods;\n}\ninterface ReducerDetails {\n /** The key the reducer was defined under */\n reducerName: string;\n /** The predefined action type, i.e. `${slice.name}/${reducerName}` */\n\n type: string;\n /** Whether create. notation was used when defining reducers */\n\n createNotation: boolean;\n}\n\nfunction buildReducerCreators(): ReducerCreators {\n function asyncThunk(payloadCreator: AsyncThunkPayloadCreator, config: AsyncThunkSliceReducerConfig): AsyncThunkSliceReducerDefinition {\n return {\n _reducerDefinitionType: ReducerType.asyncThunk,\n payloadCreator,\n ...config\n };\n }\n\n asyncThunk.withTypes = () => asyncThunk;\n\n return {\n reducer(caseReducer: CaseReducer) {\n return Object.assign({\n // hack so the wrapping function has the same name as the original\n // we need to create a wrapper so the `reducerDefinitionType` is not assigned to the original\n [caseReducer.name](...args: Parameters) {\n return caseReducer(...args);\n }\n\n }[caseReducer.name], ({\n _reducerDefinitionType: ReducerType.reducer\n } as const));\n },\n\n preparedReducer(prepare, reducer) {\n return {\n _reducerDefinitionType: ReducerType.reducerWithPrepare,\n prepare,\n reducer\n };\n },\n\n asyncThunk: (asyncThunk as any)\n };\n}\n\nfunction handleNormalReducerDefinition({\n type,\n reducerName,\n createNotation\n}: ReducerDetails, maybeReducerWithPrepare: CaseReducer | CaseReducerWithPrepare>, context: ReducerHandlingContextMethods) {\n let caseReducer: CaseReducer;\n let prepareCallback: PrepareAction | undefined;\n\n if ('reducer' in maybeReducerWithPrepare) {\n if (createNotation && !isCaseReducerWithPrepareDefinition(maybeReducerWithPrepare)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(17) : 'Please use the `create.preparedReducer` notation for prepared action creators with the `create` notation.');\n }\n\n caseReducer = maybeReducerWithPrepare.reducer;\n prepareCallback = maybeReducerWithPrepare.prepare;\n } else {\n caseReducer = maybeReducerWithPrepare;\n }\n\n context.addCase(type, caseReducer).exposeCaseReducer(reducerName, caseReducer).exposeAction(reducerName, prepareCallback ? createAction(type, prepareCallback) : createAction(type));\n}\n\nfunction isAsyncThunkSliceReducerDefinition(reducerDefinition: any): reducerDefinition is AsyncThunkSliceReducerDefinition {\n return reducerDefinition._reducerDefinitionType === ReducerType.asyncThunk;\n}\n\nfunction isCaseReducerWithPrepareDefinition(reducerDefinition: any): reducerDefinition is CaseReducerWithPrepareDefinition {\n return reducerDefinition._reducerDefinitionType === ReducerType.reducerWithPrepare;\n}\n\nfunction handleThunkCaseReducerDefinition({\n type,\n reducerName\n}: ReducerDetails, reducerDefinition: AsyncThunkSliceReducerDefinition, context: ReducerHandlingContextMethods, cAT: typeof _createAsyncThunk | undefined) {\n if (!cAT) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage8(18) : 'Cannot use `create.asyncThunk` in the built-in `createSlice`. ' + 'Use `buildCreateSlice({ creators: { asyncThunk: asyncThunkCreator } })` to create a customised version of `createSlice`.');\n }\n\n const {\n payloadCreator,\n fulfilled,\n pending,\n rejected,\n settled,\n options\n } = reducerDefinition;\n const thunk = cAT(type, payloadCreator, (options as any));\n context.exposeAction(reducerName, thunk);\n\n if (fulfilled) {\n context.addCase(thunk.fulfilled, fulfilled);\n }\n\n if (pending) {\n context.addCase(thunk.pending, pending);\n }\n\n if (rejected) {\n context.addCase(thunk.rejected, rejected);\n }\n\n if (settled) {\n context.addMatcher(thunk.settled, settled);\n }\n\n context.exposeCaseReducer(reducerName, {\n fulfilled: fulfilled || noop,\n pending: pending || noop,\n rejected: rejected || noop,\n settled: settled || noop\n });\n}\n\nfunction noop() {}","import { formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { Draft } from 'immer';\nimport { produce as createNextState, isDraft, isDraftable } from 'immer';\nimport type { Action, Reducer, UnknownAction } from 'redux';\nimport type { ActionReducerMapBuilder } from './mapBuilders';\nimport { executeReducerBuilderCallback } from './mapBuilders';\nimport type { NoInfer, TypeGuard } from './tsHelpers';\nimport { freezeDraftable } from './utils';\n/**\r\n * Defines a mapping from action types to corresponding action object shapes.\r\n *\r\n * @deprecated This should not be used manually - it is only used for internal\r\n * inference purposes and should not have any further value.\r\n * It might be removed in the future.\r\n * @public\r\n */\n\nexport type Actions = Record;\nexport type ActionMatcherDescription = {\n matcher: TypeGuard;\n reducer: CaseReducer>;\n};\nexport type ReadonlyActionMatcherDescriptionCollection = ReadonlyArray>;\nexport type ActionMatcherDescriptionCollection = Array>;\n/**\r\n * A *case reducer* is a reducer function for a specific action type. Case\r\n * reducers can be composed to full reducers using `createReducer()`.\r\n *\r\n * Unlike a normal Redux reducer, a case reducer is never called with an\r\n * `undefined` state to determine the initial state. Instead, the initial\r\n * state is explicitly specified as an argument to `createReducer()`.\r\n *\r\n * In addition, a case reducer can choose to mutate the passed-in `state`\r\n * value directly instead of returning a new state. This does not actually\r\n * cause the store state to be mutated directly; instead, thanks to\r\n * [immer](https://github.com/mweststrate/immer), the mutations are\r\n * translated to copy operations that result in a new state.\r\n *\r\n * @public\r\n */\n\nexport type CaseReducer = (state: Draft, action: A) => NoInfer | void | Draft>;\n/**\r\n * A mapping from action types to case reducers for `createReducer()`.\r\n *\r\n * @deprecated This should not be used manually - it is only used\r\n * for internal inference purposes and using it manually\r\n * would lead to type erasure.\r\n * It might be removed in the future.\r\n * @public\r\n */\n\nexport type CaseReducers = { [T in keyof AS]: AS[T] extends Action ? CaseReducer : void };\nexport type NotFunction = T extends Function ? never : T;\n\nfunction isStateFunction(x: unknown): x is () => S {\n return typeof x === 'function';\n}\n\nexport type ReducerWithInitialState> = Reducer & {\n getInitialState: () => S;\n};\n/**\r\n * A utility function that allows defining a reducer as a mapping from action\r\n * type to *case reducer* functions that handle these action types. The\r\n * reducer's initial state is passed as the first argument.\r\n *\r\n * @remarks\r\n * The body of every case reducer is implicitly wrapped with a call to\r\n * `produce()` from the [immer](https://github.com/mweststrate/immer) library.\r\n * This means that rather than returning a new state object, you can also\r\n * mutate the passed-in state object directly; these mutations will then be\r\n * automatically and efficiently translated into copies, giving you both\r\n * convenience and immutability.\r\n *\r\n * @overloadSummary\r\n * This function accepts a callback that receives a `builder` object as its argument.\r\n * That builder provides `addCase`, `addMatcher` and `addDefaultCase` functions that may be\r\n * called to define what actions this reducer will handle.\r\n *\r\n * @param initialState - `State | (() => State)`: The initial state that should be used when the reducer is called the first time. This may also be a \"lazy initializer\" function, which should return an initial state value when called. This will be used whenever the reducer is called with `undefined` as its state value, and is primarily useful for cases like reading initial state from `localStorage`.\r\n * @param builderCallback - `(builder: Builder) => void` A callback that receives a *builder* object to define\r\n * case reducers via calls to `builder.addCase(actionCreatorOrType, reducer)`.\r\n * @example\r\n```ts\r\nimport {\r\n createAction,\r\n createReducer,\r\n UnknownAction,\r\n PayloadAction,\r\n} from \"@reduxjs/toolkit\";\r\n\r\nconst increment = createAction(\"increment\");\r\nconst decrement = createAction(\"decrement\");\r\n\r\nfunction isActionWithNumberPayload(\r\n action: UnknownAction\r\n): action is PayloadAction {\r\n return typeof action.payload === \"number\";\r\n}\r\n\r\nconst reducer = createReducer(\r\n {\r\n counter: 0,\r\n sumOfNumberPayloads: 0,\r\n unhandledActions: 0,\r\n },\r\n (builder) => {\r\n builder\r\n .addCase(increment, (state, action) => {\r\n // action is inferred correctly here\r\n state.counter += action.payload;\r\n })\r\n // You can chain calls, or have separate `builder.addCase()` lines each time\r\n .addCase(decrement, (state, action) => {\r\n state.counter -= action.payload;\r\n })\r\n // You can apply a \"matcher function\" to incoming actions\r\n .addMatcher(isActionWithNumberPayload, (state, action) => {})\r\n // and provide a default case if no other handlers matched\r\n .addDefaultCase((state, action) => {});\r\n }\r\n);\r\n```\r\n * @public\r\n */\n\nexport function createReducer>(initialState: S | (() => S), mapOrBuilderCallback: (builder: ActionReducerMapBuilder) => void): ReducerWithInitialState {\n if (process.env.NODE_ENV !== 'production') {\n if (typeof mapOrBuilderCallback === 'object') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(8) : \"The object notation for `createReducer` has been removed. Please use the 'builder callback' notation instead: https://redux-toolkit.js.org/api/createReducer\");\n }\n }\n\n let [actionsMap, finalActionMatchers, finalDefaultCaseReducer] = executeReducerBuilderCallback(mapOrBuilderCallback); // Ensure the initial state gets frozen either way (if draftable)\n\n let getInitialState: () => S;\n\n if (isStateFunction(initialState)) {\n getInitialState = () => freezeDraftable(initialState());\n } else {\n const frozenInitialState = freezeDraftable(initialState);\n\n getInitialState = () => frozenInitialState;\n }\n\n function reducer(state = getInitialState(), action: any): S {\n let caseReducers = [actionsMap[action.type], ...finalActionMatchers.filter(({\n matcher\n }) => matcher(action)).map(({\n reducer\n }) => reducer)];\n\n if (caseReducers.filter(cr => !!cr).length === 0) {\n caseReducers = [finalDefaultCaseReducer];\n }\n\n return caseReducers.reduce((previousState, caseReducer): S => {\n if (caseReducer) {\n if (isDraft(previousState)) {\n // If it's already a draft, we must already be inside a `createNextState` call,\n // likely because this is being wrapped in `createReducer`, `createSlice`, or nested\n // inside an existing draft. It's safe to just pass the draft to the mutator.\n const draft = (previousState as Draft); // We can assume this is already a draft\n\n const result = caseReducer(draft, action);\n\n if (result === undefined) {\n return previousState;\n }\n\n return (result as S);\n } else if (!isDraftable(previousState)) {\n // If state is not draftable (ex: a primitive, such as 0), we want to directly\n // return the caseReducer func and not wrap it with produce.\n const result = caseReducer((previousState as any), action);\n\n if (result === undefined) {\n if (previousState === null) {\n return previousState;\n }\n\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(9) : 'A case reducer on a non-draftable value must not return undefined');\n }\n\n return (result as S);\n } else {\n // @ts-ignore createNextState() produces an Immutable> rather\n // than an Immutable, and TypeScript cannot find out how to reconcile\n // these two types.\n return createNextState(previousState, (draft: Draft) => {\n return caseReducer(draft, action);\n });\n }\n }\n\n return previousState;\n }, state);\n }\n\n reducer.getInitialState = getInitialState;\n return (reducer as ReducerWithInitialState);\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { AbortSignalWithReason } from './types';\nexport const assertFunction: (func: unknown, expected: string) => asserts func is (...args: unknown[]) => unknown = (func: unknown, expected: string) => {\n if (typeof func !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(32) : `${expected} is not a function`);\n }\n};\nexport const noop = () => {};\nexport const catchRejection = (promise: Promise, onError = noop): Promise => {\n promise.catch(onError);\n return promise;\n};\nexport const addAbortSignalListener = (abortSignal: AbortSignal, callback: (evt: Event) => void) => {\n abortSignal.addEventListener('abort', callback, {\n once: true\n });\n return () => abortSignal.removeEventListener('abort', callback);\n};\n/**\r\n * Calls `abortController.abort(reason)` and patches `signal.reason`.\r\n * if it is not supported.\r\n *\r\n * At the time of writing `signal.reason` is available in FF chrome, edge node 17 and deno.\r\n * @param abortController\r\n * @param reason\r\n * @returns\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/reason\r\n */\n\nexport const abortControllerWithReason = (abortController: AbortController, reason: T): void => {\n type Consumer = (val: T) => void;\n const signal = (abortController.signal as AbortSignalWithReason);\n\n if (signal.aborted) {\n return;\n } // Patch `reason` if necessary.\n // - We use defineProperty here because reason is a getter of `AbortSignal.__proto__`.\n // - We need to patch 'reason' before calling `.abort()` because listeners to the 'abort'\n // event are are notified immediately.\n\n\n if (!('reason' in signal)) {\n Object.defineProperty(signal, 'reason', {\n enumerable: true,\n value: reason,\n configurable: true,\n writable: true\n });\n }\n\n ;\n (abortController.abort as Consumer)(reason);\n};","import type { SerializedError } from '@reduxjs/toolkit';\nconst task = 'task';\nconst listener = 'listener';\nconst completed = 'completed';\nconst cancelled = 'cancelled';\n/* TaskAbortError error codes */\n\nexport const taskCancelled = (`task-${cancelled}` as const);\nexport const taskCompleted = (`task-${completed}` as const);\nexport const listenerCancelled = (`${listener}-${cancelled}` as const);\nexport const listenerCompleted = (`${listener}-${completed}` as const);\nexport class TaskAbortError implements SerializedError {\n name = 'TaskAbortError';\n message: string;\n\n constructor(public code: string | undefined) {\n this.message = `${task} ${cancelled} (reason: ${code})`;\n }\n\n}","import { TaskAbortError } from './exceptions';\nimport type { AbortSignalWithReason, TaskResult } from './types';\nimport { addAbortSignalListener, catchRejection, noop } from './utils';\n/**\r\n * Synchronously raises {@link TaskAbortError} if the task tied to the input `signal` has been cancelled.\r\n * @param signal\r\n * @param reason\r\n * @see {TaskAbortError}\r\n */\n\nexport const validateActive = (signal: AbortSignal): void => {\n if (signal.aborted) {\n const {\n reason\n } = (signal as AbortSignalWithReason);\n throw new TaskAbortError(reason);\n }\n};\n/**\r\n * Generates a race between the promise(s) and the AbortSignal\r\n * This avoids `Promise.race()`-related memory leaks:\r\n * https://github.com/nodejs/node/issues/17469#issuecomment-349794909\r\n */\n\nexport function raceWithSignal(signal: AbortSignalWithReason, promise: Promise): Promise {\n let cleanup = noop;\n return new Promise((resolve, reject) => {\n const notifyRejection = () => reject(new TaskAbortError(signal.reason));\n\n if (signal.aborted) {\n notifyRejection();\n return;\n }\n\n cleanup = addAbortSignalListener(signal, notifyRejection);\n promise.finally(() => cleanup()).then(resolve, reject);\n }).finally(() => {\n // after this point, replace `cleanup` with a noop, so there is no reference to `signal` any more\n cleanup = noop;\n });\n}\n/**\r\n * Runs a task and returns promise that resolves to {@link TaskResult}.\r\n * Second argument is an optional `cleanUp` function that always runs after task.\r\n *\r\n * **Note:** `runTask` runs the executor in the next microtask.\r\n * @returns\r\n */\n\nexport const runTask = async (task: () => Promise, cleanUp?: () => void): Promise> => {\n try {\n await Promise.resolve();\n const value = await task();\n return {\n status: 'ok',\n value\n };\n } catch (error: any) {\n return {\n status: error instanceof TaskAbortError ? 'cancelled' : 'rejected',\n error\n };\n } finally {\n cleanUp?.();\n }\n};\n/**\r\n * Given an input `AbortSignal` and a promise returns another promise that resolves\r\n * as soon the input promise is provided or rejects as soon as\r\n * `AbortSignal.abort` is `true`.\r\n * @param signal\r\n * @returns\r\n */\n\nexport const createPause = (signal: AbortSignal) => {\n return (promise: Promise): Promise => {\n return catchRejection(raceWithSignal(signal, promise).then(output => {\n validateActive(signal);\n return output;\n }));\n };\n};\n/**\r\n * Given an input `AbortSignal` and `timeoutMs` returns a promise that resolves\r\n * after `timeoutMs` or rejects as soon as `AbortSignal.abort` is `true`.\r\n * @param signal\r\n * @returns\r\n */\n\nexport const createDelay = (signal: AbortSignal) => {\n const pause = createPause(signal);\n return (timeoutMs: number): Promise => {\n return pause(new Promise(resolve => setTimeout(resolve, timeoutMs)));\n };\n};","import { formatProdErrorMessage as _formatProdErrorMessage3 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { Action, Dispatch, MiddlewareAPI, UnknownAction } from 'redux';\nimport { isAction } from 'redux';\nimport type { ThunkDispatch } from 'redux-thunk';\nimport { createAction } from '../createAction';\nimport { nanoid } from '../nanoid';\nimport type { ListenerMiddleware, ListenerMiddlewareInstance, AddListenerOverloads, AnyListenerPredicate, CreateListenerMiddlewareOptions, TypedAddListener, TypedCreateListenerEntry, FallbackAddListenerOptions, ListenerEntry, ListenerErrorHandler, UnsubscribeListener, TakePattern, ListenerErrorInfo, ForkedTaskExecutor, ForkedTask, TypedRemoveListener, TaskResult, AbortSignalWithReason, UnsubscribeListenerOptions, ForkOptions } from './types';\nimport { abortControllerWithReason, addAbortSignalListener, assertFunction, catchRejection } from './utils';\nimport { listenerCancelled, listenerCompleted, TaskAbortError, taskCancelled, taskCompleted } from './exceptions';\nimport { runTask, validateActive, createPause, createDelay, raceWithSignal } from './task';\nimport { find } from '../utils';\nexport { TaskAbortError } from './exceptions';\nexport type { ListenerEffect, ListenerMiddleware, ListenerEffectAPI, ListenerMiddlewareInstance, CreateListenerMiddlewareOptions, ListenerErrorHandler, TypedStartListening, TypedAddListener, TypedStopListening, TypedRemoveListener, UnsubscribeListener, UnsubscribeListenerOptions, ForkedTaskExecutor, ForkedTask, ForkedTaskAPI, AsyncTaskExecutor, SyncTaskExecutor, TaskCancelled, TaskRejected, TaskResolved, TaskResult } from './types'; //Overly-aggressive byte-shaving\n\nconst {\n assign\n} = Object;\n/**\r\n * @internal\r\n */\n\nconst INTERNAL_NIL_TOKEN = ({} as const);\nconst alm = ('listenerMiddleware' as const);\n\nconst createFork = (parentAbortSignal: AbortSignalWithReason, parentBlockingPromises: Promise[]) => {\n const linkControllers = (controller: AbortController) => addAbortSignalListener(parentAbortSignal, () => abortControllerWithReason(controller, parentAbortSignal.reason));\n\n return (taskExecutor: ForkedTaskExecutor, opts?: ForkOptions): ForkedTask => {\n assertFunction(taskExecutor, 'taskExecutor');\n const childAbortController = new AbortController();\n linkControllers(childAbortController);\n const result = runTask(async (): Promise => {\n validateActive(parentAbortSignal);\n validateActive(childAbortController.signal);\n const result = (await taskExecutor({\n pause: createPause(childAbortController.signal),\n delay: createDelay(childAbortController.signal),\n signal: childAbortController.signal\n }) as T);\n validateActive(childAbortController.signal);\n return result;\n }, () => abortControllerWithReason(childAbortController, taskCompleted));\n\n if (opts?.autoJoin) {\n parentBlockingPromises.push(result);\n }\n\n return {\n result: createPause>(parentAbortSignal)(result),\n\n cancel() {\n abortControllerWithReason(childAbortController, taskCancelled);\n }\n\n };\n };\n};\n\nconst createTakePattern = (startListening: AddListenerOverloads, signal: AbortSignal): TakePattern => {\n /**\r\n * A function that takes a ListenerPredicate and an optional timeout,\r\n * and resolves when either the predicate returns `true` based on an action\r\n * state combination or when the timeout expires.\r\n * If the parent listener is canceled while waiting, this will throw a\r\n * TaskAbortError.\r\n */\n const take = async

,>(predicate: P, timeout: number | undefined) => {\n validateActive(signal); // Placeholder unsubscribe function until the listener is added\n\n let unsubscribe: UnsubscribeListener = () => {};\n\n const tuplePromise = new Promise<[Action, S, S]>((resolve, reject) => {\n // Inside the Promise, we synchronously add the listener.\n let stopListening = startListening({\n predicate: (predicate as any),\n effect: (action, listenerApi): void => {\n // One-shot listener that cleans up as soon as the predicate passes\n listenerApi.unsubscribe(); // Resolve the promise with the same arguments the predicate saw\n\n resolve([action, listenerApi.getState(), listenerApi.getOriginalState()]);\n }\n });\n\n unsubscribe = () => {\n stopListening();\n reject();\n };\n });\n const promises: (Promise | Promise<[Action, S, S]>)[] = [tuplePromise];\n\n if (timeout != null) {\n promises.push(new Promise(resolve => setTimeout(resolve, timeout, null)));\n }\n\n try {\n const output = await raceWithSignal(signal, Promise.race(promises));\n validateActive(signal);\n return output;\n } finally {\n // Always clean up the listener\n unsubscribe();\n }\n };\n\n return (((predicate: AnyListenerPredicate, timeout: number | undefined) => catchRejection(take(predicate, timeout))) as TakePattern);\n};\n\nconst getListenerEntryPropsFrom = (options: FallbackAddListenerOptions) => {\n let {\n type,\n actionCreator,\n matcher,\n predicate,\n effect\n } = options;\n\n if (type) {\n predicate = createAction(type).match;\n } else if (actionCreator) {\n type = actionCreator!.type;\n predicate = actionCreator.match;\n } else if (matcher) {\n predicate = matcher;\n } else if (predicate) {// pass\n } else {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(21) : 'Creating or removing a listener requires one of the known fields for matching an action');\n }\n\n assertFunction(effect, 'options.listener');\n return {\n predicate,\n type,\n effect\n };\n};\n/** Accepts the possible options for creating a listener, and returns a formatted listener entry */\n\n\nexport const createListenerEntry: TypedCreateListenerEntry = (options: FallbackAddListenerOptions) => {\n const {\n type,\n predicate,\n effect\n } = getListenerEntryPropsFrom(options);\n const id = nanoid();\n const entry: ListenerEntry = {\n id,\n effect,\n type,\n predicate,\n pending: new Set(),\n unsubscribe: () => {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(22) : 'Unsubscribe not initialized');\n }\n };\n return entry;\n};\n\nconst cancelActiveListeners = (entry: ListenerEntry>) => {\n entry.pending.forEach(controller => {\n abortControllerWithReason(controller, listenerCancelled);\n });\n};\n\nconst createClearListenerMiddleware = (listenerMap: Map) => {\n return () => {\n listenerMap.forEach(cancelActiveListeners);\n listenerMap.clear();\n };\n};\n/**\r\n * Safely reports errors to the `errorHandler` provided.\r\n * Errors that occur inside `errorHandler` are notified in a new task.\r\n * Inspired by [rxjs reportUnhandledError](https://github.com/ReactiveX/rxjs/blob/6fafcf53dc9e557439b25debaeadfd224b245a66/src/internal/util/reportUnhandledError.ts)\r\n * @param errorHandler\r\n * @param errorToNotify\r\n */\n\n\nconst safelyNotifyError = (errorHandler: ListenerErrorHandler, errorToNotify: unknown, errorInfo: ListenerErrorInfo): void => {\n try {\n errorHandler(errorToNotify, errorInfo);\n } catch (errorHandlerError) {\n // We cannot let an error raised here block the listener queue.\n // The error raised here will be picked up by `window.onerror`, `process.on('error')` etc...\n setTimeout(() => {\n throw errorHandlerError;\n }, 0);\n }\n};\n/**\r\n * @public\r\n */\n\n\nexport const addListener = (createAction(`${alm}/add`) as TypedAddListener);\n/**\r\n * @public\r\n */\n\nexport const clearAllListeners = createAction(`${alm}/removeAll`);\n/**\r\n * @public\r\n */\n\nexport const removeListener = (createAction(`${alm}/remove`) as TypedRemoveListener);\n\nconst defaultErrorHandler: ListenerErrorHandler = (...args: unknown[]) => {\n console.error(`${alm}/error`, ...args);\n};\n/**\r\n * @public\r\n */\n\n\nexport function createListenerMiddleware = ThunkDispatch, ExtraArgument = unknown>(middlewareOptions: CreateListenerMiddlewareOptions = {}) {\n const listenerMap = new Map();\n const {\n extra,\n onError = defaultErrorHandler\n } = middlewareOptions;\n assertFunction(onError, 'onError');\n\n const insertEntry = (entry: ListenerEntry) => {\n entry.unsubscribe = () => listenerMap.delete(entry!.id);\n\n listenerMap.set(entry.id, entry);\n return (cancelOptions?: UnsubscribeListenerOptions) => {\n entry.unsubscribe();\n\n if (cancelOptions?.cancelActive) {\n cancelActiveListeners(entry);\n }\n };\n };\n\n const startListening = (options: FallbackAddListenerOptions) => {\n let entry = find(Array.from(listenerMap.values()), existingEntry => existingEntry.effect === options.effect);\n\n if (!entry) {\n entry = createListenerEntry((options as any));\n }\n\n return insertEntry(entry);\n };\n\n const stopListening = (options: FallbackAddListenerOptions & UnsubscribeListenerOptions): boolean => {\n const {\n type,\n effect,\n predicate\n } = getListenerEntryPropsFrom(options);\n const entry = find(Array.from(listenerMap.values()), entry => {\n const matchPredicateOrType = typeof type === 'string' ? entry.type === type : entry.predicate === predicate;\n return matchPredicateOrType && entry.effect === effect;\n });\n\n if (entry) {\n entry.unsubscribe();\n\n if (options.cancelActive) {\n cancelActiveListeners(entry);\n }\n }\n\n return !!entry;\n };\n\n const notifyListener = async (entry: ListenerEntry>, action: unknown, api: MiddlewareAPI, getOriginalState: () => S) => {\n const internalTaskController = new AbortController();\n const take = createTakePattern(startListening, internalTaskController.signal);\n const autoJoinPromises: Promise[] = [];\n\n try {\n entry.pending.add(internalTaskController);\n await Promise.resolve(entry.effect(action, // Use assign() rather than ... to avoid extra helper functions added to bundle\n assign({}, api, {\n getOriginalState,\n condition: (predicate: AnyListenerPredicate, timeout?: number) => take(predicate, timeout).then(Boolean),\n take,\n delay: createDelay(internalTaskController.signal),\n pause: createPause(internalTaskController.signal),\n extra,\n signal: internalTaskController.signal,\n fork: createFork(internalTaskController.signal, autoJoinPromises),\n unsubscribe: entry.unsubscribe,\n subscribe: () => {\n listenerMap.set(entry.id, entry);\n },\n cancelActiveListeners: () => {\n entry.pending.forEach((controller, _, set) => {\n if (controller !== internalTaskController) {\n abortControllerWithReason(controller, listenerCancelled);\n set.delete(controller);\n }\n });\n },\n cancel: () => {\n abortControllerWithReason(internalTaskController, listenerCancelled);\n entry.pending.delete(internalTaskController);\n },\n throwIfCancelled: () => {\n validateActive(internalTaskController.signal);\n }\n })));\n } catch (listenerError) {\n if (!(listenerError instanceof TaskAbortError)) {\n safelyNotifyError(onError, listenerError, {\n raisedBy: 'effect'\n });\n }\n } finally {\n await Promise.allSettled(autoJoinPromises);\n abortControllerWithReason(internalTaskController, listenerCompleted); // Notify that the task has completed\n\n entry.pending.delete(internalTaskController);\n }\n };\n\n const clearListenerMiddleware = createClearListenerMiddleware(listenerMap);\n\n const middleware: ListenerMiddleware = api => next => action => {\n if (!isAction(action)) {\n // we only want to notify listeners for action objects\n return next(action);\n }\n\n if (addListener.match(action)) {\n return startListening(action.payload);\n }\n\n if (clearAllListeners.match(action)) {\n clearListenerMiddleware();\n return;\n }\n\n if (removeListener.match(action)) {\n return stopListening(action.payload);\n } // Need to get this state _before_ the reducer processes the action\n\n\n let originalState: S | typeof INTERNAL_NIL_TOKEN = api.getState(); // `getOriginalState` can only be called synchronously.\n // @see https://github.com/reduxjs/redux-toolkit/discussions/1648#discussioncomment-1932820\n\n const getOriginalState = (): S => {\n if (originalState === INTERNAL_NIL_TOKEN) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(23) : `${alm}: getOriginalState can only be called synchronously`);\n }\n\n return (originalState as S);\n };\n\n let result: unknown;\n\n try {\n // Actually forward the action to the reducer before we handle listeners\n result = next(action);\n\n if (listenerMap.size > 0) {\n let currentState = api.getState(); // Work around ESBuild+TS transpilation issue\n\n const listenerEntries = Array.from(listenerMap.values());\n\n for (let entry of listenerEntries) {\n let runListener = false;\n\n try {\n runListener = entry.predicate(action, currentState, originalState);\n } catch (predicateError) {\n runListener = false;\n safelyNotifyError(onError, predicateError, {\n raisedBy: 'predicate'\n });\n }\n\n if (!runListener) {\n continue;\n }\n\n notifyListener(entry, action, api, getOriginalState);\n }\n }\n } finally {\n // Remove `originalState` store from this scope.\n originalState = INTERNAL_NIL_TOKEN;\n }\n\n return result;\n };\n\n return ({\n middleware,\n startListening,\n stopListening,\n clearListeners: clearListenerMiddleware\n } as ListenerMiddlewareInstance);\n}","import { formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { UnknownAction, Reducer, StateFromReducersMapObject } from 'redux';\nimport { combineReducers } from 'redux';\nimport { nanoid } from './nanoid';\nimport type { Id, NonUndefined, Tail, UnionToIntersection, WithOptionalProp } from './tsHelpers';\nimport { emplace } from './utils';\ntype SliceLike = {\n reducerPath: ReducerPath;\n reducer: Reducer;\n};\ntype AnySliceLike = SliceLike;\ntype SliceLikeReducerPath = A extends SliceLike ? ReducerPath : never;\ntype SliceLikeState = A extends SliceLike ? State : never;\nexport type WithSlice = { [Path in SliceLikeReducerPath]: SliceLikeState };\ntype ReducerMap = Record;\ntype ExistingSliceLike = { [ReducerPath in keyof DeclaredState]: SliceLike> }[keyof DeclaredState];\nexport type InjectConfig = {\n /**\r\n * Allow replacing reducer with a different reference. Normally, an error will be thrown if a different reducer instance to the one already injected is used.\r\n */\n overrideExisting?: boolean;\n};\n/**\r\n * A reducer that allows for slices/reducers to be injected after initialisation.\r\n */\n\nexport interface CombinedSliceReducer extends Reducer> {\n /**\r\n * Provide a type for slices that will be injected lazily.\r\n *\r\n * One way to do this would be with interface merging:\r\n * ```ts\r\n *\r\n * export interface LazyLoadedSlices {}\r\n *\r\n * export const rootReducer = combineSlices(stringSlice).withLazyLoadedSlices();\r\n *\r\n * // elsewhere\r\n *\r\n * declare module './reducer' {\r\n * export interface LazyLoadedSlices extends WithSlice {}\r\n * }\r\n *\r\n * const withBoolean = rootReducer.inject(booleanSlice);\r\n *\r\n * // elsewhere again\r\n *\r\n * declare module './reducer' {\r\n * export interface LazyLoadedSlices {\r\n * customName: CustomState\r\n * }\r\n * }\r\n *\r\n * const withCustom = rootReducer.inject({ reducerPath: \"customName\", reducer: customSlice.reducer })\r\n * ```\r\n */\n withLazyLoadedSlices(): CombinedSliceReducer>>;\n /**\r\n * Inject a slice.\r\n *\r\n * Accepts an individual slice, RTKQ API instance, or a \"slice-like\" { reducerPath, reducer } object.\r\n *\r\n * ```ts\r\n * rootReducer.inject(booleanSlice)\r\n * rootReducer.inject(baseApi)\r\n * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })\r\n * ```\r\n *\r\n */\n\n inject>>(slice: Sl, config?: InjectConfig): CombinedSliceReducer>>;\n /**\r\n * Inject a slice.\r\n *\r\n * Accepts an individual slice, RTKQ API instance, or a \"slice-like\" { reducerPath, reducer } object.\r\n *\r\n * ```ts\r\n * rootReducer.inject(booleanSlice)\r\n * rootReducer.inject(baseApi)\r\n * rootReducer.inject({ reducerPath: 'boolean' as const, reducer: newReducer }, { overrideExisting: true })\r\n * ```\r\n *\r\n */\n\n inject(slice: SliceLike, config?: InjectConfig): CombinedSliceReducer>>>;\n /**\r\n * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\r\n *\r\n * ```ts\r\n * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\r\n * // ^? boolean | undefined\r\n *\r\n * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\r\n * // if action hasn't been dispatched since slice was injected, this would usually be undefined\r\n * // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\r\n * return state.boolean;\r\n * // ^? boolean\r\n * })\r\n * ```\r\n *\r\n * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.\r\n *\r\n * ```ts\r\n *\r\n * export interface LazyLoadedSlices {};\r\n *\r\n * export const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices();\r\n *\r\n * export const rootReducer = combineSlices({ inner: innerReducer });\r\n *\r\n * export type RootState = ReturnType;\r\n *\r\n * // elsewhere\r\n *\r\n * declare module \"./reducer.ts\" {\r\n * export interface LazyLoadedSlices extends WithSlice {}\r\n * }\r\n *\r\n * const withBool = innerReducer.inject(booleanSlice);\r\n *\r\n * const selectBoolean = withBool.selector(\r\n * (state) => state.boolean,\r\n * (rootState: RootState) => state.inner\r\n * );\r\n * // now expects to be passed RootState instead of innerReducer state\r\n *\r\n * ```\r\n *\r\n * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\r\n *\r\n * ```ts\r\n * const injectedReducer = rootReducer.inject(booleanSlice);\r\n * const selectBoolean = injectedReducer.selector((state) => {\r\n * console.log(injectedReducer.selector.original(state).boolean) // possibly undefined\r\n * return state.boolean\r\n * })\r\n * ```\r\n */\n\n selector: {\n /**\r\n * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\r\n *\r\n * ```ts\r\n * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\r\n * // ^? boolean | undefined\r\n *\r\n * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\r\n * // if action hasn't been dispatched since slice was injected, this would usually be undefined\r\n * // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\r\n * return state.boolean;\r\n * // ^? boolean\r\n * })\r\n * ```\r\n *\r\n * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\r\n *\r\n * ```ts\r\n * const injectedReducer = rootReducer.inject(booleanSlice);\r\n * const selectBoolean = injectedReducer.selector((state) => {\r\n * console.log(injectedReducer.selector.original(state).boolean) // undefined\r\n * return state.boolean\r\n * })\r\n * ```\r\n */\n unknown>(selectorFn: Selector): (state: WithOptionalProp[0], Exclude>, ...args: Tail>) => ReturnType;\n /**\r\n * Create a selector that guarantees that the slices injected will have a defined value when selector is run.\r\n *\r\n * ```ts\r\n * const selectBooleanWithoutInjection = (state: RootState) => state.boolean;\r\n * // ^? boolean | undefined\r\n *\r\n * const selectBoolean = rootReducer.inject(booleanSlice).selector((state) => {\r\n * // if action hasn't been dispatched since slice was injected, this would usually be undefined\r\n * // however selector() uses a Proxy around the first parameter to ensure that it evaluates to the initial state instead, if undefined\r\n * return state.boolean;\r\n * // ^? boolean\r\n * })\r\n * ```\r\n *\r\n * If the reducer is nested inside the root state, a selectState callback can be passed to retrieve the reducer's state.\r\n *\r\n * ```ts\r\n *\r\n * interface LazyLoadedSlices {};\r\n *\r\n * const innerReducer = combineSlices(stringSlice).withLazyLoadedSlices();\r\n *\r\n * const rootReducer = combineSlices({ inner: innerReducer });\r\n *\r\n * type RootState = ReturnType;\r\n *\r\n * // elsewhere\r\n *\r\n * declare module \"./reducer.ts\" {\r\n * interface LazyLoadedSlices extends WithSlice {}\r\n * }\r\n *\r\n * const withBool = innerReducer.inject(booleanSlice);\r\n *\r\n * const selectBoolean = withBool.selector(\r\n * (state) => state.boolean,\r\n * (rootState: RootState) => state.inner\r\n * );\r\n * // now expects to be passed RootState instead of innerReducer state\r\n *\r\n * ```\r\n *\r\n * Value passed to selectorFn will be a Proxy - use selector.original(proxy) to get original state value (useful for debugging)\r\n *\r\n * ```ts\r\n * const injectedReducer = rootReducer.inject(booleanSlice);\r\n * const selectBoolean = injectedReducer.selector((state) => {\r\n * console.log(injectedReducer.selector.original(state).boolean) // possibly undefined\r\n * return state.boolean\r\n * })\r\n * ```\r\n */\n\n unknown, RootState>(selectorFn: Selector, selectState: (rootState: RootState, ...args: Tail>) => WithOptionalProp[0], Exclude>): (state: RootState, ...args: Tail>) => ReturnType;\n /**\r\n * Returns the unproxied state. Useful for debugging.\r\n * @param state state Proxy, that ensures injected reducers have value\r\n * @returns original, unproxied state\r\n * @throws if value passed is not a state Proxy\r\n */\n\n original: (state: DeclaredState) => InitialState & Partial;\n };\n}\ntype InitialState> = UnionToIntersection : StateFromReducersMapObject : never>;\n\nconst isSliceLike = (maybeSliceLike: AnySliceLike | ReducerMap): maybeSliceLike is AnySliceLike => 'reducerPath' in maybeSliceLike && typeof maybeSliceLike.reducerPath === 'string';\n\nconst getReducers = (slices: Array) => slices.flatMap(sliceOrMap => isSliceLike(sliceOrMap) ? [([sliceOrMap.reducerPath, sliceOrMap.reducer] as const)] : Object.entries(sliceOrMap));\n\nconst ORIGINAL_STATE = Symbol.for('rtk-state-proxy-original');\n\nconst isStateProxy = (value: any) => !!value && !!value[ORIGINAL_STATE];\n\nconst stateProxyMap = new WeakMap();\n\nconst createStateProxy = (state: State, reducerMap: Partial>) => (emplace(stateProxyMap, state, {\n insert: () => new Proxy(state, {\n get: (target, prop, receiver) => {\n if (prop === ORIGINAL_STATE) return target;\n const result = Reflect.get(target, prop, receiver);\n\n if (typeof result === 'undefined') {\n const reducer = reducerMap[prop.toString()];\n\n if (reducer) {\n // ensure action type is random, to prevent reducer treating it differently\n const reducerResult = reducer(undefined, {\n type: nanoid()\n });\n\n if (typeof reducerResult === 'undefined') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(24) : `The slice reducer for key \"${prop.toString()}\" returned undefined when called for selector(). ` + `If the state passed to the reducer is undefined, you must ` + `explicitly return the initial state. The initial state may ` + `not be undefined. If you don't want to set a value for this reducer, ` + `you can use null instead of undefined.`);\n }\n\n return reducerResult;\n }\n }\n\n return result;\n }\n })\n}) as State);\n\nconst original = (state: any) => {\n if (!isStateProxy(state)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(25) : 'original must be used on state Proxy');\n }\n\n return state[ORIGINAL_STATE];\n};\n\nexport function combineSlices]>(...slices: Slices): CombinedSliceReducer>> {\n const reducerMap = Object.fromEntries(getReducers(slices));\n\n const getReducer = () => combineReducers(reducerMap);\n\n let reducer = getReducer();\n\n function combinedReducer(state: Record, action: UnknownAction) {\n return reducer(state, action);\n }\n\n combinedReducer.withLazyLoadedSlices = () => combinedReducer;\n\n const inject = (slice: AnySliceLike, config: InjectConfig = {}): typeof combinedReducer => {\n const {\n reducerPath,\n reducer: reducerToInject\n } = slice;\n const currentReducer = reducerMap[reducerPath];\n\n if (!config.overrideExisting && currentReducer && currentReducer !== reducerToInject) {\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'development') {\n console.error(`called \\`inject\\` to override already-existing reducer ${reducerPath} without specifying \\`overrideExisting: true\\``);\n }\n\n return combinedReducer;\n }\n\n reducerMap[reducerPath] = reducerToInject;\n reducer = getReducer();\n return combinedReducer;\n };\n\n const selector = Object.assign(function makeSelector(selectorFn: (state: State, ...args: Args) => any, selectState?: (rootState: RootState, ...args: Args) => State) {\n return function selector(state: State, ...args: Args) {\n return selectorFn(createStateProxy(selectState ? selectState((state as any), ...args) : state, reducerMap), ...args);\n };\n }, {\n original\n });\n return (Object.assign(combinedReducer, {\n inject,\n selector\n }) as any);\n}","/**\r\n * Adapted from React: https://github.com/facebook/react/blob/master/packages/shared/formatProdErrorMessage.js\r\n *\r\n * Do not require this module directly! Use normal throw error calls. These messages will be replaced with error codes\r\n * during build.\r\n * @param {number} code\r\n */\nexport function formatProdErrorMessage(code: number) {\n return `Minified Redux Toolkit error #${code}; visit https://redux-toolkit.js.org/Errors?code=${code} for the full message or ` + 'use the non-minified dev environment for full errors. ';\n}","import { createSlice, type PayloadAction } from '@reduxjs/toolkit'\r\n\r\n//\r\n// Virtualization is done on each axis individually. \r\n// Synchronization (NOT IMPLEMENTED):\r\n// - If 2+ axes are to be synced and have the same cellSizePx (e.g., \r\n// horizontal sync between logo, barplot and main msa viewport), they \r\n// should use the same \"IGenericAxis\" state. \r\n// - If 2+ axes are to be synced and and have different cellSizePx (e.g.,\r\n// vertical axis of minimap and main msa viewport), then each should\r\n// each have their own \"IGenericVirtualization\" states. In the future\r\n// this could be added as separate axes and tracked in the virtualization\r\n// but edge cases make it difficult to synchronize algorithmically (see\r\n// UPDATE below - I tried and ran into issues).\r\n//\r\nexport interface IGenericVirtualizationEditable {\r\n //ONLY SET BY CALLER - used to enforce only a single controller \r\n //container is used for initialization and sizing\r\n controllerContainerId: string; \r\n\r\n //ONLY SET BY CALLER\r\n cellCount: number;\r\n\r\n //ONLY SET BY CALLER - the div / viewport size\r\n containerSizePx: number;\r\n\r\n //ONLY SET BY CALLER - the width of each column or height of each row\r\n cellSizePx: number;\r\n\r\n //CALCULATED AND SET BY CALLER [will be clamped if out of bounds] \r\n worldOffsetPx: number; \r\n\r\n //CALCULATED FROM CALLER-PROVIDED PIXEL OFFSET\r\n hoveredEvent?: {\r\n cellIdx: number;\r\n containerOffsetCellStartPx: number;\r\n containerOffsetCellMiddlePx: number;\r\n containerOffsetCellEndPx: number;\r\n };\r\n}\r\n\r\ntype CalculatedOffsetsType = ReturnType;\r\nexport interface IGenericVirtualizationComplete extends \r\n IGenericVirtualizationEditable, \r\n CalculatedOffsetsType {}\r\n\r\nexport interface IGenericVirtualizations {\r\n [virtualizationUUID: string]: IGenericVirtualizationComplete\r\n}\r\n\r\n//\r\n// Functions for mutating state based on update requests\r\n//\r\n//const updateOffsets = (\r\n// virtualization: IGenericVirtualization, \r\n// baseOffsetsOnAxis?: IGenericAxis, //adjust other axes to this one\r\n//) => {\r\n// const {\r\n// cellCount,\r\n// axes\r\n// } = virtualization;\r\n//\r\n// //default to the first axis if there is nothing being (this should only\r\n// //happens at initialization)\r\n// baseOffsetsOnAxis = baseOffsetsOnAxis ? baseOffsetsOnAxis : axes[0];\r\n//\r\n// //Interpolate between different potential scales. The scales go from zero to\r\n// //the maxOffset for each virtualized axis\r\n// const updatedAxisWorldSize = cellCount * baseOffsetsOnAxis.cellSizePx;\r\n//\r\n// //compute max amount world can be offset - clamp to zero if world smaller than container\r\n// let updatedAxisMaxOffset = updatedAxisWorldSize - baseOffsetsOnAxis.containerSizePx;\r\n// updatedAxisMaxOffset = updatedAxisMaxOffset >= 0 \r\n// ? updatedAxisMaxOffset \r\n// : 0;\r\n// \r\n// //clamp update if necessary\r\n// baseOffsetsOnAxis.worldOffsetPx = baseOffsetsOnAxis.worldOffsetPx < 0\r\n// ? 0\r\n// : baseOffsetsOnAxis.worldOffsetPx > updatedAxisMaxOffset\r\n// ? updatedAxisMaxOffset\r\n// : baseOffsetsOnAxis.worldOffsetPx;\r\n// \r\n// //\r\n// //\r\n// //\r\n//\r\n// //\r\n// // set offsets on all virtualized axes\r\n// // UPDATE: The problem with multiple axes is that if the updating axis fits \r\n// // into the container as is, then the clamped \"updatedAxisMaxOffset\" \r\n// // becomes zero and it is unclear how to deal with interpolation with \r\n// // other axes. Switching to a single axis for now - interpolation will\r\n// // then be done custom in any axis that need synchronization and have a\r\n// // different cellSsize.\r\n// //\r\n//\r\n// for (const ax of axes){ //forEach has incorrect typescript error on updatedAxis \r\n// const axWorldSizePx = cellCount * ax.cellSizePx;\r\n// const axMaxOffset = axWorldSizePx - ax.containerSizePx;\r\n//\r\n// /***********************************\r\n// * interpolate between scales [0, updatedAxisMaxOffset] and [0, axMaxOffset]\r\n// * y = y1 + ((x – x1)/(x2 - x1) * (y2 - y1))\r\n// * where: \r\n// * x1 and y1 = 0\r\n// * x = updatedAxis.worldOffsetPx\r\n// * x2 = updatedAxisMaxOffset\r\n// * y2 = axMaxOffset\r\n// * y = 0 + ((updatedAxis.worldOffsetPx - 0)/(updatedAxisMaxOffset-0)) * axMaxOffset\r\n// */\r\n// ax.worldOffsetPx = (baseOffsetsOnAxis.worldOffsetPx / updatedAxisMaxOffset) * axMaxOffset;\r\n// //TODO: is there a need to clamp? I don't think so since we clamp the top above..\r\n// }\r\n//}\r\n\r\n\r\n\r\nconst calculateOffsets = (\r\n props: IGenericVirtualizationEditable\r\n) => {\r\n const {\r\n cellCount,\r\n cellSizePx,\r\n containerSizePx,\r\n worldOffsetPx\r\n } = props;\r\n\r\n //initialize return object assuming render fully fits into viewport container\r\n const toReturn = {\r\n\r\n //\r\n //FIXED PROPERTIES\r\n //\r\n\r\n //for virtualizaitons that fully render all ids and then shift\r\n //within the viewport\r\n worldOffsetPx: worldOffsetPx, //FIXED\r\n\r\n //the size of a full render (if all cells are rendered)\r\n worldRenderSizePx: cellCount * cellSizePx, //FIXED\r\n\r\n //\r\n //PROPERTIES ADJUSTED BELOW AS NEEDED\r\n //\r\n\r\n //the first and last idx to render //adjusted below\r\n firstIdxToRender: 0,\r\n lastIdxToRender: cellCount-1,\r\n numIdxsToRender: cellCount,\r\n\r\n //for virtualizaitons that render only the idxs in the viewport container\r\n offsetForRenderingIdxsOnly: 0, //adjusted below\r\n\r\n //the rendered size if everything doesn't fit into the container viewport\r\n //later this is adjusted to equal:\r\n // (lastIdxToRender-firstIdxToRender+1) * cellSize\r\n subsetRenderSizePx: cellCount * cellSizePx,\r\n }\r\n \r\n if (toReturn.worldRenderSizePx > containerSizePx){ \r\n //the viewport isn't large enough to fit the entire virtualization \r\n //without offsetting - do some math\r\n const startInMiddleOfCell = worldOffsetPx % cellSizePx !== 0;\r\n const endInMiddleOfCell = \r\n (worldOffsetPx + containerSizePx) % cellSizePx !== 0;\r\n\r\n let firstRenderedCellIdx = Math.ceil(worldOffsetPx / cellSizePx);\r\n let numCellsToRender = Math.floor(containerSizePx / cellSizePx);\r\n if (startInMiddleOfCell && (firstRenderedCellIdx - 1) >= 0) {\r\n numCellsToRender += 1;\r\n firstRenderedCellIdx -= 1;\r\n }\r\n if (\r\n endInMiddleOfCell && (firstRenderedCellIdx + numCellsToRender + 1) < \r\n cellCount\r\n ) {\r\n numCellsToRender += 1;\r\n }\r\n\r\n //edge case: screen height < 1 line or width < 1 column. Show at least one in that case.\r\n numCellsToRender = (\r\n (numCellsToRender < 1) && (cellCount > 0) \r\n )\r\n ? 1 \r\n : numCellsToRender;\r\n\r\n //update return object\r\n toReturn.offsetForRenderingIdxsOnly = -( //wrong?\r\n worldOffsetPx % cellSizePx\r\n );\r\n toReturn.subsetRenderSizePx = cellSizePx * numCellsToRender;\r\n toReturn.firstIdxToRender = firstRenderedCellIdx;\r\n toReturn.lastIdxToRender = firstRenderedCellIdx+numCellsToRender-1;\r\n toReturn.numIdxsToRender = numCellsToRender;\r\n }\r\n return toReturn;\r\n}\r\n\r\n//\r\n// Functions for mutating state based on update requests\r\n//\r\n\r\n//called at each update to the main virtualization\r\nconst checkAndFixWorldOffset = (\r\n virtualization: IGenericVirtualizationComplete\r\n) => {\r\n const {\r\n cellCount,\r\n cellSizePx,\r\n containerSizePx,\r\n worldOffsetPx\r\n } = virtualization;\r\n const axisWorldSize = cellCount * cellSizePx;\r\n\r\n //compute max amount world can be offset - clamp to zero if world smaller \r\n //than container\r\n let axisMaxOffset = axisWorldSize - containerSizePx;\r\n axisMaxOffset = axisMaxOffset >= 0 \r\n ? axisMaxOffset \r\n : 0;\r\n \r\n //clamp update if necessary\r\n virtualization.worldOffsetPx = worldOffsetPx < 0\r\n ? 0\r\n : worldOffsetPx > axisMaxOffset\r\n ? axisMaxOffset\r\n : worldOffsetPx;\r\n \r\n //attach offsets\r\n const offsets = calculateOffsets(virtualization);\r\n virtualization.worldOffsetPx = offsets.worldOffsetPx;\r\n virtualization.worldRenderSizePx = offsets.worldRenderSizePx;\r\n virtualization.firstIdxToRender = offsets.firstIdxToRender;\r\n virtualization.lastIdxToRender = offsets.lastIdxToRender;\r\n virtualization.numIdxsToRender = offsets.numIdxsToRender;\r\n virtualization.offsetForRenderingIdxsOnly = offsets.offsetForRenderingIdxsOnly;\r\n virtualization.subsetRenderSizePx = offsets.subsetRenderSizePx;\r\n}\r\n\r\n\r\n//\r\n// define the reducers\r\n//\r\nconst genericReducers = {\r\n\r\n //\r\n //initialization of a new alignment\r\n //\r\n initializeNewVirtualization: (\r\n state: IGenericVirtualizations,\r\n action: PayloadAction<{\r\n virtualizationId: string;\r\n virtualization: IGenericVirtualizationEditable;\r\n }>\r\n ) => {\r\n const {\r\n virtualizationId,\r\n virtualization\r\n } = action.payload;\r\n\r\n const newCompleteVirtualization = {\r\n ...virtualization,\r\n ...calculateOffsets(virtualization)\r\n };\r\n\r\n state[virtualizationId] = newCompleteVirtualization;\r\n },\r\n\r\n //\r\n // update cell (row/column) count\r\n //\r\n setCellCount: (\r\n state: IGenericVirtualizations,\r\n action: PayloadAction<{ \r\n virtualizationId: string;\r\n cellCount: number;\r\n }>\r\n ) => {\r\n const {\r\n virtualizationId,\r\n cellCount\r\n } = action.payload;\r\n\r\n if(state[virtualizationId].cellCount !== cellCount){\r\n state[virtualizationId].cellCount = cellCount;\r\n checkAndFixWorldOffset( state[virtualizationId] );\r\n }\r\n },\r\n\r\n //\r\n // update cell size (height/width)\r\n //\r\n setCellSize: (\r\n state: IGenericVirtualizations,\r\n action: PayloadAction<{ \r\n virtualizationId: string;\r\n cellSizePx: number;\r\n }>\r\n ) => {\r\n const {\r\n cellSizePx,\r\n virtualizationId,\r\n } = action.payload;\r\n\r\n if(state[virtualizationId].cellSizePx !== cellSizePx){\r\n //recalculate world offset keep it in the same position as it was\r\n //originally even though the cell size is changing\r\n state[virtualizationId].worldOffsetPx = \r\n state[virtualizationId].worldOffsetPx / //original offset\r\n state[virtualizationId].cellSizePx * //put into \"cell space\"\r\n cellSizePx; //update to new cell size\r\n\r\n state[virtualizationId].cellSizePx = cellSizePx;\r\n checkAndFixWorldOffset(state[virtualizationId]);\r\n }\r\n },\r\n\r\n //\r\n // update cell size (height/width)\r\n //\r\n setContainerSize: (\r\n state: IGenericVirtualizations,\r\n action: PayloadAction<{ \r\n virtualizationId: string;\r\n containerSizePx: number;\r\n }>\r\n ) => {\r\n const {\r\n virtualizationId,\r\n containerSizePx,\r\n } = action.payload;\r\n\r\n if(state[virtualizationId].containerSizePx !== containerSizePx){\r\n state[virtualizationId].containerSizePx = containerSizePx;\r\n checkAndFixWorldOffset(state[virtualizationId]);\r\n }\r\n },\r\n\r\n //\r\n // update cell size (height/width)\r\n //\r\n setWorldOffset: (\r\n state: IGenericVirtualizations,\r\n action: PayloadAction<{ \r\n virtualizationId: string;\r\n worldOffsetPx: number;\r\n }>\r\n ) => {\r\n const {\r\n virtualizationId,\r\n worldOffsetPx,\r\n } = action.payload;\r\n if(state[virtualizationId].worldOffsetPx !== worldOffsetPx){\r\n state[virtualizationId].worldOffsetPx = worldOffsetPx;\r\n checkAndFixWorldOffset(state[virtualizationId]);\r\n }\r\n },\r\n\r\n //\r\n //\r\n //\r\n setHoveredOffset: (\r\n state: IGenericVirtualizations,\r\n action: PayloadAction<{\r\n virtualizationId: string;\r\n mouseContainerOffsetPx?: number;\r\n }>\r\n ) => {\r\n const {\r\n virtualizationId,\r\n mouseContainerOffsetPx,\r\n } = action.payload;\r\n\r\n if(mouseContainerOffsetPx === undefined){\r\n state[virtualizationId].hoveredEvent = undefined;\r\n }\r\n else{ //compute what cell the offset refers to\r\n const {\r\n offsetForRenderingIdxsOnly,\r\n firstIdxToRender,\r\n lastIdxToRender,\r\n cellSizePx,\r\n hoveredEvent\r\n } = state[virtualizationId];\r\n\r\n const mouseOffsetFromFirstIdx = (\r\n mouseContainerOffsetPx - offsetForRenderingIdxsOnly\r\n );\r\n const numCellsFromStartIdx = Math.floor(mouseOffsetFromFirstIdx/cellSizePx);\r\n const cellIdxHovered = firstIdxToRender + numCellsFromStartIdx;\r\n if(cellIdxHovered > lastIdxToRender){ \r\n //don't allow hover events outside viewport (matters when small)\r\n if(hoveredEvent !== undefined){ //only mutate if changed\r\n state[virtualizationId].hoveredEvent = undefined;\r\n }\r\n }\r\n else if(!hoveredEvent || hoveredEvent.cellIdx !== cellIdxHovered){ //only mutate if changed\r\n const startPx = (numCellsFromStartIdx * cellSizePx) + offsetForRenderingIdxsOnly;\r\n\r\n state[virtualizationId].hoveredEvent = {\r\n cellIdx: cellIdxHovered,\r\n containerOffsetCellStartPx: startPx,\r\n containerOffsetCellMiddlePx: startPx+(cellSizePx/2),\r\n containerOffsetCellEndPx: startPx+cellSizePx\r\n };\r\n }\r\n }\r\n }\r\n};\r\n\r\n\r\nexport const alignmentVirtualizationsSlice = createSlice({\r\n name: \"alignment-virtualization\",\r\n initialState: {} as IGenericVirtualizations,\r\n reducers: genericReducers,\r\n});\r\n\r\nexport const {\r\n initializeNewVirtualization,\r\n setCellCount,\r\n setCellSize,\r\n setContainerSize,\r\n setWorldOffset,\r\n setHoveredOffset\r\n} = alignmentVirtualizationsSlice.actions;\r\n\r\n//example selector usage\r\n//const blah = useSelector((state: IGenericVirtualizations) =>\r\n// alignmentVirtualizationsSlice.getSelectors().getAxisParams(\r\n// state, 'asdf', 'asdf'\r\n// ), shallowEqual\r\n//);\r\n","import * as ReactOriginal from 'react'\r\nimport type * as ReactNamespace from 'react'\r\n\r\nexport const React: typeof ReactNamespace =\r\n // prettier-ignore\r\n // @ts-ignore\r\n 'default' in ReactOriginal ? ReactOriginal['default'] : ReactOriginal as any\r\n","import type { Context } from 'react'\r\nimport { React } from '../utils/react'\r\nimport type { Action, Store, UnknownAction } from 'redux'\r\nimport type { Subscription } from '../utils/Subscription'\r\nimport type { ProviderProps } from './Provider'\r\n\r\nexport interface ReactReduxContextValue<\r\n SS = any,\r\n A extends Action = UnknownAction\r\n> extends Pick {\r\n store: Store\r\n subscription: Subscription\r\n getServerState?: () => SS\r\n}\r\n\r\nconst ContextKey = Symbol.for(`react-redux-context`)\r\nconst gT: {\r\n [ContextKey]?: Map<\r\n typeof React.createContext,\r\n Context\r\n >\r\n} = (\r\n typeof globalThis !== 'undefined'\r\n ? globalThis\r\n : /* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */ {}\r\n) as any\r\n\r\nfunction getContext(): Context {\r\n if (!React.createContext) return {} as any\r\n\r\n const contextMap = (gT[ContextKey] ??= new Map<\r\n typeof React.createContext,\r\n Context\r\n >())\r\n let realContext = contextMap.get(React.createContext)\r\n if (!realContext) {\r\n realContext = React.createContext(\r\n null as any\r\n )\r\n if (process.env.NODE_ENV !== 'production') {\r\n realContext.displayName = 'ReactRedux'\r\n }\r\n contextMap.set(React.createContext, realContext)\r\n }\r\n return realContext\r\n}\r\n\r\nexport const ReactReduxContext = /*#__PURE__*/ getContext()\r\n\r\nexport type ReactReduxContextInstance = typeof ReactReduxContext\r\n\r\nexport default ReactReduxContext\r\n","import type { useSyncExternalStore } from 'use-sync-external-store'\r\nimport type { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector'\r\n\r\nexport const notInitialized = () => {\r\n throw new Error('uSES not initialized!')\r\n}\r\n\r\nexport type uSES = typeof useSyncExternalStore\r\nexport type uSESWS = typeof useSyncExternalStoreWithSelector\r\n","import { React } from '../utils/react'\r\nimport { ReactReduxContext } from '../components/Context'\r\nimport type { ReactReduxContextValue } from '../components/Context'\r\n\r\n/**\r\n * Hook factory, which creates a `useReduxContext` hook bound to a given context. This is a low-level\r\n * hook that you should usually not need to call directly.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useReduxContext` hook bound to the specified context.\r\n */\r\nexport function createReduxContextHook(context = ReactReduxContext) {\r\n return function useReduxContext(): ReactReduxContextValue {\r\n const contextValue = React.useContext(context)\r\n\r\n if (process.env.NODE_ENV !== 'production' && !contextValue) {\r\n throw new Error(\r\n 'could not find react-redux context value; please ensure the component is wrapped in a '\r\n )\r\n }\r\n\r\n return contextValue!\r\n }\r\n}\r\n\r\n/**\r\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\r\n * hook that you should usually not need to call directly.\r\n *\r\n * @returns {any} the value of the `ReactReduxContext`\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useReduxContext } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n * const { store } = useReduxContext()\r\n * return

\r\n * }\r\n */\r\nexport const useReduxContext = /*#__PURE__*/ createReduxContextHook()\r\n","//import * as React from 'react'\r\nimport { React } from '../utils/react'\r\n\r\nimport type { ReactReduxContextValue } from '../components/Context'\r\nimport { ReactReduxContext } from '../components/Context'\r\nimport type { EqualityFn, NoInfer } from '../types'\r\nimport type { uSESWS } from '../utils/useSyncExternalStore'\r\nimport { notInitialized } from '../utils/useSyncExternalStore'\r\nimport {\r\n createReduxContextHook,\r\n useReduxContext as useDefaultReduxContext,\r\n} from './useReduxContext'\r\n\r\n/**\r\n * The frequency of development mode checks.\r\n *\r\n * @since 8.1.0\r\n * @internal\r\n */\r\nexport type DevModeCheckFrequency = 'never' | 'once' | 'always'\r\n\r\n/**\r\n * Represents the configuration for development mode checks.\r\n *\r\n * @since 9.0.0\r\n * @internal\r\n */\r\nexport interface DevModeChecks {\r\n /**\r\n * Overrides the global stability check for the selector.\r\n * - `once` - Run only the first time the selector is called.\r\n * - `always` - Run every time the selector is called.\r\n * - `never` - Never run the stability check.\r\n *\r\n * @default 'once'\r\n *\r\n * @since 8.1.0\r\n */\r\n stabilityCheck: DevModeCheckFrequency\r\n\r\n /**\r\n * Overrides the global identity function check for the selector.\r\n * - `once` - Run only the first time the selector is called.\r\n * - `always` - Run every time the selector is called.\r\n * - `never` - Never run the identity function check.\r\n *\r\n * **Note**: Previously referred to as `noopCheck`.\r\n *\r\n * @default 'once'\r\n *\r\n * @since 9.0.0\r\n */\r\n identityFunctionCheck: DevModeCheckFrequency\r\n}\r\n\r\nexport interface UseSelectorOptions {\r\n equalityFn?: EqualityFn\r\n\r\n /**\r\n * `useSelector` performs additional checks in development mode to help\r\n * identify and warn about potential issues in selector behavior. This\r\n * option allows you to customize the behavior of these checks per selector.\r\n *\r\n * @since 9.0.0\r\n */\r\n devModeChecks?: Partial\r\n}\r\n\r\nexport interface UseSelector {\r\n (\r\n selector: (state: TState) => Selected,\r\n equalityFn?: EqualityFn\r\n ): Selected\r\n (\r\n selector: (state: TState) => Selected,\r\n options?: UseSelectorOptions\r\n ): Selected\r\n}\r\n\r\nlet useSyncExternalStoreWithSelector = notInitialized as uSESWS\r\nexport const initializeUseSelector = (fn: uSESWS) => {\r\n useSyncExternalStoreWithSelector = fn\r\n}\r\n\r\nconst refEquality: EqualityFn = (a, b) => a === b\r\n\r\n/**\r\n * Hook factory, which creates a `useSelector` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useSelector` hook bound to the specified context.\r\n */\r\nexport function createSelectorHook(\r\n context: React.Context | null> = ReactReduxContext\r\n): UseSelector {\r\n const useReduxContext =\r\n context === ReactReduxContext\r\n ? useDefaultReduxContext\r\n : createReduxContextHook(context)\r\n\r\n return function useSelector(\r\n selector: (state: TState) => Selected,\r\n equalityFnOrOptions:\r\n | EqualityFn>\r\n | UseSelectorOptions> = {}\r\n ): Selected {\r\n const { equalityFn = refEquality, devModeChecks = {} } =\r\n typeof equalityFnOrOptions === 'function'\r\n ? { equalityFn: equalityFnOrOptions }\r\n : equalityFnOrOptions\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (!selector) {\r\n throw new Error(`You must pass a selector to useSelector`)\r\n }\r\n if (typeof selector !== 'function') {\r\n throw new Error(`You must pass a function as a selector to useSelector`)\r\n }\r\n if (typeof equalityFn !== 'function') {\r\n throw new Error(\r\n `You must pass a function as an equality function to useSelector`\r\n )\r\n }\r\n }\r\n\r\n const {\r\n store,\r\n subscription,\r\n getServerState,\r\n stabilityCheck,\r\n identityFunctionCheck,\r\n } = useReduxContext()\r\n\r\n const firstRun = React.useRef(true)\r\n\r\n const wrappedSelector = React.useCallback(\r\n {\r\n [selector.name](state: TState) {\r\n const selected = selector(state)\r\n if (process.env.NODE_ENV !== 'production') {\r\n const {\r\n identityFunctionCheck: finalIdentityFunctionCheck,\r\n stabilityCheck: finalStabilityCheck,\r\n } = {\r\n stabilityCheck,\r\n identityFunctionCheck,\r\n ...devModeChecks,\r\n }\r\n if (\r\n finalStabilityCheck === 'always' ||\r\n (finalStabilityCheck === 'once' && firstRun.current)\r\n ) {\r\n const toCompare = selector(state)\r\n if (!equalityFn(selected, toCompare)) {\r\n let stack: string | undefined = undefined\r\n try {\r\n throw new Error()\r\n } catch (e) {\r\n ;({ stack } = e as Error)\r\n }\r\n console.warn(\r\n 'Selector ' +\r\n (selector.name || 'unknown') +\r\n ' returned a different result when called with the same parameters. This can lead to unnecessary rerenders.' +\r\n '\\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization',\r\n {\r\n state,\r\n selected,\r\n selected2: toCompare,\r\n stack,\r\n }\r\n )\r\n }\r\n }\r\n if (\r\n finalIdentityFunctionCheck === 'always' ||\r\n (finalIdentityFunctionCheck === 'once' && firstRun.current)\r\n ) {\r\n // @ts-ignore\r\n if (selected === state) {\r\n let stack: string | undefined = undefined\r\n try {\r\n throw new Error()\r\n } catch (e) {\r\n ;({ stack } = e as Error)\r\n }\r\n console.warn(\r\n 'Selector ' +\r\n (selector.name || 'unknown') +\r\n ' returned the root state when called. This can lead to unnecessary rerenders.' +\r\n '\\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.',\r\n { stack }\r\n )\r\n }\r\n }\r\n if (firstRun.current) firstRun.current = false\r\n }\r\n return selected\r\n },\r\n }[selector.name],\r\n [selector, stabilityCheck, devModeChecks.stabilityCheck]\r\n )\r\n\r\n const selectedState = useSyncExternalStoreWithSelector(\r\n subscription.addNestedSub,\r\n store.getState,\r\n getServerState || store.getState,\r\n wrappedSelector,\r\n equalityFn\r\n )\r\n\r\n React.useDebugValue(selectedState)\r\n\r\n return selectedState\r\n }\r\n}\r\n\r\n/**\r\n * A hook to access the redux store's state. This hook takes a selector function\r\n * as an argument. The selector is called with the store state.\r\n *\r\n * This hook takes an optional equality comparison function as the second parameter\r\n * that allows you to customize the way the selected state is compared to determine\r\n * whether the component needs to be re-rendered.\r\n *\r\n * @param {Function} selector the selector function\r\n * @param {Function=} equalityFn the function that will be used to determine equality\r\n *\r\n * @returns {any} the selected state\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n * const counter = useSelector(state => state.counter)\r\n * return
{counter}
\r\n * }\r\n */\r\nexport const useSelector = /*#__PURE__*/ createSelectorHook()\r\n","import type { ElementType, MemoExoticComponent, ReactElement } from 'react'\r\n\r\n// Directly ported from:\r\n// https://unpkg.com/browse/react-is@18.3.0-canary-ee68446ff-20231115/cjs/react-is.production.js\r\n// It's very possible this could change in the future, but given that\r\n// we only use these in `connect`, this is a low priority.\r\n\r\nconst REACT_ELEMENT_TYPE = Symbol.for('react.element')\r\nconst REACT_PORTAL_TYPE = Symbol.for('react.portal')\r\nconst REACT_FRAGMENT_TYPE = Symbol.for('react.fragment')\r\nconst REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode')\r\nconst REACT_PROFILER_TYPE = Symbol.for('react.profiler')\r\nconst REACT_PROVIDER_TYPE = Symbol.for('react.provider')\r\nconst REACT_CONTEXT_TYPE = Symbol.for('react.context')\r\nconst REACT_SERVER_CONTEXT_TYPE = Symbol.for('react.server_context')\r\nconst REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref')\r\nconst REACT_SUSPENSE_TYPE = Symbol.for('react.suspense')\r\nconst REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list')\r\nconst REACT_MEMO_TYPE = Symbol.for('react.memo')\r\nconst REACT_LAZY_TYPE = Symbol.for('react.lazy')\r\nconst REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen')\r\nconst REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference')\r\n\r\nexport const ForwardRef = REACT_FORWARD_REF_TYPE\r\nexport const Memo = REACT_MEMO_TYPE\r\n\r\nexport function isValidElementType(type: any): type is ElementType {\r\n if (typeof type === 'string' || typeof type === 'function') {\r\n return true\r\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\r\n\r\n if (\r\n type === REACT_FRAGMENT_TYPE ||\r\n type === REACT_PROFILER_TYPE ||\r\n type === REACT_STRICT_MODE_TYPE ||\r\n type === REACT_SUSPENSE_TYPE ||\r\n type === REACT_SUSPENSE_LIST_TYPE ||\r\n type === REACT_OFFSCREEN_TYPE\r\n ) {\r\n return true\r\n }\r\n\r\n if (typeof type === 'object' && type !== null) {\r\n if (\r\n type.$$typeof === REACT_LAZY_TYPE ||\r\n type.$$typeof === REACT_MEMO_TYPE ||\r\n type.$$typeof === REACT_PROVIDER_TYPE ||\r\n type.$$typeof === REACT_CONTEXT_TYPE ||\r\n type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\r\n // types supported by any Flight configuration anywhere since\r\n // we don't know which Flight build this will end up being used\r\n // with.\r\n type.$$typeof === REACT_CLIENT_REFERENCE ||\r\n type.getModuleId !== undefined\r\n ) {\r\n return true\r\n }\r\n }\r\n\r\n return false\r\n}\r\n\r\nfunction typeOf(object: any): symbol | undefined {\r\n if (typeof object === 'object' && object !== null) {\r\n const $$typeof = object.$$typeof\r\n\r\n switch ($$typeof) {\r\n case REACT_ELEMENT_TYPE: {\r\n const type = object.type\r\n\r\n switch (type) {\r\n case REACT_FRAGMENT_TYPE:\r\n case REACT_PROFILER_TYPE:\r\n case REACT_STRICT_MODE_TYPE:\r\n case REACT_SUSPENSE_TYPE:\r\n case REACT_SUSPENSE_LIST_TYPE:\r\n return type\r\n\r\n default: {\r\n const $$typeofType = type && type.$$typeof\r\n\r\n switch ($$typeofType) {\r\n case REACT_SERVER_CONTEXT_TYPE:\r\n case REACT_CONTEXT_TYPE:\r\n case REACT_FORWARD_REF_TYPE:\r\n case REACT_LAZY_TYPE:\r\n case REACT_MEMO_TYPE:\r\n case REACT_PROVIDER_TYPE:\r\n return $$typeofType\r\n\r\n default:\r\n return $$typeof\r\n }\r\n }\r\n }\r\n }\r\n\r\n case REACT_PORTAL_TYPE: {\r\n return $$typeof\r\n }\r\n }\r\n }\r\n\r\n return undefined\r\n}\r\n\r\nexport function isContextConsumer(object: any): object is ReactElement {\r\n return typeOf(object) === REACT_CONTEXT_TYPE\r\n}\r\n\r\nexport function isMemo(object: any): object is MemoExoticComponent {\r\n return typeOf(object) === REACT_MEMO_TYPE\r\n}\r\n","// Default to a dummy \"batch\" implementation that just runs the callback\r\nexport function defaultNoopBatch(callback: () => void) {\r\n callback()\r\n}\r\n","import { defaultNoopBatch as batch } from './batch'\r\n\r\n// encapsulates the subscription logic for connecting a component to the redux store, as\r\n// well as nesting subscriptions of descendant components, so that we can ensure the\r\n// ancestor components re-render before descendants\r\n\r\ntype VoidFunc = () => void\r\n\r\ntype Listener = {\r\n callback: VoidFunc\r\n next: Listener | null\r\n prev: Listener | null\r\n}\r\n\r\nfunction createListenerCollection() {\r\n let first: Listener | null = null\r\n let last: Listener | null = null\r\n\r\n return {\r\n clear() {\r\n first = null\r\n last = null\r\n },\r\n\r\n notify() {\r\n batch(() => {\r\n let listener = first\r\n while (listener) {\r\n listener.callback()\r\n listener = listener.next\r\n }\r\n })\r\n },\r\n\r\n get() {\r\n let listeners: Listener[] = []\r\n let listener = first\r\n while (listener) {\r\n listeners.push(listener)\r\n listener = listener.next\r\n }\r\n return listeners\r\n },\r\n\r\n subscribe(callback: () => void) {\r\n let isSubscribed = true\r\n\r\n let listener: Listener = (last = {\r\n callback,\r\n next: null,\r\n prev: last,\r\n })\r\n\r\n if (listener.prev) {\r\n listener.prev.next = listener\r\n } else {\r\n first = listener\r\n }\r\n\r\n return function unsubscribe() {\r\n if (!isSubscribed || first === null) return\r\n isSubscribed = false\r\n\r\n if (listener.next) {\r\n listener.next.prev = listener.prev\r\n } else {\r\n last = listener.prev\r\n }\r\n if (listener.prev) {\r\n listener.prev.next = listener.next\r\n } else {\r\n first = listener.next\r\n }\r\n }\r\n },\r\n }\r\n}\r\n\r\ntype ListenerCollection = ReturnType\r\n\r\nexport interface Subscription {\r\n addNestedSub: (listener: VoidFunc) => VoidFunc\r\n notifyNestedSubs: VoidFunc\r\n handleChangeWrapper: VoidFunc\r\n isSubscribed: () => boolean\r\n onStateChange?: VoidFunc | null\r\n trySubscribe: VoidFunc\r\n tryUnsubscribe: VoidFunc\r\n getListeners: () => ListenerCollection\r\n}\r\n\r\nconst nullListeners = {\r\n notify() {},\r\n get: () => [],\r\n} as unknown as ListenerCollection\r\n\r\nexport function createSubscription(store: any, parentSub?: Subscription) {\r\n let unsubscribe: VoidFunc | undefined\r\n let listeners: ListenerCollection = nullListeners\r\n\r\n // Reasons to keep the subscription active\r\n let subscriptionsAmount = 0\r\n\r\n // Is this specific subscription subscribed (or only nested ones?)\r\n let selfSubscribed = false\r\n\r\n function addNestedSub(listener: () => void) {\r\n trySubscribe()\r\n\r\n const cleanupListener = listeners.subscribe(listener)\r\n\r\n // cleanup nested sub\r\n let removed = false\r\n return () => {\r\n if (!removed) {\r\n removed = true\r\n cleanupListener()\r\n tryUnsubscribe()\r\n }\r\n }\r\n }\r\n\r\n function notifyNestedSubs() {\r\n listeners.notify()\r\n }\r\n\r\n function handleChangeWrapper() {\r\n if (subscription.onStateChange) {\r\n subscription.onStateChange()\r\n }\r\n }\r\n\r\n function isSubscribed() {\r\n return selfSubscribed\r\n }\r\n\r\n function trySubscribe() {\r\n subscriptionsAmount++\r\n if (!unsubscribe) {\r\n unsubscribe = parentSub\r\n ? parentSub.addNestedSub(handleChangeWrapper)\r\n : store.subscribe(handleChangeWrapper)\r\n\r\n listeners = createListenerCollection()\r\n }\r\n }\r\n\r\n function tryUnsubscribe() {\r\n subscriptionsAmount--\r\n if (unsubscribe && subscriptionsAmount === 0) {\r\n unsubscribe()\r\n unsubscribe = undefined\r\n listeners.clear()\r\n listeners = nullListeners\r\n }\r\n }\r\n\r\n function trySubscribeSelf() {\r\n if (!selfSubscribed) {\r\n selfSubscribed = true\r\n trySubscribe()\r\n }\r\n }\r\n\r\n function tryUnsubscribeSelf() {\r\n if (selfSubscribed) {\r\n selfSubscribed = false\r\n tryUnsubscribe()\r\n }\r\n }\r\n\r\n const subscription: Subscription = {\r\n addNestedSub,\r\n notifyNestedSubs,\r\n handleChangeWrapper,\r\n isSubscribed,\r\n trySubscribe: trySubscribeSelf,\r\n tryUnsubscribe: tryUnsubscribeSelf,\r\n getListeners: () => listeners,\r\n }\r\n\r\n return subscription\r\n}\r\n","import { React } from '../utils/react'\r\n\r\n// React currently throws a warning when using useLayoutEffect on the server.\r\n// To get around it, we can conditionally useEffect on the server (no-op) and\r\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\r\n// subscription callback always has the selector from the latest render commit\r\n// available, otherwise a store update may happen between render and the effect,\r\n// which may cause missed updates; we also must ensure the store subscription\r\n// is created synchronously, otherwise a store update may occur before the\r\n// subscription is created and an inconsistent state may be observed\r\n\r\n// Matches logic in React's `shared/ExecutionEnvironment` file\r\nexport const canUseDOM = !!(\r\n typeof window !== 'undefined' &&\r\n typeof window.document !== 'undefined' &&\r\n typeof window.document.createElement !== 'undefined'\r\n)\r\n\r\nexport const useIsomorphicLayoutEffect = canUseDOM\r\n ? React.useLayoutEffect\r\n : React.useEffect\r\n","function is(x: unknown, y: unknown) {\r\n if (x === y) {\r\n return x !== 0 || y !== 0 || 1 / x === 1 / y\r\n } else {\r\n return x !== x && y !== y\r\n }\r\n}\r\n\r\nexport default function shallowEqual(objA: any, objB: any) {\r\n if (is(objA, objB)) return true\r\n\r\n if (\r\n typeof objA !== 'object' ||\r\n objA === null ||\r\n typeof objB !== 'object' ||\r\n objB === null\r\n ) {\r\n return false\r\n }\r\n\r\n const keysA = Object.keys(objA)\r\n const keysB = Object.keys(objB)\r\n\r\n if (keysA.length !== keysB.length) return false\r\n\r\n for (let i = 0; i < keysA.length; i++) {\r\n if (\r\n !Object.prototype.hasOwnProperty.call(objB, keysA[i]) ||\r\n !is(objA[keysA[i]], objB[keysA[i]])\r\n ) {\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n}\r\n","// Copied directly from:\r\n// https://github.com/mridgway/hoist-non-react-statics/blob/main/src/index.js\r\n// https://unpkg.com/browse/@types/hoist-non-react-statics@3.3.1/index.d.ts\r\n\r\n/**\r\n * Copyright 2015, Yahoo! Inc.\r\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\r\n */\r\nimport type * as React from 'react'\r\nimport { ForwardRef, Memo, isMemo } from '../utils/react-is'\r\n\r\nconst REACT_STATICS = {\r\n childContextTypes: true,\r\n contextType: true,\r\n contextTypes: true,\r\n defaultProps: true,\r\n displayName: true,\r\n getDefaultProps: true,\r\n getDerivedStateFromError: true,\r\n getDerivedStateFromProps: true,\r\n mixins: true,\r\n propTypes: true,\r\n type: true,\r\n} as const\r\n\r\nconst KNOWN_STATICS = {\r\n name: true,\r\n length: true,\r\n prototype: true,\r\n caller: true,\r\n callee: true,\r\n arguments: true,\r\n arity: true,\r\n} as const\r\n\r\nconst FORWARD_REF_STATICS = {\r\n $$typeof: true,\r\n render: true,\r\n defaultProps: true,\r\n displayName: true,\r\n propTypes: true,\r\n} as const\r\n\r\nconst MEMO_STATICS = {\r\n $$typeof: true,\r\n compare: true,\r\n defaultProps: true,\r\n displayName: true,\r\n propTypes: true,\r\n type: true,\r\n} as const\r\n\r\nconst TYPE_STATICS = {\r\n [ForwardRef]: FORWARD_REF_STATICS,\r\n [Memo]: MEMO_STATICS,\r\n} as const\r\n\r\nfunction getStatics(component: any) {\r\n // React v16.11 and below\r\n if (isMemo(component)) {\r\n return MEMO_STATICS\r\n }\r\n\r\n // React v16.12 and above\r\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS\r\n}\r\n\r\nexport type NonReactStatics<\r\n S extends React.ComponentType,\r\n C extends {\r\n [key: string]: true\r\n } = {}\r\n> = {\r\n [key in Exclude<\r\n keyof S,\r\n S extends React.MemoExoticComponent\r\n ? keyof typeof MEMO_STATICS | keyof C\r\n : S extends React.ForwardRefExoticComponent\r\n ? keyof typeof FORWARD_REF_STATICS | keyof C\r\n : keyof typeof REACT_STATICS | keyof typeof KNOWN_STATICS | keyof C\r\n >]: S[key]\r\n}\r\n\r\nconst defineProperty = Object.defineProperty\r\nconst getOwnPropertyNames = Object.getOwnPropertyNames\r\nconst getOwnPropertySymbols = Object.getOwnPropertySymbols\r\nconst getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor\r\nconst getPrototypeOf = Object.getPrototypeOf\r\nconst objectPrototype = Object.prototype\r\n\r\nexport default function hoistNonReactStatics<\r\n T extends React.ComponentType,\r\n S extends React.ComponentType,\r\n C extends {\r\n [key: string]: true\r\n } = {}\r\n>(targetComponent: T, sourceComponent: S): T & NonReactStatics {\r\n if (typeof sourceComponent !== 'string') {\r\n // don't hoist over string (html) components\r\n\r\n if (objectPrototype) {\r\n const inheritedComponent = getPrototypeOf(sourceComponent)\r\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\r\n hoistNonReactStatics(targetComponent, inheritedComponent)\r\n }\r\n }\r\n\r\n let keys: (string | symbol)[] = getOwnPropertyNames(sourceComponent)\r\n\r\n if (getOwnPropertySymbols) {\r\n keys = keys.concat(getOwnPropertySymbols(sourceComponent))\r\n }\r\n\r\n const targetStatics = getStatics(targetComponent)\r\n const sourceStatics = getStatics(sourceComponent)\r\n\r\n for (let i = 0; i < keys.length; ++i) {\r\n const key = keys[i]\r\n if (\r\n !KNOWN_STATICS[key as keyof typeof KNOWN_STATICS] &&\r\n !(sourceStatics && sourceStatics[key as keyof typeof sourceStatics]) &&\r\n !(targetStatics && targetStatics[key as keyof typeof targetStatics])\r\n ) {\r\n const descriptor = getOwnPropertyDescriptor(sourceComponent, key)\r\n try {\r\n // Avoid failures from read-only properties\r\n defineProperty(targetComponent, key, descriptor!)\r\n } catch (e) {\r\n // ignore\r\n }\r\n }\r\n }\r\n }\r\n\r\n return targetComponent as any\r\n}\r\n","import type { Context, ReactNode } from 'react'\r\nimport { React } from '../utils/react'\r\nimport type { Action, Store, UnknownAction } from 'redux'\r\nimport type { DevModeCheckFrequency } from '../hooks/useSelector'\r\nimport { createSubscription } from '../utils/Subscription'\r\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'\r\nimport type { ReactReduxContextValue } from './Context'\r\nimport { ReactReduxContext } from './Context'\r\n\r\nexport interface ProviderProps<\r\n A extends Action = UnknownAction,\r\n S = unknown\r\n> {\r\n /**\r\n * The single Redux store in your application.\r\n */\r\n store: Store\r\n\r\n /**\r\n * An optional server state snapshot. Will be used during initial hydration render if available, to ensure that the UI output is consistent with the HTML generated on the server.\r\n */\r\n serverState?: S\r\n\r\n /**\r\n * Optional context to be used internally in react-redux. Use React.createContext() to create a context to be used.\r\n * If this is used, you'll need to customize `connect` by supplying the same context provided to the Provider.\r\n * Set the initial value to null, and the hooks will error\r\n * if this is not overwritten by Provider.\r\n */\r\n context?: Context | null>\r\n\r\n /**\r\n * Determines the frequency of stability checks for all selectors.\r\n * This setting overrides the global configuration for\r\n * the `useSelector` stability check, allowing you to specify how often\r\n * these checks should occur in development mode.\r\n *\r\n * @since 8.1.0\r\n */\r\n stabilityCheck?: DevModeCheckFrequency\r\n\r\n /**\r\n * Determines the frequency of identity function checks for all selectors.\r\n * This setting overrides the global configuration for\r\n * the `useSelector` identity function check, allowing you to specify how often\r\n * these checks should occur in development mode.\r\n *\r\n * **Note**: Previously referred to as `noopCheck`.\r\n *\r\n * @since 9.0.0\r\n */\r\n identityFunctionCheck?: DevModeCheckFrequency\r\n\r\n children: ReactNode\r\n}\r\n\r\nfunction Provider
= UnknownAction, S = unknown>({\r\n store,\r\n context,\r\n children,\r\n serverState,\r\n stabilityCheck = 'once',\r\n identityFunctionCheck = 'once',\r\n}: ProviderProps) {\r\n const contextValue = React.useMemo(() => {\r\n const subscription = createSubscription(store)\r\n return {\r\n store,\r\n subscription,\r\n getServerState: serverState ? () => serverState : undefined,\r\n stabilityCheck,\r\n identityFunctionCheck,\r\n }\r\n }, [store, serverState, stabilityCheck, identityFunctionCheck])\r\n\r\n const previousState = React.useMemo(() => store.getState(), [store])\r\n\r\n useIsomorphicLayoutEffect(() => {\r\n const { subscription } = contextValue\r\n subscription.onStateChange = subscription.notifyNestedSubs\r\n subscription.trySubscribe()\r\n\r\n if (previousState !== store.getState()) {\r\n subscription.notifyNestedSubs()\r\n }\r\n return () => {\r\n subscription.tryUnsubscribe()\r\n subscription.onStateChange = undefined\r\n }\r\n }, [contextValue, previousState])\r\n\r\n const Context = context || ReactReduxContext\r\n\r\n // @ts-ignore 'AnyAction' is assignable to the constraint of type 'A', but 'A' could be instantiated with a different subtype\r\n return {children}\r\n}\r\n\r\nexport default Provider\r\n","import type { Context } from 'react'\r\nimport type { Action as BasicAction, UnknownAction, Store } from 'redux'\r\nimport type { ReactReduxContextValue } from '../components/Context'\r\nimport { ReactReduxContext } from '../components/Context'\r\nimport {\r\n useReduxContext as useDefaultReduxContext,\r\n createReduxContextHook,\r\n} from './useReduxContext'\r\n\r\n/**\r\n * Hook factory, which creates a `useStore` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useStore` hook bound to the specified context.\r\n */\r\nexport function createStoreHook<\r\n S = unknown,\r\n A extends BasicAction = UnknownAction\r\n // @ts-ignore\r\n>(context?: Context | null> = ReactReduxContext) {\r\n const useReduxContext =\r\n // @ts-ignore\r\n context === ReactReduxContext\r\n ? useDefaultReduxContext\r\n : // @ts-ignore\r\n createReduxContextHook(context)\r\n return function useStore<\r\n State = S,\r\n Action2 extends BasicAction = A\r\n // @ts-ignore\r\n >() {\r\n const { store } = useReduxContext()\r\n // @ts-ignore\r\n return store as Store\r\n }\r\n}\r\n\r\n/**\r\n * A hook to access the redux store.\r\n *\r\n * @returns {any} the redux store\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useStore } from 'react-redux'\r\n *\r\n * export const ExampleComponent = () => {\r\n * const store = useStore()\r\n * return
{store.getState()}
\r\n * }\r\n */\r\nexport const useStore = /*#__PURE__*/ createStoreHook()\r\n","import type { Action, Dispatch, UnknownAction } from 'redux'\r\nimport type { Context } from 'react'\r\n\r\nimport type { ReactReduxContextValue } from '../components/Context'\r\nimport { ReactReduxContext } from '../components/Context'\r\nimport { useStore as useDefaultStore, createStoreHook } from './useStore'\r\n\r\n/**\r\n * Hook factory, which creates a `useDispatch` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useDispatch` hook bound to the specified context.\r\n */\r\nexport function createDispatchHook<\r\n S = unknown,\r\n A extends Action = UnknownAction\r\n // @ts-ignore\r\n>(context?: Context | null> = ReactReduxContext) {\r\n const useStore =\r\n // @ts-ignore\r\n context === ReactReduxContext ? useDefaultStore : createStoreHook(context)\r\n\r\n return function useDispatch<\r\n AppDispatch extends Dispatch
= Dispatch\r\n >(): AppDispatch {\r\n const store = useStore()\r\n // @ts-ignore\r\n return store.dispatch\r\n }\r\n}\r\n\r\n/**\r\n * A hook to access the redux `dispatch` function.\r\n *\r\n * @returns {any|function} redux store's `dispatch` function\r\n *\r\n * @example\r\n *\r\n * import React, { useCallback } from 'react'\r\n * import { useDispatch } from 'react-redux'\r\n *\r\n * export const CounterComponent = ({ value }) => {\r\n * const dispatch = useDispatch()\r\n * const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\r\n * return (\r\n *
\r\n * {value}\r\n * \r\n *
\r\n * )\r\n * }\r\n */\r\nexport const useDispatch = /*#__PURE__*/ createDispatchHook()\r\n","// The primary entry point assumes we are working with React 18, and thus have\r\n// useSyncExternalStore available. We can import that directly from React itself.\r\n// The useSyncExternalStoreWithSelector has to be imported, but we can use the\r\n// non-shim version. This shaves off the byte size of the shim.\r\n\r\nimport * as React from 'react'\r\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/with-selector.js'\r\n\r\nimport { initializeUseSelector } from './hooks/useSelector'\r\nimport { initializeConnect } from './components/connect'\r\n\r\ninitializeUseSelector(useSyncExternalStoreWithSelector)\r\ninitializeConnect(React.useSyncExternalStore)\r\n\r\nexport * from './exports'\r\n","/* eslint-disable valid-jsdoc, @typescript-eslint/no-unused-vars */\r\nimport type { ComponentType } from 'react'\r\nimport { React } from '../utils/react'\r\nimport { isValidElementType, isContextConsumer } from '../utils/react-is'\r\n\r\nimport type { Store } from 'redux'\r\n\r\nimport type {\r\n ConnectedComponent,\r\n InferableComponentEnhancer,\r\n InferableComponentEnhancerWithProps,\r\n ResolveThunks,\r\n DispatchProp,\r\n ConnectPropsMaybeWithoutContext,\r\n} from '../types'\r\n\r\nimport type {\r\n MapStateToPropsParam,\r\n MapDispatchToPropsParam,\r\n MergeProps,\r\n MapDispatchToPropsNonObject,\r\n SelectorFactoryOptions,\r\n} from '../connect/selectorFactory'\r\nimport defaultSelectorFactory from '../connect/selectorFactory'\r\nimport { mapDispatchToPropsFactory } from '../connect/mapDispatchToProps'\r\nimport { mapStateToPropsFactory } from '../connect/mapStateToProps'\r\nimport { mergePropsFactory } from '../connect/mergeProps'\r\n\r\nimport type { Subscription } from '../utils/Subscription'\r\nimport { createSubscription } from '../utils/Subscription'\r\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect'\r\nimport shallowEqual from '../utils/shallowEqual'\r\nimport hoistStatics from '../utils/hoistStatics'\r\nimport warning from '../utils/warning'\r\n\r\nimport type {\r\n ReactReduxContextValue,\r\n ReactReduxContextInstance,\r\n} from './Context'\r\nimport { ReactReduxContext } from './Context'\r\n\r\nimport type { uSES } from '../utils/useSyncExternalStore'\r\nimport { notInitialized } from '../utils/useSyncExternalStore'\r\n\r\nlet useSyncExternalStore = notInitialized as uSES\r\nexport const initializeConnect = (fn: uSES) => {\r\n useSyncExternalStore = fn\r\n}\r\n\r\n// Define some constant arrays just to avoid re-creating these\r\nconst EMPTY_ARRAY: [unknown, number] = [null, 0]\r\nconst NO_SUBSCRIPTION_ARRAY = [null, null]\r\n\r\n// Attempts to stringify whatever not-really-a-component value we were given\r\n// for logging in an error message\r\nconst stringifyComponent = (Comp: unknown) => {\r\n try {\r\n return JSON.stringify(Comp)\r\n } catch (err) {\r\n return String(Comp)\r\n }\r\n}\r\n\r\ntype EffectFunc = (...args: any[]) => void | ReturnType\r\n\r\n// This is \"just\" a `useLayoutEffect`, but with two modifications:\r\n// - we need to fall back to `useEffect` in SSR to avoid annoying warnings\r\n// - we extract this to a separate function to avoid closing over values\r\n// and causing memory leaks\r\nfunction useIsomorphicLayoutEffectWithArgs(\r\n effectFunc: EffectFunc,\r\n effectArgs: any[],\r\n dependencies?: React.DependencyList\r\n) {\r\n useIsomorphicLayoutEffect(() => effectFunc(...effectArgs), dependencies)\r\n}\r\n\r\n// Effect callback, extracted: assign the latest props values to refs for later usage\r\nfunction captureWrapperProps(\r\n lastWrapperProps: React.MutableRefObject,\r\n lastChildProps: React.MutableRefObject,\r\n renderIsScheduled: React.MutableRefObject,\r\n wrapperProps: unknown,\r\n // actualChildProps: unknown,\r\n childPropsFromStoreUpdate: React.MutableRefObject,\r\n notifyNestedSubs: () => void\r\n) {\r\n // We want to capture the wrapper props and child props we used for later comparisons\r\n lastWrapperProps.current = wrapperProps\r\n renderIsScheduled.current = false\r\n\r\n // If the render was from a store update, clear out that reference and cascade the subscriber update\r\n if (childPropsFromStoreUpdate.current) {\r\n childPropsFromStoreUpdate.current = null\r\n notifyNestedSubs()\r\n }\r\n}\r\n\r\n// Effect callback, extracted: subscribe to the Redux store or nearest connected ancestor,\r\n// check for updates after dispatched actions, and trigger re-renders.\r\nfunction subscribeUpdates(\r\n shouldHandleStateChanges: boolean,\r\n store: Store,\r\n subscription: Subscription,\r\n childPropsSelector: (state: unknown, props: unknown) => unknown,\r\n lastWrapperProps: React.MutableRefObject,\r\n lastChildProps: React.MutableRefObject,\r\n renderIsScheduled: React.MutableRefObject,\r\n isMounted: React.MutableRefObject,\r\n childPropsFromStoreUpdate: React.MutableRefObject,\r\n notifyNestedSubs: () => void,\r\n // forceComponentUpdateDispatch: React.Dispatch,\r\n additionalSubscribeListener: () => void\r\n) {\r\n // If we're not subscribed to the store, nothing to do here\r\n if (!shouldHandleStateChanges) return () => {}\r\n\r\n // Capture values for checking if and when this component unmounts\r\n let didUnsubscribe = false\r\n let lastThrownError: Error | null = null\r\n\r\n // We'll run this callback every time a store subscription update propagates to this component\r\n const checkForUpdates = () => {\r\n if (didUnsubscribe || !isMounted.current) {\r\n // Don't run stale listeners.\r\n // Redux doesn't guarantee unsubscriptions happen until next dispatch.\r\n return\r\n }\r\n\r\n // TODO We're currently calling getState ourselves here, rather than letting `uSES` do it\r\n const latestStoreState = store.getState()\r\n\r\n let newChildProps, error\r\n try {\r\n // Actually run the selector with the most recent store state and wrapper props\r\n // to determine what the child props should be\r\n newChildProps = childPropsSelector(\r\n latestStoreState,\r\n lastWrapperProps.current\r\n )\r\n } catch (e) {\r\n error = e\r\n lastThrownError = e as Error | null\r\n }\r\n\r\n if (!error) {\r\n lastThrownError = null\r\n }\r\n\r\n // If the child props haven't changed, nothing to do here - cascade the subscription update\r\n if (newChildProps === lastChildProps.current) {\r\n if (!renderIsScheduled.current) {\r\n notifyNestedSubs()\r\n }\r\n } else {\r\n // Save references to the new child props. Note that we track the \"child props from store update\"\r\n // as a ref instead of a useState/useReducer because we need a way to determine if that value has\r\n // been processed. If this went into useState/useReducer, we couldn't clear out the value without\r\n // forcing another re-render, which we don't want.\r\n lastChildProps.current = newChildProps\r\n childPropsFromStoreUpdate.current = newChildProps\r\n renderIsScheduled.current = true\r\n\r\n // TODO This is hacky and not how `uSES` is meant to be used\r\n // Trigger the React `useSyncExternalStore` subscriber\r\n additionalSubscribeListener()\r\n }\r\n }\r\n\r\n // Actually subscribe to the nearest connected ancestor (or store)\r\n subscription.onStateChange = checkForUpdates\r\n subscription.trySubscribe()\r\n\r\n // Pull data from the store after first render in case the store has\r\n // changed since we began.\r\n checkForUpdates()\r\n\r\n const unsubscribeWrapper = () => {\r\n didUnsubscribe = true\r\n subscription.tryUnsubscribe()\r\n subscription.onStateChange = null\r\n\r\n if (lastThrownError) {\r\n // It's possible that we caught an error due to a bad mapState function, but the\r\n // parent re-rendered without this component and we're about to unmount.\r\n // This shouldn't happen as long as we do top-down subscriptions correctly, but\r\n // if we ever do those wrong, this throw will surface the error in our tests.\r\n // In that case, throw the error from here so it doesn't get lost.\r\n throw lastThrownError\r\n }\r\n }\r\n\r\n return unsubscribeWrapper\r\n}\r\n\r\n// Reducer initial state creation for our update reducer\r\nconst initStateUpdates = () => EMPTY_ARRAY\r\n\r\nexport interface ConnectProps {\r\n /** A custom Context instance that the component can use to access the store from an alternate Provider using that same Context instance */\r\n context?: ReactReduxContextInstance\r\n /** A Redux store instance to be used for subscriptions instead of the store from a Provider */\r\n store?: Store\r\n}\r\n\r\ninterface InternalConnectProps extends ConnectProps {\r\n reactReduxForwardedRef?: React.ForwardedRef\r\n}\r\n\r\nfunction strictEqual(a: unknown, b: unknown) {\r\n return a === b\r\n}\r\n\r\n/**\r\n * Infers the type of props that a connector will inject into a component.\r\n */\r\nexport type ConnectedProps =\r\n TConnector extends InferableComponentEnhancerWithProps<\r\n infer TInjectedProps,\r\n any\r\n >\r\n ? unknown extends TInjectedProps\r\n ? TConnector extends InferableComponentEnhancer\r\n ? TInjectedProps\r\n : never\r\n : TInjectedProps\r\n : never\r\n\r\nexport interface ConnectOptions<\r\n State = unknown,\r\n TStateProps = {},\r\n TOwnProps = {},\r\n TMergedProps = {}\r\n> {\r\n forwardRef?: boolean\r\n context?: typeof ReactReduxContext\r\n areStatesEqual?: (\r\n nextState: State,\r\n prevState: State,\r\n nextOwnProps: TOwnProps,\r\n prevOwnProps: TOwnProps\r\n ) => boolean\r\n\r\n areOwnPropsEqual?: (\r\n nextOwnProps: TOwnProps,\r\n prevOwnProps: TOwnProps\r\n ) => boolean\r\n\r\n areStatePropsEqual?: (\r\n nextStateProps: TStateProps,\r\n prevStateProps: TStateProps\r\n ) => boolean\r\n areMergedPropsEqual?: (\r\n nextMergedProps: TMergedProps,\r\n prevMergedProps: TMergedProps\r\n ) => boolean\r\n}\r\n\r\n/**\r\n * Connects a React component to a Redux store.\r\n *\r\n * - Without arguments, just wraps the component, without changing the behavior / props\r\n *\r\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\r\n * is to override ownProps (as stated in the docs), so what remains is everything that's\r\n * not a state or dispatch prop\r\n *\r\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\r\n * should be valid component props, because it depends on mergeProps implementation.\r\n * As such, it is the user's responsibility to extend ownProps interface from state or\r\n * dispatch props or both when applicable\r\n *\r\n * @param mapStateToProps\r\n * @param mapDispatchToProps\r\n * @param mergeProps\r\n * @param options\r\n */\r\nexport interface Connect {\r\n // tslint:disable:no-unnecessary-generics\r\n (): InferableComponentEnhancer\r\n\r\n /** mapState only */\r\n (\r\n mapStateToProps: MapStateToPropsParam\r\n ): InferableComponentEnhancerWithProps\r\n\r\n /** mapDispatch only (as a function) */\r\n (\r\n mapStateToProps: null | undefined,\r\n mapDispatchToProps: MapDispatchToPropsNonObject\r\n ): InferableComponentEnhancerWithProps\r\n\r\n /** mapDispatch only (as an object) */\r\n (\r\n mapStateToProps: null | undefined,\r\n mapDispatchToProps: MapDispatchToPropsParam\r\n ): InferableComponentEnhancerWithProps<\r\n ResolveThunks,\r\n TOwnProps\r\n >\r\n\r\n /** mapState and mapDispatch (as a function)*/\r\n (\r\n mapStateToProps: MapStateToPropsParam,\r\n mapDispatchToProps: MapDispatchToPropsNonObject\r\n ): InferableComponentEnhancerWithProps<\r\n TStateProps & TDispatchProps,\r\n TOwnProps\r\n >\r\n\r\n /** mapState and mapDispatch (nullish) */\r\n (\r\n mapStateToProps: MapStateToPropsParam,\r\n mapDispatchToProps: null | undefined\r\n ): InferableComponentEnhancerWithProps\r\n\r\n /** mapState and mapDispatch (as an object) */\r\n (\r\n mapStateToProps: MapStateToPropsParam,\r\n mapDispatchToProps: MapDispatchToPropsParam\r\n ): InferableComponentEnhancerWithProps<\r\n TStateProps & ResolveThunks,\r\n TOwnProps\r\n >\r\n\r\n /** mergeProps only */\r\n (\r\n mapStateToProps: null | undefined,\r\n mapDispatchToProps: null | undefined,\r\n mergeProps: MergeProps\r\n ): InferableComponentEnhancerWithProps\r\n\r\n /** mapState and mergeProps */\r\n <\r\n TStateProps = {},\r\n no_dispatch = {},\r\n TOwnProps = {},\r\n TMergedProps = {},\r\n State = DefaultState\r\n >(\r\n mapStateToProps: MapStateToPropsParam,\r\n mapDispatchToProps: null | undefined,\r\n mergeProps: MergeProps\r\n ): InferableComponentEnhancerWithProps\r\n\r\n /** mapDispatch (as a object) and mergeProps */\r\n (\r\n mapStateToProps: null | undefined,\r\n mapDispatchToProps: MapDispatchToPropsParam,\r\n mergeProps: MergeProps\r\n ): InferableComponentEnhancerWithProps\r\n\r\n /** mapState and options */\r\n (\r\n mapStateToProps: MapStateToPropsParam,\r\n mapDispatchToProps: null | undefined,\r\n mergeProps: null | undefined,\r\n options: ConnectOptions\r\n ): InferableComponentEnhancerWithProps\r\n\r\n /** mapDispatch (as a function) and options */\r\n (\r\n mapStateToProps: null | undefined,\r\n mapDispatchToProps: MapDispatchToPropsNonObject,\r\n mergeProps: null | undefined,\r\n options: ConnectOptions<{}, TStateProps, TOwnProps>\r\n ): InferableComponentEnhancerWithProps\r\n\r\n /** mapDispatch (as an object) and options*/\r\n (\r\n mapStateToProps: null | undefined,\r\n mapDispatchToProps: MapDispatchToPropsParam,\r\n mergeProps: null | undefined,\r\n options: ConnectOptions<{}, TStateProps, TOwnProps>\r\n ): InferableComponentEnhancerWithProps<\r\n ResolveThunks,\r\n TOwnProps\r\n >\r\n\r\n /** mapState, mapDispatch (as a function), and options */\r\n (\r\n mapStateToProps: MapStateToPropsParam,\r\n mapDispatchToProps: MapDispatchToPropsNonObject,\r\n mergeProps: null | undefined,\r\n options: ConnectOptions\r\n ): InferableComponentEnhancerWithProps<\r\n TStateProps & TDispatchProps,\r\n TOwnProps\r\n >\r\n\r\n /** mapState, mapDispatch (as an object), and options */\r\n (\r\n mapStateToProps: MapStateToPropsParam,\r\n mapDispatchToProps: MapDispatchToPropsParam,\r\n mergeProps: null | undefined,\r\n options: ConnectOptions\r\n ): InferableComponentEnhancerWithProps<\r\n TStateProps & ResolveThunks,\r\n TOwnProps\r\n >\r\n\r\n /** mapState, mapDispatch, mergeProps, and options */\r\n <\r\n TStateProps = {},\r\n TDispatchProps = {},\r\n TOwnProps = {},\r\n TMergedProps = {},\r\n State = DefaultState\r\n >(\r\n mapStateToProps: MapStateToPropsParam,\r\n mapDispatchToProps: MapDispatchToPropsParam,\r\n mergeProps: MergeProps<\r\n TStateProps,\r\n TDispatchProps,\r\n TOwnProps,\r\n TMergedProps\r\n >,\r\n options?: ConnectOptions\r\n ): InferableComponentEnhancerWithProps\r\n // tslint:enable:no-unnecessary-generics\r\n}\r\n\r\nlet hasWarnedAboutDeprecatedPureOption = false\r\n\r\n/**\r\n * Connects a React component to a Redux store.\r\n *\r\n * - Without arguments, just wraps the component, without changing the behavior / props\r\n *\r\n * - If 2 params are passed (3rd param, mergeProps, is skipped), default behavior\r\n * is to override ownProps (as stated in the docs), so what remains is everything that's\r\n * not a state or dispatch prop\r\n *\r\n * - When 3rd param is passed, we don't know if ownProps propagate and whether they\r\n * should be valid component props, because it depends on mergeProps implementation.\r\n * As such, it is the user's responsibility to extend ownProps interface from state or\r\n * dispatch props or both when applicable\r\n *\r\n * @param mapStateToProps A function that extracts values from state\r\n * @param mapDispatchToProps Setup for dispatching actions\r\n * @param mergeProps Optional callback to merge state and dispatch props together\r\n * @param options Options for configuring the connection\r\n *\r\n */\r\nfunction connect<\r\n TStateProps = {},\r\n TDispatchProps = {},\r\n TOwnProps = {},\r\n TMergedProps = {},\r\n State = unknown\r\n>(\r\n mapStateToProps?: MapStateToPropsParam,\r\n mapDispatchToProps?: MapDispatchToPropsParam,\r\n mergeProps?: MergeProps,\r\n {\r\n // The `pure` option has been removed, so TS doesn't like us destructuring this to check its existence.\r\n // @ts-ignore\r\n pure,\r\n areStatesEqual = strictEqual,\r\n areOwnPropsEqual = shallowEqual,\r\n areStatePropsEqual = shallowEqual,\r\n areMergedPropsEqual = shallowEqual,\r\n\r\n // use React's forwardRef to expose a ref of the wrapped component\r\n forwardRef = false,\r\n\r\n // the context consumer to use\r\n context = ReactReduxContext,\r\n }: ConnectOptions = {}\r\n): unknown {\r\n if (process.env.NODE_ENV !== 'production') {\r\n if (pure !== undefined && !hasWarnedAboutDeprecatedPureOption) {\r\n hasWarnedAboutDeprecatedPureOption = true\r\n warning(\r\n 'The `pure` option has been removed. `connect` is now always a \"pure/memoized\" component'\r\n )\r\n }\r\n }\r\n\r\n const Context = context\r\n\r\n const initMapStateToProps = mapStateToPropsFactory(mapStateToProps)\r\n const initMapDispatchToProps = mapDispatchToPropsFactory(mapDispatchToProps)\r\n const initMergeProps = mergePropsFactory(mergeProps)\r\n\r\n const shouldHandleStateChanges = Boolean(mapStateToProps)\r\n\r\n const wrapWithConnect = (\r\n WrappedComponent: ComponentType\r\n ) => {\r\n type WrappedComponentProps = TProps &\r\n ConnectPropsMaybeWithoutContext\r\n\r\n if (process.env.NODE_ENV !== 'production') {\r\n const isValid = /*#__PURE__*/ isValidElementType(WrappedComponent)\r\n if (!isValid)\r\n throw new Error(\r\n `You must pass a component to the function returned by connect. Instead received ${stringifyComponent(\r\n WrappedComponent\r\n )}`\r\n )\r\n }\r\n\r\n const wrappedComponentName =\r\n WrappedComponent.displayName || WrappedComponent.name || 'Component'\r\n\r\n const displayName = `Connect(${wrappedComponentName})`\r\n\r\n const selectorFactoryOptions: SelectorFactoryOptions<\r\n any,\r\n any,\r\n any,\r\n any,\r\n State\r\n > = {\r\n shouldHandleStateChanges,\r\n displayName,\r\n wrappedComponentName,\r\n WrappedComponent,\r\n // @ts-ignore\r\n initMapStateToProps,\r\n // @ts-ignore\r\n initMapDispatchToProps,\r\n initMergeProps,\r\n areStatesEqual,\r\n areStatePropsEqual,\r\n areOwnPropsEqual,\r\n areMergedPropsEqual,\r\n }\r\n\r\n function ConnectFunction(\r\n props: InternalConnectProps & TOwnProps\r\n ) {\r\n const [propsContext, reactReduxForwardedRef, wrapperProps] =\r\n React.useMemo(() => {\r\n // Distinguish between actual \"data\" props that were passed to the wrapper component,\r\n // and values needed to control behavior (forwarded refs, alternate context instances).\r\n // To maintain the wrapperProps object reference, memoize this destructuring.\r\n const { reactReduxForwardedRef, ...wrapperProps } = props\r\n return [props.context, reactReduxForwardedRef, wrapperProps]\r\n }, [props])\r\n\r\n const ContextToUse: ReactReduxContextInstance = React.useMemo(() => {\r\n // Users may optionally pass in a custom context instance to use instead of our ReactReduxContext.\r\n // Memoize the check that determines which context instance we should use.\r\n let ResultContext = Context\r\n if (propsContext?.Consumer) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n const isValid = /*#__PURE__*/ isContextConsumer(\r\n // @ts-ignore\r\n \r\n )\r\n if (!isValid) {\r\n throw new Error(\r\n 'You must pass a valid React context consumer as `props.context`'\r\n )\r\n }\r\n ResultContext = propsContext\r\n }\r\n }\r\n return ResultContext\r\n }, [propsContext, Context])\r\n\r\n // Retrieve the store and ancestor subscription via context, if available\r\n const contextValue = React.useContext(ContextToUse)\r\n\r\n // The store _must_ exist as either a prop or in context.\r\n // We'll check to see if it _looks_ like a Redux store first.\r\n // This allows us to pass through a `store` prop that is just a plain value.\r\n const didStoreComeFromProps =\r\n Boolean(props.store) &&\r\n Boolean(props.store!.getState) &&\r\n Boolean(props.store!.dispatch)\r\n const didStoreComeFromContext =\r\n Boolean(contextValue) && Boolean(contextValue!.store)\r\n\r\n if (\r\n process.env.NODE_ENV !== 'production' &&\r\n !didStoreComeFromProps &&\r\n !didStoreComeFromContext\r\n ) {\r\n throw new Error(\r\n `Could not find \"store\" in the context of ` +\r\n `\"${displayName}\". Either wrap the root component in a , ` +\r\n `or pass a custom React context provider to and the corresponding ` +\r\n `React context consumer to ${displayName} in connect options.`\r\n )\r\n }\r\n\r\n // Based on the previous check, one of these must be true\r\n const store: Store = didStoreComeFromProps\r\n ? props.store!\r\n : contextValue!.store\r\n\r\n const getServerState = didStoreComeFromContext\r\n ? contextValue!.getServerState\r\n : store.getState\r\n\r\n const childPropsSelector = React.useMemo(() => {\r\n // The child props selector needs the store reference as an input.\r\n // Re-create this selector whenever the store changes.\r\n return defaultSelectorFactory(store.dispatch, selectorFactoryOptions)\r\n }, [store])\r\n\r\n const [subscription, notifyNestedSubs] = React.useMemo(() => {\r\n if (!shouldHandleStateChanges) return NO_SUBSCRIPTION_ARRAY\r\n\r\n // This Subscription's source should match where store came from: props vs. context. A component\r\n // connected to the store via props shouldn't use subscription from context, or vice versa.\r\n const subscription = createSubscription(\r\n store,\r\n didStoreComeFromProps ? undefined : contextValue!.subscription\r\n )\r\n\r\n // `notifyNestedSubs` is duplicated to handle the case where the component is unmounted in\r\n // the middle of the notification loop, where `subscription` will then be null. This can\r\n // probably be avoided if Subscription's listeners logic is changed to not call listeners\r\n // that have been unsubscribed in the middle of the notification loop.\r\n const notifyNestedSubs =\r\n subscription.notifyNestedSubs.bind(subscription)\r\n\r\n return [subscription, notifyNestedSubs]\r\n }, [store, didStoreComeFromProps, contextValue])\r\n\r\n // Determine what {store, subscription} value should be put into nested context, if necessary,\r\n // and memoize that value to avoid unnecessary context updates.\r\n const overriddenContextValue = React.useMemo(() => {\r\n if (didStoreComeFromProps) {\r\n // This component is directly subscribed to a store from props.\r\n // We don't want descendants reading from this store - pass down whatever\r\n // the existing context value is from the nearest connected ancestor.\r\n return contextValue!\r\n }\r\n\r\n // Otherwise, put this component's subscription instance into context, so that\r\n // connected descendants won't update until after this component is done\r\n return {\r\n ...contextValue,\r\n subscription,\r\n } as ReactReduxContextValue\r\n }, [didStoreComeFromProps, contextValue, subscription])\r\n\r\n // Set up refs to coordinate values between the subscription effect and the render logic\r\n const lastChildProps = React.useRef()\r\n const lastWrapperProps = React.useRef(wrapperProps)\r\n const childPropsFromStoreUpdate = React.useRef()\r\n const renderIsScheduled = React.useRef(false)\r\n const isProcessingDispatch = React.useRef(false)\r\n const isMounted = React.useRef(false)\r\n\r\n const latestSubscriptionCallbackError = React.useRef()\r\n\r\n useIsomorphicLayoutEffect(() => {\r\n isMounted.current = true\r\n return () => {\r\n isMounted.current = false\r\n }\r\n }, [])\r\n\r\n const actualChildPropsSelector = React.useMemo(() => {\r\n const selector = () => {\r\n // Tricky logic here:\r\n // - This render may have been triggered by a Redux store update that produced new child props\r\n // - However, we may have gotten new wrapper props after that\r\n // If we have new child props, and the same wrapper props, we know we should use the new child props as-is.\r\n // But, if we have new wrapper props, those might change the child props, so we have to recalculate things.\r\n // So, we'll use the child props from store update only if the wrapper props are the same as last time.\r\n if (\r\n childPropsFromStoreUpdate.current &&\r\n wrapperProps === lastWrapperProps.current\r\n ) {\r\n return childPropsFromStoreUpdate.current\r\n }\r\n\r\n // TODO We're reading the store directly in render() here. Bad idea?\r\n // This will likely cause Bad Things (TM) to happen in Concurrent Mode.\r\n // Note that we do this because on renders _not_ caused by store updates, we need the latest store state\r\n // to determine what the child props should be.\r\n return childPropsSelector(store.getState(), wrapperProps)\r\n }\r\n return selector\r\n }, [store, wrapperProps])\r\n\r\n // We need this to execute synchronously every time we re-render. However, React warns\r\n // about useLayoutEffect in SSR, so we try to detect environment and fall back to\r\n // just useEffect instead to avoid the warning, since neither will run anyway.\r\n\r\n const subscribeForReact = React.useMemo(() => {\r\n const subscribe = (reactListener: () => void) => {\r\n if (!subscription) {\r\n return () => {}\r\n }\r\n\r\n return subscribeUpdates(\r\n shouldHandleStateChanges,\r\n store,\r\n subscription,\r\n // @ts-ignore\r\n childPropsSelector,\r\n lastWrapperProps,\r\n lastChildProps,\r\n renderIsScheduled,\r\n isMounted,\r\n childPropsFromStoreUpdate,\r\n notifyNestedSubs,\r\n reactListener\r\n )\r\n }\r\n\r\n return subscribe\r\n }, [subscription])\r\n\r\n useIsomorphicLayoutEffectWithArgs(captureWrapperProps, [\r\n lastWrapperProps,\r\n lastChildProps,\r\n renderIsScheduled,\r\n wrapperProps,\r\n childPropsFromStoreUpdate,\r\n notifyNestedSubs,\r\n ])\r\n\r\n let actualChildProps: Record\r\n\r\n try {\r\n actualChildProps = useSyncExternalStore(\r\n // TODO We're passing through a big wrapper that does a bunch of extra side effects besides subscribing\r\n subscribeForReact,\r\n // TODO This is incredibly hacky. We've already processed the store update and calculated new child props,\r\n // TODO and we're just passing that through so it triggers a re-render for us rather than relying on `uSES`.\r\n actualChildPropsSelector,\r\n getServerState\r\n ? () => childPropsSelector(getServerState(), wrapperProps)\r\n : actualChildPropsSelector\r\n )\r\n } catch (err) {\r\n if (latestSubscriptionCallbackError.current) {\r\n ;(\r\n err as Error\r\n ).message += `\\nThe error may be correlated with this previous error:\\n${latestSubscriptionCallbackError.current.stack}\\n\\n`\r\n }\r\n\r\n throw err\r\n }\r\n\r\n useIsomorphicLayoutEffect(() => {\r\n latestSubscriptionCallbackError.current = undefined\r\n childPropsFromStoreUpdate.current = undefined\r\n lastChildProps.current = actualChildProps\r\n })\r\n\r\n // Now that all that's done, we can finally try to actually render the child component.\r\n // We memoize the elements for the rendered child component as an optimization.\r\n const renderedWrappedComponent = React.useMemo(() => {\r\n return (\r\n // @ts-ignore\r\n \r\n )\r\n }, [reactReduxForwardedRef, WrappedComponent, actualChildProps])\r\n\r\n // If React sees the exact same element reference as last time, it bails out of re-rendering\r\n // that child, same as if it was wrapped in React.memo() or returned false from shouldComponentUpdate.\r\n const renderedChild = React.useMemo(() => {\r\n if (shouldHandleStateChanges) {\r\n // If this component is subscribed to store updates, we need to pass its own\r\n // subscription instance down to our descendants. That means rendering the same\r\n // Context instance, and putting a different value into the context.\r\n return (\r\n \r\n {renderedWrappedComponent}\r\n \r\n )\r\n }\r\n\r\n return renderedWrappedComponent\r\n }, [ContextToUse, renderedWrappedComponent, overriddenContextValue])\r\n\r\n return renderedChild\r\n }\r\n\r\n const _Connect = React.memo(ConnectFunction)\r\n\r\n type ConnectedWrapperComponent = typeof _Connect & {\r\n WrappedComponent: typeof WrappedComponent\r\n }\r\n\r\n // Add a hacky cast to get the right output type\r\n const Connect = _Connect as unknown as ConnectedComponent<\r\n typeof WrappedComponent,\r\n WrappedComponentProps\r\n >\r\n Connect.WrappedComponent = WrappedComponent\r\n Connect.displayName = ConnectFunction.displayName = displayName\r\n\r\n if (forwardRef) {\r\n const _forwarded = React.forwardRef(function forwardConnectRef(\r\n props,\r\n ref\r\n ) {\r\n // @ts-ignore\r\n return \r\n })\r\n\r\n const forwarded = _forwarded as ConnectedWrapperComponent\r\n forwarded.displayName = displayName\r\n forwarded.WrappedComponent = WrappedComponent\r\n return /*#__PURE__*/ hoistStatics(forwarded, WrappedComponent)\r\n }\r\n\r\n return /*#__PURE__*/ hoistStatics(Connect, WrappedComponent)\r\n }\r\n\r\n return wrapWithConnect\r\n}\r\n\r\nexport default connect as Connect\r\n","import {\r\n configureStore,\r\n ThunkAction,\r\n Action\r\n} from \"@reduxjs/toolkit\";\r\n\r\nimport {\r\n useSelector as useReduxSelector,\r\n useDispatch as useReduxDispatch,\r\n type TypedUseSelectorHook,\r\n } from \"react-redux\";\r\n\r\n/*\r\n *\r\n *\r\n * main store\r\n *\r\n *\r\n */\r\nimport { alignmentVirtualizationsSlice } from './VirtualizationReducers'\r\nexport const reduxStore = configureStore({\r\n reducer: {\r\n virtualizations: alignmentVirtualizationsSlice.reducer,\r\n }\r\n});\r\n\r\nexport const useAppDispatch = () => useReduxDispatch()\r\nexport const useAppSelector: TypedUseSelectorHook = useReduxSelector\r\n\r\n/* Types */\r\nexport type ReduxStore = typeof reduxStore\r\nexport type ReduxState = ReturnType\r\nexport type ReduxDispatch = typeof reduxStore.dispatch\r\nexport type ReduxThunkAction = ThunkAction<\r\n ReturnType,\r\n ReduxState,\r\n unknown,\r\n Action\r\n>","import { formatProdErrorMessage as _formatProdErrorMessage7 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage6 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage5 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage4 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage3 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage2 } from \"@reduxjs/toolkit\";\nimport { formatProdErrorMessage as _formatProdErrorMessage } from \"@reduxjs/toolkit\";\nimport type { Reducer, ReducersMapObject, Middleware, Action, StoreEnhancer, Store, UnknownAction } from 'redux';\nimport { applyMiddleware, createStore, compose, combineReducers, isPlainObject } from 'redux';\nimport type { DevToolsEnhancerOptions as DevToolsOptions } from './devtoolsExtension';\nimport { composeWithDevTools } from './devtoolsExtension';\nimport type { ThunkMiddlewareFor, GetDefaultMiddleware } from './getDefaultMiddleware';\nimport { buildGetDefaultMiddleware } from './getDefaultMiddleware';\nimport type { ExtractDispatchExtensions, ExtractStoreExtensions, ExtractStateExtensions } from './tsHelpers';\nimport type { Tuple } from './utils';\nimport type { GetDefaultEnhancers } from './getDefaultEnhancers';\nimport { buildGetDefaultEnhancers } from './getDefaultEnhancers';\nconst IS_PRODUCTION = process.env.NODE_ENV === 'production';\n/**\r\n * Options for `configureStore()`.\r\n *\r\n * @public\r\n */\n\nexport interface ConfigureStoreOptions> = Tuple>, E extends Tuple = Tuple, P = S> {\n /**\r\n * A single reducer function that will be used as the root reducer, or an\r\n * object of slice reducers that will be passed to `combineReducers()`.\r\n */\n reducer: Reducer | ReducersMapObject;\n /**\r\n * An array of Redux middleware to install, or a callback receiving `getDefaultMiddleware` and returning a Tuple of middleware.\r\n * If not supplied, defaults to the set of middleware returned by `getDefaultMiddleware()`.\r\n *\r\n * @example `middleware: (gDM) => gDM().concat(logger, apiMiddleware, yourCustomMiddleware)`\r\n * @see https://redux-toolkit.js.org/api/getDefaultMiddleware#intended-usage\r\n */\n\n middleware?: (getDefaultMiddleware: GetDefaultMiddleware) => M;\n /**\r\n * Whether to enable Redux DevTools integration. Defaults to `true`.\r\n *\r\n * Additional configuration can be done by passing Redux DevTools options\r\n */\n\n devTools?: boolean | DevToolsOptions;\n /**\r\n * The initial state, same as Redux's createStore.\r\n * You may optionally specify it to hydrate the state\r\n * from the server in universal apps, or to restore a previously serialized\r\n * user session. If you use `combineReducers()` to produce the root reducer\r\n * function (either directly or indirectly by passing an object as `reducer`),\r\n * this must be an object with the same shape as the reducer map keys.\r\n */\n // we infer here, and instead complain if the reducer doesn't match\n\n preloadedState?: P;\n /**\r\n * The store enhancers to apply. See Redux's `createStore()`.\r\n * All enhancers will be included before the DevTools Extension enhancer.\r\n * If you need to customize the order of enhancers, supply a callback\r\n * function that will receive a `getDefaultEnhancers` function that returns a Tuple,\r\n * and should return a Tuple of enhancers (such as `getDefaultEnhancers().concat(offline)`).\r\n * If you only need to add middleware, you can use the `middleware` parameter instead.\r\n */\n\n enhancers?: (getDefaultEnhancers: GetDefaultEnhancers) => E;\n}\nexport type Middlewares = ReadonlyArray>;\ntype Enhancers = ReadonlyArray;\n/**\r\n * A Redux store returned by `configureStore()`. Supports dispatching\r\n * side-effectful _thunks_ in addition to plain actions.\r\n *\r\n * @public\r\n */\n\nexport type EnhancedStore = ExtractStoreExtensions & Store, A>;\n/**\r\n * A friendly abstraction over the standard Redux `createStore()` function.\r\n *\r\n * @param options The store configuration.\r\n * @returns A configured Redux store.\r\n *\r\n * @public\r\n */\n\nexport function configureStore> = Tuple<[ThunkMiddlewareFor]>, E extends Tuple = Tuple<[StoreEnhancer<{\n dispatch: ExtractDispatchExtensions;\n}>, StoreEnhancer]>, P = S>(options: ConfigureStoreOptions): EnhancedStore {\n const getDefaultMiddleware = buildGetDefaultMiddleware();\n const {\n reducer = undefined,\n middleware,\n devTools = true,\n preloadedState = undefined,\n enhancers = undefined\n } = options || {};\n let rootReducer: Reducer;\n\n if (typeof reducer === 'function') {\n rootReducer = reducer;\n } else if (isPlainObject(reducer)) {\n rootReducer = ((combineReducers(reducer) as unknown) as Reducer);\n } else {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(1) : '`reducer` is a required argument, and must be a function or an object of functions that can be passed to combineReducers');\n }\n\n if (!IS_PRODUCTION && middleware && typeof middleware !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage2(2) : '`middleware` field must be a callback');\n }\n\n let finalMiddleware: Tuple>;\n\n if (typeof middleware === 'function') {\n finalMiddleware = middleware(getDefaultMiddleware);\n\n if (!IS_PRODUCTION && !Array.isArray(finalMiddleware)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage3(3) : 'when using a middleware builder function, an array of middleware must be returned');\n }\n } else {\n finalMiddleware = getDefaultMiddleware();\n }\n\n if (!IS_PRODUCTION && finalMiddleware.some((item: any) => typeof item !== 'function')) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage4(4) : 'each middleware provided to configureStore must be a function');\n }\n\n let finalCompose = compose;\n\n if (devTools) {\n finalCompose = composeWithDevTools({\n // Enable capture of stack traces for dispatched Redux actions\n trace: !IS_PRODUCTION,\n ...(typeof devTools === 'object' && devTools)\n });\n }\n\n const middlewareEnhancer = applyMiddleware(...finalMiddleware);\n const getDefaultEnhancers = buildGetDefaultEnhancers(middlewareEnhancer);\n\n if (!IS_PRODUCTION && enhancers && typeof enhancers !== 'function') {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage5(5) : '`enhancers` field must be a callback');\n }\n\n let storeEnhancers = typeof enhancers === 'function' ? enhancers(getDefaultEnhancers) : getDefaultEnhancers();\n\n if (!IS_PRODUCTION && !Array.isArray(storeEnhancers)) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage6(6) : '`enhancers` callback must return an array');\n }\n\n if (!IS_PRODUCTION && storeEnhancers.some((item: any) => typeof item !== 'function')) {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage7(7) : 'each enhancer provided to configureStore must be a function');\n }\n\n if (!IS_PRODUCTION && finalMiddleware.length && !storeEnhancers.includes(middlewareEnhancer)) {\n console.error('middlewares were provided, but middleware enhancer was not included in final enhancers - make sure to call `getDefaultEnhancers`');\n }\n\n const composedEnhancer: StoreEnhancer = finalCompose(...storeEnhancers);\n return createStore(rootReducer, (preloadedState as P), composedEnhancer);\n}","import { formatProdErrorMessage as _formatProdErrorMessage } from \"src/utils/formatProdErrorMessage\";\nimport compose from './compose';\nimport { Middleware, MiddlewareAPI } from './types/middleware';\nimport { StoreEnhancer, Dispatch } from './types/store';\n\n/**\n * Creates a store enhancer that applies middleware to the dispatch method\n * of the Redux store. This is handy for a variety of tasks, such as expressing\n * asynchronous actions in a concise manner, or logging every action payload.\n *\n * See `redux-thunk` package as an example of the Redux middleware.\n *\n * Because middleware is potentially asynchronous, this should be the first\n * store enhancer in the composition chain.\n *\n * Note that each middleware will be given the `dispatch` and `getState` functions\n * as named arguments.\n *\n * @param middlewares The middleware chain to be applied.\n * @returns A store enhancer applying the middleware.\n *\n * @template Ext Dispatch signature added by a middleware.\n * @template S The type of the state supported by a middleware.\n */\nexport default function applyMiddleware(): StoreEnhancer;\nexport default function applyMiddleware(middleware1: Middleware): StoreEnhancer<{\n dispatch: Ext1;\n}>;\nexport default function applyMiddleware(middleware1: Middleware, middleware2: Middleware): StoreEnhancer<{\n dispatch: Ext1 & Ext2;\n}>;\nexport default function applyMiddleware(middleware1: Middleware, middleware2: Middleware, middleware3: Middleware): StoreEnhancer<{\n dispatch: Ext1 & Ext2 & Ext3;\n}>;\nexport default function applyMiddleware(middleware1: Middleware, middleware2: Middleware, middleware3: Middleware, middleware4: Middleware): StoreEnhancer<{\n dispatch: Ext1 & Ext2 & Ext3 & Ext4;\n}>;\nexport default function applyMiddleware(middleware1: Middleware, middleware2: Middleware, middleware3: Middleware, middleware4: Middleware, middleware5: Middleware): StoreEnhancer<{\n dispatch: Ext1 & Ext2 & Ext3 & Ext4 & Ext5;\n}>;\nexport default function applyMiddleware(...middlewares: Middleware[]): StoreEnhancer<{\n dispatch: Ext;\n}>;\nexport default function applyMiddleware(...middlewares: Middleware[]): StoreEnhancer {\n return createStore => (reducer, preloadedState) => {\n const store = createStore(reducer, preloadedState);\n let dispatch: Dispatch = () => {\n throw new Error(process.env.NODE_ENV === \"production\" ? _formatProdErrorMessage(15) : 'Dispatching while constructing your middleware is not allowed. ' + 'Other middleware would not be applied to this dispatch.');\n };\n const middlewareAPI: MiddlewareAPI = {\n getState: store.getState,\n dispatch: (action, ...args) => dispatch(action, ...args)\n };\n const chain = middlewares.map(middleware => middleware(middlewareAPI));\n dispatch = compose(...chain)(store.dispatch);\n return {\n ...store,\n dispatch\n };\n };\n}","/**\n * Base react hook for interacting with virtualizations in the redux store.\n * the hook for initializng redux with visualization data\n */\nimport{ useEffect, useCallback } from \"react\";\n\nimport { \n IGenericVirtualizationComplete,\n //getAxisOffsets, \n initializeNewVirtualization as reduxInitializeNewVirtualization,\n setCellCount as reduxSetCellCount,\n setCellSize as reduxSetCellSize,\n setContainerSize as reduxSetContainerSize,\n setWorldOffset as reduxSetWorldOffset,\n setHoveredOffset as reduxSetHoveredOffset\n} from \"../../redux/VirtualizationReducers\";\nimport { \n IControllerVirtualizeReduxParams,\n IResponderVirtualizeReduxParams,\n VirtualizationRole,\n} from \"./VirtualizationTypes\";\nimport { useAppDispatch, useAppSelector } from \"../../redux/ReduxStore\";\n\n\n//\n// typing\n//\ninterface IFullyInitializedResponderReturn extends IGenericVirtualizationComplete {\n setWorldOffsetPx: (newWorldOffsetPx: number) => void;\n setHoveredOffsetPx: (mouseContainerOffsetPx?: number) => void;\n updateContainerSizePx: undefined;\n updateCellSizePx: undefined;\n updateCellCount: undefined;\n}\ninterface IFullyInitControllerReturn extends IGenericVirtualizationComplete {\n setWorldOffsetPx: (newWorldOffsetPx: number) => void;\n setHoveredOffsetPx: (mouseContainerOffsetPx?: number) => void;\n updateContainerSizePx: (newContainerSizePx: number) => void;\n updateCellSizePx: (newCellSizePx: number) => void;\n updateCellCount: (newCellCount: number) => void;\n}\n\nexport type VirtualizationInputParams = IResponderVirtualizeReduxParams | IControllerVirtualizeReduxParams | undefined;\nexport type VirtualizationReturnType = \n T extends undefined \n ? undefined \n : T extends IControllerVirtualizeReduxParams \n ? IFullyInitControllerReturn \n : IFullyInitializedResponderReturn;\n\n//\n// primary hook that deals with initializaiton of redux virtualizations\n//\nexport function useReduxVirtualization<\n T extends VirtualizationInputParams\n>(\n params: T,\n containerId: string,\n containerSizePx?: number\n): VirtualizationReturnType {\n \n const virtualization = useAppSelector(\n state => !params?.virtualizationId\n ? undefined \n : state.virtualizations[params.virtualizationId]\n );\n\n const isController = params?.role === VirtualizationRole.Controller;\n const dispatch = useAppDispatch();\n\n //no virtualization? create it if this is a controller\n useEffect(() => {\n if(isController && containerSizePx !== undefined){\n if(virtualization && virtualization.controllerContainerId !== containerId){\n console.warn(`Development possibly misconfigured - attempt to initialize multiple \n \"controller\" virtualizations. There must only be a single controller for each\n virtualization. Updating to the last created controller, but this may be an\n error.`);\n }\n if (!virtualization || virtualization.controllerContainerId !== containerId){\n dispatch(\n reduxInitializeNewVirtualization({\n virtualizationId: params?.virtualizationId,\n virtualization: {\n cellCount: params.cellCount,\n controllerContainerId: containerId, \n containerSizePx: containerSizePx, \n cellSizePx: params.cellSizePx, \n worldOffsetPx: 0\n }\n })\n );\n }\n }\n }, [\n containerSizePx,\n containerId,\n dispatch, \n isController, \n params?.virtualizationId,\n params?.cellCount,\n params?.cellSizePx,\n virtualization,\n ]);\n\n //\n //functions available to caller if initialized\n //\n const setWorldOffsetPx = useCallback((newWorldOffsetPx: number)=>{\n if (params?.virtualizationId){\n dispatch(reduxSetWorldOffset({\n virtualizationId: params.virtualizationId,\n worldOffsetPx: newWorldOffsetPx\n }))\n }\n }, [\n dispatch,\n params?.virtualizationId,\n ]);\n\n const setHoveredOffsetPx = useCallback((mouseContainerOffsetPx?: number)=>{\n if (params?.virtualizationId){\n dispatch(reduxSetHoveredOffset({\n virtualizationId: params.virtualizationId,\n mouseContainerOffsetPx: mouseContainerOffsetPx\n }))\n }\n }, [\n dispatch,\n params?.virtualizationId,\n ]);\n\n const updateContainerSizePx = useCallback((newContainerSizePx: number)=>{\n if (params?.virtualizationId){\n dispatch(reduxSetContainerSize({\n virtualizationId: params.virtualizationId,\n containerSizePx: newContainerSizePx\n }))\n }\n }, [\n dispatch,\n params?.virtualizationId,\n ]);\n\n const updateCellSizePx = useCallback((newCellSizePx: number)=>{\n if (params?.virtualizationId){\n dispatch(reduxSetCellSize({\n virtualizationId: params.virtualizationId,\n cellSizePx: newCellSizePx\n }))\n }\n }, [\n dispatch,\n params?.virtualizationId\n ]);\n\n const updateCellCount = useCallback((newCellCount: number)=>{\n if (params?.virtualizationId){\n dispatch(reduxSetCellCount({\n virtualizationId: params.virtualizationId,\n cellCount: newCellCount\n }))\n }\n }, [\n dispatch,\n params?.virtualizationId,\n ]);\n\n //\n // return nothing if not initialized\n // otherwise\n // - return the axis+cellCount if not a controller\n // - return the axis+cellCount+update functions if it is a controller\n //\n return !virtualization\n ? undefined\n : !isController\n ? { \n ...virtualization,\n setWorldOffsetPx: setWorldOffsetPx,\n setHoveredOffsetPx: setHoveredOffsetPx,\n updateContainerSizePx: undefined,\n updateCellSizePx: undefined,\n updateCellCount: undefined\n } as IFullyInitializedResponderReturn\n : {\n ...virtualization,\n setWorldOffsetPx: setWorldOffsetPx,\n setHoveredOffsetPx: setHoveredOffsetPx,\n updateContainerSizePx: updateContainerSizePx,\n updateCellSizePx: updateCellSizePx,\n updateCellCount: updateCellCount\n } as IFullyInitControllerReturn\n}\n","/**\n * Base react hook for a virtual vertical scrollbar.\n */\nimport \"./VirtualScrollbars.scss\";\nimport React, { useState, useCallback, useMemo, useRef } from \"react\";\nimport useSize from \"@react-hook/size\";\n\ninterface IVirtualScrollbarProps {\n visible: boolean;\n\n direction: \"horizontal\" | \"vertical\";\n\n worldSize: number;\n worldOffset: number;\n draggerFixedDimSize?: number;\n draggerVarDimMinSize?: number;\n\n oppositeScrollbarFixedDimSize: number; //gap in corner if there are scrollbars on both dimensions\n\n scrollbarMoved(newWorldOffset: number): void;\n}\n\nexport function VirtualScrollbar(props: IVirtualScrollbarProps) {\n const {\n visible,\n direction,\n \n draggerFixedDimSize = 10,\n draggerVarDimMinSize = 20,\n\n oppositeScrollbarFixedDimSize, //if this is a vertical scrollbar then horizontal scrollbar height\n scrollbarMoved,\n worldSize,\n worldOffset,\n } = props;\n\n const scrollbarHolderRef = useRef(null);\n const [holderWidth, holderHeight] = useSize(scrollbarHolderRef);\n const holderSize = direction === \"horizontal\"\n ? holderWidth : holderHeight;\n\n //state\n const [dragging, setDragging] = useState(false);\n const [dragPageOffsetPx, setDragPageOffsetPx] = useState(-1);\n const [dragStartScrollbarOffsetPx, setDragStartScrollbarOffsetPx] = useState(\n -1\n );\n \n //cache\n const holderStartOffset = direction === \"horizontal\"\n ? scrollbarHolderRef.current?.getBoundingClientRect().left\n : scrollbarHolderRef.current?.getBoundingClientRect().top;\n\n const scrollbarHolderProportions = useMemo(()=>{\n return holderStartOffset === undefined ? {\n draggerHolderSize: 0, draggerHolderStart: 0\n } : {\n draggerHolderSize: holderSize - oppositeScrollbarFixedDimSize,\n draggerHolderStart: holderStartOffset\n }\n }, [\n holderStartOffset,\n holderSize, \n oppositeScrollbarFixedDimSize\n ]);\n\n //calculate all sizing into one variable\n const scrollbarSizing = useMemo(() => {\n const draggerSizePx = Math.max(\n draggerVarDimMinSize, //min width of scrollbar is 20\n scrollbarHolderProportions.draggerHolderSize *\n (scrollbarHolderProportions.draggerHolderSize / worldSize)\n );\n const numScrollablePx = scrollbarHolderProportions.draggerHolderSize - draggerSizePx; //num client pixels avail to scroll\n const hiddenWorldSize = worldSize - (scrollbarHolderProportions.draggerHolderSize + \n oppositeScrollbarFixedDimSize);\n const worldToScrollablePixelsRatio = hiddenWorldSize / numScrollablePx; //e.g., 1 world pixel = 10 client pixel\n\n return {\n draggerSizePx: draggerSizePx,\n draggerOffsetPx: worldOffset / worldToScrollablePixelsRatio,\n worldToScrollablePixelsRatio: worldToScrollablePixelsRatio,\n numScrollablePx: numScrollablePx //the left of the scrollbar can go from zero to here.\n };\n }, [\n draggerVarDimMinSize,\n scrollbarHolderProportions.draggerHolderSize,\n oppositeScrollbarFixedDimSize,\n worldOffset,\n worldSize\n ]);\n\n /*\n *\n *\n * HELPER FUNCTIONS\n *\n *\n */\n\n /**\n * Calculate where a\n * @param suggestedScrollbarClientTop\n */\n const getWorldOffset = useCallback((draggerOffsetPx: number) => {\n return draggerOffsetPx * scrollbarSizing.worldToScrollablePixelsRatio;\n }, [\n scrollbarSizing.worldToScrollablePixelsRatio\n ]);\n\n /*\n *\n *\n * EVENT FUNCTIONS\n *\n *\n */\n const scrollbarDragMove = useCallback((e: React.MouseEvent) => {\n if (dragging && dragPageOffsetPx !== -1) {\n e.stopPropagation();\n e.preventDefault();\n const delta = (direction === \"horizontal\" ? e.pageX : e.pageY) - dragPageOffsetPx;\n const approxScrollbarOffsetPx = delta + dragStartScrollbarOffsetPx;\n scrollbarMoved(\n approxScrollbarOffsetPx <= 0 ? 0 : \n approxScrollbarOffsetPx >= scrollbarSizing.numScrollablePx ? \n getWorldOffset(scrollbarSizing.numScrollablePx) : \n getWorldOffset(approxScrollbarOffsetPx)\n );\n }\n }, [\n direction,\n dragging,\n dragPageOffsetPx,\n dragStartScrollbarOffsetPx,\n getWorldOffset,\n scrollbarMoved,\n scrollbarSizing.numScrollablePx\n ]);\n\n const scrollbarDragStart = useCallback((e: React.MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n setDragging(true);\n setDragPageOffsetPx(direction === \"horizontal\" ? e.pageX : e.pageY);\n setDragStartScrollbarOffsetPx(\n e.currentTarget.getBoundingClientRect()[\n direction === \"horizontal\" ? \"left\" : \"top\"\n ] - scrollbarHolderProportions.draggerHolderStart\n );\n }, [\n direction,\n scrollbarHolderProportions.draggerHolderStart\n ]);\n\n const scrollbarDragEnd = useCallback((e: React.MouseEvent) => {\n if (dragging) {\n e.stopPropagation();\n e.preventDefault();\n setDragging(false);\n setDragPageOffsetPx(-1);\n setDragStartScrollbarOffsetPx(-1);\n }\n }, [dragging]);\n\n /*\n *\n *\n * RENDER FUNCTIONS\n *\n *\n */\n //when dragging scrollbar, a div fills the entire screen so\n //that user doesn't have to be super precise in holding on\n //scrollbar (this is how it works in the browser natively)\n const renderedFullpageDragDiv = useMemo(() => {\n return (\n \n );\n }, [\n direction,\n dragging, \n scrollbarDragEnd, \n scrollbarDragMove\n ]);\n\n const renderedDragger = useMemo(() => {\n return (\n \n );\n }, [\n direction,\n draggerFixedDimSize,\n scrollbarSizing.draggerOffsetPx,\n scrollbarSizing.draggerSizePx,\n scrollbarDragStart,\n ]);\n\n const holderClicked = useCallback((\n e: React.MouseEvent\n )=>{\n const clientRect = e.currentTarget.getBoundingClientRect();\n const clickPosPx = direction === \"horizontal\"\n ? e.clientX - clientRect.left\n : e.clientY - clientRect.top;\n\n const newWorldOffset = getWorldOffset(\n clickPosPx - scrollbarSizing.draggerSizePx / 2 //move to middle of bar\n );\n scrollbarMoved(newWorldOffset);\n }, [\n direction,\n getWorldOffset,\n scrollbarMoved,\n scrollbarSizing.draggerSizePx\n ]);\n\n /*\n *\n *\n * RENDER\n *\n *\n */\n return (\n <>\n \n { //If it isn't visible then the offsets are not valid so just destroy node. Need to do\n //at this level as parent ref should reamin defined for size calculations.\n !visible ? undefined : renderedDragger\n }\n \n {renderedFullpageDragDiv}\n \n );\n}","/**\n * Base react hook for a virtual text viewer.\n */\nimport styles from \"./VirtualizedMatrixViewer.scss\";\nimport React, { useState, useEffect, useCallback, useRef, useMemo } from \"react\";\nimport * as PIXI from \"pixi.js\";\n\nimport { IBounds, ReactResizeSensor } from \"../ResizeSensorHook\";\nimport { generateUUIDv4 } from \"../../common/Utils\";\nimport {\n IVirtualizeParams,\n IVirtualizedHorizontalContents, \n IVirtualizedHorizontalViewer, \n IVirtualizedMatrixContent, \n IVirtualizedMatrixViewer, \n IVirtualizedVerticalContents, \n IVirtualizedVerticalViewer, \n ScrollbarOptions,\n VirtualizationStrategy\n} from \"./VirtualizationTypes\";\nimport { useReduxVirtualization } from \"./VirtualizedMatrixReduxHook\";\nimport { VirtualScrollbar } from \"./VirtualScrollbarHook\";\n\n\n//\n// exported functions for each virtualized viewport:\n// full matrix, x-axis only, y-axis only and the same with\n// and the same as \"primary\" - which means this is the main axis\n// for the given \"syncedAxisUUID\" and will be the one to initialize\n// the axis and update sizing.\n//\nexport function VirtualizedVerticalViewer(props: IVirtualizedVerticalViewer) {\n return GenericVirtualizedMatrixViewer({\n getContent: props.getContentForRows,\n params: {\n verticalParams: props.verticalParams,\n }\n });\n}\nexport function VirtualizedHorizontalViewer(props: IVirtualizedHorizontalViewer) {\n return GenericVirtualizedMatrixViewer({\n getContent: props.getContentForColumns,\n params: {\n horizontalParams: props.horizontalParams,\n }\n });\n}\nexport function VirtualizedMatrixViewer(props: IVirtualizedMatrixViewer) {\n return GenericVirtualizedMatrixViewer({\n getContent: props.getMatrixContent,\n params: {\n horizontalParams: props.horizontalParams,\n verticalParams: props.verticalParams,\n }\n });\n}\n\n//\n// non-exported function - uses same mechanism x/y/xy virtualization\n//\ninterface IVirtualizedMatrixOrRowOrColumn {\n getContent(params: \n IVirtualizedHorizontalContents | \n IVirtualizedVerticalContents | \n IVirtualizedMatrixContent\n ): JSX.Element;\n \n params: {\n horizontalParams?: IVirtualizeParams;\n verticalParams?: IVirtualizeParams;\n };\n}\n\n/**\n * \n * @param props \n * @returns \n */\nfunction GenericVirtualizedMatrixViewer(props: IVirtualizedMatrixOrRowOrColumn) {\n //deconstruct props\n const {\n getContent\n } = props;\n\n const {\n horizontalParams: horizParams,\n verticalParams: vertParams\n } = props.params;\n\n //misc\n const scrollbarWidthOrHeight = 12;\n const scrollbarMinWidthOrHeight = 25;\n\n //ref\n const ref = useRef(null);\n\n //state\n const [mouseHovering, setMouseHovering] = useState(false);\n const [containerBounds, setCountainerBounds] = useState(undefined);\n const [containerUniqueId] = useState(generateUUIDv4());\n\n //virtualization initialization\n const horizVirtualizationAxis = useReduxVirtualization(\n horizParams,\n containerUniqueId,\n containerBounds?.width\n );\n const vertVirtualizationAxis = useReduxVirtualization(\n vertParams,\n containerUniqueId,\n containerBounds?.height\n );\n\n //\n //useCallbacks\n //\n const horizUpdateContainerSizePx = horizVirtualizationAxis?.updateContainerSizePx;\n const vertUpdateContainerSizePx = vertVirtualizationAxis?.updateContainerSizePx;\n const horizBoundsUpdated = horizParams?.containerBoundsUpdated;\n const vertBoundsUpdated = vertParams?.containerBoundsUpdated;\n const viewportSizeChanged = useCallback((bounds: IBounds) => {\n setCountainerBounds(bounds);\n\n if(horizUpdateContainerSizePx){\n horizUpdateContainerSizePx(bounds.width);\n }\n if(vertUpdateContainerSizePx){\n vertUpdateContainerSizePx(bounds.height);\n }\n if(horizBoundsUpdated){\n horizBoundsUpdated(bounds);\n }\n if(vertBoundsUpdated){\n vertBoundsUpdated(bounds);\n }\n }, [\n horizBoundsUpdated,\n vertBoundsUpdated,\n horizUpdateContainerSizePx,\n vertUpdateContainerSizePx,\n ]);\n\n //\n //useEffects\n //\n useEffect(() => {\n PIXI.settings.RENDER_OPTIONS!.hello = false;\n PIXI.BaseTexture.defaultOptions.scaleMode = PIXI.SCALE_MODES.NEAREST;\n\n //fix safari-specific bug - this function will tell the window to stop\n //blocking scroll events on the \"single-sequence-text\" class\n //stopSafariFromBlockingWindowWheel(\"av2-virtualized-matrix\");\n //stopSafariFromBlockingWindowWheel(\"av2-wheel-scroller\");\n //stopSafariFromBlockingWindowWheel(\"hidden-residues-for-copy-paste\");\n }, []);\n\n //set row and column height in pixels\n const horizUpdateCellSizePx = horizVirtualizationAxis?.updateCellSizePx;\n const vertUpdateCellSizePx = vertVirtualizationAxis?.updateCellSizePx;\n useEffect(() => {\n if(horizParams?.cellSizePx !== undefined && horizUpdateCellSizePx){\n horizUpdateCellSizePx(horizParams.cellSizePx);\n }\n if(vertParams?.cellSizePx !== undefined && vertUpdateCellSizePx){\n vertUpdateCellSizePx(vertParams?.cellSizePx);\n }\n }, [\n horizUpdateCellSizePx,\n vertUpdateCellSizePx,\n horizParams?.cellSizePx,\n vertParams?.cellSizePx\n ]);\n\n //set num columns / num rows\n const horizUpdateCellCount = horizVirtualizationAxis?.updateCellCount;\n const vertUpdateCellCount = vertVirtualizationAxis?.updateCellCount;\n useEffect(() => {\n if(horizUpdateCellCount !== undefined && horizParams?.cellCount){\n horizUpdateCellCount(horizParams.cellCount);\n }\n if(vertUpdateCellCount !== undefined && vertParams?.cellCount){\n vertUpdateCellCount(vertParams.cellCount);\n }\n }, [\n horizUpdateCellCount,\n vertUpdateCellCount,\n horizParams?.cellCount,\n vertParams?.cellCount,\n ]);\n\n\n //\n // cache / useMemos\n //\n\n //misc\n const disableVerticalScrolling = \n !vertVirtualizationAxis || vertParams?.scrollbar===ScrollbarOptions.NeverOn\n ? true\n : vertVirtualizationAxis.containerSizePx >= vertVirtualizationAxis.worldRenderSizePx;\n const disableHorizontalScrolling =\n !horizVirtualizationAxis || horizParams?.scrollbar===ScrollbarOptions.NeverOn\n ? true\n : horizVirtualizationAxis.containerSizePx >= horizVirtualizationAxis.worldRenderSizePx;\n \n const reduxInitialized = \n (!vertParams || (vertParams && vertVirtualizationAxis)) &&\n (!horizParams || (horizParams && horizVirtualizationAxis));\n \n\n //\n // load the content requested from the parent\n //\n const contentFromParent = useMemo(() => {\n const horizContentParams = horizVirtualizationAxis?.firstIdxToRender === undefined\n ? undefined : {\n firstColIdxToRender: horizVirtualizationAxis.firstIdxToRender,\n lastColIdxToRender: horizVirtualizationAxis.lastIdxToRender,\n renderWidthPx: horizVirtualizationAxis.subsetRenderSizePx,\n renderShiftLeftPx: horizVirtualizationAxis.offsetForRenderingIdxsOnly,\n worldWidthPx: horizVirtualizationAxis.worldRenderSizePx,\n worldShiftLeftPx: horizVirtualizationAxis.worldOffsetPx,\n } as IVirtualizedHorizontalContents;\n\n const vertContentParams = vertVirtualizationAxis?.firstIdxToRender === undefined\n ? undefined : {\n firstRowIdxToRender: vertVirtualizationAxis.firstIdxToRender,\n lastRowIdxToRender: vertVirtualizationAxis.lastIdxToRender,\n renderHeightPx: vertVirtualizationAxis.subsetRenderSizePx,\n renderShiftTopPx: vertVirtualizationAxis.offsetForRenderingIdxsOnly,\n worldHeightPx: vertVirtualizationAxis.worldRenderSizePx,\n worldShiftTopPx: vertVirtualizationAxis.worldOffsetPx,\n } as IVirtualizedVerticalContents;\n \n if(horizContentParams && vertContentParams){\n return getContent({\n ...horizContentParams,\n ...vertContentParams\n } as IVirtualizedMatrixContent);\n }\n else if(horizContentParams){\n return getContent(horizContentParams);\n }\n else if(vertContentParams){\n return getContent(vertContentParams);\n }\n return
uninitialized?
;//todo: maybe let parent pass an \"uninitialized message?\"\n }, [\n getContent,\n horizVirtualizationAxis?.firstIdxToRender,\n horizVirtualizationAxis?.lastIdxToRender,\n horizVirtualizationAxis?.subsetRenderSizePx,\n horizVirtualizationAxis?.offsetForRenderingIdxsOnly,\n horizVirtualizationAxis?.worldRenderSizePx,\n horizVirtualizationAxis?.worldOffsetPx,\n\n vertVirtualizationAxis?.firstIdxToRender,\n vertVirtualizationAxis?.lastIdxToRender,\n vertVirtualizationAxis?.subsetRenderSizePx,\n vertVirtualizationAxis?.offsetForRenderingIdxsOnly,\n vertVirtualizationAxis?.worldRenderSizePx,\n vertVirtualizationAxis?.worldOffsetPx\n ]);\n\n /*const horizontalSelectedRender = useMemo(()=>{\n return reduxStateHorizontal?.selected.map((elem, idx)=>\n
\n )\n }, [reduxStateHorizontal?.selected]);\n\n const verticalSelectedRender = useMemo(()=>{\n return reduxStateVertical?.selected.map((elem, idx)=>\n
\n )\n }, [reduxStateVertical?.selected]);*/\n\n const vertSetWorldOffsetPx = vertVirtualizationAxis?.setWorldOffsetPx;\n const verticalScrollbarRender = useMemo(()=>{\n return disableVerticalScrolling || !vertSetWorldOffsetPx\n ? undefined \n : (\n {\n vertSetWorldOffsetPx(newWorldLeft);\n }}\n />\n );\n }, [\n disableHorizontalScrolling, \n disableVerticalScrolling,\n mouseHovering,\n vertParams?.scrollbar,\n vertSetWorldOffsetPx,\n vertVirtualizationAxis?.worldRenderSizePx,\n vertVirtualizationAxis?.worldOffsetPx,\n ]);\n\n const horizSetWorldOffsetPx = horizVirtualizationAxis?.setWorldOffsetPx;\n const horizontalScrollbarRender = useMemo(()=>{\n return disableHorizontalScrolling || !horizSetWorldOffsetPx\n ? undefined \n : (\n {\n horizSetWorldOffsetPx(newWorldLeft);\n }}\n />\n )\n }, [\n disableHorizontalScrolling,\n disableVerticalScrolling,\n mouseHovering,\n horizParams?.scrollbar,\n horizSetWorldOffsetPx,\n horizVirtualizationAxis?.worldRenderSizePx,\n horizVirtualizationAxis?.worldOffsetPx\n ]);\n \n const handleWheelFn = useCallback((event: React.WheelEvent) => {\n if (event.deltaX !== 0 && horizSetWorldOffsetPx){\n horizSetWorldOffsetPx(\n horizVirtualizationAxis.worldOffsetPx + event.deltaX\n );\n }\n if (event.deltaY !== 0 && vertSetWorldOffsetPx){\n vertSetWorldOffsetPx(\n vertVirtualizationAxis.worldOffsetPx + event.deltaY\n );\n }\n }, [\n horizSetWorldOffsetPx,\n vertSetWorldOffsetPx,\n horizVirtualizationAxis?.worldOffsetPx,\n vertVirtualizationAxis?.worldOffsetPx,\n ]);\n\n /*\n const handleClickFn = useCallback((event: React.MouseEvent)=>{\n const bounds = event.currentTarget.getBoundingClientRect();\n const viewportX = event.clientX - bounds.left < 0 ? 0 : event.clientX - bounds.left;\n const viewportY = event.clientY - bounds.top < 0 ? 0 : event.clientY - bounds.top;\n if (horizontalReduxId){\n dispatch(\n toggleReduxSelectedPosition({\n id: horizontalReduxId,\n mouseViewportOffsetX: viewportX,\n })\n );\n }\n if (verticalReduxId){\n dispatch(\n toggleReduxSelectedSequence({\n id: verticalReduxId,\n mouseViewportOffsetY: viewportY,\n })\n );\n }\n }, [\n dispatch,\n horizontalReduxId, \n verticalReduxId\n ]);*/\n\n const setColHovered = horizVirtualizationAxis?.setHoveredOffsetPx;\n const setRowHovered = vertVirtualizationAxis?.setHoveredOffsetPx;\n\n const handleMousemoveFn = useCallback((event: React.MouseEvent) => {\n const bounds = event.currentTarget.getBoundingClientRect();\n const viewportX = event.clientX - bounds.left < 0 ? 0 : event.clientX - bounds.left;\n const viewportY = event.clientY - bounds.top < 0 ? 0 : event.clientY - bounds.top;\n\n if(setColHovered) setColHovered(viewportX);\n if(setRowHovered) setRowHovered(viewportY);\n }, [\n setColHovered,\n setRowHovered\n ]);\n\n const handleMouseoutFn = useCallback(() => {\n if(setColHovered) setColHovered(undefined);\n if(setRowHovered) setRowHovered(undefined);\n }, [\n setColHovered,\n setRowHovered\n ]);\n\n const renderedHoverContent = useMemo(()=>{\n if(!containerBounds) { return undefined; }\n const hoverTrackerSize = +styles.hoverTrackerSize; //needs to also be managed in css\n \n const showYRight = vertVirtualizationAxis?.hoveredEvent && (\n vertParams?.hoverTracker === \"start\" || vertParams?.hoverTracker === \"both\"\n );\n const showYLeft = vertVirtualizationAxis?.hoveredEvent && (\n vertParams?.hoverTracker === \"end\" || vertParams?.hoverTracker === \"both\"\n );\n const showXDown = horizVirtualizationAxis?.hoveredEvent && (\n horizParams?.hoverTracker === \"start\" || horizParams?.hoverTracker === \"both\"\n );\n const showXUp = horizVirtualizationAxis?.hoveredEvent && (\n horizParams?.hoverTracker === \"end\" || horizParams?.hoverTracker === \"both\"\n );\n\n return (\n <>\n {!vertParams?.hoverTracker ? undefined : \n \n
\n
\n \n }\n {!horizParams?.hoverTracker ? undefined : \n \n
\n\n
\n \n }\n \n );\n /*return (\n <>\n {!vertVirtualizationAxis?.hoveredEvent ? undefined : \n <>\n {vertParams?.hoverTracker !== \"start\" && vertParams?.hoverTracker !== \"both\" ? undefined :\n
}\n\n {vertParams?.hoverTracker !== \"end\" && vertParams?.hoverTracker !== \"both\" ? undefined :\n
}\n \n }\n\n\n {!horizVirtualizationAxis?.hoveredEvent ? undefined : \n <>\n {horizParams?.hoverTracker !== \"start\" && horizParams?.hoverTracker !== \"both\" ? undefined :\n
}\n\n {horizParams?.hoverTracker !== \"end\" && horizParams?.hoverTracker !== \"both\" ? undefined :\n
}\n \n }\n \n );*/\n }, [\n containerBounds,\n horizParams?.hoverTracker,\n horizVirtualizationAxis?.hoveredEvent,\n vertParams?.hoverTracker,\n vertVirtualizationAxis?.hoveredEvent,\n ]);\n\n const [\n leftShadowIndicator, \n topShadowIndicator, \n bottomShadowIndicator, \n rightShadowIndicator\n ] = useMemo(()=>{\n const leftShadow = !horizVirtualizationAxis?.worldOffsetPx \n ? undefined : \"17px 0 16px -16px rgba(0, 0, 0, 0.4) inset\";\n const topShadow = !vertVirtualizationAxis?.worldOffsetPx \n ? undefined : \"0 17px 16px -16px rgba(0, 0, 0, 0.4) inset\";\n const bottomShadow = (\n !vertVirtualizationAxis?.worldRenderSizePx ||\n vertVirtualizationAxis.worldRenderSizePx <=\n vertVirtualizationAxis.worldOffsetPx + vertVirtualizationAxis.containerSizePx\n ) ? undefined : \"0 -17px 16px -16px rgba(0, 0, 0, 0.4) inset\";\n\n const rightShadow = (\n !horizVirtualizationAxis?.worldRenderSizePx ||\n horizVirtualizationAxis.worldRenderSizePx <=\n horizVirtualizationAxis.worldOffsetPx + horizVirtualizationAxis.containerSizePx\n ) ? undefined : \"-17px 0 16px -16px rgba(0, 0, 0, 0.4) inset\";\n\n return [leftShadow, topShadow, bottomShadow, rightShadow];\n }, [\n horizVirtualizationAxis?.worldOffsetPx,\n horizVirtualizationAxis?.worldRenderSizePx,\n horizVirtualizationAxis?.containerSizePx,\n vertVirtualizationAxis?.worldOffsetPx,\n vertVirtualizationAxis?.worldRenderSizePx,\n vertVirtualizationAxis?.containerSizePx,\n ]);\n\n const finalRenderedContent = useMemo(()=>{\n \n return (\n <>\n
\n {!leftShadowIndicator ? undefined :\n
}\n {!rightShadowIndicator ? undefined :\n
}\n {!topShadowIndicator ? undefined : \n
}\n {!bottomShadowIndicator ? undefined :\n
}\n \n { !reduxInitialized || !ref //TODO: one area where we reinitialize stage\n ? (undefined) \n : (\n // simple way of enabling wheel scrolling and monitoring of\n // mouse over events \n
\n {renderedHoverContent}\n\n \n {\n //request matrix - cached above\n contentFromParent\n } \n
\n
\n )}\n
\n { verticalScrollbarRender }\n { horizontalScrollbarRender }\n \n )\n }, [\n contentFromParent, \n handleMousemoveFn,\n handleMouseoutFn,\n handleWheelFn, \n horizVirtualizationAxis?.offsetForRenderingIdxsOnly,\n horizVirtualizationAxis?.worldOffsetPx,\n horizParams?.overflowVisible,\n horizParams?.virtualizationStrategy,\n horizontalScrollbarRender, \n reduxInitialized,\n renderedHoverContent,\n verticalScrollbarRender,\n vertParams?.overflowVisible,\n vertParams?.virtualizationStrategy,\n vertVirtualizationAxis?.offsetForRenderingIdxsOnly,\n vertVirtualizationAxis?.worldOffsetPx,\n\n\n leftShadowIndicator, \n topShadowIndicator, \n bottomShadowIndicator, \n rightShadowIndicator,\n horizParams?.startScrolledIndicatorStyleAttr,\n horizParams?.endScrolledIndicatorStyleAttr,\n vertParams?.startScrolledIndicatorStyleAttr,\n vertParams?.endScrolledIndicatorStyleAttr,\n \n ]);\n\n //\n //\n //\n // RENDER\n //\n //\n //\n /*const resizeSensor = useMemo(()=>{\n return (\n \n )\n }, [viewportSizeChanged]);*/\n return (\n
{\n setMouseHovering(true);\n }}\n onMouseLeave={() => {\n setMouseHovering(false);\n }}\n >\n { /*horizontalSelectedRender*/ }\n { /*verticalSelectedRender*/ }\n {\n \n }\n {finalRenderedContent}\n
\n );\n}\n","\n/**\n * Get the font family, width and height of the fixed width font used for the\n * alignments\n * inspired by https://stackoverflow.com/questions/118241\n */\n\nexport const DEFAULT_FONT_FAMILY = window.getComputedStyle(\n document.body\n).getPropertyValue(\"font-family\");\n\n\nexport const MONO_FONT_FAMILY =\n 'Monaco, Menlo, \"Ubuntu Mono\", Consolas, source-code-pro, monospace';\nlet HIDDEN_DIV: undefined | HTMLDivElement = undefined;\nconst MONO_FONT_DETAILS_CACHE: Map<\n number, {\n width: number;\n height: number;\n }\n> = new Map();\n\nconst DEFAULT_FONT_DETAILS_CACHE: Map<\n number, {\n width: number;\n height: number;\n }\n> = new Map();\n\nexport function getAlignmentFontDetails(fontSize: number, mono: boolean) {\n\n if(\n (mono && !MONO_FONT_DETAILS_CACHE.has(fontSize)) ||\n (!mono && !DEFAULT_FONT_DETAILS_CACHE.has(fontSize))\n ){\n if (!HIDDEN_DIV) {\n HIDDEN_DIV = document.createElement(\"div\");\n document.body.appendChild(HIDDEN_DIV);\n HIDDEN_DIV.style.position = \"absolute\";\n HIDDEN_DIV.style.left = \"-1000px\";\n HIDDEN_DIV.style.top = \"-1000px\";\n HIDDEN_DIV.innerHTML = \"X\";\n }\n HIDDEN_DIV.style.fontSize = fontSize + \"px\";\n HIDDEN_DIV.style.fontFamily = mono \n ? MONO_FONT_FAMILY\n : \"\";\n const boundingRect = HIDDEN_DIV.getBoundingClientRect();\n const cache = mono \n ? MONO_FONT_DETAILS_CACHE\n : DEFAULT_FONT_DETAILS_CACHE;\n cache.set(fontSize, {\n width: boundingRect.width,\n height: boundingRect.height,\n })\n }\n \n return mono \n ? MONO_FONT_DETAILS_CACHE.get(fontSize)!\n : DEFAULT_FONT_DETAILS_CACHE.get(fontSize)!;\n}\n\n\n\nconst CANVAS_CONTEXT_CACHE = new OffscreenCanvas(1,1).getContext(\"2d\")!;\nexport function getMaxStringCanvasWidth(props: {\n fontSize: number, \n stringsToMeasure: string[],\n maxWidthAllowed?: number, //speed up calculation if it goes over this number quits\n fontFamily?: string,\n fontWeight?: \"normal\" | \"bold\"\n}) {\n const {\n fontSize, \n maxWidthAllowed,\n stringsToMeasure, \n fontFamily = DEFAULT_FONT_FAMILY,\n fontWeight = \"normal\"\n } = props;\n \n CANVAS_CONTEXT_CACHE.font = `${fontSize}px ${fontWeight} ${fontFamily}`;\n var toreturn = 0;\n for(var idx = 0; idx < stringsToMeasure.length; idx++){\n const width = CANVAS_CONTEXT_CACHE.measureText(\n stringsToMeasure[idx]\n ).width;\n toreturn = toreturn < width ? width : toreturn;\n if(maxWidthAllowed && toreturn >= maxWidthAllowed){\n return maxWidthAllowed;\n }\n }\n return Math.ceil(toreturn);\n}\n\n//\n//NOTE: This is much slower than canvas measurement\n//\n//export function getMaxStringWidth(props: {\n// fontSize: number, \n// stringsToTest: string[]\n// fontFamily?: string,\n//}) {\n// const {\n// fontSize, \n// stringsToTest, \n// fontFamily = DEFAULT_FONT_FAMILY\n// } = props;\n// const tmpElement = document.createElement(\"div\");\n// document.body.appendChild(tmpElement);\n// tmpElement.style.position = \"absolute\";\n// tmpElement.style.fontFamily = fontFamily;\n// tmpElement.style.left = \"-1000px\";\n// tmpElement.style.top = \"-1000px\";\n// tmpElement.style.fontSize = fontSize + \"px\";\n// \n// var toreturn = 0;\n// for(var idx = 0; idx < stringsToTest.length; idx++){\n// tmpElement.innerHTML = stringsToTest[idx];\n// const width = tmpElement.getBoundingClientRect().width;\n// toreturn = toreturn < width ? width : toreturn;\n// }\n// document.body.removeChild(tmpElement);\n// return toreturn;\n//}\n\n// BENCHMARKING\n//const keys = Object.keys(columns);\n//\n//const randomIndiciesToCheck: number[] = [];\n//for(var i = 0; i < 1000; i++){\n// randomIndiciesToCheck.push(\n// Math.floor(Math.random() * 23626)\n// );\n//}\n//const calcAllWidths = (totest: \"div\" | \"canvas\") => {\n// const start = performance.now();\n// console.log(`--- ${totest} ---`);\n// for(var i = 0; i < keys.length; i++){\n// const startCol = performance.now();\n// const col = columns[keys[i]];\n// const strsToTest = randomIndiciesToCheck.map((idx)=>{\n// return col.rawData[idx] as string;\n// });\n// const width = totest === \"div\" \n// ? getMaxStringWidth({\n// fontSize: fontSize, \n// stringsToTest: strsToTest //data\n// })\n// : getMaxStringCanvasWidth({\n// fontSize: fontSize, \n// stringsToMeasure: strsToTest //data\n// })\n// console.log(\n// `- col \"${col.initialColumnName}\" took ${performance.now() - startCol}ms [max width: ${width}]`\n// );\n// }\n// console.log(`Execution time ${totest}: ${performance.now() - start} ms`);\n//}\n//calcAllWidths(\"div\");\n//calcAllWidths(\"canvas\");","/**\n * Hook for rendering the position axis\n */\nimport \"./PositionalAxis.scss\";\nimport React, { useCallback, useMemo, useState } from \"react\";\nimport { generateUUIDv4 } from \"../common/Utils\";\nimport { IControllerRole, IResponderRole, IVirtualizeParamBasics, ScrollbarOptions, VirtualizationRole, VirtualizationStrategy } from \"./virtualization/VirtualizationTypes\";\nimport { VirtualizedHorizontalViewer } from \"./virtualization/VirtualizedMatrixViewerHook\";\nimport { MONO_FONT_FAMILY } from \"../common/FontUtils\";\n\n\n\n/**\n * Generate a string axis (positional information) with one character per position\n * through the maxLength. Taken from alignmentviewer 1.0:\n * https://github.com/sanderlab/alignmentviewer\n * May want to implement this better in the future (SVG + sliding tooltip for cursor?)\n * UPDATE: actually works pretty well even for large numbers\n * |....:..10|....:..20|....:..30|....:..40| ->\n * |....12310|....12320|....12330|....12340|....12350|....12360|\n */\nexport const getPositionalAxisRuler = (maxLength: number): string => {\n let s = \"\"; // should be a better way to do this to be honest\n for (let i = 1; i <= maxLength; i++) {\n const Q = i % 10 === 0;\n const Q5 = !Q && i % 5 === 0;\n s += Q ? \"|\" : Q5 ? \":\" : \".\";\n if (!Q) {\n continue;\n }\n const sn = \"\" + i;\n const np = s.length - sn.length - 1; // where num starts\n if (np < 0) {\n continue;\n }\n s = s.substring(0, np) + sn + \"|\";\n }\n return s;\n};\n\n\n/**\n * @param props\n */\nexport function PositionalAxis(props: {\n alignmentUUID: string;\n horizVirtualization: IControllerRole | IResponderRole | \"Automatic\" | \"None\";\n fontSize: number;\n positions: number[];\n residueWidth: number;\n hoverTracker?: IVirtualizeParamBasics[\"hoverTracker\"]\n}) {\n const {\n alignmentUUID,\n fontSize,\n positions,\n residueWidth,\n hoverTracker = \"end\"\n } = props;\n\n const maxLength = Math.max(...positions) + 1; // positions is index based so add 1\n\n const containerId = useState(generateUUIDv4());\n const horizVirtualization = useMemo(()=>{\n return props.horizVirtualization === \"None\"\n ? undefined\n : props.horizVirtualization === \"Automatic\"\n ? {\n virtualizationId: \n `x_auto_generated_positionalaxis_virtualization_${alignmentUUID}_${containerId}`,\n role: VirtualizationRole.Controller,\n cellCount: maxLength,\n cellSizePx: residueWidth,\n } as IControllerRole\n : props.horizVirtualization;\n }, [\n alignmentUUID, \n containerId,\n maxLength, \n props.horizVirtualization, \n residueWidth\n ]);\n \n //const mouseHoverStarted = useCallback((\n // idx: number, \n // e: React.MouseEvent\n //)=>{ }, []);\n //const mouseHoverEnded = useCallback((\n // idx: number, \n // e: React.MouseEvent\n //)=>{ }, []);\n\n /**\n * Generate a string axis (positional information) with one character per position\n * through the maxLength. Taken from alignmentviewer 1.0:\n * https://github.com/sanderlab/alignmentviewer\n * May want to implement this better in the future (SVG + sliding tooltip for cursor?)\n * UPDATE: actually works pretty well even for large numbers\n * |....:..10|....:..20|....:..30|....:..40| ->\n * |....12310|....12320|....12330|....12340|....12350|....12360|\n */\n const fullRuler = useMemo((): React.JSX.Element[] => {\n return getPositionalAxisRuler(maxLength).split(\"\").map((char, idx)=>{\n return (\n {mouseHoverStarted(idx, e)}}\n //onMouseLeave={(e)=>{mouseHoverEnded(idx, e)}}\n >\n {char}\n \n );\n });\n \n }, [maxLength]);\n\n const renderedAxis = useMemo(()=>{\n return (\n
\n {fullRuler}\n
\n );\n }, [fullRuler, fontSize]);\n\n const getContent = useCallback(()=>{\n return renderedAxis;\n }, [renderedAxis]);\n\n return (\n !horizVirtualization\n ? undefined\n : \n );\n}\n","/**\n * A base class for generating global objects that are passed as \n * props and are serializable to the url and local storage, e.g.,\n * implementing classes include ResidueColoring, PositionsToStyle, etc.\n */\n\n\nexport interface IPropObjectInstanceInList{\n key: string;\n description: string;\n}\n\n//\n// the standard property list object\n//\nexport function IListOfPropObjects(\n allProps: T[]\n){\n return {\n list: allProps,\n //serial an object using the key property - must exist in all props \n //or returns null\n serialize: (obj: T) => {\n return allProps.find(s => s === obj)?.key;\n },\n deserialize: (key: string) => {\n return allProps.find(s => s.key === key);\n }\n }\n}\n\n\n\n/* first try:\n//typescript definitions - confusing way of forcing \ninterface IPropObjectInstance {\n key: string;\n description: string;\n}\n\n// original implementation had this confusing typescript definitions to\n// for the static implementation in the derived class, but in the end\n// we are able to do a simple abstract base class.\n//\ntype StaticImplements = any;\ninterface IPropObjectStaticMethods {\n list: () => IPropObjectInstance[];\n serialize: (instance: IPropObjectInstance) => string;\n deserialize: (key: string) => IPropObjectInstance | undefined;\n}\n\n//export abstract class BaseGlobalObject implements IPropObjectInstance{\nexport abstract class BaseGlobalObject implements StaticImplements<\n IPropObjectStaticMethods, typeof BaseGlobalObject\n>{\n\n constructor(\n public readonly key: string,\n public readonly description: string,\n excludeFromList?: boolean\n ){\n if(!excludeFromList){\n BaseGlobalObject._INSTANCES.push(this);\n }\n }\n\n static serialize(instance: BaseGlobalObject){\n return instance.key;\n };\n static deserialize(key: string){\n return BaseGlobalObject.list().find(o => o.key === key);\n }\n\n private static _INSTANCES: BaseGlobalObject[] = [];\n static list = () => {\n return this._INSTANCES;\n };\n}*/","// extracted by mini-css-extract-plugin\nexport default {\"resiPrefix\":\"resi_\",\"queryClass\":\"q\",\"consensusClass\":\"c\",\"residueParentClass\":\"resi_line\",\"darkHueClass\":\"dark-residues\",\"lightHueClass\":\"light-residues\",\"lettersOnlyHueClass\":\"letters-only-residues\",\"aaAlignTypeClass\":\"alignment-aa\",\"ntAlignTypeClass\":\"alignment-nt\",\"styPosAllClass\":\"alignment-positions-tostyle-all\",\"styPosQueryClass\":\"alignment-positions-tostyle-query\",\"styPosQueryDiffClass\":\"alignment-positions-tostyle-query-diff\",\"styPosConsensusClass\":\"alignment-positions-tostyle-consensus\",\"styPosConsensusDiffClass\":\"alignment-positions-tostyle-consensus-diff\",\"aaStyClass_Default\":\"aa-alignment-style-default\",\"aaStyDesc_Default\":\"Default\",\"aaStyDefaultLetterColor_Default\":\"#ccc\",\"aaStyBackgroundAlpha_Default\":\".25\",\"aaStyColorOrder_Default\":\"A,R,N,D,C,Q,E,G,H,I,L,K,M,F,P,S,T,W,Y,V\",\"aaStyColors_Default\":\"#3c0,#c00,#60c,#03f,#ff0,#60c,#03f,#3c0,#090,#3c0,#3c0,#c00,#3c0,#090,#3c0,#09f,#09f,#090,#090,#3c0\",\"aaStyBackgroundColorsLightTheme_Default\":\"#ccf2bf,#f2bfbf,#d9bff2,#bfccff,#ffffbf,#d9bff2,#bfccff,#ccf2bf,#bfe6bf,#ccf2bf,#ccf2bf,#f2bfbf,#ccf2bf,#bfe6bf,#ccf2bf,#bfe6ff,#bfe6ff,#bfe6bf,#bfe6bf,#ccf2bf\",\"aaStyLetterColorsDarkTheme_Default\":\"#000,#fff,#fff,#fff,#000,#fff,#fff,#000,#fff,#000,#000,#fff,#000,#fff,#000,#fff,#fff,#fff,#fff,#000\",\"aaStyClass_Buried\":\"aa-alignment-style-buried\",\"aaStyDesc_Buried\":\"Buried Index\",\"aaStyDefaultLetterColor_Buried\":\"#ccc\",\"aaStyBackgroundAlpha_Buried\":\".25\",\"aaStyColorOrder_Buried\":\"A,R,N,D,C,Q,E,G,H,I,L,K,M,F,P,S,T,W,Y,V,B,Z\",\"aaStyColors_Buried\":\"#00a35c,#00fc03,#00eb14,#00eb14,blue,#00f10e,#00f10e,#009d62,#00d52a,#0054ab,#007b84,lime,#009768,#008778,#00e01f,#00d52a,#00db24,#00a857,#00e619,#005fa0,#00eb14,#00f10e\",\"aaStyBackgroundColorsLightTheme_Buried\":\"#bfe8d6,#bffec0,#bffac4,#bffac4,#bfbfff,#bffcc3,#bffcc3,#bfe7d8,#bff5ca,#bfd4ea,#bfdee0,#bfffbf,#bfe5d9,#bfe1dd,#bff7c7,#bff5ca,#bff6c8,#bfe9d5,#bff9c6,#bfd7e7,#bffac4,#bffcc3\",\"aaStyLetterColorsDarkTheme_Buried\":\"#fff,#000,#000,#000,#fff,#000,#000,#fff,#000,#fff,#fff,#000,#fff,#fff,#000,#000,#000,#fff,#000,#fff,#000,#000\",\"aaStyClass_Cinema\":\"aa-alignment-style-cinema\",\"aaStyDesc_Cinema\":\"Cinema\",\"aaStyDefaultLetterColor_Cinema\":\"#ccc\",\"aaStyBackgroundAlpha_Cinema\":\".25\",\"aaStyColorOrder_Cinema\":\"A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z\",\"aaStyColors_Cinema\":\"#bbb,gray,#ff0,red,red,#f0f,brown,aqua,#bbb,#fff,aqua,#bbb,#bbb,green,#fff,brown,green,aqua,green,green,#fff,#bbb,#f0f,#f0f,gray\",\"aaStyBackgroundColorsLightTheme_Cinema\":\"#eee,#dfdfdf,#ffffbf,#ffbfbf,#ffbfbf,#ffbfff,#e9caca,#bfffff,#eee,#fff,#bfffff,#eee,#eee,#bfdfbf,#fff,#e9caca,#bfdfbf,#bfffff,#bfdfbf,#bfdfbf,#fff,#eee,#ffbfff,#ffbfff,#dfdfdf\",\"aaStyLetterColorsDarkTheme_Cinema\":\"#000,#000,#000,#fff,#fff,#fff,#fff,#000,#000,#000,#000,#000,#000,#fff,#000,#fff,#fff,#000,#fff,#fff,#000,#000,#fff,#fff,#000\",\"aaStyClass_Clustal\":\"aa-alignment-style-clustal\",\"aaStyDesc_Clustal\":\"Clustal\",\"aaStyDefaultLetterColor_Clustal\":\"#ccc\",\"aaStyBackgroundAlpha_Clustal\":\".25\",\"aaStyColorOrder_Clustal\":\"A,R,N,D,C,Q,E,G,H,I,L,K,M,F,P,S,T,W,Y,V,B,Z\",\"aaStyColors_Clustal\":\"#80a0f0,#f01505,lime,#c048c0,#f08080,lime,#c048c0,#f09048,#15a4a4,#80a0f0,#80a0f0,#f01505,#80a0f0,#80a0f0,#ff0,lime,lime,#80a0f0,#15a4a4,#80a0f0,#fff,#fff\",\"aaStyBackgroundColorsLightTheme_Clustal\":\"#dfe7fb,#fbc5c1,#bfffbf,#efd1ef,#fbdfdf,#bfffbf,#efd1ef,#fbe3d1,#c5e8e8,#dfe7fb,#dfe7fb,#fbc5c1,#dfe7fb,#dfe7fb,#ffffbf,#bfffbf,#bfffbf,#dfe7fb,#c5e8e8,#dfe7fb,#fff,#fff\",\"aaStyLetterColorsDarkTheme_Clustal\":\"#000,#fff,#000,#fff,#000,#000,#fff,#000,#fff,#000,#000,#fff,#000,#000,#000,#000,#000,#000,#fff,#000,#000,#000\",\"aaStyClass_Helix\":\"aa-alignment-style-helix\",\"aaStyDesc_Helix\":\"Helix Propensity\",\"aaStyDefaultLetterColor_Helix\":\"#ccc\",\"aaStyBackgroundAlpha_Helix\":\".25\",\"aaStyColorOrder_Helix\":\"A,R,N,D,C,Q,E,G,H,I,L,K,M,F,P,S,T,W,Y,V,B,Z\",\"aaStyColors_Helix\":\"#e718e7,#6f906f,#1be41b,#787,#23dc23,#926d92,#f0f,lime,#758a75,#8a758a,#ae51ae,#a05fa0,#ef10ef,#986798,lime,#36c936,#47b847,#8a758a,#21de21,#857a85,#49b649,#c936c9\",\"aaStyBackgroundColorsLightTheme_Helix\":\"#f9c5f9,#dbe3db,#c6f8c6,#dde1dd,#c8f6c8,#e4dbe4,#ffbfff,#bfffbf,#dde2dd,#e2dde2,#ebd4eb,#e7d7e7,#fbc3fb,#e5d9e5,#bfffbf,#cdf2cd,#d1edd1,#e2dde2,#c8f7c8,#e1dee1,#d2edd2,#f2cdf2\",\"aaStyLetterColorsDarkTheme_Helix\":\"#fff,#000,#000,#000,#000,#fff,#fff,#000,#000,#000,#fff,#fff,#fff,#fff,#000,#000,#000,#000,#000,#000,#000,#fff\",\"aaStyClass_Hydrophobicity\":\"aa-alignment-style-hydrophobicity\",\"aaStyDesc_Hydrophobicity\":\"Hydrophobicity\",\"aaStyDefaultLetterColor_Hydrophobicity\":\"#ccc\",\"aaStyBackgroundAlpha_Hydrophobicity\":\".25\",\"aaStyColorOrder_Hydrophobicity\":\"F,I,W,L,V,M,Y,C,A,T,H,G,S,Q,R,K,N,E,P,D\",\"aaStyColors_Hydrophobicity\":\"red,red,#ff0606,#ff0606,#ff4c4c,#ff5252,#f77,#ffa5a5,#ffc0c0,#e1e1ff,#d0d0ff,#b6b6ff,#a5a5ff,#9595ff,#8787ff,#6969ff,#5959ff,#4f4fff,#1d1dff,blue\",\"aaStyBackgroundColorsLightTheme_Hydrophobicity\":\"#ffbfbf,#ffbfbf,#ffc1c1,#ffc1c1,#ffd2d2,#ffd4d4,#fdd,#ffe9e9,#ffefef,#f8f8ff,#f3f3ff,#ededff,#e9e9ff,#e5e5ff,#e1e1ff,#dadaff,#d6d6ff,#d3d3ff,#c7c7ff,#bfbfff\",\"aaStyLetterColorsDarkTheme_Hydrophobicity\":\"#fff,#fff,#fff,#fff,#000,#000,#000,#000,#000,#000,#000,#000,#000,#000,#000,#fff,#fff,#fff,#fff,#fff\",\"aaStyClass_Lesk\":\"aa-alignment-style-lesk\",\"aaStyDesc_Lesk\":\"Lesk\",\"aaStyDefaultLetterColor_Lesk\":\"#ccc\",\"aaStyBackgroundAlpha_Lesk\":\".25\",\"aaStyColorOrder_Lesk\":\"A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z\",\"aaStyColors_Lesk\":\"orange,#fff,green,red,red,green,orange,#f0f,green,#fff,red,green,green,#f0f,#fff,green,#f0f,red,orange,orange,#fff,green,green,green,#fff\",\"aaStyBackgroundColorsLightTheme_Lesk\":\"#ffe9bf,#fff,#bfdfbf,#ffbfbf,#ffbfbf,#bfdfbf,#ffe9bf,#ffbfff,#bfdfbf,#fff,#ffbfbf,#bfdfbf,#bfdfbf,#ffbfff,#fff,#bfdfbf,#ffbfff,#ffbfbf,#ffe9bf,#ffe9bf,#fff,#bfdfbf,#bfdfbf,#bfdfbf,#fff\",\"aaStyLetterColorsDarkTheme_Lesk\":\"#000,#000,#fff,#fff,#fff,#fff,#000,#fff,#fff,#000,#fff,#fff,#fff,#fff,#000,#fff,#fff,#fff,#000,#000,#000,#fff,#fff,#fff,#000\",\"aaStyClass_MAE\":\"aa-alignment-style-mae\",\"aaStyDesc_MAE\":\"MAE\",\"aaStyDefaultLetterColor_MAE\":\"#ccc\",\"aaStyBackgroundAlpha_MAE\":\".25\",\"aaStyColorOrder_MAE\":\"A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z\",\"aaStyColors_MAE\":\"#7d8,#fff,#9e6,#5b3,#5b3,#99f,#7d8,#55f,#6bf,#fff,#fc7,#6bf,#6bf,#5b3,#fff,#eaa,#5b3,#fc7,#f45,#f45,#fff,#6bf,#99f,#99f,#fff\",\"aaStyBackgroundColorsLightTheme_MAE\":\"#ddf7e1,#fff,#e6fbd9,#d5eecc,#d5eecc,#e6e6ff,#ddf7e1,#d5d5ff,#d9eeff,#fff,#fff2dd,#d9eeff,#d9eeff,#d5eecc,#fff,#fbeaea,#d5eecc,#fff2dd,#ffd0d5,#ffd0d5,#fff,#d9eeff,#e6e6ff,#e6e6ff,#fff\",\"aaStyLetterColorsDarkTheme_MAE\":\"#000,#000,#000,#000,#000,#000,#000,#fff,#000,#000,#000,#000,#000,#000,#000,#000,#000,#000,#000,#000,#000,#000,#000,#000,#000\",\"aaStyClass_Strand\":\"aa-alignment-style-strand\",\"aaStyDesc_Strand\":\"Strand Propensity\",\"aaStyDefaultLetterColor_Strand\":\"#ccc\",\"aaStyBackgroundAlpha_Strand\":\".25\",\"aaStyColorOrder_Strand\":\"A,R,N,D,C,Q,E,G,H,I,L,K,M,F,P,S,T,W,Y,V,B,Z\",\"aaStyColors_Strand\":\"#5858a7,#6b6b94,#64649b,#2121de,#9d9d62,#8c8c73,blue,#4949b6,#60609f,#ecec13,#b2b24d,#4747b8,#82827d,#c2c23d,#2323dc,#4949b6,#9d9d62,#c0c03f,#d3d32c,#ff0,#4343bc,#4747b8\",\"aaStyBackgroundColorsLightTheme_Strand\":\"#d5d5e9,#dadae4,#d8d8e6,#c8c8f7,#e7e7d8,#e2e2dc,#bfbfff,#d2d2ed,#d7d7e7,#fafac4,#ececd3,#d1d1ed,#e0e0df,#f0f0cf,#c8c8f6,#d2d2ed,#e7e7d8,#efefcf,#f4f4ca,#ffffbf,#d0d0ee,#d1d1ed\",\"aaStyLetterColorsDarkTheme_Strand\":\"#fff,#fff,#fff,#fff,#000,#000,#fff,#fff,#fff,#000,#000,#fff,#000,#000,#fff,#fff,#000,#000,#000,#000,#fff,#fff\",\"aaStyClass_Taylor\":\"aa-alignment-style-taylor\",\"aaStyDesc_Taylor\":\"Taylor\",\"aaStyDefaultLetterColor_Taylor\":\"#ccc\",\"aaStyBackgroundAlpha_Taylor\":\".25\",\"aaStyColorOrder_Taylor\":\"A,R,N,D,C,Q,E,G,H,I,L,K,M,F,P,S,T,W,Y,V,B,Z\",\"aaStyColors_Taylor\":\"#cf0,blue,#c0f,red,#ff0,#f0c,#f06,#f90,#06f,#6f0,#3f0,#60f,lime,#0f6,#fc0,#f30,#f60,#0cf,#0fc,#9f0,#fff,#fff\",\"aaStyBackgroundColorsLightTheme_Taylor\":\"#f2ffbf,#bfbfff,#f2bfff,#ffbfbf,#ffffbf,#ffbff2,#ffbfd9,#ffe6bf,#bfd9ff,#d9ffbf,#ccffbf,#d9bfff,#bfffbf,#bfffd9,#fff2bf,#ffccbf,#ffd9bf,#bff2ff,#bffff2,#e6ffbf,#fff,#fff\",\"aaStyLetterColorsDarkTheme_Taylor\":\"#000,#fff,#fff,#fff,#000,#fff,#fff,#000,#fff,#000,#000,#fff,#000,#000,#000,#fff,#000,#000,#000,#000,#000,#000\",\"aaStyClass_Turn\":\"aa-alignment-style-turn\",\"aaStyDesc_Turn\":\"Turn Propensity\",\"aaStyDefaultLetterColor_Turn\":\"#ccc\",\"aaStyBackgroundAlpha_Turn\":\".25\",\"aaStyColorOrder_Turn\":\"A,R,N,D,C,Q,E,G,H,I,L,K,M,F,P,S,T,W,Y,V,B,Z\",\"aaStyColors_Turn\":\"#2cd3d3,#708f8f,red,#e81717,#a85757,#3fc0c0,#788,red,#708f8f,aqua,#1ce3e3,#7e8181,#1ee1e1,#1ee1e1,#f60909,#e11e1e,#738c8c,#738c8c,#9d6262,#07f8f8,#f30c0c,#5ba4a4\",\"aaStyBackgroundColorsLightTheme_Turn\":\"#caf4f4,#dbe3e3,#ffbfbf,#f9c5c5,#e9d5d5,#cfefef,#dde1e1,#ffbfbf,#dbe3e3,#bfffff,#c6f8f8,#dfe0e0,#c7f8f8,#c7f8f8,#fdc2c2,#f8c7c7,#dce2e2,#dce2e2,#e7d8d8,#c1fdfd,#fcc2c2,#d6e8e8\",\"aaStyLetterColorsDarkTheme_Turn\":\"#000,#000,#fff,#fff,#fff,#000,#000,#fff,#000,#000,#000,#000,#000,#000,#fff,#fff,#000,#000,#fff,#000,#fff,#000\",\"aaStyClass_Zappo\":\"aa-alignment-style-zappo\",\"aaStyDesc_Zappo\":\"Zappo\",\"aaStyDefaultLetterColor_Zappo\":\"#ccc\",\"aaStyBackgroundAlpha_Zappo\":\".25\",\"aaStyColorOrder_Zappo\":\"A,R,N,D,C,Q,E,G,H,I,L,K,M,F,P,S,T,W,Y,V,B,Z\",\"aaStyColors_Zappo\":\"#ffafaf,#6464ff,lime,red,#ff0,lime,red,#f0f,#6464ff,#ffafaf,#ffafaf,#6464ff,#ffafaf,#ffc800,#f0f,lime,lime,#ffc800,#ffc800,#ffafaf,#fff,#fff\",\"aaStyBackgroundColorsLightTheme_Zappo\":\"#ffebeb,#d8d8ff,#bfffbf,#ffbfbf,#ffffbf,#bfffbf,#ffbfbf,#ffbfff,#d8d8ff,#ffebeb,#ffebeb,#d8d8ff,#ffebeb,#fff1bf,#ffbfff,#bfffbf,#bfffbf,#fff1bf,#fff1bf,#ffebeb,#fff,#fff\",\"aaStyLetterColorsDarkTheme_Zappo\":\"#000,#fff,#000,#fff,#000,#000,#fff,#fff,#fff,#000,#000,#fff,#000,#000,#fff,#000,#000,#000,#000,#000,#000,#000\",\"ntStyClass_Default\":\"nt-alignment-style-default\",\"ntStyDesc_Default\":\"Default\",\"ntStyDefaultLetterColor_Default\":\"#ccc\",\"ntStyBackgroundAlpha_Default\":\".25\",\"ntStyColorOrder_Default\":\"A,C,G,T,U,R,Y\",\"ntStyColors_Default\":\"#5050ff,#e00000,#00c000,#e6e600,#c90,#2e8b57,#ff8c00\",\"ntStyBackgroundColorsLightTheme_Default\":\"#d3d3ff,#f7bfbf,#bfefbf,#f9f9bf,#f2e6bf,#cbe2d5,#ffe2bf\",\"ntStyLetterColorsDarkTheme_Default\":\"#fff,#fff,#fff,#000,#000,#fff,#000\",\"ntStyClass_Nucleotide\":\"nt-alignment-style-nucleotide\",\"ntStyDesc_Nucleotide\":\"Nucleotide\",\"ntStyDefaultLetterColor_Nucleotide\":\"#ccc\",\"ntStyBackgroundAlpha_Nucleotide\":\".25\",\"ntStyColorOrder_Nucleotide\":\"A,C,G,T,U\",\"ntStyColors_Nucleotide\":\"#64f73f,#ffb340,#eb413c,#3c88ee,#3c88ee\",\"ntStyBackgroundColorsLightTheme_Nucleotide\":\"#d8fdcf,#ffeccf,#fad0ce,#cee1fb,#cee1fb\",\"ntStyLetterColorsDarkTheme_Nucleotide\":\"#000,#000,#fff,#fff,#fff\",\"ntStyClass_Purine\":\"nt-alignment-style-purine\",\"ntStyDesc_Purine\":\"Purine/Pyrimidine\",\"ntStyDefaultLetterColor_Purine\":\"#ccc\",\"ntStyBackgroundAlpha_Purine\":\".25\",\"ntStyColorOrder_Purine\":\"A,C,G,R,T,U,Y\",\"ntStyColors_Purine\":\"#ff83fa,#40e0d0,#ff83fa,#ff83fa,#40e0d0,#40e0d0,#40e0d0\",\"ntStyBackgroundColorsLightTheme_Purine\":\"#ffe0fe,#cff7f3,#ffe0fe,#ffe0fe,#cff7f3,#cff7f3,#cff7f3\",\"ntStyLetterColorsDarkTheme_Purine\":\"#000,#000,#000,#000,#000,#000,#000\"};","/**\n * This file centralizes the location of javascript style definitions\n * for nucleotide and amino acid styles.\n */\nimport { IListOfPropObjects, IPropObjectInstanceInList } from \"./GlobalEnumObject\";\nimport styles from \"./MolecularStyles.module.scss\";\n\n/**\n * Defines a single color scheme interface which consists of\n * a name, className, background alpha, and set of colors for\n * all residues (hex string format).\n *\n * @export\n * @interface ColorSchemeInstance\n */\nexport interface ColorSchemeInstance extends IPropObjectInstanceInList {\n commonName: string;\n backgroundAlpha: number;\n defaultLetterColor: string;\n className: string;\n colors: {\n [residueCode: string]: string;\n };\n backgroundColorsLightTheme: {\n [residueCode: string]: string;\n };\n letterColorsDarkTheme: {\n [residueCode: string]: string;\n };\n}\nexport interface NucleotideColorSchemeInstance extends ColorSchemeInstance {\n forAlignmentType: \"nucleotide\";\n}\nexport interface AminoacidColorSchemeInstance extends ColorSchemeInstance {\n forAlignmentType: \"aminoacid\";\n}\nexport interface PositionsToStyleInstance extends IPropObjectInstanceInList {\n className: string;\n shortClassname?: string;\n}\nexport interface ResidueColoringInstance extends IPropObjectInstanceInList {\n className: string;\n}\n//export interface AlignmentTypeInstance extends IPropObjectInstanceInList {\n// className: string;\n//}\nexport interface AminoAcidAlignmentTypeInstance extends IPropObjectInstanceInList {\n key: \"aminoacid-alignment\";\n className: string;\n}\nexport interface NucleotideAlignmentTypeInstance extends IPropObjectInstanceInList {\n key: \"nucleotide-alignment\";\n className: string;\n}\n\n/**\n * Read in class names and colors for amino acid or nucleotide\n * color schemes from the scss file.\n *\n * @param {(\"aa\" | \"nt\")} moleculeType\n * @returns\n */\nfunction assembleColorSchemes<\n T extends AminoacidColorSchemeInstance | NucleotideColorSchemeInstance\n>(moleculeType: \"aa\" | \"nt\") {\n\n const propList = Object.keys(styles).reduce((acc, styleName) => {\n if (styleName.indexOf(moleculeType + \"StyClass_\") !== -1) {\n //e.g., aaStyClass_Hydrophobicity\n const colorSchemeName = styleName.split(moleculeType + \"StyClass_\")[1];\n const colorOrder = styles[\n //e.g., aaStyColors_Hydrophobicity\n moleculeType + \"StyColorOrder_\" + colorSchemeName\n ]\n .replace(/ /g, \"\")\n .split(\",\"); // \"build\" removes spaces, but local \"run\" does not\n\n //e.g., aaStyColors_Hydrophobicity\n const hexValues = styles[moleculeType + \"StyColors_\" + colorSchemeName]\n .replace(/ /g, \"\")\n .split(\",\"); // \"build\" removes spaces, but local \"run\" does not\n\n //e.g., aaStyBackgroundColorsLightTheme_Hydrophobicity\n const backgroundColorLightTheme = styles[\n moleculeType + \"StyBackgroundColorsLightTheme_\" + colorSchemeName\n ]\n .replace(/ /g, \"\")\n .split(\",\"); // \"build\" removes spaces, but local \"run\" does not\n\n //e.g., aaStyBackgroundColorsLightTheme_Hydrophobicity\n const letterColorsDarkTheme = styles[\n moleculeType + \"StyLetterColorsDarkTheme_\" + colorSchemeName\n ]\n .replace(/ /g, \"\")\n .split(\",\"); // \"build\" removes spaces, but local \"run\" does not\n\n const description = styles[moleculeType + \"StyDesc_\" + colorSchemeName];\n acc[colorSchemeName] = {\n key: colorSchemeName,\n description: description,\n commonName: colorSchemeName,\n forAlignmentType: moleculeType === \"aa\" ? \"aminoacid\" : \"nucleotide\",\n className: styles[styleName],\n backgroundAlpha: parseFloat(\n styles[moleculeType + \"StyBackgroundAlpha_\" + colorSchemeName]\n ),\n defaultLetterColor:\n styles[moleculeType + \"StyDefaultLetterColor_\" + colorSchemeName],\n colors: Object.fromEntries(\n colorOrder.map((_, i) => [colorOrder[i], hexValues[i]])\n ),\n backgroundColorsLightTheme: Object.fromEntries(\n colorOrder.map((_, i) => [\n colorOrder[i],\n backgroundColorLightTheme[i],\n ])\n ),\n letterColorsDarkTheme: Object.fromEntries(\n colorOrder.map((_, i) => [colorOrder[i], letterColorsDarkTheme[i]])\n ),\n };\n }\n return acc;\n }, {} as {\n [colorSchemeName: string]: AminoacidColorSchemeInstance\n } | {\n [colorSchemeName: string]: NucleotideColorSchemeInstance\n });\n \n return {\n ...propList,\n ...IListOfPropObjects(Object.values(propList))\n }\n}\n\nexport const AminoAcidColorSchemes = assembleColorSchemes(\"aa\");\nexport const NucleotideColorSchemes = assembleColorSchemes(\"nt\");\n\n/**\n * Top level alignment type descriptions. There are two supported\n * alignment types: AMINOACID and NUCLEOTIDE.\n *\n * @export\n * @class AlignmentTypes\n */\nexport const AlignmentTypes = (() => {\n const propList = {\n AMINOACID: {\n key: \"aminoacid-alignment\",\n description: \"Amino Acid Sequences\",\n className: styles.aaAlignTypeClass,\n //allColorSchemes: ALL_AMINOACID_COLORSCHEMES\n } satisfies AminoAcidAlignmentTypeInstance,\n NUCLEOTIDE: {\n key: \"nucleotide-alignment\",\n description: \"Nucleotide Sequences\",\n className: styles.ntAlignTypeClass,\n //allColorSchemes: ALL_NUCLEOTIDE_COLORSCHEMES\n } satisfies NucleotideAlignmentTypeInstance\n }\n return {\n ...propList,\n ...IListOfPropObjects(Object.values(propList))\n };\n})();\n\n/**\n * This object represents different position styling modes.\n *\n * @export\n * @class PositionsToStyle\n */\nexport const PositionsToStyle = (() => {\n const propList = {\n ALL: {\n key: \"all\",\n description: \"All\",\n className: styles.styPosAllClass\n } satisfies PositionsToStyleInstance,\n QUERY: {\n key: \"query\",\n description: \"Same as Query\",\n className: styles.styPosQueryClass,\n shortClassname: styles.queryClass\n } satisfies PositionsToStyleInstance,\n QUERY_DIFF: {\n key: \"query-diff\",\n description: \"Different from Query\",\n className: styles.styPosQueryDiffClass\n } satisfies PositionsToStyleInstance,\n CONSENSUS: {\n key: \"consensus\",\n description: \"Same as Consensus\",\n className: styles.styPosConsensusClass,\n shortClassname: styles.consensusClass\n } satisfies PositionsToStyleInstance,\n CONSENSUS_DIFF: {\n key: \"consensus-diff\",\n description: \"Different from Consensus\",\n className: styles.styPosConsensusDiffClass\n } satisfies PositionsToStyleInstance\n }\n return {\n ...propList,\n\n //special key that is only used for search results. Do not include in the\n //\"list\" and \"serialize\"/\"deserialize\" functions provided by PropListObject\n SEARCH_RESULTS_ONLY: {\n key: \"search-results\",\n description: \"Search Results\",\n //logoplot is the only visualization that uses the class, so style \"all\" \n //aa/nt on the logoplot on the search screen.\n className: styles.styPosAllClass \n } satisfies PositionsToStyleInstance,\n\n ...IListOfPropObjects(Object.values(propList))\n };\n})();\n\n\nexport const ResidueColoring = (() => {\n const propList = {\n LIGHT: {\n key: \"light\",\n description: \"Light\",\n className: styles.lightHueClass,\n } satisfies ResidueColoringInstance,\n DARK: {\n key: \"dark\",\n description: \"Dark\",\n className: styles.darkHueClass\n } satisfies ResidueColoringInstance,\n NO_BACKGROUND: {\n key: \"lettersonly\",\n description: \"Letters Only\",\n className: styles.lettersOnlyHueClass\n } satisfies ResidueColoringInstance\n }\n return {\n ...propList,\n ...IListOfPropObjects(Object.values(propList))\n };\n})();\n\n\n/**\n * Object to describe the style of a set of sequences (MSA, logo, etc).\n * Contains 2 key parameters:\n * \"alignmentType\": should be set by implementing classes\n * \"colorScheme\": describes the color scheme to apply to the alignment.\n * defaults to the first available from the scss file\n * \"positionsToStyle\": description of which positions should be styled.\n * defaults to all positions.\n *\n * @interface AlignmentStyle\n \nexport abstract class AlignmentStyle {\n abstract readonly alignmentType: typeof AlignmentTypes.AMINOACID;\n abstract readonly allColorSchemes: AminoacidColorSchemeInstance[];\n abstract selectedColorScheme: AminoacidColorSchemeInstance;\n\n static fromAlignmentType(alignmentType: typeof AlignmentTypes.AMINOACID) {\n if (alignmentType === AlignmentTypes.AMINOACID)\n return new AminoAcidAlignmentStyle();\n return new NucleotideAlignmentStyle();\n }\n}*/\n\n/**\n * Object to describe an amino acid alignment style\n * @class AminoAcidAlignmentStyle\n * @implements {AlignmentStyle}\n\nexport class AminoAcidAlignmentStyle implements AlignmentStyle {\n readonly allColorSchemes = ALL_AMINOACID_COLORSCHEMES;\n readonly alignmentType = AlignmentTypes.AMINOACID;\n\n constructor(\n public selectedColorScheme: ColorSchemeInstance = ALL_AMINOACID_COLORSCHEMES[0],\n ) {}\n} */\n\n/**\n * Object to describe an nucleotide alignment style\n *\n * @export\n * @class NucleotideAlignmentStyle\n * @implements {AlignmentStyle}\n \nexport class NucleotideAlignmentStyle implements AlignmentStyle {\n readonly allColorSchemes = ALL_NUCLEOTIDE_COLORSCHEMES;\n readonly alignmentType = AlignmentTypes.NUCLEOTIDE;\n\n constructor(\n public selectedColorScheme: NucleotideColorSchemeInstance = ALL_NUCLEOTIDE_COLORSCHEMES[0],\n ) {}\n}*/\n\n/**\n * Export globals\n */\nconst resiPrefix = styles.resiPrefix\nconst darkHueClass = styles.darkHueClass;\nconst lightHueClass = styles.lightHueClass;\nconst residueParentClass = styles.residueParentClass;\nexport {\n resiPrefix as resiClassPrefix,\n lightHueClass,\n darkHueClass,\n residueParentClass, // place above any residue (e.g., resi_A) to get default coloring\n};\n\n/**\n * Export helper parameters and functions.\n */\n\n/**\n * fast lookup of the query, consensus classes\n */\nfunction generateFastClassLookup() {\n let ALL_POSSIBLE_CHARS = \"\";\n for (var i = 32; i <= 126; i++) {\n ALL_POSSIBLE_CHARS += String.fromCharCode(i);\n }\n\n return ALL_POSSIBLE_CHARS.split(\"\") //\".-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n .reduce((acc, letter) => {\n const letterInClass = letter === \".\" ? \"dot\" : letter;\n const prefix = resiPrefix + letterInClass;\n acc.set(\n letter,\n new Map([\n [\n true,\n new Map([\n [\n true,\n prefix +\n \" \" +\n styles.consensusClass +\n \" \" +\n styles.queryClass,\n ], //is consensus and query\n [false, prefix + \" \" + styles.consensusClass], //is consensus, not query\n ]),\n ],\n [\n false,\n new Map([\n [true, prefix + \" \" + styles.queryClass], //is query, not consensus\n [false, prefix], //not query and not consensus\n ]),\n ],\n ])\n );\n return acc;\n }, new Map>>());\n}\n\nconst LETTER_CLASS_NAMES = generateFastClassLookup();\n/**\n * Export a class name array that is used by the different parts\n * of alignment viewer to fill class names for each letter. The\n * structure of this string is just the list of class names, \n * separated by a period.\n *\n * Update: I only use a single class name separated by a space.\n * I think this helps with performance: the dom has\n * shorter classnames. I did rough tests and this seems\n * to help with performance, but admittedly they were not\n * rigerous or scientific and it doesn't seem to make a\n * large impact.\n *\n * @param letter\n * @param isConsensus\n * @param isQuery\n */\nexport function getLetterClassNames(\n letter: string,\n isConsensus: boolean,\n isQuery: boolean\n) {\n return LETTER_CLASS_NAMES.get(letter)!.get(isConsensus)!.get(isQuery)!;\n}","import { stringToColor } from \"./Utils\";\nimport {\n AminoAcidColorSchemes,\n AminoacidColorSchemeInstance,\n NucleotideColorSchemeInstance,\n NucleotideColorSchemes,\n ResidueColoring,\n ResidueColoringInstance,\n} from \"./MolecularStyles\";\n\nexport interface ICombinedColor {\n hexString: string;\n rgb: {\n red: number;\n green: number;\n blue: number;\n };\n}\n\n\ntype IColoringToLetterAndBackgroundColor = Map;\ntype ISingleResidueColor = Map<\n AminoacidColorSchemeInstance | NucleotideColorSchemeInstance, \n IColoringToLetterAndBackgroundColor\n>;\n\ninterface IAminoAcid {\n singleLetterCode: string;\n threeLetterCode: string;\n fullName: string;\n colors: ISingleResidueColor;\n}\n\ninterface INucleotide {\n singleLetterCode: string;\n fullName: string;\n colors: ISingleResidueColor;\n}\n\nexport class AminoAcid implements IAminoAcid {\n colors: ISingleResidueColor;\n\n public static readonly canonicalAminoAcids: AminoAcid[] = [\n new AminoAcid(\"A\", \"ALA\", \"Alanine\"),\n new AminoAcid(\"R\", \"ARG\", \"Arginine\"),\n new AminoAcid(\"N\", \"ASN\", \"Asparagine\"),\n new AminoAcid(\"D\", \"ASP\", \"Aspartic Acid\"),\n new AminoAcid(\"C\", \"CYS\", \"Cysteine\"),\n new AminoAcid(\"Q\", \"GLU\", \"Glutamine\"),\n new AminoAcid(\"E\", \"GLN\", \"Glutamic Acid\"),\n new AminoAcid(\"G\", \"GLY\", \"Glycine\"),\n new AminoAcid(\"H\", \"HIS\", \"Histidine\"),\n new AminoAcid(\"I\", \"ILE\", \"Isoleucine\"),\n new AminoAcid(\"L\", \"LEU\", \"Leucine\"),\n new AminoAcid(\"K\", \"LYS\", \"Lysine\"),\n new AminoAcid(\"M\", \"MET\", \"Methionine\"),\n new AminoAcid(\"F\", \"PHE\", \"Phenylalanine\"),\n new AminoAcid(\"P\", \"PRO\", \"Proline\"),\n new AminoAcid(\"S\", \"SER\", \"Serine\"),\n new AminoAcid(\"T\", \"THR\", \"Threonine\"),\n new AminoAcid(\"W\", \"TRP\", \"Tryptophan\"),\n new AminoAcid(\"Y\", \"TYR\", \"Tyrosine\"),\n new AminoAcid(\"V\", \"VAL\", \"Valine\"),\n\n new AminoAcid(\"X\", \"UKN\", \"Unknown\"),\n ];\n\n private static bySingleLetterCode = AminoAcid.canonicalAminoAcids.reduce(\n (acc, aa) => {\n acc[aa.singleLetterCode] = aa;\n return acc;\n },\n {} as { [key: string]: AminoAcid }\n );\n\n private static byThreeLetterCode = AminoAcid.canonicalAminoAcids.reduce(\n (acc, aa) => {\n acc[aa.threeLetterCode] = aa;\n return acc;\n },\n {} as { [key: string]: AminoAcid }\n );\n\n public static readonly UNKNOWN = AminoAcid.bySingleLetterCode[\"X\"];\n\n static list(): IAminoAcid[] {\n return AminoAcid.canonicalAminoAcids;\n }\n\n static fromSingleLetterCode(singleLetterCode: string): IAminoAcid {\n if (singleLetterCode in this.bySingleLetterCode) {\n return this.bySingleLetterCode[singleLetterCode];\n }\n return AminoAcid.UNKNOWN;\n }\n\n static fromThreeLetterCode(threeLetterCode: string): IAminoAcid {\n if (threeLetterCode in this.byThreeLetterCode) {\n return AminoAcid.byThreeLetterCode[threeLetterCode];\n }\n return AminoAcid.UNKNOWN;\n }\n\n constructor(\n public singleLetterCode: string,\n public threeLetterCode: string,\n public fullName: string\n ) {\n this.singleLetterCode = singleLetterCode;\n this.threeLetterCode = threeLetterCode;\n this.fullName = fullName;\n this.colors = AminoAcidColorSchemes.list.reduce((acc, cs) => {\n const themesMap = new Map() as IColoringToLetterAndBackgroundColor;\n //todo update sass to be more consistant with how we use this\n //i.e., we should be able to loop ResidueColoring.list to\n //set these, but presently the prop keys are different for\n //each coloring type Light/Dark/NoBackground\n //props: colors, backgroundColorsLightTheme, letterColorsDarkTheme\n themesMap.set(ResidueColoring.LIGHT, {\n letterColor: stringToColor(\n cs.colors[singleLetterCode]\n ? cs.colors[singleLetterCode]\n : cs.defaultLetterColor\n ),\n backgroundColor: stringToColor(\n cs.backgroundColorsLightTheme[singleLetterCode]\n ? cs.backgroundColorsLightTheme[singleLetterCode]\n : \"#ffffff\"\n ),\n });\n\n themesMap.set(ResidueColoring.DARK, {\n letterColor: stringToColor(\n cs.letterColorsDarkTheme[singleLetterCode]\n ? cs.letterColorsDarkTheme[singleLetterCode]\n : cs.defaultLetterColor\n ),\n backgroundColor: stringToColor(\n cs.colors[singleLetterCode]\n ? cs.colors[singleLetterCode]\n : \"#ffffff\"\n ),\n });\n\n themesMap.set(ResidueColoring.NO_BACKGROUND, {\n letterColor: stringToColor(\n cs.colors[singleLetterCode]\n ? cs.colors[singleLetterCode]\n : cs.defaultLetterColor\n ),\n backgroundColor: stringToColor(\"#ffffff\"),\n });\n acc.set(cs, themesMap);\n return acc;\n }, new Map() as ISingleResidueColor);\n }\n}\n\nexport class Nucleotide implements INucleotide {\n colors: ISingleResidueColor;\n\n static allNucleotides: Nucleotide[] = [\n new Nucleotide(\"A\", \"Adenine\"),\n new Nucleotide(\"C\", \"Cytosine\"),\n new Nucleotide(\"G\", \"Guanine\"),\n new Nucleotide(\"T\", \"Thymidine\"),\n new Nucleotide(\"U\", \"Uracil\"),\n\n new Nucleotide(\"R\", \"Purine\"),\n new Nucleotide(\"Y\", \"Pyrimidine\"),\n\n new Nucleotide(\"X\", \"Unknown\"),\n ];\n\n private static bySingleLetterCode = Nucleotide.allNucleotides.reduce(\n (acc, aa) => {\n acc[aa.singleLetterCode] = aa;\n return acc;\n },\n {} as { [key: string]: Nucleotide }\n );\n\n public static UNKNOWN = Nucleotide.bySingleLetterCode[\"X\"];\n\n static list(): INucleotide[] {\n return Nucleotide.allNucleotides;\n }\n\n static fromSingleLetterCode(singleLetterCode: string): Nucleotide {\n if (singleLetterCode in this.bySingleLetterCode) {\n return this.bySingleLetterCode[singleLetterCode];\n }\n return Nucleotide.UNKNOWN;\n }\n \n constructor(\n public singleLetterCode: string, public fullName: string\n ) {\n this.singleLetterCode = singleLetterCode;\n this.fullName = fullName;\n this.colors = NucleotideColorSchemes.list.reduce((acc, cs) => {\n const themesMap = new Map() as IColoringToLetterAndBackgroundColor;\n themesMap.set(ResidueColoring.LIGHT, {\n letterColor: stringToColor(\n cs.colors[singleLetterCode]\n ? cs.colors[singleLetterCode]\n : cs.defaultLetterColor\n ),\n backgroundColor: stringToColor(\n cs.backgroundColorsLightTheme[singleLetterCode]\n ? cs.backgroundColorsLightTheme[singleLetterCode]\n : \"#ffffff\"\n ),\n });\n\n themesMap.set(ResidueColoring.DARK, {\n letterColor: stringToColor(\n cs.letterColorsDarkTheme[singleLetterCode]\n ? cs.letterColorsDarkTheme[singleLetterCode]\n : cs.defaultLetterColor\n ),\n backgroundColor: stringToColor(\n cs.colors[singleLetterCode]\n ? cs.colors[singleLetterCode]\n : \"#ffffff\"\n ),\n });\n\n themesMap.set(ResidueColoring.NO_BACKGROUND, {\n letterColor: stringToColor(\n cs.colors[singleLetterCode]\n ? cs.colors[singleLetterCode]\n : cs.defaultLetterColor\n ),\n backgroundColor: stringToColor(\"#ffffff\"),\n });\n acc.set(cs, themesMap);\n return acc;\n }, new Map() as ISingleResidueColor);\n };\n}\n","import React from \"react\";\n\n//for generating string of JSX element\n//see https://react.dev/reference/react-dom/server/renderToString#removing-rendertostring-from-the-client-code\nimport { createRoot } from 'react-dom/client';\nimport { flushSync } from 'react-dom';\n\nimport { getPositionalAxisRuler } from \"../components/PositionalAxisHook\";\nimport { Alignment } from \"./Alignment\";\nimport {\n AlignmentTypes, \n AminoAcidAlignmentTypeInstance, \n AminoAcidColorSchemes, \n AminoacidColorSchemeInstance,\n NucleotideAlignmentTypeInstance,\n NucleotideColorSchemeInstance, \n NucleotideColorSchemes, \n PositionsToStyle, \n PositionsToStyleInstance, \n ResidueColoring, \n ResidueColoringInstance, \n resiClassPrefix \n} from \"./MolecularStyles\";\nimport { AminoAcid, Nucleotide } from \"./Residues\";\nimport { startEndIdxToArray } from \"./Utils\";\nimport { SequenceSorterInstance } from \"./AlignmentSorter\";\n\nconst CLASSNAME_MSA_TEXT = \"msa\";\nconst CLASSNAME_POSITIONAL_AXIS_TEXT = \"posaxis\";\n\n/**\n * Pull the logo dom element off the page, clean up the dom a bit, add styling\n * and intiate a download.\n * @param style \n */\nexport function downloadBarplotSVG(props: {\n alignment: Alignment;\n svgId: string;\n width?: number;\n height?: number;\n positionalAxis?: {\n numPos: number;\n posHeight: number;\n posWidth: number;\n spaceBtwBarplotAndPositionalAxis: number;\n };\n svgFilename?: string;\n}){\n const {\n alignment,\n svgFilename\n } = props;\n\n const barplotString = getBarplotSvgString(props);\n if(barplotString){\n var url = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(barplotString)}`;\n var link = document.createElement(\"a\");\n link.download = svgFilename ? svgFilename : `barplot_${alignment.getName()}.svg`;\n link.href = url;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n};\n\n\n/**\n * Pull the logo dom element off the page, clean up the dom a bit, add styling\n * and intiate a download.\n * @param style \n */\nexport function downloadLogoSVG(props: {\n svgId: string;\n alignment: Alignment;\n alignmentType: AminoAcidAlignmentTypeInstance | NucleotideAlignmentTypeInstance;\n aaColorScheme?: AminoacidColorSchemeInstance;\n ntColorScheme?: NucleotideColorSchemeInstance;\n positionsToStyle: PositionsToStyleInstance;\n positionalAxis?: {\n numPos: number;\n posHeight: number;\n posWidth: number;\n spaceBtwBarplotAndPositionalAxis: number;\n };\n svgFilename?: string;\n}){\n const {\n alignment,\n svgFilename\n } = props;\n\n const logoString = getLogoSvgString(props);\n if(logoString){\n var url = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(logoString)}`;\n var link = document.createElement(\"a\");\n link.download = svgFilename ? svgFilename : `logo_${alignment.getName()}.svg`;\n link.href = url;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n};\n\n/**\n * From scratch generation of an alignment svg.\n * @param props \n */\nexport function downloadFullViewportSVG(props: {\n alignment: Alignment, \n svgFilename?: string;\n} & Parameters[0]){\n\n const {\n alignment,\n svgFilename\n } = props;\n\n const alignmentString = getFullViewportSvgString(props);\n var url = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(alignmentString)}`;\n var link = document.createElement(\"a\");\n link.download = svgFilename ? svgFilename : `msa_${alignment.getName()}.svg`;\n link.href = url;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n};\n\n//\n//\n// non-exposed methods\n//\n//\n\n/**\n * \n * @param positionalAxis \n * @returns \n */\nconst getPositionAxisString = (positionalAxis: {\n numPos: number;\n posHeight: number;\n posWidth: number;\n width?: number;\n height?: number;\n}) => {\n\n const {\n numPos,\n posHeight,\n posWidth,\n width=numPos * posWidth,\n height=posHeight\n } = positionalAxis;\n\n const positionalAxisText = getPositionalAxisRuler(positionalAxis.numPos);\n const positionalAxisSVG = (\n \n {positionalAxisText.split(\"\").map((char, charIdx)=>{\n return (\n \n {char}\n \n )\n })}\n \n );\n\n const div = document.createElement('div');\n const root = createRoot(div);\n flushSync(() => {\n root.render(positionalAxisSVG);\n });\n const toReturn = div.innerHTML;\n root.unmount();\n return toReturn;\n}\n\n/**\n * \n * \n * \n * \n * \n * @param svgElem \n * @param positionalAxis \n * @returns \n */\nconst injectPositionalAxisIntoSVG = (props: {\n svgElement: SVGElement,\n positionalAxis: {\n numPos: number;\n posHeight: number;\n posWidth: number;\n spaceBtwBarplotAndPositionalAxis: number;\n },\n width?: number,\n height?: number,\n}) => {\n const {\n svgElement,\n positionalAxis,\n width=positionalAxis.numPos * positionalAxis.posWidth, \n height=100,\n } = props;\n\n const {\n numPos,\n posWidth,\n posHeight,\n spaceBtwBarplotAndPositionalAxis\n } = positionalAxis;\n\n svgElement.setAttribute(\"y\", \"0\");\n svgElement.setAttribute(\"x\", \"0\");\n svgElement.setAttribute(\"width\", `${numPos * posWidth}`); //same as position string\n svgElement.setAttribute(\"height\", `${height - posHeight - spaceBtwBarplotAndPositionalAxis}`);\n const axisString = getPositionAxisString({\n ...positionalAxis,\n width: numPos * posWidth, \n height: posHeight\n });\n\n\n //return (\n // \n // {svgElement}\n // \n // {axisString}\n // \n // \n //)\n\n return [\n ``,\n svgElement.outerHTML,\n ``,\n axisString,\n ``,\n ``\n ].join(\"\\n\");\n}\n\n/**\n * Extract the SVG directly from the page, remove extraneous\n * elements (e.g., interaction elements), remove the x and y,\n * and convert to a string. Also, update the width and height \n * if props are provided. Final SVG output if positionalAxis is \n * falsy looks like:\n * \n * \n * If the positionalAxis parameter is provided, generates a\n * positional axis and adds it directly under the barplot, nesting\n * the svg elements with the final SVG output like:\n * \n * \n * \n * \n * \n * @param props \n * @returns \n */\nconst getBarplotSvgString = (props: {\n svgId: string;\n width?: number;\n height?: number;\n positionalAxis?: {\n numPos: number;\n posHeight: number;\n posWidth: number;\n spaceBtwBarplotAndPositionalAxis: number;\n };\n}) => {\n\n const {\n svgId,\n width, \n height,\n positionalAxis\n } = props;\n\n const svgBarplotElement = document.getElementById(svgId);\n if (!svgBarplotElement){\n console.error(\n `ERROR: no barplot (no elements with '${svgId}' found on the page)`\n );\n return undefined;\n }\n\n const svgElement = svgBarplotElement.cloneNode(true) as SVGElement;\n\n //remove interaction elements\n const placeholders = svgElement.getElementsByClassName(\"interaction-placeholder\");\n for (var i = placeholders.length - 1; i >= 0; --i) placeholders[i].remove();\n\n //remove classnames\n [\"g\", \"rect\"].forEach((tagName) => {\n const elems = svgElement.getElementsByTagName(tagName);\n for (var i = elems.length - 1; i >= 0; --i) elems[i].removeAttribute(\"class\");\n })\n svgElement.removeAttribute(\"style\");\n svgElement.removeAttribute(\"x\");\n svgElement.removeAttribute(\"y\");\n\n\n if(positionalAxis){\n return injectPositionalAxisIntoSVG({\n svgElement, positionalAxis, width, height\n });\n }\n \n //don't remove from element if caller doesn't want to override.\n if(width !== undefined) svgElement.setAttribute(\"width\", `${width}`);\n if(height !== undefined) svgElement.setAttribute(\"height\", `${height}`);\n return svgElement.outerHTML;\n}\n\n\n\n/**\n * Get a string representation of the svg logo. Appropriate for immediate\n * download or for insertion into a larger svg.\n * TODO: optimize sizing a bit better, e.g., remove classnames.\n * @param props \n * @returns \n */\nconst getLogoSvgString = (props: {\n svgId: string,\n alignment: Alignment, \n alignmentType: AminoAcidAlignmentTypeInstance | NucleotideAlignmentTypeInstance;\n aaColorScheme?: AminoacidColorSchemeInstance;\n ntColorScheme?: NucleotideColorSchemeInstance;\n positionsToStyle: PositionsToStyleInstance,\n width?: number;\n height?: number;\n positionalAxis?: {\n numPos: number;\n posHeight: number;\n posWidth: number;\n spaceBtwBarplotAndPositionalAxis: number;\n };\n}) =>{\n const {\n svgId,\n alignmentType,\n aaColorScheme = AminoAcidColorSchemes.list[0],\n ntColorScheme = NucleotideColorSchemes.list[0],\n positionsToStyle,\n width,\n height,\n positionalAxis\n } = props;\n\n const colorScheme = alignmentType === AlignmentTypes.AMINOACID\n ? aaColorScheme : ntColorScheme;\n \n //const svgLogoElements = document.getElementsByClassName(\"av2-sequence-logo\");\n const svgLogoElement = document.getElementById(svgId);\n if (!svgLogoElement){\n console.error(\n `ERROR: no logo (no elements id '${svgId}' found on the page)`\n );\n return undefined;\n }\n\n const svgElement = svgLogoElement.cloneNode(true) as SVGElement;\n svgElement.removeAttribute(\"style\");\n\n //\n //1. remove the interaction placeholder rectangles\n //\n const placeholders = svgElement.getElementsByClassName(\"interaction-placeholder\");\n for (var i = placeholders.length - 1; i >= 0; --i) {\n placeholders[i].remove();\n }\n\n //\n // 2. iterate and set style on every path based on attached classes and positionsToStyle\n //\n const moleculeClass = alignmentType === AlignmentTypes.AMINOACID \n ? AminoAcid \n : Nucleotide;\n\n const defaultColor = moleculeClass.UNKNOWN.colors.get(\n colorScheme\n )?.get(\n ResidueColoring.NO_BACKGROUND\n )?.letterColor.hexString;\n \n Array.from(svgElement.getElementsByTagName(\"g\")).forEach((g) => {\n Array.from(g.getElementsByTagName(\"path\")).forEach(path=>{\n //a bit hacky if logo format every changes ..\n //classInfo expected to look like:\n // [\"resi_A\"], [\"resi_A\", \"q\"], [\"resi_A\", \"c\"], [\"resi_A\", \"q\", \"c\"]\n //we are pulling the field names from the scss file, but signifnicant changes\n //will break this code\n const classInfo = path.getAttribute(\"class\")?.split(\" \")!;\n const letter = classInfo.find(s => s.startsWith(resiClassPrefix))!.slice(-1);\n const isQuery = classInfo.includes(PositionsToStyle.QUERY.shortClassname!);\n const isConsensus = classInfo.includes(PositionsToStyle.CONSENSUS.shortClassname!);\n\n const colorIfStyled = colorScheme.colors[letter]\n ? colorScheme.colors[letter]\n : defaultColor;\n\n const fill =\n positionsToStyle === PositionsToStyle.ALL\n ? colorIfStyled\n : positionsToStyle === PositionsToStyle.QUERY && isQuery\n ? colorIfStyled\n : positionsToStyle === PositionsToStyle.QUERY_DIFF && !isQuery\n ? colorIfStyled\n : positionsToStyle === PositionsToStyle.CONSENSUS && isConsensus\n ? colorIfStyled\n : defaultColor\n\n path.setAttribute(\n \"style\", `fill:${fill};`\n )\n })\n });\n\n //set height width\n if(width !== undefined) svgElement.setAttribute(\"width\", `${width}`);\n if(height !== undefined) svgElement.setAttribute(\"height\", `${height}`);\n\n //\n // 3. encode into a string and modify the residue class name. TODO: lots of extraneous\n // stuff here, e.g., all class names can be removed.\n //\n if(positionalAxis){\n return injectPositionalAxisIntoSVG({\n svgElement, positionalAxis, width, height\n }).replaceAll(\n resiClassPrefix, \"r\" //illustrator can't handle underscores in class names\n );\n }\n return svgElement.outerHTML.replaceAll(\n resiClassPrefix, \"r\" //illustrator can't handle underscores in class names\n )\n}\n\n/**\n * get the title string\n * @param title \n * @param x \n * @param y \n * @returns \n */\nconst getTitleTextElemString = (\n title: string, \n x: number, \n y: number\n) => {\n return [\n `${title}:`\n ].join(\" \");\n} \n\n/**\n * Get the css for some common elements.\n * @returns the css\n */\nconst getStylesheet = () => {\n return [\n ``\n ].join(\"\\n\");\n};\n\n\n/**\n * Layout:\n * LOGO\n * space\n * POSITIONAL AXIS\n * space\n * MSA\n * \n * \n * @param props \n * @returns \n */\nconst getFullViewportSvgString = (props: {\n alignment: Alignment;\n sortBy: SequenceSorterInstance;\n alignmentType: AminoAcidAlignmentTypeInstance | NucleotideAlignmentTypeInstance;\n positionsToStyle: PositionsToStyleInstance;\n residueColoring: ResidueColoringInstance;\n aaColorScheme: AminoacidColorSchemeInstance;\n ntColorScheme: NucleotideColorSchemeInstance;\n\n logoSvgId?: string; // undefined means don't render\n barplots?: {\n svgId: string;\n title: string;\n }[]; // undefined or empty means don't render\n\n includePositionAxis?: boolean;\n includeMetadata?: boolean;\n includeConsensus?: boolean;\n includeQuery?: boolean;\n startSeqIdx?: number;\n endSeqIdx?: number;\n logoHeight?: number;\n barplotHeights?: number;\n moleculeHeight?: number;\n moleculeWidth?: number;\n gapBetweenPlots?: number;\n}) =>{\n\n const {\n alignment, \n sortBy,\n alignmentType, \n aaColorScheme = AminoAcidColorSchemes.list[0],\n ntColorScheme = NucleotideColorSchemes.list[0],\n positionsToStyle, \n residueColoring, \n logoSvgId,\n barplots = [],\n includePositionAxis = true,\n includeMetadata = true,\n includeConsensus = true,\n includeQuery = true,\n endSeqIdx: endIdx,\n startSeqIdx: startIdx = 0,\n moleculeWidth = 7,\n moleculeHeight = 10,\n\n logoHeight = moleculeHeight*10,\n barplotHeights = moleculeHeight*10,\n\n gapBetweenPlots = 5\n } = props;\n\n const colorScheme = alignmentType === AlignmentTypes.AMINOACID\n ? aaColorScheme : ntColorScheme;\n\n const startSeqIdx = startIdx;\n const endSeqIdx = endIdx !== undefined \n ? endIdx\n : alignment.getSequenceCount() > 100 \n ? 99 \n : alignment.getSequenceCount()-1;\n\n const seqs = alignment.getSequences(sortBy);\n const exportedSeqs = startEndIdxToArray(startSeqIdx, endSeqIdx).map(\n seqIdx => seqs[seqIdx]\n );\n const maxGenenameCharCount = exportedSeqs.reduce((acc, seq) => {\n return acc > seq.id.length ? acc : seq.id.length;\n }, -1);\n const genenameWidth = maxGenenameCharCount * moleculeWidth;\n\n //where should things go?\n const BARPLOTS_SPACE_REQ = barplots.length < 1\n ? 0\n : barplots.length * (barplotHeights + gapBetweenPlots);\n\n const LOG0_Y_SPACE_REQ = !logoSvgId \n ? 0 : logoHeight + gapBetweenPlots; //100+5 = 105\n\n const CONSENSUS_SEQ_Y_SPACE_REQ = !includeConsensus \n ? 0 : moleculeHeight + gapBetweenPlots; //10+5 = 15\n\n const QUERY_SEQ_Y_SPACE_REQ = !includeQuery \n ? 0 : moleculeHeight + gapBetweenPlots; //10+5 = 15\n\n const POSITION_AXIS_Y_SPACE_REQ = !includePositionAxis \n ? 0 : moleculeHeight + gapBetweenPlots; //10+5 = 15\n \n const X_OFFSETS = includeMetadata ? genenameWidth : 0;\n const offsets = {\n barplots: {\n y: 0,\n x: X_OFFSETS\n },\n logo: {\n y: BARPLOTS_SPACE_REQ, \n x: X_OFFSETS\n },\n consensus: {\n y: BARPLOTS_SPACE_REQ + LOG0_Y_SPACE_REQ,\n x: X_OFFSETS\n },\n query: {\n y: BARPLOTS_SPACE_REQ + LOG0_Y_SPACE_REQ + CONSENSUS_SEQ_Y_SPACE_REQ,\n x: X_OFFSETS\n },\n position_axis: {\n y: BARPLOTS_SPACE_REQ + LOG0_Y_SPACE_REQ + \n CONSENSUS_SEQ_Y_SPACE_REQ + QUERY_SEQ_Y_SPACE_REQ, \n x: X_OFFSETS\n },\n msa: {\n y: BARPLOTS_SPACE_REQ + LOG0_Y_SPACE_REQ + \n CONSENSUS_SEQ_Y_SPACE_REQ + QUERY_SEQ_Y_SPACE_REQ + \n POSITION_AXIS_Y_SPACE_REQ, \n x: X_OFFSETS\n },\n metadata_and_titles: {\n x: X_OFFSETS - moleculeWidth\n }\n }\n\n //load style stuff\n const moleculeClass = alignmentType === AlignmentTypes.AMINOACID \n ? AminoAcid \n : Nucleotide;\n \n const exportedPlusQueryConsSeqs = [\n ...(!includeQuery ? [] : [alignment.getQuery()]),\n ...(!includeConsensus ? [] : [alignment.getConsensus()]),\n ...(exportedSeqs)\n ];\n\n //Collect all unique letters being exported\n const allLettersInExport = [...new Set( //only take unique set\n [ //make sure to include unknown - this is what is exported for unknown letters,\n //lower case letters, and letters outside positions to style.\n moleculeClass.UNKNOWN.singleLetterCode,\n ...exportedPlusQueryConsSeqs.map((seq)=>{\n return seq.sequence.split(\"\");\n }).join(\"\")\n ])\n ];\n\n //Collect unique letters being exported at each position \n const posidxLetters = new Map();\n for(let posIdx=0; posIdx < exportedPlusQueryConsSeqs[0].sequence.length; posIdx++){\n posidxLetters.set(\n posIdx, \n [...new Set( //only take unique set\n exportedPlusQueryConsSeqs.reduce((acc, seq) => {\n acc.push(seq.sequence[posIdx]);\n return acc;\n }, [] as string[])\n )]\n );\n }\n\n //get colors for each letter (position agnostic)\n const letterToColors = allLettersInExport.reduce((acc, letter)=>{\n const molecule = moleculeClass.fromSingleLetterCode(letter);\n const molColorset = molecule.colors.get(colorScheme)!.get(residueColoring)!;\n acc[letter] = {\n letter: letter,\n backgroundColor: molColorset.backgroundColor[\"hexString\"],\n letterColor: molColorset.letterColor[\"hexString\"]\n };\n return acc;\n }, {} as {\n [letter: string]: {\n letter: string,\n backgroundColor: string,\n letterColor: string\n }\n });\n\n const getIdForLetter = (letter: string, positionIdx?: number) => {\n const baseId = letter === \".\" \n ? \"dot\" \n : letter===\"-\" \n ? \"dash\" \n : letter;\n\n return positionIdx !== undefined && positionsToStyle !== PositionsToStyle.ALL\n ? `${baseId}${positionIdx}` \n : baseId;\n }\n\n //\n // get the barplots plots\n //\n const barplotsString = barplots.map((barplot, idx) => {\n const barplotsX = offsets.barplots.x;\n const barplotsY = offsets.barplots.y + (idx * (barplotHeights + gapBetweenPlots));\n return [\n !includeMetadata \n ? \"\"\n : getTitleTextElemString(\n barplot.title, \n offsets.metadata_and_titles.x,\n barplotsY + (barplotHeights/2), \n ),\n ``,\n getBarplotSvgString({\n svgId: barplot.svgId,\n height: barplotHeights,\n width: (alignment.getSequenceLength() * moleculeWidth)\n }),\n ``\n ].join(\"\");\n }).join(\"\\n\");\n\n //\n // get the logo plot\n //\n const logoString = !logoSvgId \n ? \"\" \n : [\n !includeMetadata \n ? \"\"\n : getTitleTextElemString(\n `Logo`, \n offsets.metadata_and_titles.x,\n offsets.logo.y + (logoHeight/2), \n ),\n ``,\n getLogoSvgString({\n svgId: logoSvgId,\n alignment: alignment, \n alignmentType: alignmentType,\n aaColorScheme: aaColorScheme,\n ntColorScheme: ntColorScheme,\n positionsToStyle: positionsToStyle,\n height: logoHeight,\n width: alignment.getSequenceLength() * moleculeWidth\n }),\n ``\n ].join(\"\");\n\n //\n // get the the position axis\n //\n const positionAxisString = \n [\n !includeMetadata \n ? \"\"\n : getTitleTextElemString(\n `Position`, \n offsets.metadata_and_titles.x,\n offsets.position_axis.y + (moleculeHeight/2), \n ),\n ``,\n getPositionAxisString({\n numPos: alignment.getSequenceLength(),\n posHeight: moleculeHeight,\n posWidth: moleculeWidth\n }),\n ``\n ].join(\"\");\n\n //\n // [MSA] prepare the genename / geneid metadata\n //\n const idElements = exportedSeqs.map((seq, seqIdx) => {\n return [\n //unsure why the width needs to be less than the starting width\n //UPDATE: width is different beause it is a full string rather than broken characters\n //separated out per position as in the matrix. - I had to break up the positional axis\n //to make it exact and we could do so here, but I think having the sequence ids as\n //full strings is more useful.\n ``,\n `${seq.id}`,\n ``\n ].join(\"\")\n });\n\n //\n // [MSA] generate the definitions for each square - color box + AA/NT code\n //\n const getLetterDef = (\n id: string,\n letter: string,\n bgColor: string, \n letterColor: string\n ) => {\n const textElem = [\n `${letter}`\n ].join(\" \");\n\n const rectElem = [\n ``\n ].join(\" \");\n\n return `${rectElem}${textElem}`;\n };\n const letterDefs = positionsToStyle === PositionsToStyle.ALL\n ? allLettersInExport.map((letter)=>{\n //option 1: colors are not based on position (i.e., color all)\n const colors = letterToColors[letter];\n return getLetterDef(\n getIdForLetter(letter), //id\n letter,\n colors.backgroundColor as string, \n colors.letterColor as string\n )\n })\n : Array.from(posidxLetters).map(([posIdx, lettersAtPosition]) => {\n //option 2: colors are based on position (i.e., same as or different than query/consensus)\n const querySeq = alignment.getQuery().sequence;\n const consensusSeq = alignment.getConsensus().sequence;\n const colorArr = lettersAtPosition.reduce((acc, letter) => {\n const letterColor = letterToColors[letter];\n const letterAtPosMatchesStyle = (\n (positionsToStyle === PositionsToStyle.QUERY && letter === querySeq[posIdx]) ||\n (positionsToStyle === PositionsToStyle.QUERY_DIFF && letter !== querySeq[posIdx]) ||\n (positionsToStyle === PositionsToStyle.CONSENSUS && letter === consensusSeq[posIdx]) ||\n (positionsToStyle === PositionsToStyle.CONSENSUS_DIFF && letter !== consensusSeq[posIdx])\n );\n\n if(true === true){\n //if (showElementsWithUnknownColors){ \n //this is tricky to get right - we really want this only to be for the MSA\n //and not for for query/consensus, but that means retooling the query/consensus\n //rendering, i.e., not using the \"use\" elements. Also, we probably don't want to\n //do this when positionsToStyle === PositionsToStyle.ALL. Removing flag for now\n if(letterAtPosMatchesStyle) acc.push(letterColor);\n else{\n acc.push(\n { \n ...letterToColors[moleculeClass.UNKNOWN.singleLetterCode],\n letter: letter //set the letter to be correct with the unknown style\n }\n )\n }\n }\n else if(\n letterAtPosMatchesStyle && \n letterColor.backgroundColor !== \n letterToColors[moleculeClass.UNKNOWN.singleLetterCode].backgroundColor\n ) {\n acc.push(letterColor);\n }\n return acc;\n }, [] as {\n letter: string;\n backgroundColor: string;\n letterColor: string\n }[]);\n \n return colorArr.map(colors=>{\n return getLetterDef(\n getIdForLetter(colors.letter, posIdx), \n colors.letter,\n colors.backgroundColor as string, \n colors.letterColor as string\n )\n }).join(\"\\n\");\n });\n\n //\n // [MSA] the consensus and query msa squares (color box + AA/NT code)\n //\n const consensusString = [\n !includeMetadata \n ? \"\"\n : getTitleTextElemString(\n `Consensus`, \n offsets.metadata_and_titles.x,\n offsets.consensus.y + (moleculeHeight/2), \n ),\n ``,\n ...alignment.getConsensus().sequence.split(\"\").map((letter, posIdx)=>{\n return ``;\n }),\n ``\n ].join(\"\\n\");\n\n const queryString = [\n !includeMetadata \n ? \"\"\n : getTitleTextElemString(\n `Query`, \n offsets.metadata_and_titles.x,\n offsets.query.y + (moleculeHeight/2), \n ),\n ``,\n ...alignment.getQuery().sequence.split(\"\").map((letter, posIdx)=>{\n return ``;\n }),\n ``\n ].join(\"\\n\");\n\n //\n // [MSA] generate the MSA matrix of squares (color box + AA/NT code), each line represents\n // a single sequence and each use element is a single aa/nt\n //\n const msa = exportedSeqs.map((seq, seqIdx)=>{\n return [\n ``,\n ...seq.sequence.split(\"\").map((letter, posIdx)=>{\n return ``;\n }),\n ``\n ].join(\"\\n\");\n });\n\n //\n // create the full file string\n //\n const totalWidth = (\n offsets.msa.x +\n (alignment.getSequenceLength() * moleculeWidth) //width of MSA letters\n );\n const totalHeight = (\n offsets.msa.y +\n ((endSeqIdx-startSeqIdx+1) * moleculeHeight) //MSA: num of sequences * height of sequences\n );\n const fileContentsArr = [\n ``,\n ``,\n getStylesheet(),\n ``,\n ...letterDefs,\n ``,\n barplotsString,\n logoString,\n includeConsensus ? consensusString : \"\",\n includeQuery ? queryString : \"\",\n includePositionAxis ? positionAxisString : \"\",\n ...(includeMetadata ? idElements : []),\n ...msa,\n ``\n ].join(\"\\n\");\n return fileContentsArr;\n}\n","const sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n start: 'end',\n end: 'start'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n const lr = ['left', 'right'];\n const rl = ['right', 'left'];\n const tb = ['top', 'bottom'];\n const bt = ['bottom', 'top'];\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rl : lr;\n return isStart ? lr : rl;\n case 'left':\n case 'right':\n return isStart ? tb : bt;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n return {\n ...rect,\n top: rect.y,\n left: rect.x,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n let {\n reference,\n floating\n } = _ref;\n const sideAxis = getSideAxis(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const alignLength = getAxisLength(alignmentAxis);\n const side = getSide(placement);\n const isVertical = sideAxis === 'y';\n const commonX = reference.x + reference.width / 2 - floating.width / 2;\n const commonY = reference.y + reference.height / 2 - floating.height / 2;\n const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n let coords;\n switch (side) {\n case 'top':\n coords = {\n x: commonX,\n y: reference.y - floating.height\n };\n break;\n case 'bottom':\n coords = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n case 'right':\n coords = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n case 'left':\n coords = {\n x: reference.x - floating.width,\n y: commonY\n };\n break;\n default:\n coords = {\n x: reference.x,\n y: reference.y\n };\n }\n switch (getAlignment(placement)) {\n case 'start':\n coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n case 'end':\n coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n break;\n }\n return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain positioning strategy.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n const {\n placement = 'bottom',\n strategy = 'absolute',\n middleware = [],\n platform\n } = config;\n const validMiddleware = middleware.filter(Boolean);\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n let rects = await platform.getElementRects({\n reference,\n floating,\n strategy\n });\n let {\n x,\n y\n } = computeCoordsFromPlacement(rects, placement, rtl);\n let statefulPlacement = placement;\n let middlewareData = {};\n let resetCount = 0;\n for (let i = 0; i < validMiddleware.length; i++) {\n const {\n name,\n fn\n } = validMiddleware[i];\n const {\n x: nextX,\n y: nextY,\n data,\n reset\n } = await fn({\n x,\n y,\n initialPlacement: placement,\n placement: statefulPlacement,\n strategy,\n middlewareData,\n rects,\n platform,\n elements: {\n reference,\n floating\n }\n });\n x = nextX != null ? nextX : x;\n y = nextY != null ? nextY : y;\n middlewareData = {\n ...middlewareData,\n [name]: {\n ...middlewareData[name],\n ...data\n }\n };\n if (reset && resetCount <= 50) {\n resetCount++;\n if (typeof reset === 'object') {\n if (reset.placement) {\n statefulPlacement = reset.placement;\n }\n if (reset.rects) {\n rects = reset.rects === true ? await platform.getElementRects({\n reference,\n floating,\n strategy\n }) : reset.rects;\n }\n ({\n x,\n y\n } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n }\n i = -1;\n continue;\n }\n }\n return {\n x,\n y,\n placement: statefulPlacement,\n strategy,\n middlewareData\n };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n var _await$platform$isEle;\n if (options === void 0) {\n options = {};\n }\n const {\n x,\n y,\n platform,\n rects,\n elements,\n strategy\n } = state;\n const {\n boundary = 'clippingAncestors',\n rootBoundary = 'viewport',\n elementContext = 'floating',\n altBoundary = false,\n padding = 0\n } = evaluate(options, state);\n const paddingObject = getPaddingObject(padding);\n const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n const element = elements[altBoundary ? altContext : elementContext];\n const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n boundary,\n rootBoundary,\n strategy\n }));\n const rect = elementContext === 'floating' ? {\n ...rects.floating,\n x,\n y\n } : rects.reference;\n const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n x: 1,\n y: 1\n } : {\n x: 1,\n y: 1\n };\n const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n rect,\n offsetParent,\n strategy\n }) : rect);\n return {\n top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n name: 'arrow',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n platform,\n elements,\n middlewareData\n } = state;\n // Since `element` is required, we don't Partial<> the type.\n const {\n element,\n padding = 0\n } = evaluate(options, state) || {};\n if (element == null) {\n return {};\n }\n const paddingObject = getPaddingObject(padding);\n const coords = {\n x,\n y\n };\n const axis = getAlignmentAxis(placement);\n const length = getAxisLength(axis);\n const arrowDimensions = await platform.getDimensions(element);\n const isYAxis = axis === 'y';\n const minProp = isYAxis ? 'top' : 'left';\n const maxProp = isYAxis ? 'bottom' : 'right';\n const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n const startDiff = coords[axis] - rects.reference[axis];\n const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n // DOM platform can return `window` as the `offsetParent`.\n if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n clientSize = elements.floating[clientProp] || rects.floating[length];\n }\n const centerToReference = endDiff / 2 - startDiff / 2;\n\n // If the padding is large enough that it causes the arrow to no longer be\n // centered, modify the padding so that it is centered.\n const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n // Make sure the arrow doesn't overflow the floating element if the center\n // point is outside the floating element's bounds.\n const min$1 = minPadding;\n const max = clientSize - arrowDimensions[length] - maxPadding;\n const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n const offset = clamp(min$1, center, max);\n\n // If the reference is small enough that the arrow's padding causes it to\n // to point to nothing for an aligned placement, adjust the offset of the\n // floating element itself. To ensure `shift()` continues to take action,\n // a single reset is performed when this is true.\n const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center != offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n return {\n [axis]: coords[axis] + alignmentOffset,\n data: {\n [axis]: offset,\n centerOffset: center - offset - alignmentOffset,\n ...(shouldAddOffset && {\n alignmentOffset\n })\n },\n reset: shouldAddOffset\n };\n }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n return allowedPlacementsSortedByAlignment.filter(placement => {\n if (alignment) {\n return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n }\n return true;\n });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'autoPlacement',\n options,\n async fn(state) {\n var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n const {\n rects,\n middlewareData,\n placement,\n platform,\n elements\n } = state;\n const {\n crossAxis = false,\n alignment,\n allowedPlacements = placements,\n autoAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n const currentPlacement = placements$1[currentIndex];\n if (currentPlacement == null) {\n return {};\n }\n const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n // Make `computeCoords` start from the right place.\n if (placement !== currentPlacement) {\n return {\n reset: {\n placement: placements$1[0]\n }\n };\n }\n const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n placement: currentPlacement,\n overflows: currentOverflows\n }];\n const nextPlacement = placements$1[currentIndex + 1];\n\n // There are more placements to check.\n if (nextPlacement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n const placementsSortedByMostSpace = allOverflows.map(d => {\n const alignment = getAlignment(d.placement);\n return [d.placement, alignment && crossAxis ?\n // Check along the mainAxis and main crossAxis side.\n d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n // Check only the mainAxis.\n d.overflows[0], d.overflows];\n }).sort((a, b) => a[1] - b[1]);\n const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n // Aligned placements should not check their opposite crossAxis\n // side.\n getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n if (resetPlacement !== placement) {\n return {\n data: {\n index: currentIndex + 1,\n overflows: allOverflows\n },\n reset: {\n placement: resetPlacement\n }\n };\n }\n return {};\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'flip',\n options,\n async fn(state) {\n var _middlewareData$arrow, _middlewareData$flip;\n const {\n placement,\n middlewareData,\n rects,\n initialPlacement,\n platform,\n elements\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true,\n fallbackPlacements: specifiedFallbackPlacements,\n fallbackStrategy = 'bestFit',\n fallbackAxisSideDirection = 'none',\n flipAlignment = true,\n ...detectOverflowOptions\n } = evaluate(options, state);\n\n // If a reset by the arrow was caused due to an alignment offset being\n // added, we should skip any logic now since `flip()` has already done its\n // work.\n // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n const side = getSide(placement);\n const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n if (!specifiedFallbackPlacements && fallbackAxisSideDirection !== 'none') {\n fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n }\n const placements = [initialPlacement, ...fallbackPlacements];\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const overflows = [];\n let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n if (checkMainAxis) {\n overflows.push(overflow[side]);\n }\n if (checkCrossAxis) {\n const sides = getAlignmentSides(placement, rects, rtl);\n overflows.push(overflow[sides[0]], overflow[sides[1]]);\n }\n overflowsData = [...overflowsData, {\n placement,\n overflows\n }];\n\n // One or more sides is overflowing.\n if (!overflows.every(side => side <= 0)) {\n var _middlewareData$flip2, _overflowsData$filter;\n const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n const nextPlacement = placements[nextIndex];\n if (nextPlacement) {\n // Try next placement and re-run the lifecycle.\n return {\n data: {\n index: nextIndex,\n overflows: overflowsData\n },\n reset: {\n placement: nextPlacement\n }\n };\n }\n\n // First, find the candidates that fit on the mainAxis side of overflow,\n // then find the placement that fits the best on the main crossAxis side.\n let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n // Otherwise fallback.\n if (!resetPlacement) {\n switch (fallbackStrategy) {\n case 'bestFit':\n {\n var _overflowsData$map$so;\n const placement = (_overflowsData$map$so = overflowsData.map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0];\n if (placement) {\n resetPlacement = placement;\n }\n break;\n }\n case 'initialPlacement':\n resetPlacement = initialPlacement;\n break;\n }\n }\n if (placement !== resetPlacement) {\n return {\n reset: {\n placement: resetPlacement\n }\n };\n }\n }\n return {};\n }\n };\n};\n\nfunction getSideOffsets(overflow, rect) {\n return {\n top: overflow.top - rect.height,\n right: overflow.right - rect.width,\n bottom: overflow.bottom - rect.height,\n left: overflow.left - rect.width\n };\n}\nfunction isAnySideFullyClipped(overflow) {\n return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'hide',\n options,\n async fn(state) {\n const {\n rects\n } = state;\n const {\n strategy = 'referenceHidden',\n ...detectOverflowOptions\n } = evaluate(options, state);\n switch (strategy) {\n case 'referenceHidden':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n elementContext: 'reference'\n });\n const offsets = getSideOffsets(overflow, rects.reference);\n return {\n data: {\n referenceHiddenOffsets: offsets,\n referenceHidden: isAnySideFullyClipped(offsets)\n }\n };\n }\n case 'escaped':\n {\n const overflow = await detectOverflow(state, {\n ...detectOverflowOptions,\n altBoundary: true\n });\n const offsets = getSideOffsets(overflow, rects.floating);\n return {\n data: {\n escapedOffsets: offsets,\n escaped: isAnySideFullyClipped(offsets)\n }\n };\n }\n default:\n {\n return {};\n }\n }\n }\n };\n};\n\nfunction getBoundingRect(rects) {\n const minX = min(...rects.map(rect => rect.left));\n const minY = min(...rects.map(rect => rect.top));\n const maxX = max(...rects.map(rect => rect.right));\n const maxY = max(...rects.map(rect => rect.bottom));\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n}\nfunction getRectsByLine(rects) {\n const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n const groups = [];\n let prevRect = null;\n for (let i = 0; i < sortedRects.length; i++) {\n const rect = sortedRects[i];\n if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n groups.push([rect]);\n } else {\n groups[groups.length - 1].push(rect);\n }\n prevRect = rect;\n }\n return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'inline',\n options,\n async fn(state) {\n const {\n placement,\n elements,\n rects,\n platform,\n strategy\n } = state;\n // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n // ClientRect's bounds, despite the event listener being triggered. A\n // padding of 2 seems to handle this issue.\n const {\n padding = 2,\n x,\n y\n } = evaluate(options, state);\n const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n const clientRects = getRectsByLine(nativeClientRects);\n const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n const paddingObject = getPaddingObject(padding);\n function getBoundingClientRect() {\n // There are two rects and they are disjoined.\n if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n // Find the first rect in which the point is fully inside.\n return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n }\n\n // There are 2 or more connected rects.\n if (clientRects.length >= 2) {\n if (getSideAxis(placement) === 'y') {\n const firstRect = clientRects[0];\n const lastRect = clientRects[clientRects.length - 1];\n const isTop = getSide(placement) === 'top';\n const top = firstRect.top;\n const bottom = lastRect.bottom;\n const left = isTop ? firstRect.left : lastRect.left;\n const right = isTop ? firstRect.right : lastRect.right;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n const isLeftSide = getSide(placement) === 'left';\n const maxRight = max(...clientRects.map(rect => rect.right));\n const minLeft = min(...clientRects.map(rect => rect.left));\n const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n const top = measureRects[0].top;\n const bottom = measureRects[measureRects.length - 1].bottom;\n const left = minLeft;\n const right = maxRight;\n const width = right - left;\n const height = bottom - top;\n return {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x: left,\n y: top\n };\n }\n return fallback;\n }\n const resetRects = await platform.getElementRects({\n reference: {\n getBoundingClientRect\n },\n floating: elements.floating,\n strategy\n });\n if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n return {\n reset: {\n rects: resetRects\n }\n };\n }\n return {};\n }\n };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\nasync function convertValueToCoords(state, options) {\n const {\n placement,\n platform,\n elements\n } = state;\n const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isVertical = getSideAxis(placement) === 'y';\n const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n const crossAxisMulti = rtl && isVertical ? -1 : 1;\n const rawValue = evaluate(options, state);\n\n // eslint-disable-next-line prefer-const\n let {\n mainAxis,\n crossAxis,\n alignmentAxis\n } = typeof rawValue === 'number' ? {\n mainAxis: rawValue,\n crossAxis: 0,\n alignmentAxis: null\n } : {\n mainAxis: 0,\n crossAxis: 0,\n alignmentAxis: null,\n ...rawValue\n };\n if (alignment && typeof alignmentAxis === 'number') {\n crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n }\n return isVertical ? {\n x: crossAxis * crossAxisMulti,\n y: mainAxis * mainAxisMulti\n } : {\n x: mainAxis * mainAxisMulti,\n y: crossAxis * crossAxisMulti\n };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n if (options === void 0) {\n options = 0;\n }\n return {\n name: 'offset',\n options,\n async fn(state) {\n var _middlewareData$offse, _middlewareData$arrow;\n const {\n x,\n y,\n placement,\n middlewareData\n } = state;\n const diffCoords = await convertValueToCoords(state, options);\n\n // If the placement is the same and the arrow caused an alignment offset\n // then we don't need to change the positioning coordinates.\n if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n return {};\n }\n return {\n x: x + diffCoords.x,\n y: y + diffCoords.y,\n data: {\n ...diffCoords,\n placement\n }\n };\n }\n };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'shift',\n options,\n async fn(state) {\n const {\n x,\n y,\n placement\n } = state;\n const {\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = false,\n limiter = {\n fn: _ref => {\n let {\n x,\n y\n } = _ref;\n return {\n x,\n y\n };\n }\n },\n ...detectOverflowOptions\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const crossAxis = getSideAxis(getSide(placement));\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n if (checkMainAxis) {\n const minSide = mainAxis === 'y' ? 'top' : 'left';\n const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n const min = mainAxisCoord + overflow[minSide];\n const max = mainAxisCoord - overflow[maxSide];\n mainAxisCoord = clamp(min, mainAxisCoord, max);\n }\n if (checkCrossAxis) {\n const minSide = crossAxis === 'y' ? 'top' : 'left';\n const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n const min = crossAxisCoord + overflow[minSide];\n const max = crossAxisCoord - overflow[maxSide];\n crossAxisCoord = clamp(min, crossAxisCoord, max);\n }\n const limitedCoords = limiter.fn({\n ...state,\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n });\n return {\n ...limitedCoords,\n data: {\n x: limitedCoords.x - x,\n y: limitedCoords.y - y\n }\n };\n }\n };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n options,\n fn(state) {\n const {\n x,\n y,\n placement,\n rects,\n middlewareData\n } = state;\n const {\n offset = 0,\n mainAxis: checkMainAxis = true,\n crossAxis: checkCrossAxis = true\n } = evaluate(options, state);\n const coords = {\n x,\n y\n };\n const crossAxis = getSideAxis(placement);\n const mainAxis = getOppositeAxis(crossAxis);\n let mainAxisCoord = coords[mainAxis];\n let crossAxisCoord = coords[crossAxis];\n const rawOffset = evaluate(offset, state);\n const computedOffset = typeof rawOffset === 'number' ? {\n mainAxis: rawOffset,\n crossAxis: 0\n } : {\n mainAxis: 0,\n crossAxis: 0,\n ...rawOffset\n };\n if (checkMainAxis) {\n const len = mainAxis === 'y' ? 'height' : 'width';\n const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n if (mainAxisCoord < limitMin) {\n mainAxisCoord = limitMin;\n } else if (mainAxisCoord > limitMax) {\n mainAxisCoord = limitMax;\n }\n }\n if (checkCrossAxis) {\n var _middlewareData$offse, _middlewareData$offse2;\n const len = mainAxis === 'y' ? 'width' : 'height';\n const isOriginSide = ['top', 'left'].includes(getSide(placement));\n const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n if (crossAxisCoord < limitMin) {\n crossAxisCoord = limitMin;\n } else if (crossAxisCoord > limitMax) {\n crossAxisCoord = limitMax;\n }\n }\n return {\n [mainAxis]: mainAxisCoord,\n [crossAxis]: crossAxisCoord\n };\n }\n };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n if (options === void 0) {\n options = {};\n }\n return {\n name: 'size',\n options,\n async fn(state) {\n const {\n placement,\n rects,\n platform,\n elements\n } = state;\n const {\n apply = () => {},\n ...detectOverflowOptions\n } = evaluate(options, state);\n const overflow = await detectOverflow(state, detectOverflowOptions);\n const side = getSide(placement);\n const alignment = getAlignment(placement);\n const isYAxis = getSideAxis(placement) === 'y';\n const {\n width,\n height\n } = rects.floating;\n let heightSide;\n let widthSide;\n if (side === 'top' || side === 'bottom') {\n heightSide = side;\n widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n } else {\n widthSide = side;\n heightSide = alignment === 'end' ? 'top' : 'bottom';\n }\n const overflowAvailableHeight = height - overflow[heightSide];\n const overflowAvailableWidth = width - overflow[widthSide];\n const noShift = !state.middlewareData.shift;\n let availableHeight = overflowAvailableHeight;\n let availableWidth = overflowAvailableWidth;\n if (isYAxis) {\n const maximumClippingWidth = width - overflow.left - overflow.right;\n availableWidth = alignment || noShift ? min(overflowAvailableWidth, maximumClippingWidth) : maximumClippingWidth;\n } else {\n const maximumClippingHeight = height - overflow.top - overflow.bottom;\n availableHeight = alignment || noShift ? min(overflowAvailableHeight, maximumClippingHeight) : maximumClippingHeight;\n }\n if (noShift && !alignment) {\n const xMin = max(overflow.left, 0);\n const xMax = max(overflow.right, 0);\n const yMin = max(overflow.top, 0);\n const yMax = max(overflow.bottom, 0);\n if (isYAxis) {\n availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n } else {\n availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n }\n }\n await apply({\n ...state,\n availableWidth,\n availableHeight\n });\n const nextDimensions = await platform.getDimensions(elements.floating);\n if (width !== nextDimensions.width || height !== nextDimensions.height) {\n return {\n reset: {\n rects: true\n }\n };\n }\n return {};\n }\n };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null ? void 0 : (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n // Browsers without `ShadowRoot` support.\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n const webkit = isWebKit();\n const css = getComputedStyle(element);\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n return css.transform !== 'none' || css.perspective !== 'none' || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else {\n currentNode = getParentNode(currentNode);\n }\n }\n return null;\n}\nfunction isWebKit() {\n if (typeof CSS === 'undefined' || !CSS.supports) return false;\n return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.pageXOffset,\n scrollTop: element.pageYOffset\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], win.frameElement && traverseIframes ? getOverflowAncestors(win.frameElement) : []);\n }\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isWebKit };\n","import { rectToClientRect, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { arrow, autoPlacement, detectOverflow, flip, hide, inline, limitShift, offset, shift, size } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getDocumentElement, getNodeName, isOverflowElement, getNodeScroll, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n const css = getComputedStyle(element);\n // In testing environments, the `width` and `height` properties are empty\n // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n let width = parseFloat(css.width) || 0;\n let height = parseFloat(css.height) || 0;\n const hasOffset = isHTMLElement(element);\n const offsetWidth = hasOffset ? element.offsetWidth : width;\n const offsetHeight = hasOffset ? element.offsetHeight : height;\n const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n if (shouldFallback) {\n width = offsetWidth;\n height = offsetHeight;\n }\n return {\n width,\n height,\n $: shouldFallback\n };\n}\n\nfunction unwrapElement(element) {\n return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n const domElement = unwrapElement(element);\n if (!isHTMLElement(domElement)) {\n return createCoords(1);\n }\n const rect = domElement.getBoundingClientRect();\n const {\n width,\n height,\n $\n } = getCssDimensions(domElement);\n let x = ($ ? round(rect.width) : rect.width) / width;\n let y = ($ ? round(rect.height) : rect.height) / height;\n\n // 0, NaN, or Infinity should always fallback to 1.\n\n if (!x || !Number.isFinite(x)) {\n x = 1;\n }\n if (!y || !Number.isFinite(y)) {\n y = 1;\n }\n return {\n x,\n y\n };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n const win = getWindow(element);\n if (!isWebKit() || !win.visualViewport) {\n return noOffsets;\n }\n return {\n x: win.visualViewport.offsetLeft,\n y: win.visualViewport.offsetTop\n };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n return false;\n }\n return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n const clientRect = element.getBoundingClientRect();\n const domElement = unwrapElement(element);\n let scale = createCoords(1);\n if (includeScale) {\n if (offsetParent) {\n if (isElement(offsetParent)) {\n scale = getScale(offsetParent);\n }\n } else {\n scale = getScale(element);\n }\n }\n const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n let x = (clientRect.left + visualOffsets.x) / scale.x;\n let y = (clientRect.top + visualOffsets.y) / scale.y;\n let width = clientRect.width / scale.x;\n let height = clientRect.height / scale.y;\n if (domElement) {\n const win = getWindow(domElement);\n const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n let currentIFrame = win.frameElement;\n while (currentIFrame && offsetParent && offsetWin !== win) {\n const iframeScale = getScale(currentIFrame);\n const iframeRect = currentIFrame.getBoundingClientRect();\n const css = getComputedStyle(currentIFrame);\n const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n x *= iframeScale.x;\n y *= iframeScale.y;\n width *= iframeScale.x;\n height *= iframeScale.y;\n x += left;\n y += top;\n currentIFrame = getWindow(currentIFrame).frameElement;\n }\n }\n return rectToClientRect({\n width,\n height,\n x,\n y\n });\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n let {\n rect,\n offsetParent,\n strategy\n } = _ref;\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n if (offsetParent === documentElement) {\n return rect;\n }\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n let scale = createCoords(1);\n const offsets = createCoords(0);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isHTMLElement(offsetParent)) {\n const offsetRect = getBoundingClientRect(offsetParent);\n scale = getScale(offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n }\n }\n return {\n width: rect.width * scale.x,\n height: rect.height * scale.y,\n x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n };\n}\n\nfunction getClientRects(element) {\n return Array.from(element.getClientRects());\n}\n\nfunction getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n const html = getDocumentElement(element);\n const scroll = getNodeScroll(element);\n const body = element.ownerDocument.body;\n const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n const y = -scroll.scrollTop;\n if (getComputedStyle(body).direction === 'rtl') {\n x += max(html.clientWidth, body.clientWidth) - width;\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\nfunction getViewportRect(element, strategy) {\n const win = getWindow(element);\n const html = getDocumentElement(element);\n const visualViewport = win.visualViewport;\n let width = html.clientWidth;\n let height = html.clientHeight;\n let x = 0;\n let y = 0;\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n const visualViewportBased = isWebKit();\n if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n return {\n width,\n height,\n x,\n y\n };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n const top = clientRect.top + element.clientTop;\n const left = clientRect.left + element.clientLeft;\n const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n const width = element.clientWidth * scale.x;\n const height = element.clientHeight * scale.y;\n const x = left * scale.x;\n const y = top * scale.y;\n return {\n width,\n height,\n x,\n y\n };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n let rect;\n if (clippingAncestor === 'viewport') {\n rect = getViewportRect(element, strategy);\n } else if (clippingAncestor === 'document') {\n rect = getDocumentRect(getDocumentElement(element));\n } else if (isElement(clippingAncestor)) {\n rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n } else {\n const visualOffsets = getVisualOffsets(element);\n rect = {\n ...clippingAncestor,\n x: clippingAncestor.x - visualOffsets.x,\n y: clippingAncestor.y - visualOffsets.y\n };\n }\n return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n const parentNode = getParentNode(element);\n if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n return false;\n }\n return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n const cachedResult = cache.get(element);\n if (cachedResult) {\n return cachedResult;\n }\n let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n let currentContainingBlockComputedStyle = null;\n const elementIsFixed = getComputedStyle(element).position === 'fixed';\n let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n const computedStyle = getComputedStyle(currentNode);\n const currentNodeIsContaining = isContainingBlock(currentNode);\n if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n currentContainingBlockComputedStyle = null;\n }\n const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n if (shouldDropCurrentNode) {\n // Drop non-containing blocks.\n result = result.filter(ancestor => ancestor !== currentNode);\n } else {\n // Record last containing block for next iteration.\n currentContainingBlockComputedStyle = computedStyle;\n }\n currentNode = getParentNode(currentNode);\n }\n cache.set(element, result);\n return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n let {\n element,\n boundary,\n rootBoundary,\n strategy\n } = _ref;\n const elementClippingAncestors = boundary === 'clippingAncestors' ? getClippingElementAncestors(element, this._c) : [].concat(boundary);\n const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n const firstClippingAncestor = clippingAncestors[0];\n const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n return {\n width: clippingRect.right - clippingRect.left,\n height: clippingRect.bottom - clippingRect.top,\n x: clippingRect.left,\n y: clippingRect.top\n };\n}\n\nfunction getDimensions(element) {\n return getCssDimensions(element);\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n const isOffsetParentAnElement = isHTMLElement(offsetParent);\n const documentElement = getDocumentElement(offsetParent);\n const isFixed = strategy === 'fixed';\n const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n let scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n const offsets = createCoords(0);\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n if (isOffsetParentAnElement) {\n const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n offsets.x = offsetRect.x + offsetParent.clientLeft;\n offsets.y = offsetRect.y + offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n return null;\n }\n if (polyfill) {\n return polyfill(element);\n }\n return element.offsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n const window = getWindow(element);\n if (!isHTMLElement(element)) {\n return window;\n }\n let offsetParent = getTrueOffsetParent(element, polyfill);\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n }\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n return window;\n }\n return offsetParent || getContainingBlock(element) || window;\n}\n\nconst getElementRects = async function (_ref) {\n let {\n reference,\n floating,\n strategy\n } = _ref;\n const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n const getDimensionsFn = this.getDimensions;\n return {\n reference: getRectRelativeToOffsetParent(reference, await getOffsetParentFn(floating), strategy),\n floating: {\n x: 0,\n y: 0,\n ...(await getDimensionsFn(floating))\n }\n };\n};\n\nfunction isRTL(element) {\n return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n convertOffsetParentRelativeRectToViewportRelativeRect,\n getDocumentElement,\n getClippingRect,\n getOffsetParent,\n getElementRects,\n getClientRects,\n getDimensions,\n getScale,\n isElement,\n isRTL\n};\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n let io = null;\n let timeoutId;\n const root = getDocumentElement(element);\n function cleanup() {\n clearTimeout(timeoutId);\n io && io.disconnect();\n io = null;\n }\n function refresh(skip, threshold) {\n if (skip === void 0) {\n skip = false;\n }\n if (threshold === void 0) {\n threshold = 1;\n }\n cleanup();\n const {\n left,\n top,\n width,\n height\n } = element.getBoundingClientRect();\n if (!skip) {\n onMove();\n }\n if (!width || !height) {\n return;\n }\n const insetTop = floor(top);\n const insetRight = floor(root.clientWidth - (left + width));\n const insetBottom = floor(root.clientHeight - (top + height));\n const insetLeft = floor(left);\n const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n const options = {\n rootMargin,\n threshold: max(0, min(1, threshold)) || 1\n };\n let isFirstUpdate = true;\n function handleObserve(entries) {\n const ratio = entries[0].intersectionRatio;\n if (ratio !== threshold) {\n if (!isFirstUpdate) {\n return refresh();\n }\n if (!ratio) {\n timeoutId = setTimeout(() => {\n refresh(false, 1e-7);\n }, 100);\n } else {\n refresh(false, ratio);\n }\n }\n isFirstUpdate = false;\n }\n\n // Older browsers don't support a `document` as the root and will throw an\n // error.\n try {\n io = new IntersectionObserver(handleObserve, {\n ...options,\n // Handle