/*
    Lexcube - Interactive 3D Data Cube Visualization
    Copyright (C) 2022 Maximilian Söchting <maximilian.soechting@uni-leipzig.de>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
*/

import {
    DOMWidgetModel,
    DOMWidgetView,
    ISerializers,
} from '@jupyter-widgets/base';

import { MODULE_NAME, MODULE_VERSION } from './version';

import { CubeClientContext } from './lexcube-client/src/client/client'
import { DEFAULT_WIDGET_HEIGHT, DEFAULT_WIDGET_WIDTH, Dimension } from './lexcube-client/src/client/constants';

import '../css/widget.css';

const svgTemplate = `
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   version="1.1"
   id="svg2"
   width="16.381001cm"
   height="21.381001cm"
   viewBox="0 0 619.12444 808.1008"
   sodipodi:docname="vorlage-v3.svg"
   inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
   xml:space="preserve"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:svg="http://www.w3.org/2000/svg"><defs
     id="defs6"><rect
       x="433.44679"
       y="14.294074"
       width="174.02277"
       height="179.09635"
       id="rect10742" /><rect
       x="520.74249"
       y="95.171771"
       width="18.228203"
       height="52.393528"
       id="rect10599" /><rect
       x="427.7712"
       y="13.663454"
       width="179.69836"
       height="180.56779"
       id="rect10145" /><rect
       x="26.07883"
       y="74.913945"
       width="189.59244"
       height="330.78516"
       id="rect9863" /><rect
       x="444.13267"
       y="40.429748"
       width="146.70237"
       height="100.7771"
       id="rect5500" />
       <style type="text/css">
        @import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600');
       </style>
       </defs><sodipodi:namedview
     id="namedview4"
     pagecolor="#ffffff"
     bordercolor="#000000"
     borderopacity="0.25"
     inkscape:showpageshadow="2"
     inkscape:pageopacity="0.0"
     inkscape:pagecheckerboard="0"
     inkscape:deskcolor="#d1d1d1"
     showgrid="false"
     inkscape:zoom="2.378608"
     inkscape:cx="410.32402"
     inkscape:cy="253.0892"
     inkscape:window-width="3840"
     inkscape:window-height="2036"
     inkscape:window-x="3828"
     inkscape:window-y="-12"
     inkscape:window-maximized="1"
     inkscape:current-layer="layer1"
     inkscape:document-units="cm"
     inkscape:lockguides="true"
     showguides="true"><inkscape:page
       x="0"
       y="0"
       id="page8"
       width="619.12439"
       height="808.10077"
       inkscape:export-filename="esdc_at.png"
       inkscape:export-xdpi="650"
       inkscape:export-ydpi="650" /></sodipodi:namedview><g
     inkscape:groupmode="layer"
     id="layer1"
     inkscape:label="Instructions &amp; Texts"><image
       width="162.37064"
       height="162.37064"
       preserveAspectRatio="none"
       xlink:href="qrcode.png"
       id="image8277"
       x="455.946465"
       y="636.43506" /><image
       width="185.30376"
       height="57.240425"
       preserveAspectRatio="none"
       xlink:href="data:image/png;base64,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 VRk8VzUft6RzxYlvPeusBdF5RERERERERESkvNTB30Kum3Xab19uX7SFmZ0ELI7OI9JiFgNTq4tt wxFnTh6n4r6IiIiIiIiIiERTB3+LuXnaWQuAE3fa59hZ5j7VnQ9GZyqSilc0okeWVTVjpsNRw8+c 9EB0GBERERERERERkS7q4G9Rc2acetd27x2yrbmPBl6IziNSUHMqler7hp05aT8V90VERERERERE JDXq4G9hHR0dVWDqzrsfdVVnW9skg72iM4kUg/3R3Y4aMeGcedFJREREREREREREeqMCfwlcd/m4 R4G9R+5x3CetUj0PeGt0plR5paoRPeX2kLmdMOysSRfj7tFhRERERERERERE+qIRPSUy97JTrrT2 6ibARKAanUckHfa0m495YbFtOGzCxItU3BcRERERERERkSJQB3/JzJ52+vPANz+69zHTKs5UYOPo TCKBXjK3ye1LOO1NEyf/NzqMiIiIiIiIiIjIQKiDv6Sun3naTfOHPrO542OARdF5kuEVjegphyXA 1Eqluv6wCRPHvGniRBX3RURERERERESkcNTBX2K3TZmyBBi34+5Hz2xrsynAR6MziTSYmzHDrHLs 0DPOuT86jIiIiIiIiIiISC1U4BfmXT72H2a20057HnOQ42cBa0VnEqk/v9kqduSwMybdFJ1ERERE RERERESkHlTgFwA821T0oh33O/K69iXtZ7hxUHSmCO5VjehpPX9158QREyZPjw4iIiIiIiIiIiJS T5rBL68xb9oZj8++9LSDzewTwEPReURq8G+D0cMffuK9IyZMUnFfRERERERERERajgr80qPZM0/9 1SpLh2xs2DigMzqPyAA86+ZjFqz+4ruGjZ80lWnT9P4VEREREREREZGWpBE90qsrruh4GRgzap+j L/FOm4qxVXSmRqtUKhrRU1yLcf/hkOoKHW88++z50WFEREREREREREQaTR38slyzZ4y9s3P+kG1w +xbwYnQekWVUzZjune0bDp8w+Zsq7ouIiIiIiIiISFmog1/6Zd68jqXAObvsdvwVnW2dP8DYJTqT CDDHrPPwYWeed1d0EBERERERERERkWZTgV8G5NorTn4A+NjIvY7eF+xcg6HRmerJvaoRPcXwB6/a kSPOmvjb6CAiIiIiIiIiIiJRNKJHBmXurLHTFy/2DTGbCnh0HikHw+9zZ7/hEyZvreK+iIiIiIiI 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 AABJRU5ErkJggg== "
       id="image972"
       x="14.296597"
       y="7.30585"
       style="display:inline" /><text
       xml:space="preserve"
       style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:Montserrat;-inkscape-font-specification:'Montserrat Medium';text-align:center;text-anchor:middle;fill:#000000;stroke-linejoin:round"
       x="106.77178"
       y="636.95166"
       id="text7967"><tspan
         sodipodi:role="line"
         id="tspan7965"
         x="536.77178"
         y="636.95166"
         style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-family:Montserrat;-inkscape-font-specification:'Montserrat Semi-Bold'">Link to your cube:</tspan></text><text
       xml:space="preserve"
       id="text9861"
       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:Montserrat;-inkscape-font-specification:'Montserrat, @wght=400';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-variation-settings:'wght' 400;text-align:center;white-space:pre;shape-inside:url(#rect9863);display:inline;fill:#000000;stroke-linejoin:round"
       inkscape:label="text9861"
       transform="translate(-16.304348,-6.3752239)"><tspan
         x="36.168945"
         y="87.168612"
         id="tspan10952"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan10950">1) Print this sheet, e.g. at a self-</tspan></tspan><tspan
         x="29.503906"
         y="103.83524"
         id="tspan10956"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan10954">service photo printer (15x20cm) or </tspan></tspan><tspan
         x="82.844727"
         y="120.50186"
         id="tspan10960"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan10958">a photo shop. 
</tspan></tspan><tspan
         x="120.875"
         y="137.16849"
         id="tspan10964"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan10962">
</tspan></tspan><tspan
         x="33.602539"
         y="153.83512"
         id="tspan10968"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan10966">2) If you use normal office paper, </tspan></tspan><tspan
         x="29.489258"
         y="170.50174"
         id="tspan10972"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan10970">we recommend gluing this page to </tspan></tspan><tspan
         x="41.506836"
         y="187.16837"
         id="tspan10976"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan10974">thin cardboard first to improve </tspan></tspan><tspan
         x="99.646484"
         y="203.83499"
         id="tspan10980"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan10978">stability.
</tspan></tspan><tspan
         x="119.20801"
         y="220.50162"
         id="tspan10984"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan10982"> 
</tspan></tspan><tspan
         x="32.820312"
         y="237.16825"
         id="tspan10988"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan10986">3) Fold all inner and outer edges, </tspan></tspan><tspan
         x="55.516602"
         y="253.83487"
         id="tspan10992"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan10990">preferably several times.
</tspan></tspan><tspan
         x="120.875"
         y="270.5015"
         id="tspan10996"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan10994">
</tspan></tspan><tspan
         x="26.814453"
         y="287.16812"
         id="tspan11000"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan10998">4) Cut out the cube template on the </tspan></tspan><tspan
         x="90.517578"
         y="303.83475"
         id="tspan11004"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan11002">outer edge.
</tspan></tspan><tspan
         x="120.875"
         y="320.50138"
         id="tspan11008"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan11006">
</tspan></tspan><tspan
         x="41.829102"
         y="337.168"
         id="tspan11012"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan11010">5) Stick the folded flaps to the </tspan></tspan><tspan
         x="31.496094"
         y="353.83463"
         id="tspan11016"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan11014">adjacent sides with a glue stick or </tspan></tspan><tspan
         x="34.147461"
         y="370.50125"
         id="tspan11020"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan11018">double-sided tape and assemble </tspan></tspan><tspan
         x="62.169922"
         y="387.16788"
         id="tspan11024"><tspan
           style="font-size:12px;font-family:Arial;-inkscape-font-specification:'Arial, Normal'"
           id="tspan11022">the cube step by step.</tspan></tspan></text>
                 
        <foreignObject x="445" y="35" width="170" height="170" >
        <div
          xmlns="http://www.w3.org/1999/xhtml"
          style="
            width: 166px; height: 166px;
            font-size: 32px;
            overflow: auto; /* scroll */
            font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:1.25;font-family:Montserrat;-inkscape-font-specification:'Montserrat, @wght=500';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-variation-settings:'wght' 500;font-weight:500;text-align:start;display:flex;flex-direction:column;gap:5px;
          "
        ><div>Dataset:</div><div style="font-variation-settings: 'wght' 600;font-weight:600;">%dataset%</div><div>Parameter:</div><div style="font-variation-settings: 'wght' 600;font-weight:600;">%parameter%</div>
        </div>
      </foreignObject><foreignObject x="445" y="460" width="170" height="170" >
        <div
          xmlns="http://www.w3.org/1999/xhtml"
          style="
            width: 166px; height: 166px;
            font-size: 24px;
            overflow: auto; /* scroll */
            font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15px;line-height:1.25;font-family:Montserrat;-inkscape-font-specification:'Montserrat, @wght=500';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-variation-settings:'wght' 500;text-align:start;display:flex;flex-direction:column;gap:5px;display:none;
          "
        ><div>Note:</div><div style="font-variation-settings: 'wght' 600;">%note%</div>
        </div>
      </foreignObject></g><g
     id="g10"
     inkscape:groupmode="layer"
     inkscape:label="Folding edges"
     transform="matrix(1.3333333,0,0,-1.3333333,-87.877633,901.67036)"><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 216.63255,381.66536 21.134,-19.003"
       id="path1183" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 216.63256,485.39195 v -103.727"
       id="path1181" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 237.76635,220.92946 -21.133,-19.003"
       id="path1179" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 216.63355,98.199964 21.133,-19.003"
       id="path1177" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="M 216.63355,201.92646 V 98.199464"
       id="path1175" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 379.49875,79.197064 21.135,19.003"
       id="path1173" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 400.63355,201.92646 -21.135,19.003"
       id="path1171" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="M 400.63355,98.199964 V 201.92696"
       id="path1169" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 379.50075,646.12666 -19.004,21.134"
       id="path1167" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 256.77025,667.26046 -19.003,-21.134"
       id="path1165" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 360.49685,667.26046 h -103.727"
       id="path1163" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 521.23155,504.39364 -19.003,21.133"
       id="path1161" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 398.50204,525.52644 -19.00299,-21.133"
       id="path1159" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 502.22864,525.52644 h -103.727"
       id="path1157" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 379.49915,362.66125 19.003,-21.135"
       id="path1155" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 502.22865,341.52645 19.00299,21.135"
       id="path1153" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 398.50204,341.52645 h 103.727"
       id="path1151" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 237.76645,362.66156 v -141.732 H 96.034449 v 141.732 z"
       id="path1149" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 96.034349,362.66386 -21.134,-19.004"
       id="path1147" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 74.900549,239.93336 21.134,-19.003"
       id="path1145" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 74.900549,343.65996 v -103.727"
       id="path126-9" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 379.49845,504.39456 h -141.732 v 141.732 h 141.732 z"
       id="path1195" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 379.49845,362.66156 h -141.732 v 141.732 h 141.732 z"
       id="path1193" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 379.49845,220.92956 h -141.732 v 141.732 h 141.732 z"
       id="path1191" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 379.49845,79.196564 h -141.732 V 220.92856 h 141.732 z"
       id="path1189" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 521.23145,362.66156 h -141.732 v 141.732 h 141.732 z"
       id="path1187" /><path
       style="fill:none;stroke:#000000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
       d="m 237.76637,504.39586 -21.134,-19.004"
       id="path1185" /></g><g
     inkscape:groupmode="layer"
     id="layer2"
     inkscape:label="Cube Images"
     transform="translate(-87.877633,-220.84967)"
     style="display:inline"><image
       width="189.01418"
       height="189.01418"
       preserveAspectRatio="none"
       xlink:href="current/front.png"
       id="image2049"
       x="317.48395"
       y="639.43231"
       inkscape:label="front" /><image
       width="189.01418"
       height="189.01418"
       preserveAspectRatio="none"
       xlink:href="current/left.png"
       id="image5000"
       x="128.50755"
       y="639.43231"
       inkscape:label="left" /><image
       width="189.01418"
       height="189.01418"
       preserveAspectRatio="none"
       xlink:href="current/top.png"
       id="image5082"
       x="-506.49811"
       y="450.45596"
       transform="scale(-1,1)"
       inkscape:label="top" /><image
       width="189.01418"
       height="189.01418"
       preserveAspectRatio="none"
       xlink:href="current/bottom.png"
       id="image5179"
       x="317.48395"
       y="828.40869"
       inkscape:label="bottom" /><image
       width="189.01418"
       height="189.01418"
       preserveAspectRatio="none"
       xlink:href="current/right.png"
       id="image5229"
       x="-639.47009"
       y="506.4603"
       transform="rotate(-90)"
       inkscape:label="right" /><image
       width="189.01418"
       height="189.01418"
       preserveAspectRatio="none"
       xlink:href="current/back.png"
       id="image446"
       x="-506.49811"
       y="-450.49377"
       transform="scale(-1)"
       inkscape:label="back" /></g></svg>
`;

const htmlCode = `<div class="print-template-wrapper" style="display: none">${svgTemplate}</div>
<div class="fullscreen-wrapper flex-col-center print-template-result-wrapper" style="background-color: rgba(0, 0, 0, 1); display: none; z-index: 20;">
    <div class="ui-normal flex-col-center" style="box-shadow: 10px 10px 20px black;max-height:95%" onclick="event.stopPropagation()">
        <div class="print-template-loading-section flex-col-center noselect" style="padding: 20px;">
            <div class="logo" style="padding:20px;width:90px;height:90px">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="25 25 50 50" preserveAspectRatio="xMidYMid" style="shape-rendering: auto; display: block; background: transparent;" width="100%" height="100%" xmlns:xlink="http://www.w3.org/1999/xlink"><g><g transform="rotate(0 50 50)">
            <rect fill="#8982b0" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-1.1111111111111112s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(20 50 50)">
            <rect fill="#e8736c" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-1.0457516339869282s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(40 50 50)">
            <rect fill="#435179" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-0.9803921568627452s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(60 50 50)">
            <rect fill="#8982b0" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-0.9150326797385622s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(80 50 50)">
            <rect fill="#e8736c" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-0.8496732026143792s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(100 50 50)">
            <rect fill="#435179" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-0.7843137254901962s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(120 50 50)">
            <rect fill="#8982b0" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-0.7189542483660131s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(140 50 50)">
            <rect fill="#e8736c" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-0.6535947712418301s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(160 50 50)">
            <rect fill="#435179" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-0.5882352941176471s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(180 50 50)">
            <rect fill="#8982b0" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-0.5228758169934641s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(200 50 50)">
            <rect fill="#e8736c" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-0.4575163398692811s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(220 50 50)">
            <rect fill="#435179" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-0.3921568627450981s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(240 50 50)">
            <rect fill="#8982b0" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-0.32679738562091504s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(260 50 50)">
            <rect fill="#e8736c" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-0.26143790849673204s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(280 50 50)">
            <rect fill="#435179" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-0.19607843137254904s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(300 50 50)">
            <rect fill="#8982b0" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-0.13071895424836602s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(320 50 50)">
            <rect fill="#e8736c" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="-0.06535947712418301s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g transform="rotate(340 50 50)">
            <rect fill="#435179" height="6" width="6" ry="3" rx="3" y="27" x="47">
              <animate repeatCount="indefinite" begin="0s" dur="1.1764705882352942s" keyTimes="0;1" values="1;0" attributeName="opacity"></animate>
            </rect>
          </g><g></g></g></svg>
            </div>
            <div>Building your own data cube...</div>
        </div>
        <div class="print-template-result-section" style="display: none;max-height: 100%;overflow-y: auto;">
            <div class="flex-col-center" style="gap: 10px;text-align: center;height: 100%;">
                <h1>Craft Your Data Cube!</h1>
                <div>Print🖨️, fold📃, cut✂️ and glue🩹 to make your own crafted data cube. 🧊</div>
                <div style="display: flex; flex-direction: row;gap: 10px;justify-content: center;">
                    <a class="download-print-template-result-svg" style="font-size: larger;">Download SVG</a>
                    <a class="download-print-template-result-png" style="font-size: larger;">Download PNG</a>
                    <a class="download-print-template-result-edit-note" style="font-size: larger;" href="#">Add custom note</a>
                </div>
                <div class="print-template-result"></div>
                <button style="font-size: larger; margin: 10px" onclick="const d = this.parentNode.parentNode.parentNode.parentNode;d.style.display = 'none';">Close</button>
            </div>
        </div>
    </div>
</div>

<div class="fullscreen-wrapper nopointer noselect" style="text-align: center; color:white">
<div style="position: absolute" class="axis-label-parent axis-label-parent-x-min"><div class="axis-label axis-label-x-min"></div></div>
<div style="position: absolute" class="axis-label-parent axis-label-parent-x-max"><div class="axis-label axis-label-x-max"></div></div>
<div style="position: absolute" class="axis-label-parent axis-label-parent-x-dimension-name"><div class="axis-label axis-label-x-dimension-name"></div></div>
<div style="position: absolute" class="axis-label-parent axis-label-parent-y-min"><div class="axis-label axis-label-y-min"></div></div>
<div style="position: absolute" class="axis-label-parent axis-label-parent-y-max"><div class="axis-label axis-label-y-max"></div></div>
<div style="position: absolute" class="axis-label-parent axis-label-parent-y-dimension-name"><div class="axis-label axis-label-y-dimension-name"></div></div>
<div style="position: absolute" class="axis-label-parent axis-label-parent-z-min"><div class="axis-label axis-label-z-min"></div></div>
<div style="position: absolute" class="axis-label-parent axis-label-parent-z-max"><div class="axis-label axis-label-z-max"></div></div>
<div style="position: absolute" class="axis-label-parent axis-label-parent-z-dimension-name"><div class="axis-label axis-label-z-dimension-name"></div></div>
</div>

<div class="fullscreen-wrapper noselect nopointer">
<div class="dataset-info-corner">
<div class="dataset-info-corner-list" style="display: flex;flex-direction: column;align-items: flex-end;overflow:hidden;">
<img style="width: 300px; opacity: 0.8;margin-bottom: -1.7%;margin-right: -1.5%;" alt="" src="data:image/png;base64,[encoded data, 42552 characters]" />
</div>
</div>
</div>


<div class="toolbar-ui">
<div class="toolbar-ui-button download-image-button"    title="Download"                        style="display:none;background:url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnDQogICBpZD0iTGF5ZXJfMSINCiAgIGRhdGEtbmFtZT0iTGF5ZXIgMSINCiAgIHZpZXdCb3g9IjAgMCAxMjIuODggMTIwLjg5Ig0KICAgdmVyc2lvbj0iMS4xIg0KICAgc29kaXBvZGk6ZG9jbmFtZT0iZG93bmxvYWQuc3ZnIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4xLjIgKGI4ZTI1YmU4MzMsIDIwMjItMDItMDUpIg0KICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiDQogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiDQogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciDQogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCiAgPGRlZnMNCiAgICAgaWQ9ImRlZnM5IiAvPg0KICA8c29kaXBvZGk6bmFtZWR2aWV3DQogICAgIGlkPSJuYW1lZHZpZXc3Ig0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2Ig0KICAgICBib3JkZXJvcGFjaXR5PSIxLjAiDQogICAgIGlua3NjYXBlOnBhZ2VzaGFkb3c9IjIiDQogICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiDQogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiDQogICAgIHNob3dncmlkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6em9vbT0iMy42MTA3MjA1Ig0KICAgICBpbmtzY2FwZTpjeD0iMzkuNzQyNzYiDQogICAgIGlua3NjYXBlOmN5PSI4Ny4yNDAyMDYiDQogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMzg0MCINCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMjEyMCINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii0zODUyIg0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTEyIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJMYXllcl8xIiAvPg0KICA8dGl0bGUNCiAgICAgaWQ9InRpdGxlMiI+ZG93bmxvYWQtZmlsZTwvdGl0bGU+DQogIDxwYXRoDQogICAgIGQ9Im0gODEuMTcxOTIxLDQ5Ljg3NDc2OCBjIDIuNTgxMjU2LC0yLjY1ODcwNCA2Ljg0NTMwNywtMi42NzA2NDkgOS40NDE0MjIsLTAuMDI2NDYgMi41OTYxMTYsMi42NDQxOTIgMi41MDU5MzksNi45MDczMDYgLTAuMTk5Njc2LDkuNDM5MzQ4IEwgNjUuMzQ5NzEsODQuMDAwNzcxIGMgLTIuNTcwMDAzLDIuNTI0NTk5IC02LjY4ODg1OCwyLjUyNDU5OSAtOS4yNTg4NiwwIEwgMzEuMzg2MjkzLDU5LjYwNDI3MyBjIC0yLjU5OTI5OSwtMi41NTQ0MDMgLTIuNjM1NjkxLC02LjczMjI5NyAtMC4wODEyOSwtOS4zMzE1OTQgMi41NTQ0MDEsLTIuNTk5Mjk4IDYuNzMyMjk1LC0yLjYzNTY5OCA5LjMzMTU5NSwtMC4wODEzIEwgNTQuMzQwMTYzLDY0LjEyIDU0LjQ3NDcwNywxNy40NzUxMjQgYyAwLjE1MTc4MiwtMy40OTM2MTUgMy4wNDM1NTksLTYuMjM5MjI1IDYuNTQwMzQ0LC02LjIwOTc2NCAzLjQ5Njc4NCwwLjAyOTQ2IDYuMzQxODksMi44MjM0MDUgNi40MzQ3ODYsNi4zMTkwODEgTCA2Ny4zMjM3MDIsNjMuODM0MDkzIFogTSAxLjM2NzEyMjQsMTEwLjc3MjMgMS40NDk1MTYyLDg1LjkwNTg1MSBjIC0wLjA5MjcxMywtMy41OTg2MTkgMi44MTY3Mzk0LC02LjU1NzAxOSA2LjQxNjQwMSwtNi41MjQzNTggMy41OTk2NjE4LDAuMDMyNjYgNi40NTQ5NTU4LDMuMDQzMzY1IDYuMjk2OTYwOCw2LjYzOTcwOSBsIC0wLjA1NzY4LDE4LjEyNjYzOCBjIDI1LjI2NzQyOCwwLjA0OTQgNjkuNDU1MzI2LDAuMDY2NyA5NC42Mzg4ODgsMC4wMTczIGwgMC4wNTc2LC0xOC4yMDA2MjEgYyAwLjAzMTgsLTMuNTA4MTc5IDIuOTAxNTQsLTYuMzI2MzI2IDYuNDA5NzIsLTYuMjk0NTE2IDMuNTA4MTcsMC4wMzE4MSA2LjMyNjMyLDIuOTAxNTMxIDYuMjk0NTEsNi40MDk3MSBsIC0wLjA4MjMsMjQuNjg0Mzg3IGggLTAuMDc0IGMgLTAuMTUyOTYsMy4zNjg1MSAtMi45MTQ0MSw2LjAyODc2IC02LjI4NjI5LDYuMDU1OSAtMjkuNDczMTU3LDAuMDU0OSAtNzcuOTA3MDUyLDAuMDU1IC0xMDcuMzc2NTY0MSwwIC0zLjM4MTY2NjcsLTAuMDA5IC02LjE2MTUxMjMsLTIuNjY5NzIgLTYuMzE5NjAzNSwtNi4wNDc3IHoiDQogICAgIGlkPSJwYXRoNCINCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6NTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2Utb3BhY2l0eToxIg0KICAgICBzb2RpcG9kaTpub2RldHlwZXM9ImNzY2NjY3NjY2NzY2NjY2NzY2NjY3NjY2NjY2MiIC8+DQo8L3N2Zz4NCg==');"></div>
<div class="toolbar-ui-button gps-button"               title="Show Current Location on Cube"   style="display:none;background:url('location.svg');"></div>
<div class="animation-dropdown">
    <div class="toolbar-ui-button animate-start-button" title="Start Animation" style='background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnDQogICBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiINCiAgIHRleHQtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iDQogICBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSINCiAgIGZpbGwtcnVsZT0iZXZlbm9kZCINCiAgIGNsaXAtcnVsZT0iZXZlbm9kZCINCiAgIHZpZXdCb3g9IjAgMCA1MTIgNTEyIg0KICAgdmVyc2lvbj0iMS4xIg0KICAgaWQ9InN2ZzIxMTgiDQogICBzb2RpcG9kaTpkb2NuYW1lPSJwbGF5LnN2ZyINCiAgIGlua3NjYXBlOnZlcnNpb249IjEuMiAoZGMyYWVkYWYwMywgMjAyMi0wNS0xNSkiDQogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSINCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCINCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyINCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPg0KICA8ZGVmcw0KICAgICBpZD0iZGVmczIxMjIiIC8+DQogIDxzb2RpcG9kaTpuYW1lZHZpZXcNCiAgICAgaWQ9Im5hbWVkdmlldzIxMjAiDQogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiINCiAgICAgYm9yZGVyY29sb3I9IiMwMDAwMDAiDQogICAgIGJvcmRlcm9wYWNpdHk9IjAuMjUiDQogICAgIGlua3NjYXBlOnNob3dwYWdlc2hhZG93PSIyIg0KICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIg0KICAgICBpbmtzY2FwZTpwYWdlY2hlY2tlcmJvYXJkPSIwIg0KICAgICBpbmtzY2FwZTpkZXNrY29sb3I9IiNkMWQxZDEiDQogICAgIHNob3dncmlkPSJmYWxzZSINCiAgICAgaW5rc2NhcGU6em9vbT0iMS42MTkxNDA2Ig0KICAgICBpbmtzY2FwZTpjeD0iMTM3LjEwOTc3Ig0KICAgICBpbmtzY2FwZTpjeT0iMjU2LjMwODgxIg0KICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjE5MjAiDQogICAgIGlua3NjYXBlOndpbmRvdy1oZWlnaHQ9IjEwMDkiDQogICAgIGlua3NjYXBlOndpbmRvdy14PSItOCINCiAgICAgaW5rc2NhcGU6d2luZG93LXk9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIg0KICAgICBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmcyMTE4IiAvPg0KICA8cGF0aA0KICAgICBmaWxsLXJ1bGU9Im5vbnplcm8iDQogICAgIGQ9Ik0yNTUuOTkgMGM3MC42OCAwIDEzNC43IDI4LjY2IDE4MS4wMiA3NC45OEM0ODMuMzMgMTIxLjMgNTEyIDE4NS4zMSA1MTIgMjU2YzAgNzAuNjgtMjguNjcgMTM0LjY5LTc0Ljk5IDE4MS4wMUMzOTAuNjkgNDgzLjMzIDMyNi42NyA1MTIgMjU1Ljk5IDUxMlMxMjEuMyA0ODMuMzMgNzQuOTggNDM3LjAxQzI4LjY2IDM5MC42OSAwIDMyNi42OCAwIDI1NmMwLTcwLjY3IDI4LjY2LTEzNC43IDc0Ljk4LTE4MS4wMkMxMjEuMyAyOC42NiAxODUuMzEgMCAyNTUuOTkgMHptNzcuNCAyNjkuODFjMTMuNzUtOC44OCAxMy43LTE4Ljc3IDAtMjYuNjNsLTExMC4yNy03Ni43N2MtMTEuMTktNy4wNC0yMi44OS0yLjktMjIuNTggMTEuNzJsLjQ0IDE1NC40N2MuOTYgMTUuODYgMTAuMDIgMjAuMjEgMjMuMzcgMTIuODdsMTA5LjA0LTc1LjY2em03OS4zNS0xNzAuNTZjLTQwLjEtNDAuMS05NS41NC02NC45Mi0xNTYuNzUtNjQuOTItNjEuMjEgMC0xMTYuNjMgMjQuODItMTU2Ljc0IDY0LjkyLTQwLjEgNDAuMTEtNjQuOTIgOTUuNTQtNjQuOTIgMTU2Ljc1IDAgNjEuMjIgMjQuODIgMTE2LjY0IDY0LjkyIDE1Ni43NCA0MC4xMSA0MC4xMSA5NS41MyA2NC45MyAxNTYuNzQgNjQuOTMgNjEuMjEgMCAxMTYuNjUtMjQuODIgMTU2Ljc1LTY0LjkzIDQwLjExLTQwLjEgNjQuOTMtOTUuNTIgNjQuOTMtMTU2Ljc0IDAtNjEuMjItMjQuODItMTE2LjY0LTY0LjkzLTE1Ni43NXoiDQogICAgIGlkPSJwYXRoMjExNiINCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MSIgLz4NCjwvc3ZnPg0K")'></div>
    <div class="toolbar-ui-button animate-stop-button" title="Stop Animation" style='display:none;background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnDQogICBzaGFwZS1yZW5kZXJpbmc9Imdlb21ldHJpY1ByZWNpc2lvbiINCiAgIHRleHQtcmVuZGVyaW5nPSJnZW9tZXRyaWNQcmVjaXNpb24iDQogICBpbWFnZS1yZW5kZXJpbmc9Im9wdGltaXplUXVhbGl0eSINCiAgIGZpbGwtcnVsZT0iZXZlbm9kZCINCiAgIGNsaXAtcnVsZT0iZXZlbm9kZCINCiAgIHZpZXdCb3g9IjAgMCA1MTIgNTExLjk5Ig0KICAgdmVyc2lvbj0iMS4xIg0KICAgaWQ9InN2ZzE5Ig0KICAgc29kaXBvZGk6ZG9jbmFtZT0icGF1c2Uuc3ZnIg0KICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4yIChkYzJhZWRhZjAzLCAyMDIyLTA1LTE1KSINCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIg0KICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIg0KICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIg0KICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+DQogIDxkZWZzDQogICAgIGlkPSJkZWZzMjMiIC8+DQogIDxzb2RpcG9kaTpuYW1lZHZpZXcNCiAgICAgaWQ9Im5hbWVkdmlldzIxIg0KICAgICBwYWdlY29sb3I9IiNmZmZmZmYiDQogICAgIGJvcmRlcmNvbG9yPSIjMDAwMDAwIg0KICAgICBib3JkZXJvcGFjaXR5PSIwLjI1Ig0KICAgICBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iMiINCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCINCiAgICAgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0iMCINCiAgICAgaW5rc2NhcGU6ZGVza2NvbG9yPSIjZDFkMWQxIg0KICAgICBzaG93Z3JpZD0iZmFsc2UiDQogICAgIGlua3NjYXBlOnpvb209IjEuNTc0MjQ5NSINCiAgICAgaW5rc2NhcGU6Y3g9IjEzMi40NDQwNiINCiAgICAgaW5rc2NhcGU6Y3k9IjI1NS45OTUiDQogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCINCiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD0iMTAwOSINCiAgICAgaW5rc2NhcGU6d2luZG93LXg9Ii04Ig0KICAgICBpbmtzY2FwZTp3aW5kb3cteT0iLTgiDQogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiDQogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzE5IiAvPg0KICA8cGF0aA0KICAgICBmaWxsLXJ1bGU9Im5vbnplcm8iDQogICAgIGQ9Ik0yNTYgMGM3MC42OCAwIDEzNC43IDI4LjY2IDE4MS4wMiA3NC45OEM0ODMuMzQgMTIxLjMgNTEyIDE4NS4zMiA1MTIgMjU2cy0yOC42NiAxMzQuNjktNzQuOTggMTgxLjAxQzM5MC43IDQ4My4zMyAzMjYuNjggNTExLjk5IDI1NiA1MTEuOTlzLTEzNC43LTI4LjY2LTE4MS4wMi03NC45OEMyOC42NiAzOTAuNjkgMCAzMjYuNjggMCAyNTZjMC03MC42OCAyOC42Ni0xMzQuNyA3NC45OC0xODEuMDJDMTIxLjMgMjguNjYgMTg1LjMyIDAgMjU2IDB6bS02Ni45MiAxNjguMzJoMzguMDRjNS4wOSAwIDkuMjQgNC4yMSA5LjI0IDkuMjR2MTU2Ljg3YzAgNS4wMy00LjE5IDkuMjMtOS4yNCA5LjIzaC0zOC4wNGMtNS4wMyAwLTkuMjMtNC4xNi05LjIzLTkuMjNWMTc3LjU2YzAtNS4wOSA0LjE1LTkuMjQgOS4yMy05LjI0em05NS43NyAwaDM4LjA2YzUuMDggMCA5LjIzIDQuMiA5LjIzIDkuMjR2MTU2Ljg3YzAgNS4wMy00LjE5IDkuMjMtOS4yMyA5LjIzaC0zOC4wNmMtNS4wNCAwLTkuMjMtNC4xNi05LjIzLTkuMjNWMTc3LjU2YzAtNS4wOSA0LjE2LTkuMjQgOS4yMy05LjI0em0xMjcuOS02OS4wN0MzNzIuNjQgNTkuMTUgMzE3LjIxIDM0LjMzIDI1NiAzNC4zM2MtNjEuMjEgMC0xMTYuNjQgMjQuODItMTU2Ljc1IDY0LjkyLTQwLjEgNDAuMTEtNjQuOTIgOTUuNTQtNjQuOTIgMTU2Ljc1IDAgNjEuMjEgMjQuODIgMTE2LjYzIDY0LjkyIDE1Ni43NCA0MC4xMSA0MC4xIDk1LjU0IDY0LjkyIDE1Ni43NSA2NC45MiA2MS4yMSAwIDExNi42NC0yNC44MiAxNTYuNzUtNjQuOTIgNDAuMS00MC4xMSA2NC45Mi05NS41MyA2NC45Mi0xNTYuNzQgMC02MS4yMS0yNC44Mi0xMTYuNjQtNjQuOTItMTU2Ljc1eiINCiAgICAgaWQ9InBhdGgxNyINCiAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MSIgLz4NCjwvc3ZnPg0K");'></div>

    <div class="animation-dropdown-content">
        <div class="ui-normal noselect animation-settings-ui">
            <h3>Animation Settings</h3>
            <div>Increment per Step:</div>
            <div class="slider animation-increment-slider"></div>
            <div>Visible Window:</div>
            <div class="slider animation-window-slider"></div>
            <div>Animation Speed:</div>
            <div class="slider animation-speed-slider"></div>
            <div>Total Time: <span class="animation-total-duration" style="font-weight: bold;">10.5</span> s</div>
        </div>
    </div>
</div>
<div class="toolbar-ui-button data-select-button"       title="Options" onclick="let c = this.parentNode.parentNode.getElementsByClassName('options-ui')[0]; c.style.display = c.style.display == 'none' ? 'block' : 'none';" style="display:none;background:url('data-management.svg')"></div>
<div class="toolbar-ui-button fullscreen-button" title="Enter/exit fullscreen" style="background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnIHN0YW5kYWxvbmU9J25vJz8+PHN2ZyB2ZXJzaW9uPScxLjEnIGlkPSdMYXllcl8xJyB4PScwcHgnIHk9JzBweCcgdmlld0JveD0nMCAwIDEyMi44OCAxMjIuODcnIHN0eWxlPSdlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDEyMi44OCAxMjIuODcnIHhtbDpzcGFjZT0ncHJlc2VydmUnIHNvZGlwb2RpOmRvY25hbWU9J2Z1bGxzY3JlZW4uc3ZnJyBpbmtzY2FwZTp2ZXJzaW9uPScxLjEuMiAoYjhlMjViZTgzMywgMjAyMi0wMi0wNSknIHhtbG5zOmlua3NjYXBlPSdodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlJyB4bWxuczpzb2RpcG9kaT0naHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6c3ZnPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PGRlZnMgaWQ9J2RlZnM5JyAvPjxzb2RpcG9kaTpuYW1lZHZpZXcgaWQ9J25hbWVkdmlldzcnIHBhZ2Vjb2xvcj0nI2ZmZmZmZicgYm9yZGVyY29sb3I9JyM2NjY2NjYnIGJvcmRlcm9wYWNpdHk9JzEuMCcgaW5rc2NhcGU6cGFnZXNoYWRvdz0nMicgaW5rc2NhcGU6cGFnZW9wYWNpdHk9JzAuMCcgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0nMCcgc2hvd2dyaWQ9J2ZhbHNlJyBpbmtzY2FwZTp6b29tPSc3LjEwNTA3MDInIGlua3NjYXBlOmN4PSczMS43Mzc4OTknIGlua3NjYXBlOmN5PSc2MS4zNjQ2MjknIGlua3NjYXBlOndpbmRvdy13aWR0aD0nMzg0MCcgaW5rc2NhcGU6d2luZG93LWhlaWdodD0nMjA1MCcgaW5rc2NhcGU6d2luZG93LXg9Jy0xMicgaW5rc2NhcGU6d2luZG93LXk9Jy0xMicgaW5rc2NhcGU6d2luZG93LW1heGltaXplZD0nMScgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0nZzQnIC8+PGcgaWQ9J2c0Jz48cGF0aCBkPSdNMTIyLjg4LDc3LjYzdjQxLjEyYzAsMi4yOC0xLjg1LDQuMTItNC4xMiw0LjEySDc3LjMzdi05LjYyaDM1Ljk1YzAtMTIuMzQsMC0yMy4yNywwLTM1LjYySDEyMi44OEwxMjIuODgsNzcuNjN6IE03Ny4zOSw5LjUzVjBoNDEuMzdjMi4yOCwwLDQuMTIsMS44NSw0LjEyLDQuMTJ2NDEuMThoLTkuNjNWOS41M0g3Ny4zOUw3Ny4zOSw5LjUzeiBNOS42Myw0NS4yNEgwVjQuMTJDMCwxLjg1LDEuODUsMCw0LjEyLDBoNDEgdjkuNjRIOS42M1Y0NS4yNEw5LjYzLDQ1LjI0eiBNNDUuMDcsMTEzLjI3djkuNkg0LjEyYy0yLjI4LDAtNC4xMi0xLjg1LTQuMTItNC4xM1Y3Ny41N2g5LjYzdjM1LjcxSDQ1LjA3TDQ1LjA3LDExMy4yN3onIGlkPSdwYXRoMicgc3R5bGU9J2ZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MScgLz48L2c+PC9zdmc+Cg==');"></div>
</div>

<div class="flex-col-center nopointer noselect bottom-left-ui">
<div class="ui-normal hover-info-ui"></div>
<div class="flex-col-center color-scale">
    <div class="color-scale-gradient"></div>
    <div class="color-scale-labels">
        <div class="color-scale-label"></div>
        <div class="color-scale-label"></div>
        <div class="color-scale-label"></div>
    </div>
    <div class="color-scale-unit-label"></div>
</div>
</div>

<div class="ui-normal noselect options-ui" style="display: none;">
<button type="button" class="collapsible-button" onclick="this.parentNode.style.display = 'none';">Close</button>
<hr>
<div>
    Cube:<br>
    <select class="cube-select">
        <option value="0"></option>
    </select>
</div>
<div>
    Parameter:<br>
    <select class="parameter-select">
        <option value="0"></option>       
    </select>
</div>
<div class="expert-mode">
    Display Quality:<br>
    <select class="quality-select">
        <option value="0.2" label="Very Low (20%)"></option>
        <option value="0.5" label="Low (50%)"></option>
        <option value="1.0" label="Default (100%)" selected></option>
        <option value="1.5" label="High (150%)"></option>
        <option value="2.0" label="Very High (200%)"></option>
        <option value="1000.0" label="Data Resolution"></option>
    </select>
</div>
<hr>
<h3 class="noselect" style="cursor: pointer;" onclick="let f = this.nextSibling; let e = this; if (f.style.display == 'none') { f.style.display = 'block'; e.textContent = '▼ ' + e.textContent.substring(2) } else { f.style.display = 'none';  e.textContent = '► ' + e.textContent.substring(2) }">▼ Current Selection</h3>
<div class="selection-section" style="min-width: 330px;">
    <div class="x-selection-slider-label">X:</div>
    <div>
        <div class="slider x-selection-slider"></div>
    </div>
    <div class="y-selection-slider-label">Y:</div>
    <div>
        <div class="slider y-selection-slider"></div>
    </div>
    <div class="z-selection-slider-label">Z:</div>
    <div>
        <div class="slider z-selection-slider"></div>
    </div>
</div>

<h3 class="noselect expert-mode" style="cursor: pointer;" onclick="let g = this.nextSibling; let h = this; if (g.style.display == 'none') { g.style.display = 'block'; h.textContent = '▼ ' + h.textContent.substring(2) } else { g.style.display = 'none';  h.textContent = '► ' + h.textContent.substring(2) }">► Colormap</h3>
<div class="expert-mode colormap-section" style="display: none;">
    Value Range:<br>
    <div>
        <input type="text" class="colormap-min-input" placeholder="1.0" style="width:8em"/> -
        <input type="text" class="colormap-max-input" placeholder="1.0" style="width:8em"/>
        <button class="colormap-range-apply-button">Apply</button>
    </div>
    <div>
        <input type="checkbox" class="colormap-flipped-checkbox" name="colormap-flipped">
        <label for="colormap-flipped-checkbox" class="noselect">Flip Colormap</label>
    </div>
    <div>
        <input type="checkbox" class="colormap-percentile-checkbox" name="colormap-percentile" checked>
        <label for="colormap-percentile-checkbox" class="noselect">Only consider ± 2.5 σ (98.7% of data points)</label>
    </div>
    <div class="btn-group colormap-list" style="display: block;">

    </div>
</div>
</div>

<div class="fullscreen-wrapper nopointer noselect">
<div style="text-align: center; margin-top: 3%;">
    <div class="status-message">Starting LexCube...</div>
</div>
</div>
<div class="fullscreen-wrapper flex-col-center dataset-info-wrapper">
<div class="ui-normal flex-col-center dataset-info-window">
    <div class="dataset-info" style="max-width: 100%; overflow-y: auto; overflow-x: hidden;"></div>
    
    <div style="width: 100%; text-align: center;">  
        <hr>
        <div class="expert-mode">
            Lexcube is an interactive visualization of large-scale earth data sets. Created at Leipzig University by Maximilian Söchting.
        </div>
    </div>
    <button style="margin-top: 10px" onclick="this.parentNode.parentNode.style.display = 'none'">Acknowledge</button>
</div>
</div>`;

const template = `<div class="lexcube-body" style="width: ${DEFAULT_WIDGET_WIDTH}px; height: ${DEFAULT_WIDGET_HEIGHT}px; position: relative;">${htmlCode}</div>`;


export class Cube3DModel extends DOMWidgetModel {
    defaults() {
        return {
            ...super.defaults(),
            _model_name: Cube3DModel.model_name,
            _model_module: Cube3DModel.model_module,
            _model_module_version: Cube3DModel.model_module_version,
            _view_name: Cube3DModel.view_name,
            _view_module: Cube3DModel.view_module,
            _view_module_version: Cube3DModel.view_module_version,
        };
    }

    static serializers: ISerializers = {
        ...DOMWidgetModel.serializers,
        // Add any extra serializers here
    };

    static model_name = 'Cube3DModel';
    static model_module = MODULE_NAME;
    static model_module_version = MODULE_VERSION;
    static view_name = 'Cube3DView'; // Set to null if no view
    static view_module = MODULE_NAME; // Set to null if no view
    static view_module_version = MODULE_VERSION;
}

export class Cube3DView extends DOMWidgetView {
    private cubeClientContext: CubeClientContext;

    render(): void {
        this.el.innerHTML = template;
        this.cubeClientContext = new CubeClientContext(true, this.el.getElementsByClassName("lexcube-body")[0] as HTMLElement, this.model.get("isometric_mode"));
        console.log("isometric", this.model.get("isometric_mode"))
        const featureCheck = this.cubeClientContext.checkForFeatures();
        console.log("LexCube feature check:", featureCheck ? "Success" : "Failed");
        if (!featureCheck.success) {
            this.el.innerHTML = `LexCube failed to start.<br>Error message: ${featureCheck.message}`;
            return;
        }
        this.cubeClientContext.postStartup = this.postStartup.bind(this);
        this.cubeClientContext.interaction.updateWidgetRanges = this.updateWidgetRanges.bind(this);
        this.cubeClientContext.rendering.updateWidgetDimensionWrapSettings = this.updateDimensionWrapSettings.bind(this);
        window.setTimeout(this.cubeClientContext.startup.bind(this.cubeClientContext), 500);
        this.el.classList.add('lexcube');
        this.cubeClientContext.networking.requestTileDataFromWidget = this.requestTileData.bind(this);
        this.cubeClientContext.networking.fetchMetadataFromWidget = this.fetchMetadata.bind(this);

        this.model.on('change:request_progress', this.requestProgressChanged, this);
        this.model.on('change:vmin', this.colormapRangeChanged, this);
        this.model.on('change:vmax', this.colormapRangeChanged, this);
        this.model.on('change:cmap', this.colormapChanged, this);
        
        this.model.on('change:xlim', this.widgetRangeChanged, this);
        this.model.on('change:ylim', this.widgetRangeChanged, this);
        this.model.on('change:zlim', this.widgetRangeChanged, this);

        this.model.on('change:xwrap', this.dimensionWrapSettingsChanged, this);
        this.model.on('change:ywrap', this.dimensionWrapSettingsChanged, this);
        this.model.on('change:zwrap', this.dimensionWrapSettingsChanged, this);

        this.model.on('msg:custom', this.handleMessage, this);
    }

    postStartup(): void {
        this.colormapChanged();
        this.colormapRangeChanged();
        this.widgetRangeChanged();
        this.updateWidgetRanges();
        this.dimensionWrapSettingsChanged(true);
    }

    private requestTileData(data: any): void {
        this.send(data);
    }

    private async fetchMetadata(url_path: string): Promise<any> {
        return this.model.get("api_metadata")[url_path];
    }

    private handleMessage(payload: any, buffers: DataView[]): void {
        if (payload.response_type == "tile_data") {
            this.cubeClientContext.networking.onTileData(payload, buffers[0].buffer);
        } else if (payload.response_type == "download_figure_request") {
            this.cubeClientContext.rendering.downloadScreenshotFromUi(payload.includeUi, payload.filename, payload.dpiscale)
        } else if (payload.response_type == "download_print_template_request") {
            this.cubeClientContext.rendering.startDownloadPrintTemplate(); // payload.filename
        }
    }

    // onResize(msg: Widget.ResizeMessage): void {
    //   console.log("resize", msg);
    //   this.cubeClientContext.onResize();
    // }

    private widgetRangeChanged(): void {
        const xRange = this.getModelValue("xlim");
        const yRange = this.getModelValue("ylim");
        const zRange = this.getModelValue("zlim");
        this.cubeClientContext.interaction.cubeSelection.parseSelectionBoundariesFromWidget(xRange[0], xRange[1], yRange[0], yRange[1], zRange[0], zRange[1]);
    }

    dimensionWrapSettingsChanged(allowWidgetPropertyUpdate: boolean = false): void {
        this.cubeClientContext.rendering.updateOverflowSettings(this.getModelValue("xwrap"), this.getModelValue("ywrap"), this.getModelValue("zwrap"), allowWidgetPropertyUpdate);
    }

    updateDimensionWrapSettings(xWrap: boolean, yWrap: boolean, zWrap: boolean): void {
        this.model.set({ 'xwrap': xWrap, 'ywrap': yWrap, 'zwrap': zWrap });
        this.model.save_changes();
    }

    private updateWidgetRanges(): void {
        const xRange = this.cubeClientContext.interaction.cubeSelection.getSelectionRangeByDimension(Dimension.X);
        const yRange = this.cubeClientContext.interaction.cubeSelection.getSelectionRangeByDimension(Dimension.Y);
        const zRange = this.cubeClientContext.interaction.cubeSelection.getSelectionRangeByDimension(Dimension.Z);
        this.model.set({ 'xlim': [xRange.min, xRange.max], 'ylim': [yRange.min, yRange.max], 'zlim': [zRange.min, zRange.max] }); 
        this.model.save_changes();
    }


    private getModelValue(key: string) {
        const v = this.model.get(key);
        return (v !== null && v !== undefined) ? v : undefined;
    }

    private colormapRangeChanged(): void {
        this.cubeClientContext.tileData.colormapMinValueOverride = this.getModelValue("vmin");
        this.cubeClientContext.tileData.colormapMaxValueOverride = this.getModelValue("vmax");
        this.cubeClientContext.tileData.colormapHasChanged(true, false);
    }

    private colormapChanged(): void {
        let cmap = this.model.get('cmap');
        let colormapHasChanged = false;
        if (cmap === null) {
            return;
        }
        const previouslyFlipped = this.cubeClientContext.tileData.colormapFlipped;
        this.cubeClientContext.tileData.colormapFlipped = false;
        if (typeof (cmap) == "string") {
            const colormapReversed = cmap.endsWith("_r");
            if (colormapReversed) {
                cmap = cmap.substring(0, cmap.length - 2);
            }
            const colormapReversedHasChanged = previouslyFlipped != colormapReversed;
            this.cubeClientContext.tileData.colormapFlipped = colormapReversed;
            colormapHasChanged = this.cubeClientContext.interaction.selectColormapByName(cmap);
            this.cubeClientContext.tileData.colormapHasChanged(colormapReversedHasChanged, colormapHasChanged);
        } else if ((cmap as number[][]).length && cmap[0].length && typeof (cmap[0][0]) == "number") {
            try {
                const rgb8Data = this.cubeClientContext.interaction.convertColormapDataToRGB8(cmap as number[][]);
                colormapHasChanged = this.cubeClientContext.interaction.selectColormapByData(rgb8Data);
            } catch (error) {
                console.log("Failed to select colormap by data", error);
            }
        }
        this.model.save_changes();
        if (colormapHasChanged) {
            this.cubeClientContext.tileData.colormapHasChanged(false, true);
        }
    }

    private requestProgressChanged(): void {
        this.cubeClientContext.interaction.updateRequestProgressFromWidget(this.model.get('request_progress')["progress"]);
    }
}
