diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/.DS_Store differ diff --git a/Graph2Data2/asset-manifest.json b/Graph2Data2/asset-manifest.json new file mode 100644 index 0000000..be7ebfa --- /dev/null +++ b/Graph2Data2/asset-manifest.json @@ -0,0 +1,15 @@ +{ + "files": { + "main.css": "/Graph2Data2/static/css/main.a57526a8.chunk.css", + "main.js": "/Graph2Data2/static/js/main.a273cab7.chunk.js", + "main.js.map": "/Graph2Data2/static/js/main.a273cab7.chunk.js.map", + "runtime~main.js": "/Graph2Data2/static/js/runtime~main.178ad90b.js", + "runtime~main.js.map": "/Graph2Data2/static/js/runtime~main.178ad90b.js.map", + "static/js/2.cc6bd7d2.chunk.js": "/Graph2Data2/static/js/2.cc6bd7d2.chunk.js", + "static/js/2.cc6bd7d2.chunk.js.map": "/Graph2Data2/static/js/2.cc6bd7d2.chunk.js.map", + "index.html": "/Graph2Data2/index.html", + "precache-manifest.2b1af27eedcde70a04deedb957eb6c49.js": "/Graph2Data2/precache-manifest.2b1af27eedcde70a04deedb957eb6c49.js", + "service-worker.js": "/Graph2Data2/service-worker.js", + "static/css/main.a57526a8.chunk.css.map": "/Graph2Data2/static/css/main.a57526a8.chunk.css.map" + } +} \ No newline at end of file diff --git a/favicon.ico b/Graph2Data2/favicon.ico similarity index 100% rename from favicon.ico rename to Graph2Data2/favicon.ico diff --git a/manifest.json b/Graph2Data2/manifest.json similarity index 100% rename from manifest.json rename to Graph2Data2/manifest.json diff --git a/Graph2Data2/precache-manifest.2b1af27eedcde70a04deedb957eb6c49.js b/Graph2Data2/precache-manifest.2b1af27eedcde70a04deedb957eb6c49.js new file mode 100644 index 0000000..76ef033 --- /dev/null +++ b/Graph2Data2/precache-manifest.2b1af27eedcde70a04deedb957eb6c49.js @@ -0,0 +1,22 @@ +self.__precacheManifest = (self.__precacheManifest || []).concat([ + { + "revision": "a12a36b47803604e69140c69050d6b05", + "url": "/Graph2Data2/index.html" + }, + { + "revision": "c1a10ea47a4882185c08", + "url": "/Graph2Data2/static/css/main.a57526a8.chunk.css" + }, + { + "revision": "ecb12f39eb3c9ccefa29", + "url": "/Graph2Data2/static/js/2.cc6bd7d2.chunk.js" + }, + { + "revision": "c1a10ea47a4882185c08", + "url": "/Graph2Data2/static/js/main.a273cab7.chunk.js" + }, + { + "revision": "9e8d100df006e118c4f6", + "url": "/Graph2Data2/static/js/runtime~main.178ad90b.js" + } +]); \ No newline at end of file diff --git a/service-worker.js b/Graph2Data2/service-worker.js similarity index 94% rename from service-worker.js rename to Graph2Data2/service-worker.js index d794d65..2abc8b0 100644 --- a/service-worker.js +++ b/Graph2Data2/service-worker.js @@ -14,7 +14,7 @@ importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js"); importScripts( - "/Graph2Data2/precache-manifest.11e68be567bff1a0050ad0d1d8120841.js" + "/Graph2Data2/precache-manifest.2b1af27eedcde70a04deedb957eb6c49.js" ); self.addEventListener('message', (event) => { diff --git a/Graph2Data2/static/css/main.a57526a8.chunk.css b/Graph2Data2/static/css/main.a57526a8.chunk.css new file mode 100644 index 0000000..132c5c5 --- /dev/null +++ b/Graph2Data2/static/css/main.a57526a8.chunk.css @@ -0,0 +1,2 @@ +body{margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}*,:after,:before,graph-2-data{box-sizing:border-box;font-family:fira code retina,Lucida Console,Monaco,monospace;font-size:10pt}:focus{outline:none}.clearfix:after{display:block;clear:both;content:""}.api-driver,.App,.main-ui-container,body,html{width:100%;height:100%}html{overflow:hidden}[title]{cursor:help}.App{text-align:center;width:100%;height:100%}.App-logo{-webkit-animation:App-logo-spin 20s linear infinite;animation:App-logo-spin 20s linear infinite;height:40vmin;pointer-events:none}.App-header{background-color:#282c34;min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:calc(10px + 2vmin);color:#fff}.App-link{color:#61dafb}.api-driver,.main-ui-container{border:1px solid red;padding:0;display:flex}.api-driver fieldset{border:1px solid red;width:auto;display:inline-block;flex:0 0;margin-bottom:.5em}.api-driver fieldset legend{font-size:.8em;color:red}.api-driver .state-display{text-align:left;margin:0 .5em 0 0}.api-driver .state-display,.api-driver .state-editors{border:1px solid red;flex:1 1;padding:1em;overflow:auto}.api-driver .state-editors{display:flex;flex-direction:column;align-items:flex-start;margin:0 0 0 .5em}.api-driver .state-editors .coord{width:40px;margin-right:20px;margin-left:3px}.api-driver .state-editors .name{width:80px;margin-right:20px;margin-left:3px}.api-driver .state-editors button{margin-right:10px}.api-driver fieldset ul{list-style:none;padding-left:0;text-align:left}button,input[type=checkbox],label,option{cursor:pointer}button[disabled]{cursor:not-allowed}.main-ui-container{flex-direction:column;border-width:0}.main-ui-container .middle{width:100%;height:100%}.main-ui-container .middle.column .image-stage{position:relative;width:100%;height:100%;overflow:auto}.main-ui-container .middle.column .image-stage canvas.chrome,.main-ui-container .middle.column .image-stage canvas.image{position:absolute;left:0;top:0;cursor:crosshair}.main-ui-container .right.column{display:flex;flex-direction:column}.main-ui-container .right.column .magnifier-stage{box-sizing:initial;display:flex}.main-ui-container .magnifier-stage{border:1px solid #db7093;position:relative}.main-ui-container .magnifier-stage canvas{position:absolute;left:0;width:100%;height:100%}.main-ui-container .magnifier-stage .image{z-index:1}.main-ui-container .magnifier-stage .image-chrome{z-index:2}.main-ui-container .magnifier-stage .chrome{z-index:3}.main-ui-container .magnifier-wrapper{display:flex;flex-direction:column}.main-ui-container .top{background-color:pink;height:50px;border-bottom:1px solid #db7093}.main-ui-container .middle{flex:1 0;display:flex;border-left:1px solid #db7093}.main-ui-container .bottom{background-color:pink;height:50px;border-top:1px solid #db7093}.main-ui-container .left{background-color:pink;width:50px}.main-ui-container .middle{background-color:pink;flex:1 1}.main-ui-container .middle.bar .right.column{background-color:pink;border-left:1px solid #db7093;display:flex;flex-direction:column}.duxpanel-backdrop{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.3)}.duxpanel{border:1px solid #ddd;background-color:#fff;border-radius:4px;position:fixed;box-shadow:0 0 6pt 3pt rgba(0,0,0,.6)}.duxpanel-heading{background-color:#db7093;color:#fff;border-top-left-radius:3px;border-top-right-radius:3px;padding:10px 15px;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:move}.duxpanel-body{display:flex}.wizard{flex-direction:column}.wizard,.wizard .body{display:flex;width:100%}.wizard .body{flex-direction:column;padding:0;justify-content:stretch;flex:1 1}.wizard .body select{width:100%;height:100%;border:0 solid red;padding:.5em}.wizard .body select.single-line{padding:.25em}.wizard .body select option{margin:.2em}.wizard .body .row{padding:.25em}.wizard .body .row label input{margin-left:.25em}.wizard .body .row input[name=data-points-count],.wizard .body .row input[name=data-series-count]{width:40px}.wizard .footer{border-top:1px solid #b0486b}.wizard .cta-footer,.wizard .footer{padding:.5em;background-color:#db7093;color:#fff}.wizard .cta-footer{display:none;border-top:1px solid #ba5275;font-size:8pt}.duxpanel{border:1px solid #db7093}.duxpanel-footer .dialog-button{margin:0 0 0 .5em!important}.status-display{margin-top:.5em;margin-bottom:1em}.axis-calibration{margin:1em}.status-display .body *{font-size:8pt}.status-display{margin-top:0}.axis-calibration .header,.status-display .header{background-color:#db7093;color:#fff;margin-bottom:.5em}.status-display{flex:0 1!important}.axis-calibration{flex:1 1}.zoom-controls{display:flex;justify-content:space-between;margin:.25em;border:1px solid #db7093;border-radius:5px;padding:.25em;color:#db7093}.zoom-controls>label{margin:0 .5em}.zoom-controls .current-value{margin:0 .25em}.toggle-icon{display:flex;justify-content:space-between}.toggle-icon>label{margin:0 .5em}.toggle-icon.on{color:#b0486b}.toggle-icon.on svg{font-size:2.2rem}.axis-diagram-container{display:flex;border-bottom:2px solid #db7093;padding:.5em!important}.axis-diagram{display:block;border:2px solid #db7093;margin-right:.5em;padding:.5em}.axis-diagram:last-child{margin-right:0}.axis-diagram>label{margin-top:.3em;display:block}.axis-calibration-value,.axis-log-power-setting,.axis-log-setting{display:none}.combined-origin{fill:#db7093!important;font-size:2em!important}.axis-calibration-value:focus,.axis-log-power-setting>input:focus,.axis-log-setting>input:focus,button:focus,select:focus{outline-width:0}.axis-log-power-setting:focus-within,.axis-log-setting:focus-within{outline:1px dotted red}.axis-calibration .cta{color:#fff;background-color:#db7093;border:1px solid #db7093;border-radius:20px;padding:0 .7em}.axis-calibration .cta:before{content:">";font-size:20pt;vertical-align:-.15em;margin-right:.15em;font-weight:700;color:#fff}.matrix-display{border:1px solid #db7093;padding:0;display:flex;flex-direction:column}.matrix-display>.matrix-row{padding:0;margin:0;display:flex}.matrix-display>.matrix-row>.matrix-element{border:1px solid #db7093;padding:.25em;margin:0;flex:1 0}.data-points-table-container{max-height:250px;overflow-y:auto}.data-points-table{border-collapse:collapse;width:100%}.data-points-table tbody,.data-points-table td,.data-points-table th,.data-points-table thead,.data-points-table tr{font-size:inherit}.data-points-table td,.data-points-table th{border:1px solid #db7093}.data-points-table td.selected{background-color:#ff98bb}.data-points-table td.blank-cell,.data-points-table td.data-cell{cursor:pointer}.data-points-table td.auto-add{background-color:#ff98bb}.top.bar{display:flex;flex-direction:row-reverse}.settings{border:1px solid --primaryBackgroundHilightDark3;background-color:pink;color:#db7093;display:flex;align-self:center;align-items:center}.data-points-meta-table-container .button-bar,.series-selector-panel .button-bar{display:flex;align-content:stretch}.data-points-meta-table-container .button-bar button,.series-selector-panel .button-bar button{flex:1 1}.data-points-meta-table-container .button-bar button svg,.series-selector-panel .button-bar button svg{font-size:1.4rem}.data-points-table svg{font-size:1.3rem}.data-points-table svg.disabled{color:#ccc}::-webkit-input-placeholder{color:#bbb}::-moz-placeholder{color:#bbb}:-ms-input-placeholder{color:#bbb}:-moz-placeholder{color:#bbb}.base{vertical-align:sub}.base,.pow{font-size:.7em}.pow{vertical-align:super}.disabled{color:#ccc}.graph-chooser-api-driver{margin:1em 1em 0;padding:.5em;border:1px solid red;display:flex;flex-direction:column}.selection-container{width:100%;height:100%;position:absolute;cursor:crosshair}.selection-rectangle{border:var(--borderSize) dotted grey;z-index:10}.selection-rectangle.hovered{border-color:#000;cursor:move}.selection-handle{position:absolute;display:block;border-radius:0;border-radius:50%;-webkit-transform:scale(.1);transform:scale(.1);opacity:0;width:var(--handleSize);height:var(--handleSize);left:calc(50% - var(--handleSize)/2);top:calc(50% - var(--handleSize)/2)}.selection-rectangle.hovered .selection-handle{background-color:#000}.selection-rectangle.dragging .selection-handle,.selection-rectangle.transparent .selection-handle{cursor:inherit}.selection-rectangle.dragging .selection-handle,.selection-rectangle.focused .selection-handle,.selection-rectangle.hovered .selection-handle,.selection-rectangle:focus .selection-handle,.selection-rectangle:hover .selection-handle{-webkit-transform:scale(1);transform:scale(1);opacity:1}.selection-rectangle.read-only{cursor:default}.selection-rectangle.read-only .selection-handle{display:none}.selection-rectangle .delete{cursor:pointer;font-size:2em;margin:.25em;display:none;float:right}.selection-rectangle.hovered .delete{display:inline-block;fill:#a9a9a9}.selection-rectangle.hovered .delete:hover{fill:#000}.selection-rectangle.creating .delete,.selection-rectangle.editing .delete{display:none}.selection-handle.top-left{left:calc((var(--borderSize) + var(--handleSize))/-2);top:calc((var(--borderSize) + var(--handleSize))/-2);cursor:nwse-resize;z-index:1}.selection-handle.top-center{top:calc((var(--borderSize) + var(--handleSize))/-2);cursor:ns-resize}.selection-handle.top-right{top:calc((var(--borderSize) + var(--handleSize))/-2);cursor:nesw-resize;z-index:1}.selection-handle.right-center,.selection-handle.top-right{left:calc(100% + (var(--borderSize) - var(--handleSize))/2)}.selection-handle.right-center{cursor:ew-resize}.selection-handle.bottom-right{top:calc(100% + (var(--borderSize) - var(--handleSize))/2);left:calc(100% + (var(--borderSize) - var(--handleSize))/2);cursor:nwse-resize;z-index:1}.selection-handle.bottom-center{top:calc(100% + (var(--borderSize) - var(--handleSize))/2);cursor:ns-resize}.selection-handle.bottom-left{top:calc(100% + (var(--borderSize) - var(--handleSize))/2);left:calc((var(--borderSize) + var(--handleSize))/-2);cursor:nesw-resize;z-index:1}.selection-handle.left-center{left:calc((var(--borderSize) + var(--handleSize))/-2);cursor:ew-resize}.graph-chooser-main-ui{display:flex;flex-direction:column;height:100%}.pdf-page-wrapper{border-top:1px dashed grey;position:relative}.graph-selection-rect{border:3px dotted #d3d3d3;z-index:1000}.graph-selection-rect.selected{border:3px dotted #ff98bb;background-color:rgba(255,218,224,.4)}.graph-selection-handle{background-color:#d3d3d3}.graph-selection-rect.selected .graph-selection-handle{background-color:#ff98bb}.page-bounds-rect{border:3px solid gold;z-index:1}.pdf-page-wrapper:first-child{border-top-width:0}.pdf-page-number{border:1px solid #000;display:inline-block;min-width:28px;text-align:center;margin:.5em;position:absolute;top:0;z-index:1000}.drag-group{display:none;cursor:default}.drag-group.selected,.graph-selection-rect.hovered .drag-group{display:inline-block;border:2px solid #d3d3d3;background-color:#d3d3d3;border-radius:4px;padding:0 0 0 .5em;margin:.5em}.graph-selection-rect.creating .drag-group,.graph-selection-rect.editing .drag-group{display:none}.drag-group .inner-group{display:flex;margin-left:-.25em;padding:.25em .25em .25em 0}.drag-group .inner-group .drag-handle{margin-right:.25em;cursor:move}.drag-group.selected,.graph-selection-rect.hovered .drag-group.selected{border:2px solid #b0486b;background-color:#ff98bb}.graph-selection-rect.selected .delete{fill:#ff98bb}.graph-selection-rect.selected .delete:hover{fill:#b0486b}.header-bar{border-bottom:1px dotted #000;padding:.25em;display:flex;flex-direction:row;justify-content:flex-end}.doc-wrapper{flex:1 1;overflow:auto}.GraphChooser{height:100%}.load-progress{margin-right:1em}.load-progress .page-loaded-status{padding:.15em .4em;display:inline-block;border:1px solid #000;border-left-width:0;font-weight:400;text-decoration:none}.load-progress .page-loaded-status:first-child{border-left-width:1px}.load-progress .loaded{background-color:grey;color:#fff}.clickable{cursor:pointer}.lock-selected-graphs{margin:0 .25em}.graph-displayer-api-driver{margin:1em 1em 0;padding:.5em;border:1px solid red;cursor:pointer}.graph-coords{font-size:.8em;border-top:1px dotted red;margin-top:1em;display:block;margin-left:-.5em;margin-right:-.5em;padding:.5em .5em 0;text-align:center}.graph-displayer-main-ui{margin:1em 1em 0;padding:.5em;border:1px solid red;cursor:pointer} +/*# sourceMappingURL=main.a57526a8.chunk.css.map */ \ No newline at end of file diff --git a/Graph2Data2/static/css/main.a57526a8.chunk.css.map b/Graph2Data2/static/css/main.a57526a8.chunk.css.map new file mode 100644 index 0000000..dc94702 --- /dev/null +++ b/Graph2Data2/static/css/main.a57526a8.chunk.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["index.css","C:\\Users\\easyt\\Documents\\_dev\\React\\graph2data\\graph2data/src\\App.scss","C:\\Users\\easyt\\Documents\\_dev\\React\\graph2data\\graph2data/src\\vars.scss","C:\\Users\\easyt\\Documents\\_dev\\React\\graph2data\\graph2data/src\\Components\\GraphChooser\\ApiDriver\\style.scss","C:\\Users\\easyt\\Documents\\_dev\\React\\graph2data\\graph2data/src\\Components\\SelectionRectangles\\style.scss","C:\\Users\\easyt\\Documents\\_dev\\React\\graph2data\\graph2data/src\\Components\\GraphChooser\\MainUi\\style.scss","C:\\Users\\easyt\\Documents\\_dev\\React\\graph2data\\graph2data/src\\Components\\GraphDisplayer\\ApiDriver\\style.scss","C:\\Users\\easyt\\Documents\\_dev\\React\\graph2data\\graph2data/src\\Components\\GraphDisplayer\\MainUi\\style.scss"],"names":[],"mappings":"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","file":"main.a57526a8.chunk.css","sourcesContent":["body {\n margin: 0;\n padding: 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","@import './vars.scss';\r\n\r\n*, *:before, *:after, graph-2-data {\r\n box-sizing: border-box;\r\n font-family: 'fira code retina', 'Lucida Console', Monaco, monospace;\r\n font-size: 10pt;\r\n}\r\n\r\n*:focus {\r\n outline: none;\r\n}\r\n\r\n.clearfix::after {\r\n display: block;\r\n clear: both;\r\n content: \"\";\r\n}\r\n\r\nhtml, body, .App, .api-driver, .main-ui-container {\r\n width: 100%;\r\n height: 100%;\r\n}\r\nhtml {\r\n overflow: hidden;\r\n}\r\n\r\n*[title] {\r\n cursor: help;\r\n}\r\n\r\n.App {\r\n text-align: center;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.App-logo {\r\n animation: App-logo-spin infinite 20s linear;\r\n height: 40vmin;\r\n pointer-events: none;\r\n}\r\n\r\n.App-header {\r\n background-color: #282c34;\r\n min-height: 100vh;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: calc(10px + 2vmin);\r\n color: white;\r\n}\r\n\r\n.App-link {\r\n color: #61dafb;\r\n}\r\n\r\n.api-driver, .main-ui-container {\r\n border: 1px solid red;\r\n padding: 0;\r\n display: flex;\r\n}\r\n\r\n.api-driver fieldset {\r\n border: 1px solid red;\r\n width: auto;\r\n display: inline-block;\r\n flex: 0 0;\r\n margin-bottom: 0.5em;\r\n}\r\n\r\n.api-driver fieldset legend {\r\n font-size: 0.8em;\r\n color: red;\r\n}\r\n\r\n.api-driver .state-display {\r\n border: 1px solid red;\r\n flex: 1 1;\r\n text-align: left;\r\n padding: 1em;\r\n overflow: auto;\r\n margin: 0 0.5em 0 0;\r\n}\r\n\r\n.api-driver .state-editors {\r\n flex: 1 1;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: flex-start;\r\n overflow: auto;\r\n margin: 0 0 0 0.5em;\r\n border: 1px solid red;\r\n padding: 1em;\r\n}\r\n\r\n.api-driver .state-editors .coord {\r\n width: 40px;\r\n margin-right: 20px;\r\n margin-left: 3px;\r\n}\r\n\r\n.api-driver .state-editors .name {\r\n width: 80px;\r\n margin-right: 20px;\r\n margin-left: 3px;\r\n}\r\n\r\n.api-driver .state-editors button {\r\n margin-right: 10px;\r\n}\r\n\r\n.api-driver fieldset ul {\r\n list-style: none;\r\n padding-left: 0;\r\n text-align: left;\r\n}\r\n\r\nlabel, button, option, input[type=checkbox] {\r\n cursor: pointer;\r\n}\r\n\r\nbutton[disabled] {\r\n cursor: not-allowed;\r\n}\r\n\r\n.main-ui-container {\r\n flex-direction: column;\r\n border-width: 0;\r\n}\r\n\r\n.main-ui-container .middle {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.main-ui-container .middle.column .image-stage {\r\n position: relative;\r\n width: 100%;\r\n height: 100%;\r\n overflow: auto;\r\n}\r\n\r\n.main-ui-container .middle.column .image-stage canvas.image, .main-ui-container .middle.column .image-stage canvas.chrome {\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n cursor: crosshair;\r\n}\r\n\r\n.main-ui-container .right.column {\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.main-ui-container .right.column .magnifier-stage {\r\n box-sizing: content-box;\r\n display: flex;\r\n}\r\n\r\n.main-ui-container .magnifier-stage {\r\n border: 1px solid $primaryBackgroundHilight;\r\n position: relative;\r\n}\r\n\r\n.main-ui-container .magnifier-stage canvas {\r\n position: absolute;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.main-ui-container .magnifier-stage .image {\r\n z-index: 1;\r\n}\r\n\r\n.main-ui-container .magnifier-stage .image-chrome {\r\n z-index: 2;\r\n}\r\n\r\n.main-ui-container .magnifier-stage .chrome {\r\n z-index: 3;\r\n}\r\n\r\n.main-ui-container .magnifier-wrapper {\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.main-ui-container .top {\r\n background-color: $primaryBackground;\r\n height: 50px;\r\n border-bottom: 1px solid $primaryBackgroundHilight;\r\n}\r\n\r\n.main-ui-container .middle {\r\n background-color: $primaryBackground;\r\n flex: 1 0;\r\n display: flex;\r\n border-left: 1px solid $primaryBackgroundHilight;\r\n}\r\n\r\n.main-ui-container .bottom {\r\n background-color: $primaryBackground;\r\n height: 50px;\r\n border-top: 1px solid $primaryBackgroundHilight;\r\n}\r\n\r\n.main-ui-container .left {\r\n background-color: $primaryBackground;\r\n width: 50px;\r\n}\r\n\r\n.main-ui-container .middle {\r\n background-color: $primaryBackground;\r\n flex: 1 1;\r\n}\r\n\r\n.main-ui-container .middle.bar .right.column {\r\n background-color: $primaryBackground;\r\n border-left: 1px solid $primaryBackgroundHilight;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.duxpanel-backdrop {\r\n position: fixed;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n background-color: rgba(0, 0, 0, .3);\r\n}\r\n\r\n.duxpanel {\r\n border: 1px solid #ddd;\r\n background-color: #fff;\r\n border-radius: 4px;\r\n position: fixed;\r\n box-shadow: rgba(0, 0, 0, 0.6) 0px 0px 6pt 3pt;\r\n}\r\n\r\n.duxpanel-heading {\r\n background-color: $primaryBackgroundHilight;\r\n color: white;\r\n border-top-left-radius: 3px;\r\n border-top-right-radius: 3px;\r\n padding: 10px 15px;\r\n cursor: default;\r\n -webkit-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n cursor: move;\r\n}\r\n\r\n.duxpanel-body {\r\n display: flex;\r\n}\r\n\r\n.wizard {\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n}\r\n\r\n.wizard .body {\r\n display: flex;\r\n flex-direction: column;\r\n padding: 0;\r\n justify-content: stretch;\r\n flex: 1;\r\n width: 100%;\r\n}\r\n\r\n.wizard .body select {\r\n width: 100%;\r\n height: 100%;\r\n border: 0px solid red;\r\n padding: 0.5em;\r\n}\r\n\r\n.wizard .body select.single-line {\r\n padding: 0.25em;\r\n}\r\n\r\n.wizard .body select option {\r\n margin: 0.2em;\r\n}\r\n\r\n.wizard .body .row {\r\n padding: 0.25em;\r\n}\r\n\r\n.wizard .body .row label input {\r\n margin-left: 0.25em;\r\n}\r\n\r\n.wizard .body .row input[name='data-series-count'], .wizard .body .row input[name='data-points-count'] {\r\n width: 40px\r\n}\r\n\r\n.wizard .footer {\r\n border-top: 1px solid $primaryBackgroundHilightDark3;\r\n padding: 0.5em;\r\n background-color: $primaryBackgroundHilight;\r\n color: white;\r\n}\r\n\r\n.wizard .cta-footer {\r\n display: none;\r\n border-top: 1px solid $primaryBackgroundHilightDark2;\r\n padding: 0.5em;\r\n background-color: $primaryBackgroundHilight;\r\n color: white;\r\n font-size: 8pt;\r\n}\r\n\r\n.duxpanel {\r\n border: 1px solid $primaryBackgroundHilight;\r\n}\r\n\r\n.duxpanel-footer .dialog-button {\r\n margin: 0 0 0 0.5em !important;\r\n}\r\n\r\n.status-display {\r\n margin-top: 0.5em;\r\n margin-bottom: 1em;\r\n}\r\n\r\n.axis-calibration {\r\n margin: 1em;\r\n}\r\n\r\n.status-display .body * {\r\n font-size: 8pt;\r\n}\r\n\r\n.status-display {\r\n margin-top: 0;\r\n}\r\n\r\n.status-display .header, .axis-calibration .header {\r\n background-color: $primaryBackgroundHilight;\r\n color: white;\r\n margin-bottom: 0.5em;\r\n}\r\n\r\n.status-display {\r\n flex: 0 !important;\r\n}\r\n\r\n.axis-calibration {\r\n flex: 1;\r\n}\r\n\r\n.zoom-controls {\r\n display: flex;\r\n justify-content: space-between;\r\n margin: 0.25em;\r\n border: 1px solid $primaryBackgroundHilight;\r\n border-radius: 5px;\r\n padding: 0.25em;\r\n color: $primaryBackgroundHilight;\r\n}\r\n\r\n\r\n.zoom-controls>label {\r\n margin: 0 0.5em;\r\n}\r\n\r\n.zoom-controls .current-value {\r\n margin: 0 0.25em;\r\n}\r\n\r\n.toggle-icon {\r\n display: flex;\r\n justify-content: space-between;\r\n}\r\n\r\n.toggle-icon>label {\r\n margin: 0 0.5em\r\n}\r\n\r\n.toggle-icon.on {\r\n color: $primaryBackgroundHilightDark3;\r\n}\r\n\r\n.toggle-icon.on svg {\r\n font-size: 2.2rem;\r\n}\r\n\r\n.axis-diagram-container {\r\n display: flex;\r\n border-bottom: 2px solid $primaryBackgroundHilight;\r\n padding: 0.5em !important;\r\n}\r\n\r\n.axis-diagram {\r\n display: block;\r\n border: 2px solid $primaryBackgroundHilight;\r\n margin-right: 0.5em;\r\n padding: 0.5em;\r\n}\r\n\r\n.axis-diagram:last-child {\r\n margin-right: 0;\r\n}\r\n\r\n.axis-diagram>label {\r\n margin-top: 0.3em;\r\n display: block;\r\n}\r\n\r\n.axis-calibration-value {\r\n display: none;\r\n}\r\n.axis-log-setting, .axis-log-power-setting {\r\n display: none;\r\n}\r\n.combined-origin {\r\n fill: palevioletred !important;\r\n font-size: 2em !important;\r\n}\r\n.combined-origin.on {\r\n\r\n}\r\n.combined-origin.off {\r\n\r\n}\r\n/* *:focus {\r\n outline: 2px solid red;\r\n} */\r\nselect:focus, button:focus {\r\n outline-width: 0;\r\n}\r\n.axis-calibration-value:focus {\r\n outline-width: 0;\r\n}\r\n.axis-log-setting > input:focus, .axis-log-power-setting > input:focus {\r\n outline-width: 0;\r\n}\r\n.axis-log-setting:focus-within, .axis-log-power-setting:focus-within {\r\n outline: 1px dotted red;\r\n}\r\n\r\n.axis-calibration .cta {\r\n color: white;\r\n background-color: palevioletred;\r\n border: 1px solid palevioletred;\r\n border-radius: 20px;\r\n padding: 0 0.7em;\r\n}\r\n\r\n.axis-calibration .cta:before {\r\n content: '>';\r\n font-size: 20pt;\r\n vertical-align: -0.15em;\r\n margin-right: 0.15em;\r\n font-weight: bold;\r\n color: white;\r\n}\r\n\r\n.matrix-display {\r\n border: 1px solid $primaryBackgroundHilight;\r\n padding: 0;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.matrix-display>.matrix-row {\r\n padding: 0;\r\n margin: 0;\r\n display: flex;\r\n}\r\n\r\n.matrix-display>.matrix-row>.matrix-element {\r\n border: 1px solid $primaryBackgroundHilight;\r\n padding: 0.25em;\r\n margin: 0;\r\n flex: 1 0;\r\n}\r\n\r\n.data-points-table-container {\r\n max-height: 250px;\r\n overflow-y: auto;\r\n}\r\n\r\n.data-points-table {\r\n border-collapse: collapse;\r\n width: 100%;\r\n}\r\n\r\n.data-points-table thead, .data-points-table tr, .data-points-table tbody, .data-points-table th, .data-points-table td {\r\n font-size: inherit;\r\n}\r\n.data-points-table td, .data-points-table th {\r\n border: 1px solid $primaryBackgroundHilight;\r\n}\r\n\r\n.data-points-table td.selected {\r\n background-color: $primaryBackgroundHilightLight3;\r\n}\r\n\r\n.data-points-table td.data-cell, .data-points-table td.blank-cell {\r\n cursor: pointer;\r\n}\r\n\r\n.data-points-table td.auto-add {\r\n background-color: $primaryBackgroundHilightLight3;\r\n}\r\n\r\n.top.bar {\r\n display: flex;\r\n flex-direction: row-reverse;\r\n}\r\n\r\n.settings {\r\n border: 1px solid var (--primaryBackgroundHilightDark3);\r\n background-color: $primaryBackground;\r\n color: $primaryBackgroundHilight;\r\n display: flex;\r\n align-self: center;\r\n align-items: center;\r\n}\r\n\r\n.series-selector-panel .button-bar,\r\n.data-points-meta-table-container .button-bar {\r\n display: flex;\r\n align-content: stretch;\r\n}\r\n\r\n.series-selector-panel .button-bar button,\r\n.data-points-meta-table-container .button-bar button {\r\n flex: 1;\r\n}\r\n\r\n.series-selector-panel .button-bar button svg,\r\n.data-points-meta-table-container .button-bar button svg {\r\n font-size: 1.4rem;\r\n}\r\n\r\n.data-points-table svg {\r\n font-size: 1.3rem;\r\n}\r\n\r\n.data-points-table svg.disabled {\r\n color: #ccc;\r\n}\r\n\r\n::-webkit-input-placeholder {\r\n color: $placeholderTextColor;\r\n}\r\n\r\n::-moz-placeholder {\r\n color: $placeholderTextColor;\r\n}\r\n\r\n:-ms-input-placeholder {\r\n color: $placeholderTextColor;\r\n}\r\n\r\n:-moz-placeholder {\r\n color: $placeholderTextColor;\r\n}\r\n\r\n.base {\r\n vertical-align: sub;\r\n font-size: 0.7em;\r\n}\r\n\r\n.pow {\r\n vertical-align: super;\r\n font-size: 0.7em;\r\n}\r\n.disabled {\r\n color: #ccc;\r\n}","\r\n $primaryBackground: pink;\r\n $primaryBackgroundHilight: palevioletred;\r\n $primaryBackgroundHilightDark: #c45c7f;\r\n $primaryBackgroundHilightDark2: #ba5275;\r\n $primaryBackgroundHilightDark3: #b0486b;\r\n $primaryBackgroundHilightLight: #ec84a7;\r\n $primaryBackgroundHilightLight2: #f68eb1;\r\n $primaryBackgroundHilightLight3: #ff98bb;\r\n $primaryBackgroundHilightLight4: lighten($primaryBackgroundHilightLight3, 10%);\r\n $transulcentBackground: rgba(lighten(pink, 5%), 0.4);\r\n $lightPink: lighten(pink, 5%);\r\n $placeholderTextColor: #bbb;\r\n",".graph-chooser-api-driver {\r\n margin: 1em 1em 0 1em;\r\n padding: 0.5em;\r\n border: 1px solid red;\r\n display: flex;\r\n flex-direction: column;\r\n}","$unhoveredColor: gray;\r\n$hoveredColor: black;\r\n$handleBorderRadius: 50%;\r\n\r\n.selection-container {\r\n width: 100%;\r\n height: 100%;\r\n position: absolute;\r\n cursor: crosshair;\r\n}\r\n.selection-rectangle {\r\n border: #{var(--borderSize)} dotted $unhoveredColor;\r\n z-index: 10;\r\n}\r\n.selection-rectangle.hovered {\r\n border-color: $hoveredColor;\r\n cursor: move;\r\n}\r\n\r\n// .selection-rectangle.transparent {\r\n// opacity: 0.5;\r\n// pointer-events: none;\r\n// }\r\n\r\n.selection-handle {\r\n position: absolute;\r\n display: block;\r\n border-radius: 0;\r\n border-radius: $handleBorderRadius;\r\n // border: 1px solid black;\r\n // background-color: black;\r\n transform: scale(0.1);\r\n opacity: 0;\r\n width: var(--handleSize);\r\n height: var(--handleSize);\r\n left: calc(50% - var(--handleSize) / 2);\r\n top: calc(50% - var(--handleSize) / 2);\r\n}\r\n.selection-rectangle.hovered .selection-handle {\r\n // border-color: magenta;\r\n background-color: $hoveredColor;\r\n}\r\n\r\n.selection-rectangle.transparent .selection-handle,\r\n.selection-rectangle.dragging .selection-handle {\r\n cursor: inherit;\r\n}\r\n\r\n.selection-rectangle:focus .selection-handle,\r\n.selection-rectangle:hover .selection-handle,\r\n.selection-rectangle.dragging .selection-handle,\r\n.selection-rectangle.focused .selection-handle,\r\n.selection-rectangle.hovered .selection-handle {\r\n transform: scale(1);\r\n opacity: 1;\r\n}\r\n\r\n.selection-rectangle.read-only {\r\n cursor: default;\r\n}\r\n\r\n.selection-rectangle.read-only .selection-handle {\r\n display: none;\r\n}\r\n\r\n.selection-rectangle .delete {\r\n cursor: pointer;\r\n font-size: 2em;\r\n margin: 0.25em;\r\n display: none;\r\n float: right;\r\n}\r\n\r\n.selection-rectangle.hovered .delete {\r\n display: inline-block;\r\n fill: darkgray;\r\n}\r\n\r\n.selection-rectangle.hovered .delete:hover {\r\n fill: black;\r\n}\r\n\r\n.selection-rectangle.creating .delete,\r\n.selection-rectangle.editing .delete {\r\n display: none;\r\n}\r\n\r\n.selection-handle.top-left {\r\n left: calc(0% - (#{var(--borderSize)} + var(--handleSize)) / 2);\r\n top: calc(0% - (#{var(--borderSize)} + var(--handleSize)) / 2);\r\n cursor: nwse-resize;\r\n z-index: 1;\r\n}\r\n\r\n.selection-handle.top-center {\r\n top: calc(0% - (#{var(--borderSize)} + var(--handleSize)) / 2);\r\n cursor: ns-resize;\r\n}\r\n\r\n.selection-handle.top-right {\r\n top: calc(0% - (#{var(--borderSize)} + var(--handleSize)) / 2);\r\n left: calc(100% + (#{var(--borderSize)} - var(--handleSize)) / 2);\r\n cursor: nesw-resize;\r\n z-index: 1;\r\n}\r\n\r\n.selection-handle.right-center {\r\n left: calc(100% + (#{var(--borderSize)} - var(--handleSize)) / 2);\r\n cursor: ew-resize;\r\n}\r\n\r\n.selection-handle.bottom-right {\r\n top: calc(100% + (#{var(--borderSize)} - var(--handleSize)) / 2);\r\n left: calc(100% + (#{var(--borderSize)} - var(--handleSize)) / 2);\r\n cursor: nwse-resize;\r\n z-index: 1;\r\n}\r\n\r\n.selection-handle.bottom-center {\r\n top: calc(100% + (#{var(--borderSize)} - var(--handleSize)) / 2);\r\n cursor: ns-resize;\r\n}\r\n\r\n.selection-handle.bottom-left {\r\n top: calc(100% + (#{var(--borderSize)} - var(--handleSize)) / 2);\r\n left: calc(0% - (#{var(--borderSize)} + var(--handleSize)) / 2);\r\n cursor: nesw-resize;\r\n z-index: 1;\r\n}\r\n\r\n.selection-handle.left-center {\r\n left: calc(0% - (#{var(--borderSize)} + var(--handleSize)) / 2);\r\n cursor: ew-resize;\r\n}\r\n","@import \"../../../vars.scss\";\r\n\r\n.graph-chooser-main-ui {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n}\r\n\r\n.pdf-page-wrapper {\r\n border-top: 1px dashed gray;\r\n position: relative;\r\n}\r\n.graph-selection-rect {\r\n border: 3px dotted lightgray;\r\n z-index: 1000;\r\n}\r\n.graph-selection-rect.selected {\r\n border: 3px dotted red;\r\n border-color: $primaryBackgroundHilightLight3;\r\n background-color: $transulcentBackground;\r\n}\r\n.graph-selection-handle {\r\n background-color: lightgray;\r\n}\r\n.graph-selection-rect.selected .graph-selection-handle {\r\n background-color: $primaryBackgroundHilightLight3;\r\n}\r\n.page-bounds-rect {\r\n border: 3px solid gold;\r\n z-index: 1;\r\n}\r\n.pdf-page-wrapper:nth-child(1) {\r\n border-top-width: 0;\r\n}\r\n.pdf-page-number {\r\n border: 1px solid black;\r\n display: inline-block;\r\n min-width: 28px;\r\n text-align: center;\r\n margin: 0.5em;\r\n position: absolute;\r\n top: 0;\r\n z-index: 1000;\r\n}\r\n.drag-group {\r\n display: none;\r\n cursor: default;\r\n}\r\n.graph-selection-rect.hovered .drag-group,\r\n.drag-group.selected {\r\n display: inline-block;\r\n border: 2px solid lightgray;\r\n background-color: lightgray;\r\n border-radius: 4px;\r\n padding: 0 0 0 0.5em;\r\n margin: 0.5em;\r\n}\r\n.graph-selection-rect.creating .drag-group,\r\n.graph-selection-rect.editing .drag-group {\r\n display: none;\r\n}\r\n.drag-group .inner-group {\r\n display: flex;\r\n margin-left: -0.25em;\r\n padding: 0.25em 0.25em 0.25em 0;\r\n}\r\n.drag-group .inner-group .drag-handle {\r\n margin-right: 0.25em;\r\n cursor: move;\r\n}\r\n.drag-group.selected,\r\n.graph-selection-rect.hovered .drag-group.selected {\r\n border: 2px solid $primaryBackgroundHilightDark3;\r\n background-color: $primaryBackgroundHilightLight3;\r\n}\r\n.graph-selection-rect.selected .delete {\r\n fill: $primaryBackgroundHilightLight3;\r\n}\r\n.graph-selection-rect.selected .delete:hover {\r\n fill: $primaryBackgroundHilightDark3;\r\n}\r\n\r\n.header-bar {\r\n border-bottom: 1px dotted black;\r\n padding: 0.25em;\r\n\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-end;\r\n}\r\n\r\n.doc-wrapper {\r\n flex: 1;\r\n overflow: auto;\r\n}\r\n.GraphChooser {\r\n height: 100%;\r\n}\r\n\r\n.load-progress {\r\n margin-right: 1em;\r\n\r\n .page-loaded-status {\r\n padding: 0.15em 0.4em;\r\n display: inline-block;\r\n border: 1px solid black;\r\n border-width: 1px 1px 1px 0;\r\n font-weight: normal;\r\n text-decoration: none;\r\n }\r\n .page-loaded-status:first-child {\r\n border-left-width: 1px;\r\n }\r\n .loaded {\r\n background-color: gray;\r\n color: white;\r\n }\r\n}\r\n\r\n.clickable {\r\n cursor: pointer;\r\n}\r\n\r\n.lock-selected-graphs {\r\n margin: 0 0.25em;\r\n}\r\n",".graph-displayer-api-driver {\r\n margin: 1em 1em 0 1em;\r\n padding: 0.5em;\r\n border: 1px solid red;\r\n cursor: pointer;\r\n}\r\n\r\n.graph-coords {\r\n font-size: 0.8em;\r\n border-top: 1px dotted red;\r\n margin-top: 1em;\r\n padding-top: 0.25em;\r\n display: block;\r\n margin-left: -0.5em;\r\n margin-right: -0.5em;\r\n padding: 0.5em 0.5em 0 0.5em;\r\n text-align: center;\r\n}",".graph-displayer-main-ui {\r\n margin: 1em 1em 0 1em;\r\n padding: 0.5em;\r\n border: 1px solid red;\r\n cursor: pointer;\r\n}"]} \ No newline at end of file diff --git a/static/js/2.98be8ffd.chunk.js b/Graph2Data2/static/js/2.cc6bd7d2.chunk.js similarity index 75% rename from static/js/2.98be8ffd.chunk.js rename to Graph2Data2/static/js/2.cc6bd7d2.chunk.js index 6d6318a..09450a6 100644 --- a/static/js/2.98be8ffd.chunk.js +++ b/Graph2Data2/static/js/2.cc6bd7d2.chunk.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[2],[function(e,t,r){"use strict";e.exports=r(94)},function(e,t,r){"use strict";r.d(t,"a",function(){return a});var n=r(10);function a(e){for(var t=1;t=0?atob(e.split(",")[1]):unescape(e.split(",")[1]);for(var r=new Uint8Array(t.length),n=0;n1?t-1:0),n=1;ns)return new Error("Expected `".concat(t,"` to be less or equal to ").concat(s-1,"."))}else if(!(0,l.isDefined)(i))return new Error("`".concat(t,"` not supplied. Either pageIndex or pageNumber must be supplied to `").concat(r,"`."));return null};t.isPageNumber=function(e,t,r){var n=e[t],i=e.pageIndex,o=e.pdf;if(!(0,l.isDefined)(o))return null;if((0,l.isDefined)(n)){if("number"!==typeof n)return new Error("`".concat(t,"` of type `").concat((0,a.default)(n),"` supplied to `").concat(r,"`, expected `number`."));if(n<1)return new Error("Expected `".concat(t,"` to be greater or equal to 1."));var s=o.numPages;if(n>s)return new Error("Expected `".concat(t,"` to be less or equal to ").concat(s,"."))}else if(!(0,l.isDefined)(i))return new Error("`".concat(t,"` not supplied. Either pageIndex or pageNumber must be supplied to `").concat(r,"`."));return null};var y=o.default.oneOfType([o.default.shape({getDestination:o.default.func.isRequired,getOutline:o.default.func.isRequired,getPage:o.default.func.isRequired,numPages:o.default.number.isRequired}),o.default.bool]);t.isPdf=y;var b=o.default.oneOf(["canvas","none","svg"]);t.isRenderMode=b;var w=o.default.oneOf([0,90,180,270]);t.isRotate=w},function(e,t){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(n){"object"===typeof window&&(r=window)}e.exports=r},function(e,t,r){e.exports=r(65)},function(e,t,r){"use strict";var n=function(e){return function(e){return!!e&&"object"===typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return"[object RegExp]"===t||"[object Date]"===t||function(e){return e.$$typeof===a}(e)}(e)};var a="function"===typeof Symbol&&Symbol.for?Symbol.for("react.element"):60103;function i(e,t){return!1!==t.clone&&t.isMergeableObject(e)?l((r=e,Array.isArray(r)?[]:{}),e,t):e;var r}function o(e,t,r){return e.concat(t).map(function(e){return i(e,r)})}function s(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter(function(t){return e.propertyIsEnumerable(t)}):[]}(e))}function c(e,t,r){var n={};return r.isMergeableObject(e)&&s(e).forEach(function(t){n[t]=i(e[t],r)}),s(t).forEach(function(a){r.isMergeableObject(t[a])&&e[a]?n[a]=function(e,t){if(!t.customMerge)return l;var r=t.customMerge(e);return"function"===typeof r?r:l}(a,r)(e[a],t[a],r):n[a]=i(t[a],r)}),n}function l(e,t,r){(r=r||{}).arrayMerge=r.arrayMerge||o,r.isMergeableObject=r.isMergeableObject||n;var a=Array.isArray(t);return a===Array.isArray(e)?a?r.arrayMerge(e,t,r):c(e,t,r):i(t,r)}l.all=function(e,t){if(!Array.isArray(e))throw new Error("first argument should be an array");return e.reduce(function(e,r){return l(e,r,t)},{})};var u=l;e.exports=u},function(e,t){function r(e,t,r,n,a,i,o){try{var s=e[i](o),c=s.value}catch(l){return void r(l)}s.done?t(c):Promise.resolve(c).then(n,a)}e.exports=function(e){return function(){var t=this,n=arguments;return new Promise(function(a,i){var o=e.apply(t,n);function s(e){r(o,a,i,s,c,"next",e)}function c(e){r(o,a,i,s,c,"throw",e)}s(void 0)})}}},function(e,t,r){"use strict";!function e(){if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=r(95)},function(e,t,r){"use strict";var n=r(3),a=r(4),i=r(7),o=r(5);function s(e,t,r){return(s="undefined"!==typeof Reflect&&Reflect.get?Reflect.get:function(e,t,r){var n=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=Object(o.a)(e)););return e}(e,t);if(n){var a=Object.getOwnPropertyDescriptor(n,t);return a.get?a.get.call(r):a.value}})(e,t,r||e)}var c=r(6),l=new WeakMap,u=function(e){return"function"===typeof e&&l.has(e)},h=void 0!==window.customElements&&void 0!==window.customElements.polyfillWrapFlushCallback,f=function(e,t){for(var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;t!==r;){var n=t.nextSibling;e.removeChild(t),t=n}},d={},p={},m=r(8),g="{{lit-".concat(String(Math.random()).slice(2),"}}"),v="\x3c!--".concat(g,"--\x3e"),y=new RegExp("".concat(g,"|").concat(v)),b=function e(t,r){Object(n.a)(this,e),this.parts=[],this.element=r;for(var a=[],i=[],o=document.createTreeWalker(r.content,133,null,!1),s=0,c=-1,l=0,u=t.strings,h=t.values.length;l0;){var b=u[l],k=_.exec(b)[2],x=k.toLowerCase()+"$lit$",A=f.getAttribute(x);f.removeAttribute(x);var C=A.split(y);this.parts.push({type:"attribute",index:c,name:k,strings:C}),l+=C.length-1}}"TEMPLATE"===f.tagName&&(i.push(f),o.currentNode=f.content)}else if(3===f.nodeType){var P=f.data;if(P.indexOf(g)>=0){for(var E=f.parentNode,T=P.split(y),O=T.length-1,R=0;R=0&&e.slice(r)===t},k=function(e){return-1!==e.index},S=function(){return document.createComment("")},_=/([ \x09\x0a\x0c\x0d])([^\0-\x1F\x7F-\x9F "'>=\/]+)([ \x09\x0a\x0c\x0d]*=[ \x09\x0a\x0c\x0d]*(?:[^ \x09\x0a\x0c\x0d"'`<>=]*|"[^"]*|'[^']*))$/,x=function(){function e(t,r,a){Object(n.a)(this,e),this.__parts=[],this.template=t,this.processor=r,this.options=a}return Object(a.a)(e,[{key:"update",value:function(e){var t=0,r=!0,n=!1,a=void 0;try{for(var i,o=this.__parts[Symbol.iterator]();!(r=(i=o.next()).done);r=!0){var s=i.value;void 0!==s&&s.setValue(e[t]),t++}}catch(p){n=!0,a=p}finally{try{r||null==o.return||o.return()}finally{if(n)throw a}}var c=!0,l=!1,u=void 0;try{for(var h,f=this.__parts[Symbol.iterator]();!(c=(h=f.next()).done);c=!0){var d=h.value;void 0!==d&&d.commit()}}catch(p){l=!0,u=p}finally{try{c||null==f.return||f.return()}finally{if(l)throw u}}}},{key:"_clone",value:function(){for(var e,t=h?this.template.element.content.cloneNode(!0):document.importNode(this.template.element.content,!0),r=[],n=this.template.parts,a=document.createTreeWalker(t,133,null,!1),i=0,o=0,s=a.nextNode();i-1||r)&&-1===a.indexOf("--\x3e",i+1);var o=_.exec(a);t+=null===o?a+(r?g:v):a.substr(0,o.index)+o[1]+o[2]+"$lit$"+o[3]+g}return t+=this.strings[e]}},{key:"getTemplateElement",value:function(){var e=document.createElement("template");return e.innerHTML=this.getHTML(),e}}]),e}(),C=function(e){return null===e||!("object"===typeof e||"function"===typeof e)},P=function(e){return Array.isArray(e)||!(!e||!e[Symbol.iterator])},E=function(){function e(t,r,a){Object(n.a)(this,e),this.dirty=!0,this.element=t,this.name=r,this.strings=a,this.parts=[];for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:this.startNode;f(this.startNode.parentNode,e.nextSibling,this.endNode)}}]),e}(),R=function(){function e(t,r,a){if(Object(n.a)(this,e),this.value=void 0,this.__pendingValue=void 0,2!==a.length||""!==a[0]||""!==a[1])throw new Error("Boolean attributes can only contain a single expression");this.element=t,this.name=r,this.strings=a}return Object(a.a)(e,[{key:"setValue",value:function(e){this.__pendingValue=e}},{key:"commit",value:function(){for(;u(this.__pendingValue);){var e=this.__pendingValue;this.__pendingValue=d,e(this)}if(this.__pendingValue!==d){var t=!!this.__pendingValue;this.value!==t&&(t?this.element.setAttribute(this.name,""):this.element.removeAttribute(this.name),this.value=t),this.__pendingValue=d}}}]),e}(),I=function(e){function t(e,r,a){var s;return Object(n.a)(this,t),(s=Object(i.a)(this,Object(o.a)(t).call(this,e,r,a))).single=2===a.length&&""===a[0]&&""===a[1],s}return Object(c.a)(t,e),Object(a.a)(t,[{key:"_createPart",value:function(){return new F(this)}},{key:"_getValue",value:function(){return this.single?this.parts[0].value:s(Object(o.a)(t.prototype),"_getValue",this).call(this)}},{key:"commit",value:function(){this.dirty&&(this.dirty=!1,this.element[this.name]=this._getValue())}}]),t}(E),F=function(e){function t(){return Object(n.a)(this,t),Object(i.a)(this,Object(o.a)(t).apply(this,arguments))}return Object(c.a)(t,e),t}(T),L=!1;try{var M={get capture(){return L=!0,!1}};window.addEventListener("test",M,M),window.removeEventListener("test",M,M)}catch(ve){}var D=function(){function e(t,r,a){var i=this;Object(n.a)(this,e),this.value=void 0,this.__pendingValue=void 0,this.element=t,this.eventName=r,this.eventContext=a,this.__boundHandleEvent=function(e){return i.handleEvent(e)}}return Object(a.a)(e,[{key:"setValue",value:function(e){this.__pendingValue=e}},{key:"commit",value:function(){for(;u(this.__pendingValue);){var e=this.__pendingValue;this.__pendingValue=d,e(this)}if(this.__pendingValue!==d){var t=this.__pendingValue,r=this.value,n=null==t||null!=r&&(t.capture!==r.capture||t.once!==r.once||t.passive!==r.passive),a=null!=t&&(null==r||n);n&&this.element.removeEventListener(this.eventName,this.__boundHandleEvent,this.__options),a&&(this.__options=N(t),this.element.addEventListener(this.eventName,this.__boundHandleEvent,this.__options)),this.value=t,this.__pendingValue=d}}},{key:"handleEvent",value:function(e){"function"===typeof this.value?this.value.call(this.eventContext||this.element,e):this.value.handleEvent(e)}}]),e}(),N=function(e){return e&&(L?{capture:e.capture,passive:e.passive,once:e.once}:e.capture)},j=new(function(){function e(){Object(n.a)(this,e)}return Object(a.a)(e,[{key:"handleAttributeExpressions",value:function(e,t,r,n){var a=t[0];return"."===a?new I(e,t.slice(1),r).parts:"@"===a?[new D(e,t.slice(1),n.eventContext)]:"?"===a?[new R(e,t.slice(1),r)]:new E(e,t,r).parts}},{key:"handleTextExpression",value:function(e){return new O(e)}}]),e}());function B(e){var t=q.get(e.type);void 0===t&&(t={stringsArray:new WeakMap,keyString:new Map},q.set(e.type,t));var r=t.stringsArray.get(e.strings);if(void 0!==r)return r;var n=e.strings.join(g);return void 0===(r=t.keyString.get(n))&&(r=new b(e,e.getTemplateElement()),t.keyString.set(n,r)),t.stringsArray.set(e.strings,r),r}var q=new Map,U=new WeakMap;(window.litHtmlVersions||(window.litHtmlVersions=[])).push("1.1.1");var z=function(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n1&&void 0!==arguments[1]?arguments[1]:-1)+1;t2&&void 0!==arguments[2]?arguments[2]:null,n=e.element.content,a=e.parts;if(null!==r&&void 0!==r)for(var i=document.createTreeWalker(n,W,null,!1),o=V(a),s=0,c=-1;i.nextNode();)for(c++,i.currentNode===r&&(s=G(t),r.parentNode.insertBefore(t,r));-1!==o&&a[o].index===c;){if(s>0){for(;-1!==o;)a[o].index+=s,o=V(a,o);return}o=V(a,o)}else n.appendChild(t)}(r,o,l.firstChild):l.insertBefore(o,l.firstChild),window.ShadyCSS.prepareTemplateStyles(n,e);var u=l.querySelector("style");if(window.ShadyCSS.nativeShadow&&null!==u)t.insertBefore(u.cloneNode(!0),t.firstChild);else if(r){l.insertBefore(o,l.firstChild);var h=new Set;h.add(o),H(r,h)}}else window.ShadyCSS.prepareTemplateStyles(n,e)},$=r(9),ee=r.n($),te=r(13),re=r(12),ne=r(37);function ae(e,t,r){return(ae=function(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch(e){return!1}}()?Reflect.construct:function(e,t,r){var n=[null];n.push.apply(n,t);var a=new(Function.bind.apply(e,n));return r&&Object(ne.a)(a,r.prototype),a}).apply(null,arguments)}function ie(e){var t="function"===typeof Map?new Map:void 0;return(ie=function(e){if(null===e||(r=e,-1===Function.toString.call(r).indexOf("[native code]")))return e;var r;if("function"!==typeof e)throw new TypeError("Super expression must either be null or a function");if("undefined"!==typeof t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return ae(e,arguments,Object(o.a)(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),Object(ne.a)(n,e)})(e)}var oe=function(e,t){return e},se={toAttribute:function(e,t){switch(t){case Boolean:return e?"":null;case Object:case Array:return null==e?e:JSON.stringify(e)}return e},fromAttribute:function(e,t){switch(t){case Boolean:return null!==e;case Number:return null===e?null:Number(e);case Object:case Array:return JSON.parse(e)}return e}},ce=function(e,t){return t!==e&&(t===t||e===e)},le={attribute:!0,type:String,converter:se,reflect:!1,hasChanged:ce},ue=Promise.resolve(!0),he=function(e){function t(){var e;return Object(n.a)(this,t),(e=Object(i.a)(this,Object(o.a)(t).call(this)))._updateState=0,e._instanceProperties=void 0,e._updatePromise=ue,e._hasConnectedResolver=void 0,e._changedProperties=new Map,e._reflectingProperties=void 0,e.initialize(),e}return Object(c.a)(t,e),Object(a.a)(t,[{key:"initialize",value:function(){this._saveInstanceProperties()}},{key:"_saveInstanceProperties",value:function(){var e=!0,t=!1,r=void 0;try{for(var n,a=this.constructor._classProperties[Symbol.iterator]();!(e=(n=a.next()).done);e=!0){var i=n.value,o=Object(re.a)(i,1)[0];if(this.hasOwnProperty(o)){var s=this[o];delete this[o],this._instanceProperties||(this._instanceProperties=new Map),this._instanceProperties.set(o,s)}}}catch(c){t=!0,r=c}finally{try{e||null==a.return||a.return()}finally{if(t)throw r}}}},{key:"_applyInstanceProperties",value:function(){var e=!0,t=!1,r=void 0;try{for(var n,a=this._instanceProperties[Symbol.iterator]();!(e=(n=a.next()).done);e=!0){var i=n.value,o=Object(re.a)(i,2),s=o[0],c=o[1];this[s]=c}}catch(l){t=!0,r=l}finally{try{e||null==a.return||a.return()}finally{if(t)throw r}}this._instanceProperties=void 0}},{key:"connectedCallback",value:function(){this._updateState=32|this._updateState,this._hasConnectedResolver?(this._hasConnectedResolver(),this._hasConnectedResolver=void 0):this.requestUpdate()}},{key:"disconnectedCallback",value:function(){}},{key:"attributeChangedCallback",value:function(e,t,r){t!==r&&this._attributeToProperty(e,r)}},{key:"_propertyToAttribute",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:le,n=this.constructor,a=n._attributeNameForProperty(e,r);if(void 0!==a){var i=n._propertyValueToAttribute(t,r);if(void 0===i)return;this._updateState=8|this._updateState,null==i?this.removeAttribute(a):this.setAttribute(a,i),this._updateState=-9&this._updateState}}},{key:"_attributeToProperty",value:function(e,t){if(!(8&this._updateState)){var r=this.constructor,n=r._attributeToPropertyMap.get(e);if(void 0!==n){var a=r._classProperties.get(n)||le;this._updateState=16|this._updateState,this[n]=r._propertyValueFromAttribute(t,a),this._updateState=-17&this._updateState}}}},{key:"requestUpdate",value:function(e,t){var r=!0;if(void 0!==e&&!this._changedProperties.has(e)){var n=this.constructor,a=n._classProperties.get(e)||le;n._valueHasChanged(this[e],t,a.hasChanged)?(this._changedProperties.set(e,t),!0!==a.reflect||16&this._updateState||(void 0===this._reflectingProperties&&(this._reflectingProperties=new Map),this._reflectingProperties.set(e,a))):r=!1}return!this._hasRequestedUpdate&&r&&this._enqueueUpdate(),this.updateComplete}},{key:"_enqueueUpdate",value:function(){var e=Object(te.a)(ee.a.mark(function e(){var t,r,n,a=this;return ee.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return this._updateState=4|this._updateState,r=this._updatePromise,this._updatePromise=new Promise(function(e){return t=e}),e.next=5,r;case 5:if(this._hasConnected){e.next=8;break}return e.next=8,new Promise(function(e){return a._hasConnectedResolver=e});case 8:if(null==(n=this.performUpdate())||"function"!==typeof n.then){e.next=12;break}return e.next=12,n;case 12:t(!this._hasRequestedUpdate);case 13:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"performUpdate",value:function(){if(this._instanceProperties&&this._applyInstanceProperties(),this.shouldUpdate(this._changedProperties)){var e=this._changedProperties;this.update(e),this._markUpdated(),1&this._updateState||(this._updateState=1|this._updateState,this.firstUpdated(e)),this.updated(e)}else this._markUpdated()}},{key:"_markUpdated",value:function(){this._changedProperties=new Map,this._updateState=-5&this._updateState}},{key:"shouldUpdate",value:function(e){return!0}},{key:"update",value:function(e){if(void 0!==this._reflectingProperties&&this._reflectingProperties.size>0){var t=!0,r=!1,n=void 0;try{for(var a,i=this._reflectingProperties[Symbol.iterator]();!(t=(a=i.next()).done);t=!0){var o=a.value,s=Object(re.a)(o,2),c=s[0],l=s[1];this._propertyToAttribute(c,this[c],l)}}catch(u){r=!0,n=u}finally{try{t||null==i.return||i.return()}finally{if(r)throw n}}this._reflectingProperties=void 0}}},{key:"updated",value:function(e){}},{key:"firstUpdated",value:function(e){}},{key:"_hasConnected",get:function(){return 32&this._updateState}},{key:"_hasRequestedUpdate",get:function(){return 4&this._updateState}},{key:"hasUpdated",get:function(){return 1&this._updateState}},{key:"updateComplete",get:function(){return this._updatePromise}}],[{key:"_ensureClassProperties",value:function(){var e=this;if(!this.hasOwnProperty(oe("_classProperties"))){this._classProperties=new Map;var t=Object.getPrototypeOf(this)._classProperties;void 0!==t&&t.forEach(function(t,r){return e._classProperties.set(r,t)})}}},{key:"createProperty",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:le;if(this._ensureClassProperties(),this._classProperties.set(e,t),!t.noAccessor){var r,n=function(e,t){if(e in t)for(;t!==Object.prototype;){if(t.hasOwnProperty(e))return Object.getOwnPropertyDescriptor(t,e);t=Object.getPrototypeOf(t)}}(e,this.prototype);if(void 0!==n&&n.set&&n.get){var a=n.set,i=n.get;r={get:function(){return i.call(this)},set:function(t){var r=this[e];a.call(this,t),this.requestUpdate(e,r)},configurable:!0,enumerable:!0}}else{var o="symbol"===typeof e?Symbol():"__".concat(e);r={get:function(){return this[o]},set:function(t){var r=this[e];this[o]=t,this.requestUpdate(e,r)},configurable:!0,enumerable:!0}}Object.defineProperty(this.prototype,e,r)}}},{key:"_finalize",value:function(){if(!this.hasOwnProperty(oe("finalized"))||!this.finalized){var e=Object.getPrototypeOf(this);if("function"===typeof e._finalize&&e._finalize(),this.finalized=!0,this._ensureClassProperties(),this._attributeToPropertyMap=new Map,this.hasOwnProperty(oe("properties"))){var t=this.properties,r=[].concat(Object(m.a)(Object.getOwnPropertyNames(t)),Object(m.a)("function"===typeof Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t):[])),n=!0,a=!1,i=void 0;try{for(var o,s=r[Symbol.iterator]();!(n=(o=s.next()).done);n=!0){var c=o.value;this.createProperty(c,t[c])}}catch(l){a=!0,i=l}finally{try{n||null==s.return||s.return()}finally{if(a)throw i}}}}}},{key:"_attributeNameForProperty",value:function(e,t){var r=t.attribute;return!1===r?void 0:"string"===typeof r?r:"string"===typeof e?e.toLowerCase():void 0}},{key:"_valueHasChanged",value:function(e,t){return(arguments.length>2&&void 0!==arguments[2]?arguments[2]:ce)(e,t)}},{key:"_propertyValueFromAttribute",value:function(e,t){var r=t.type,n=t.converter||se,a="function"===typeof n?n:n.fromAttribute;return a?a(e,r):e}},{key:"_propertyValueToAttribute",value:function(e,t){if(void 0!==t.reflect){var r=t.type,n=t.converter;return(n&&n.toAttribute||se.toAttribute)(e,r)}}},{key:"observedAttributes",get:function(){this._finalize();var e=[],t=!0,r=!1,n=void 0;try{for(var a,i=this._classProperties[Symbol.iterator]();!(t=(a=i.next()).done);t=!0){var o=a.value,s=Object(re.a)(o,2),c=s[0],l=s[1],u=this._attributeNameForProperty(c,l);void 0!==u&&(this._attributeToPropertyMap.set(u,c),e.push(u))}}catch(h){r=!0,n=h}finally{try{t||null==i.return||i.return()}finally{if(r)throw n}}return e}}]),t}(ie(HTMLElement));he.finalized=!0;pe(function(e,t){return e.querySelector(t)}),pe(function(e,t){return e.querySelectorAll(t)});var fe=function(e,t,r){Object.defineProperty(t,r,e)},de=function(e,t){return{kind:"method",placement:"prototype",key:t.key,descriptor:e}};function pe(e){return function(t){return function(r,n){var a={get:function(){return e(this.renderRoot,t)},enumerable:!0,configurable:!0};return void 0!==n?fe(a,r,n):de(a,r)}}}var me="adoptedStyleSheets"in Document.prototype;r.d(t,"a",function(){return ge}),r.d(t,"b",function(){return z});var ge=function(e){function t(){return Object(n.a)(this,t),Object(i.a)(this,Object(o.a)(t).apply(this,arguments))}return Object(c.a)(t,e),Object(a.a)(t,[{key:"initialize",value:function(){s(Object(o.a)(t.prototype),"initialize",this).call(this),this.renderRoot=this.createRenderRoot(),window.ShadowRoot&&this.renderRoot instanceof window.ShadowRoot&&this.adoptStyles()}},{key:"createRenderRoot",value:function(){return this.attachShadow({mode:"open"})}},{key:"adoptStyles",value:function(){var e=this.constructor._uniqueStyles;0!==e.length&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow?me?this.renderRoot.adoptedStyleSheets=e.map(function(e){return e.styleSheet}):this._needsShimAdoptedStyleSheets=!0:window.ShadyCSS.ScopingShim.prepareAdoptedCssText(e.map(function(e){return e.cssText}),this.localName))}},{key:"connectedCallback",value:function(){s(Object(o.a)(t.prototype),"connectedCallback",this).call(this),this.hasUpdated&&void 0!==window.ShadyCSS&&window.ShadyCSS.styleElement(this)}},{key:"update",value:function(e){var r=this;s(Object(o.a)(t.prototype),"update",this).call(this,e);var n=this.render();n instanceof A&&this.constructor.render(n,this.renderRoot,{scopeName:this.localName,eventContext:this}),this._needsShimAdoptedStyleSheets&&(this._needsShimAdoptedStyleSheets=!1,this.constructor._uniqueStyles.forEach(function(e){var t=document.createElement("style");t.textContent=e.cssText,r.renderRoot.appendChild(t)}))}},{key:"render",value:function(){}}],[{key:"styles",get:function(){return[]}},{key:"_uniqueStyles",get:function(){var e=this;if(void 0===this._styles){var t=this.styles.reduceRight(function(e,t){return e.add(t),e},new Set);this._styles=[],t.forEach(function(t){return e._styles.unshift(t)})}return this._styles}}]),t}(he);ge.finalized=!0,ge.render=function(e,t,r){if(!r||"object"!==typeof r||!r.scopeName)throw new Error("The `scopeName` option is required.");var n=r.scopeName,a=U.has(t),i=Y&&11===t.nodeType&&!!t.host,o=i&&!Q.has(n),s=o?document.createDocumentFragment():t;if(function(e,t,r){var n=U.get(t);void 0===n&&(f(t,t.firstChild),U.set(t,n=new O(Object.assign({templateFactory:B},r))),n.appendInto(t)),n.setValue(e),n.commit()}(e,s,Object.assign({templateFactory:K(n)},r)),o){var c=U.get(s);U.delete(s);var l=c.value instanceof x?c.value.template:void 0;Z(n,s,l),f(t,t.firstChild),t.appendChild(s),U.set(t,c)}!a&&i&&window.ShadyCSS.styleElement(t.host)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=(0,r(0).createContext)(null);t.default=n},function(e,t,r){"use strict";function n(e,t){return(n=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}r.d(t,"a",function(){return n})},function(e,t,r){"use strict";var n=r(11);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var a=n(r(0)),i=(0,n(r(15)).default)(a.default.createElement(a.default.Fragment,null,a.default.createElement("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM8 9h8v10H8V9zm7.5-5l-1-1h-5l-1 1H5v2h14V4z"}),a.default.createElement("path",{fill:"none",d:"M0 0h24v24H0V0z"})),"DeleteOutline");t.default=i},function(e,t,r){"use strict";function n(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},i=Object.keys(e);for(n=0;n=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}r.d(t,"a",function(){return n})},function(e,t,r){"use strict";function n(e,t){return Array.isArray(t)?[e.a*t[0]+e.c*t[1]+e.e,e.b*t[0]+e.d*t[1]+e.f]:{x:e.a*t.x+e.c*t.y+e.e,y:e.b*t.x+e.d*t.y+e.f}}function a(e){return"undefined"===typeof e}function i(e){return{a:1,c:0,e:e,b:0,d:1,f:arguments.length>1&&void 0!==arguments[1]?arguments[1]:0}}var o=r(8),s=r(52),c=r(51),l=r(53);function u(){for(var e=arguments.length,t=new Array(e),r=0;r1&&void 0!==arguments[1]?arguments[1]:void 0;return a(t)&&(t=e),{a:e,c:0,e:0,b:0,d:t,f:0}}Math.tan;function d(e,t,r,n){this.message=e,this.expected=t,this.found=r,this.location=n,this.name="SyntaxError","function"===typeof Error.captureStackTrace&&Error.captureStackTrace(this,d)}!function(e,t){function r(){this.constructor=e}r.prototype=t.prototype,e.prototype=new r}(d,Error),d.buildMessage=function(e,t){var r={literal:function(e){return'"'+a(e.text)+'"'},class:function(e){var t=e.parts.map(function(e){return Array.isArray(e)?i(e[0])+"-"+i(e[1]):i(e)});return"["+(e.inverted?"^":"")+t+"]"},any:function(){return"any character"},end:function(){return"end of input"},other:function(e){return e.description},not:function(e){return"not "+o(e.expected)}};function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}function a(e){return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(e){return"\\x0"+n(e)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(e){return"\\x"+n(e)})}function i(e){return e.replace(/\\/g,"\\\\").replace(/\]/g,"\\]").replace(/\^/g,"\\^").replace(/-/g,"\\-").replace(/\0/g,"\\0").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/[\x00-\x0F]/g,function(e){return"\\x0"+n(e)}).replace(/[\x10-\x1F\x7F-\x9F]/g,function(e){return"\\x"+n(e)})}function o(e){return r[e.type](e)}return"Expected "+function(e){var t,r,n=e.map(o);if(n.sort(),n.length>0){for(t=1,r=1;t1)for(var r=1;r1&&void 0!==arguments[1]&&arguments[1];u(Number.isInteger(e)&&e>0,"The number should be a positive integer.");var r,n=[];for(;e>=1e3;)e-=1e3,n.push("M");r=e/100|0,e%=100,n.push(A[r]),r=e/10|0,e%=10,n.push(A[10+r]),n.push(A[20+e]);var a=n.join("");return t?a.toLowerCase():a},t.arrayByteLength=_,t.arraysToBytes=function(e){if(1===e.length&&e[0]instanceof Uint8Array)return e[0];var t,r,n,a=0,i=e.length;for(t=0;t100){c('getInheritableProperty: maximum loop count exceeded for "'.concat(n,'"'));break}r=r.get("Parent")}return t},t.getLookupTableFactory=function(e){var t;return function(){return e&&(t=Object.create(null),e(t),e=null),t}},t.getVerbosityLevel=function(){return s},t.info=function(e){s>=o.INFOS&&console.log("Info: "+e)},t.isArrayBuffer=function(e){return"object"===i(e)&&null!==e&&void 0!==e.byteLength},t.isBool=function(e){return"boolean"===typeof e},t.isEmptyObj=function(e){for(var t in e)return!1;return!0},t.isNum=function(e){return"number"===typeof e},t.isString=function(e){return"string"===typeof e},t.isSpace=function(e){return 32===e||9===e||13===e||10===e},t.isSameOrigin=function(e,t){try{var r=new a.URL(e);if(!r.origin||"null"===r.origin)return!1}catch(i){return!1}var n=new a.URL(t,r);return r.origin===n.origin},t.createValidAbsoluteUrl=function(e,t){if(!e)return null;try{var r=t?new a.URL(e,t):new a.URL(e);if(function(e){if(!e)return!1;switch(e.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}(r))return r}catch(n){}return null},t.isLittleEndian=function(){var e=new Uint8Array(4);return e[0]=1,1===new Uint32Array(e.buffer,0,1)[0]},t.isEvalSupported=function(){try{return new Function(""),!0}catch(e){return!1}},t.log2=function(e){if(e<=0)return 0;return Math.ceil(Math.log2(e))},t.readInt8=function(e,t){return e[t]<<24>>24},t.readUint16=function(e,t){return e[t]<<8|e[t+1]},t.readUint32=function(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0},t.removeNullCharacters=function(e){if("string"!==typeof e)return c("The argument for removeNullCharacters must be a string."),e;return e.replace(k,"")},t.setVerbosityLevel=function(e){Number.isInteger(e)&&(s=e)},t.shadow=function(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!1}),r},t.string32=function(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8&255,255&e)},t.stringToBytes=S,t.stringToPDFString=function(e){var t,r=e.length,n=[];if("\xfe"===e[0]&&"\xff"===e[1])for(t=2;t=o.WARNINGS&&console.log("Warning: "+e)}function l(e){throw new Error(e)}function u(e,t){e||l(t)}var h=function(){function e(e,t){this.name="PasswordException",this.message=e,this.code=t}return e.prototype=new Error,e.constructor=e,e}();t.PasswordException=h;var f=function(){function e(e,t){this.name="UnknownErrorException",this.message=e,this.details=t}return e.prototype=new Error,e.constructor=e,e}();t.UnknownErrorException=f;var d=function(){function e(e){this.name="InvalidPDFException",this.message=e}return e.prototype=new Error,e.constructor=e,e}();t.InvalidPDFException=d;var p=function(){function e(e){this.name="MissingPDFException",this.message=e}return e.prototype=new Error,e.constructor=e,e}();t.MissingPDFException=p;var m=function(){function e(e,t){this.name="UnexpectedResponseException",this.message=e,this.status=t}return e.prototype=new Error,e.constructor=e,e}();t.UnexpectedResponseException=m;var g=function(){function e(e,t){this.begin=e,this.end=t,this.message="Missing data ["+e+", "+t+")"}return e.prototype=new Error,e.prototype.name="MissingDataException",e.constructor=e,e}();t.MissingDataException=g;var v=function(){function e(e){this.message=e}return e.prototype=new Error,e.prototype.name="XRefEntryException",e.constructor=e,e}();t.XRefEntryException=v;var y=function(){function e(e){this.message=e}return e.prototype=new Error,e.prototype.name="XRefParseException",e.constructor=e,e}();t.XRefParseException=y;var b=function(){function e(e){this.message=e}return e.prototype=new Error,e.prototype.name="FormatError",e.constructor=e,e}();t.FormatError=b;var w=function(){function e(e){this.name="AbortException",this.message=e}return e.prototype=new Error,e.constructor=e,e}();t.AbortException=w;var k=/\x00/g;function S(e){u("string"===typeof e,"Invalid argument for stringToBytes");for(var t=e.length,r=new Uint8Array(t),n=0;ne[2]&&(t[0]=e[2],t[2]=e[0]),e[1]>e[3]&&(t[1]=e[3],t[3]=e[1]),t},e.intersect=function(t,r){function n(e,t){return e-t}var a=[t[0],t[2],r[0],r[2]].sort(n),i=[t[1],t[3],r[1],r[3]].sort(n),o=[];return t=e.normalizeRect(t),r=e.normalizeRect(r),(a[0]===t[0]&&a[1]===r[0]||a[0]===r[0]&&a[1]===t[0])&&(o[0]=a[1],o[2]=a[2],(i[0]===t[1]&&i[1]===r[1]||i[0]===r[1]&&i[1]===t[1])&&(o[1]=i[1],o[3]=i[2],o))},e}();t.Util=x;var A=["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM","","X","XX","XXX","XL","L","LX","LXX","LXXX","XC","","I","II","III","IV","V","VI","VII","VIII","IX"];var C=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];var P=function(){var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return function(t,r){if(!(arguments.length>2&&void 0!==arguments[2]&&arguments[2])&&a.URL.createObjectURL){var n=new Blob([t],{type:r});return a.URL.createObjectURL(n)}for(var i="data:"+r+";base64,",o=0,s=t.length;o>2]+e[(3&c)<<4|l>>4]+e[o+1>6:64]+e[o+21?!!arguments[1]:!this.contains(e);return this[t?"add":"remove"](e),t}),String.prototype.startsWith||n(5),String.prototype.endsWith||n(35),String.prototype.includes||n(37),Array.prototype.includes||n(39),Array.from||n(46),Object.assign||n(69),Math.log2||(Math.log2=n(74)),Number.isNaN||(Number.isNaN=n(76)),Number.isInteger||(Number.isInteger=n(78)),i.Promise&&i.Promise.prototype&&i.Promise.prototype.finally||(i.Promise=n(81)),i.WeakMap||(i.WeakMap=n(101)),i.WeakSet||(i.WeakSet=n(118)),String.codePointAt||(String.codePointAt=n(122)),String.fromCodePoint||(String.fromCodePoint=n(124)),i.Symbol||n(126),String.prototype.padStart||n(133),String.prototype.padEnd||n(137),Object.values||(Object.values=n(139))}},function(e,t,r){"use strict";e.exports="undefined"!==typeof window&&window.Math===Math?window:"undefined"!==typeof n&&n.Math===Math?n:"undefined"!==typeof self&&self.Math===Math?self:{}},function(e,t,r){"use strict";function n(e){return(n="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}e.exports=function(){return"object"===("undefined"===typeof a?"undefined":n(a))&&a+""==="[object process]"&&!a.versions.nw}},function(e,t,r){"use strict";r(6),e.exports=r(9).String.startsWith},function(e,t,r){"use strict";var n=r(7),a=r(25),i=r(27),o="".startsWith;n(n.P+n.F*r(34)("startsWith"),"String",{startsWith:function(e){var t=i(this,e,"startsWith"),r=a(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),n=String(e);return o?o.call(t,n,r):t.slice(r,r+n.length)===n}})},function(e,t,r){"use strict";var n=r(8),a=r(9),i=r(10),o=r(20),s=r(23),c=function e(t,r,c){var l,u,h,f,d=t&e.F,p=t&e.G,m=t&e.P,g=t&e.B,v=p?n:t&e.S?n[r]||(n[r]={}):(n[r]||{}).prototype,y=p?a:a[r]||(a[r]={}),b=y.prototype||(y.prototype={});for(l in p&&(c=r),c)h=((u=!d&&v&&void 0!==v[l])?v:c)[l],f=g&&u?s(h,n):m&&"function"==typeof h?s(Function.call,h):h,v&&o(v,l,h,t&e.U),y[l]!=h&&i(y,l,f),m&&b[l]!=h&&(b[l]=h)};n.core=a,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,t,r){"use strict";var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t,r){"use strict";var n=e.exports={version:"2.6.2"};"number"==typeof __e&&(__e=n)},function(e,t,r){"use strict";var n=r(11),a=r(19);e.exports=r(15)?function(e,t,r){return n.f(e,t,a(1,r))}:function(e,t,r){return e[t]=r,e}},function(e,t,r){"use strict";var n=r(12),a=r(14),i=r(18),o=Object.defineProperty;t.f=r(15)?Object.defineProperty:function(e,t,r){if(n(e),t=i(t,!0),n(r),a)try{return o(e,t,r)}catch(s){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(e[t]=r.value),e}},function(e,t,r){"use strict";var n=r(13);e.exports=function(e){if(!n(e))throw TypeError(e+" is not an object!");return e}},function(e,t,r){"use strict";function n(e){return(n="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}e.exports=function(e){return"object"===n(e)?null!==e:"function"===typeof e}},function(e,t,r){"use strict";e.exports=!r(15)&&!r(16)(function(){return 7!=Object.defineProperty(r(17)("div"),"a",{get:function(){return 7}}).a})},function(e,t,r){"use strict";e.exports=!r(16)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t,r){"use strict";e.exports=function(e){try{return!!e()}catch(t){return!0}}},function(e,t,r){"use strict";var n=r(13),a=r(8).document,i=n(a)&&n(a.createElement);e.exports=function(e){return i?a.createElement(e):{}}},function(e,t,r){"use strict";var n=r(13);e.exports=function(e,t){if(!n(e))return e;var r,a;if(t&&"function"==typeof(r=e.toString)&&!n(a=r.call(e)))return a;if("function"==typeof(r=e.valueOf)&&!n(a=r.call(e)))return a;if(!t&&"function"==typeof(r=e.toString)&&!n(a=r.call(e)))return a;throw TypeError("Can't convert object to primitive value")}},function(e,t,r){"use strict";e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,r){"use strict";var n=r(8),a=r(10),i=r(21),o=r(22)("src"),s=Function.toString,c=(""+s).split("toString");r(9).inspectSource=function(e){return s.call(e)},(e.exports=function(e,t,r,s){var l="function"==typeof r;l&&(i(r,"name")||a(r,"name",t)),e[t]!==r&&(l&&(i(r,o)||a(r,o,e[t]?""+e[t]:c.join(String(t)))),e===n?e[t]=r:s?e[t]?e[t]=r:a(e,t,r):(delete e[t],a(e,t,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[o]||s.call(this)})},function(e,t,r){"use strict";var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t,r){"use strict";var n=0,a=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+a).toString(36))}},function(e,t,r){"use strict";var n=r(24);e.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,a){return e.call(t,r,n,a)}}return function(){return e.apply(t,arguments)}}},function(e,t,r){"use strict";e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,r){"use strict";var n=r(26),a=Math.min;e.exports=function(e){return e>0?a(n(e),9007199254740991):0}},function(e,t,r){"use strict";var n=Math.ceil,a=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?a:n)(e)}},function(e,t,r){"use strict";var n=r(28),a=r(33);e.exports=function(e,t,r){if(n(t))throw TypeError("String#"+r+" doesn't accept regex!");return String(a(e))}},function(e,t,r){"use strict";var n=r(13),a=r(29),i=r(30)("match");e.exports=function(e){var t;return n(e)&&(void 0!==(t=e[i])?!!t:"RegExp"==a(e))}},function(e,t,r){"use strict";var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,r){"use strict";var n=r(31)("wks"),a=r(22),i=r(8).Symbol,o="function"==typeof i;(e.exports=function(e){return n[e]||(n[e]=o&&i[e]||(o?i:a)("Symbol."+e))}).store=n},function(e,t,r){"use strict";var n=r(9),a=r(8),i=a["__core-js_shared__"]||(a["__core-js_shared__"]={});(e.exports=function(e,t){return i[e]||(i[e]=void 0!==t?t:{})})("versions",[]).push({version:n.version,mode:r(32)?"pure":"global",copyright:"\xa9 2019 Denis Pushkarev (zloirock.ru)"})},function(e,t,r){"use strict";e.exports=!1},function(e,t,r){"use strict";e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,r){"use strict";var n=r(30)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(r){try{return t[n]=!1,!"/./"[e](t)}catch(a){}}return!0}},function(e,t,r){"use strict";r(36),e.exports=r(9).String.endsWith},function(e,t,r){"use strict";var n=r(7),a=r(25),i=r(27),o="".endsWith;n(n.P+n.F*r(34)("endsWith"),"String",{endsWith:function(e){var t=i(this,e,"endsWith"),r=arguments.length>1?arguments[1]:void 0,n=a(t.length),s=void 0===r?n:Math.min(a(r),n),c=String(e);return o?o.call(t,c,s):t.slice(s-c.length,s)===c}})},function(e,t,r){"use strict";r(38),e.exports=r(9).String.includes},function(e,t,r){"use strict";var n=r(7),a=r(27);n(n.P+n.F*r(34)("includes"),"String",{includes:function(e){return!!~a(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}})},function(e,t,r){"use strict";r(40),e.exports=r(9).Array.includes},function(e,t,r){"use strict";var n=r(7),a=r(41)(!0);n(n.P,"Array",{includes:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0)}}),r(45)("includes")},function(e,t,r){"use strict";var n=r(42),a=r(25),i=r(44);e.exports=function(e){return function(t,r,o){var s,c=n(t),l=a(c.length),u=i(o,l);if(e&&r!=r){for(;l>u;)if((s=c[u++])!=s)return!0}else for(;l>u;u++)if((e||u in c)&&c[u]===r)return e||u||0;return!e&&-1}}},function(e,t,r){"use strict";var n=r(43),a=r(33);e.exports=function(e){return n(a(e))}},function(e,t,r){"use strict";var n=r(29);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==n(e)?e.split(""):Object(e)}},function(e,t,r){"use strict";var n=r(26),a=Math.max,i=Math.min;e.exports=function(e,t){return(e=n(e))<0?a(e+t,0):i(e,t)}},function(e,t,r){"use strict";var n=r(30)("unscopables"),a=Array.prototype;void 0==a[n]&&r(10)(a,n,{}),e.exports=function(e){a[n][e]=!0}},function(e,t,r){"use strict";r(47),r(62),e.exports=r(9).Array.from},function(e,t,r){"use strict";var n=r(48)(!0);r(49)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,r=this._i;return r>=t.length?{value:void 0,done:!0}:(e=n(t,r),this._i+=e.length,{value:e,done:!1})})},function(e,t,r){"use strict";var n=r(26),a=r(33);e.exports=function(e){return function(t,r){var i,o,s=String(a(t)),c=n(r),l=s.length;return c<0||c>=l?e?"":void 0:(i=s.charCodeAt(c))<55296||i>56319||c+1===l||(o=s.charCodeAt(c+1))<56320||o>57343?e?s.charAt(c):i:e?s.slice(c,c+2):o-56320+(i-55296<<10)+65536}}},function(e,t,r){"use strict";var n=r(32),a=r(7),i=r(20),o=r(10),s=r(50),c=r(51),l=r(59),u=r(60),h=r(30)("iterator"),f=!([].keys&&"next"in[].keys()),d=function(){return this};e.exports=function(e,t,r,p,m,g,v){c(r,t,p);var y,b,w,k=function(e){if(!f&&e in A)return A[e];switch(e){case"keys":case"values":return function(){return new r(this,e)}}return function(){return new r(this,e)}},S=t+" Iterator",_="values"==m,x=!1,A=e.prototype,C=A[h]||A["@@iterator"]||m&&A[m],P=C||k(m),E=m?_?k("entries"):P:void 0,T="Array"==t&&A.entries||C;if(T&&(w=u(T.call(new e)))!==Object.prototype&&w.next&&(l(w,S,!0),n||"function"==typeof w[h]||o(w,h,d)),_&&C&&"values"!==C.name&&(x=!0,P=function(){return C.call(this)}),n&&!v||!f&&!x&&A[h]||o(A,h,P),s[t]=P,s[S]=d,m)if(y={values:_?P:k("values"),keys:g?P:k("keys"),entries:E},v)for(b in y)b in A||i(A,b,y[b]);else a(a.P+a.F*(f||x),t,y);return y}},function(e,t,r){"use strict";e.exports={}},function(e,t,r){"use strict";var n=r(52),a=r(19),i=r(59),o={};r(10)(o,r(30)("iterator"),function(){return this}),e.exports=function(e,t,r){e.prototype=n(o,{next:a(1,r)}),i(e,t+" Iterator")}},function(e,t,r){"use strict";var n=r(12),a=r(53),i=r(57),o=r(56)("IE_PROTO"),s=function(){},c=function(){var e,t=r(17)("iframe"),n=i.length;for(t.style.display="none",r(58).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("
\ No newline at end of file + });
\ No newline at end of file diff --git a/precache-manifest.11e68be567bff1a0050ad0d1d8120841.js b/precache-manifest.11e68be567bff1a0050ad0d1d8120841.js deleted file mode 100644 index 94f4391..0000000 --- a/precache-manifest.11e68be567bff1a0050ad0d1d8120841.js +++ /dev/null @@ -1,22 +0,0 @@ -self.__precacheManifest = (self.__precacheManifest || []).concat([ - { - "revision": "42eeb0de34433ce49258e3f73d26d20d", - "url": "/Graph2Data2/index.html" - }, - { - "revision": "775ecd5551fc536db2af", - "url": "/Graph2Data2/static/css/main.ccea918a.chunk.css" - }, - { - "revision": "887a46159be2a054c453", - "url": "/Graph2Data2/static/js/2.98be8ffd.chunk.js" - }, - { - "revision": "775ecd5551fc536db2af", - "url": "/Graph2Data2/static/js/main.e55a9bd4.chunk.js" - }, - { - "revision": "9e8d100df006e118c4f6", - "url": "/Graph2Data2/static/js/runtime~main.178ad90b.js" - } -]); \ No newline at end of file diff --git a/static/css/main.ccea918a.chunk.css b/static/css/main.ccea918a.chunk.css deleted file mode 100644 index c971cb2..0000000 --- a/static/css/main.ccea918a.chunk.css +++ /dev/null @@ -1,2 +0,0 @@ -body{margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}*,:after,:before,graph-2-data{box-sizing:border-box;font-family:fira code retina,Lucida Console,Monaco,monospace;font-size:10pt}:focus{outline:none}.clearfix:after{display:block;clear:both;content:""}.api-driver,.App,.main-ui-container,body,html{width:100%;height:100%}html{overflow:hidden}[title]{cursor:help}.App{text-align:center;width:100%;height:100%}.App-logo{-webkit-animation:App-logo-spin 20s linear infinite;animation:App-logo-spin 20s linear infinite;height:40vmin;pointer-events:none}.App-header{background-color:#282c34;min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:calc(10px + 2vmin);color:#fff}.App-link{color:#61dafb}.api-driver,.main-ui-container{border:1px solid red;padding:0;display:flex}.api-driver fieldset{border:1px solid red;width:auto;display:inline-block;flex:0 0;margin-bottom:.5em}.api-driver fieldset legend{font-size:.8em;color:red}.api-driver .state-display{text-align:left;margin:0 .5em 0 0}.api-driver .state-display,.api-driver .state-editors{border:1px solid red;flex:1 1;padding:1em;overflow:auto}.api-driver .state-editors{display:flex;flex-direction:column;align-items:flex-start;margin:0 0 0 .5em}.api-driver .state-editors .coord{width:40px;margin-right:20px;margin-left:3px}.api-driver .state-editors .name{width:80px;margin-right:20px;margin-left:3px}.api-driver .state-editors button{margin-right:10px}.api-driver fieldset ul{list-style:none;padding-left:0;text-align:left}button,input[type=checkbox],label,option{cursor:pointer}button[disabled]{cursor:not-allowed}.main-ui-container{flex-direction:column;border-width:0}.main-ui-container .middle{width:100%;height:100%}.main-ui-container .middle.column .image-stage{position:relative;width:100%;height:100%;overflow:auto}.main-ui-container .middle.column .image-stage canvas.chrome,.main-ui-container .middle.column .image-stage canvas.image{position:absolute;left:0;top:0;cursor:crosshair}.main-ui-container .right.column{display:flex;flex-direction:column}.main-ui-container .right.column .magnifier-stage{box-sizing:initial;display:flex}.main-ui-container .magnifier-stage{border:1px solid #db7093;position:relative}.main-ui-container .magnifier-stage canvas{position:absolute;left:0;width:100%;height:100%}.main-ui-container .magnifier-stage .image{z-index:1}.main-ui-container .magnifier-stage .image-chrome{z-index:2}.main-ui-container .magnifier-stage .chrome{z-index:3}.main-ui-container .magnifier-wrapper{display:flex;flex-direction:column}.main-ui-container .top{background-color:pink;height:50px;border-bottom:1px solid #db7093}.main-ui-container .middle{flex:1 0;display:flex;border-left:1px solid #db7093}.main-ui-container .bottom{background-color:pink;height:50px;border-top:1px solid #db7093}.main-ui-container .left{background-color:pink;width:50px}.main-ui-container .middle{background-color:pink;flex:1 1}.main-ui-container .middle.bar .right.column{background-color:pink;border-left:1px solid #db7093;display:flex;flex-direction:column}.duxpanel-backdrop{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.3)}.duxpanel{border:1px solid #ddd;background-color:#fff;border-radius:4px;position:fixed;box-shadow:0 0 6pt 3pt rgba(0,0,0,.6)}.duxpanel-heading{background-color:#db7093;color:#fff;border-top-left-radius:3px;border-top-right-radius:3px;padding:10px 15px;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:move}.duxpanel-body{display:flex}.wizard{flex-direction:column}.wizard,.wizard .body{display:flex;width:100%}.wizard .body{flex-direction:column;padding:0;justify-content:stretch;flex:1 1}.wizard .body select{width:100%;height:100%;border:0 solid red;padding:.5em}.wizard .body select.single-line{padding:.25em}.wizard .body select option{margin:.2em}.wizard .body .row{padding:.25em}.wizard .body .row label input{margin-left:.25em}.wizard .body .row input[name=data-points-count],.wizard .body .row input[name=data-series-count]{width:40px}.wizard .footer{border-top:1px solid #b0486b}.wizard .cta-footer,.wizard .footer{padding:.5em;background-color:#db7093;color:#fff}.wizard .cta-footer{display:none;border-top:1px solid #ba5275;font-size:8pt}.duxpanel{border:1px solid #db7093}.duxpanel-footer .dialog-button{margin:0 0 0 .5em!important}.status-display{margin-top:.5em;margin-bottom:1em}.axis-calibration{margin:1em}.status-display .body *{font-size:8pt}.status-display{margin-top:0}.axis-calibration .header,.status-display .header{background-color:#db7093;color:#fff;margin-bottom:.5em}.status-display{flex:0 1!important}.axis-calibration{flex:1 1}.zoom-controls{display:flex;justify-content:space-between;margin:.25em;border:1px solid #db7093;border-radius:5px;padding:.25em;color:#db7093}.zoom-controls>label{margin:0 .5em}.zoom-controls .current-value{margin:0 .25em}.toggle-icon{display:flex;justify-content:space-between}.toggle-icon>label{margin:0 .5em}.toggle-icon.on{color:#b0486b}.toggle-icon.on svg{font-size:2.2rem}.axis-diagram-container{display:flex;border-bottom:2px solid #db7093;padding:.5em!important}.axis-diagram{display:block;border:2px solid #db7093;margin-right:.5em;padding:.5em}.axis-diagram:last-child{margin-right:0}.axis-diagram>label{margin-top:.3em;display:block}.axis-calibration-value,.axis-log-setting{display:none}.combined-origin{fill:#db7093!important;font-size:2em!important}.axis-calibration-value:focus,.axis-log-setting>input:focus,button:focus,select:focus{outline-width:0}.axis-log-setting:focus-within{outline:1px dotted red}.axis-calibration .cta{color:#fff;background-color:#db7093;border:1px solid #db7093;border-radius:20px;padding:0 .7em}.axis-calibration .cta:before{content:">";font-size:20pt;vertical-align:-.15em;margin-right:.15em;font-weight:700;color:#fff}.matrix-display{border:1px solid #db7093;padding:0;display:flex;flex-direction:column}.matrix-display>.matrix-row{padding:0;margin:0;display:flex}.matrix-display>.matrix-row>.matrix-element{border:1px solid #db7093;padding:.25em;margin:0;flex:1 0}.data-points-table-container{max-height:250px;overflow-y:auto}.data-points-table{border-collapse:collapse;width:100%}.data-points-table tbody,.data-points-table td,.data-points-table th,.data-points-table thead,.data-points-table tr{font-size:inherit}.data-points-table td,.data-points-table th{border:1px solid #db7093}.data-points-table td.selected{background-color:#ff98bb}.data-points-table td.blank-cell,.data-points-table td.data-cell{cursor:pointer}.data-points-table td.auto-add{background-color:#ff98bb}.top.bar{display:flex;flex-direction:row-reverse}.settings{border:1px solid --primaryBackgroundHilightDark3;background-color:pink;color:#db7093;display:flex;align-self:center;align-items:center}.data-points-meta-table-container .button-bar,.series-selector-panel .button-bar{display:flex;align-content:stretch}.data-points-meta-table-container .button-bar button,.series-selector-panel .button-bar button{flex:1 1}.data-points-meta-table-container .button-bar button svg,.series-selector-panel .button-bar button svg{font-size:1.4rem}.data-points-table svg{font-size:1.3rem}.data-points-table svg.disabled{color:#ccc}::-webkit-input-placeholder{color:#bbb}::-moz-placeholder{color:#bbb}:-ms-input-placeholder{color:#bbb}:-moz-placeholder{color:#bbb}.base{vertical-align:sub;font-size:.7em}.graph-chooser-api-driver{margin:1em 1em 0;padding:.5em;border:1px solid red;display:flex;flex-direction:column}.selection-container{width:100%;height:100%;position:absolute;cursor:crosshair}.selection-rectangle{border:var(--borderSize) dotted grey;z-index:10}.selection-rectangle.hovered{border-color:#000;cursor:move}.selection-handle{position:absolute;display:block;border-radius:0;border-radius:50%;-webkit-transform:scale(.1);transform:scale(.1);opacity:0;width:var(--handleSize);height:var(--handleSize);left:calc(50% - var(--handleSize)/2);top:calc(50% - var(--handleSize)/2)}.selection-rectangle.hovered .selection-handle{background-color:#000}.selection-rectangle.dragging .selection-handle,.selection-rectangle.transparent .selection-handle{cursor:inherit}.selection-rectangle.dragging .selection-handle,.selection-rectangle.focused .selection-handle,.selection-rectangle.hovered .selection-handle,.selection-rectangle:focus .selection-handle,.selection-rectangle:hover .selection-handle{-webkit-transform:scale(1);transform:scale(1);opacity:1}.selection-rectangle.read-only{cursor:default}.selection-rectangle.read-only .selection-handle{display:none}.selection-rectangle .delete{cursor:pointer;font-size:2em;margin:.25em;display:none;float:right}.selection-rectangle.hovered .delete{display:inline-block;fill:#a9a9a9}.selection-rectangle.hovered .delete:hover{fill:#000}.selection-rectangle.creating .delete,.selection-rectangle.editing .delete{display:none}.selection-handle.top-left{left:calc((var(--borderSize) + var(--handleSize))/-2);top:calc((var(--borderSize) + var(--handleSize))/-2);cursor:nwse-resize;z-index:1}.selection-handle.top-center{top:calc((var(--borderSize) + var(--handleSize))/-2);cursor:ns-resize}.selection-handle.top-right{top:calc((var(--borderSize) + var(--handleSize))/-2);cursor:nesw-resize;z-index:1}.selection-handle.right-center,.selection-handle.top-right{left:calc(100% + (var(--borderSize) - var(--handleSize))/2)}.selection-handle.right-center{cursor:ew-resize}.selection-handle.bottom-right{top:calc(100% + (var(--borderSize) - var(--handleSize))/2);left:calc(100% + (var(--borderSize) - var(--handleSize))/2);cursor:nwse-resize;z-index:1}.selection-handle.bottom-center{top:calc(100% + (var(--borderSize) - var(--handleSize))/2);cursor:ns-resize}.selection-handle.bottom-left{top:calc(100% + (var(--borderSize) - var(--handleSize))/2);left:calc((var(--borderSize) + var(--handleSize))/-2);cursor:nesw-resize;z-index:1}.selection-handle.left-center{left:calc((var(--borderSize) + var(--handleSize))/-2);cursor:ew-resize}.graph-chooser-main-ui{display:flex;flex-direction:column;height:100%}.pdf-page-wrapper{border-top:1px dashed grey;position:relative}.graph-selection-rect{border:3px dotted #d3d3d3;z-index:1000}.graph-selection-rect.selected{border:3px dotted #ff98bb;background-color:rgba(255,218,224,.4)}.graph-selection-handle{background-color:#d3d3d3}.graph-selection-rect.selected .graph-selection-handle{background-color:#ff98bb}.page-bounds-rect{border:3px solid gold;z-index:1}.pdf-page-wrapper:first-child{border-top-width:0}.pdf-page-number{border:1px solid #000;display:inline-block;min-width:28px;text-align:center;margin:.5em;position:absolute;top:0;z-index:1000}.drag-group{display:none;cursor:default}.drag-group.selected,.graph-selection-rect.hovered .drag-group{display:inline-block;border:2px solid #d3d3d3;background-color:#d3d3d3;border-radius:4px;padding:0 0 0 .5em;margin:.5em}.graph-selection-rect.creating .drag-group,.graph-selection-rect.editing .drag-group{display:none}.drag-group .inner-group{display:flex;margin-left:-.25em;padding:.25em .25em .25em 0}.drag-group .inner-group .drag-handle{margin-right:.25em;cursor:move}.drag-group.selected,.graph-selection-rect.hovered .drag-group.selected{border:2px solid #b0486b;background-color:#ff98bb}.graph-selection-rect.selected .delete{fill:#ff98bb}.graph-selection-rect.selected .delete:hover{fill:#b0486b}.header-bar{border-bottom:1px dotted #000;padding:.25em;display:flex;flex-direction:row;justify-content:flex-end}.doc-wrapper{flex:1 1;overflow:auto}.GraphChooser{height:100%}.load-progress{margin-right:1em}.load-progress .page-loaded-status{padding:.15em .4em;display:inline-block;border:1px solid #000;border-left-width:0;font-weight:400;text-decoration:none}.load-progress .page-loaded-status:first-child{border-left-width:1px}.load-progress .loaded{background-color:grey;color:#fff}.clickable{cursor:pointer}.lock-selected-graphs{margin:0 .25em}.graph-displayer-api-driver{margin:1em 1em 0;padding:.5em;border:1px solid red;cursor:pointer}.graph-coords{font-size:.8em;border-top:1px dotted red;margin-top:1em;display:block;margin-left:-.5em;margin-right:-.5em;padding:.5em .5em 0;text-align:center}.graph-displayer-main-ui{margin:1em 1em 0;padding:.5em;border:1px solid red;cursor:pointer} -/*# sourceMappingURL=main.ccea918a.chunk.css.map */ \ No newline at end of file diff --git a/static/css/main.ccea918a.chunk.css.map b/static/css/main.ccea918a.chunk.css.map deleted file mode 100644 index 5cf80be..0000000 --- a/static/css/main.ccea918a.chunk.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["index.css","C:\\Users\\easyt\\Documents\\_dev\\React\\graph2data\\graph2data/src\\App.scss","C:\\Users\\easyt\\Documents\\_dev\\React\\graph2data\\graph2data/src\\vars.scss","C:\\Users\\easyt\\Documents\\_dev\\React\\graph2data\\graph2data/src\\Components\\GraphChooser\\ApiDriver\\style.scss","C:\\Users\\easyt\\Documents\\_dev\\React\\graph2data\\graph2data/src\\Components\\SelectionRectangles\\style.scss","C:\\Users\\easyt\\Documents\\_dev\\React\\graph2data\\graph2data/src\\Components\\GraphChooser\\MainUi\\style.scss","C:\\Users\\easyt\\Documents\\_dev\\React\\graph2data\\graph2data/src\\Components\\GraphDisplayer\\ApiDriver\\style.scss","C:\\Users\\easyt\\Documents\\_dev\\React\\graph2data\\graph2data/src\\Components\\GraphDisplayer\\MainUi\\style.scss"],"names":[],"mappings":"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","file":"main.ccea918a.chunk.css","sourcesContent":["body {\n margin: 0;\n padding: 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","@import './vars.scss';\r\n\r\n*, *:before, *:after, graph-2-data {\r\n box-sizing: border-box;\r\n font-family: 'fira code retina', 'Lucida Console', Monaco, monospace;\r\n font-size: 10pt;\r\n}\r\n\r\n*:focus {\r\n outline: none;\r\n}\r\n\r\n.clearfix::after {\r\n display: block;\r\n clear: both;\r\n content: \"\";\r\n}\r\n\r\nhtml, body, .App, .api-driver, .main-ui-container {\r\n width: 100%;\r\n height: 100%;\r\n}\r\nhtml {\r\n overflow: hidden;\r\n}\r\n\r\n*[title] {\r\n cursor: help;\r\n}\r\n\r\n.App {\r\n text-align: center;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.App-logo {\r\n animation: App-logo-spin infinite 20s linear;\r\n height: 40vmin;\r\n pointer-events: none;\r\n}\r\n\r\n.App-header {\r\n background-color: #282c34;\r\n min-height: 100vh;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: calc(10px + 2vmin);\r\n color: white;\r\n}\r\n\r\n.App-link {\r\n color: #61dafb;\r\n}\r\n\r\n.api-driver, .main-ui-container {\r\n border: 1px solid red;\r\n padding: 0;\r\n display: flex;\r\n}\r\n\r\n.api-driver fieldset {\r\n border: 1px solid red;\r\n width: auto;\r\n display: inline-block;\r\n flex: 0 0;\r\n margin-bottom: 0.5em;\r\n}\r\n\r\n.api-driver fieldset legend {\r\n font-size: 0.8em;\r\n color: red;\r\n}\r\n\r\n.api-driver .state-display {\r\n border: 1px solid red;\r\n flex: 1 1;\r\n text-align: left;\r\n padding: 1em;\r\n overflow: auto;\r\n margin: 0 0.5em 0 0;\r\n}\r\n\r\n.api-driver .state-editors {\r\n flex: 1 1;\r\n display: flex;\r\n flex-direction: column;\r\n align-items: flex-start;\r\n overflow: auto;\r\n margin: 0 0 0 0.5em;\r\n border: 1px solid red;\r\n padding: 1em;\r\n}\r\n\r\n.api-driver .state-editors .coord {\r\n width: 40px;\r\n margin-right: 20px;\r\n margin-left: 3px;\r\n}\r\n\r\n.api-driver .state-editors .name {\r\n width: 80px;\r\n margin-right: 20px;\r\n margin-left: 3px;\r\n}\r\n\r\n.api-driver .state-editors button {\r\n margin-right: 10px;\r\n}\r\n\r\n.api-driver fieldset ul {\r\n list-style: none;\r\n padding-left: 0;\r\n text-align: left;\r\n}\r\n\r\nlabel, button, option, input[type=checkbox] {\r\n cursor: pointer;\r\n}\r\n\r\nbutton[disabled] {\r\n cursor: not-allowed;\r\n}\r\n\r\n.main-ui-container {\r\n flex-direction: column;\r\n border-width: 0;\r\n}\r\n\r\n.main-ui-container .middle {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.main-ui-container .middle.column .image-stage {\r\n position: relative;\r\n width: 100%;\r\n height: 100%;\r\n overflow: auto;\r\n}\r\n\r\n.main-ui-container .middle.column .image-stage canvas.image, .main-ui-container .middle.column .image-stage canvas.chrome {\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n cursor: crosshair;\r\n}\r\n\r\n.main-ui-container .right.column {\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.main-ui-container .right.column .magnifier-stage {\r\n box-sizing: content-box;\r\n display: flex;\r\n}\r\n\r\n.main-ui-container .magnifier-stage {\r\n border: 1px solid $primaryBackgroundHilight;\r\n position: relative;\r\n}\r\n\r\n.main-ui-container .magnifier-stage canvas {\r\n position: absolute;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.main-ui-container .magnifier-stage .image {\r\n z-index: 1;\r\n}\r\n\r\n.main-ui-container .magnifier-stage .image-chrome {\r\n z-index: 2;\r\n}\r\n\r\n.main-ui-container .magnifier-stage .chrome {\r\n z-index: 3;\r\n}\r\n\r\n.main-ui-container .magnifier-wrapper {\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.main-ui-container .top {\r\n background-color: $primaryBackground;\r\n height: 50px;\r\n border-bottom: 1px solid $primaryBackgroundHilight;\r\n}\r\n\r\n.main-ui-container .middle {\r\n background-color: $primaryBackground;\r\n flex: 1 0;\r\n display: flex;\r\n border-left: 1px solid $primaryBackgroundHilight;\r\n}\r\n\r\n.main-ui-container .bottom {\r\n background-color: $primaryBackground;\r\n height: 50px;\r\n border-top: 1px solid $primaryBackgroundHilight;\r\n}\r\n\r\n.main-ui-container .left {\r\n background-color: $primaryBackground;\r\n width: 50px;\r\n}\r\n\r\n.main-ui-container .middle {\r\n background-color: $primaryBackground;\r\n flex: 1 1;\r\n}\r\n\r\n.main-ui-container .middle.bar .right.column {\r\n background-color: $primaryBackground;\r\n border-left: 1px solid $primaryBackgroundHilight;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.duxpanel-backdrop {\r\n position: fixed;\r\n top: 0;\r\n bottom: 0;\r\n left: 0;\r\n right: 0;\r\n background-color: rgba(0, 0, 0, .3);\r\n}\r\n\r\n.duxpanel {\r\n border: 1px solid #ddd;\r\n background-color: #fff;\r\n border-radius: 4px;\r\n position: fixed;\r\n box-shadow: rgba(0, 0, 0, 0.6) 0px 0px 6pt 3pt;\r\n}\r\n\r\n.duxpanel-heading {\r\n background-color: $primaryBackgroundHilight;\r\n color: white;\r\n border-top-left-radius: 3px;\r\n border-top-right-radius: 3px;\r\n padding: 10px 15px;\r\n cursor: default;\r\n -webkit-user-select: none;\r\n -moz-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n cursor: move;\r\n}\r\n\r\n.duxpanel-body {\r\n display: flex;\r\n}\r\n\r\n.wizard {\r\n display: flex;\r\n flex-direction: column;\r\n width: 100%;\r\n}\r\n\r\n.wizard .body {\r\n display: flex;\r\n flex-direction: column;\r\n padding: 0;\r\n justify-content: stretch;\r\n flex: 1;\r\n width: 100%;\r\n}\r\n\r\n.wizard .body select {\r\n width: 100%;\r\n height: 100%;\r\n border: 0px solid red;\r\n padding: 0.5em;\r\n}\r\n\r\n.wizard .body select.single-line {\r\n padding: 0.25em;\r\n}\r\n\r\n.wizard .body select option {\r\n margin: 0.2em;\r\n}\r\n\r\n.wizard .body .row {\r\n padding: 0.25em;\r\n}\r\n\r\n.wizard .body .row label input {\r\n margin-left: 0.25em;\r\n}\r\n\r\n.wizard .body .row input[name='data-series-count'], .wizard .body .row input[name='data-points-count'] {\r\n width: 40px\r\n}\r\n\r\n.wizard .footer {\r\n border-top: 1px solid $primaryBackgroundHilightDark3;\r\n padding: 0.5em;\r\n background-color: $primaryBackgroundHilight;\r\n color: white;\r\n}\r\n\r\n.wizard .cta-footer {\r\n display: none;\r\n border-top: 1px solid $primaryBackgroundHilightDark2;\r\n padding: 0.5em;\r\n background-color: $primaryBackgroundHilight;\r\n color: white;\r\n font-size: 8pt;\r\n}\r\n\r\n.duxpanel {\r\n border: 1px solid $primaryBackgroundHilight;\r\n}\r\n\r\n.duxpanel-footer .dialog-button {\r\n margin: 0 0 0 0.5em !important;\r\n}\r\n\r\n.status-display {\r\n margin-top: 0.5em;\r\n margin-bottom: 1em;\r\n}\r\n\r\n.axis-calibration {\r\n margin: 1em;\r\n}\r\n\r\n.status-display .body * {\r\n font-size: 8pt;\r\n}\r\n\r\n.status-display {\r\n margin-top: 0;\r\n}\r\n\r\n.status-display .header, .axis-calibration .header {\r\n background-color: $primaryBackgroundHilight;\r\n color: white;\r\n margin-bottom: 0.5em;\r\n}\r\n\r\n.status-display {\r\n flex: 0 !important;\r\n}\r\n\r\n.axis-calibration {\r\n flex: 1;\r\n}\r\n\r\n.zoom-controls {\r\n display: flex;\r\n justify-content: space-between;\r\n margin: 0.25em;\r\n border: 1px solid $primaryBackgroundHilight;\r\n border-radius: 5px;\r\n padding: 0.25em;\r\n color: $primaryBackgroundHilight;\r\n}\r\n\r\n\r\n.zoom-controls>label {\r\n margin: 0 0.5em;\r\n}\r\n\r\n.zoom-controls .current-value {\r\n margin: 0 0.25em;\r\n}\r\n\r\n.toggle-icon {\r\n display: flex;\r\n justify-content: space-between;\r\n}\r\n\r\n.toggle-icon>label {\r\n margin: 0 0.5em\r\n}\r\n\r\n.toggle-icon.on {\r\n color: $primaryBackgroundHilightDark3;\r\n}\r\n\r\n.toggle-icon.on svg {\r\n font-size: 2.2rem;\r\n}\r\n\r\n.axis-diagram-container {\r\n display: flex;\r\n border-bottom: 2px solid $primaryBackgroundHilight;\r\n padding: 0.5em !important;\r\n}\r\n\r\n.axis-diagram {\r\n display: block;\r\n border: 2px solid $primaryBackgroundHilight;\r\n margin-right: 0.5em;\r\n padding: 0.5em;\r\n}\r\n\r\n.axis-diagram:last-child {\r\n margin-right: 0;\r\n}\r\n\r\n.axis-diagram>label {\r\n margin-top: 0.3em;\r\n display: block;\r\n}\r\n\r\n.axis-calibration-value {\r\n display: none;\r\n}\r\n.axis-log-setting {\r\n display: none;\r\n}\r\n.combined-origin {\r\n fill: palevioletred !important;\r\n font-size: 2em !important;\r\n}\r\n.combined-origin.on {\r\n\r\n}\r\n.combined-origin.off {\r\n\r\n}\r\n/* *:focus {\r\n outline: 2px solid red;\r\n} */\r\nselect:focus, button:focus {\r\n outline-width: 0;\r\n}\r\n.axis-calibration-value:focus {\r\n outline-width: 0;\r\n}\r\n.axis-log-setting > input:focus {\r\n outline-width: 0;\r\n}\r\n.axis-log-setting:focus-within {\r\n outline: 1px dotted red;\r\n}\r\n\r\n.axis-calibration .cta {\r\n color: white;\r\n background-color: palevioletred;\r\n border: 1px solid palevioletred;\r\n border-radius: 20px;\r\n padding: 0 0.7em;\r\n}\r\n\r\n.axis-calibration .cta:before {\r\n content: '>';\r\n font-size: 20pt;\r\n vertical-align: -0.15em;\r\n margin-right: 0.15em;\r\n font-weight: bold;\r\n color: white;\r\n}\r\n\r\n.matrix-display {\r\n border: 1px solid $primaryBackgroundHilight;\r\n padding: 0;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.matrix-display>.matrix-row {\r\n padding: 0;\r\n margin: 0;\r\n display: flex;\r\n}\r\n\r\n.matrix-display>.matrix-row>.matrix-element {\r\n border: 1px solid $primaryBackgroundHilight;\r\n padding: 0.25em;\r\n margin: 0;\r\n flex: 1 0;\r\n}\r\n\r\n.data-points-table-container {\r\n max-height: 250px;\r\n overflow-y: auto;\r\n}\r\n\r\n.data-points-table {\r\n border-collapse: collapse;\r\n width: 100%;\r\n}\r\n\r\n.data-points-table thead, .data-points-table tr, .data-points-table tbody, .data-points-table th, .data-points-table td {\r\n font-size: inherit;\r\n}\r\n.data-points-table td, .data-points-table th {\r\n border: 1px solid $primaryBackgroundHilight;\r\n}\r\n\r\n.data-points-table td.selected {\r\n background-color: $primaryBackgroundHilightLight3;\r\n}\r\n\r\n.data-points-table td.data-cell, .data-points-table td.blank-cell {\r\n cursor: pointer;\r\n}\r\n\r\n.data-points-table td.auto-add {\r\n background-color: $primaryBackgroundHilightLight3;\r\n}\r\n\r\n.top.bar {\r\n display: flex;\r\n flex-direction: row-reverse;\r\n}\r\n\r\n.settings {\r\n border: 1px solid var (--primaryBackgroundHilightDark3);\r\n background-color: $primaryBackground;\r\n color: $primaryBackgroundHilight;\r\n display: flex;\r\n align-self: center;\r\n align-items: center;\r\n}\r\n\r\n.series-selector-panel .button-bar,\r\n.data-points-meta-table-container .button-bar {\r\n display: flex;\r\n align-content: stretch;\r\n}\r\n\r\n.series-selector-panel .button-bar button,\r\n.data-points-meta-table-container .button-bar button {\r\n flex: 1;\r\n}\r\n\r\n.series-selector-panel .button-bar button svg,\r\n.data-points-meta-table-container .button-bar button svg {\r\n font-size: 1.4rem;\r\n}\r\n\r\n.data-points-table svg {\r\n font-size: 1.3rem;\r\n}\r\n\r\n.data-points-table svg.disabled {\r\n color: #ccc;\r\n}\r\n\r\n::-webkit-input-placeholder {\r\n color: $placeholderTextColor;\r\n}\r\n\r\n::-moz-placeholder {\r\n color: $placeholderTextColor;\r\n}\r\n\r\n:-ms-input-placeholder {\r\n color: $placeholderTextColor;\r\n}\r\n\r\n:-moz-placeholder {\r\n color: $placeholderTextColor;\r\n}\r\n\r\n.base {\r\n vertical-align: sub;\r\n font-size: 0.7em;\r\n}","\r\n $primaryBackground: pink;\r\n $primaryBackgroundHilight: palevioletred;\r\n $primaryBackgroundHilightDark: #c45c7f;\r\n $primaryBackgroundHilightDark2: #ba5275;\r\n $primaryBackgroundHilightDark3: #b0486b;\r\n $primaryBackgroundHilightLight: #ec84a7;\r\n $primaryBackgroundHilightLight2: #f68eb1;\r\n $primaryBackgroundHilightLight3: #ff98bb;\r\n $primaryBackgroundHilightLight4: lighten($primaryBackgroundHilightLight3, 10%);\r\n $transulcentBackground: rgba(lighten(pink, 5%), 0.4);\r\n $lightPink: lighten(pink, 5%);\r\n $placeholderTextColor: #bbb;\r\n",".graph-chooser-api-driver {\r\n margin: 1em 1em 0 1em;\r\n padding: 0.5em;\r\n border: 1px solid red;\r\n display: flex;\r\n flex-direction: column;\r\n}","$unhoveredColor: gray;\r\n$hoveredColor: black;\r\n$handleBorderRadius: 50%;\r\n\r\n.selection-container {\r\n width: 100%;\r\n height: 100%;\r\n position: absolute;\r\n cursor: crosshair;\r\n}\r\n.selection-rectangle {\r\n border: #{var(--borderSize)} dotted $unhoveredColor;\r\n z-index: 10;\r\n}\r\n.selection-rectangle.hovered {\r\n border-color: $hoveredColor;\r\n cursor: move;\r\n}\r\n\r\n// .selection-rectangle.transparent {\r\n// opacity: 0.5;\r\n// pointer-events: none;\r\n// }\r\n\r\n.selection-handle {\r\n position: absolute;\r\n display: block;\r\n border-radius: 0;\r\n border-radius: $handleBorderRadius;\r\n // border: 1px solid black;\r\n // background-color: black;\r\n transform: scale(0.1);\r\n opacity: 0;\r\n width: var(--handleSize);\r\n height: var(--handleSize);\r\n left: calc(50% - var(--handleSize) / 2);\r\n top: calc(50% - var(--handleSize) / 2);\r\n}\r\n.selection-rectangle.hovered .selection-handle {\r\n // border-color: magenta;\r\n background-color: $hoveredColor;\r\n}\r\n\r\n.selection-rectangle.transparent .selection-handle,\r\n.selection-rectangle.dragging .selection-handle {\r\n cursor: inherit;\r\n}\r\n\r\n.selection-rectangle:focus .selection-handle,\r\n.selection-rectangle:hover .selection-handle,\r\n.selection-rectangle.dragging .selection-handle,\r\n.selection-rectangle.focused .selection-handle,\r\n.selection-rectangle.hovered .selection-handle {\r\n transform: scale(1);\r\n opacity: 1;\r\n}\r\n\r\n.selection-rectangle.read-only {\r\n cursor: default;\r\n}\r\n\r\n.selection-rectangle.read-only .selection-handle {\r\n display: none;\r\n}\r\n\r\n.selection-rectangle .delete {\r\n cursor: pointer;\r\n font-size: 2em;\r\n margin: 0.25em;\r\n display: none;\r\n float: right;\r\n}\r\n\r\n.selection-rectangle.hovered .delete {\r\n display: inline-block;\r\n fill: darkgray;\r\n}\r\n\r\n.selection-rectangle.hovered .delete:hover {\r\n fill: black;\r\n}\r\n\r\n.selection-rectangle.creating .delete,\r\n.selection-rectangle.editing .delete {\r\n display: none;\r\n}\r\n\r\n.selection-handle.top-left {\r\n left: calc(0% - (#{var(--borderSize)} + var(--handleSize)) / 2);\r\n top: calc(0% - (#{var(--borderSize)} + var(--handleSize)) / 2);\r\n cursor: nwse-resize;\r\n z-index: 1;\r\n}\r\n\r\n.selection-handle.top-center {\r\n top: calc(0% - (#{var(--borderSize)} + var(--handleSize)) / 2);\r\n cursor: ns-resize;\r\n}\r\n\r\n.selection-handle.top-right {\r\n top: calc(0% - (#{var(--borderSize)} + var(--handleSize)) / 2);\r\n left: calc(100% + (#{var(--borderSize)} - var(--handleSize)) / 2);\r\n cursor: nesw-resize;\r\n z-index: 1;\r\n}\r\n\r\n.selection-handle.right-center {\r\n left: calc(100% + (#{var(--borderSize)} - var(--handleSize)) / 2);\r\n cursor: ew-resize;\r\n}\r\n\r\n.selection-handle.bottom-right {\r\n top: calc(100% + (#{var(--borderSize)} - var(--handleSize)) / 2);\r\n left: calc(100% + (#{var(--borderSize)} - var(--handleSize)) / 2);\r\n cursor: nwse-resize;\r\n z-index: 1;\r\n}\r\n\r\n.selection-handle.bottom-center {\r\n top: calc(100% + (#{var(--borderSize)} - var(--handleSize)) / 2);\r\n cursor: ns-resize;\r\n}\r\n\r\n.selection-handle.bottom-left {\r\n top: calc(100% + (#{var(--borderSize)} - var(--handleSize)) / 2);\r\n left: calc(0% - (#{var(--borderSize)} + var(--handleSize)) / 2);\r\n cursor: nesw-resize;\r\n z-index: 1;\r\n}\r\n\r\n.selection-handle.left-center {\r\n left: calc(0% - (#{var(--borderSize)} + var(--handleSize)) / 2);\r\n cursor: ew-resize;\r\n}\r\n","@import \"../../../vars.scss\";\r\n\r\n.graph-chooser-main-ui {\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n}\r\n\r\n.pdf-page-wrapper {\r\n border-top: 1px dashed gray;\r\n position: relative;\r\n}\r\n.graph-selection-rect {\r\n border: 3px dotted lightgray;\r\n z-index: 1000;\r\n}\r\n.graph-selection-rect.selected {\r\n border: 3px dotted red;\r\n border-color: $primaryBackgroundHilightLight3;\r\n background-color: $transulcentBackground;\r\n}\r\n.graph-selection-handle {\r\n background-color: lightgray;\r\n}\r\n.graph-selection-rect.selected .graph-selection-handle {\r\n background-color: $primaryBackgroundHilightLight3;\r\n}\r\n.page-bounds-rect {\r\n border: 3px solid gold;\r\n z-index: 1;\r\n}\r\n.pdf-page-wrapper:nth-child(1) {\r\n border-top-width: 0;\r\n}\r\n.pdf-page-number {\r\n border: 1px solid black;\r\n display: inline-block;\r\n min-width: 28px;\r\n text-align: center;\r\n margin: 0.5em;\r\n position: absolute;\r\n top: 0;\r\n z-index: 1000;\r\n}\r\n.drag-group {\r\n display: none;\r\n cursor: default;\r\n}\r\n.graph-selection-rect.hovered .drag-group,\r\n.drag-group.selected {\r\n display: inline-block;\r\n border: 2px solid lightgray;\r\n background-color: lightgray;\r\n border-radius: 4px;\r\n padding: 0 0 0 0.5em;\r\n margin: 0.5em;\r\n}\r\n.graph-selection-rect.creating .drag-group,\r\n.graph-selection-rect.editing .drag-group {\r\n display: none;\r\n}\r\n.drag-group .inner-group {\r\n display: flex;\r\n margin-left: -0.25em;\r\n padding: 0.25em 0.25em 0.25em 0;\r\n}\r\n.drag-group .inner-group .drag-handle {\r\n margin-right: 0.25em;\r\n cursor: move;\r\n}\r\n.drag-group.selected,\r\n.graph-selection-rect.hovered .drag-group.selected {\r\n border: 2px solid $primaryBackgroundHilightDark3;\r\n background-color: $primaryBackgroundHilightLight3;\r\n}\r\n.graph-selection-rect.selected .delete {\r\n fill: $primaryBackgroundHilightLight3;\r\n}\r\n.graph-selection-rect.selected .delete:hover {\r\n fill: $primaryBackgroundHilightDark3;\r\n}\r\n\r\n.header-bar {\r\n border-bottom: 1px dotted black;\r\n padding: 0.25em;\r\n\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: flex-end;\r\n}\r\n\r\n.doc-wrapper {\r\n flex: 1;\r\n overflow: auto;\r\n}\r\n.GraphChooser {\r\n height: 100%;\r\n}\r\n\r\n.load-progress {\r\n margin-right: 1em;\r\n\r\n .page-loaded-status {\r\n padding: 0.15em 0.4em;\r\n display: inline-block;\r\n border: 1px solid black;\r\n border-width: 1px 1px 1px 0;\r\n font-weight: normal;\r\n text-decoration: none;\r\n }\r\n .page-loaded-status:first-child {\r\n border-left-width: 1px;\r\n }\r\n .loaded {\r\n background-color: gray;\r\n color: white;\r\n }\r\n}\r\n\r\n.clickable {\r\n cursor: pointer;\r\n}\r\n\r\n.lock-selected-graphs {\r\n margin: 0 0.25em;\r\n}\r\n",".graph-displayer-api-driver {\r\n margin: 1em 1em 0 1em;\r\n padding: 0.5em;\r\n border: 1px solid red;\r\n cursor: pointer;\r\n}\r\n\r\n.graph-coords {\r\n font-size: 0.8em;\r\n border-top: 1px dotted red;\r\n margin-top: 1em;\r\n padding-top: 0.25em;\r\n display: block;\r\n margin-left: -0.5em;\r\n margin-right: -0.5em;\r\n padding: 0.5em 0.5em 0 0.5em;\r\n text-align: center;\r\n}",".graph-displayer-main-ui {\r\n margin: 1em 1em 0 1em;\r\n padding: 0.5em;\r\n border: 1px solid red;\r\n cursor: pointer;\r\n}"]} \ No newline at end of file diff --git a/static/js/main.e55a9bd4.chunk.js b/static/js/main.e55a9bd4.chunk.js deleted file mode 100644 index 40856fe..0000000 --- a/static/js/main.e55a9bd4.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{107:function(e,t){},109:function(e,t){},110:function(e,t){},111:function(e,t){},112:function(e,t){},155:function(e,t,i){},156:function(e,t){},158:function(e,t){},159:function(e,t){},160:function(e,t){},161:function(e,t){},171:function(e,t,i){},172:function(e,t,i){},173:function(e,t,i){},174:function(e,t,i){},176:function(e,t,i){"use strict";i.r(t);var n,a=i(55),s=i(3),o=i(7),r=i(5),c=i(2),l=i(4),d=i(6),u=i(35),h=i(0),g=i.n(h),A=i(34),p=i.n(A),f=(i(98),i(39)),I=i(74),C=i.n(I),m=(i(99),i(8)),E=i(10),v=i(1),S=i(18),b=i.n(S),y=function(e){return g.a.createElement("ul",null,e.series.map(function(t){return g.a.createElement("li",{key:t.id},g.a.createElement("label",null,g.a.createElement("input",{type:"radio",onChange:e.onSelectionChanged,checked:t.id===e.selectedId,value:t.id}),t.label))}))},k=function(e){return g.a.createElement("ul",null,e.points.map(function(t,i){return g.a.createElement("li",{key:i},g.a.createElement("label",null,g.a.createElement("input",{type:"radio",onChange:e.onSelectionChanged,checked:i===e.selectedIndex,value:i}),"(".concat(t.x,", ").concat(t.y,")")))}))},O=function(e){function t(e){var i;return Object(s.a)(this,t),(i=Object(o.a)(this,Object(r.a)(t).call(this,e))).newPointXChange=i.newPointXChange.bind(Object(c.a)(i)),i.newPointYChange=i.newPointYChange.bind(Object(c.a)(i)),i.addPoint=i.addPoint.bind(Object(c.a)(i)),i.deletePoint=i.deletePoint.bind(Object(c.a)(i)),i.addSeries=i.addSeries.bind(Object(c.a)(i)),i.deleteSeries=i.deleteSeries.bind(Object(c.a)(i)),i.changeSeriesLabel=i.changeSeriesLabel.bind(Object(c.a)(i)),i.extractionComplete=i.extractionComplete.bind(Object(c.a)(i)),i.selectCurrentSeries=i.selectCurrentSeries.bind(Object(c.a)(i)),i.selectCurrentPoint=i.selectCurrentPoint.bind(Object(c.a)(i)),i.newSeriesLabelChange=i.newSeriesLabelChange.bind(Object(c.a)(i)),i.currentSeriesLabelChange=i.currentSeriesLabelChange.bind(Object(c.a)(i)),i.state={series:[],metaData:{currentSeriesId:"",newPoint:{x:"",y:""},addPointOk:!1,newSeriesLabel:"",newSeriesLabelOk:!1,updatedSeriesLabel:"",updatedSeriesLabelOk:!1,currentPointIndex:-1,deleteCurrentPointOk:!1}},i}return Object(d.a)(t,e),Object(l.a)(t,[{key:"mayUpdateSeriesLabel",value:function(e,t){var i=!!this.state.series.find(function(e){return e.label===t});return!!e&&!!t&&!i}},{key:"selectCurrentSeries",value:function(e){var t=e.target.value,i=this.state.series.find(function(e){return e.id===t});this.setState(Object(v.a)({},this.state,{metaData:Object(v.a)({},this.state.metaData,{currentSeriesId:t,addPointOk:this.mayAddPoint(t,this.state.metaData.newPoint),updatedSeriesLabel:i.label,updatedSeriesLabelOk:this.mayUpdateSeriesLabel(t,i.label)})}))}},{key:"selectCurrentPoint",value:function(e){var t=e.target.value;this.setState(Object(v.a)({},this.state,{metaData:Object(v.a)({},this.state.metaData,{currentPointIndex:+t,deleteCurrentPointOk:!!t})}))}},{key:"isValidPoint",value:function(e){return!isNaN(e.x)&&!isNaN(e.y)}},{key:"mayAddPoint",value:function(e,t){return this.isValidPoint(t)&&!!e}},{key:"_doNewPointChange",value:function(e,t){var i=this.state.metaData.newPoint,n=Object(v.a)({},i,Object(E.a)({},t?"x":"y",e.target.value));this.setState(Object(v.a)({},this.state,{metaData:Object(v.a)({},this.state.metaData,{newPoint:n,addPointOk:this.mayAddPoint(this.state.metaData.currentSeriesId,n)})}))}},{key:"newPointXChange",value:function(e){this._doNewPointChange(e,!0)}},{key:"newPointYChange",value:function(e){this._doNewPointChange(e,!1)}},{key:"getCurrentSeries",value:function(){var e=this.state,t=e.series,i=e.metaData;return t.find(function(e){return e.id===i.currentSeriesId})}},{key:"addPoint",value:function(e){var t=this,i=this.state,n=i.series,a=i.metaData,s=this.getCurrentSeries(),o=Object(v.a)({},a.newPoint),r=[].concat(Object(m.a)(s.points),[o]),c=n.map(function(e){return e.label!==s.label?e:Object(v.a)({},e,{points:r})});this.setState(Object(v.a)({},this.state,{series:c,metaData:Object(v.a)({},this.state.metaData,{newPoint:{x:"",y:""}})}),function(){t.props.raisePointAdded({message:"Point added to series",newPoint:o,updatedSeries:c.filter(function(e){return e.id===a.currentSeriesId})})})}},{key:"deletePoint",value:function(){var e=this,t=this.state.metaData,i=t.currentSeriesId,n=t.currentPointIndex,a=this.getCurrentSeries(),s=Object(v.a)({},a),o=a.points[n];this.setState(Object(v.a)({},this.state,{series:this.state.series.map(function(e){return e.id!==i?e:Object(v.a)({},e,{points:e.points.filter(function(e,t){return t!==n})})}),metaData:Object(v.a)({},this.state.metaData,{deleteCurrentPointOk:n0;this.setState(Object(v.a)({},this.state,{metaData:Object(v.a)({},this.state.metaData,{newSeriesLabel:t,newSeriesLabelOk:n&&!i})}))}},{key:"currentSeriesLabelChange",value:function(e){var t=e.target.value.trim();this.setState(Object(v.a)({},this.state,{metaData:Object(v.a)({},this.state.metaData,{updatedSeriesLabel:t,updatedSeriesLabelOk:this.mayUpdateSeriesLabel(this.state.metaData.currentSeriesId,t)})}))}},{key:"addSeries",value:function(){var e=this,t={id:b()(),label:this.state.metaData.newSeriesLabel,points:[]};this.setState(Object(v.a)({},this.state,{series:[].concat(Object(m.a)(this.state.series),[t]),metaData:Object(v.a)({},this.state.metaData,{newSeriesLabel:"",newSeriesLabelOk:!1})}),function(){e.props.raiseSeriesAdded({message:"Series added.",newSeries:t})})}},{key:"deleteSeries",value:function(){var e=this,t=this.getCurrentSeries();this.setState(Object(v.a)({},this.state,{series:this.state.series.filter(function(e){return e!==t}),metaData:Object(v.a)({},this.state.metaData,{currentSeriesId:""})}),function(){e.props.raiseSeriesDeleted({message:"Series deleted.",seriesDeleted:t,allSeries:e.state.series})})}},{key:"changeSeriesLabel",value:function(){var e=this,t=this.state.metaData,i=t.currentSeriesId,n=t.updatedSeriesLabel,a=this.getCurrentSeries(),s=Object(v.a)({},a),o=Object(v.a)({},a,{label:n});this.setState(Object(v.a)({},this.state,{series:this.state.series.map(function(e){return e.id!==i?e:o}),metaData:Object(v.a)({},this.state.metaData,{updatedSeriesLabelOk:!1})}),function(){e.props.raiseSeriesLabelChanged({message:"Series labelChanged.",seriesBefore:s,seriesAfter:o})})}},{key:"extractionComplete",value:function(){this.props.raiseExtractionComplete({message:"Extraction complete.",series:this.state.series})}},{key:"componentDidMount",value:function(){document.title="ApiDriver"}},{key:"render",value:function(){var e=JSON.stringify(this.state,null,2),t=this.state.metaData,i=this.getCurrentSeries();return g.a.createElement("div",{className:"api-driver"},g.a.createElement("pre",{className:"state-display"},e),g.a.createElement("div",{className:"state-editors"},g.a.createElement("fieldset",{className:"select-series"},g.a.createElement("legend",null,"Selected series"),g.a.createElement(y,{series:this.state.series,onSelectionChanged:this.selectCurrentSeries,selectedId:t.currentSeriesId})),g.a.createElement("fieldset",{className:"add-point"},g.a.createElement("legend",null,"Add point to selected series"),g.a.createElement("label",null,"x:",g.a.createElement("input",{type:"text",className:"coord",value:t.newPoint.x,onChange:this.newPointXChange})),g.a.createElement("label",null,"y:",g.a.createElement("input",{type:"text",className:"coord",value:t.newPoint.y,onChange:this.newPointYChange})),g.a.createElement("button",{onClick:this.addPoint,disabled:!t.addPointOk},"Add point"),g.a.createElement("br",null)),g.a.createElement("fieldset",{className:"delete-point"},g.a.createElement("legend",null,"Delete point from selected series"),g.a.createElement(k,{points:i?i.points:[],selectedIndex:t.currentPointIndex,onSelectionChanged:this.selectCurrentPoint}),g.a.createElement("button",{onClick:this.deletePoint,disabled:!t.deleteCurrentPointOk},"Delete point"),g.a.createElement("br",null)),g.a.createElement("fieldset",{className:"add-series"},g.a.createElement("legend",null,"Add series"),g.a.createElement("label",null,"Label:",g.a.createElement("input",{type:"text",className:"name",value:t.newSeriesLabel,onChange:this.newSeriesLabelChange})),g.a.createElement("button",{onClick:this.addSeries,disabled:!t.newSeriesLabelOk},"Add series"),g.a.createElement("br",null)),g.a.createElement("fieldset",{className:"delete-series"},g.a.createElement("legend",null,"Delete series"),g.a.createElement("button",{disabled:!t.currentSeriesId,onClick:this.deleteSeries},"Delete series"),g.a.createElement("br",null)),g.a.createElement("fieldset",{className:"change-series"},g.a.createElement("legend",null,"Change selected series label"),g.a.createElement("label",null,"Label:",g.a.createElement("input",{type:"text",className:"name",value:t.updatedSeriesLabel,onChange:this.currentSeriesLabelChange})),g.a.createElement("button",{onClick:this.changeSeriesLabel,disabled:!t.updatedSeriesLabelOk},"Change series label"),g.a.createElement("br",null)),g.a.createElement("fieldset",{className:"extraction-complete"},g.a.createElement("legend",null,"Extraction complete"),g.a.createElement("button",{onClick:this.extractionComplete},"Extraction complete"),g.a.createElement("br",null))))}}]),t}(g.a.Component),P=i(9),x=i.n(P),B=i(13),Q={AXIS_CALIBRATION:"axis_calibration",AXIS_CALIBRATION_SAMPLE:"axis_calibration_sample",DATA_POINT:"data_point",DATA_POINT_TOP_BAR:"data_point_top_bar",DATA_POINT_BOTTOM_BAR:"data_point_bottom_bar",DATA_POINT_LEFT_BAR:"data_point_left_bar",DATA_POINT_RIGHT_BAR:"data_point_right_bar",DATA_POINT_CROSS_HAIR:"data_point_cross_hair"},w=[{id:"mean-only",text:"Mean only",abbrev:"Mean",dataPoints:[{name:"Mean",abbrev:"Mean",css:"mean",isReferencePoint:!0,pointType:Q.DATA_POINT}],allowAreaCalculation:!0},{id:"mean-and-standard-error",text:"Mean and Standard Error (SEM)",abbrev:"MeanSE",dataPoints:[{name:"Mean",abbrev:"Mean",css:"mean",isReferencePoint:!0,pointType:Q.DATA_POINT},{name:"Standard Error (upper or lower)",abbrev:"SEM",symmetric:"true",css:"variance",pointType:{upper:Q.DATA_POINT_TOP_BAR,lower:Q.DATA_POINT_BOTTOM_BAR}}]},{id:"mean-and-standard-deviation",text:"Mean and Standard Deviation (SD)",abbrev:"MeanSD",dataPoints:[{name:"Mean",abbrev:"Mean",css:"mean",isReferencePoint:!0,pointType:Q.DATA_POINT},{name:"Standard Deviation (upper or lower)",abbrev:"SD",symmetric:"true",css:"variance",pointType:{upper:Q.DATA_POINT_TOP_BAR,lower:Q.DATA_POINT_BOTTOM_BAR}}]},{id:"mean-and-confidence-interval-95",text:"Mean and 95% CI",abbrev:"Mean95CI",dataPoints:[{name:"Mean",abbrev:"Mean",css:"mean",isReferencePoint:!0,pointType:Q.DATA_POINT},{name:"95% Confidence range (upper)",abbrev:"CIu95",css:"variance",pointType:Q.DATA_POINT_TOP_BAR},{name:"95% Confidence range (lower)",abbrev:"CIl95",css:"variance",pointType:Q.DATA_POINT_BOTTOM_BAR}]},{id:"mean-and-confidence-interval-99",text:"Mean and 99% CI",abbrev:"MeanCI99",dataPoints:[{name:"Mean",abbrev:"Mean",css:"mean",isReferencePoint:!0,pointType:Q.DATA_POINT},{name:"99% Confidence range (upper)",abbrev:"CIu99",css:"variance",pointType:Q.DATA_POINT_TOP_BAR},{name:"99% Confidence range (lower)",abbrev:"CIl99",css:"variance",pointType:Q.DATA_POINT_BOTTOM_BAR}]},{id:"median-and-confidence-interval-95",text:"Median and 95% CI",abbrev:"Median95CI",dataPoints:[{name:"Median",abbrev:"Median",css:"mean",isReferencePoint:!0,pointType:Q.DATA_POINT},{name:"95% Confidence range (upper)",abbrev:"CIu95",css:"variance",pointType:Q.DATA_POINT_TOP_BAR},{name:"95% Confidence range (lower)",abbrev:"CIl95",css:"variance",pointType:Q.DATA_POINT_BOTTOM_BAR}]},{id:"median-and-confidence-interval-99",text:"Median and 99% CI",abbrev:"Median99CI",dataPoints:[{name:"Median",abbrev:"Median",css:"mean",isReferencePoint:!0,pointType:Q.DATA_POINT},{name:"99% Confidence range (upper)",abbrev:"CIu99",css:"variance",pointType:Q.DATA_POINT_TOP_BAR},{name:"99% Confidence range (lower)",abbrev:"CIl99",css:"variance",pointType:Q.DATA_POINT_BOTTOM_BAR}]},{id:"median-and-interquartile-range",text:"Median and Interquartile Range",abbrev:"MeadianIQR",dataPoints:[{name:"Median",abbrev:"Median",css:"mean",isReferencePoint:!0,pointType:Q.DATA_POINT},{name:"Lower Quartile",abbrev:"Q1",css:"variance",pointType:Q.DATA_POINT_BOTTOM_BAR},{name:"Upper Quartile",abbrev:"Q3",css:"variance",pointType:Q.DATA_POINT_TOP_BAR}]},{id:"box-and-whisker",text:"Box and whisker plot",abbrev:"B&W",dataPoints:[{name:"Median",abbrev:"Median",css:"mean",isReferencePoint:!0,pointType:Q.DATA_POINT},{name:"Lower Quartile",abbrev:"Q1",css:"variance",pointType:Q.DATA_POINT_BOTTOM_BAR},{name:"Upper Quartile",abbrev:"Q3",css:"variance",pointType:Q.DATA_POINT_TOP_BAR},{name:"Lower",abbrev:"Lower",css:"variance",pointType:Q.DATA_POINT_BOTTOM_BAR},{name:"Upper",abbrev:"Upper",css:"variance",pointType:Q.DATA_POINT_TOP_BAR}]}],j={HORIZONTAL:"horizontal",VERTICAL:"vertical",BOTH:"both"},T={AXIS_CALIBRATION_POINT:"axis_calibration_point",AXIS_CALIBRATION_VALUES:"axis_calibration_values",ENTER_DATA_POINTS:"enter_data_points",MAY_EXTRACT_AXES:"may_extract_axes",MAY_BUILD_MATRIX:"may_define_matrix"},R=(i(75),i(12)),D=(i(76),i(40)),J=(i(62),n={},Object(E.a)(n,Q.AXIS_CALIBRATION,[{radius:1,fillStyle:"red",accent:!0,gco:"difference"},{radius:3,strokeStyle:"black",accent:!0,whenSelected:!1,gco:"difference"},{radius:3,strokeStyle:"black",whenSelected:!0,gco:"difference"},{radius:5,strokeStyle:"red",whenSelected:!0,accent:!0,lineWidth:2,gco:"difference"}]),Object(E.a)(n,Q.AXIS_CALIBRATION_SAMPLE,[{radius:1,fillStyle:"red",accent:!0},{radius:3,strokeStyle:"black",accent:!0,whenSelected:!1},{radius:3,strokeStyle:"black",whenSelected:!0},{radius:6,strokeStyle:"red",whenSelected:!0,accent:!0,lineWidth:2}]),Object(E.a)(n,Q.DATA_POINT,[{radius:2,fillStyle:"cyan",gco:"difference"},{radius:5,strokeStyle:"cyan",gco:"difference",whenSelected:!0,lineWidth:1},{radius:12,strokeStyle:"cyan",whenSelected:!0,gco:"difference"}]),Object(E.a)(n,Q.DATA_POINT_BOTTOM_BAR,[{lineWidth:1,strokeStyle:"cyan",gco:"difference",lines:[{moveTo:{x:0,y:-5}},{lineTo:{x:0,y:0}},{moveTo:{x:-5,y:0}},{lineTo:{x:5,y:0}}]},{radius:12,strokeStyle:"cyan",whenSelected:!0,gco:"difference"}]),Object(E.a)(n,Q.DATA_POINT_TOP_BAR,[{lineWidth:1,strokeStyle:"cyan",gco:"difference",lines:[{moveTo:{x:0,y:5}},{lineTo:{x:0,y:0}},{moveTo:{x:-5,y:0}},{lineTo:{x:5,y:0}}]},{radius:12,strokeStyle:"cyan",whenSelected:!0,gco:"difference"}]),Object(E.a)(n,Q.DATA_POINT_LEFT_BAR,[{lineWidth:1,strokeStyle:"cyan",gco:"difference",lines:[{moveTo:{x:5,y:0}},{lineTo:{x:0,y:0}},{moveTo:{x:0,y:5}},{lineTo:{x:0,y:-5}}]},{radius:12,strokeStyle:"cyan",whenSelected:!0,gco:"difference"}]),Object(E.a)(n,Q.DATA_POINT_RIGHT_BAR,[{lineWidth:1,strokeStyle:"cyan",gco:"difference",lines:[{moveTo:{x:-5,y:0}},{lineTo:{x:0,y:0}},{moveTo:{x:0,y:5}},{lineTo:{x:0,y:-5}}]},{radius:12,strokeStyle:"cyan",whenSelected:!0,gco:"difference"}]),Object(E.a)(n,Q.DATA_POINT_CROSS_HAIR,[{lineWidth:1,strokeStyle:"cyan",gco:"difference",lines:[{moveTo:{x:-5,y:0}},{lineTo:{x:5,y:0}},{moveTo:{x:0,y:-5}},{lineTo:{x:0,y:5}}]},{radius:12,strokeStyle:"cyan",whenSelected:!0,gco:"difference"}]),n);function N(e){return U.apply(this,arguments)}function U(){return(U=Object(B.a)(x.a.mark(function e(t){return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise(function(e,i){var n=document.createElement("img");n.crossOrigin="Anonymous",n.onload=function(){e(n)},n.onerror=i,n.src=t}));case 1:case"end":return e.stop()}},e)}))).apply(this,arguments)}function H(e){return M.apply(this,arguments)}function M(){return(M=Object(B.a)(x.a.mark(function e(t){return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,N(t).then(function(){var e=Object(B.a)(x.a.mark(function e(t){var i,n,a,s,o;return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return i=t.naturalWidth,n=t.naturalHeight,(a=document.createElement("canvas")).width=i,a.height=n,(s=a.getContext("2d")).drawImage(t,0,0,i,n),o=s.canvas.toDataURL(),e.abrupt("return",o);case 8:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}());case 2:return e.abrupt("return",e.sent);case 3:case"end":return e.stop()}},e)}))).apply(this,arguments)}function L(e,t,i,n,a){var s=e.getContext("2d").getImageData(t,i,n,a),o=document.createElement("canvas");o.width=n,o.height=a;var r=o.getContext("2d");return r.putImageData(s,0,0),r.canvas.toDataURL()}function K(e){var t=e.ctx,i=e.point,n=e.upper,a=e.selected,s=e.dpr,o=e.accentColor,r=e.pointZoom,c=i.type;"object"===typeof c&&void 0!==n&&(c=n?c.upper:c.lower);var l=J[c],d=1*(r=r||1),u=i.x*s,h=i.y*s;t.lineWidth=d,l.forEach(function(e){(e.whenSelected===a||void 0==e.whenSelected)&&(t.beginPath(),e.gco&&(t.globalCompositeOperation=e.gco),e.lineWidth&&(t.lineWidth=e.lineWidth*r),e.fillStyle&&(t.fillStyle=e.accent?o:e.fillStyle),e.strokeStyle&&(t.strokeStyle=e.accent?o:e.strokeStyle),t.setLineDash(e.lineDash?e.lineDash:[]),t.lineDashOffset=e.lineDashOffset?e.lineDashOffset:0,void 0!==e.radius&&t.arc(u,h,e.radius*s*r/2,0,2*Math.PI,0),e.lines&&e.lines.forEach(function(e){e.moveTo&&t.moveTo(r*e.moveTo.x+u,r*e.moveTo.y+h),e.lineTo&&t.lineTo(r*e.lineTo.x+u,r*e.lineTo.y+h)}),e.fillStyle&&t.fill(),e.strokeStyle&&t.stroke(),t.globalCompositeOperation="source-over")})}function z(e,t){return void 0!=e?e.toFixed(t):e}function Y(e,t){return Object(D.a)(e,t)}function F(e,t){var i=e.getAttribute(t);return void 0!==i?+i:i}function G(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return Object.entries(e).filter(function(e){var i=Object(R.a)(e,2),n=i[0];i[1];return!t.includes(n)}).reduce(function(e,t){var i=Object(R.a)(t,2),n=i[0],a=i[1];return Object(v.a)({},e,Object(E.a)({},n,a))},{})}function V(e){return["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"].includes(e.code)}function X(e){return 0===Object.entries(e).length&&e.constructor===Object}function Z(e){return"".concat(e).concat(0!==e?"px":"")}function W(e){var t=e.component,i=e.localStorage,n=e.settingsKey;i&&i.setItem(n,JSON.stringify(t.state.settings))}function q(e){var t,i=e.component,n=e.localStorage,a=e.settingsKey,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},o=n.getItem(a);try{t=JSON.parse(o)}catch(c){}var r=i.state.settings;t&&t.settingsVersion===r.settingsVersion&&i.setState({settings:t},s)}function _(e){e&&Object(m.a)(e).forEach(ee)}var $="http://www.w3.org/2000/svg";function ee(e){var t=e.getAttribute("title");if(t){var i=e.getElementsByTagNameNS($,"title");if(!i||0===i.length){var n=document.createElementNS($,"title");n.appendChild(document.createTextNode(t)),e.appendChild(n)}}}function te(e,t,i,n,a){var s=function(e){return function(e,t,i){return Math.max(Math.min(e,i||Number.MAX_SAFE_INTEGER),t||Number.MIN_SAFE_INTEGER)}(e,n,a)};return s(t?e?i>>1:i<<1:e?i-1:i+1)}function ie(e,t,i){return t?e?i/=2:i*=2:e?i-1:i+1}function ne(e,t,i){var n=i.filter(function(e){return t>=e.from&&t<=e.to}),a=(2==n.length?e?n[0]:n[1]:n[0]).increment;return e?t-a:t+a}var ae=function(e){return[{type:T.AXIS_CALIBRATION_POINT,axis:j.HORIZONTAL,pointIndex:0,desc:e?"Choose origin":"Choose first horizontal axis point",cloneSource:e,point:{x:"xmin",y:"ymin"}},{type:T.AXIS_CALIBRATION_POINT,axis:j.HORIZONTAL,pointIndex:1,desc:"Choose second horizontal axis point",point:{x:"xmax",y:"ymin"}},{type:T.AXIS_CALIBRATION_POINT,axis:j.VERTICAL,pointIndex:0,desc:e?"Origin already chosen":"Choose first vertical axis point",cloneDest:e,point:{x:"xmin",y:"ymin"}},{type:T.AXIS_CALIBRATION_POINT,axis:j.VERTICAL,pointIndex:1,desc:"Choose second vertical axis point",point:{x:"xmin",y:"ymax"}},{type:T.AXIS_CALIBRATION_VALUES,may:[T.MAY_EXTRACT_AXES,T.MAY_BUILD_MATRIX],desc:"Enter axis values"},{type:T.ENTER_DATA_POINTS,may:[T.MAY_EXTRACT_AXES,T.MAY_BUILD_MATRIX],desc:"Enter data points"}].map(function(e){return t=e,i={may:[],axis:null},Object.keys(i).reduce(function(e,t){return e.hasOwnProperty(t)?e:Object(v.a)({},e,Object(E.a)({},t,i[t]))},t);var t,i})},se=i(63),oe=i.n(se),re=function(e){function t(){var e;return Object(s.a)(this,t),(e=Object(o.a)(this,Object(r.a)(t).call(this))).state={naturalWidth:-1,naturalHeight:-1,imageWidth:"auto",imageHeight:"auto",widthBound:null,dpr:window.devicePixelRatio},e.imageStage=g.a.createRef(),e.imageCanvas=g.a.createRef(),e.chromeCanvas=e.imageCanvas,e._handleMouseMove=e._handleMouseMove.bind(Object(c.a)(e)),e._handleClick=e._handleClick.bind(Object(c.a)(e)),e.imageLoadCompletedShim=e.imageLoadCompletedShim.bind(Object(c.a)(e)),e.imageLoadCompleted=e.imageLoadCompleted.bind(Object(c.a)(e)),e.imageLoadErrored=e.imageLoadErrored.bind(Object(c.a)(e)),e._setScale=e._setScale.bind(Object(c.a)(e)),e.renderCounter=1,e}return Object(d.a)(t,e),Object(l.a)(t,[{key:"imageLoadCompletedShim",value:function(){this.imageLoadCompleted()}},{key:"imageLoadCompleted",value:function(){var e=this,t=this.imageStage.current;if(this.image){var i=this.image,n=i.naturalWidth,a=i.naturalHeight,s=t.offsetWidth/ng?a.points[g].id:null,p=2==g?0:-1;a.points.forEach(function(i,a){if(a!==g){var s=i.id===c||A&&A===c&&a===p;K({ctx:e,point:i,selected:s,dpr:t,accentColor:d[a-(u===j.VERTICAL?-2:0)],pointZoom:n})}})}if(o){var f=l.dataPoints[0];o.points.forEach(function(i,a){var s=i[f.abbrev];Object.keys(i).forEach(function(a){if("id"!==a){var o=i[a],c=o.dataPoint.origDp?o.dataPoint.origDp.y>s.dataPoint.y:void 0;K({ctx:e,point:o,upper:c,selected:o.id===r,dpr:t,pointZoom:n})}})})}}},{key:"render",value:function(){var e=this.state,t=e.naturalWidth,i=e.naturalHeight,n=e.dpr;return g.a.createElement("div",{className:"image-stage",ref:this.imageStage},g.a.createElement("canvas",{width:t*n,height:i*n,className:"image",ref:this.imageCanvas,style:{width:this.state.imageWidth,height:this.state.imageHeight}}))}}]),t}(g.a.Component),ce=function(e){function t(e){var i;return Object(s.a)(this,t),(i=Object(o.a)(this,Object(r.a)(t).call(this,e))).squaredChanged=i.squaredChanged.bind(Object(c.a)(i)),i}return Object(d.a)(t,e),Object(l.a)(t,[{key:"squaredChanged",value:function(e){this.props.squaredChanged(e.target.checked)}},{key:"render",value:function(){var e=this.props,t=e.zoomInfo,i=e.label,n=e.showMultiplier,a=void 0===n||n,s=e.showSquared,o=void 0===s||s,r=t.value,c=t.squared,l="".concat(r).concat(a?"x":"");return g.a.createElement("div",{className:"zoom-controls"},g.a.createElement("span",null,g.a.createElement("button",{onClick:this.props.zoomOut},"-"),g.a.createElement("span",{className:"current-value",title:i},l),g.a.createElement("button",{onClick:this.props.zoomIn},"+")),o&&g.a.createElement("label",null,g.a.createElement("input",{type:"checkbox",name:"squared",checked:!!c,onChange:this.squaredChanged}),"2\u207f"))}}]),t}(g.a.Component),le=function(e){function t(e){var i;return Object(s.a)(this,t),(i=Object(o.a)(this,Object(r.a)(t).call(this,e)))._magnifierSize={width:i.props.width,height:i.props.height},i._mid={x:i._magnifierSize.width/2,y:i._magnifierSize.height/2},i.imageCanvas=g.a.createRef(),i.renderCounter=1,i.state={},i.mouseMove=i.mouseMove.bind(Object(c.a)(i)),i._grabContexts=i._grabContexts.bind(Object(c.a)(i)),i._drawCross=i._drawCross.bind(Object(c.a)(i)),i}return Object(d.a)(t,e),Object(l.a)(t,[{key:"_grabContexts",value:function(){this.imageContext=this.imageCanvas.current.getContext("2d"),this.imageChromeContext=this.imageContext,this.chromeContext=this.imageContext}},{key:"_drawCross",value:function(){var e=this.chromeContext;e.strokeStyle="rgba(0, 255, 255)",e.globalCompositeOperation="difference",e.lineWidth=2,e.beginPath(),e.moveTo(this._mid.x,0),e.lineTo(this._mid.x,this._magnifierSize.height),e.moveTo(0,this._mid.y),e.lineTo(this._magnifierSize.width,this._mid.y),e.stroke(),e.globalCompositeOperation="source-over"}},{key:"componentDidMount",value:function(){this._grabContexts(),this._drawCross(),this.props.subscribe("mousePointerMoved",this.mouseMove)}},{key:"magnify",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(e){this._pointerFocus=e;var i=e.scaledOffsetX,n=e.scaledOffsetY,a=e.context,s=e.chromeContext,o=e.dpr;if(this.imageContext&&this.imageChromeContext){var r=this._magnifierSize.width,c=this._magnifierSize.height,l=this.props.zoomInfo.value,d={x:(r>>1)/l,y:(c>>1)/l},u=i-d.x,h=n-d.y,g=2*d.x,A=2*d.y;this.imageContext.clearRect(0,0,r,c),this.imageContext.drawImage(a.canvas,u,h,g,A,0,0,r,c),this.imageChromeContext.drawImage(s.canvas,u*o,h*o,g*o,A*o,0,0,r,c),t&&this._drawCross()}}}},{key:"mouseMove",value:function(e){var t=e.detail.pointerFocus;this.magnify(t)}},{key:"componentWillUnmount",value:function(){this.props.unsubscribe("mousePointerMoved",this.mouseMove)}},{key:"componentDidUpdate",value:function(e,t,i){var n=this.props.refreshToggler;e.refreshToggler.toggle!==n.toggle&&this.magnify(n.point?Object(v.a)({},this._pointerFocus,{scaledOffsetX:n.point.x,scaledOffsetY:n.point.y}):this._pointerFocus,!0)}},{key:"shouldComponentUpdate",value:function(e,t){return e.zoomInfo!==this.props.zoomInfo||e.refreshToggler!==this.props.refreshToggler}},{key:"render",value:function(){var e=Object(v.a)({},this.props.stageBorderStyle,{width:this._magnifierSize.width,height:this._magnifierSize.height});return g.a.createElement("div",{className:"magnifier-wrapper"},g.a.createElement(ce,{zoomInfo:this.props.zoomInfo,zoomOut:this.props.zoomOut,zoomIn:this.props.zoomIn,squaredChanged:this.props.squaredChanged,label:"swatch magnification"}),g.a.createElement("div",{className:"magnifier-stage",style:e},g.a.createElement("canvas",{width:this._magnifierSize.width,height:this._magnifierSize.height,className:"image",ref:this.imageCanvas})))}}]),t}(g.a.Component),de=i(77),ue=function(e){function t(e){var i;return Object(s.a)(this,t),(i=Object(o.a)(this,Object(r.a)(t).call(this,e))).state={},i._step=null,i}return Object(d.a)(t,e),Object(l.a)(t,[{key:"componentDidMount",value:function(){this.props.onTitleChange(this._step?this._step.props.title:"no title yet!");var e=this._step&&this._step.props.modal;this.props.setModal(e)}},{key:"componentDidUpdate",value:function(e,t,i){if(e.curStep!==this.props.curStep&&this.props.onTitleChange(this._step?this._step.props.title:"no title yet!"),e.curStep!==this.props.curStep){var n=this._step&&this._step.props.modal;this.props.setModal(n)}}},{key:"_getStep",value:function(){var e=this.props.curStep;return g.a.Children.map(this.props.children,function(t,i){if(i===e)return t})[0]}},{key:"render",value:function(){var e=this.props.curStep,t=g.a.Children.count(this.props.children)-1;this._step=this._getStep();var i=!this._step||!this._step.props.prevOkIf||this._step.props.prevOkIf(),n=!this._step||!this._step.props.nextOkIf||this._step.props.nextOkIf(),a=this._step.props.cta||"",s=e<=0||!i,o=e>=t||!n,r=!n;return g.a.createElement("div",{className:"wizard"},g.a.createElement("div",{className:"body"},this._step),g.a.createElement("div",{className:"cta-footer"},a),g.a.createElement("div",{className:"footer"},g.a.createElement("button",{disabled:s,onClick:this.props.prevClicked},"|< Prev"),g.a.createElement("button",{style:e>=t?{display:"none"}:{},disabled:o,onClick:this.props.nextClicked},"Next >|"),g.a.createElement("button",{style:e=g;i+=e)t.beginPath(),t.moveTo(d+.5,i),t.lineTo(d-a,i),t.stroke()},f=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];t.beginPath(),t.setLineDash(e?[1,1]:[]),t.lineWidth=1,t.moveTo(d,u),t.lineTo(h,u),t.stroke()},I=function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];t.beginPath(),t.setLineDash(e?[1,1]:[]),t.lineWidth=1,t.moveTo(d,u),t.lineTo(d,g),t.stroke()};switch(t.clearRect(0,0,t.canvas.width,t.canvas.height),t.fillStyle="white",t.fillRect(0,0,t.canvas.width,t.canvas.height),this.props.axisType){case j.HORIZONTAL:f(),A(),I(!0),function(){t.setLineDash([]);for(var e=(g-u)/c,i=.6*e,n=u+e/2;n>=g;n+=e)t.beginPath(),t.strokeStyle="green",t.lineWidth=Math.abs(i),t.moveTo(d+.5,n),t.lineTo(d+Math.random()*(h-d),n),t.stroke()}();break;case j.VERTICAL:f(!0),p(),I(),function(){t.setLineDash([]);for(var e=(h-d)/l,i=.6*e,n=d+e/2;n<=h;n+=e)t.beginPath(),t.strokeStyle="magenta",t.lineWidth=i,t.moveTo(n,u-.5),t.lineTo(n,u-Math.random()*(u-g)),t.stroke()}();break;case j.BOTH:f(),I(),A(),p(),function(){t.beginPath(),t.strokeStyle="blue",t.lineWidth=1;var e=u-g,i=(h-d)/15;t.moveTo(d,u);for(var n=d+i;n<=h;n+=i){var a=u-Math.random()*e;t.lineTo(n,a)}t.stroke()}()}!function(n){var a=i.props,s=a.fullCalibrationPlan,o=a.planStep;if(s){var r={xmin:d,xmax:h,ymin:u,ymax:g},c=function(e,t){return e.axis===t.axis&&e.pointIndex===t.pointIndex},l=n||s.findIndex(function(e){return c(e,o)});!function(e,t,i){var n=e.length,a=n-1;!function(e,t,i){for(var n=t.length-1,a=0;a<=n;a++){var s=t[a];i(e[s],s,a)}}(e,Object(m.a)(Array(n)).map(function(e,i){return i1?n===j.HORIZONTAL?"none":"block":n===j.VERTICAL?"none":"block"},c=function(e){return n===j.BOTH?"block":e>0?n===j.HORIZONTAL?"none":"block":n===j.VERTICAL?"none":"block"},l=(this.props.fullCalibrationPlan||[]).filter(function(e){return e.type===T.AXIS_CALIBRATION_POINT}).map(function(t){return{x:a._layout[t.point.x+"Dom"]+e.canvas.current.offsetLeft,y:a._layout[t.point.y+"Dom"]+e.canvas.current.offsetTop}}),d=l.reduce(function(e,t,i){if(i%2===0)e.push(Object(v.a)({},t));else{var n=e[Math.floor(i/2)];n.x=(n.x+t.x)/2,n.y=(n.y+t.y)/2}return e},[]);l.map(function(e,t){return{display:i?r(t):"none",border:"2px solid palevioletred",position:"absolute",width:"50px",left:Z(e.x),top:Z(e.y)}}).map(function(e,t){return Object(v.a)({},e,s[t])}).forEach(function(t,i){return Object.assign(e.editRefs[i].current.style,t)});var u=l.length>=2?{x:l[0].x-50,y:l[2].y}:{};this.linkRefs.map(function(e,t){return{display:"block",position:"absolute",left:Z(u.x),top:Z(u.y)}}).forEach(function(t,i){return e.linkRefs[i].current&&Object.assign(e.linkRefs[i].current.style,t)}),d.map(function(e,t){return{display:i&&c(t),position:"absolute",left:"".concat(e.x,"px"),top:"".concat(e.y,"px")}}).map(function(e,t){return Object(v.a)({},e,o[t])}).forEach(function(t,i){return Object.assign(e.cbRefs[i].current.style,t)})}},{key:"onFocus",value:function(e){this.props.zoomToAxisPoint(e.target.getAttribute("data-index"))}},{key:"focusEdit",value:function(){var e=this.editRefs.find(function(e){return e&&e.current&&"block"===e.current.style.display});e&&e.current&&e.current.focus()}},{key:"mirrorSvgTitles",value:function(){_(this._ourRef.current.getElementsByTagNameNS($,"svg"))}},{key:"componentDidMount",value:function(){var e=this,t=this.state.dpr,i=this.canvas.current.getContext("2d");this.setState({ctx:i},function(){i.scale(2*t,2*t),e.draw()}),this.positionEdit(),this.focusEdit(),this.mirrorSvgTitles()}},{key:"componentDidUpdate",value:function(e,t,i){e.axisType!==this.props.axisType&&this.draw(),this.positionEdit(),e.planStep!==this.props.planStep&&(this.draw(),this.focusEdit()),e.combinedOrigin!==this.props.combinedOrigin&&this.mirrorSvgTitles()}},{key:"render",value:function(){var e=this,t=this.props,i=t.diagramSize,n=t.showPoints,a=t.editValues,s=t.axisType,o=t.axisConfig,r=t.combinedOrigin,c=t.toggleCombinedOrigin,l=this.state.dpr,d="".concat(i+((n?30:0)+(a?30:0)),"px"),u="".concat(i,"px"),h={width:d,height:d,margin:"auto",display:"flex",justifyContent:"center",flexDirection:"column",position:"relative"},A={width:u,height:u,margin:"auto"},p=o||{},f=p.points,I=void 0===f?[]:f,C=p.axes,E=void 0===C?[]:C,v=Object(m.a)(Array(4).keys()).map(function(e){return e0&&!!i,d=!t||0===t.length,u=o,h=r,A=o||r,p=!o,f=!o&&!r,I=!!i,C=o&&!!c&&c.length>0&&this.noSeriesHasLabel(c),m=i&&!i.fixed,E=!i.fixed,v=r&&!i.fixed&&!!c&&c.length>0&&this.noSeriesButOursHasLabel(i,c);return g.a.createElement("div",{className:"series-selector-panel"},n&&g.a.createElement("div",{className:"button-bar"},f&&g.a.createElement("button",{className:"add-button",onClick:this.addSeriesClicked,title:"Add new series"},g.a.createElement(Qe.a,null)),f&&g.a.createElement("button",{className:"edit-button",onClick:this.editSeriesClicked,disabled:!E,title:"Edit series label"},g.a.createElement(je.a,null)),f&&I&&g.a.createElement("button",{className:"remove-button",disabled:!m,onClick:this.removeSeriesClicked,title:"Remove series"},g.a.createElement(Se.a,null)),A&&g.a.createElement("button",{className:"save-button",onClick:this.saveSeriesChanged,disabled:!C&&!v,title:"Save label"},g.a.createElement(Re.a,null)),(u||h)&&g.a.createElement("button",{className:"cancel-add-button",onClick:this.cancelAddOrEditClicked,title:"Cancel changes"},g.a.createElement(Je.a,null))),f&&l&&g.a.createElement("select",{size:a,className:"series-selector single-line",onChange:this.currentSeriesChanged,value:i.id},t.map(function(e){return g.a.createElement("option",{key:e.id,value:e.id},e.label)})),p&&d&&g.a.createElement("select",{className:"no-series-selector single-line"},g.a.createElement("option",null,"No series yet")),(u||h)&&g.a.createElement("input",{type:"text",autoFocus:!0,onChange:this.seriesLabelChanged,value:this.state.seriesLabel,className:"series-label-editor",placeholder:u?"New series label":"(".concat(i.label,")"),onKeyPress:this.saveSeriesKeyPress}))}}]),t}(g.a.Component),Ue=function(e){function t(e){var i;return Object(s.a)(this,t),(i=Object(o.a)(this,Object(r.a)(t).call(this,e))).keyDown=i.keyDown.bind(Object(c.a)(i)),i.props.setCalibrationPlanIndexByType(T.ENTER_DATA_POINTS),i.state={selectedRows:[]},i.mouseLeftClicked=i.mouseLeftClicked.bind(Object(c.a)(i)),i.headClicked=i.headClicked.bind(Object(c.a)(i)),i.bodyClicked=i.bodyClicked.bind(Object(c.a)(i)),i.deleteClicked=i.deleteClicked.bind(Object(c.a)(i)),i.toggleRowSelected=i.toggleRowSelected.bind(Object(c.a)(i)),i.toggleAllRows=i.toggleAllRows.bind(Object(c.a)(i)),i}return Object(d.a)(t,e),Object(l.a)(t,[{key:"rowSelected",value:function(e){return this.state.selectedRows.includes(e)}},{key:"toggleRowSelected",value:function(e){var t=e.target.closest("tr").getAttribute("data-id");this.setState(function(e,i){return{selectedRows:e.selectedRows.includes(t)?e.selectedRows.filter(function(e){return e!==t}):[].concat(Object(m.a)(e.selectedRows),[t])}})}},{key:"toggleAllRows",value:function(e){var t=e.target.closest("table").querySelector("tbody"),i=this.getAllRowsSelectedInfo();this.setState({selectedRows:"all"===i?[]:Object(m.a)(t.children).map(function(e){return e.getAttribute("data-id")}).filter(function(e){return""!==e})})}},{key:"mouseLeftClicked",value:function(e){var t=e.detail.pointerFocus,i=t.scaledOffsetX,n=t.scaledOffsetY,a=t.valX,s=t.valY;this.props.addDataPoint({point:{x:i,y:n},dataPoint:{x:a,y:s}},function(){})}},{key:"headClicked",value:function(e){("th"===e.target.tagName.toLowerCase()?e.target:null)&&this.props.toggleShowRelativeValues()}},{key:"bodyClicked",value:function(e){var t="td"===e.target.tagName.toLowerCase()?e.target:null;if(t){var i=t.getAttribute("data-id"),n=F(t,"data-data-point-index"),a=t.classList.contains("blank-cell"),s="tr"===t.parentNode.tagName.toLowerCase()?t.parentNode:null;if(s&&!t.classList.contains("independent")){var o=F(s,"data-point-index"),r=s.getAttribute("data-id");this.props.selectPoint(r,i,o,n,a)}}}},{key:"deleteClicked",value:function(e){var t=this;this.props.removePoints(this.state.selectedRows,function(){t.setState({selectedRows:[]})})}},{key:"_doNudgeSelectedPointBy",value:function(e,t){var i=this.props,n=i.nudgeInfo,a=i.nudgeSelectedPointBy,s={x:0,y:0};switch(e.code){case"ArrowUp":s.y-=n.y.value;break;case"ArrowDown":s.y+=n.y.value;break;case"ArrowLeft":s.x-=n.x.value;break;case"ArrowRight":s.x+=n.x.value}if(s.x||s.y){e.preventDefault();var o=t?10:1;a(Object.keys(s).reduce(function(e,t){return Object(v.a)({},e,Object(E.a)({},t,e[t]*o))},s))}}},{key:"_doCycleBetweenSeries",value:function(e){var t=this.props.cycleBetweenSeries,i=0;switch(e.code){case"ArrowUp":i-=1;break;case"ArrowDown":i+=1;break;case"ArrowLeft":i-=1;break;case"ArrowRight":i+=1}i&&(e.preventDefault(),t(i))}},{key:"_doMoveCellSelection",value:function(e){var t=this.props.moveCellSelection,i={x:0,y:0};switch(e.code){case"ArrowUp":i.y-=1;break;case"ArrowDown":i.y+=1;break;case"ArrowLeft":i.x-=1;break;case"ArrowRight":i.x+=1}(i.x||i.y)&&(e.preventDefault(),t(i))}},{key:"keyDown",value:function(e){e.target===document.body&&V(e)&&(e.ctrlKey?this._doNudgeSelectedPointBy(e,e.shiftKey):e.altKey?this._doCycleBetweenSeries(e):this._doMoveCellSelection(e))}},{key:"componentDidMount",value:function(){this.props.subscribe("mouseLeftClicked",this.mouseLeftClicked),this.props.subscribe("keydown",this.keyDown)}},{key:"componentWillUnmount",value:function(){this.props.unsubscribe("mouseLeftClicked",this.mouseLeftClicked),this.props.unsubscribe("keydown",this.keyDown)}},{key:"getAllRowsSelectedInfo",value:function(){var e=this.props.currentSeries.points.length,t=this.state.selectedRows.length;return t===e&&e>0?"all":0===t?"none":"some"}},{key:"render",value:function(){var e=this,t=this.props,i=t.currentSeries,n=t.axisType,a=t.dataType,s=t.currentSeriesChanged,o=t.updateSeries,r=t.removeSeries,c=t.editMode,l=t.series,d=t.addSeries,u=t.showRelativeValues,h=t.toggleShowRelativeValues,A=t.seriesSelectorLines,p=t.fontSize,f=i.currentPointIndex,I=i.currentDataPointIndex,C=i.points,E=i.autoAdd,v=C.length,S=a.multiPoints,b=a.dataPoints[0],y=function(e,t){var i=e[(t.independent?b:t).abbrev],a=!t.isReferencePoint&&!t.independent,s=i?a&&!u?i.dataPoint.origDp:i.dataPoint:null;return i?function(e,t,i){var a=i?"\xb1":"";return n===j.BOTH?S?t?"".concat(z(e.x,2)):"".concat(a).concat(z(e.y,2)):"(".concat(z(e.x,2),", ").concat(z(e.y,2),")"):n===j.HORIZONTAL?"".concat(a).concat(z(e.x,2)):"".concat(a).concat(z(e.y,2))}(s,t.independent,a&&u):""},k=n===j.BOTH&&S?[{name:"Independent variable",abbrev:"x",independent:!0}].concat(Object(m.a)(a.dataPoints)):a.dataPoints,O=function(e,t){return!t.independent&&e[t.abbrev]?e[t.abbrev].id:null},P=function(e,t,i){var n=!t.independent&&i===f&&t.dataPointIndex===I,a=O(e,t);return Ee()({selected:n&&!E,"data-cell":!t.independent&&!!a,"blank-cell":!t.independent&&!a,independent:t.independent,notFromBlank:!0,"auto-add":n&&E})},x=function(e,t){var i=!e.independent&&t===f&&e.dataPointIndex===I;return Ee()({selected:i&&!E,fromBlank:!0,independent:e.independent,"blank-cell":!e.independent,"auto-add":i&&E})},B=this.getAllRowsSelectedInfo(),Q=0===this.state.selectedRows.length;return i?g.a.createElement("div",null,g.a.createElement(Ne,{series:l,currentSeries:i,currentSeriesChanged:s,addSeries:d,updateSeries:o,removeSeries:r,editMode:c,seriesSelectorLines:A}),g.a.createElement("div",{className:"data-points-meta-table-container"},g.a.createElement("div",{className:"button-bar"},c&&g.a.createElement("button",{onClick:this.deleteClicked,title:"Delete selected points",disabled:Q},g.a.createElement(Se.a,null)),c&&g.a.createElement("button",{title:"Show relative or absolute values",onClick:h},u?g.a.createElement(ye.a,null):g.a.createElement(xe.a,null)))),g.a.createElement("div",{className:"data-points-table-container"},g.a.createElement("table",{className:"data-points-table",style:{fontSize:"".concat(p,"pt")}},g.a.createElement("thead",{onClick:this.headClicked},g.a.createElement("tr",null,c&&g.a.createElement("th",{key:"select",title:"Select all points"},"all"===B&&g.a.createElement(ye.a,{onClick:this.toggleAllRows}),"some"===B&&g.a.createElement(Oe.a,{onClick:this.toggleAllRows}),"none"===B&&g.a.createElement(xe.a,{onClick:this.toggleAllRows})),k.map(function(e){return g.a.createElement("th",{title:"".concat(e.name," (click to toggle relative-mode)"),key:e.abbrev},e.abbrev)}))),g.a.createElement("tbody",{onClick:this.bodyClicked},C.map(function(t,i){return g.a.createElement("tr",{key:t.id,"data-id":t.id,"data-point-index":i},c&&g.a.createElement("td",{key:"select"},e.rowSelected(t.id)?g.a.createElement(ye.a,{onClick:e.toggleRowSelected}):g.a.createElement(xe.a,{onClick:e.toggleRowSelected})),k.map(function(e){return g.a.createElement("td",{className:P(t,e,i),key:e.abbrev,"data-id":O(t,e),"data-data-point-index":e.dataPointIndex},y(t,e))}))}),g.a.createElement("tr",{key:null,"data-id":"","data-point-index":v},c&&g.a.createElement("td",{key:"select"},g.a.createElement(xe.a,{className:"disabled"})),k.map(function(e,t){return g.a.createElement("td",{className:x(e,v),key:e.abbrev,"data-id":"","data-data-point-index":e.dataPointIndex},"\xa0")})))))):g.a.createElement("div",null,g.a.createElement(Ne,{series:l,currentSeries:i,currentSeriesChanged:s,addSeries:d,updateSeries:o,removeSeries:r,editMode:c}))}}]),t}(g.a.Component),He={HORIZONTAL:"horizontal",VERTICAL:"vertical"},Me=function(e){function t(e){var i;return Object(s.a)(this,t),(i=Object(o.a)(this,Object(r.a)(t).call(this,e))).plan=[{type:j.HORIZONTAL,label:"Horizontal axis"},{type:j.VERTICAL,label:"Vertical axis"},{type:j.BOTH,label:"Both axes"}],i.state={dialogTitle:"",dialogModal:!0},i.onTitleChange=i.onTitleChange.bind(Object(c.a)(i)),i.haveAllCalibrationPoints=i.haveAllCalibrationPoints.bind(Object(c.a)(i)),i.haveAllCalibrationPointsAndValues=i.haveAllCalibrationPointsAndValues.bind(Object(c.a)(i)),i.setModal=i.setModal.bind(Object(c.a)(i)),i}return Object(d.a)(t,e),Object(l.a)(t,[{key:"onTitleChange",value:function(e){this.setState({dialogTitle:e})}},{key:"haveAllCalibrationPoints",value:function(){var e=this.props.planStep;return!!e&&e.type!==T.AXIS_CALIBRATION_POINT}},{key:"haveAllCalibrationPointsAndValues",value:function(){var e=this.props.planStep;return!!e&&e.type!==T.AXIS_CALIBRATION_POINT&&this.props.haveAxisValues}},{key:"setModal",value:function(e){this.setState({dialogModal:e})}},{key:"render",value:function(){var e=this,t=this.props,i=t.config,n=t.showDiscriminator,a=t.selectedPointId,s=t.selectedSubPointId,o=t.currentPointIndex,r=t.currentDataPointIndex,c=t.selectPoint,l=t.nudgeInfo,d=t.nudgeSelectedPointBy,u=t.nudgeAxisPointBy,h=t.zoomToAxisPoint,A=t.moveCellSelection,p=t.cycleBetweenSeries,f=t.showRelativeValues,I=t.toggleShowRelativeValues,C=t.axisConfig,m=t.axisPointInverseCols,E=t.seriesSelectorLines,v=t.dataTableFontSize,S={display:i.axisType===j.BOTH?"inline-block":"none"};return g.a.createElement(de.DuxDialog,{show:this.props.show,width:"auto",title:this.state.dialogTitle,onClose:this.onCloseDialog,style:{left:"50%",right:"50%",transform:"translate(-50%, -50%)"},modal:this.state.dialogModal},g.a.createElement(ue,{curStep:this.props.curStep,prevClicked:this.props.prevClicked,nextClicked:this.props.nextClicked,finishClicked:this.props.finishClicked,onTitleChange:this.onTitleChange,setModal:this.setModal},g.a.createElement(he,{title:"Graph characteristics",cta:"Choose the type of graph"},this.props.dataTypes&&g.a.createElement("select",{size:this.props.dataTypes.length+2,onChange:this.props.graphTypeChanged,value:i.graphTypeId},this.props.dataTypes.map(function(e){return g.a.createElement("option",{key:e.id,value:e.id},e.text)}))),g.a.createElement(he,{title:"Calibration",cta:"Choose axes type"},g.a.createElement("div",{className:"row axis-diagram-container"},this.plan.map(function(t){var a=t.type,s=t.label;return g.a.createElement("div",{className:"axis-diagram",key:a},g.a.createElement(Ie,{axisType:a,diagramSize:100}),g.a.createElement("label",null,g.a.createElement("input",{type:"radio",value:a,name:"axisType",onChange:e.props.axisTypeChanged,checked:i.axisType===a}),s),n&&a===j.BOTH&&g.a.createElement("div",{style:S},Object.values(He).map(function(t){return g.a.createElement("label",{key:t},g.a.createElement("input",{type:"radio",value:t,name:"discriminator",onChange:e.props.discriminatorChanged,checked:i.discriminator===t}),(n=(n=t).trim())&&n.length>0?n.charAt(0).toUpperCase()+(n.length>1?n.slice(1).toLowerCase():""):"");var n})))})),g.a.createElement("div",{className:"row"},g.a.createElement("label",null,g.a.createElement("input",{type:"checkbox",name:"includeIndividuals",checked:i.includeIndividuals,onChange:this.props.includeIndividualsChanged}),"Include individuals"))),g.a.createElement(he,{title:"Choose points",cta:"Calibrate the axes",nextOkIf:this.haveAllCalibrationPointsAndValues,modal:!1},g.a.createElement(Ce,Object.assign({},this.props.subscriptionHandlers,{combinedOrigin:this.props.combinedOrigin,toggleCombinedOrigin:this.props.toggleCombinedOrigin,addAxisPoint:this.props.addAxisPoint,addAxisPointValue:this.props.addAxisPointValue,axisLogSettingChanged:this.props.axisLogSettingChanged,removeAxisPoint:this.props.removeAxisPoint,axisType:this.props.axisType,setAxes:this.props.setAxes,fullCalibrationPlan:this.props.fullCalibrationPlan,setCalibrationPlanIndex:this.props.setCalibrationPlanIndex,planStep:this.props.planStep,cloneSourceAxisPointToDest:this.props.cloneSourceAxisPointToDest,pointCount:this.props.pointCount,axisDiagramEditValues:this.haveAllCalibrationPoints(),axisPointCols:this.props.axisPointCols,axisPointInverseCols:m,axisConfig:C,nudgeInfo:l,nudgeAxisPointBy:u,zoomToAxisPoint:h}))),g.a.createElement(he,{title:"Data Collection",cta:"Add data points",modal:!1},g.a.createElement(Ue,Object.assign({},this.props.subscriptionHandlers,{addDataPoint:this.props.addDataPoint,removePoints:this.props.removePoints,series:this.props.series,currentSeries:this.props.currentSeries,selectedPointId:a,selectedSubPointId:s,currentPointIndex:o,currentDataPointIndex:r,axisType:this.props.axisType,setCalibrationPlanIndexByType:this.props.setCalibrationPlanIndexByType,dataType:this.props.dataType,currentSeriesChanged:this.props.currentSeriesChanged,addSeries:this.props.addSeries,updateSeries:this.props.updateSeries,removeSeries:this.props.removeSeries,editMode:this.props.editMode,selectPoint:c,nudgeInfo:l,nudgeSelectedPointBy:d,moveCellSelection:A,cycleBetweenSeries:p,showRelativeValues:f,toggleShowRelativeValues:I,seriesSelectorLines:E.value,fontSize:v.value})))))}}]),t}(g.a.Component),Le=(g.a.Component,function(e){var t=Object(h.useState)({mousePos:{},valPos:{}}),i=Object(R.a)(t,2),n=i[0],a=i[1],s=e.axisType;e.matrix;Object(h.useEffect)(function(){var t=function(e){var t=e.detail.pointerFocus,i=t.scaledOffsetX,n=t.scaledOffsetY,o=t.valX,r=t.valY,c={mousePos:{x:z(i,2),y:z(n,2)},valPos:{x:s!==j.VERTICAL?z(o,2):"-",y:s!==j.HORIZONTAL?z(r,2):"-"}};a(c)};return e.subscribe("mousePointerMoved",t),function(){e.unsubscribe("mousePointerMoved",t)}},[]);var o=n.mousePos,r=n.valPos;return g.a.createElement("div",{className:"status-display"},g.a.createElement("div",{className:"header"},"Status"),g.a.createElement("div",{className:"body"},g.a.createElement("div",null,"imageSpace: (",o.x,", ",o.y,")"),g.a.createElement("div",null,"dataSpace: (",r.x,", ",r.y,")")))}),Ke=i(86),ze=i.n(Ke),Ye=i(85),Fe=i.n(Ye),Ge=function(e){function t(e){var i;return Object(s.a)(this,t),(i=Object(o.a)(this,Object(r.a)(t).call(this,e))).zoomTracksPointNudgesClicked=i.zoomTracksPointNudgesClicked.bind(Object(c.a)(i)),i.editModeClicked=i.editModeClicked.bind(Object(c.a)(i)),i.advancedModeClicked=i.advancedModeClicked.bind(Object(c.a)(i)),i}return Object(d.a)(t,e),Object(l.a)(t,[{key:"zoomTracksPointNudgesClicked",value:function(e){this.props.toggleZoomTracksPointNudgesClicked()}},{key:"editModeClicked",value:function(e){this.props.toggleEditMode()}},{key:"advancedModeClicked",value:function(e){this.props.toggleAdvancedMode()}},{key:"render",value:function(){var e=this.props,t=e.editMode,i=e.advancedMode,n=e.zoomInfo,a=e.zoomOut,s=e.zoomIn,o=e.pointZoomSquaredChanged,r=e.nudgeInfoX,c=e.nudgeZoomOutX,l=e.nudgeZoomInX,d=e.nudgeSquaredChangedX,u=e.nudgeInfoY,h=e.nudgeZoomOutY,A=e.nudgeZoomInY,p=e.nudgeSquaredChangedY,f=e.dataTableFontSizeInfo,I=e.dataTableFontSizeDown,C=e.dataTableFontSizeUp,m=e.zoomTracksPointNudges,E=e.seriesSelectorLines,v=e.seriesSelectorLinesUp,S=e.seriesSelectorLinesDown;console.log("dataTableFontSizeInfo: ".concat(f));var b="Magnifier tracks point movement: ".concat(m?"ON":"OFF"),y="edit mode ".concat(t?"ON":"OFF"),k="advanced mode ".concat(i?"ON":"OFF");return g.a.createElement("div",{className:"settings"},g.a.createElement("div",{title:b,className:Ee()({"toggle-icon":!0,on:m})},g.a.createElement("label",null,g.a.createElement(Fe.a,{onClick:this.zoomTracksPointNudgesClicked}))),i&&g.a.createElement(ce,{showSquared:!1,zoomInfo:f,zoomOut:I,zoomIn:C,label:"data-table font size",showMultiplier:!1}),i&&g.a.createElement(ce,{showSquared:!1,zoomInfo:E,zoomOut:S,zoomIn:v,label:"# series selector lines",showMultiplier:!1}),i&&g.a.createElement(ce,{zoomInfo:r,zoomOut:c,zoomIn:l,squaredChanged:d,label:"x-nudge",showMultiplier:!1}),i&&g.a.createElement(ce,{zoomInfo:u,zoomOut:h,zoomIn:A,squaredChanged:p,label:"y-nudge",showMultiplier:!1}),i&&g.a.createElement(ce,{zoomInfo:n,zoomOut:a,zoomIn:s,squaredChanged:o,label:"point zoom"}),g.a.createElement("div",{title:k,className:Ee()({"toggle-icon":!0,on:i})},g.a.createElement("label",null,g.a.createElement(ze.a,{onClick:this.advancedModeClicked}))),g.a.createElement("div",{title:y,className:Ee()({"toggle-icon":!0,on:t})},g.a.createElement("label",null,g.a.createElement(je.a,{onClick:this.editModeClicked}))))}}]),t}(g.a.Component),Ve=function(e){function t(e){var i;Object(s.a)(this,t),(i=Object(o.a)(this,Object(r.a)(t).call(this,e)))._settingsKey=i.props.settingsKey||"Graph2DataSettings",i.subscriptionHandlers={subscribe:i.subscribeToOurEvents,unsubscribe:i.unsubscribeFromOurEvents},i._devMode=i.props.devMode,console.log("Running React version: ".concat(g.a.version)),i._processDataTypes(),i.middleColumn=g.a.createRef(),i.state=i._getInitialState(),i.pointerFocus={x:null,y:null,offsetX:null,offsetY:null,scaledOffsetX:null,scaledOffsetY:null,context:null,chromeContext:null,dpr:1,scale:1,valX:null,valY:null},i._bindHandlers(),i.renderCounter=1;return i.axisPointCols=["red","red","red","red"],i.axisPointInverseCols=["cyan","cyan","cyan","cyan"],i}return Object(d.a)(t,e),Object(l.a)(t,[{key:"_getInitialState",value:function(){return Object(v.a)({settings:{settingsVersion:2,zoomTool:{value:2,squared:!0,refreshToggler:{toggle:0,point:null}},pointZoom:{value:4,squared:!0},nudgeInfo:{x:{value:.25,squared:!0},y:{value:.25,squared:!0}},dataTableFontSize:{value:11},zoomTracksPointNudges:!0,showRelativeValues:!0,advancedMode:!1,editMode:!1,seriesSelectorLines:{value:3}},calibrationPlanIndex:(this._devMode,0),showHelperDialog:!0,helperDialogStep:this._devMode?2:0,fullCalibrationPlan:ae(!0),data:{series:this._devMode?[{id:"116e146e-6213-48a7-889b-c1a00dfec6e8",label:"Series 1",fixed:!1,points:[],currentPointIndex:0,currentDataPointIndex:0,selectedPointId:null,selectedSubPointId:null,autoAdd:!0}]:[],axisConfig:{combinedOrigin:!0,focusedAxisPointIndex:-1,points:(this._devMode,[]),axes:(this._devMode,[]),matrix:(this._devMode,{})}},currentSeriesId:this._devMode?"116e146e-6213-48a7-889b-c1a00dfec6e8":"guid",selectedAxisPointId:null},this._devMode?{config:{graphTypeId:"mean-and-standard-deviation",discriminator:"vertical",axisType:"both",includeIndividuals:!1,dataUri:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwIAAAKyCAYAAABmAWl5AAAgAElEQVR4XuydB5xU1dnGn3vvzGwFpKixoyaaxBj91FiwJPaKglGKYK8xdhM7ioooKiqIRqOxm2goNjQkauyxotiiUeyKBUVg65R77/d7zsxZBwTcHXZnZ+489/twd2duOef/nsy8zznv+x4nDMMQOkRABERABERABERABERABCqKgCMhUFH2VmdFQAREQAREQAREQAREwBCQENBAEAEREAEREAEREAEREIEKJCAhUIFGV5dFQAREQAREQAREQAREQEJAY0AEREAEREAEREAEREAEKpCAhEAFGl1dFgEREAEREAEREAEREAEJAY0BERABERABERABERABEahAAhICFWh0dVkEREAEREAEREAEREAEJAQ0BkRABERABERABERABESgAglICFSg0dVlERABERABERABERABEZAQ0BgQAREQAREQAREQAREQgQokICFQgUZXl0VABERABERABERABERAQkBjQAREQAREQAREQAREQAQqkICEQAUaXV0WAREQAREQAREQAREQAQkBjQEREAEREAEREAEREAERqEACEgIVaHR1WQREQAREQAREQAREQAQkBDQGREAEREAEREAEREAERKACCUgIVKDR1WUREAEREAEREAEREAERkBDQGBABERABERABERABERCBCiQgIVCQ0QMAGQAuEMSyd3By/8zrIRDydQeBw/+GcODnnsQT3ew55iJ75P9eUKN0kQiIgAiIgAiIgAiIgAi0m4CEQLtR5Z9IZ78VCOOAX5V9g769S+c+CdDpD6oRwoNPIeAEcHm+OSkGxwiAfCHgACHfy2kDvsUzctpAEqEgI+kiERABERABERABERCBZRCQEChoeFAItOSEQPViQoAOf2CEAELPrAjApRBoMcIAiC+yDtDm/ecLAaMCJAQKMo0uEgEREAEREAEREAERaBcBCYF2YVr8JAqBZFYIBIns5L5ZEWDIUCo3nZ8AAjcXMhQADgWCh9AIAZ7Mc7kSwNPz5vzzfs0tDCxBOBTUaF0kAiIgAiIgAiIgAiIgAm0EJAQKGgwUAmkT5pMVAzlf3uXr/MMDAs7+2wigAHApBOK5f8t6KK+34kBBQQWZRxeJgAiIgAiIgAiIgAj8IAEJgR9EtKQTssnCJgcAHjxO+BvfPZX9JUx8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25UA/uS/ffbZxwgBmxxsB55WAwoxrK4RAREQAREQAREQgeUjQF/M5gRsu+22mDVrlgkNshO1pTRhKyFQiK1zQiBwgbQLuJkQcTeJhvnv4qhjTscGm+6FU089FjWxZvgLFsKtr8cnX32F0eeMwTNP/ge1tT2wzo/XxV13/Q1e3EEyHSARz+4snP2Xe4D5md1vmOkBLS0tJizIOvts+h577NEWGkTn3+YRlNIgKwSxrhEBERABERABERCBciewxRZb4LXXXsNXX32Furo646cxgqNUDgmBQixB/5wh/A7AVYFsOE8KcBYiRDV81Ofc96SpLsRYn9DhWVVwgpzxc5WjeA/r7tumLEkIZAXB94/dd9/9eysCEgGFGFXXiIAIiIAIiIAIiEDnELCTthQCTBbODxfqnCd0zl0kBArhmBMC9M25KkDH3UGG0fwIkUAQJljkBy5fC/l6xlT9YW0hhMtQgW2+vn2AbRxFhIRAIabSNSIgAiIgAiIgAiJQbAISAsUmXszn5fvpxkdnUi//8Q3W8c867dn/MkucQoDvV5n325YAstVAl+bj5+637E0ntCJQTMPrWSIgAiIgAiIgAiLwwwQkBH6YUfmeYer8Wz89BNysCAgpAmycP18yPjz3AEixzBCAOELEF53bt2JgCTRyemIpawHZCyQEyncYqeUiIAIiIAIiIALRJCAhEE27Znu1iBAIANdHCA8+sgm/LP/p5M/2OwwRSgOOlxMCebP8EgJRHinqmwiIgAiIgAiIQAUSkBCIstHbhAA9/sB4/b7jIYBjEofNzsB2RcD4/PyD4UEsDJoVC22HmfZfcviP0QjOMiKHtCIQ5VGmvomACIiACIiACJQpAQmBMjVcu5vdFhqUFQIBS3zmXHqzIdgi8f85ZWAShhd3+nNlg3JOf9uKg23IslMEFBrUboPpRBEQAREQAREQAREoDgEJgeJwLpGnLF4AdEnNas85He+OcgQ6zkxXiIAIiIAIiIAIiEBXEpAQ6Eq6uncbAQkBDQYREAEREAEREAERKC0CEgKlZY/ItkZCILKmVcdEQAREQAREQATKlICEQJkartyaLSFQbhZTe0VABERABERABKJOQEIg6hYukf5JCJSIIdQMERABERABERABEcgRkBDQUCgKAQmBomDWQ0RABERABERABESg3QQkBNqNSicuDwEJgeWhp2tFQAREQAREQAREoPMJSAh0PlPdcQkEJAQ0LERABERABERABESgtAhICJSWPSLbGgmByJpWHRMBERABERABEShTAhICZWq4cmu2hEC5WUztFQEREAEREAERiDoBCYGoW7hE+ichUCKGUDNEQAREQAREQAREIEdAQkBDoSgEJASKglkPEQEREAEREAEREIF2E5AQaDcqnbg8BCQEloeerhUBERABERABERCBzicgIdD5THXHJRCQENCwEAEREAEREIFFCWQyGXieZ16kQ8Z//Nv3/ba/Y7EYeJ7jOHBd17xuf/I1ey1f0yECHSUgIdBRYjq/IAISAgVh00UiIAIiIAIRJkAnLJlMIh6PY8aMGfjkk0+Mwx8Egem1dfTzEVjBwPdWWWUVDBw40AgDXmNFRYSRqWudTEBCoJOB6nZLJiAhoJEhAiIgAiIgAosSSKfTZvZ/+vTp+MMf/oCPP/4YiUQCqVSqzamnc08nn//sSoD9e+utt8ZTTz21yGqCGItARwhICHSEls4tmICEQMHodKEIiIAIiEBECVAEMOzn008/xddff22cfa4Q1NXVGYFw9tln4/HHH8ezzz67SDiQXTWor6/H+uuvb4QDVxW0IhDRgdKF3ZIQ6EK4uvV3BCQENBpEQAREQAREYFECFAF0+LkKwIMOPh0zrhTwtf333x8PPPAAGhsbzXl09PleVVUVFi5ciB49ehgRwHO5WrCkUCIxF4FlEZAQ0PgoCgEJgaJg1kNEQAREQATKiICN9+dPG+7D360wGDp0KKZNm2ZEAAUAE4etWGA37WsUFHxPCcNlZPwSaaqEQIkYIurNkBCIuoXVPxEQAREQgY4SoIPPg84YHXl72GpCw4YNw+TJk41IsKKBzr4VAPZamywsIdBRC+h8CQGNgaIQkBAoCmY9RAREQAREICIE6PxTCEyZMsWsCCjsJyKGLbFuSAiUmEGi2hwJgahaVv0SAREQARHoCgISAl1BVfdcnICEgMZEUQhICBQFsx4iAiIgAiIQEQISAhExZIl3Q0KgxA0UleZJCETFkuqHCIiACIhAMQhICBSDsp4hIaAxUBQCEgJFwayHiIAIiIAIRISAhEBEDFni3ZAQKHEDRaV5EgJRsaT6IQIiIAIiUAwCEgLFoKxnSAhoDBSFgIRAUTDrISIgAiIgAhEhICEQEUOWeDckBErcQFFpnoRAVCypfoiACIiACBSDgIRAMSjrGRICGgNFISAhUBTMeogIiIAIiEBECEgIRMSQJd4NCYESN1BUmichEBVLqh8iIAIiIALFICAhUAzKeoaEgMZAUQhICBQFsx4iAiIgAiIQEQISAhExZIl3Q0KgxA0UleZJCETFkuqHCIiACIhAMQhICBSDsp4hIaAxUBQCEgJFwayHiIAIiIAIRISAhEBEDFni3ZAQKHEDRaV5EgJRsaT6IQIiIAIiUAwCEgLFoKxnSAhoDBSFgIRAUTDrISIgAiIgAhEhICEQEUOWeDckBErcQFFpnoRAVCypfoiACIiACBSDgIRAMSjrGRICGgNFISAhUBTMeogIiIAIiEBECEgIRMSQJd4NCYESN1BUmichEBVLqh8iIAIiIALFICAhUAzKeoaEgMZAUQhICBQFsx4iAiIgAiIQEQISAhExZIl3Q0KgxA0UleZJCETFkuqHCIiACIhAMQhICBSDsp4hIaAxUBQCEgJFwayHiIAIiIAIRISAhEBEDFni3ZAQKHEDRaV5EgJRsaT6IQIiIAIiUAwCEgLFoKxnSAhoDBSFgIRAUTDrISIgAiIgAhEhICEQEUOWeDckBErcQFFpnoRAVCypfoiACIiACBSDgIRAMSjrGRICGgNFISAhUBTMeogIiIAIiEBECEgIRMSQJd4NCYESN1BUmichEBVLqh8iIAIiIALFICAhUAzKeoaEgMZAUQhICBQFsx4iAiIgAiIQEQISAhExZIl3Q0KgxA0UleZJCETFkuqHCIiACIhAMQhICBSDsp4hIaAxUBQCEgJFwayHiIAIiIAIRISAhEBEDFni3ZAQKHEDRaV5EgJRsaT6IQIiIAIiUAwCEgLFoKxnSAhoDBSFgIRAUTDrISIgAiIgAhEhICEQEUOWeDckBErcQFFpnoRAVCypfoiACIiACBSDgIRAMSjrGRICGgNFISAhUBTMeogIiIAIiEBECEgIRMSQJd4NCYESN1BUmichEBVLqh8iIAIiIALFICAhUAzKeoaEgMZAUQhICBQFsx4iAiIgAiIQEQISAhExZIl3Q0KgxA0UleZJCETFkuqHCIiACIhAMQhICBSDsp4hIaAxUBQCEgJFwayHiIAIiIAIRISAhEBEDFni3ZAQKHEDRaV5EgJRsaT6IQIiIAIiUAwCEgLFoKxnSAhoDBSFgIRAUTDrISIgAiIgAhEhICEQEUOWeDckBErcQFFpnoRAVCypfoiACIiACBSDgIRAMSjrGRICGgNFISAhUBTMeogIiIAIiEBECEgIRMSQJd4NCYESN1BUmichEBVLqh8iIAIiIALFICAhUAzKeoaEgMZAUQhICBQFsx4iAiIgAiIQEQISAhExZIl3Q0KgxA0UleZJCETFkuqHCIiACIhAMQhICBSDsp4hIaAxUBQCEgJFwayHiIAIiIAIRISAhEBEDFni3ZAQKHEDLV/zwrzLndzv9jX7tz1laa8vXwvs1RICncNRdxEBERABEagMAhIClWHn7u6lhEB3W6BLn+8DyABwAcRzT+JrdPpdhAFfBxwHCPwmuG4MIRIIQsdc4joAB0gYAJ7nIJPxEYt55prQ3CN7J0qKrKxYXFx81zkJgS41tG4uAiIgAiIQMQISAhEzaIl2R0KgRA3TOc2iCGjNioCwKuen87UMwiCO0PcQ+AGANLxECggdBJkqOLE4fGqBnF/vZwJ45o8QnpcVDyECIwKsEOBrrhEcSz4kBDrHorqLCIiACIhAZRCQEKgMO3d3LyUEutsCXfp8Ov3JnBBI5AmBNBAmgIBCAPD9ZsSrkuZ3BLWAV4XQ4yoB0NDQgBVW6GFWA3zfR3V1Iq/FWSlAKcHDkxDoUmvq5iIgAiIgApVDQEKgcmzdnT2VEOhO+l3+bAqBNIAYEMRzMTy518KEWRFgWBDcDPzMfBMS9NzTr+LkP5yJl2fNMjFDAwYMwN//fjf69FkB8bgH182f9f9OCPBVR0Kgyy2qB4iACIiACFQGAQmByrBzd/dSQqC7LdClz+dcfQYIY0DoLiYE4giDGEI/BLwUHLcRz/3nOZx4/NloaEph3fXWQyadwVdz5yKRSGDSpIlYf/31UV9fu4QWZ9cEJAS61Ji6uQiIgAiIQAURkBCoIGN3Y1clBLoRftc/mg56ABPnwwRgk9WbXRGgCAj8GFwnRBC2IEQjxl9+BW67ZRouvOgS7LX33gjh4G9/uwuXXnY5jj76aBx6+KGor61ua/Z3qcFBLk1YOQJdb1M9QQREQAREoBIISAhUgpW7v48SAt1vgy5sQS6dl6sB1AS5MCAjBMIY0knXCIFYIoPW1rm48IKxeOO1jzDh6onov/a6JjTojTffwoGHHIqhQ4fh97//HWpqqnKz/99VC3LasgQkBLrQmLq1CIiACIhABRGQEKggY3djVyUEuhF+cR4dACwTasv7uLkE4jCOIJOA44YIwyaETjMm3z0Fp//xApxw0ik49rjfw3FiuGz8Fbj19jtwybhx2HOvPUzVoGw+QE5XmE5kQ4PSad+UG2Uo0bx589CnT5+2LrJq0BNPPIH58+fD8zyTeByPx+GYJAUdIiACIiACIiAC+QQkBDQeikFAQqAYlLv1GYsLASYP20pCVUi3JuFV+Ugl5yEM47ji0msx9uJL0JpOIQiBFfr2wXEnnIQzzzoLXsxr2ymAYsD+o8gIwgxSqYxx7FtaWpDJZH/nwQTjgw8+GNOnT0c6zdWIELFYDE1NTaipqVksAblbYenhIiACIiACIlASBCQESsIMkW+EhEDkTcwcgVxokJnKT+X2FkjAT8eRSacRBM1I1IT450MP45KxE5Hx06irr0PouJjz5ZdYZbU1MXbc5fjpz3+K6kRWDLQJgdyGxGHoI53O4IMPP8Tw4cMxa9YsM+PPD7J8UcDf+RpXBXhoRSDyA1AdFAEREAERKICAhEAB0HRJhwlICHQYWTldYJOFWTXIxvNwNaDVbCjW2uIiFmfloGZkgibsvddgeGFPXDVxPH68/lpIZQK8POs1nHHmuVi9/7q4fPw4rLRiv+wsv9k3AHDzhABXBO5/4H688MILbZDo6CeTSfzjH//A7NmzkUql2lYAOPisICgnqmqrCIiACIiACHQ1AQmBrias+5OAhECkx8HiQiAEHO40nEQYJpBJJeCwNpDn49NP3sF22+yIow4/GaefdQpi1UBraxINTa249vqbcc/903HnX2/Huuus3bYiEOPtzCji//tm0zHqAjr3nPmvqqoyuQD8MBs0aBAefvhhIwQ46Pg+Q4YkBCI9ANU5ERABERCBAglICBQITpd1iICEQIdwldvJi5cPpefeDCBlVgQCPxufn2xtwOeff4Bddh6I3+4zEhdefB4am+aid78VsWBhMy4adwUe+ufDuPvuv2LddddZohBgwnDGDxAibAsJ4moAhQCPPffcE//+979NsnBtba2EQLkNJbVXBERABESgqAQkBIqKu2IfJiEQadNnHXMTxEMN4PB3hgYxYTgOBNVAmN10rDXdhKOP+B3umfoQLr30Iow4+AC4XgxXX30tzj5nNI485vc494Lz0K9Pr7aKQZ5dEchn6HAlodWsBvCgEGBiMKsGzZgxw6wOMFSourraJA7zPeUJRHoQqnMiUNYE7JdkWXdCjS9DAiH8IMCwYSMxZco0+H6SFb2zYb4mv858w+b+8Ts++z3f9gVdhj1Wk7uHgIRA93AvylP5mZAt7Jn/2cBXfQaFwc/42Xh9xzci4bVXZuHMM87Bs8+9iOaWJOJVNXAdB9vvsAPOOONMbLb5poh53+0VYHTFYiJgaR3LFwI8hwPPPFuHCIiACJQgAU5a8DOqubnZTFiwLDIronGSY2mfXfxcs59t/MnJDoY/8l4snqBDBBYnwDBZHhwj/GdDat0YkAlDDBt6OO6dMh0Lm75GVTUQ+D48xOC4DoKgAXCS8FCNMFMDx/fgcs9PfbVqoHWAgIRAB2CV26n5QmBRMUBHPIMw4GxCaEQANxZLp5J4b/b7mDL1ASxsaEVrshV9+/bDYYcegh/9aBW4ngvPXUrd/x/YDkBCoNxGj9orApVNwDr11kHj33Tm6bgtzannuTwoFHh+/qGJj8oeT0vrvR1fdvWc4tH3M6ipiyHlt2D40KNx3z0PI+N/Cz9oQRhwZSCBdAqorQnQmloIz03A8XvCDRNwExICGmkdIyAh0DFeZXV2bl9hu5LYtmJoVhdDigDOQDDJN42qBKsINcF1OdNQhSB0UVWVMAnD2S/AmEkGrq7Ohvx09JAQ6CgxnS8CItCdBPi5Z4sbcJbWhjIuSwjYqmhcQaBjZwsnKASyOy1Z2s/muGJ4LMcKf6cwiMU8pDMLEU8EOHDEcfj73Q8imZwPuI0IwxZ4Xh0y6bj5bvZiXNnPIJkMkYjXw/O48qSNOkvb6qXVOgmB0rJHp7bGzkfZsEF78+xHRIBUKglG53iua5J4e/WqRybNMKEE/NBFdXUiV+GHdf+51lh4OI+EQKeaVjcTARHoYgLZz8ReJqeJjryd0V9WzkB+yCOdOrtyoDyoLjZWGd/e7rXDLnCc7L333vjyyy/hZ1Ko9mL4+ON5aGlwsMGG68J35psqf8mkh7vunIYf/3hNuFyljwXwgyT8MINErBZArIyJqOnFJiAhUGziRX6eXRXInx/I/p59h+FAsbiHZGsrqmtqcq2LIQic3AyYZ0QANwtLpdKoq7PndKwjEgId46WzRUAESoeAjfXnjD9zBZZ18FzmFfTu3duEEdlcAVZL0yECixOw5bQpGr/55htsvvnm+OCD91Fd5TBJwHxVVyeAlhT3BnXAVBMXCWSSK2DhgjlIZxwEnoPquiRCJwUP/I6WENBIaz8BCYH2syrLM+2qwPcXCpnUFqCpqQnxRAyJeBytrS1wHQ/xRDVcN7vzL5e3bezi8sS4SgiU5fBRo0WgYgnQiWdy8Lx58zBw4EC88847JlSIs7Y2F2BxOPyM5HubbrqpKZfco84TKmEAACAASURBVEcPc4pWBCp2GP1gxykaWUXv008/xZFHHolHHnkEffr0woUXD8Lqa78C152P+voVMO/bhaitXQNff9kb4y95Hm+88jkyfg/ssP2OePAffwPcVsALkHA55pSY/oPgdUIbAQmBCh0MNHy2Kka2Hll2SRvZTcFCB7FY9oPEigCeyy+zQr/QJAQqdKCp2yJQpgTsZ+Tdd9+NJ598sm33TZtE/OCDD+Lzzz83zps9GEJEAcHVgIsvvti8bKsPFfrZWab4Itts2tduhEnbcjzQ7vZYPDfEJo0vPg6s82VzBO677z784x//MPe+4YY/Y+vt+mDU+Ssj48yG46URIAYvXAf33J3EXbd+hL123xc9eq2M/uusgz/+8TiEThKZ0Ee1JyEQ2cHXRR2TEOgisCVz26UvCeQ1MXtSds8Bx/xfZx8SAp1NVPcTARHoLgJ09nbeeWc89thjxtGnk6/9BrrLGsV9Lh13a2tbHcqWiOW44FhgmA9Xk2pqato21WQr+R5zTph8bvfTsZtuTp8+Hf/85z+NqPjTn67FqqtU4ZDDV8KW2zUiUd+I5tYAcz5YBTdOmo/NNtwbF140Hv36rWTyA1KZhuy3txtHlaf6ocUdEeX/NAmB8rfhsnuweK1/82n03SVLf9tmF7QXEG+6dAEhIdBejjpPBESg1AlICJS6hbqufXYVgE49VwcY2rPCCisYQUiHimODrzPcJ3/FwIoAG1rGn/vss48p1MHfv/jiC3z88cdGRKRTKVQnQhxwwE8weLgPt2YOYvEV8OLTtbjo7Pdxw3W34be/PRAJkw7Ajcd8FgJHELhIeI6KBnWd+SN5ZwmBSJo1r1P5O4rZl5chBHg66wM5bVuRdQTQ0ncxkRDoCEedKwIiUMoEJARK2Tpd2zY6+VwV4Gy/PVpbW01VKb5nNwTjKgHHid1/gu+/++672HjjjY1IoICw5WbtXgL33nsv9thjDzQ2NuC5px/B0P2GYdSYDbHuL+ZhwQIHxx39KX5/+Im4ZMx4+BkX8R5MIm5EJhOgrrYnuDVQjOl9nb+o37VQdfduJSAh0K34i/BwKwTyVwKWIATyT5MQKIJd9AgREIGyJSAhULamW+6G2xwRmz9nVwbs3hHvv/++CfthaBCPSZMmYfLkyW2hQhQKq6++uhEMFAKvvvpqWx4Jr2NVKj7jhf88jwOHDMGvd+mHfYauh88+bcG5Zz6Os04/DyeeeCrcmIMMFsLzMgjhIQgduE4VXJMorK2Fl9vQFXQDCYEoG3vx6B4rAH5ACPBt16wILClwaGnAslct7dCKQJQHmvomApVFQEKgsuyd31s67zY52IqAm266qW2FgEnirADEVQNbZYr5JCuvvLJx8LfYYgscdthhJgTIJh3zPP5tE4q5whALE5hw2XhccsXZOO+iQTjjjKn4zTa/NrsMh6GLWLWLtP8t4ty8LvTMKgD3BGJpUSBb9U+HCLSHgIRAeyiV6zn5O4rlrwjk/Z5/ynd5xSFccOfhbEWh79YZ7e9Lek1CoFyHidotAiLQMQISAh3jFaWz6TQ98cQTYBgPHXk67X/5y1+M409hQJFwwQUXmJl9OvY8h7kAXAVgeBBn/a0AoPPPa2wIkd1dOB7nPgEZzJr5Ek7541Gork9j1qwP8adJ12PvvYYhUZVA2k8inuC1DvzAQyzG39OIm4p/ig2K0pjr6r5ICHQ14e6+f/6k/g98Nix6KlcEliQEOOtv32PnrChY9s21ItDdA0HPFwER6CwCEgKdRbJz7sMwHJucyzvaWH3+np/ES8fbbgpny4Da8p50wvNLetKht9WgeB/O4jPshwfLxs6ePds49jxvnXXWwfXXX992/oABA4yzn19Jyj7H7j69pPesKDBCIWQ/Uhh+wFBMf/Be1NX2wtyvvoDjsCoQEIR+rvy3izBkRaLvStV2DlXdpVIISAhUiqW7uZ8SAt1sAD1eBESg0whICHQayk65ER0ZzrTz4Ey83fySTr91yPkaZ+8pGPiTOz03NDSgrq7OCAdeZyv+8HdW81lrrbXMvfg6k3vp9FNY8B6jR4/G4YcfblYCeC+KjB/adbqjnWW/Ro4cCe5l8eWXX6JXr15tFYk6ei+dLwJLIyAhoLFRFAISAkXBrIeIgAgUgYCEQBEgd+ARtn6/nVFvamoyuzrnb+LW2NiI+vp649QvWLDAJOvScf/ss8+Mc00H/4YbbsCECRPM7zaGnyE9PHj+K6+8Yt6zqwpWaPDcxTcW60Dzl3iqTUoeOnQopk2bZp7JtvNZPLRB3fIS1vWWgISAxkJRCEgIFAWzHiICIlAEAhICRYDcwUcwPIjOOh1k/rMx+za8x276RUHAXaHtKsBxxx1nZv950CHaaqut0L9/f/P+z3/+c5x99tnmda4M8J58nSsA/GnDh7jCkJ/828GmL/F0jjH+GzFiBLjZGFcEuHphE4ptnkFnPEv3qGwCEgKVbf+i9V5CoGio9SAREIEuJiAh0MWAO3h7Oui2fCcddv6jw0/Hmbbijr1PPfWUEQh0+m+88UbzBOtUX3LJJcaxp0M0aNAgIwRszgHvnb9CwHNsfoF9nX/zsNWEOtj8ZZ6+//77Y+rUqaYNNnSJgkeHCHQWAQmBziKp+yyTgISABogIiEBUCEgIlJYl7ey5DZuh877vvvuacBrOnH/wwQdmMy977LDDDjj11FPNnzx34MCBxrm3Dj6vsSsAnO2noGA4EXcQtmFEfN+uMljx0ZlU2Cc6/wceeKBZweCKADcxs+JFoUGdSbuy7yUhUNn2L1rvJQSKhloPEgER6GICEgJdDLiDt6cj8+abb2L77bc3zrlN7mUCMR1nOs1///vf8etf/7pt5p7hPdbh5/l2Z2D+zA8nsiKDs/28H6/jPa2I6MrZefZryJAhZkXAChW76mATojuISqeLwPcISAhoUBSFgIRAUTDrISIgAkUgICHQfsj5oTR2Fpvx/Jy9J0c643RuOTNP5za/nKetw8/zeLBsp3Xa77zzTowaNaqtPCjvQae8b9++5t6834cffljWSbXs/7BhwzBlyhTTb60CtH/c6cz2E5AQaD8rnbkcBCQElgOeLhUBESgpAhIC7TOHreFvd+C1V9H5tzH8tsKPnZG3woFOPa+nE2w356Lj//bbbxvBwHtuttlmWHXVVY144Dmbb745jj32WPMYhtHYcqHta23pnSUhUHo2iWKLJASiaNUS7JOEQAkaRU0SAREoiICEwA9jYxgNZ+ltHX5b2tOW2iRDztrzbxtjz2tefPFFPPLII+YBdFAuvvhiMxtua/hTDNiZ8T322AMbbbSRyQWw+QG2ZbacZzlX15EQ+OFxpjOWn4CEwPIz1B3aQUBCoB2QdIoIiEBZEJAQ+GEzMaadDrqNqadTS2eem3hxtp+/2zCgI488El9//bV5jTP+NrGX17CE50UXXQS7ezCdf+vc2/h/WwqUPykSeB/+TqHBlYFyPSQEytVy5dVuCYHyslfZtlZCoGxNp4aLgAgsRkBC4IeHhI355yw/nXMb+sOynHPnzsU222xjhAKdEMb+c0aff/O8SZMmgQ4/f2fIDzcH43kUESuuuKJZIbCJu7bGvw01yi/tScFQznH1EgI/PM50xvITkBBYfoa6QzsISAi0A5JOEQERKAsCEgI/bCY69azZT4edx9ixY3HHHXeAOQF07umgsxynrfJjE4HpyNtwIV5ry3hyZaG5udnM8PPetnoOnRi74y7Pp9CwCcXlXlnHDwIMXyxZOEQIB84PG0BniEA7CUgItBOUTls+AhICy8dPV4uACJQOgXIVAjYUx5bHtETtrLmt4pN/ng2/sTPv1mngtfY9/s57cFb+6aefbpuFZ+lLOue29v6mm25qqvrw3AEDBuCcc85ZZMbe7tZr22WrBeWX87QiwD7bJg7zGisKuqKuf+eOvjB3O/60vy/6BL6aCkIcNPRg3DPlHrSEjQjB6kkuvMCFEzqAl0FgrneNNHBCl4bo3KbqbpEnICEQeROXRgclBErDDmqFCIjA8hModyFgd+Klg53vUNsZd7tTri3xyXNsKU+b9GtLfT722GOYOXOmccIZ8nPttdeaGXmez1yAE044wczw282xfvrTn5Z1uE4ho8e6+lkX3Tr/IZXLUm/nOyGSIXD4/kfhvqn3oSH8Cmmk4CCGeCYON3CARBIZ+AgQRyx04VIcOBQDhbRS11QqAQmBSrV8kfstIVBk4HqcCIhAlxEoVyFgk2nZfn7501GnKLAx/LbcJ8N1OPPOEB5ew3Ntgi5Dcrhrr11FeP311zF79uy2BN3tttsOxx9/vLmGYUAjR4404T12xt4m9naZcUr+xvmrAPkrA9QIdOSzHQgQIB0EOGLI4bhv6jQsCL5FyskAFAJ+HK7vAvE0Mo6PNGJIwIPHfc64IiAhUPKjoJQaKCFQStaIcFskBCJsXHVNBCqMQLkKAX7h08HnYSv49OrVq638JuvuUxzQ6acosLP+r776Kvbbb7+267hRFx16G4LD2P8NN9zQzPzX19eb2H9bFcjey64o8CblnMC7/EN9sXAg4/zzNSe7WMDfzWsZBEEGh+0/AvdOuxfz/Wb4bogAHmJ+DE7ggp5/2gXScJGgTY0QyP1b/obqDhVCQEKgQgzd3d2UEOhuC+j5IiACnUWgXIUAnXHriNudavkaHfgFCxaY9ygUbrrpJpx55pltKwI8l0m6dXV1bSsEDANi/D+dCCboWsffxvnbvAAKC+v4c4WA9yn3JN6Oj6Ms9+zxnaeec//bsgT4jn0NzAfwUzhkyHDcM+0+LEi3IIzFwDu5IeBwRcB1wR9Mx5YQ6LhVdEWWgISARkJRCEgIFAWzHiICIlAEAuUqBKzzz3AgOurcvMuKg4MPPtjE+NtEYc7ws1IPHXw68nvvvbcJ+eFBR54igNfyXlYI0NHnioC9B8+jwOB98p3/ct7kq7DhtagQYN0fe9j1gfxonjap4KcwYthQTJt6L1pSaYRuzKwKuPCNGEAQAxcGUg4QDwHPqgiFBhVmpgq9SkKgQg1f7G5LCBSbuJ4nAiLQVQTKVQg8++yz+M9//mOwMDH4/PPPN067rQh04oknmveYG8A8ACb2cgbfvk8H3u4PYHMI8qsK2Zl/W+XHbuxlk5KtPRbfBbir7FQa9825+mGQTeSFYwqA5qUMm2Za3z3/Z+j7GDpiCKZOmYagNTQRQ2kve4cYr/Ed81rKBWJGCHCpQDkCpWH38mmFhED52KqsWyohUNbmU+NFQATyCBQiBKzjnF+ak7PqdLqto23Ld9LZts6y/d3WxmczrPNNBzu/ig+fwVAc3s9urHXcccdh4cKFZkaeib2zZs0yM/QUAptssglOPvnktmTgAw44oK0Gv3FOHcf8nT+Db4WDdfZ5X5tPkN/G/JKktp28J8+xewBUxqBizD/LfhLookKA6wS+H8J1s+6/5wB+Oo1YPA4/zWpADoYdNBT33Hc/goVcgQGS8WwKgQkFag4QJlxkPAqDEG4mA8TiKiFaGQOr03opIdBpKHWjZRGQEND4EAERiAqBQoSADcGxVXro6C8uCviaTa61X84UC5yV5zPp6NsZerKks2837GL8Pq959913MXz4cOP409n/6KOPzE/rmF999dXYaKON0KdPHyMauFMvr628cJ1ijcacEDBJwJzOz64IUASY6J4QCPzQiIBMOomqRAyZZCviFHRwMeTggzH1nvuw8JPPUdezHkkXWJj20SPuorY1BOKMEArhBNl/8PiMbJUmHSLQHgISAu2hpHOWm4CEwHIj1A1EQARKhEAhQoBNt2E1dLq5+RYdcMbQ07mnCGDVHuv0291y6cC3tLSYWXxeb2fk7U++du6552LixInG2edsO6+1zj2vpRCwewewHRQJfJ3n2r0C8jfmKhHMEWnG94UAZ/ptaFDgZ313+BkjD1w3RGtjA/790HQMHXYoWhJV8OPVqGlagB1+sy0m/+sfyMRq4cFBbWsSQboRTs+eQCbIbjIWi0kIRGTkFKsbEgLFIl3hz5EQqPABoO6LQIQIFCIE8h34/PKZNvyGKwZ0zL/99lv07t27LYnXVuHhzD/LeNprd9hhB7MiwIPXcpbfVuTZcccdccYZZ5hz+R6Tee2mYBQAPI/PssKEbbNJwREyU4l0ZckrAlYImJUeCr3qOJLNDaiujmPFut5YIR6id1015gQJfLWwBf/3ox6YM2cedhk6BKOuuBq1tf2wcm0SoZNEyknAybiIu1VwuLSgZOESsX15NENCoDzsVPatlBAoexOqAyIgAjkChQgBOyOfv2svZ+oZnmMPW8rTnstde9955x3jsM+ZMwfjx49fJG7/yCOPbNu195hjjsHPfvYzEz5kY/Lp3NPx5zOsoOAz7GqD3QuA5ys0qKuGd54QAKf+v0sWNiIuw5wJxgUlAT8JhCms2XcVrFGTwJH7/gxTn/8cz73xJW46dw/cO/0F3D9zLi696XYMHTEStcHXCGI+kuiBuFcLNw24Jou4q/qi+0aRgIRAFK1agn2SEChBo6hJIiACBREoRAjwGh7WCbcz9PybCcO2tCcdeobp8G9W+GHMPx11zur/6le/wm9/+1sze89rhg4d2jazzxAfm3hsdwjmdRQRVgjY/IN8IcDX7M7CBcHQRT9AYOnJwvTXTXKww4yBFJBpxUXnjsafr74BYw7dGNut24Tzb/0Uj7++EJPHbomG5EJMuP9LpPpujfGTrsdP1w7hxzJoDnoDqAclZZyRQbKJCHSAgIRAB2Dp1MIJSAgUzk5XioAIFJ/Adxs78dl51d5DxyR37rTz9nj88SfM79+r/biE5nKmng4+Z+HpsNP5/vrrrzFw4EAzi2+d9DfeeKMtF4Dn33nnnVhjjTXQo0cP82/NNddsq7xjv8Bt1SGbY5Bf2cfmGFBI5FcT4r15PgWEFQKVveNvV42xxVcE3PzRBD/jwwspAlrgxDLYeJ2NkGn4FredvTnW8t/C6L824d+vt+DBy3+BtNOEO59PYPzUT/H0yzOx0c/qESKJZOxHSGZqUeMBcVdCoKssGdX7SghE1bIl1i8JgRIziJojAiKwVAJ0+zOmrAtLujB2P0AmnUKQCZCI14MlX3baZXs8+dQTSKWCNp2QyqQRq4rB87JVW+ho08Gn020rBF122WU477zzjCCgE84Z+/yjZ8+emDdvXptgkJnKnQBHE23Mn4zb8cywYl4vCwk5YQg/0wrPSeLQIUPw1KMP49wzDsSAPp9gha+fwzm3J/HUOyGmX9YfrpvGrU9U4dL7P8Bz/30Tv1gzAVR7SKEWab8nEvFqMMpIKwLlPmaK234JgeLyrtinSQhUrOnVcREoOwIhQvgIEXCzrUwa2227HV59+UXEPIZyZLtTVWP0AII0kM4A1VUu/NDF/dP/ia233trU67chP5z15+w/D4b1rLLKKlh11VVN5aABAwZgwoQJbRV/WPOfybw2pEex+2U3fBZrsJGVHCmLCoFcKH8YBEi1NqK6OkTzvE/xq19uDy+zANed8kv0Dz/BuKnNuP+VBjw0bj0z2O55oRZXzHgXM56fic1+thLQvABhzQoIYr3hhzHEJQTKfcAUvf0SAkVHXpkPlBCoTLur1yJQjgRCZJAOm+E6HtLJNH6z/U54/ZWZ2Ga7DVFT04LQaYYfAF6MYUJBdtYfdXj66U/x9VdNuPLKK3HKKae0hdwwZv+QQw4xKwP8/YgjjsCWW25pynrafQHyNwfjOYrdL8eRs6Q2m90CcisCuWTh3IpAdiMBvpeGGzRzDQnnnXYebr7uZow6aENsv56Dc27/EI+8Ng8PT9gRTQsaMf6uj9C40s8w5pprsMV6qwN+K8J4jVkVyPguapUjEJWBU7R+SAgUDXVlP0hCoLLtr96LQDkR4HpAOmxFGGRruz9w3wM49NDDMHjQ5th36Grwqj6EF/OQyaTheAvghL3wwjMJ/PlPb+CLOZzdrcb666+Po446yoQE0cmn88/VAP5td+C15T3tT75vRQBXBCgGtCJQTiNnCW2ls0+P3ySdZKfrbcYJf/p+Gp4TwGWegJ/EmPPOw5XjrsVP+1bhsH1+iXte/hxPvPkpHhh/MP583QN46u15OO+W2zF45Ej05fgLUvBjcbT4cSNMq7UiUOYDpvjNlxAoPvOKfKKEQEWaXZ0WgbIkQAetNeMDbhIxtCCTbkG/vuugrjrAbnuviv1GJFBVnUFL67eIVbeg2lsDt17Xisl3z8G99/zDCIF+/fphgw02ME6/deaZF2ATewkm38nn6xQBtmIQr+N9dJQ5Aev1225QCDh2jSAXNsRVgSCD80adhWuuug7p1hRWcIBVe9Xio9DHN61JbL7Kyvjy4y+x87DhOPOqiahdsR96NKZQE48hSDhIhY5ZpdKKQJmPl25ovoRAN0CvxEdKCFSi1dVnEShPAkzmTPlAxvdRVdUABylkkgF61ayC7XdeE8ectDLqen2BZOYz9O5Tg39MAyZe0oy7p0zGNtvtgtraOpMobCv12BUAzvjzaGpqMiFBXAmYP3++OY9/c9MwlvrMFwWq5FOeY6it1fnT/8zipQhwmIUSgP9N+ylMf+ABHHzgIYg5HpqbmtHU2IgnH5yOkfsPReuPeqKxsQk1jT522e43uPneB9BU7aGqphp9QwdhOkQ6DODEXbiuA6apK1m4zMdMkZsvIVBk4JX6OAmBSrW8+i0C5UeAQqAlCcSr6MUtRMzx4aAK/535NgZssxkOOHR9DNwvROh9Ahd98dDkADPu93Hb3yZj0823QCwWNysB/EfH3u4ZQCFAZ5+z/qwY1NDQYEqC8qBwoNNvhUD+ykH5EazMFtvKUPm241gy2wTksgQclysCAYLQx9vv/A+fzfkMe+09EH169kHf3itixkP/wsorr4y4ceh97HfocEy9dyrCBg5KH0HCQ2sC4K4UtSnWIMrlIHNPMp+bk5lXdIhAuwlICLQblU5cHgISAstDT9eKgAgUkwCdt1bu0uoFcJ1WU63FDRO46rJJGHXOafjNDmtj5DEroEefbzHvszVwwlFP4fxzL8FJfzw9WyFSR8URoDNl8zooAO3qTxiE8Oiuh0CG+SIu1wEyeOSxRzBk6DA0NjVgzTX747Jx4zFo0CA4oZvdm8IPEYu52P+Q/TDtnpwQYKVaD0iZ6rQhqoJcjJFZafBz9Uj5ZrZ8rQ4RaA8BCYH2UNI5y01AQmC5EeoGIiACRSLAsI3WTAtcNwaHYRdBiDP+eAZuuPY6+EEa8QSwydYr4MRTNsN1V76Hhnm9MGHiDdh0i81yU7RFaqgeUzIEbDiXXQ2wm7pxs7i4V4WY65lgoFdfewW33n4r7n/gPnz8ySe4/NLLsPa662KP3ffKVplyuOlc1pV3HWDIQftj2rQpCJpDs+8AvBD0/3m4JrcgF2/kZnJCgEpUQqBkBkYZNERCoAyMFIUmSghEwYrqgwhUBoGQOQFBA1w3gXTSxaknn47bbr4Rq632I9zwl2tx/XU34r6H7sHEScNx/JF3YY/d9sftd96Bqtq4ArQrY4h8r5c2LMi+wT0i6uvr4ftcVXLhOg4++fRT7L77bvjvW/814+See+7F3gMHIp3JIAhCVCUSaG5Joq6G4WTZWKKhI/bDlClTEabM7mMAHf6Qjj5DgJLZzOMwATgUAlwVYFCRhECFDsOCui0hUBA2XdRRAhICHSWm80VABLqPQBKZYAGS6QBnn3EJrrn6zwj8NOYv+AzViRB+mMGue+yL/739Curr1sDrr72BWDwBz3NM/L+OyiRAh4oCgHkfrBDFvI+6ujo4cLDa6quBm8Ux8ff80efjpJNONOfZZPCm5mbEY3HEE/Fssi+jfoIQw4YOxbQpU5ExVazo6CeBIAGEMcBryYIOa7IiwWQOKDSoMkdf4b2WECicna7sAAEJgQ7A0qkiIALdTMBHgCTmz2vAccediueemYm3334NCVb9iaWRCZqx4w574cWZz2LrbbbGrbffhX59V0HMhHZ0c9P1+G4hYEvD2r0g6OCzOtSXX36JESMOwMsvz0T//utg74F747JLLzfigLP+8+cvRO/ePYBcVjGrCDE3wJSdjVdh5JADMW3qNCQzScDjttYtgF+bFQKxFgRms7I60+dckFC39F8PLV8CEgLla7uyarmEQFmZS40VgYon8M0383HOOaNx00034NGH/41fbbYFEjHWfw/gxALsuONAPP74Y0iGc+CHMaRSNaiJeUh4WhGoxMHDylAUA3YTOAqAMWPG4E9/uhasFLT3oIG4686/I+SO1G4cTsjVo6z/z/Ahz+QTB3DjIYJ0Em48Bj9wcOD+h2LatPvQ4jchdFvhIAknU2eEgB9vBSUrUGuQ24AhadFKHIGF91lCoHB2urIDBCQEOgBLp4qACBSFgP0CZElPlvOkI8efdM6OOvJ3uOnmWzB48EBMnDgBq62yKpJJH/G4B7ghdtppTzz22L+RDL+CAyYV18LTrq5FsVt3PoTJv4lEYpEm2GpBHD9cETj33HPNSsDNN9+MvfbaC1tuuQVOPOl41FTXmbHFuH7jrNs9BnLF/wPfh+uFCEMfjuuaDcJGDDkQU6fei1TQitBJw0EGjgkN8hB4GSMegO/ao+Kh3Tk6yvPZEgLlabeya7WEQNmZTA0WgcgTsJVdOJvLgz8pBHbbbTc88vCj2HW3XXH11RPRv39/s8kX51w910EQBth5p13w2OOPIQgyJs47pHOnqdjIjxmG7NDedgWAjj//zo6BECeffDJuuukmkx+www474LrrrsPaa/fP5QK0d4BwrGXH47BhwzFl8lT4Zpzl1AMThM0f2fOUoR75YdelHZQQ6FK8urklICGgsSACIlBqBEwctueBs7yc1eXuvjvttBOeeuopbLvttpg6daqp/EJxQMeO5/J3XrfzzjvjsccoBII2J1C7AJeahTu/PRwrtDk3fuNhyoPG47jllltw4Qk/iAAAIABJREFU9tlnY8GCBWasfPbZZ2blgOPHntvR1mSFwDBMmTLFjDmNr44S1PntISAh0B5KOme5CUgILDdC3UAERKCTCdD554wuvwibm5txxBFHGOe+uroar732mnHg+D4dOzp0DP2wm0VJCHSyMcrkdnYViWOBjvknn3yCt956C4MHD0bv3r2N8//+++8vskpgNxfraBclBDpKTOcXQkBCoBBquqbDBCQEOoxMF4iACHQxATr4dNIYz33hhRfiL3/5C7bZZpu2mX46YvySzOYNhKYKTLY2vFYEutg0JXt7CgCOC64OceWI4T8UBOussw4mTpxoVpRsmJANGWJJ2UJm8yUESnYYRKphEgKRMmfpdkZCoHRto5aJQKUSaGhoMDO4xx9/PG677TbsueeemDBhAlZfffW2kA+yoUPGfxQNNkRDKwKVOWooBF544QX861//MrkAc+bMwahRo7DRRhthn332MePDCgX+zoNCUkKgMsdLOfRaQqAcrBSBNkoIRMCI6oIIRIwAQ4MGDRqERx55xCQIWxHA2V4edN4YMmQdOTqBFA784pQQiNhgaGd33nzzTRxwwAF44403zPi45557zNihSOT44Ow/x4fdWI6igL8XstGcVgTaaRSdtlwEJASWC58ubi8BCYH2ktJ5IiACnUmAzlR+oqXNCaAI4AoARcAWW2yBhx56yMR4t7S0oLY2W5edR7ZaUFYU2C9MhQZ1poW6514cFxwDFHlM+GVeCO1rk79tZSAb3kMnf9111zXnMJTskksuwX777WdWj/iaFYmLz/zbMbO0XtqEdQpOjk0KTf7O9rAtw4cPN0nrPM+WLrVCw5a9teObAraQlYfusYCeWioEJARKxRIRb4eEQMQN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D1+exC4HnMp5E69j3367kpXfG89BaJKHn7rvHwwdOoKtDx/MaacNoKbuG554+llWXff/eO+td/lxxnRWXnElNlq3D2++8QZb7LofK626PDVxgahxFk8++TTTvAoOOXR/agt12CmXfz71Iu+88w6RFbLj9juZMqD//uAj+u29J916dC8+1oJMAxufXN0XXHLmldzz0DtMvGUCm221YSIcpMpRFBIHBa6//hbOPnsct91zB7/den2yjgiV1uVYlMFr26FTVCHQobj1ZkpACSgBJfArIaBCoAwWsi1CQB5LxICMLRnpruvS2NhINivlPhc/JCwnNIm2Uis/KeGZt/KcOvJUrrllIusesDEz584mnFlg9jvf8+jdj7PdVtuaKJpMOt10L7my3MsY98WY/IXvloTaFPIetuz8p1PGAxGJB8K2jCBIhIB0Fc5D1MDHk59m5wOHctbEG9mv305Umt9DGIr3IsKf8x8OO+RQPo5X5oGHbqfyh48YOHAoqV5r8vTDj1I3ZyaHHXIQf9p9O4afdjrnTLyLLX+/CV2jRsK50zn2mJN4t6GWp566h24NM3nqiWcYeualfD7tcwI/z+abb84KK6zC19O+45ZbrqNP3zWSPgPmj4QeOaYk6XffTOHwfU+g97p7cdr5g+mxQnWxI4OFIwkLYb1JEp780ods9ttNqelRTcq2yZr+DHq0lYAKgbaS03FKQAkoASWwNBNQIVAGq99WIeB5njHIS8a47NA3/3mhRxej2koi4FNSvlNq8Xsh9z15L8cOOBarb4qatbuQrspSmJkj96/5ZOakef/tD+le05U4iozwkOvL3+IdkH+XhMiimH0vIJ1OY8WREQEyx0CMevEOyA56c49A2MAnkyex08FDOGPCTezXbwfp92vanZkxdoRTmMml557NWde/xJufv0fl1NcZOHQUT0z+iGuuu5atNl3XhAhN/fhtBp4yiP5/v4G99/6j2f0PZn3JoCHDeWVudx547DaCT6ZwzOHH8NVcm/HXXsXKK/binnvv5OLzL2f11dblrrtuYq21+yAegKTkqCQNS1JxwNefPcsBex3PIUdeyGH9D8CpjPEin2orgxuIh6ReFBoRPWj0wa1MujS4LVQ1KoNXs9NMUYVAp1kKnYgSUAJKQAmUEQEVAmWwWG0RAiVj/L777uOggw4yRnkpdKflR06aiVkSry/N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",series:Array[0]}}:{},this._devMode?{calibrationPlan:[{type:"axis_calibration_point",axis:"horizontal",pointIndex:0,desc:"Choose origin",cloneSource:!0,point:{x:"xmin",y:"ymin"},may:[],stepIndex:0},{type:"axis_calibration_point",axis:"horizontal",pointIndex:1,desc:"Choose second horizontal axis point",point:{x:"xmax",y:"ymin"},may:[],stepIndex:1},{type:"axis_calibration_point",axis:"vertical",pointIndex:0,desc:"Origin already chosen",cloneDest:!0,point:{x:"xmin",y:"ymin"},may:[],stepIndex:2},{type:"axis_calibration_point",axis:"vertical",pointIndex:1,desc:"Choose second vertical axis point",point:{x:"xmin",y:"ymax"},may:[],stepIndex:3},{type:"axis_calibration_values",may:["may_extract_axes","may_define_matrix"],desc:"Enter axis values",axis:null,stepIndex:4},{type:"enter_data_points",may:["may_extract_axes","may_define_matrix"],desc:"Enter data points",axis:null,stepIndex:5}]}:{})}},{key:"_processDataTypes",value:function(){this.DataTypes=w.map(function(e){return Object(v.a)({},e,{multiPoints:e.dataPoints.length>1,dataPoints:e.dataPoints.sort(function(e,t){return e.isReferencePoint===t.isReferencePoint?0:e.isReferencePoint?-1:1}).map(function(e,t){return Object(v.a)({},e,{dataPointIndex:t})})})}).map(function(e){return Object(v.a)({},e,{lookup:e.dataPoints.reduce(function(e,t,i){return Object(v.a)({},e,Object(E.a)({},t.abbrev,i))},{})})})}},{key:"_buildCalibrationPlan",value:function(e,t,i){return e.filter(function(e){return e.type===T.AXIS_CALIBRATION_POINT&&(e.axis===t||t===j.BOTH)||e.type!==T.AXIS_CALIBRATION_POINT}).map(function(e,t){return Object(v.a)({},e,{stepIndex:t})})}},{key:"_bindHandlers",value:function(){this.mousePointerMoved=this.mousePointerMoved.bind(this),this.mouseLeftClicked=this.mouseLeftClicked.bind(this),this.raiseMousePointerMoved=this.raiseMousePointerMoved.bind(this),this.subscribeToOurEvents=this.subscribeToOurEvents.bind(this),this.unsubscribeFromOurEvents=this.unsubscribeFromOurEvents.bind(this),this.graphTypeChanged=this.graphTypeChanged.bind(this),this.dataSeriesCountChanged=this.dataSeriesCountChanged.bind(this),this.dataPointsCountChanged=this.dataPointsCountChanged.bind(this),this.axisTypeChanged=this.axisTypeChanged.bind(this),this.toggleCombinedOrigin=this.toggleCombinedOrigin.bind(this),this.discriminatorChanged=this.discriminatorChanged.bind(this),this.includeIndividualsChanged=this.includeIndividualsChanged.bind(this),this.prevStep=this.prevStep.bind(this),this.nextStep=this.nextStep.bind(this),this.finishWizard=this.finishWizard.bind(this),this.zoomToolZoomOut=this.zoomToolZoomOut.bind(this),this.zoomToolZoomIn=this.zoomToolZoomIn.bind(this),this.zoomToolSquaredChanged=this.zoomToolSquaredChanged.bind(this),this.zoomToolRefresh=this.zoomToolRefresh.bind(this),this.toggleEditMode=this.toggleEditMode.bind(this),this.toggleAdvancedMode=this.toggleAdvancedMode.bind(this),this.pointZoomZoomOut=this.pointZoomZoomOut.bind(this),this.pointZoomZoomIn=this.pointZoomZoomIn.bind(this),this.pointZoomSquaredChanged=this.pointZoomSquaredChanged.bind(this),this.nudgeZoomOutX=this.nudgeZoomOutX.bind(this),this.nudgeZoomInX=this.nudgeZoomInX.bind(this),this.nudgeSquaredChangedX=this.nudgeSquaredChangedX.bind(this),this.dataTableFontSizeDown=this.dataTableFontSizeDown.bind(this),this.dataTableFontSizeUp=this.dataTableFontSizeUp.bind(this),this.nudgeZoomOutY=this.nudgeZoomOutY.bind(this),this.nudgeZoomInY=this.nudgeZoomInY.bind(this),this.nudgeSquaredChangedY=this.nudgeSquaredChangedY.bind(this),this.seriesSelectorLinesUp=this.seriesSelectorLinesUp.bind(this),this.seriesSelectorLinesDown=this.seriesSelectorLinesDown.bind(this),this.toggleZoomTracksPointNudgesClicked=this.toggleZoomTracksPointNudgesClicked.bind(this),this._getConfig=this._getConfig.bind(this),this.addAxisPoint=this.addAxisPoint.bind(this),this.cloneSourceAxisPointToDest=this.cloneSourceAxisPointToDest.bind(this),this.addAxisPointValue=this.addAxisPointValue.bind(this),this.axisLogSettingChanged=this.axisLogSettingChanged.bind(this),this.removeAxisPoint=this.removeAxisPoint.bind(this),this.addDataPoint=this.addDataPoint.bind(this),this.removePoints=this.removePoints.bind(this),this.nudgeSelectedPointBy=this.nudgeSelectedPointBy.bind(this),this.nudgeAxisPointBy=this.nudgeAxisPointBy.bind(this),this.zoomToAxisPoint=this.zoomToAxisPoint.bind(this),this.moveCellSelection=this.moveCellSelection.bind(this),this.cycleBetweenSeries=this.cycleBetweenSeries.bind(this),this.selectPoint=this.selectPoint.bind(this),this.updateOverlay=this.updateOverlay.bind(this),this.setCalibrationPlanIndex=this.setCalibrationPlanIndex.bind(this),this.setCalibrationPlanIndexByType=this.setCalibrationPlanIndexByType.bind(this),this.getPlanStep=this.getPlanStep.bind(this),this.extractAxes=this.extractAxes.bind(this),this.currentSeriesChanged=this.currentSeriesChanged.bind(this),this.addSeries=this.addSeries.bind(this),this.updateSeries=this.updateSeries.bind(this),this.removeSeries=this.removeSeries.bind(this),this.toggleShowRelativeValues=this.toggleShowRelativeValues.bind(this),this.persistSettings=this.persistSettings.bind(this),this.recoverSettings=this.recoverSettings.bind(this)}},{key:"setCalibrationPlanIndex",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(e){};this.setState(function(t){return{calibrationPlanIndex:e(t.calibrationPlanIndex)}},function(){i(t.getPlanStep()),t.extractAxes()})}},{key:"setCalibrationPlanIndexByType",value:function(e){this.setState(function(t){return{calibrationPlanIndex:t.calibrationPlan.findIndex(function(t){return t.type===e})}})}},{key:"updateOverlay",value:function(e){var t=p.a.findDOMNode(this).parentElement,i=document.getElementById("g2dMetaHost"),n=i.offsetWidth,a=i.offsetHeight,s={top:t.offsetTop,right:n-(t.offsetWidth+t.offsetLeft),bottom:a-(t.offsetTop+t.offsetHeight),left:t.offsetLeft},o=document.getElementsByClassName("duxpanelBackdropHack")[0]||document.createElement("style");o.className="duxpanelBackdropHack",o.innerText=[".duxpanel-backdrop { "].concat(Object(m.a)(Object.keys(s).map(function(e){return"".concat(e,": ").concat(s[e],"px !important; ")})),[" }"]).join(""),document.body.appendChild(o)}},{key:"dataPointCount",value:function(e){return Object.keys(e).filter(function(e){return"id"!==e}).length}},{key:"addAxisPoint",value:function(e){var t=this,i=e.point,n=e.pointIndex,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},s=!!i.id,o=i.id||b()();this.setState(function(e,t){var a=e.data.axisConfig;return{selectedAxisPointId:o,data:Object(v.a)({},e.data,{axisConfig:Object(v.a)({},a,{points:s?a.points.map(function(e){return e.id!==o?e:Object(v.a)({},e,i)}):[].concat(Object(m.a)(a.points),[Object(v.a)({id:o},i,{pointIndex:n,type:Q.AXIS_CALIBRATION})])})})}},function(){t.extractAxes(),t.zoomToolRefresh(t.state.settings.zoomTracksPointNudges?i:null),a()})}},{key:"cloneSourceAxisPointToDest",value:function(){var e=this,t=this.state,i=t.calibrationPlan,n=t.data.axisConfig,a=n.points;if(n.combinedOrigin){var s=i.findIndex(function(e){return!!e.cloneSource}),o=i.find(function(e){return!!e.cloneDest}),r=Object(v.a)({},G(a[s],["id"]));this.addAxisPoint({point:r,pointIndex:o.pointIndex},function(){e.setCalibrationPlanIndex(function(e){return e+1})})}}},{key:"applyAbsIf",value:function(e,t){return e?Math.abs(t):t}},{key:"doMakePointRelative",value:function(e,t,i){return{x:e.x,y:this.applyAbsIf(t.symmetric,i.y-e.y),origDp:i}}},{key:"recalcDependentPoint",value:function(e,t,i,n){var a=this.logExpandPoint(Y(e,{x:t.x,y:t.y}));return Object(v.a)({},t,{dataPoint:this.doMakePointRelative(n.dataPoint,i,a)})}},{key:"buildPoint",value:function(e){var t=e.id,i=e.dataType,n=e.dp,a=e.point,s=e.dataPoint;return Object(v.a)({},a,{dataPoint:s,id:t,type:n.pointType,dataPointIndex:i.lookup[n.abbrev]})}},{key:"makePoint",value:function(e,t,i,n,a,s,o){var r=this,c=Object(E.a)({},a.abbrev,this.buildPoint({id:i,dataType:t,dp:a,point:s,dataPoint:o}));if(t.multiPoints){var l=e.data.axisConfig.matrix;if(a.isReferencePoint)Object.keys(n).forEach(function(e){if("id"!==e&&e!==a.abbrev){var t=r.getDataPoint(n[e].dataPointIndex);c[e]=r.recalcDependentPoint(l,n[e],t,c[a.abbrev])}});else{var d=this.getDataPoint(0),u=n[d.abbrev];c[a.abbrev]=this.buildPoint({id:i,dataType:t,dp:a,point:s,dataPoint:this.doMakePointRelative(u.dataPoint,a,o)})}}return c}},{key:"getAdvancePointersState",value:function(e,t,i,n){var a=(n+1)%t.dataPoints.length;return e?{currentPointIndex:a>n?i:i+1,currentDataPointIndex:a}:{currentPointIndex:i,currentDataPointIndex:n}}},{key:"syncIdToIndex",value:function(e,t){var i=e.currentPointIndex,n=e.currentDataPointIndex,a=this.getDataPoint(n),s=e.points[i],o=s?s[a.abbrev]:null;this.setState(function(t,i){return{data:Object(v.a)({},t.data,{series:t.data.series.map(function(t){return t!==e?t:Object(v.a)({},t,{selectedPointId:s?s.id:null,selectedSubPointId:o?o.id:null})})})}},t)}},{key:"addDataPoint",value:function(e){var t=this,i=e.point,n=e.dataPoint,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},s=this.state.currentSeriesId,o=this.getSeriesById(s),r=o.currentPointIndex,c=o.currentDataPointIndex,l=o.selectedPointId,d=o.autoAdd,u=o.points,h=d&&r>=u.length,g=this.getDataPoint(c),A=this.getDataType(),p=!h&&l||b()(),f=b()();this.setState(function(e,a){return{data:Object(v.a)({},e.data,{series:e.data.series.map(function(a){return a.id!==s?a:Object(v.a)({},a,{selectedPointId:p,selectedSubPointId:f},t.getAdvancePointersState(d,A,r,c),{points:h?[].concat(Object(m.a)(a.points),[Object(v.a)({id:p},t.makePoint(e,A,f,{},g,i,n))]):a.points.map(function(a,s){return s!==r?a:Object(v.a)({},a,t.makePoint(e,A,f,a,g,i,n))})})})})}},function(){var e=t.state.currentSeriesId;t.syncIdToIndex(t.getSeriesById(e),function(){t.zoomToCurrentSubPoint(e),a()})})}},{key:"zoomToCurrentSubPoint",value:function(e){var t=this.state.settings.zoomTracksPointNudges,i=this.getPlanStep();if(i.type===T.ENTER_DATA_POINTS){var n=this.getSeriesById(e),a=n.currentPointIndex,s=n.currentDataPointIndex,o=n.points[a],r=this.getDataPoint(s);if(!r)return;var c=o?o[r.abbrev]:null;if(!c)return;this.zoomToolRefresh(t?c:null)}else if(i.type===T.AXIS_CALIBRATION_VALUES){var l=this.state.data.axisConfig,d=l.focusedAxisPointIndex,u=l.points;if(d>=0&&d1&&void 0!==arguments[1]?arguments[1]:function(){},n=this.state.currentSeriesId;this.setState(function(t,i){return{data:Object(v.a)({},t.data,{series:t.data.series.map(function(t){return t.id!==n?t:Object(v.a)({},t,{points:t.points.filter(function(t){return!e.includes(t.id)})})})})}},function(){var e=t.getSeriesById(t.state.currentSeriesId);t.selectPoint(null,null,e.points.length,0,!0,i)})}},{key:"getSelectedPoint",value:function(){var e,t=this.state.currentSeriesId,i=this.getSeriesById(t),n=i.selectedPointId,a=i.selectedSubPointId;return i.points.forEach(function(t){t.id===n&&Object.keys(t).forEach(function(i){var n="id"!==i&&t[i].id===a?t[i]:null;n&&(e=n)})}),e}},{key:"_getAxisPoint",value:function(e){var t=this.state.data.axisConfig.points;if(!(e>=t.length))return t[e]}},{key:"zoomToAxisPoint",value:function(e){var t=this,i=this._getAxisPoint(e);this.setState(function(t,i){return{data:Object(v.a)({},t.data,{axisConfig:Object(v.a)({},t.data.axisConfig,{focusedAxisPointIndex:e})})}},function(){t.zoomToolRefresh(t.state.settings.zoomTracksPointNudges?i:null)})}},{key:"_doNudgeAxisPointBy",value:function(e,t){var i=t.x,n=t.y,a=this._getAxisPoint(e);if(a){var s=Object(v.a)({},a,{x:a.x+i,y:a.y+n});this.addAxisPoint({point:s})}}},{key:"nudgeAxisPointBy",value:function(e,t){var i=t.x,n=t.y;this._doNudgeAxisPointBy(e,{x:i,y:n});var a=this.state,s=a.calibrationPlan,o=a.data.axisConfig.combinedOrigin,r=s[e];if(o&&(r.cloneSource||r.cloneDest)){var c=s.findIndex(function(e){return e!==r&&(!!e.cloneSource||!!e.cloneDest)});-1!==c&&this._doNudgeAxisPointBy(c,{x:i,y:n})}}},{key:"nudgeSelectedPointBy",value:function(e){var t=e.x,i=e.y,n=this.getSelectedPoint();if(n){var a=this.state.data.axisConfig.matrix,s={x:n.x+t,y:n.y+i},o=this.logExpandPoint(Y(a,s));this.addDataPoint({point:s,dataPoint:o})}}},{key:"cycleBetweenSeries",value:function(e){var t=this;this.setState(function(t,i){var n=t.currentSeriesId,a=t.data.series,s=a.length,o=a.findIndex(function(e){return e.id===n});return(o+=e)>=s?o=0:o<0&&(o=s-1),{currentSeriesId:a[o].id}},function(){var e=t.state.currentSeriesId;t.zoomToCurrentSubPoint(e)})}},{key:"moveCellSelection",value:function(e){var t=this,i=e.x,n=e.y,a=this.state.currentSeriesId,s=this.getSeriesById(a),o=s.points,r=s.currentPointIndex,c=s.currentDataPointIndex,l=this.getDataType(),d=s.points.length,u=l.dataPoints.length,h=c+i,g=r+n;h>=u?(g++,h=0):h<0&&(g--,h=u-1),g>=d?g=0:g<0&&(g=d-1);var A=o[g][this.getDataPoint(h).abbrev];this.setState(function(e,t){return{data:Object(v.a)({},e.data,{series:e.data.series.map(function(e){return e.id!==a?e:Object(v.a)({},e,{autoAdd:!A,currentDataPointIndex:h,currentPointIndex:g})})})}},function(){var e=t.state.currentSeriesId;t.syncIdToIndex(t.getSeriesById(e),function(){t.zoomToCurrentSubPoint(e)})})}},{key:"selectPoint",value:function(e,t,i,n,a){var s=this,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:function(){},r=this.state.currentSeriesId;this.setState(function(o,c){var l=s.getSeriesById(r).points[i],d=s.getDataPoint(0);return!l||l[d.abbrev]?{data:Object(v.a)({},o.data,{series:o.data.series.map(function(s){return s.id!==r?s:Object(v.a)({},s,{autoAdd:!!a,selectedPointId:e,selectedSubPointId:t,currentPointIndex:i,currentDataPointIndex:n})})})}:{}},function(){s.zoomToCurrentSubPoint(s.state.currentSeriesId),o()})}},{key:"addAxisPointValue",value:function(e){var t=this,i=e.value,n=e.pointIndex;this.setState({data:Object(v.a)({},this.state.data,{axisConfig:Object(v.a)({},this.state.data.axisConfig,{points:this.state.data.axisConfig.points.map(function(e,t){return t!==n?e:Object(v.a)({},e,{value:i})})})})},function(){t.extractAxes()})}},{key:"axisLogSettingChanged",value:function(e){var t=this,i=e.axisIndex,n=e.enabled;this.state.config.axisType;this.setState(function(e,t){return{data:Object(v.a)({},e.data,{axisConfig:Object(v.a)({},e.data.axisConfig,{axes:e.data.axisConfig.axes.map(function(e,t){return t!==i?e:Object(v.a)({},e,{log:n})})})})}},function(){t.extractAxes()})}},{key:"removeAxisPoint",value:function(e,t){this.setState({data:Object(v.a)({},this.state.data,{axisConfig:Object(v.a)({},this.state.data.axisConfig,{points:this.state.data.axisConfig.points.filter(function(t){return t.id!==e.id})})})},t)}},{key:"_buildMatrix",value:function(e){var t=function(t){var i=e.find(function(e){return e.axisType===t});return i&&i.from&&i.to?i:null},i=function(e,t){var i=e?e.to[t]-e.from[t]:null,n=e&&e.to.value&&e.from.value?e.log?Math.log10(e.to.value)-Math.log10(e.from.value):e.to.value-e.from.value:null;return n&&i?n/i:1},n=t(j.HORIZONTAL),a=t(j.VERTICAL),s=this.state.config.axisType,o=(s===j.BOTH?[n.from.x,a.from.y]:s===j.HORIZONTAL?[n.from.x,n.from.y]:[a.from.x,a.from.y]).map(function(e){return-e}),r=[i(n,"x"),i(a,"y")],c=null;return r.find(function(e){return!!e})&&(c=function(e,t){var i=D.d.apply(void 0,Object(m.a)(e)),n=D.c.apply(void 0,Object(m.a)(t));return Object(D.b)(n,i)}(o,r)),c}},{key:"_extractAxes",value:function(e){var t=this,i=function(i,n){var a=t.state.data.axisConfig.axes,s=a.length>i?a[i]:{};return Object(v.a)({},s,{from:e[2*i],to:e[2*i+1],axisType:n})};return this.state.config.axisType===j.HORIZONTAL?[i(0,j.HORIZONTAL)]:this.state.config.axisType===j.VERTICAL?[i(0,j.VERTICAL)]:[i(0,j.HORIZONTAL),i(1,j.VERTICAL)]}},{key:"extractAxes",value:function(){if(this.getPlanStep().may.includes(T.MAY_EXTRACT_AXES)){var e=this.state.data.axisConfig.points;this._setAxes(this._extractAxes(e))}}},{key:"getSeriesById",value:function(e){return this.state.data.series.find(function(t){return t.id===e})}},{key:"currentSeriesChanged",value:function(e){var t=this,i=this.getSeriesById(this.state.currentSeriesId);this.setState({currentSeriesId:e},function(){var e=t.state.currentSeriesId;t.zoomToCurrentSubPoint(e),t.props.raiseCurrentSeriesChanged({message:"Current series changed",prevCurrentSeries:i,currentSeries:t.getSeriesById(e)})})}},{key:"addSeries",value:function(e){var t=this,i=this.state.config,n=this.getDataType(i),a=this._buildNewSeries({id:b()(),label:e,pointsCount:i.dataPointsCount||0,dataType:n}),s=this.getSeriesById(this.state.currentSeriesId);this.setState(function(e,t){return{currentSeriesId:a.id,data:Object(v.a)({},e.data,{series:[].concat(Object(m.a)(e.data.series),[a])})}},function(){t.props.raiseSeriesAdded({message:"Series added.",newSeries:a}),t.props.raiseCurrentSeriesChanged({message:"Current series changed",prevCurrentSeries:s,currentSeries:a})})}},{key:"updateSeries",value:function(e,t){var i=this,n=this.getSeriesById(this.state.currentSeriesId),a=Object(v.a)({},n),s=Object(v.a)({},n,{label:t});this.setState(function(i,n){return{data:Object(v.a)({},i.data,{series:i.data.series.map(function(i){return i.id!==e?i:Object(v.a)({},i,{label:t})})})}},function(){i.props.raiseSeriesLabelChanged({message:"Series labelChanged.",seriesBefore:a,seriesAfter:s})})}},{key:"getNextCurrentSeriesId",value:function(){var e=this.state,t=e.data,i=e.currentSeriesId,n=t.series,a=n.findIndex(function(e){return e.id===i}),s=n.length,o=s>1?a0&&e.id&&i.every(function(i,n){return n>=t||i.label!==e.label&&i.id!==e.id})}),a=n.length,s=e.dataSeriesCount,o=void 0===s?1:s,r=e.dataPointsCount,c=void 0===r?0:r,l=Math.max(n.length,o)-a,d=this.getDataType(e),u=[].concat(Object(m.a)(n.map(function(e){return e.id})),Object(m.a)(Object(m.a)(Array(l).keys()).map(function(e){return b()()}))),h=[].concat(Object(m.a)(n.map(function(e){return e.label})),Object(m.a)(Object(m.a)(Array(l).keys()).map(function(e,t){return"Series ".concat(t+1+a)}))),g=[].concat(Object(m.a)(n.map(function(e){return!0})),Object(m.a)(Object(m.a)(Array(l).keys()).map(function(e){return!1})));return{currentSeriesId:u[0],data:Object(v.a)({},t,{series:u.map(function(e,t){var n=h[t],a=g[t];return i._buildNewSeries({id:e,label:n,fixed:a,dataPointsCount:c,dataType:d})})})}}},{key:"configureSeries",value:function(){var e=this.state,t=e.config,i=e.data,n=this._buildConfiguredSeriesState(t,i);this.setState(n,function(){})}},{key:"finishWizard",value:function(){var e=this;this.setState({showHelperDialog:!1},function(){(0,e.props.raiseExtractionComplete)({message:"Extraction complete",series:e.state.data.series})})}},{key:"graphTypeChanged",value:function(e){var t=this;this.setState({config:Object(v.a)({},this.state.config,{graphTypeId:e.target.value})},function(){t.configureSeries()})}},{key:"dataSeriesCountChanged",value:function(e){var t=this;this.setState({config:Object(v.a)({},this.state.config,{dataSeriesCount:+e.target.value})},function(){t.configureSeries()})}},{key:"dataPointsCountChanged",value:function(e){var t=this;this.setState({config:Object(v.a)({},this.state.config,{dataPointsCount:+e.target.value})},function(){t.configureSeries()})}},{key:"axisTypeChanged",value:function(e){var t=this,i=e.target.value;this.setState(function(e,n){var a=e.data.axisConfig.combinedOrigin,s=ae(a&&i===j.BOTH);return{config:Object(v.a)({},e.config,{axisType:i}),fullCalibrationPlan:s,calibrationPlan:t._buildCalibrationPlan(s,i,a&&i===j.BOTH)}},function(){})}},{key:"toggleCombinedOrigin",value:function(){var e=this;this.setState(function(t,i){var n=t.data,a=t.config.axisType,s=n.axisConfig,o=s.combinedOrigin,r=!o,c=ae(r&&a===j.BOTH);return{fullCalibrationPlan:c,calibrationPlan:e._buildCalibrationPlan(c,a,o&&a==j.BOTH),data:Object(v.a)({},t.data,{axisConfig:Object(v.a)({},s,{combinedOrigin:r})})}})}},{key:"discriminatorChanged",value:function(e){var t=e.target.value;this.setState({config:Object(v.a)({},this.state.config,{discriminator:t})})}},{key:"getPlanStep",value:function(){var e=this.state.calibrationPlanIndex;return e1&&void 0!==arguments[1]?arguments[1]:function(){};this.setState(function(t,i){var n=t.settings.zoomTool;return e&&n.value<=1?t:{settings:Object(v.a)({},t.settings,{zoomTool:Object(v.a)({},n,{value:te(e,n.squared,n.value)})})}},t)}},{key:"_doPointZoomInOut",value:function(e){this.setState(function(t,i){var n=t.settings.pointZoom;return e&&n.value<=1?t:{settings:Object(v.a)({},t.settings,{pointZoom:Object(v.a)({},n,{value:te(e,n.squared,n.value)})})}},this.zoomToCurrentSubPoint(this.state.currentSeriesId))}},{key:"_doNudgeZoomInOut",value:function(e){var t=e.xy,i=e.out;this.setState(function(e,n){var a=e.settings.nudgeInfo,s=a[t];return{settings:Object(v.a)({},e.settings,{nudgeInfo:Object(v.a)({},a,Object(E.a)({},t,Object(v.a)({},s,{value:ie(i,s.squared,s.value)})))})}})}},{key:"_doNudgeSquaredChanged",value:function(e,t){this.setState(function(i,n){return{settings:Object(v.a)({},i.settings,{nudgeInfo:Object(v.a)({},i.settings.nudgeInfo,Object(E.a)({},e,Object(v.a)({},i.settings.nudgeInfo[e],{squared:t})))})}})}},{key:"zoomToolZoomOut",value:function(){var e=this;this._doZoomToolInOut(!0,function(){return e.zoomToCurrentSubPoint(e.state.currentSeriesId)})}},{key:"zoomToolZoomIn",value:function(){var e=this;this._doZoomToolInOut(!1,function(){return e.zoomToCurrentSubPoint(e.state.currentSeriesId)})}},{key:"zoomToolSquaredChanged",value:function(e){this.setState(function(t,i){return{settings:Object(v.a)({},t.settings,{zoomTool:Object(v.a)({},t.settings.zoomTool,{squared:e})})}})}},{key:"zoomToolRefresh",value:function(e){var t=this;this.setState(function(i,n){var a=i.settings.zoomTool.refreshToggler,s=i.settings.zoomTracksPointNudges;return{settings:Object(v.a)({},i.settings,{zoomTool:Object(v.a)({},i.settings.zoomTool,{refreshToggler:Object(v.a)({},a,{toggle:a.toggle++,point:Object(v.a)({},t.pointerFocus,e),showCross:s})})})}})}},{key:"toggleEditMode",value:function(){this.setState(function(e,t){return{settings:Object(v.a)({},e.settings,{editMode:!e.settings.editMode})}})}},{key:"toggleAdvancedMode",value:function(){this.setState(function(e,t){return{settings:Object(v.a)({},e.settings,{advancedMode:!e.settings.advancedMode})}})}},{key:"pointZoomZoomOut",value:function(){this._doPointZoomInOut(!0)}},{key:"pointZoomZoomIn",value:function(){this._doPointZoomInOut(!1)}},{key:"pointZoomSquaredChanged",value:function(e){var t=this;this.setState(function(i,n){return{settings:Object(v.a)({},i.settings,{pointZoom:Object(v.a)({},t.state.settings.pointZoom,{squared:e})})}})}},{key:"nudgeZoomOutX",value:function(){this._doNudgeZoomInOut({xy:"x",out:!0})}},{key:"nudgeZoomInX",value:function(){this._doNudgeZoomInOut({xy:"x",out:!1})}},{key:"nudgeSquaredChangedX",value:function(e){this._doNudgeSquaredChanged("x",e)}},{key:"nudgeZoomOutY",value:function(){this._doNudgeZoomInOut({xy:"y",out:!0})}},{key:"nudgeZoomInY",value:function(){this._doNudgeZoomInOut({xy:"y",out:!1})}},{key:"nudgeSquaredChangedY",value:function(e){this._doNudgeSquaredChanged("y",e)}},{key:"_doNudgeDataTableFontSize",value:function(e){this.setState(function(t,i){return{settings:Object(v.a)({},t.settings,{dataTableFontSize:{value:ne(e,t.settings.dataTableFontSize.value,[{from:5,to:6,increment:0},{from:6,to:16,increment:1},{from:16,to:17,increment:0}])}})}})}},{key:"dataTableFontSizeDown",value:function(){this._doNudgeDataTableFontSize(!0)}},{key:"dataTableFontSizeUp",value:function(){this._doNudgeDataTableFontSize(!1)}},{key:"_doSeriesSelectorLinesUpDown",value:function(e){this.setState(function(t,i){var n=t.settings.seriesSelectorLines;return{settings:Object(v.a)({},t.settings,{seriesSelectorLines:{value:te(e,!1,n.value,1)}})}})}},{key:"seriesSelectorLinesUp",value:function(){this._doSeriesSelectorLinesUpDown(!1)}},{key:"seriesSelectorLinesDown",value:function(){this._doSeriesSelectorLinesUpDown(!0)}},{key:"toggleZoomTracksPointNudgesClicked",value:function(){this.setState(function(e,t){return{settings:Object(v.a)({},e.settings,{zoomTracksPointNudges:!e.settings.zoomTracksPointNudges})}})}},{key:"subscribeToOurEvents",value:function(e,t){document.addEventListener(e,t)}},{key:"unsubscribeFromOurEvents",value:function(e,t){document.removeEventListener(e,t)}},{key:"raiseMousePointerMoved",value:function(e){document.dispatchEvent(new CustomEvent("mousePointerMoved",{bubbles:!0,cancelable:!1,composed:!0,detail:e}))}},{key:"mouseLeftClicked",value:function(){this.raiseMouseLeftClicked({pointerFocus:this.pointerFocus})}},{key:"raiseMouseLeftClicked",value:function(e){document.dispatchEvent(new CustomEvent("mouseLeftClicked",{bubbles:!0,cancelable:!1,composed:!0,detail:e}))}},{key:"logExpandPoint",value:function(e){var t=this.state.config.axisType,i=this.state.data.axisConfig.axes;return 0===i.length?e:Object(v.a)({},e,{x:t===j.HORIZONTAL||t===j.BOTH?i[0].log?Math.pow(10,e.x):e.x+ +i[0].from.value:null,y:t===j.VERTICAL?i[0].log?Math.pow(10,e.y):e.y+ +i[0].from.value:t===j.BOTH?i[1].log?Math.pow(10,e.y):e.y+ +i[1].from.value:null})}},{key:"mousePointerMoved",value:function(e){var t=e.x,i=e.y,n=e.offsetX,a=e.offsetY,s=e.context,o=e.chromeContext,r=e.dpr,c=e.scale,l=n*c,d=a*c,u=this.state.data.axisConfig.matrix,h=this.logExpandPoint(u&&!X(u)?Y(u,{x:l,y:d}):{x:null,y:null});this.pointerFocus={x:t,y:i,offsetX:n,offsetY:a,scaledOffsetX:l,scaledOffsetY:d,context:s,chromeContext:o,dpr:r,scale:c,valX:h.x,valY:h.y},this.raiseMousePointerMoved({pointerFocus:this.pointerFocus})}},{key:"_getConfig",value:function(){var e=Object(B.a)(x.a.mark(function e(){var t,i;return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return t=JSON.parse(this.props.config),e.next=3,this.processConfig(t);case 3:return i=e.sent,e.abrupt("return",i);case 5:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"processConfig",value:function(){var e=Object(B.a)(x.a.mark(function e(t){return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(t.dataUri||!t.imageUri){e.next=4;break}return e.next=3,H(t.imageUri);case 3:t.dataUri=e.sent;case 4:return e.abrupt("return",t);case 5:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}()},{key:"_buildDevSeriesState",value:function(e){var t=this,i=[b()(),b()()],n=["Model","Model + Drug"];return{currentSeriesId:i[0],data:Object(v.a)({},this.state.data,{series:i.map(function(i,a){return t._buildNewSeries({id:i,label:n[a],pointsCount:0,dataType:t.getDataType(e)})})})}}},{key:"componentDidUpdate",value:function(){var e=Object(B.a)(x.a.mark(function e(t,i,n){var a,s,o,r,c=this;return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(t.config===this.props.config){e.next=9;break}return this.persistSettings(),e.next=4,this._getConfig();case 4:a=e.sent,s=Object.keys(this.state).reduce(function(e,t){return Object(v.a)({},e,Object(E.a)({},t,void 0))},{}),o=this._getInitialState(),r=this._devMode?this._buildDevSeriesState(a):this._buildConfiguredSeriesState(a,o.data),this.setState(function(e,t){var i=e.data.axisConfig.combinedOrigin;return Object(v.a)({},s,o,{config:a,calibrationPlan:c._buildCalibrationPlan(e.fullCalibrationPlan,a.axisType,i&&a.axisType==j.BOTH)},r)},Object(B.a)(x.a.mark(function e(){return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:c.recoverSettings();case 1:case"end":return e.stop()}},e)})));case 9:case"end":return e.stop()}},e,this)}));return function(t,i,n){return e.apply(this,arguments)}}()},{key:"persistSettings",value:function(){W({component:this,localStorage:this.props.localStorage,settingsKey:this._settingsKey})}},{key:"recoverSettings",value:function(){q({component:this,localStorage:this.props.localStorage,settingsKey:this._settingsKey})}},{key:"componentDidMount",value:function(){document.title="graph2Data",this.recoverSettings(),window.addEventListener("beforeunload",this.persistSettings)}},{key:"componentWillUnmount",value:function(){window.removeEventListener("beforeunload",this.persistSettings),this.persistSettings()}},{key:"haveAxisValues",value:function(){var e=this.state.data.axisConfig.axes;return e.length>0&&e.every(function(e){return!!e.from.value&&!!e.to.value})}},{key:"render",value:function(){var e=this.state,t=e.config,i=e.selectedAxisPointId,n=e.settings,a=n.pointZoom,s=n.nudgeInfo,o=n.zoomTracksPointNudges,r=n.showRelativeValues,c=n.advancedMode,l=n.editMode,d=n.seriesSelectorLines,u=n.dataTableFontSize;if(!t)return g.a.createElement(g.a.Fragment,null);var h=t.axisType,A=this.state.data,p=A.axisConfig,f=A.series,I=p.combinedOrigin,C=this.getSeriesById(this.state.currentSeriesId),m=C.selectedPointId,E=C.selectedSubPointId,v=this.getDataType(),S=this.getPlanStep(),b=S.type===T.AXIS_CALIBRATION_POINT||S.type===T.AXIS_CALIBRATION_VALUES;return g.a.createElement("div",{className:"main-ui-container"},t.dataUri?g.a.createElement(g.a.Fragment,null,g.a.createElement("div",{className:"top bar"},g.a.createElement(Ge,{editMode:l,toggleEditMode:this.toggleEditMode,advancedMode:c,toggleAdvancedMode:this.toggleAdvancedMode,zoomInfo:a,zoomOut:this.pointZoomZoomOut,zoomIn:this.pointZoomZoomIn,pointZoomSquaredChanged:this.pointZoomSquaredChanged,nudgeInfoX:s.x,nudgeZoomOutX:this.nudgeZoomOutX,nudgeZoomInX:this.nudgeZoomInX,nudgeSquaredChangedX:this.nudgeSquaredChangedX,nudgeInfoY:s.y,nudgeZoomOutY:this.nudgeZoomOutY,nudgeZoomInY:this.nudgeZoomInY,nudgeSquaredChangedY:this.nudgeSquaredChangedY,dataTableFontSizeInfo:u,dataTableFontSizeDown:this.dataTableFontSizeDown,dataTableFontSizeUp:this.dataTableFontSizeUp,zoomTracksPointNudges:o,toggleZoomTracksPointNudgesClicked:this.toggleZoomTracksPointNudgesClicked,seriesSelectorLines:d,seriesSelectorLinesUp:this.seriesSelectorLinesUp,seriesSelectorLinesDown:this.seriesSelectorLinesDown})),g.a.createElement("div",{className:"middle bar"},g.a.createElement("div",{className:"left column"}),g.a.createElement("div",{ref:this.middleColumn,className:"middle column"},g.a.createElement(re,{width:100,height:100,image:t.dataUri,mousePointerMoved:this.mousePointerMoved,mouseLeftClicked:this.mouseLeftClicked,combinedOrigin:I,calibrationPlan:this.state.calibrationPlan,axisConfig:p,currentSeries:C,selectedPointId:m,selectedSubPointId:E,updateOverlay:this.updateOverlay,axisPointCols:this.axisPointCols,axisPointInverseCols:this.axisPointInverseCols,pointZoom:this.state.settings.pointZoom.value,showCalibrationPoints:b,selectedAxisPointId:i,dataType:v,axisType:h}),g.a.createElement(Me,{show:this.state.showHelperDialog,curStep:this.state.helperDialogStep,prevClicked:this.prevStep,nextClicked:this.nextStep,finishClicked:this.finishWizard,dataTypes:this.DataTypes,config:t,graphTypeChanged:this.graphTypeChanged,dataSeriesCountChanged:this.dataSeriesCountChanged,dataPointsCountChanged:this.dataPointsCountChanged,fullCalibrationPlan:this.state.fullCalibrationPlan,axisTypeChanged:this.axisTypeChanged,discriminatorChanged:this.discriminatorChanged,includeIndividualsChanged:this.includeIndividualsChanged,planStep:S,cloneSourceAxisPointToDest:this.cloneSourceAxisPointToDest,subscriptionHandlers:this.subscriptionHandlers,combinedOrigin:I,toggleCombinedOrigin:this.toggleCombinedOrigin,addAxisPoint:this.addAxisPoint,addAxisPointValue:this.addAxisPointValue,axisLogSettingChanged:this.axisLogSettingChanged,removeAxisPoint:this.removeAxisPoint,addDataPoint:this.addDataPoint,removePoints:this.removePoints,axisType:h,setCalibrationPlanIndex:this.setCalibrationPlanIndex,setCalibrationPlanIndexByType:this.setCalibrationPlanIndexByType,pointCount:this.pointCount,axisPointCols:this.axisPointCols,axisPointInverseCols:this.axisPointInverseCols,haveAxisValues:this.haveAxisValues(),axisConfig:p,series:f,currentSeries:C,selectedPointId:m,selectedSubPointId:E,dataType:v,currentSeriesChanged:this.currentSeriesChanged,addSeries:this.addSeries,updateSeries:this.updateSeries,removeSeries:this.removeSeries,editMode:l,showDiscriminator:!1,selectPoint:this.selectPoint,nudgeSelectedPointBy:this.nudgeSelectedPointBy,nudgeAxisPointBy:this.nudgeAxisPointBy,zoomToAxisPoint:this.zoomToAxisPoint,moveCellSelection:this.moveCellSelection,cycleBetweenSeries:this.cycleBetweenSeries,nudgeInfo:s,showRelativeValues:r,toggleShowRelativeValues:this.toggleShowRelativeValues,seriesSelectorLines:d,dataTableFontSize:u})),g.a.createElement("div",{className:"right column"},g.a.createElement(Le,Object.assign({matrix:p.matrix,axisType:h},this.subscriptionHandlers)),g.a.createElement(le,Object.assign({},{width:200,height:200},{color:"white",opacity:.4,strokeWidth:3},this.subscriptionHandlers,{zoomInfo:this.state.settings.zoomTool,zoomOut:this.zoomToolZoomOut,zoomIn:this.zoomToolZoomIn,squaredChanged:this.zoomToolSquaredChanged,stageBorderStyle:{borderWidth:8},refreshToggler:this.state.settings.zoomTool.refreshToggler})))),g.a.createElement("div",{className:"bottom bar"})):g.a.createElement(g.a.Fragment,null,"No image yet."))}},{key:"pointCount",get:function(){return 2*(this.state.config.axisType===j.BOTH?2:1)}}]),t}(g.a.Component),Xe=function(e){function t(){return Object(s.a)(this,t),Object(o.a)(this,Object(r.a)(t).apply(this,arguments))}return Object(d.a)(t,e),Object(l.a)(t,[{key:"componentDidMount",value:function(){C()()}},{key:"render",value:function(){var e=this.props,t=e.apiDriver,i=Object(f.a)(e,["apiDriver"]);return g.a.createElement("div",{className:"App"},t?g.a.createElement(O,i):g.a.createElement(Ve,i))}}]),t}(h.Component),Ze=(i(155),i(87)),We=i.n(Ze),qe=["01. bar with error bars (2S1B).png","02. points and lines.png","03. scatter plot.png","04. box and whisker (5-points).png","05. two series, three bars per series with error bar.png","06. points and lines.png","07. scatter plot.png","08. points and lines.png","09. scatter plot.png","10. box and whisker.png","11. AUC.png","12. horizontal four series (four bars per series) bar chart with error bars.png","13. points and lines.png","14. scatter plot with error bars.png","15. means plus individuals.png","16. box and whisker.png","17. AUC.png","18. five series (four bars per series) with error bar.png","19. points and lines.png","20. scatter plot (no or one series).png","21. mean plus individuals.png","22. box and whisker.png","23. AUC.png","24. six series (one bar per series) with error bar.png","25. points and lines.png","26. scatter plot.png","27. mean plus individuals.png","28. box plot.png","29. AUC.png"].map(function(e){return We.a.join("/graphs",e)}),_e=function(e){function t(e){var i;return Object(s.a)(this,t),(i=Object(o.a)(this,Object(r.a)(t).call(this,e))).state={selectedGraphInfo:[],thumbSize:150},i.graphChosenClicked=i.graphChosenClicked.bind(Object(c.a)(i)),i.graphSelectionChanged=i.graphSelectionChanged.bind(Object(c.a)(i)),i}return Object(d.a)(t,e),Object(l.a)(t,[{key:"getGraphImageData",value:function(){var e=Object(B.a)(x.a.mark(function e(t){var i,n=this;return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Promise.all(t.map(function(){var e=Object(B.a)(x.a.mark(function e(t){return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.t0=t.coords,e.next=3,H(n.indexToUrl(t.number-1));case 3:return e.t1=e.sent,e.abrupt("return",{coords:e.t0,dataUrl:e.t1});case 5:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}()));case 2:return i=e.sent,e.abrupt("return",i);case 4:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}()},{key:"graphChosenClicked",value:function(){var e=Object(B.a)(x.a.mark(function e(t){var i;return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getGraphImageData(this.state.selectedGraphInfo);case 2:i=e.sent,(0,this.props.raiseGraphChosen)({message:"Graph chosen",graphData:i}),this.setState({selectedGraphInfo:[]});case 6:case"end":return e.stop()}},e,this)}));return function(t){return e.apply(this,arguments)}}()},{key:"graphSelectionChanged",value:function(e){var t=this,i=+e.target.value;this.setState(function(e,n){var a=t.state.thumbSize;return{selectedGraphInfo:0===i?[]:e.selectedGraphInfo.find(function(e){return e.number===i})?e.selectedGraphInfo.filter(function(e){return e.number!==i}):[].concat(Object(m.a)(e.selectedGraphInfo),[{number:i,coords:{x:0,y:(i-1)*a,w:a,h:a}}])}})}},{key:"indexToUrl",value:function(e){return"http://localhost:5000/".concat(qe[e])}},{key:"render",value:function(){var e=this,t=this.state,i=t.selectedGraphInfo,n=t.thumbSize,a=i.length;return g.a.createElement("div",{className:"graph-chooser-api-driver",title:"GraphChooser (ApiDriver)"},g.a.createElement("select",{multiple:!0,size:2,onChange:this.graphSelectionChanged,value:i.number},qe.map(function(t,n){return{name:t,selected:i.find(function(e){return e.number===n+1}),url:e.indexToUrl(n),number:n+1,nextSelected:i.find(function(e){return e.number===n+2})}}).map(function(e){return g.a.createElement("option",{key:e.name,value:e.number,style:{background:"url('".concat(e.url,"')"),width:"".concat(n,"px"),height:"".concat(n,"px"),backgroundSize:"cover",border:"".concat(e.selected?"2":"0","px solid blue"),marginBottom:"".concat(e.nextSelected?-2:0,"px")},title:e.name})})),a>0&&g.a.createElement("button",{onClick:this.graphChosenClicked},"Choose ".concat(a," Graph").concat(1!==a?"s":"")))}}]),t}(g.a.Component),$e=i(57),et=i.n($e),tt=i(88),it=i.n(tt),nt=i(90),at=i.n(nt),st=i(91),ot=i.n(st),rt=i(89),ct=i.n(rt),lt=(i(162),i(171),function(e){function t(e){var i;Object(s.a)(this,t),(i=Object(o.a)(this,Object(r.a)(t).call(this,e)))._selectionRectangleClass="selection-rectangle",i._selectionHandleClass="selection-handle",i._externalChildNodesClass="external-child-nodes",i._hovered="hovered",i._readOnly="read-only",i._minimumSize={width:250,height:100},i._handleSize=9,i._borderSize=3,i.mouseOverOutCounter=1,i._handleInfo={nw:{class:"top-left",dx:1,dy:1,dw:-1,dh:-1},n:{class:"top-center",dy:1,dh:-1},ne:{class:"top-right",dy:1,dw:1,dh:-1},e:{class:"right-center",dw:1},se:{class:"bottom-right",dw:1,dh:1},s:{class:"bottom-center",dh:1},sw:{class:"bottom-left",dx:1,dw:-1,dh:1},w:{class:"left-center",dx:1,dw:-1}};var n=e.namespace;return i.state={selections:Object(E.a)({},n,[]),currentSelectionId:null,hoveredSelectionId:null,activeHandleKey:null,isWithinSelection:!1,mouseDown:!1,mouseDownAt:null,mouseNowAt:null,mouseWasAt:null,mouseUpAt:null},i._ourRef=g.a.createRef(),i._bindHandlers(),i}return Object(d.a)(t,e),Object(l.a)(t,[{key:"_bindHandlers",value:function(){this.renderSelection=this.renderSelection.bind(this),this._handleMouseMove=this._handleMouseMove.bind(this),this._handleMouseDown=this._handleMouseDown.bind(this),this._handleMouseUp=this._handleMouseUp.bind(this),this._handleMouseUpDoc=this._handleMouseUpDoc.bind(this),this._handleMouseOver=this._handleMouseOver.bind(this),this._handleMouseOut=this._handleMouseOut.bind(this),this.deleteSelectionClicked=this.deleteSelectionClicked.bind(this)}},{key:"componentDidMount",value:function(){this._offsetParent=this._ourRef.current.offsetParent,this._offsetParent.addEventListener("mousemove",this._handleMouseMove),this._offsetParent.addEventListener("mousedown",this._handleMouseDown),this._offsetParent.addEventListener("mouseup",this._handleMouseUp),document.addEventListener("mouseup",this._handleMouseUpDoc),this._offsetParent.addEventListener("mouseover",this._handleMouseOver),this._offsetParent.addEventListener("mouseout",this._handleMouseOut),this.mirrorSvgTitles()}},{key:"mirrorSvgTitles",value:function(){_(this._ourRef.current.getElementsByTagNameNS($,"svg"))}},{key:"getSelectionIdString",value:function(e){return JSON.stringify((e?e.map(function(e){return e.id}):[]).sort(),null,2)}},{key:"shouldComponentUpdate",value:function(e,t){return this.state.selections!==t.selections||this.props.namespace!==e.namespace||this.props.applyReadOnly!==e.applyReadOnly}},{key:"componentDidUpdate",value:function(e,t,i){t.selections!==this.state.selections&&this.mirrorSvgTitles()}},{key:"componentWillUnmount",value:function(){this._offsetParent.removeEventListener("mousemove",this._handleMouseMove),this._offsetParent.removeEventListener("mousedown",this._handleMouseDown),this._offsetParent.removeEventListener("mouseup",this._handleMouseUp),document.removeEventListener("mouseup",this._handleMouseUpDoc),this._offsetParent.removeEventListener("mouseover",this._handleMouseOver),this._offsetParent.removeEventListener("mouseout",this._handleMouseOut)}},{key:"addSelection",value:function(e){var t=e.x,i=e.y,n=e.width,a=e.height,s=b()();this.setState(function(e,o){var r=o.namespace;return{selections:Object(v.a)({},e.selections,Object(E.a)({},r,[].concat(Object(m.a)(e.selections[r]||[]),[{id:s,view:{x:t,y:i,width:n,height:a}}]))),currentSelectionId:s,creating:!0}})}},{key:"updateSelection",value:function(e){var t=e.selectionId,i=e.x,n=e.y,a=e.width,s=e.height,o=e.editing;this.setState(function(e,r){var c=r.namespace;return{selections:Object(v.a)({},e.selections,Object(E.a)({},c,e.selections[c].map(function(e){return e.id!==t?e:Object(v.a)({},e,{view:{x:i,y:n,width:a,height:s},editing:o})})))}})}},{key:"_handleMouseDown",value:function(e){var t=this,i=e.target.classList.contains(this._selectionHandleClass)?e.target.getAttribute("data-handle-info-key"):null,n=e.target.classList.contains(this._selectionRectangleClass)&&e.target.classList.contains(this._hovered)?e.target:null,a=n?n.getAttribute("data-id"):null,s=!!e.target.closest(".".concat(this._selectionRectangleClass)),o=this.getMouseCoords(e),r=o.x,c=o.y;this.setState(function(n,o){return{currentSelectionId:i?e.target.closest(".".concat(t._selectionRectangleClass)).getAttribute("data-id"):n.currentSelectionId,hoveredSelectionId:a,activeHandleKey:i,isWithinSelection:s,mouseDown:!0,mouseDownAt:{x:r,y:c},mouseUpAt:null}},function(){s||t.addSelection({x:r,y:c,width:0,height:0})})}},{key:"_getHandleResizeDeltas",value:function(e,t,i){return{dx:t*(e.dx||0),dy:i*(e.dy||0),dw:t*(e.dw||0),dh:i*(e.dh||0)}}},{key:"_handleMouseMove",value:function(e){var t=this;e.preventDefault();var i=this.getMouseCoords(e),n=i.x,a=i.y,s=this._offsetParent,o=s.offsetWidth,r=s.offsetHeight;this.setState(function(e,t){return{mouseWasAt:e.mouseNowAt?e.mouseNowAt:{x:n,y:a},mouseNowAt:{x:n,y:a}}},function(){var e=t.props.namespace,i=t.state,n=i.currentSelectionId,a=i.hoveredSelectionId,s=i.activeHandleKey,c=i.mouseDownAt,l=i.mouseNowAt,d=i.mouseWasAt,u=i.selections[e]||[],h=l.x-d.x,g=l.y-d.y,A=t._handleSize/2;if(a){var p=u.find(function(e){return e.id===a});p.view.x-A+h<0&&(h=-p.view.x+A),p.view.x+p.view.width+A+h>=o&&(h=o-1-p.view.x-p.view.width-A),p.view.y-A+g<0&&(g=-p.view.y+A),p.view.y+p.view.height+A+g>=r&&(g=r-1-p.view.y-p.view.height-A),t.updateSelection({selectionId:a,x:p.view.x+h,y:p.view.y+g,width:p.view.width,height:p.view.height,editing:!0})}else if(s){var f=u.find(function(e){return e.id===n}),I=t._handleInfo[s],C=t._getHandleResizeDeltas(I,h,g);if(C.dx||C.dy||C.dw||C.dh){var m=f.view.width+C.dw,E=f.view.height+C.dh;(m=o||f.view.y+E>=r)&&(m=o&&(h=o-1-f.view.x-f.view.width-A),f.view.y+E+A>=r&&(g=r-1-f.view.y-f.view.height-A),C=t._getHandleResizeDeltas(I,h,g),m=f.view.width+C.dw,E=f.view.height+C.dh),t.updateSelection({selectionId:n,x:f.view.x+C.dx,y:f.view.y+C.dy,width:m,height:E,editing:!0})}}else if(n){var v=Math.min(c.x,l.x),S=Math.max(c.x,l.x),b=Math.min(c.y,l.y),y=Math.max(c.y,l.y),k=Math.max(S-v,0),O=Math.max(y-b,0);t.updateSelection({selectionId:n,x:v,y:b,width:k,height:O,editing:!0})}})}},{key:"getMouseCoords",value:function(e){var t=this._ourRef.current.getBoundingClientRect();return{x:e.clientX-t.left,y:e.clientY-t.top}}},{key:"notifySelectionChanged",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.id,i=e.deletion,n=this.props,a=n.selectionChanged,s=n.namespace,o=this.state.selections[s]||[];if(a){var r=this.state,c=r.currentSelectionId,l=r.hoveredSelectionId,d=c||l||t,u=o.find(function(e){return e.id===d});u&&a({data:u.data,id:u.id||d,namespace:s,selection:i?null:u})}}},{key:"_doFinishOperation",value:function(e){var t=this,i=this.getMouseCoords(e),n=i.x,a=i.y;this.setState({mouseDown:!1,mouseUpAt:{x:n,y:a}},function(){t.notifySelectionChanged(),t.setState(function(e,t){var i=t.namespace;return{currentSelectionId:null,hoveredSelectionId:null,activeHandleKey:null,isWithinSelection:!1,creating:!1,selections:Object(v.a)({},e.selections,Object(E.a)({},i,(e.selections[i]||[]).map(function(e){return Object(v.a)({},e,{editing:!1})})))}})})}},{key:"_handleMouseUp",value:function(e){if(e.preventDefault(),this.state.mouseDown){var t=this.getMouseCoords(e),i=(t.x,t.y,this.state),n=i.currentSelectionId,a=i.creating,s=i.mouseDownAt,o=i.mouseNowAt,r=this._offsetParent,c=r.offsetWidth,l=r.offsetHeight;if(a){var d=Math.min(s.x,o.x),u=Math.min(s.y,o.y),h=Math.max(s.x,o.x),g=Math.max(s.y,o.y),A=Math.max(h-d,this._minimumSize.width),p=Math.max(g-u,this._minimumSize.height);d+A>=c&&(d=c-A-1),u+p>=l&&(u=l-p-1),this.updateSelection({selectionId:n,x:d,y:u,width:A,height:p,editing:!0})}this._doFinishOperation(e)}}},{key:"_handleMouseUpDoc",value:function(e){e.preventDefault();var t=this.state.mouseDown,i=this._offsetParent,n=(i.scrollTop,i.scrollLeft,i.scrollWidth,i.scrollHeight,this.getMouseCoords(e));n.x,n.y;t&&this._handleMouseUp(e)}},{key:"isReadOnly",value:function(e){return this.props.applyReadOnly&&this.props.readOnlyIds.includes(e)}},{key:"_handleMouseOver",value:function(e){var t=e.target.closest(".".concat(this._selectionRectangleClass));if(t){var i=t.getAttribute("data-id");this.isReadOnly(i)||this.hoverSelection(i,function(){})}}},{key:"_handleMouseOut",value:function(e){var t=e.target.closest(".".concat(this._selectionRectangleClass));if(t){var i=t.getAttribute("data-id");this.unhoverSelection(i,function(){})}}},{key:"deleteSelectionClicked",value:function(e){var t=e.target.closest(".".concat(this._selectionRectangleClass));if(t){var i=t.getAttribute("data-id");this.isReadOnly(i)||(this.notifySelectionChanged({id:i,deletion:!0}),this.deleteSelection(i,function(){}))}}},{key:"_setHovered",value:function(e,t,i){var n=this;this.setState(function(i,a){var s=a.namespace;return{selections:Object(v.a)({},i.selections,Object(E.a)({},s,(i.selections[s]||[]).map(function(i){return i.id!==e?i:Object(v.a)({},i,Object(E.a)({},n._hovered,t))})))}},i)}},{key:"hoverSelection",value:function(e,t){this._setHovered(e,!0,t)}},{key:"unhoverSelection",value:function(e,t){this._setHovered(e,!1,t)}},{key:"deleteSelection",value:function(e,t){this.setState(function(t,i){var n=i.namespace;return{selections:Object(v.a)({},t.selections,Object(E.a)({},n,(t.selections[n]||[]).filter(function(t){return t.id!==e})))}})}},{key:"renderSelection",value:function(e,t){var i,n=e.view,a=n.x,s=n.y,o=n.width,r=n.height,c=this.props,l=c.getSelectionClass,d=c.getHandleClass,u=c.data,h=c.renderSelectionChildNodes,A=this.state.creating,p=Ee()(l?l({data:u,selection:e}):"",{creating:A,editing:e.editing}),f=d?d({data:u,selection:e}):"",I=this.state.mouseDown;return g.a.createElement("div",{key:e.id,"data-id":e.id,style:{position:"absolute",left:Z(a),top:Z(s),width:Z(o),height:Z(r),"--handleSize":Z(this._handleSize),"--borderSize":Z(this._borderSize)},className:Ee()(this._selectionRectangleClass,p,(i={},Object(E.a)(i,this._hovered,e.hovered),Object(E.a)(i,this._readOnly,this.isReadOnly(e.id)),i))},Object.entries(this._handleInfo).map(function(e){var t=Object(R.a)(e,2),i=t[0],n=t[1];return g.a.createElement("div",{className:Ee()("selection-handle ".concat(n.class),f),"data-handle-info-key":i,key:i})}),g.a.createElement(Se.a,{className:"delete",title:"Remove selection",onClick:this.deleteSelectionClicked}),h&&h({data:u,selection:e,selectionIndex:t,mouseDown:I}))}},{key:"render",value:function(){var e=this.props.namespace,t=this.state.selections[e]||[];return g.a.createElement("div",{className:"selection-container",ref:this._ourRef},t.map(this.renderSelection))}}]),t}(h.Component));lt.defaultProps={readOnlyIds:[],applyReadOnly:!0,namespace:"defaultNamespace"};var dt=lt;i(172);et.a.GlobalWorkerOptions.workerSrc="//cdnjs.cloudflare.com/ajax/libs/pdf.js/".concat(et.a.version,"/pdf.worker.js");var ut=function(e){function t(e){var i;return Object(s.a)(this,t),(i=Object(o.a)(this,Object(r.a)(t).call(this,e)))._settingsKey=i.props.settingsKey||"graphChooserSettings",i._scaleSteps=[{from:0,to:.25,increment:0},{from:.25,to:1,increment:.25},{from:1,to:4,increment:.5},{from:4,to:10,increment:1}],i.state={pageCount:-1,pageCanvasRefs:null,curPage:1,dpr:window.devicePixelRatio,pageInfo:[],pdf:null,pdfUrl:null,selectOutcomes:null,settings:{settingsVersion:2,lockSelectedGraphs:!0,pdfScale:{value:1}},graphInfo:{}},i._docWrapper=g.a.createRef(),i._bindHandlers(),i._notSelectedId="not-selected",i.setStateAsync=function(e){return new Promise(function(t){return i.setState(e,t)})},i._ourRef=g.a.createRef(),i}return Object(d.a)(t,e),Object(l.a)(t,[{key:"_bindHandlers",value:function(){this.persistSettings=this.persistSettings.bind(this),this.recoverSettings=this.recoverSettings.bind(this),this.graphOutcomeSelectionChanged=this.graphOutcomeSelectionChanged.bind(this),this.toggleLockSelectedGraphs=this.toggleLockSelectedGraphs.bind(this),this.useSelectedGraphs=this.useSelectedGraphs.bind(this),this.renderSelectionChildNodes=this.renderSelectionChildNodes.bind(this),this.getSelectionClass=this.getSelectionClass.bind(this),this.getHandleClass=this.getHandleClass.bind(this),this.graphSelectionChanged=this.graphSelectionChanged.bind(this),this.pdfScaleUp=this.pdfScaleUp.bind(this),this.pdfScaleDown=this.pdfScaleDown.bind(this)}},{key:"persistSettings",value:function(){W({component:this,localStorage:this.props.localStorage,settingsKey:this._settingsKey})}},{key:"recoverSettings",value:function(){q({component:this,localStorage:this.props.localStorage,settingsKey:this._settingsKey})}},{key:"_doPdfScaleUpDown",value:function(e){var t=this;this.setState(function(i,n){var a=i.settings.pdfScale;return{settings:Object(v.a)({},i.settings,{pdfScale:{value:ne(e,a.value,t._scaleSteps)}})}})}},{key:"pdfScaleUp",value:function(){this._doPdfScaleUpDown(!1)}},{key:"pdfScaleDown",value:function(){this._doPdfScaleUpDown(!0)}},{key:"allPagesLoaded",value:function(){this.setState(function(e,t){return{pageInfo:e.pageInfo.map(function(e){return Object(v.a)({},e)})}},function(){})}},{key:"graphOutcomeSelectionChanged",value:function(e){var t=this,i=e.target,n=i.closest(".graph-selection-rect"),a=n.getAttribute("data-id"),s=+n.closest(".pdf-page-wrapper").getAttribute("data-page-index");this.setState(function(e,n){var o=e.graphInfo,r=i.value;return{graphInfo:Object(v.a)({},o,Object(E.a)({},a,Object(v.a)({},o[a],{outcomeId:r,pageIndex:s,readOnly:r&&r!==t._notSelectedId})))}})}},{key:"toggleLockSelectedGraphs",value:function(e){this.setState(function(e,t){return{settings:Object(v.a)({},e.settings,{lockSelectedGraphs:!e.settings.lockSelectedGraphs})}})}},{key:"getSelectedGraphCount",value:function(){var e=this,t=this.state,i=t.graphInfo,n=t.pdfUrl;return Object.entries(i).filter(function(t){var i=Object(R.a)(t,2),a=(i[0],i[1]);return a.pdfUrl===n&&a.outcomeId&&a.outcomeId!==e._notSelectedId}).length}},{key:"useSelectedGraphs",value:function(e){var t=this,i=this.props.raiseGraphChosen,n=this.state,a=n.graphInfo,s=n.pageCanvasRefs,o=n.pdfUrl;i({message:"Graph chosen",graphData:Object.entries(a).filter(function(e){var i=Object(R.a)(e,2),n=(i[0],i[1]);return n.pdfUrl===o&&n.outcomeId&&n.outcomeId!==t._notSelectedId}).map(function(e){var t=Object(R.a)(e,2),i=(t[0],t[1]),n=i.view,a=n.x,o=n.y,r=n.width,c=n.height;return{outcomeId:i.outcomeId,pageIndex:i.pageIndex,coords:{x:a,y:o,w:r,h:c},dataUrl:L(s[i.pageIndex].current,a,o,r,c)}})})}},{key:"renderSelectionChildNodes",value:function(e){e.data;var t=e.selection,i=(e.selectionIndex,e.mouseDown,this.state),n=i.selectOutcomes,a=i.graphInfo[t.id];return g.a.createElement(it.a,{handle:".drag-group .drag-handle",bounds:"parent"},g.a.createElement("div",{className:Ee()("drag-group",{selected:a&&a.outcomeId&&a.outcomeId!==this._notSelectedId})},g.a.createElement("div",{className:"inner-group"},g.a.createElement(ct.a,{className:"drag-handle"}),g.a.createElement("select",{title:"Linked Outcome",size:1,className:"graph-selection-outcome-list",onChange:this.graphOutcomeSelectionChanged,value:a?a.outcomeId:this._notSelectedId},n.map(function(e){return g.a.createElement("option",{key:e.id,value:e.id},e.label)})))))}},{key:"getSelectionClass",value:function(e){e.data;var t=e.selection,i=this.state.graphInfo[t.id],n=i?i.outcomeId:this._notSelectedId;return[n&&n!==this._notSelectedId?"selected":"","graph-selection-rect"].join(" ")}},{key:"getHandleClass",value:function(e){e.data;var t=e.selection,i=this.state.graphInfo[t.id],n=i?i.outcomeId:this._notSelectedId;return[n&&n!==this._notSelectedId?"selected":"","graph-selection-handle"].join(" ")}},{key:"graphSelectionChanged",value:function(e){e.data;var t=e.id,i=e.namespace,n=e.selection;this.setState(function(e,a){var s,o=e.graphInfo;return{graphInfo:n?Object(v.a)({},o,Object(E.a)({},t,Object(v.a)({},o[t],{pdfUrl:i,view:(s=n.view,JSON.parse(JSON.stringify(s)))}))):G(o,t)}},function(){})}},{key:"configure",value:function(){var e=Object(B.a)(x.a.mark(function e(){var t,i,n,a,s,o,r;return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(t=JSON.parse(this.props.config),i=t.fileUrl,n=t.outcomes,a=n?[{id:this._notSelectedId,label:"None"}].concat(Object(m.a)(n||[])):n,!i){e.next=10;break}return e.next=6,this.loadPdf(i);case 6:s=e.sent,o=s.numPages,r=Object(m.a)(Array(o)).map(function(e,t){return t}),this.setState({pdf:s,pdfUrl:i,selectOutcomes:a,pageCount:o,pageCanvasRefs:r.map(function(e){return g.a.createRef()}),pageInfo:r.map(function(e){return{loaded:!1}})});case 10:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"resetPageLoaded",value:function(){this.state.pageInfo&&this.setState(function(e,t){return{pageInfo:e.pageInfo.map(function(e){return Object(v.a)({},e,{loaded:!1})})}})}},{key:"loadPages",value:function(){var e=Object(B.a)(x.a.mark(function e(){var t,i,n,a,s,o,r=this;return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return this.resetPageLoaded(),t=this.state,i=t.pageCanvasRefs,n=t.pdf,a=t.settings,s=a.pdfScale,o=s.value,e.next=6,Promise.all(i.map(function(){var e=Object(B.a)(x.a.mark(function e(t,i){var a,s,c,l;return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,n.getPage(i+1);case 2:return a=e.sent,s=a.getViewport({scale:o}),c=t.current,l=c.getContext("2d"),c.height=s.height,c.width=s.width,e.next=10,a.render({canvasContext:l,viewport:s}).promise;case 10:r.setState(function(e,t){return{pageInfo:e.pageInfo.map(function(e,t){return t!==i?e:Object(v.a)({},e,{loaded:!0,page:a})})}});case 11:case"end":return e.stop()}},e)}));return function(t,i){return e.apply(this,arguments)}}()));case 6:case"end":return e.stop()}},e,this)}));return function(){return e.apply(this,arguments)}}()},{key:"loadPdf",value:function(){var e=Object(B.a)(x.a.mark(function e(t){var i;return x.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,et.a.getDocument({url:t}).promise;case 2:return i=e.sent,e.abrupt("return",i);case 4:case"end":return e.stop()}},e)}));return function(t){return e.apply(this,arguments)}}()},{key:"mirrorSvgTitles",value:function(){_(this._ourRef.current.getElementsByTagNameNS($,"svg"))}},{key:"componentDidMount",value:function(){this.recoverSettings(),window.addEventListener("beforeunload",this.persistSettings),this.mirrorSvgTitles()}},{key:"componentDidUpdate",value:function(e,t,i){e.config!==this.props.config?this.configure():t.pageCanvasRefs!==this.state.pageCanvasRefs?this.loadPages():t.settings.lockSelectedGraphs!==this.state.settings.lockSelectedGraphs?this.mirrorSvgTitles():t.settings.pdfScale.value!==this.state.settings.pdfScale.value&&this.state.pageCanvasRefs&&this.loadPages()}},{key:"componentWillUnmount",value:function(){window.removeEventListener("beforeunload",this.persistSettings),this.persistSettings()}},{key:"render",value:function(){var e=this,t=this.state,i=t.pageCount,n=t.pageCanvasRefs,a=t.pdf,s=t.pdfUrl,o=t.selectOutcomes,r=t.pageInfo,c=t.graphInfo,l=t.settings,d=this.getSelectedGraphCount(),u=["Use selected ",1!==d?d+" ":"","graph",1!==d?"s":""].join(""),h=l.lockSelectedGraphs,A=l.pdfScale;return g.a.createElement("div",{className:"graph-chooser-main-ui",ref:this._ourRef},g.a.createElement("div",{className:"header-bar"},g.a.createElement("span",{className:"load-progress"},r.map(function(e,t){var i=e.loaded;return g.a.createElement("a",{key:t,className:Ee()({"page-loaded-status":!0,loaded:i}),href:"#page-".concat(t)},t+1)})),a&&g.a.createElement(ce,{showSquared:!1,zoomInfo:A,zoomOut:this.pdfScaleDown,zoomIn:this.pdfScaleUp,label:"PDF scale",showMultiplier:!0}),h&&g.a.createElement(at.a,{className:"clickable lock-selected-graphs",title:"Outcome-assigned graphs are locked",onClick:this.toggleLockSelectedGraphs}),!h&&g.a.createElement(ot.a,{className:"clickable lock-selected-graphs",title:"Outcome-assigned graphs are editable",onClick:this.toggleLockSelectedGraphs}),d>0&&g.a.createElement("button",{onClick:this.useSelectedGraphs},u)),a&&o&&g.a.createElement("div",{ref:this._docWrapper,className:"doc-wrapper"},i>0&&Object(m.a)(Array(i).keys()).map(function(t){var i=Object.entries(c).filter(function(e){var i=Object(R.a)(e,2);i[0];return i[1].pageIndex===t}).filter(function(e){var t=Object(R.a)(e,2);t[0];return t[1].readOnly}).map(function(e){var t=Object(R.a)(e,2),i=t[0];t[1];return i});return g.a.createElement("div",{key:t,className:"pdf-page-wrapper","data-page-index":t,id:"page-".concat(t)},g.a.createElement(dt,{data:{pageIndex:t},getSelectionClass:e.getSelectionClass,getHandleClass:e.getHandleClass,renderSelectionChildNodes:e.renderSelectionChildNodes,selectionChanged:e.graphSelectionChanged,readOnlyIds:i,applyReadOnly:h,namespace:s}),g.a.createElement("span",{className:"pdf-page-number",title:"Page ".concat(t+1)},t+1),g.a.createElement("canvas",{ref:n[t],className:"pdf-page-canvas"}))})))}}]),t}(g.a.Component),ht=function(e){function t(){return Object(s.a)(this,t),Object(o.a)(this,Object(r.a)(t).apply(this,arguments))}return Object(d.a)(t,e),Object(l.a)(t,[{key:"render",value:function(){var e=this.props,t=e.apiDriver,i=Object(f.a)(e,["apiDriver"]);return g.a.createElement("div",{className:"GraphChooser"},t?g.a.createElement(_e,i):g.a.createElement(ut,i))}}]),t}(g.a.Component),gt=(i(173),function(e){function t(e){var i;return Object(s.a)(this,t),(i=Object(o.a)(this,Object(r.a)(t).call(this,e))).graphClicked=i.graphClicked.bind(Object(c.a)(i)),i}return Object(d.a)(t,e),Object(l.a)(t,[{key:"getConfig",value:function(){return JSON.parse(this.props.config)}},{key:"graphClicked",value:function(e){var t=this.props.raiseGraphClicked,i=this.getConfig();t({message:"Graph clicked",coords:i.coords,dataUrl:i.dataUrl})}},{key:"render",value:function(){var e=this.getConfig(),t=X(e),i=e.width,n=e.height,a=e.coords,s=e.dataUrl,o={width:Z(i),height:Z(n),display:t?"none":"block"};return g.a.createElement("div",{className:"graph-displayer-api-driver",style:{},onClick:this.graphClicked,title:"GraphDisplayer (ApiDriver)"},g.a.createElement("img",{src:s,style:o,alt:""}),g.a.createElement("span",{className:"graph-coords"},"(",a.x,", ",a.y,") -> (",a.x+a.w,", ",a.y+a.h,")"))}}]),t}(g.a.Component)),At=(i(174),function(e){function t(e){var i;return Object(s.a)(this,t),(i=Object(o.a)(this,Object(r.a)(t).call(this,e))).graphClicked=i.graphClicked.bind(Object(c.a)(i)),i}return Object(d.a)(t,e),Object(l.a)(t,[{key:"getConfig",value:function(){return JSON.parse(this.props.config)}},{key:"graphClicked",value:function(e){var t=this.props.raiseGraphClicked,i=this.getConfig();t({message:"Graph clicked",coords:i.coords,dataUrl:i.dataUrl})}},{key:"render",value:function(){var e=this.getConfig(),t=X(e),i=e.width,n=e.height,a=e.dataUrl,s={width:Z(i),height:Z(n),display:t?"none":"block"};return g.a.createElement("div",{className:"graph-displayer-main-ui",style:{},onClick:this.graphClicked,title:"GraphDisplayer"},g.a.createElement("img",{src:a,style:s,alt:""}))}}]),t}(g.a.Component)),pt=function(e){function t(){return Object(s.a)(this,t),Object(o.a)(this,Object(r.a)(t).apply(this,arguments))}return Object(d.a)(t,e),Object(l.a)(t,[{key:"render",value:function(){var e=this.props,t=e.apiDriver,i=Object(f.a)(e,["apiDriver"]);return g.a.createElement("div",{className:"GraphDisplayer"},t?g.a.createElement(gt,i):g.a.createElement(At,i))}}]),t}(g.a.Component);Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));function ft(){var e=Object(a.a)(["\n \n "]);return ft=function(){return e},e}function It(){var e=Object(a.a)(["\n \n "]);return It=function(){return e},e}function Ct(){var e=Object(a.a)(["\n \n "]);return Ct=function(){return e},e}var mt=function(e){function t(){var e;return Object(s.a)(this,t),(e=Object(o.a)(this,Object(r.a)(t).call(this))).raisePointAdded=e.raisePointAdded.bind(Object(c.a)(e)),e.raiseSeriesDeleted=e.raiseSeriesDeleted.bind(Object(c.a)(e)),e.raiseCurrentSeriesChanged=e.raiseCurrentSeriesChanged.bind(Object(c.a)(e)),e.raiseSeriesAdded=e.raiseSeriesAdded.bind(Object(c.a)(e)),e.raiseSeriesLabelChanged=e.raiseSeriesLabelChanged.bind(Object(c.a)(e)),e.raisePointDeleted=e.raisePointDeleted.bind(Object(c.a)(e)),e.raiseExtractionComplete=e.raiseExtractionComplete.bind(Object(c.a)(e)),e}return Object(d.a)(t,e),Object(l.a)(t,null,[{key:"properties",get:function(){return{config:{type:Object},apiDriver:{type:Boolean},devMode:{type:Boolean}}}}]),Object(l.a)(t,[{key:"raisePointAdded",value:function(e){this.dispatchEvent(new CustomEvent("pointAdded",{bubbles:!0,cancelable:!1,composed:!0,detail:e}))}},{key:"raiseSeriesDeleted",value:function(e){this.dispatchEvent(new CustomEvent("seriesDeleted",{bubbles:!0,cancelable:!1,composed:!0,detail:e}))}},{key:"raiseCurrentSeriesChanged",value:function(e){this.dispatchEvent(new CustomEvent("currentSeriesChanged",{bubbles:!0,cancelable:!1,composed:!0,detail:e}))}},{key:"raiseSeriesAdded",value:function(e){this.dispatchEvent(new CustomEvent("seriesAdded",{bubbles:!0,cancelable:!1,composed:!0,detail:e}))}},{key:"raiseSeriesLabelChanged",value:function(e){this.dispatchEvent(new CustomEvent("seriesLabelChanged",{bubbles:!0,cancelable:!1,composed:!0,detail:e}))}},{key:"raisePointDeleted",value:function(e){this.dispatchEvent(new CustomEvent("pointDeleted",{bubbles:!0,cancelable:!1,composed:!0,detail:e}))}},{key:"raiseExtractionComplete",value:function(e){this.dispatchEvent(new CustomEvent("extractionComplete",{bubbles:!0,cancelable:!1,composed:!0,detail:e}))}},{key:"render",value:function(){var e=this.getAttribute("config"),t="true"===this.getAttribute("apiDriver"),i="true"===this.getAttribute("devMode");return p.a.render(g.a.createElement(Xe,{localStorage:localStorage,config:e,apiDriver:t,devMode:i,raisePointAdded:this.raisePointAdded,raiseSeriesDeleted:this.raiseSeriesDeleted,raiseCurrentSeriesChanged:this.raiseCurrentSeriesChanged,raiseSeriesAdded:this.raiseSeriesAdded,raiseSeriesLabelChanged:this.raiseSeriesLabelChanged,raisePointDeleted:this.raisePointDeleted,raiseExtractionComplete:this.raiseExtractionComplete}),this),Object(u.b)(Ct())}}]),t}(u.a),Et=function(e){function t(){var e;return Object(s.a)(this,t),(e=Object(o.a)(this,Object(r.a)(t).call(this))).raiseGraphChosen=e.raiseGraphChosen.bind(Object(c.a)(e)),e}return Object(d.a)(t,e),Object(l.a)(t,null,[{key:"properties",get:function(){return{config:{type:Object},apiDriver:{type:Boolean}}}}]),Object(l.a)(t,[{key:"raiseGraphChosen",value:function(e){this.dispatchEvent(new CustomEvent("graphChosen",{bubbles:!0,cancelable:!1,composed:!0,detail:e}))}},{key:"render",value:function(){var e=this.getAttribute("config"),t="true"===this.getAttribute("apiDriver");return p.a.render(g.a.createElement(ht,{localStorage:localStorage,config:e,apiDriver:t,raiseGraphChosen:this.raiseGraphChosen}),this),Object(u.b)(It())}}]),t}(u.a),vt=function(e){function t(){var e;return Object(s.a)(this,t),(e=Object(o.a)(this,Object(r.a)(t).call(this))).raiseGraphClicked=e.raiseGraphClicked.bind(Object(c.a)(e)),e}return Object(d.a)(t,e),Object(l.a)(t,null,[{key:"properties",get:function(){return{config:{type:Object},apiDriver:{type:Boolean}}}}]),Object(l.a)(t,[{key:"raiseGraphClicked",value:function(e){this.dispatchEvent(new CustomEvent("graphClicked",{bubbles:!0,cancelable:!1,composed:!0,detail:e}))}},{key:"render",value:function(){var e=this.getAttribute("config"),t="true"===this.getAttribute("apiDriver");return p.a.render(g.a.createElement(pt,{config:e,apiDriver:t,raiseGraphClicked:this.raiseGraphClicked}),this),Object(u.b)(ft())}}]),t}(u.a);customElements.define("graph-2-data",mt),customElements.define("pdf-graph-chooser",Et),customElements.define("pdf-graph-displayer",vt),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then(function(e){e.unregister()})},46:function(e,t){function i(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}i.keys=function(){return[]},i.resolve=i,e.exports=i,i.id=46},49:function(e,t){function i(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}i.keys=function(){return[]},i.resolve=i,e.exports=i,i.id=49},93:function(e,t,i){e.exports=i(176)},98:function(e,t,i){},99:function(e,t,i){}},[[93,1,2]]]); -//# sourceMappingURL=main.e55a9bd4.chunk.js.map \ No newline at end of file diff --git a/static/js/main.e55a9bd4.chunk.js.map b/static/js/main.e55a9bd4.chunk.js.map deleted file mode 100644 index fa231c0..0000000 --- a/static/js/main.e55a9bd4.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["Components/ApiDriverComponents/SeriesSelector.js","Components/ApiDriverComponents/PointSelector.js","Components/ApiDriver.js","PointType.js","DataTypes.js","AxisType.js","StepType.js","PointPlans.js","Utils.js","FullCalibrationPlan.js","Components/ImageDisplay.js","Components/ZoomControls.js","Components/Magnifier.js","Components/Wizard.js","Components/WizardStep.js","Components/AxisDiagram.js","Components/AxisCalibration.js","Components/SeriesSelector.js","Components/DataCollection.js","DiscriminatorType.js","Components/HelperDialog.js","Components/StatusDisplay.js","Components/MatrixDisplay.js","Components/Settings.js","Components/MainUi.js","App.js","Components/GraphChooser/ApiDriver/graphImageNames.js","Components/GraphChooser/ApiDriver/index.js","Components/SelectionRectangles/index.js","Components/GraphChooser/MainUi/index.js","Components/GraphChooser/index.js","Components/GraphDisplayer/ApiDriver/index.js","Components/GraphDisplayer/MainUi/index.js","Components/GraphDisplayer/index.js","serviceWorker.js","index.js","../node_modules/react-pdf/node_modules/pdfjs-dist/build sync","../node_modules/pdfjs-dist/build sync"],"names":["SeriesSelector","props","react_default","a","createElement","series","map","s","key","id","type","onChange","onSelectionChanged","checked","selectedId","value","label","PointSelector","points","p","i","selectedIndex","concat","x","y","ApiDriver","_this","Object","classCallCheck","this","possibleConstructorReturn","getPrototypeOf","call","newPointXChange","bind","assertThisInitialized","newPointYChange","addPoint","deletePoint","addSeries","deleteSeries","changeSeriesLabel","extractionComplete","selectCurrentSeries","selectCurrentPoint","newSeriesLabelChange","currentSeriesLabelChange","state","metaData","currentSeriesId","newPoint","addPointOk","newSeriesLabel","newSeriesLabelOk","updatedSeriesLabel","updatedSeriesLabelOk","currentPointIndex","deleteCurrentPointOk","labelUsed","find","ev","target","currentSeries","setState","objectSpread","mayAddPoint","mayUpdateSeriesLabel","pointIndex","pt","isNaN","isValidPoint","updatedNewPoint","defineProperty","_doNewPointChange","_this$state","_this2","_this$state2","getCurrentSeries","newPt","newPoints","toConsumableArray","newSeries","raisePointAdded","message","updatedSeries","filter","_this3","_this$state$metaData","seriesBefore","deletionPoint","length","raisePointDeleted","deletedPoint","seriesAfter","trim","labelOk","_this4","uuid","raiseSeriesAdded","_this5","seriesToDelete","raiseSeriesDeleted","seriesDeleted","allSeries","_this6","_this$state$metaData2","raiseSeriesLabelChanged","raiseExtractionComplete","document","title","stateText","JSON","stringify","className","ApiDriverComponents_SeriesSelector","onClick","disabled","ApiDriverComponents_PointSelector","React","Component","PointType","AXIS_CALIBRATION","AXIS_CALIBRATION_SAMPLE","DATA_POINT","DATA_POINT_TOP_BAR","DATA_POINT_BOTTOM_BAR","DATA_POINT_LEFT_BAR","DATA_POINT_RIGHT_BAR","DATA_POINT_CROSS_HAIR","dataTypes","text","abbrev","dataPoints","name","css","isReferencePoint","pointType","allowAreaCalculation","symmetric","upper","lower","AxisType","HORIZONTAL","VERTICAL","BOTH","StepType","AXIS_CALIBRATION_POINT","AXIS_CALIBRATION_VALUES","ENTER_DATA_POINTS","MAY_EXTRACT_AXES","MAY_BUILD_MATRIX","pointPlans","_pointPlans","radius","fillStyle","accent","gco","strokeStyle","whenSelected","lineWidth","barSide","lines","moveTo","lineTo","loadImageThen","_x","_loadImageThen","apply","arguments","_callee","srcUrl","regenerator_default","wrap","_context","prev","next","abrupt","Promise","resolve","reject","img","crossOrigin","onload","onerror","src","stop","getImageAsDataUrl","_x2","_getImageAsDataUrl","_callee3","_context3","then","_ref15","asyncToGenerator","mark","_callee2","naturalWidth","naturalHeight","canvas","ctx","dataUrl","_context2","width","height","getContext","drawImage","toDataURL","_x6","sent","getImageDataAsDataUrl","imageData","getImageData","canvas2","ctx2","putImageData","drawPoint","_ref3","point","selected","dpr","accentColor","pointZoom","undefined","plan","px","py","forEach","beginPath","globalCompositeOperation","setLineDash","lineDash","lineDashOffset","arc","Math","PI","c","fill","stroke","roundTo","num","decimalPlaces","toFixed","transformPoint","matrix","applyToPoint","getIntegerAttribute","elem","attrName","attr","getAttribute","removeProps","ob","excludeProps","entries","_ref4","_ref5","slicedToArray","k","includes","reduce","acc","_ref6","_ref7","v","keyDownArrowKeyPressed","code","isEmptyObject","constructor","persistSettings","_ref13","component","localStorage","settingsKey","setItem","settings","recoverSettings","_ref14","recoveredSettings","ls","getItem","parse","_unused","settingsVersion","svgMirrorTitles","svgElems","svgMirrorTitle","svgNs","svg","et","getElementsByTagNameNS","te","createElementNS","appendChild","createTextNode","doZoomIntegerValue","out","squared","min","max","limit","val","Number","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","applyIntegerLimits","doZoomFloatValue","doZoomFloatValueSteps","steps","candidates","from","to","increment","fullCalibrationPlan","combinedOrigin","axis","desc","cloneSource","cloneDest","may","destOb","newProps","keys","newProp","hasOwnProperty","ImageDisplay","imageWidth","imageHeight","widthBound","window","devicePixelRatio","imageStage","createRef","imageCanvas","chromeCanvas","_handleMouseMove","_handleClick","imageLoadCompletedShim","imageLoadCompleted","imageLoadErrored","_setScale","renderCounter","is","current","image","_this$image","offsetWidth","offsetHeight","scale","imageContext","drawPoints","chromeContext","setTimeout","imageNaturalWidth","imageNaturalHeight","callback","scales","clientWidth","clientHeight","duxPanelBackdrop","getElementsByClassName","updateOverlay","elementResizeEvent","loadImage","addEventListener","removeEventListener","unbind","prevProps","prevState","snapshot","axisConfig","selectedSubPointId","updateOverlayPosition","Image","e","offset","el","offsetLeft","offsetTop","tagName","pageXOffset","scrollLeft","pageYOffset","scrollTop","offsetParent","getOffset","scrollX","scrollY","mousePointerMoved","clientX","clientY","offsetX","offsetY","context","mouseLeftClicked","nextProps","nextState","clearRect","_this$props","showCalibrationPoints","selectedAxisPointId","dataType","axisPointInverseCols","axisType","calibrationPlan","hiddenOriginPointIndex","hiddenOriginPointId","nonHiddenOriginPointIndex","rpDp","rp","pointName","subPoint","dataPoint","origDp","ref","style","ZoomControls","squaredChanged","zoomInfo","_this$props$showMulti","showMultiplier","_this$props$showSquar","showSquared","valueDisplay","zoomOut","zoomIn","Magnifier","_magnifierSize","_mid","mouseMove","_grabContexts","_drawCross","imageChromeContext","cc","subscribe","pointerFocus","drawCross","_pointerFocus","scaledOffsetX","scaledOffsetY","w","h","zoom","halfSource","ww","hh","event","detail","magnify","unsubscribe","refreshToggler","toggle","stageBorderStyle","ZoomControls_ZoomControls","Wizard","_step","onTitleChange","modal","setModal","curStep","Children","children","child","childUB","count","_getStep","prevOk","prevOkIf","nextOk","nextOkIf","cta","prevDisabled","nextDisabled","finishDisabled","prevClicked","display","nextClicked","finishClicked","WizardStep","Fragment","AxisDiagram","linkRefs","Array","_","editRefs","cbRefs","_ourRef","_validAxisValues","fromChar","toChar","charCodeAt","String","fromCharCode","charRange","_buildLayout","draw","positionEdit","axisCalibrationValueChanged","axisLogSettingChanged","onFocus","onKeyPress","diagramSize","showPoints","canvasPadding","editValues","xmin","ymin","xmax","ymax","xminDom","yminDom","xmaxDom","ymaxDom","_layout","xTick","yTick","xTicks","yTicks","yBars","xBars","self","_self$_layout","drawHorizAxisTicks","step","drawVertAxisTicks","drawHorizAxis","dashed","drawVertAxis","fillRect","barWidth","abs","random","drawVertBars","drawHorizBars","yr","dx","drawCurvyLine","lastIndex","_self$props","planStep","selector","stepsEqual","one","two","idx","findIndex","ar","len","ub","order","forEachOrder","forEachExplicitLast","axisPointCols","addAxisPointValue","charCode","preventDefault","axisIndex","enabled","_this$props2","overrides","left","marginTop","cbOverrides","getDisplay","getLogDisplay","push","floor","border","position","top","assign","linkPos","zoomToAxisPoint","edit","er","focus","focusEdit","mirrorSvgTitles","_this$props3","toggleCombinedOrigin","divSizePx","canvasSizePx","divStyle","margin","justifyContent","flexDirection","canvasStyle","_ref","_ref$points","_ref$axes","axes","axisValues","axisLogs","log","Link_default","LinkOff_default","r","dataIndex","data-index","AxisCalibration","keyDown","_event$detail$pointer","cloneSourceAxisPointToDest","addAxisPoint","setCalibrationPlanIndex","currentIndex","nextPlanStep","boost","nudgeInfo","nudgeAxisPointBy","nudge","booster","n","ctrlKey","_doNudgeAxisPointBy","shiftKey","axisDiagramEditValues","AxisDiagram_AxisDiagram","nextStepDesc","adding","editing","seriesLabel","currentSeriesChanged","addSeriesClicked","editSeriesClicked","saveSeriesChanged","cancelAddOrEditClicked","saveSeriesKeyPress","removeSeriesClicked","seriesLabelChanged","_toggleAdding","_toggleEditing","updateSeries","_resetUiAfterAddOrEdit","removeSeries","every","ourSeries","editMode","seriesSelectorLines","ifHaveSeries","ifNoSeriesPresent","ifAdding","ifEditing","ifAddingOrEditing","ifNotCurrentlyAdding","ifNotCurrentlyAddingOrEditing","ifHaveCurrentSeries","ifMayCreateNewSeries","noSeriesHasLabel","ifMayRemoveSeries","fixed","ifMayEditSeriesLabel","ifMayUpdateSeriesLabel","noSeriesButOursHasLabel","Add_default","Edit_default","DeleteOutline_default","Save_default","Cancel_default","size","autoFocus","placeholder","DataCollection","setCalibrationPlanIndexByType","selectedRows","headClicked","bodyClicked","deleteClicked","toggleRowSelected","toggleAllRows","closest","tbody","querySelector","allRowsSelected","getAllRowsSelectedInfo","_ev$detail$pointerFoc","valX","valY","addDataPoint","toLowerCase","toggleShowRelativeValues","td","subPointId","dataPointIndex","blankCell","classList","contains","tr","parentNode","pointId","selectPoint","removePoints","nudgeSelectedPointBy","cycleBetweenSeries","moveCellSelection","body","_doNudgeSelectedPointBy","altKey","_doCycleBetweenSeries","_doMoveCellSelection","pointCount","selectedCount","showRelativeValues","fontSize","currentDataPointIndex","autoAdd","multiPoints","refPoint","guardedGetPoint","dp","p2","independent","isRelativePoint","dispPoint","showPlusMinus","pm","getPoint","getPointId","getClass","isSelected","classNames","data-cell","blank-cell","notFromBlank","auto-add","getBlankClass","fromBlank","deletePointsButtonDisabled","Components_SeriesSelector_SeriesSelector","CheckBox_default","CheckBoxOutlineBlank_default","IndeterminateCheckBox_default","data-id","data-point-index","rowSelected","data-data-point-index","dpi","DiscriminatorType","HelperDialog","dialogTitle","dialogModal","haveAllCalibrationPoints","haveAllCalibrationPointsAndValues","newTitle","haveAxisValues","config","showDiscriminator","selectedPointId","dataTableFontSize","discriminatorStyle","duxpanel","show","onClose","onCloseDialog","right","transform","Wizard_Wizard","WizardStep_WizardStep","graphTypeChanged","graphTypeId","gt","axisTypeChanged","values","dt","discriminatorChanged","discriminator","str","charAt","toUpperCase","slice","includeIndividuals","includeIndividualsChanged","AxisCalibration_AxisCalibration","subscriptionHandlers","removeAxisPoint","setAxes","DataCollection_DataCollection","StatusDisplay","_useState","useState","mousePos","valPos","_useState2","useEffect","newState","Settings","zoomTracksPointNudgesClicked","editModeClicked","advancedModeClicked","toggleZoomTracksPointNudgesClicked","toggleEditMode","toggleAdvancedMode","advancedMode","pointZoomSquaredChanged","nudgeInfoX","nudgeZoomOutX","nudgeZoomInX","nudgeSquaredChangedX","nudgeInfoY","nudgeZoomOutY","nudgeZoomInY","nudgeSquaredChangedY","dataTableFontSizeInfo","dataTableFontSizeDown","dataTableFontSizeUp","zoomTracksPointNudges","seriesSelectorLinesUp","seriesSelectorLinesDown","console","zoomTracksNudgesTitle","editModeTitle","advancedModeTitle","toggle-icon","on","FindReplace_default","More_default","MainUi","_settingsKey","subscribeToOurEvents","unsubscribeFromOurEvents","_devMode","devMode","version","_processDataTypes","middleColumn","_getInitialState","_bindHandlers","zoomTool","calibrationPlanIndex","showHelperDialog","helperDialogStep","data","focusedAxisPointIndex","dataUri","stepIndex","DataTypes","sort","b","lookup","m","fcp","raiseMousePointerMoved","dataSeriesCountChanged","dataPointsCountChanged","prevStep","nextStep","finishWizard","zoomToolZoomOut","zoomToolZoomIn","zoomToolSquaredChanged","zoomToolRefresh","pointZoomZoomOut","pointZoomZoomIn","_getConfig","getPlanStep","extractAxes","modifier","overlay","appElem","ReactDOM","findDOMNode","parentElement","metaHost","getElementById","mhd","or","bottom","innerText","join","mp","existingPoint","fromIndex","toStep","refDP","dpDepPt","applyAbsIf","depPt","refPt","origDataPoint","logExpandPoint","doMakePointRelative","_ref2","metaPoint","buildPoint","dpDep","getDataPoint","recalcDependentPoint","dpRp","newDataPointIndex","getSeriesById","addingAnother","getDataType","getAdvancePointersState","makePoint","syncIdToIndex","zoomToCurrentSubPoint","seriesId","axisPoint","ids","_this7","selectedSeries","selPoint","_this8","_getAxisPoint","curAxisPoint","pointPlan","correspondingOriginPointIndex","getSelectedPoint","newDataPoint","_this9","seriesCount","currentSeriesIndex","_this10","dpCount","newPointIndex","subPointNew","_this11","curPoint","dpRef","_this12","_ref8","_this13","_ref9","getAxis","ax","getScale","coord","pixRange","valRange","log10","horz","vert","t","origin","tm","translate","sm","compose","buildMatrix","_this14","extractAxis","existing","_setAxes","_extractAxes","_this15","prevCurrentSeries","raiseCurrentSeriesChanged","_this16","_buildNewSeries","pointsCount","dataPointsCount","newLabel","_this17","_this$state3","idx2","_this18","getNextCurrentSeriesId","_buildMatrix","_this19","_this20","regenExistingDataPoints","index","_ref11","_this21","providedSeries","ps","arr","j","providedCount","_config$dataSeriesCou","dataSeriesCount","_config$dataPointsCou","newSeriesCount","labels","fixeds","_this$state4","seriesState","_buildConfiguredSeriesState","_this22","_this23","configureSeries","_this24","_this25","_this26","_buildCalibrationPlan","_this27","newCombinedOrigin","xy","_ref12","nixy","_this28","_doZoomToolInOut","_this29","_this30","showCross","_doPointZoomInOut","_this31","_doNudgeZoomInOut","_doNudgeSquaredChanged","_doNudgeDataTableFontSize","down","_doSeriesSelectorLinesUpDown","eventName","handler","dispatchEvent","CustomEvent","bubbles","cancelable","composed","raiseMouseLeftClicked","pow","valPt","processConfig","retVal","imageUri","_this32","stateReset","initialState","_buildDevSeriesState","_this33","_this$state5","_this$state$data","Settings_Settings","Components_ImageDisplay","HelperDialog_HelperDialog","Components_StatusDisplay","Magnifier_Magnifier","color","opacity","strokeWidth","borderWidth","App","disableBrowserBackButton","apiDriver","moreProps","objectWithoutProperties","Components_ApiDriver","MainUi_MainUi","graphImageNames","path","GraphChooserApiDriver","selectedGraphInfo","thumbSize","graphChosenClicked","graphSelectionChanged","graphInfo","all","gi","t0","coords","indexToUrl","number","t1","getGraphImageData","graphData","raiseGraphChosen","item","multiple","url","nextSelected","background","backgroundSize","marginBottom","SelectionRectangles","_selectionRectangleClass","_selectionHandleClass","_externalChildNodesClass","_hovered","_readOnly","_minimumSize","_handleSize","_borderSize","mouseOverOutCounter","_handleInfo","nw","class","dy","dw","dh","ne","se","sw","namespace","selections","currentSelectionId","hoveredSelectionId","activeHandleKey","isWithinSelection","mouseDown","mouseDownAt","mouseNowAt","mouseWasAt","mouseUpAt","renderSelection","_handleMouseDown","_handleMouseUp","_handleMouseUpDoc","_handleMouseOver","_handleMouseOut","deleteSelectionClicked","_offsetParent","applyReadOnly","view","creating","selectionId","hoveredSelection","_this$getMouseCoords","getMouseCoords","addSelection","hi","mdx","mdy","_this$getMouseCoords2","_this$_offsetParent","_this3$state","nss","hhs","updateSelection","currentSelection","d","_getHandleResizeDeltas","newWidth","newHeight","x1","x2","y1","y2","rect","getBoundingClientRect","deletion","selectionChanged","selId","selection","_this$getMouseCoords3","notifySelectionChanged","_this$getMouseCoords4","_this$_offsetParent2","_doFinishOperation","_this$_offsetParent3","_this$getMouseCoords5","scrollWidth","scrollHeight","readOnlyIds","selRect","isReadOnly","hoverSelection","unhoverSelection","deleteSelection","_setHovered","selectionIndex","_classNames","_selection$view","getSelectionClass","getHandleClass","renderSelectionChildNodes","additionalClasses","additionalHandleClasses","--handleSize","--borderSize","hovered","data-handle-info-key","defaultProps","pdfjsLib","GlobalWorkerOptions","workerSrc","GraphChooserMainUi","_scaleSteps","pageCount","pageCanvasRefs","curPage","pageInfo","pdf","pdfUrl","selectOutcomes","lockSelectedGraphs","pdfScale","_docWrapper","_notSelectedId","setStateAsync","updater","graphOutcomeSelectionChanged","toggleLockSelectedGraphs","useSelectedGraphs","pdfScaleUp","pdfScaleDown","_doPdfScaleUpDown","pi","select","selectionRect","graphId","pageIndex","newOutcomeId","outcomeId","readOnly","_v$view","react_draggable_default","handle","bounds","DragHandle_default","o","info","curOutcomeId","_ref10","thing","fileUrl","outcomes","loadPdf","numPages","pageIndices","loaded","resetPageLoaded","pcr","pci","page","viewport","canvasContext","getPage","getViewport","render","promise","pii","getDocument","configure","loadPages","getSelectedGraphCount","useSelectedGraphsLabel","page-loaded-status","href","Lock_default","LockOpen_default","_ref16","_ref17","_ref18","data-page-index","Components_SelectionRectangles","GraphChooser","ApiDriver_GraphChooserApiDriver","MainUi_GraphChooserMainUi","GraphDisplayerApiDriver","graphClicked","raiseGraphClicked","_this$getConfig","getConfig","noConfig","imageStyle","alt","GraphDisplayerMainUi","GraphDisplayer","ApiDriver_GraphDisplayerApiDriver","MainUi_GraphDisplayerMainUi","Boolean","location","hostname","match","Graph2Data","src_App_0","html","_templateObject","LitElement","PdfGraphChooser","GraphChooser_GraphChooser","_templateObject2","PdfGraphDisplayer","GraphDisplayer_GraphDisplayer","_templateObject3","customElements","define","navigator","serviceWorker","ready","registration","unregister","webpackEmptyContext","req","Error","module","exports"],"mappings":"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","file":"static/js/main.e55a9bd4.chunk.js","sourcesContent":["\r\nimport React from 'react';\r\n\r\nconst SeriesSelector = (props) =>\r\n
    \r\n {props.series.map(s =>\r\n
  • \r\n \r\n
  • \r\n )}\r\n
\r\n\r\nexport default SeriesSelector;\r\n","\r\nimport React from 'react';\r\n\r\nconst PointSelector = (props) =>\r\n
    \r\n {props.points.map((p, i) =>\r\n
  • \r\n \r\n
  • \r\n )}\r\n
\r\n\r\nexport default PointSelector;\r\n","import React from 'react';\r\nimport uuid from 'uuid/v4';\r\n\r\nimport SeriesSelector from './ApiDriverComponents/SeriesSelector';\r\nimport PointSelector from './ApiDriverComponents/PointSelector';\r\n\r\n// UI to drive API investigation\r\nclass ApiDriver extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.newPointXChange = this.newPointXChange.bind(this);\r\n this.newPointYChange = this.newPointYChange.bind(this);\r\n this.addPoint = this.addPoint.bind(this);\r\n this.deletePoint = this.deletePoint.bind(this);\r\n this.addSeries = this.addSeries.bind(this);\r\n this.deleteSeries = this.deleteSeries.bind(this);\r\n this.changeSeriesLabel = this.changeSeriesLabel.bind(this);\r\n this.extractionComplete = this.extractionComplete.bind(this);\r\n this.selectCurrentSeries = this.selectCurrentSeries.bind(this);\r\n this.selectCurrentPoint = this.selectCurrentPoint.bind(this);\r\n this.newSeriesLabelChange = this.newSeriesLabelChange.bind(this);\r\n this.currentSeriesLabelChange = this.currentSeriesLabelChange.bind(this);\r\n\r\n this.state = {\r\n series: [],\r\n metaData: {\r\n currentSeriesId: '',\r\n newPoint: { x: '', y: '' },\r\n addPointOk: false,\r\n newSeriesLabel: '',\r\n newSeriesLabelOk: false,\r\n updatedSeriesLabel: '',\r\n updatedSeriesLabelOk: false,\r\n currentPointIndex: -1,\r\n deleteCurrentPointOk: false\r\n }\r\n };\r\n }\r\n mayUpdateSeriesLabel(currentSeriesId, label) {\r\n const labelUsed = !!this.state.series.find(s => s.label === label);\r\n const labelOk = !!label;\r\n\r\n return !!currentSeriesId && labelOk && !labelUsed;\r\n }\r\n selectCurrentSeries(ev) {\r\n const currentSeriesId = ev.target.value;\r\n const currentSeries = this.state.series.find(s => s.id === currentSeriesId);\r\n this.setState({\r\n ...this.state,\r\n metaData: {\r\n ...this.state.metaData,\r\n currentSeriesId,\r\n addPointOk: this.mayAddPoint(currentSeriesId, this.state.metaData.newPoint),\r\n updatedSeriesLabel: currentSeries.label,\r\n updatedSeriesLabelOk: this.mayUpdateSeriesLabel(currentSeriesId, currentSeries.label)\r\n }\r\n });\r\n }\r\n selectCurrentPoint(ev) {\r\n const pointIndex = ev.target.value;\r\n this.setState({\r\n ...this.state,\r\n metaData: {\r\n ...this.state.metaData,\r\n currentPointIndex: +pointIndex,\r\n deleteCurrentPointOk: !!pointIndex\r\n }\r\n });\r\n }\r\n isValidPoint(pt) {\r\n const isValid = !isNaN(pt.x) && !isNaN(pt.y);\r\n\r\n return isValid;\r\n }\r\n mayAddPoint(currentSeriesId, pt) {\r\n return this.isValidPoint(pt) && !!currentSeriesId;\r\n }\r\n _doNewPointChange(ev, x) {\r\n const { newPoint } = this.state.metaData;\r\n const updatedNewPoint = { ...newPoint, [x ? 'x' : 'y']: ev.target.value };\r\n this.setState({\r\n ...this.state,\r\n metaData: {\r\n ...this.state.metaData,\r\n newPoint: updatedNewPoint,\r\n addPointOk: this.mayAddPoint(this.state.metaData.currentSeriesId, updatedNewPoint)\r\n }\r\n });\r\n }\r\n newPointXChange(ev) {\r\n this._doNewPointChange(ev, true);\r\n }\r\n newPointYChange(ev) {\r\n this._doNewPointChange(ev, false);\r\n }\r\n getCurrentSeries() {\r\n const { series, metaData } = this.state;\r\n\r\n return series.find(s => s.id === metaData.currentSeriesId);\r\n }\r\n addPoint(ev) {\r\n const { series, metaData } = this.state;\r\n const currentSeries = this.getCurrentSeries();\r\n const newPt = { ...metaData.newPoint };\r\n const newPoints = [...currentSeries.points, newPt];\r\n const newSeries = series.map(s => s.label !== currentSeries.label ? s : { ...s, points: newPoints });\r\n this.setState({\r\n ...this.state,\r\n series: newSeries,\r\n metaData: {\r\n ...this.state.metaData,\r\n newPoint: { x: '', y: '' }\r\n }\r\n }, () => {\r\n this.props.raisePointAdded({\r\n message: 'Point added to series',\r\n newPoint: newPt,\r\n updatedSeries: newSeries.filter(s => s.id === metaData.currentSeriesId)\r\n });\r\n });\r\n }\r\n deletePoint() {\r\n const { currentSeriesId, currentPointIndex } = this.state.metaData;\r\n const currentSeries = this.getCurrentSeries();\r\n const seriesBefore = { ...currentSeries };\r\n const deletionPoint = currentSeries.points[currentPointIndex];\r\n\r\n this.setState({\r\n ...this.state,\r\n series: this.state.series.map(s => s.id !== currentSeriesId ? s : {\r\n ...s,\r\n points: s.points.filter((p, i) => i !== currentPointIndex)\r\n }),\r\n metaData: {\r\n ...this.state.metaData,\r\n deleteCurrentPointOk: currentPointIndex < currentSeries.points.length - 1\r\n }\r\n }, () => {\r\n this.props.raisePointDeleted({\r\n message: 'Point deleted from series.',\r\n deletedPoint: deletionPoint,\r\n seriesBefore,\r\n seriesAfter: this.getCurrentSeries()\r\n });\r\n });\r\n }\r\n newSeriesLabelChange(ev) {\r\n const label = ev.target.value.trim();\r\n const labelUsed = !!this.state.series.find(s => s.label === label);\r\n const labelOk = label.length > 0;\r\n this.setState({\r\n ...this.state,\r\n metaData: {\r\n ...this.state.metaData,\r\n newSeriesLabel: label,\r\n newSeriesLabelOk: labelOk && !labelUsed\r\n }\r\n });\r\n }\r\n currentSeriesLabelChange(ev) {\r\n const label = ev.target.value.trim();\r\n this.setState({\r\n ...this.state,\r\n metaData: {\r\n ...this.state.metaData,\r\n updatedSeriesLabel: label,\r\n updatedSeriesLabelOk: this.mayUpdateSeriesLabel(this.state.metaData.currentSeriesId, label)\r\n }\r\n });\r\n }\r\n addSeries() {\r\n const newSeries = {\r\n id: uuid(),\r\n label: this.state.metaData.newSeriesLabel,\r\n points: []\r\n };\r\n this.setState({\r\n ...this.state,\r\n series: [\r\n ...this.state.series,\r\n newSeries\r\n ],\r\n metaData: {\r\n ...this.state.metaData,\r\n newSeriesLabel: '',\r\n newSeriesLabelOk: false\r\n }\r\n }, () => {\r\n this.props.raiseSeriesAdded({\r\n message: 'Series added.',\r\n newSeries\r\n });\r\n })\r\n }\r\n deleteSeries() {\r\n const seriesToDelete = this.getCurrentSeries();\r\n this.setState({\r\n ...this.state,\r\n series: this.state.series.filter(s => s !== seriesToDelete),\r\n metaData: {\r\n ...this.state.metaData,\r\n currentSeriesId: ''\r\n }\r\n }, () => {\r\n this.props.raiseSeriesDeleted({\r\n message: 'Series deleted.',\r\n seriesDeleted: seriesToDelete,\r\n allSeries: this.state.series\r\n });\r\n });\r\n }\r\n changeSeriesLabel() {\r\n const { currentSeriesId, updatedSeriesLabel } = this.state.metaData;\r\n const currentSeries = this.getCurrentSeries();\r\n const seriesBefore = { ...currentSeries };\r\n const seriesAfter = { ...currentSeries, label: updatedSeriesLabel };\r\n this.setState({\r\n ...this.state,\r\n series: this.state.series.map(s => s.id !== currentSeriesId ? s : seriesAfter),\r\n metaData: {\r\n ...this.state.metaData,\r\n updatedSeriesLabelOk: false\r\n }\r\n }, () => {\r\n this.props.raiseSeriesLabelChanged({\r\n message: 'Series labelChanged.',\r\n seriesBefore,\r\n seriesAfter\r\n });\r\n });\r\n }\r\n extractionComplete() {\r\n this.props.raiseExtractionComplete({\r\n message: 'Extraction complete.',\r\n series: this.state.series\r\n });\r\n }\r\n componentDidMount() {\r\n document.title = 'ApiDriver';\r\n }\r\n render() {\r\n const stateText = JSON.stringify(this.state, null, 2);\r\n const { metaData } = this.state;\r\n const currentSeries = this.getCurrentSeries();\r\n return (\r\n
\r\n {/*\"graph\"
*/}\r\n
\r\n                    {stateText}\r\n                
\r\n
\r\n
\r\n Selected series\r\n \r\n
\r\n
\r\n Add point to selected series\r\n \r\n \r\n Add point
\r\n
\r\n
\r\n Delete point from selected series\r\n \r\n Delete point
\r\n
\r\n
\r\n Add series\r\n \r\n Add series
\r\n
\r\n
\r\n Delete series\r\n
\r\n
\r\n
\r\n Change selected series label\r\n \r\n Change series label
\r\n
\r\n
\r\n Extraction complete\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ApiDriver;\r\n","\r\nconst PointType = {\r\n AXIS_CALIBRATION: 'axis_calibration',\r\n AXIS_CALIBRATION_SAMPLE: 'axis_calibration_sample',\r\n DATA_POINT: 'data_point',\r\n DATA_POINT_TOP_BAR: 'data_point_top_bar',\r\n DATA_POINT_BOTTOM_BAR: 'data_point_bottom_bar',\r\n DATA_POINT_LEFT_BAR: 'data_point_left_bar',\r\n DATA_POINT_RIGHT_BAR: 'data_point_right_bar',\r\n DATA_POINT_CROSS_HAIR: 'data_point_cross_hair'\r\n};\r\n\r\nexport default PointType;","import PointType from './PointType';\r\n\r\nconst dataTypes = [{\r\n id: \"mean-only\",\r\n text: \"Mean only\",\r\n abbrev: \"Mean\",\r\n dataPoints: [{\r\n name: \"Mean\",\r\n abbrev: \"Mean\",\r\n css: \"mean\",\r\n isReferencePoint: true,\r\n pointType: PointType.DATA_POINT\r\n }],\r\n allowAreaCalculation: true\r\n}, {\r\n id: \"mean-and-standard-error\",\r\n text: \"Mean and Standard Error (SEM)\",\r\n abbrev: \"MeanSE\",\r\n dataPoints: [{\r\n name: \"Mean\",\r\n abbrev: \"Mean\",\r\n css: \"mean\",\r\n isReferencePoint: true,\r\n pointType: PointType.DATA_POINT\r\n }, {\r\n name: \"Standard Error (upper or lower)\",\r\n abbrev: \"SEM\",\r\n symmetric: \"true\",\r\n css: \"variance\",\r\n pointType: {\r\n upper: PointType.DATA_POINT_TOP_BAR,\r\n lower: PointType.DATA_POINT_BOTTOM_BAR\r\n }\r\n }]\r\n}, {\r\n id: \"mean-and-standard-deviation\",\r\n text: \"Mean and Standard Deviation (SD)\",\r\n abbrev: \"MeanSD\",\r\n dataPoints: [{\r\n name: \"Mean\",\r\n abbrev: \"Mean\",\r\n css: \"mean\",\r\n isReferencePoint: true,\r\n pointType: PointType.DATA_POINT\r\n }, {\r\n name: \"Standard Deviation (upper or lower)\",\r\n abbrev: \"SD\",\r\n symmetric: \"true\",\r\n css: \"variance\",\r\n pointType: {\r\n upper: PointType.DATA_POINT_TOP_BAR,\r\n lower: PointType.DATA_POINT_BOTTOM_BAR\r\n }\r\n }]\r\n}, {\r\n id: \"mean-and-confidence-interval-95\",\r\n text: \"Mean and 95% CI\",\r\n abbrev: \"Mean95CI\",\r\n dataPoints: [{\r\n name: \"Mean\",\r\n abbrev: \"Mean\",\r\n css: \"mean\",\r\n isReferencePoint: true,\r\n pointType: PointType.DATA_POINT\r\n }, {\r\n name: \"95% Confidence range (upper)\",\r\n abbrev: \"CIu95\",\r\n css: \"variance\",\r\n pointType: PointType.DATA_POINT_TOP_BAR\r\n }, {\r\n name: \"95% Confidence range (lower)\",\r\n abbrev: \"CIl95\",\r\n css: \"variance\",\r\n pointType: PointType.DATA_POINT_BOTTOM_BAR\r\n }]\r\n}, {\r\n id: \"mean-and-confidence-interval-99\",\r\n text: \"Mean and 99% CI\",\r\n abbrev: \"MeanCI99\",\r\n dataPoints: [{\r\n name: \"Mean\",\r\n abbrev: \"Mean\",\r\n css: \"mean\",\r\n isReferencePoint: true,\r\n pointType: PointType.DATA_POINT\r\n }, {\r\n name: \"99% Confidence range (upper)\",\r\n abbrev: \"CIu99\",\r\n css: \"variance\",\r\n pointType: PointType.DATA_POINT_TOP_BAR\r\n }, {\r\n name: \"99% Confidence range (lower)\",\r\n abbrev: \"CIl99\",\r\n css: \"variance\",\r\n pointType: PointType.DATA_POINT_BOTTOM_BAR\r\n }]\r\n}, {\r\n id: \"median-and-confidence-interval-95\",\r\n text: \"Median and 95% CI\",\r\n abbrev: \"Median95CI\",\r\n dataPoints: [{\r\n name: \"Median\",\r\n abbrev: \"Median\",\r\n css: \"mean\",\r\n isReferencePoint: true,\r\n pointType: PointType.DATA_POINT\r\n }, {\r\n name: \"95% Confidence range (upper)\",\r\n abbrev: \"CIu95\",\r\n css: \"variance\",\r\n pointType: PointType.DATA_POINT_TOP_BAR\r\n }, {\r\n name: \"95% Confidence range (lower)\",\r\n abbrev: \"CIl95\",\r\n css: \"variance\",\r\n pointType: PointType.DATA_POINT_BOTTOM_BAR\r\n }]\r\n}, {\r\n id: \"median-and-confidence-interval-99\",\r\n text: \"Median and 99% CI\",\r\n abbrev: \"Median99CI\",\r\n dataPoints: [{\r\n name: \"Median\",\r\n abbrev: \"Median\",\r\n css: \"mean\",\r\n isReferencePoint: true,\r\n pointType: PointType.DATA_POINT\r\n }, {\r\n name: \"99% Confidence range (upper)\",\r\n abbrev: \"CIu99\",\r\n css: \"variance\",\r\n pointType: PointType.DATA_POINT_TOP_BAR\r\n }, {\r\n name: \"99% Confidence range (lower)\",\r\n abbrev: \"CIl99\",\r\n css: \"variance\",\r\n pointType: PointType.DATA_POINT_BOTTOM_BAR\r\n }]\r\n}, {\r\n id: \"median-and-interquartile-range\",\r\n text: \"Median and Interquartile Range\",\r\n abbrev: \"MeadianIQR\",\r\n dataPoints: [{\r\n name: \"Median\",\r\n abbrev: \"Median\",\r\n css: \"mean\",\r\n isReferencePoint: true,\r\n pointType: PointType.DATA_POINT\r\n }, {\r\n name: \"Lower Quartile\",\r\n abbrev: \"Q1\",\r\n css: \"variance\",\r\n pointType: PointType.DATA_POINT_BOTTOM_BAR\r\n }, {\r\n name: \"Upper Quartile\",\r\n abbrev: \"Q3\",\r\n css: \"variance\",\r\n pointType: PointType.DATA_POINT_TOP_BAR\r\n }]\r\n}, {\r\n id: \"box-and-whisker\",\r\n text: \"Box and whisker plot\",\r\n abbrev: \"B&W\",\r\n dataPoints: [{\r\n name: \"Median\",\r\n abbrev: \"Median\",\r\n css: \"mean\",\r\n isReferencePoint: true,\r\n pointType: PointType.DATA_POINT\r\n }, {\r\n name: \"Lower Quartile\",\r\n abbrev: \"Q1\",\r\n css: \"variance\",\r\n pointType: PointType.DATA_POINT_BOTTOM_BAR\r\n }, {\r\n name: \"Upper Quartile\",\r\n abbrev: \"Q3\",\r\n css: \"variance\",\r\n pointType: PointType.DATA_POINT_TOP_BAR\r\n }, {\r\n name: \"Lower\",\r\n abbrev: \"Lower\",\r\n css: \"variance\",\r\n pointType: PointType.DATA_POINT_BOTTOM_BAR\r\n }, {\r\n name: \"Upper\",\r\n abbrev: \"Upper\",\r\n css: \"variance\",\r\n pointType: PointType.DATA_POINT_TOP_BAR\r\n }]\r\n}];\r\n\r\nexport default dataTypes;\r\n","\r\nconst AxisType = {\r\n HORIZONTAL: 'horizontal',\r\n VERTICAL: 'vertical',\r\n BOTH: 'both'\r\n};\r\n\r\nexport default AxisType;","\r\nconst StepType = {\r\n AXIS_CALIBRATION_POINT: 'axis_calibration_point',\r\n AXIS_CALIBRATION_VALUES: 'axis_calibration_values',\r\n ENTER_DATA_POINTS: 'enter_data_points',\r\n \r\n MAY_EXTRACT_AXES: 'may_extract_axes',\r\n MAY_BUILD_MATRIX: 'may_define_matrix'\r\n};\r\n\r\nexport default StepType;","import PointType from './PointType';\r\n\r\nconst barSide = 5;\r\nconst selectionRadius = barSide * 2 + 2;\r\n\r\nconst pointPlans = {\r\n [PointType.AXIS_CALIBRATION]: [{\r\n radius: 1,\r\n fillStyle: 'red',\r\n accent: true,\r\n gco: 'difference'\r\n }, {\r\n radius: 3,\r\n strokeStyle: 'black',\r\n accent: true,\r\n whenSelected: false,\r\n gco: 'difference'\r\n }, {\r\n radius: 3,\r\n strokeStyle: 'black',\r\n whenSelected: true,\r\n gco: 'difference'\r\n }, {\r\n radius: 5,\r\n strokeStyle: 'red',\r\n whenSelected: true,\r\n accent: true,\r\n lineWidth: 2,\r\n gco: 'difference'\r\n }],\r\n [PointType.AXIS_CALIBRATION_SAMPLE]: [{\r\n radius: 1,\r\n fillStyle: 'red',\r\n accent: true\r\n }, {\r\n radius: 3,\r\n strokeStyle: 'black',\r\n accent: true,\r\n whenSelected: false\r\n }, {\r\n radius: 3,\r\n strokeStyle: 'black',\r\n whenSelected: true\r\n }, {\r\n radius: 6,\r\n strokeStyle: 'red',\r\n whenSelected: true,\r\n accent: true,\r\n lineWidth: 2\r\n }],\r\n [PointType.DATA_POINT]: [{\r\n radius: 2,\r\n fillStyle: 'cyan',\r\n gco: 'difference'\r\n }, {\r\n radius: barSide,\r\n strokeStyle: 'cyan',\r\n gco: 'difference',\r\n whenSelected: true,\r\n lineWidth: 1\r\n }, {\r\n radius: selectionRadius,\r\n strokeStyle: 'cyan',\r\n whenSelected: true,\r\n gco: 'difference'\r\n }],\r\n [PointType.DATA_POINT_BOTTOM_BAR]: [{\r\n lineWidth: 1,\r\n strokeStyle: 'cyan',\r\n gco: 'difference',\r\n lines: [{\r\n moveTo: { x: 0, y: -barSide }\r\n }, {\r\n lineTo: { x: 0, y: 0 }\r\n }, {\r\n moveTo: { x: -barSide, y: 0 }\r\n }, {\r\n lineTo: { x: +barSide, y: 0 }\r\n }]\r\n }, {\r\n radius: selectionRadius,\r\n strokeStyle: 'cyan',\r\n whenSelected: true,\r\n gco: 'difference'\r\n }],\r\n [PointType.DATA_POINT_TOP_BAR]: [{\r\n lineWidth: 1,\r\n strokeStyle: 'cyan',\r\n gco: 'difference',\r\n lines: [{\r\n moveTo: { x: 0, y: barSide }\r\n }, {\r\n lineTo: { x: 0, y: 0 }\r\n }, {\r\n moveTo: { x: -barSide, y: 0 }\r\n }, {\r\n lineTo: { x: +barSide, y: 0 }\r\n }]\r\n }, {\r\n radius: selectionRadius,\r\n strokeStyle: 'cyan',\r\n whenSelected: true,\r\n gco: 'difference'\r\n }],\r\n [PointType.DATA_POINT_LEFT_BAR]: [{\r\n lineWidth: 1,\r\n strokeStyle: 'cyan',\r\n gco: 'difference',\r\n lines: [{\r\n moveTo: { x: barSide, y: 0 }\r\n }, {\r\n lineTo: { x: 0, y: 0 }\r\n }, {\r\n moveTo: { x: 0, y: +barSide }\r\n }, {\r\n lineTo: { x: 0, y: -barSide }\r\n }]\r\n }, {\r\n radius: selectionRadius,\r\n strokeStyle: 'cyan',\r\n whenSelected: true,\r\n gco: 'difference'\r\n }],\r\n [PointType.DATA_POINT_RIGHT_BAR]: [{\r\n lineWidth: 1,\r\n strokeStyle: 'cyan',\r\n gco: 'difference',\r\n lines: [{\r\n moveTo: { x: -barSide, y: 0 }\r\n }, {\r\n lineTo: { x: 0, y: 0 }\r\n }, {\r\n moveTo: { x: 0, y: +barSide }\r\n }, {\r\n lineTo: { x: 0, y: -barSide }\r\n }]\r\n }, {\r\n radius: selectionRadius,\r\n strokeStyle: 'cyan',\r\n whenSelected: true,\r\n gco: 'difference'\r\n }],\r\n [PointType.DATA_POINT_CROSS_HAIR]: [{\r\n lineWidth: 1,\r\n strokeStyle: 'cyan',\r\n gco: 'difference',\r\n lines: [{\r\n moveTo: { x: -barSide, y: 0 }\r\n }, {\r\n lineTo: { x: barSide, y: 0 }\r\n }, {\r\n moveTo: { x: 0, y: -barSide }\r\n }, {\r\n lineTo: { x: 0, y: barSide }\r\n }]\r\n }, {\r\n radius: selectionRadius,\r\n strokeStyle: 'cyan',\r\n whenSelected: true,\r\n gco: 'difference'\r\n }]\r\n};\r\n\r\nexport default pointPlans;","import { intersect } from 'line-intersect-2d';\r\nimport { scale, translate, compose, applyToPoint } from 'transformation-matrix';\r\nimport { pdfjs } from 'react-pdf';\r\n\r\nimport pointPlans from './PointPlans';\r\n\r\nexport async function loadImageThen(srcUrl) {\r\n return new Promise((resolve, reject) => {\r\n const img = document.createElement('img');\r\n img.crossOrigin = 'Anonymous';\r\n img.onload = () => {\r\n resolve(img);\r\n };\r\n img.onerror = reject;\r\n img.src = srcUrl;\r\n });\r\n}\r\nexport async function getImageAsDataUrl(srcUrl) {\r\n return await loadImageThen(srcUrl).then(async img => {\r\n const { naturalWidth, naturalHeight } = img;\r\n const canvas = document.createElement('canvas');\r\n canvas.width = naturalWidth;\r\n canvas.height = naturalHeight;\r\n const ctx = canvas.getContext('2d');\r\n ctx.drawImage(img, 0, 0, naturalWidth, naturalHeight);\r\n const dataUrl = ctx.canvas.toDataURL();\r\n return dataUrl;\r\n });\r\n}\r\nexport function getImageDataAsDataUrl(canvas, x, y, width, height) {\r\n const ctx = canvas.getContext('2d');\r\n const imageData = ctx.getImageData(x, y, width, height);\r\n\r\n const canvas2 = document.createElement('canvas');\r\n canvas2.width = width;// * 2;\r\n canvas2.height = height;// * 2;\r\n // canvas2.scale = 1;\r\n const ctx2 = canvas2.getContext('2d');\r\n\r\n ctx2.putImageData(imageData, 0, 0);\r\n const dataUrl = ctx2.canvas.toDataURL();\r\n return dataUrl;\r\n}\r\nexport function toRadians(deg) {\r\n return (Math.PI / 180) * deg;\r\n}\r\n\r\n// logPropChanges\r\n// vetoList - object with keys of property names. If value is:\r\n// false - exclude from logging\r\n// true - include in logging\r\n// If key is absent, include in logging\r\nexport function logPropChanges(prefix, prevProps, obj, vetoList = {}) {\r\n Object.entries(prevProps).forEach(([k, v]) => {\r\n if (v !== obj.props[k] && vetoList[k] !== false) {\r\n console.log(`${prefix}.${k}: ${JSON.stringify(v)} -> ${JSON.stringify(obj.props[k])}`);\r\n }\r\n });\r\n}\r\n\r\n\r\nexport function drawPoint({ ctx, point, upper, selected, dpr, accentColor, pointZoom }) {\r\n let pointType = point.type;\r\n if (typeof pointType === 'object' && upper !== undefined) {\r\n pointType = upper\r\n ? pointType.upper\r\n : pointType.lower;\r\n }\r\n const plan = pointPlans[pointType];\r\n pointZoom = pointZoom || 1;\r\n const lineWidth = 1 * pointZoom;\r\n\r\n const px = point.x * dpr, py = point.y * dpr;\r\n ctx.lineWidth = lineWidth;\r\n plan.forEach(p => {\r\n // eslint-disable-next-line eqeqeq\r\n const drawRing = p.whenSelected === selected || p.whenSelected == undefined;\r\n if (drawRing) {\r\n ctx.beginPath();\r\n if (p.gco) {\r\n ctx.globalCompositeOperation = p.gco;\r\n }\r\n if (p.lineWidth) ctx.lineWidth = p.lineWidth * pointZoom;\r\n if (p.fillStyle) ctx.fillStyle = p.accent ? accentColor : p.fillStyle;\r\n if (p.strokeStyle) ctx.strokeStyle = p.accent ? accentColor : p.strokeStyle;\r\n ctx.setLineDash(p.lineDash ? p.lineDash : []);\r\n ctx.lineDashOffset = p.lineDashOffset ? p.lineDashOffset : 0;\r\n\r\n if (p.radius !== undefined) {\r\n ctx.arc(px, py, p.radius * dpr * pointZoom / 2, 0, Math.PI * 2, 0);\r\n }\r\n if (p.lines) {\r\n p.lines.forEach(c => {\r\n if (c.moveTo) {\r\n ctx.moveTo(pointZoom * c.moveTo.x + px, pointZoom * c.moveTo.y + py);\r\n }\r\n if (c.lineTo) {\r\n ctx.lineTo(pointZoom * c.lineTo.x + px, pointZoom * c.lineTo.y + py);\r\n }\r\n });\r\n }\r\n\r\n if (p.fillStyle) ctx.fill();\r\n if (p.strokeStyle) ctx.stroke();\r\n ctx.globalCompositeOperation = 'source-over';\r\n }\r\n });\r\n}\r\n\r\n// iterates the array in the order specified by the indices in 'order'\r\n// callback is (elem, arrayIndex, iterationIndex) => {}\r\nexport function forEachOrder(ar, order, callback) {\r\n const ub = order.length - 1;\r\n for (var i = 0; i <= ub; i++) {\r\n const idx = order[i];\r\n callback(ar[idx], idx, i);\r\n }\r\n}\r\n\r\n// iterates the array in the 0..n order with the exception that index 'lastIndex' is skipped\r\n// when encountered in its natural position and iterated after all others.\r\n// callback is (elem, index) => {}\r\nexport function forEachExplicitLast(ar, lastIndex, callback) {\r\n const len = ar.length;\r\n const ub = len - 1;\r\n const order = [...Array(len)].map((_, i) => i < ub ? (i < lastIndex ? i : i + 1) : lastIndex);\r\n return forEachOrder(ar, order, callback);\r\n}\r\n\r\nexport function getLineIntersection(pt1, pt2, pt3, pt4) {\r\n const tolerance = 0.000005; // default\r\n const allowExtend = true;\r\n const point = intersect([pt1.x, pt1.y], [pt2.x, pt2.y], [pt3.x, pt3.y], [pt4.x, pt4.y], tolerance, allowExtend);\r\n return point;\r\n}\r\n\r\nexport function roundTo(num, decimalPlaces) {\r\n // eslint-disable-next-line eqeqeq\r\n const ret = num != undefined ? num.toFixed(decimalPlaces) : num;\r\n return ret;\r\n}\r\n\r\n// origin: [x: number, y: number],\r\n// scales: [x: number, y: number]\r\nexport function buildMatrix(origin, scales) {\r\n const tm = translate(...origin);\r\n const sm = scale(...scales);\r\n const matrix = compose(sm, tm);\r\n\r\n return matrix;\r\n}\r\n\r\n// matrix: [ a: number, b: number, c: number, d: number, e: number, f: number ]\r\n// point: { x: number, y: number }\r\nexport function transformPoint(matrix, point) {\r\n const transformedPoint = applyToPoint(matrix, point);\r\n\r\n return transformedPoint;\r\n}\r\n\r\nexport function addMissingProperties(destOb, newProps) {\r\n return Object.keys(newProps)\r\n .reduce((a, newProp) => !a.hasOwnProperty(newProp)\r\n ? { ...a, [newProp]: newProps[newProp] }\r\n : a,\r\n destOb\r\n );\r\n}\r\n\r\nexport function tweakColour(col, amt) {\r\n\r\n var usePound = false;\r\n\r\n if (col[0] === '#') {\r\n col = col.slice(1);\r\n usePound = true;\r\n }\r\n\r\n var num = parseInt(col, 16);\r\n\r\n var r = (num >> 16) + amt;\r\n\r\n if (r > 255) r = 255;\r\n else if (r < 0) r = 0;\r\n\r\n var b = ((num >> 8) & 0x00FF) + amt;\r\n\r\n if (b > 255) b = 255;\r\n else if (b < 0) b = 0;\r\n\r\n var g = (num & 0x0000FF) + amt;\r\n\r\n if (g > 255) g = 255;\r\n else if (g < 0) g = 0;\r\n\r\n return (usePound ? '#' : '') + (g | (b << 8) | (r << 16)).toString(16);\r\n}\r\n\r\nexport function capitalize(str) {\r\n str = str.trim();\r\n\r\n return str && str.length > 0\r\n ? str.charAt(0).toUpperCase() + (str.length > 1\r\n ? str.slice(1).toLowerCase()\r\n : ''\r\n )\r\n : '';\r\n}\r\n\r\nexport function getIntegerAttribute(elem, attrName) {\r\n const attr = elem.getAttribute(attrName);\r\n const value = attr !== undefined ? +attr : attr;\r\n\r\n return value;\r\n}\r\n\r\nexport function removeProps(ob, excludeProps = []) {\r\n return Object.entries(ob).filter(([k, _]) => !excludeProps.includes(k)).reduce((acc, [k, v]) => ({ ...acc, [k]: v }), {});\r\n}\r\n\r\nexport function dumpState(component, comment, topLevelWhiteList) {\r\n const restrictedState = removeProps(\r\n component.state, [\r\n 'config',\r\n 'pointerFocus',\r\n ...Object.keys(component.state).filter(k => !!topLevelWhiteList && !topLevelWhiteList.includes(k))\r\n ]\r\n );\r\n console.log(`${JSON.stringify(restrictedState, null, 2)}-${comment}`);\r\n}\r\n\r\n\r\nexport async function putOnClipboard(text) {\r\n return await navigator.clipboard.writeText(text);\r\n}\r\n\r\nexport async function getFromClipboard(text) {\r\n return await navigator.clipboard.readText();\r\n}\r\n\r\nexport function keyDownArrowKeyPressed(ev) {\r\n const keys = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight']\r\n return keys.includes(ev.code);\r\n}\r\n\r\nexport function getMidpointsOfAdjacentPairs(points) {\r\n const midpoints = points.reduce((ar, v, i) => {\r\n if (i % 2 === 0) {\r\n ar.push({ ...v });\r\n } else {\r\n const ob = ar[Math.floor(i / 2)];\r\n ob.x = (ob.x + v.x) / 2;\r\n ob.y = (ob.y + v.y) / 2;\r\n }\r\n return ar;\r\n }, []);\r\n\r\n return midpoints;\r\n}\r\n\r\nexport function isEmptyObject(ob) {\r\n return Object.entries(ob).length === 0 && ob.constructor === Object;\r\n}\r\n\r\nexport function applyIntegerLimits(val, min, max) {\r\n return Math.max(\r\n Math.min(val, max || Number.MAX_SAFE_INTEGER),\r\n min || Number.MIN_SAFE_INTEGER\r\n );\r\n}\r\n\r\nexport function charRange(fromChar, toChar) {\r\n const from = fromChar.charCodeAt(0);\r\n const to = toChar.charCodeAt(0);\r\n return [...Array(to - from + 1).keys()].map(k => String.fromCharCode(from + k));\r\n}\r\n\r\nexport function getOffset(el) {\r\n var x = 0;\r\n var y = 0;\r\n\r\n while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) {\r\n // FF & IE don't support body's scrollTop - use window instead\r\n x += el.offsetLeft - (el.tagName === 'BODY' ? window.pageXOffset : el.scrollLeft);\r\n y += el.offsetTop - (el.tagName === 'BODY' ? window.pageYOffset : el.scrollTop);\r\n el = el.offsetParent;\r\n }\r\n\r\n return { x: x, y: y };\r\n}\r\n\r\nexport function readAsDataURL(file) {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = (event) => {\r\n switch (event.target.error.code) {\r\n case event.target.error.NOT_FOUND_ERR:\r\n return reject(new Error('Error while reading a file: File not found.'));\r\n case event.target.error.NOT_READABLE_ERR:\r\n return reject(new Error('Error while reading a file: File not readable.'));\r\n case event.target.error.SECURITY_ERR:\r\n return reject(new Error('Error while reading a file: Security error.'));\r\n case event.target.error.ABORT_ERR:\r\n return reject(new Error('Error while reading a file: Aborted.'));\r\n default:\r\n return reject(new Error('Error while reading a file.'));\r\n }\r\n };\r\n reader.readAsDataURL(file);\r\n\r\n return null;\r\n });\r\n}\r\n\r\nexport function getSvgNodeInfo(node) {\r\n var svg = node.ownerSVGElement;\r\n\r\n let pt1 = svg.createSVGPoint();\r\n pt1.x = node.x.baseVal.value;\r\n pt1.y = node.y.baseVal.value;\r\n const width = node.width.baseVal.value;\r\n const height = node.height.baseVal.value;\r\n\r\n const transforms = [];\r\n while (true) {\r\n var transform = node.transform.baseVal.consolidate();\r\n if (transform) {\r\n const { matrix } = transform;\r\n transforms.push(matrix);\r\n }\r\n if (node.parentNode === svg)\r\n break;\r\n node = node.parentNode;\r\n }\r\n const cm = compose(...transforms.reverse());\r\n const combinedMatrix = svg.createSVGMatrix();\r\n Object.assign(combinedMatrix, cm);\r\n pt1 = pt1.matrixTransform(combinedMatrix);\r\n\r\n return {\r\n svg,\r\n x: pt1.x,\r\n y: pt1.y,\r\n width: width * combinedMatrix.a,\r\n height: height * combinedMatrix.d,\r\n combinedMatrix\r\n };\r\n}\r\n\r\nexport function getPageBounds(page, pageOps) {\r\n return { x: 0, y: 0, w: page.width, h: page.height };\r\n}\r\nexport function getImageBounds(pageOps, i) {\r\n let rect = { x: 0, y: 0, w: 0, h: 0 };\r\n // const isRestore = item => item.fn === pdfjs.OPS.restore;\r\n // const isTransform = item => item.fn === pdfjs.OPS.transform;\r\n const isConstructPath = item => item.fn === pdfjs.OPS.constructPath;\r\n // const isEoClip = item => item.fn === pdfjs.OPS.eoClip;\r\n\r\n const constructPathOp = finder({\r\n ar: pageOps,\r\n matcher: isConstructPath,\r\n startIndex: i,\r\n direction: -1\r\n });\r\n if (!constructPathOp) { return rect; }\r\n\r\n const { args } = constructPathOp.matched;\r\n const [pathOp] = args[0];\r\n const [x, y, w, h] = args[1];\r\n if (pathOp !== pdfjs.OPS.rectangle) {\r\n // debugger;\r\n throw new Error('Unexpected pathOp');\r\n }\r\n rect = {\r\n x, y, w, h\r\n };\r\n return rect;\r\n // const restoreOp = finder({\r\n // ar: pageOps,\r\n // matcher: isRestore,\r\n // startIndex: i,\r\n // direction: -1\r\n // });\r\n // if (!restoreOp) { return rect; }\r\n\r\n // const transforms_ = finder({\r\n // ar: pageOps,\r\n // matcher: isTransform,\r\n // startIndex: restoreOp.index + 1,\r\n // stopIndex: i - 1,\r\n // direction: 1,\r\n // maxFindCount: -1\r\n // });\r\n // const transforms = transforms_.map(t => {\r\n // const ar = t.matched.args;\r\n // return charRange('a', 'f').reduce((a, c, i) => ({ ...a, [c]: ar[i] }), {});\r\n // });\r\n // const combinedMatrix = compose(...transforms.reverse());\r\n // const pt1 = { x: rect.x, y: rect.y };\r\n // const pt2 = { x: rect.w - pt1.x, y: rect.h - pt1.t };\r\n // const pt1_ = applyToPoint(combinedMatrix, pt1);\r\n // const pt2_ = applyToPoint(combinedMatrix, pt2);\r\n\r\n // return { ...pt1_, w: pt2_.x - pt1_.x, h: pt2_.y - pt1_.y };\r\n}\r\n\r\nexport function getPositionInPdfPage(pageOps, i) {\r\n let pos = { x: 0, y: 0 };\r\n\r\n return pos;\r\n // const isRestore = item => item.fn === pdfjs.OPS.restore;\r\n // const isTransform = item => item.fn === pdfjs.OPS.transform;\r\n // const isConstructPath = item => item.fn === pdfjs.OPS.constructPath;\r\n\r\n // const contructPathOp = finder({\r\n // ar: pageOps,\r\n // matcher: isConstructPath,\r\n // startIndex: i,\r\n // direction: -1\r\n // });\r\n // if (!contructPathOp) { return pos; }\r\n\r\n // // const restoreOp = finder({\r\n // // ar: pageOps,\r\n // // matcher: isRestore,\r\n // // startIndex: i,\r\n // // direction: -1\r\n // // });\r\n // // if (!restoreOp) { return pos; }\r\n\r\n // const transforms_ = finder({\r\n // ar: pageOps,\r\n // matcher: isTransform,\r\n // startIndex: restoreOp.index + 1,\r\n // stopIndex: i - 1,\r\n // direction: 1,\r\n // maxFindCount: -1\r\n // });\r\n // const transforms = transforms_.map(t => {\r\n // const ar = t.matched.args;\r\n // return charRange('a', 'f').reduce((a, c, i) => ({ ...a, [c]: ar[i] }), {});\r\n // });\r\n // const combinedMatrix = compose(...transforms.reverse());\r\n // const transformedPoint = applyToPoint(combinedMatrix, pos);\r\n // return transformedPoint;\r\n}\r\n\r\n\r\nexport async function getBlob(url) {\r\n const res = await fetch(url);\r\n const blob = await res.blob();\r\n return blob;\r\n}\r\n\r\nexport function flatten(ar) {\r\n return ar.reduce((a, v) => a.concat(v), []);\r\n}\r\n\r\n// finder\r\n// ------\r\n// Finds one or more array-items matched by the matcher\r\n// With direction = 1, searches forwards from the first element of ar\r\n// With direction = -1, searches backwards from the last element\r\n// Or, in both cases searches from the specified startIndex\r\n// ...until the specified stopIndex which defaults to the end of the array in the direction of traversal\r\n// matcher = (item, index, ar) => predicate(item, index, ar)\r\n// maxFindCount: \r\n// -1: find all matched, returns array of { matched, index }\r\n// 1: find first matched, returns { matched, index } or null\r\n// n: find first n matched, returns an array of { matched, index }\r\n//\r\nexport function finder({\r\n ar,\r\n matcher,\r\n startIndex,\r\n stopIndex,\r\n direction,\r\n maxFindCount = 1\r\n} = {}) {\r\n if (!ar || !matcher) {\r\n throw new Error('finder requires an array and matcher at minimum');\r\n }\r\n\r\n const findOne = maxFindCount === 1;\r\n\r\n if (!!startIndex && !!stopIndex) {\r\n direction = startIndex < stopIndex ? 1 : -1;\r\n }\r\n if (!direction) {\r\n direction = 1;\r\n }\r\n if (!startIndex) {\r\n startIndex = direction === 1 ? 0 : ar.length - 1;\r\n }\r\n if (!stopIndex) {\r\n stopIndex = direction === 1 ? ar.length - 1 : 0\r\n }\r\n\r\n const { from, to, step, condition } = {\r\n from: startIndex,\r\n to: stopIndex,\r\n step: direction === 1 ? 1 : -1,\r\n condition: direction === 1\r\n ? (a, b) => a <= b\r\n : (a, b) => a >= b\r\n };\r\n\r\n let found = [];\r\n\r\n for (let i = from; condition(i, to); i += step) {\r\n const item = ar[i];\r\n\r\n if (matcher(item, i, ar)) {\r\n found.push({ matched: item, index: i });\r\n\r\n if (maxFindCount !== -1 && found.length === maxFindCount) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return findOne\r\n ? (found.length !== 0\r\n ? found[0]\r\n : null\r\n )\r\n : found;\r\n}\r\n\r\nexport function px(value) {\r\n return `${value}${value !== 0 ? 'px' : ''}`;\r\n}\r\n\r\nexport function onlyWhitelistedPropsHaveChanged(oldOb, newOb, whitelist) {\r\n const nonWhitelistedChanges =\r\n Object.entries(newOb)\r\n .filter(([k, v]) => oldOb[k] !== v)\r\n .filter(([k, v]) => !whitelist.includes(k));\r\n\r\n const premiseTrue = nonWhitelistedChanges.length === 0;\r\n return premiseTrue;\r\n}\r\n\r\nexport function clone(thing) {\r\n return JSON.parse(JSON.stringify(thing));\r\n}\r\n\r\nexport function persistSettings({ component, localStorage, settingsKey }) {\r\n if (localStorage) {\r\n localStorage.setItem(settingsKey, JSON.stringify(component.state.settings))\r\n }\r\n}\r\n\r\nexport function recoverSettings({ component, localStorage, settingsKey }, then = () => { }) {\r\n const ls = localStorage.getItem(settingsKey);\r\n let recoveredSettings;\r\n try {\r\n recoveredSettings = JSON.parse(ls);\r\n }\r\n catch { }\r\n\r\n const { settings } = component.state;\r\n if (recoveredSettings && recoveredSettings.settingsVersion === settings.settingsVersion) {\r\n component.setState({ settings: recoveredSettings }, then)\r\n }\r\n}\r\n\r\n// mirror the contents of the title attributes of the specified svg elements into a dynamically created 'svg:title' child element\r\nexport function svgMirrorTitles(svgElems) {\r\n if (svgElems) {\r\n [...svgElems].forEach(svgMirrorTitle);\r\n }\r\n}\r\n\r\nexport const svgNs = 'http://www.w3.org/2000/svg';\r\n\r\nexport function svgMirrorTitle(svg) {\r\n const svgTitle = 'title';\r\n\r\n const title = svg.getAttribute('title');\r\n if (title) {\r\n const et = svg.getElementsByTagNameNS(svgNs, svgTitle);\r\n if (!et || et.length === 0) {\r\n const te = document.createElementNS(svgNs, svgTitle);\r\n te.appendChild(document.createTextNode(title))\r\n svg.appendChild(te);\r\n }\r\n }\r\n}\r\n\r\nexport function doZoomIntegerValue(out, squared, value, min, max) {\r\n const limit = v => applyIntegerLimits(v, min, max);\r\n\r\n return squared\r\n ? (out ? limit(value >> 1) : limit(value << 1))\r\n : (out ? limit(value - 1) : limit(value + 1));\r\n}\r\n\r\nexport function doZoomFloatValue(out, squared, value) {\r\n return squared\r\n ? (out ? value /= 2 : value *= 2)\r\n : (out ? value - 1 : value + 1);\r\n}\r\n\r\nexport function doZoomFloatValueIncrement(out, squared, value, increment) {\r\n return squared\r\n ? (out ? value /= increment : value *= increment)\r\n : (out ? value - increment : value + increment)\r\n}\r\n\r\n/*\r\n e.g. steps: [{\r\n from: 0,\r\n to: 0.5,\r\n increment: 0.1\r\n }, {\r\n from: 0.5,\r\n to: 2,\r\n increment: 0.5\r\n }, {\r\n from: 2,\r\n to: 10,\r\n increment: 1\r\n }]\r\n*/\r\nexport function doZoomFloatValueSteps(out, value, steps) {\r\n const candidates = steps.filter(s => value >= s.from && value <= s.to);\r\n const step = candidates.length == 2\r\n ? (out\r\n ? candidates[0]\r\n : candidates[1]\r\n ) : candidates[0];\r\n\r\n const { increment } = step;\r\n\r\n return out ? value - increment : value + increment;\r\n}\r\n\r\nexport function doZoomFloatValueFixedList(out, value, list) {\r\n const index = list.indexOf(value);\r\n const newValue = out\r\n ? (\r\n index > 0\r\n ? list[index = 1]\r\n : list[index]\r\n ) : (\r\n index < list.length - 1\r\n ? list[index + 1]\r\n : list[index]\r\n );\r\n}","\r\nimport AxisType from './AxisType';\r\nimport StepType from './StepType';\r\nimport { addMissingProperties } from './Utils';\r\n\r\nconst fullCalibrationPlan = combinedOrigin => [{\r\n type: StepType.AXIS_CALIBRATION_POINT,\r\n axis: AxisType.HORIZONTAL,\r\n pointIndex: 0,\r\n desc: combinedOrigin\r\n ? 'Choose origin'\r\n : 'Choose first horizontal axis point',\r\n cloneSource: combinedOrigin,\r\n point: { x: 'xmin', y: 'ymin' }\r\n // , stepIndex\r\n}, {\r\n type: StepType.AXIS_CALIBRATION_POINT,\r\n axis: AxisType.HORIZONTAL,\r\n pointIndex: 1,\r\n desc: 'Choose second horizontal axis point',\r\n point: { x: 'xmax', y: 'ymin' }\r\n // , stepIndex\r\n}, {\r\n type: StepType.AXIS_CALIBRATION_POINT,\r\n axis: AxisType.VERTICAL,\r\n pointIndex: 0,\r\n desc: combinedOrigin\r\n ? 'Origin already chosen'\r\n : 'Choose first vertical axis point',\r\n cloneDest: combinedOrigin,\r\n point: { x: 'xmin', y: 'ymin' }\r\n // , stepIndex\r\n}, {\r\n type: StepType.AXIS_CALIBRATION_POINT,\r\n axis: AxisType.VERTICAL,\r\n pointIndex: 1,\r\n desc: 'Choose second vertical axis point',\r\n point: { x: 'xmin', y: 'ymax' }\r\n // , stepIndex\r\n}, {\r\n type: StepType.AXIS_CALIBRATION_VALUES,\r\n may: [\r\n StepType.MAY_EXTRACT_AXES,\r\n StepType.MAY_BUILD_MATRIX\r\n ],\r\n desc: 'Enter axis values',\r\n // , stepIndex\r\n}, {\r\n type: StepType.ENTER_DATA_POINTS,\r\n may: [\r\n StepType.MAY_EXTRACT_AXES,\r\n StepType.MAY_BUILD_MATRIX\r\n ],\r\n desc: 'Enter data points'\r\n // , stepIndex\r\n}].map(plan => addMissingProperties(plan, { may: [], axis: null }));\r\n\r\nexport default fullCalibrationPlan;","import React from 'react';\r\nimport elementResizeEvent, { unbind } from 'element-resize-event';\r\n\r\nimport { drawPoint, getOffset } from '../Utils';\r\nimport AxisType from '../AxisType';\r\n\r\n\r\nclass ImageDisplay extends React.Component {\r\n constructor() {\r\n super();\r\n this.state = {\r\n naturalWidth: -1,\r\n naturalHeight: -1,\r\n imageWidth: 'auto',\r\n imageHeight: 'auto',\r\n widthBound: null,\r\n dpr: window.devicePixelRatio\r\n };\r\n this.imageStage = React.createRef();\r\n this.imageCanvas = React.createRef();\r\n // this.chromeCanvas = React.createRef();\r\n this.chromeCanvas = this.imageCanvas;\r\n\r\n this._handleMouseMove = this._handleMouseMove.bind(this);\r\n this._handleClick = this._handleClick.bind(this);\r\n this.imageLoadCompletedShim = this.imageLoadCompletedShim.bind(this);\r\n this.imageLoadCompleted = this.imageLoadCompleted.bind(this);\r\n this.imageLoadErrored = this.imageLoadErrored.bind(this);\r\n this._setScale = this._setScale.bind(this);\r\n\r\n this.renderCounter = 1\r\n }\r\n\r\n imageLoadCompletedShim() {\r\n // console.log('imageLoadCompletedShim calling imageLoadCompleted!');\r\n this.imageLoadCompleted();\r\n }\r\n imageLoadCompleted() {\r\n const is = this.imageStage.current;\r\n if (!this.image) return;\r\n const { naturalWidth, naturalHeight } = this.image;\r\n\r\n const ratios = {\r\n width: is.offsetWidth / naturalWidth,\r\n height: is.offsetHeight / naturalHeight\r\n };\r\n const widthBound = ratios.width < ratios.height;\r\n\r\n const imageWidth = widthBound ? '100%' : 'auto';\r\n const imageHeight = widthBound ? 'auto' : '100%';\r\n\r\n this.setState({\r\n naturalWidth,\r\n naturalHeight,\r\n imageWidth,\r\n imageHeight,\r\n image: this.image,\r\n widthBound,\r\n scale: 1\r\n }, () => {\r\n this._setScale(() => {\r\n this.imageContext.drawImage(\r\n this.image,\r\n 0, 0,\r\n this.imageContext.canvas.width, this.imageContext.canvas.height\r\n );\r\n this.drawPoints(this.chromeContext);\r\n });\r\n\r\n window.setTimeout(() => {\r\n this._setScale(() => {\r\n this.imageContext.drawImage(\r\n this.image,\r\n 0, 0,\r\n this.imageContext.canvas.width, this.imageContext.canvas.height\r\n );\r\n });\r\n this.drawPoints(this.chromeContext);\r\n }, 50);\r\n });\r\n }\r\n imageLoadErrored() {\r\n this.setState({\r\n imageNaturalWidth: -1,\r\n imageNaturalHeight: -1\r\n });\r\n }\r\n _setScale(callback) {\r\n const { dpr } = this.state;\r\n\r\n const scales = {\r\n x: this.imageCanvas.current.width / this.imageStage.current.clientWidth / dpr,\r\n y: this.imageCanvas.current.height / this.imageStage.current.clientHeight / dpr\r\n };\r\n this.setState({ scale: this.state.widthBound ? scales.x : scales.y }, callback);\r\n }\r\n updateOverlayPosition() {\r\n window.setTimeout(() => {\r\n const duxPanelBackdrop = document.getElementsByClassName('duxpanel-backdrop')[0];\r\n if (duxPanelBackdrop) {\r\n this.props.updateOverlay(duxPanelBackdrop);\r\n }\r\n }, 0);\r\n }\r\n componentDidMount() {\r\n\r\n this.imageContext = this.imageCanvas.current.getContext('2d');\r\n // this.chromeContext = this.chromeCanvas.current.getContext('2d');\r\n this.chromeContext = this.imageContext;\r\n\r\n const { dpr } = this.state;\r\n // this.imageContext.scale(dpr, dpr);\r\n this.chromeContext.scale(dpr, dpr);\r\n\r\n elementResizeEvent(this.imageStage.current, () => {\r\n // console.log('elementResizeEvent calling imageLoadCompletedShim!');\r\n this.imageLoadCompletedShim()\r\n });\r\n // console.log('componentDidMount calling imageLoadCompletedShim!');\r\n this.imageLoadCompletedShim();\r\n this.loadImage();\r\n\r\n this.chromeCanvas.current.addEventListener('mousemove', this._handleMouseMove);\r\n this.chromeCanvas.current.addEventListener('click', this._handleClick);\r\n }\r\n componentWillUnmount() {\r\n this.image.removeEventListener('load', this.imageLoadCompleted);\r\n this.image.removeEventListener('error', this.imageLoadErrored);\r\n\r\n this.chromeCanvas.current.removeEventListener('mousemove', this._handleMouseMove);\r\n this.chromeCanvas.current.removeEventListener('click', this._handleClick);\r\n\r\n unbind(this.imageStage.current);\r\n }\r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n if (prevProps.axisConfig !== this.props.axisConfig) {\r\n this.drawPoints(this.chromeContext);\r\n }\r\n if (prevProps.currentSeries !== this.props.currentSeries\r\n || (prevProps.currentSeries\r\n && this.props.currentSeries\r\n && prevProps.currentSeries.points\r\n && this.props.currentSeries.points\r\n && prevProps.currentSeries.points.length !== this.props.currentSeries.points.length\r\n )\r\n || (prevProps.pointZoom !== this.props.pointZoom)\r\n || (prevProps.selectedSubPointId !== this.props.selectedSubPointId)\r\n ) {\r\n this.drawPoints(this.chromeContext);\r\n }\r\n if (prevProps.image !== this.props.image) {\r\n this.loadImage();\r\n }\r\n this.updateOverlayPosition();\r\n }\r\n loadImage() {\r\n if (this.image) {\r\n this.image.removeEventListener('load', this.imageLoadCompleted);\r\n this.image.removeEventListener('error', this.imageLoadErrored);\r\n }\r\n this.image = new window.Image();\r\n this.image.crossOrigin = 'Anonymous';\r\n this.image.addEventListener('load', this.imageLoadCompleted);\r\n this.image.addEventListener('error', this.imageLoadErrored);\r\n\r\n this.image.src = this.props.image;\r\n\r\n this.updateOverlayPosition();\r\n }\r\n _handleMouseMove(e) {\r\n var offset = getOffset(this.imageCanvas.current);\r\n\r\n const scrollX = this.imageStage.current.scrollLeft;\r\n const scrollY = this.imageStage.current.scrollTop;\r\n\r\n this.props.mousePointerMoved({\r\n x: e.clientX + scrollX,\r\n y: e.clientY + scrollY,\r\n offsetX: e.clientX - offset.x,\r\n offsetY: e.clientY - offset.y,\r\n context: this.imageContext,\r\n chromeContext: this.chromeContext,\r\n dpr: this.state.dpr,\r\n scale: this.state.scale\r\n });\r\n }\r\n _handleClick() {\r\n this.props.mouseLeftClicked();\r\n }\r\n shouldComponentUpdate(nextProps, nextState) {\r\n return nextProps.image !== this.props.image ||\r\n nextState.naturalWidth !== this.state.naturalWidth ||\r\n nextState.naturalHeight !== this.state.naturalHeight ||\r\n nextState.imageWidth !== this.state.imageWidth ||\r\n nextState.imageHeight !== this.state.imageHeight ||\r\n nextProps.axisConfig !== this.props.axisConfig ||\r\n nextProps.currentSeries !== this.props.currentSeries ||\r\n nextProps.pointZoom !== this.props.pointZoom ||\r\n nextProps.selectedSubPointId !== this.props.selectedSubPointId;\r\n }\r\n\r\n drawPoints(ctx) {\r\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\r\n\r\n this.imageContext.drawImage(\r\n this.image,\r\n 0, 0,\r\n this.imageContext.canvas.width, this.imageContext.canvas.height\r\n );\r\n\r\n const { dpr } = this.state;\r\n const {\r\n pointZoom,\r\n axisConfig,\r\n showCalibrationPoints,\r\n currentSeries,\r\n // selectedPointId,\r\n selectedSubPointId,\r\n selectedAxisPointId,\r\n dataType,\r\n axisPointInverseCols,\r\n axisType,\r\n combinedOrigin,\r\n calibrationPlan\r\n } = this.props;\r\n\r\n if (showCalibrationPoints) {\r\n const hiddenOriginPointIndex = combinedOrigin && (axisType === AxisType.BOTH) ? 2 : -1;\r\n const hiddenOriginPointId = hiddenOriginPointIndex !== -1 && axisConfig.points.length > hiddenOriginPointIndex\r\n ? axisConfig.points[hiddenOriginPointIndex].id\r\n : null;\r\n const nonHiddenOriginPointIndex = hiddenOriginPointIndex == 2 ? 0 : -1;\r\n\r\n axisConfig.points.forEach((point, i) => {\r\n if (i === hiddenOriginPointIndex) return;\r\n\r\n const selected =\r\n point.id === selectedAxisPointId\r\n || (\r\n hiddenOriginPointId\r\n && hiddenOriginPointId === selectedAxisPointId\r\n && i === nonHiddenOriginPointIndex\r\n );\r\n\r\n drawPoint({\r\n ctx,\r\n point,\r\n selected,\r\n dpr,\r\n accentColor: axisPointInverseCols[i - (axisType === AxisType.VERTICAL ? -2 : 0)],\r\n pointZoom\r\n })\r\n });\r\n }\r\n if (currentSeries) {\r\n const rpDp = dataType.dataPoints[0];\r\n // console.log(`currentSeries.points: ${currentSeries.points}`)\r\n currentSeries.points.forEach((point, i) => {\r\n const rp = point[rpDp.abbrev];\r\n Object.keys(point).forEach(pointName => {\r\n if (pointName === 'id') return;\r\n\r\n const subPoint = point[pointName];\r\n const upper = subPoint.dataPoint.origDp\r\n ? subPoint.dataPoint.origDp.y > rp.dataPoint.y\r\n : undefined;\r\n\r\n drawPoint({\r\n ctx,\r\n point: subPoint,\r\n upper,\r\n selected: subPoint.id === selectedSubPointId,\r\n dpr,\r\n pointZoom\r\n })\r\n });\r\n });\r\n }\r\n }\r\n render() {\r\n const { naturalWidth, naturalHeight, dpr } = this.state;\r\n\r\n // console.log(`${this.renderCounter++}) ImageDisplay.render!`);\r\n return (\r\n
\r\n \r\n {/* */}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ImageDisplay;\r\n","import React from 'react';\r\n\r\nexport default class ZoomControls extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.squaredChanged = this.squaredChanged.bind(this);\r\n }\r\n squaredChanged(ev) {\r\n this.props.squaredChanged(ev.target.checked);\r\n }\r\n render() {\r\n const {\r\n zoomInfo,\r\n label,\r\n showMultiplier = true,\r\n showSquared = true\r\n } = this.props;\r\n\r\n const {\r\n value,\r\n squared\r\n } = zoomInfo;\r\n\r\n const valueDisplay = `${value}${showMultiplier ? 'x' : ''}`;\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {valueDisplay}\r\n \r\n \r\n \r\n {showSquared &&\r\n \r\n }\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport ZoomControls from './ZoomControls';\r\n\r\nexport default class Magnifier extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.imageCanvas = React.createRef();\r\n\r\n this.renderCounter = 1\r\n\r\n this.state = {};\r\n\r\n this.mouseMove = this.mouseMove.bind(this);\r\n this._grabContexts = this._grabContexts.bind(this);\r\n this._drawCross = this._drawCross.bind(this);\r\n }\r\n\r\n _magnifierSize = { width: this.props.width, height: this.props.height };\r\n _mid = { x: this._magnifierSize.width / 2, y: this._magnifierSize.height / 2 };\r\n\r\n _grabContexts() {\r\n this.imageContext = this.imageCanvas.current.getContext('2d');\r\n this.imageChromeContext = this.imageContext;\r\n this.chromeContext = this.imageContext;\r\n }\r\n _drawCross() {\r\n const cc = this.chromeContext;\r\n\r\n cc.strokeStyle = 'rgba(0, 255, 255)';\r\n cc.globalCompositeOperation = 'difference';\r\n cc.lineWidth = 2;\r\n cc.beginPath();\r\n cc.moveTo(this._mid.x, 0);\r\n cc.lineTo(this._mid.x, this._magnifierSize.height);\r\n cc.moveTo(0, this._mid.y);\r\n cc.lineTo(this._magnifierSize.width, this._mid.y)\r\n cc.stroke();\r\n\r\n cc.globalCompositeOperation = 'source-over';\r\n }\r\n componentDidMount() {\r\n this._grabContexts();\r\n this._drawCross();\r\n\r\n this.props.subscribe('mousePointerMoved', this.mouseMove);\r\n }\r\n\r\n magnify(pointerFocus, drawCross = true) {\r\n if (pointerFocus) {\r\n this._pointerFocus = pointerFocus\r\n } else {\r\n return;\r\n }\r\n\r\n const { scaledOffsetX, scaledOffsetY, context, chromeContext, dpr } = pointerFocus;\r\n if (this.imageContext && this.imageChromeContext) {\r\n const w = this._magnifierSize.width, h = this._magnifierSize.height;\r\n\r\n const zoom = this.props.zoomInfo.value;\r\n const halfSource = {\r\n x: (w >> 1) / zoom,\r\n y: (h >> 1) / zoom\r\n };\r\n const x = scaledOffsetX - halfSource.x;\r\n const y = scaledOffsetY - halfSource.y;\r\n const ww = 2 * halfSource.x;\r\n const hh = 2 * halfSource.y;\r\n\r\n\r\n this.imageContext.clearRect(0, 0, w, h);\r\n this.imageContext.drawImage(\r\n context.canvas,\r\n x,\r\n y,\r\n ww, hh,\r\n 0, 0,\r\n w, h\r\n );\r\n this.imageChromeContext.drawImage(\r\n chromeContext.canvas,\r\n x * dpr,\r\n y * dpr,\r\n ww * dpr, hh * dpr,\r\n 0, 0,\r\n w, h\r\n );\r\n if (drawCross) {\r\n this._drawCross();\r\n }\r\n }\r\n }\r\n mouseMove(event) {\r\n const { pointerFocus } = event.detail;\r\n\r\n this.magnify(pointerFocus);\r\n\r\n // this.setState({ pointerFocus })\r\n }\r\n componentWillUnmount() {\r\n this.props.unsubscribe('mousePointerMoved', this.mouseMove);\r\n }\r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n const { refreshToggler } = this.props;\r\n if (prevProps.refreshToggler.toggle !== refreshToggler.toggle) {\r\n // if (!refreshToggler.point) return;\r\n this.magnify(refreshToggler.point\r\n ? {\r\n ...this._pointerFocus,\r\n scaledOffsetX: refreshToggler.point.x,\r\n scaledOffsetY: refreshToggler.point.y\r\n } : this._pointerFocus,\r\n true //!refreshToggler.showCross\r\n );\r\n }\r\n }\r\n shouldComponentUpdate(nextProps, nextState) {\r\n return nextProps.zoomInfo !== this.props.zoomInfo\r\n || nextProps.refreshToggler !== this.props.refreshToggler;\r\n }\r\n render() {\r\n // console.log(`${this.renderCounter++}) Magnifier.render!`);\r\n const style = {\r\n ...this.props.stageBorderStyle,\r\n width: this._magnifierSize.width,\r\n height: this._magnifierSize.height\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n {/* */}\r\n\r\n {/* \r\n */}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\n\r\nexport default class Wizard extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {};\r\n this._step = null;\r\n }\r\n componentDidMount() {\r\n this.props.onTitleChange(this._step ? this._step.props.title : 'no title yet!');\r\n const modal = this._step && this._step.props.modal;\r\n this.props.setModal(modal);\r\n }\r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n if (prevProps.curStep !== this.props.curStep) {\r\n this.props.onTitleChange(this._step ? this._step.props.title : 'no title yet!');\r\n }\r\n if (prevProps.curStep !== this.props.curStep) {\r\n const modal = this._step && this._step.props.modal;\r\n this.props.setModal(modal);\r\n }\r\n }\r\n _getStep() {\r\n const { curStep } = this.props;\r\n return React.Children.map(this.props.children, (child, i) => {\r\n if (i !== curStep) return;\r\n return child;\r\n })[0];\r\n }\r\n render() {\r\n const { curStep } = this.props;\r\n const childUB = React.Children.count(this.props.children) - 1;\r\n this._step = this._getStep();\r\n\r\n const prevOk = this._step && this._step.props.prevOkIf ? this._step.props.prevOkIf() : true;\r\n const nextOk = this._step && this._step.props.nextOkIf ? this._step.props.nextOkIf() : true;\r\n const cta = this._step.props.cta || '';\r\n const prevDisabled = curStep <= 0 || !prevOk;\r\n const nextDisabled = curStep >= childUB || !nextOk;\r\n const finishDisabled = !nextOk;\r\n return (\r\n
\r\n
{this._step}
\r\n
{cta}
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n )\r\n }\r\n}","import React from 'react';\r\n\r\nexport default class WizardStep extends React.Component {\r\n render() {\r\n return (\r\n \r\n {this.props.children}\r\n \r\n )\r\n }\r\n}","import React from 'react';\r\nimport Link from '@material-ui/icons/Link';\r\nimport LinkOff from '@material-ui/icons/LinkOff';\r\n\r\nimport AxisType from '../AxisType';\r\nimport {\r\n drawPoint,\r\n forEachExplicitLast,\r\n getMidpointsOfAdjacentPairs,\r\n charRange,\r\n px,\r\n svgNs,\r\n svgMirrorTitles\r\n} from '../Utils';\r\nimport PointType from '../PointType';\r\nimport StepType from '../StepType';\r\n\r\nexport default class AxisDiagram extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.canvas = React.createRef();\r\n // this.debugPointRefs = [...Array(4).keys()].map(_ => React.createRef());\r\n this.linkRefs = [...Array(1).keys()].map(_ => React.createRef());\r\n this.editRefs = [...Array(4).keys()].map(_ => React.createRef());\r\n this.cbRefs = [...Array(2).keys()].map(_ => React.createRef());\r\n this._ourRef = React.createRef();\r\n\r\n this.state = {\r\n dpr: window.devicePixelRatio,\r\n ctx: null\r\n };\r\n\r\n this._validAxisValues = [...charRange('0', '9'), '.', '-'].map(c => c.charCodeAt(0));\r\n\r\n this._buildLayout();\r\n this.draw = this.draw.bind(this);\r\n this.positionEdit = this.positionEdit.bind(this);\r\n this.axisCalibrationValueChanged = this.axisCalibrationValueChanged.bind(this);\r\n this.axisLogSettingChanged = this.axisLogSettingChanged.bind(this);\r\n this.onFocus = this.onFocus.bind(this);\r\n this.onKeyPress = this.onKeyPress.bind(this);\r\n }\r\n\r\n _buildLayout() {\r\n const { dpr } = this.state;\r\n const { diagramSize, showPoints, editValues } = this.props;\r\n const\r\n canvasPadding = (showPoints ? 15 : 0) + (editValues ? 0 : 0),\r\n xTick = 2.5,\r\n yTick = 2.5,\r\n xTicks = 5,\r\n yTicks = 5,\r\n yBars = 5,\r\n xBars = 5,\r\n xmin = 0 + xTick + 1 + canvasPadding,\r\n ymin = diagramSize / 2 - 1 - yTick - canvasPadding,\r\n xmax = diagramSize / 2 - 1 - canvasPadding,\r\n ymax = 1 + canvasPadding,\r\n xminDom = xmin + canvasPadding,\r\n yminDom = diagramSize - 1 - yTick - canvasPadding,\r\n xmaxDom = diagramSize - 1 - canvasPadding * 2,\r\n ymaxDom = ymax + canvasPadding;\r\n\r\n this._layout = {\r\n xTick,\r\n yTick,\r\n xTicks,\r\n yTicks,\r\n yBars,\r\n xBars,\r\n xmin,\r\n ymin,\r\n xmax,\r\n ymax,\r\n xminDom,\r\n yminDom,\r\n xmaxDom,\r\n ymaxDom\r\n };\r\n }\r\n draw() {\r\n const { ctx } = this.state;\r\n ctx.strokeStyle = 'black';\r\n const self = this;\r\n\r\n const {\r\n xTick,\r\n yTick,\r\n xTicks,\r\n yTicks,\r\n yBars,\r\n xBars,\r\n xmin,\r\n ymin,\r\n xmax,\r\n ymax\r\n } = self._layout;\r\n\r\n const drawHorizAxisTicks = () => {\r\n ctx.setLineDash([]);\r\n const step = (xmax - xmin) / xTicks;\r\n for (let x = xmin; x <= xmax; x += step) {\r\n ctx.beginPath();\r\n ctx.moveTo(x, ymin - 0.5);\r\n ctx.lineTo(x, ymin + yTick);\r\n ctx.stroke();\r\n }\r\n };\r\n const drawVertAxisTicks = () => {\r\n ctx.setLineDash([]);\r\n const step = (ymax - ymin) / yTicks;\r\n for (let y = ymin; y >= ymax; y += step) {\r\n ctx.beginPath();\r\n ctx.moveTo(xmin + 0.5, y);\r\n ctx.lineTo(xmin - xTick, y);\r\n ctx.stroke();\r\n }\r\n };\r\n\r\n const drawHorizBars = () => {\r\n ctx.setLineDash([]);\r\n const step = (xmax - xmin) / xBars;\r\n const barWidth = step * 0.6;\r\n const stepMidWidth = step / 2;\r\n for (let x = xmin + stepMidWidth; x <= xmax; x += step) {\r\n ctx.beginPath();\r\n ctx.strokeStyle = 'magenta';\r\n ctx.lineWidth = barWidth;\r\n ctx.moveTo(x, ymin - 0.5);\r\n ctx.lineTo(x, ymin - Math.random() * (ymin - ymax));\r\n ctx.stroke();\r\n }\r\n };\r\n\r\n const drawVertBars = () => {\r\n ctx.setLineDash([]);\r\n const step = (ymax - ymin) / yBars;\r\n const barWidth = step * 0.6;\r\n const stepMidWidth = step / 2;\r\n for (let y = ymin + stepMidWidth; y >= ymax; y += step) {\r\n ctx.beginPath();\r\n ctx.strokeStyle = 'green';\r\n ctx.lineWidth = Math.abs(barWidth);\r\n ctx.moveTo(xmin + 0.5, y);\r\n ctx.lineTo(xmin + Math.random() * (xmax - xmin), y);\r\n ctx.stroke();\r\n }\r\n };\r\n\r\n const drawCurvyLine = () => {\r\n ctx.beginPath();\r\n ctx.strokeStyle = 'blue';\r\n ctx.lineWidth = 1;\r\n const xr = xmax - xmin;\r\n const yr = ymin - ymax;\r\n const dx = xr / 15;\r\n\r\n ctx.moveTo(xmin, ymin);\r\n\r\n for (let x = xmin + dx; x <= xmax; x += dx) {\r\n const y = ymin - Math.random() * yr;\r\n ctx.lineTo(x, y);\r\n }\r\n ctx.stroke();\r\n }\r\n\r\n const dashLength = 1, gapLength = 1;\r\n const drawHorizAxis = (dashed = false) => {\r\n ctx.beginPath();\r\n ctx.setLineDash(dashed ? [dashLength, gapLength] : []);\r\n ctx.lineWidth = 1;\r\n ctx.moveTo(xmin, ymin);\r\n ctx.lineTo(xmax, ymin);\r\n ctx.stroke();\r\n };\r\n const drawVertAxis = (dashed = false) => {\r\n ctx.beginPath();\r\n ctx.setLineDash(dashed ? [dashLength, gapLength] : []);\r\n ctx.lineWidth = 1;\r\n ctx.moveTo(xmin, ymin);\r\n ctx.lineTo(xmin, ymax)\r\n ctx.stroke();\r\n };\r\n const drawPoints = (lastIndex) => {\r\n const { fullCalibrationPlan, planStep } = self.props;\r\n if (!fullCalibrationPlan) return;\r\n\r\n const selector = { xmin, xmax, ymin, ymax };\r\n\r\n const stepsEqual = (one, two) => {\r\n return one.axis === two.axis\r\n && one.pointIndex === two.pointIndex;\r\n }\r\n\r\n const idx = lastIndex || fullCalibrationPlan.findIndex(elem => stepsEqual(elem, planStep));\r\n forEachExplicitLast(fullCalibrationPlan, idx, (p, i) => {\r\n if (p.type === StepType.AXIS_CALIBRATION_POINT && (p.axis === self.props.axisType || self.props.axisType === AxisType.BOTH)) {\r\n let point = { x: selector[p.point.x], y: selector[p.point.y] };\r\n\r\n drawPoint({\r\n ctx,\r\n point: {\r\n ...point,\r\n type: PointType.AXIS_CALIBRATION_SAMPLE\r\n },\r\n selected: stepsEqual(p, planStep),\r\n dpr: 1,\r\n accentColor: this.props.axisPointCols[i]\r\n });\r\n }\r\n });\r\n };\r\n\r\n ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);\r\n\r\n ctx.fillStyle = 'white';\r\n ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);\r\n\r\n switch (this.props.axisType) {\r\n case AxisType.HORIZONTAL:\r\n drawHorizAxis();\r\n drawHorizAxisTicks();\r\n drawVertAxis(true);\r\n drawVertBars();\r\n break;\r\n\r\n case AxisType.VERTICAL:\r\n drawHorizAxis(true);\r\n drawVertAxisTicks();\r\n drawVertAxis();\r\n drawHorizBars();\r\n break;\r\n\r\n case AxisType.BOTH:\r\n drawHorizAxis();\r\n drawVertAxis();\r\n drawHorizAxisTicks();\r\n drawVertAxisTicks();\r\n drawCurvyLine();\r\n break;\r\n default:\r\n break;\r\n }\r\n drawPoints();\r\n }\r\n\r\n axisCalibrationValueChanged(ev) {\r\n this.props.addAxisPointValue({\r\n value: ev.target.value,\r\n pointIndex: +ev.target.getAttribute('data-index')\r\n });\r\n }\r\n\r\n onKeyPress(ev) {\r\n if (!this._validAxisValues.includes(ev.charCode)) {\r\n ev.preventDefault();\r\n }\r\n }\r\n\r\n axisLogSettingChanged(ev) {\r\n this.props.axisLogSettingChanged({\r\n axisIndex: +ev.target.getAttribute('data-index'),\r\n enabled: ev.target.checked\r\n });\r\n }\r\n\r\n positionEdit() {\r\n const { editValues, axisType } = this.props;\r\n const self = this;\r\n\r\n const overrides = [{}, {}, {\r\n left: '0',\r\n marginTop: '-40px',\r\n }, {\r\n left: '0',\r\n marginTop: '-15px'\r\n }];\r\n const cbOverrides = [{}, { left: 0, marginTop: '-34px' }];\r\n\r\n const getDisplay = i => {\r\n\r\n return axisType === AxisType.BOTH\r\n ? 'block'\r\n : i > 1\r\n ? axisType === AxisType.HORIZONTAL ? 'none' : 'block'\r\n : axisType === AxisType.VERTICAL ? 'none' : 'block';\r\n }\r\n const getLogDisplay = i => {\r\n return axisType === AxisType.BOTH\r\n ? 'block'\r\n : i > 0\r\n ? axisType === AxisType.HORIZONTAL ? 'none' : 'block'\r\n : axisType === AxisType.VERTICAL ? 'none' : 'block';\r\n };\r\n\r\n const one = (this.props.fullCalibrationPlan || [])\r\n .filter(plan => plan.type === StepType.AXIS_CALIBRATION_POINT)\r\n .map(plan => {\r\n return {\r\n x: self._layout[plan.point.x + 'Dom'] + this.canvas.current.offsetLeft,\r\n y: self._layout[plan.point.y + 'Dom'] + this.canvas.current.offsetTop\r\n };\r\n });\r\n const two = getMidpointsOfAdjacentPairs(one);\r\n\r\n one.map((p, i) => ({\r\n display: editValues ? getDisplay(i) : 'none',\r\n border: `2px solid palevioletred`,\r\n position: 'absolute',\r\n width: '50px',\r\n left: px(p.x),\r\n top: px(p.y)\r\n })).map((s, i) => ({\r\n ...s, ...overrides[i]\r\n })).forEach((s, i) => Object.assign(this.editRefs[i].current.style, s));\r\n\r\n const linkPos = one.length >= 2 ? {\r\n x: one[0].x - 50,\r\n y: one[2].y\r\n } : {};\r\n\r\n // one.map((p, i) => ({\r\n // display: 'block',\r\n // position: 'absolute',\r\n // width: '3px',\r\n // height: '3px',\r\n // border: `1px solid ${this.props.axisPointCols[i]}`,\r\n // left: px(p.x),\r\n // top: px(p.y)\r\n // })).forEach((s, i) => Object.assign(this.debugPointRefs[i].current.style, s));\r\n\r\n this.linkRefs.map((_, i) => ({\r\n display: 'block',\r\n position: 'absolute',\r\n left: px(linkPos.x),\r\n top: px(linkPos.y)\r\n })).forEach((s, i) => this.linkRefs[i].current && Object.assign(this.linkRefs[i].current.style, s));\r\n\r\n two.map((p, i) => ({\r\n display: editValues && getLogDisplay(i),\r\n position: 'absolute',\r\n left: `${p.x}px`,\r\n top: `${p.y}px`\r\n })).map((s, i) => ({\r\n ...s, ...cbOverrides[i]\r\n })).forEach((s, i) => Object.assign(this.cbRefs[i].current.style, s));\r\n }\r\n onFocus(ev) {\r\n this.props.zoomToAxisPoint(ev.target.getAttribute('data-index'));\r\n }\r\n focusEdit() {\r\n const edit = this.editRefs.find(er => er && er.current && er.current.style.display === 'block');\r\n edit && edit.current && edit.current.focus();\r\n }\r\n mirrorSvgTitles() {\r\n svgMirrorTitles(this._ourRef.current.getElementsByTagNameNS(svgNs, 'svg'));\r\n }\r\n\r\n componentDidMount() {\r\n const { dpr } = this.state;\r\n const ctx = this.canvas.current.getContext('2d');\r\n this.setState({ ctx }, () => {\r\n ctx.scale(dpr * 2, dpr * 2);\r\n this.draw();\r\n });\r\n this.positionEdit();\r\n this.focusEdit();\r\n this.mirrorSvgTitles();\r\n }\r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n if (\r\n prevProps.axisType !== this.props.axisType\r\n ) {\r\n this.draw();\r\n }\r\n this.positionEdit();\r\n if (prevProps.planStep !== this.props.planStep) {\r\n this.draw();\r\n this.focusEdit();\r\n }\r\n if (prevProps.combinedOrigin !== this.props.combinedOrigin) {\r\n this.mirrorSvgTitles();\r\n }\r\n }\r\n render() {\r\n const {\r\n diagramSize,\r\n showPoints,\r\n editValues,\r\n axisType,\r\n axisConfig,\r\n combinedOrigin,\r\n toggleCombinedOrigin\r\n } = this.props;\r\n const { dpr } = this.state;\r\n const divSizePx = `${diagramSize + ((showPoints ? 30 : 0) + (editValues ? 30 : 0))}px`;\r\n const canvasSizePx = `${diagramSize}px`;\r\n\r\n const divStyle = {\r\n width: divSizePx,\r\n height: divSizePx,\r\n margin: 'auto',\r\n display: 'flex',\r\n justifyContent: 'center',\r\n flexDirection: 'column',\r\n position: 'relative'\r\n };\r\n const canvasStyle = {\r\n width: canvasSizePx,\r\n height: canvasSizePx,\r\n margin: 'auto'\r\n };\r\n const { points = [], axes = [] } = axisConfig || {};\r\n const axisValues = [...Array(4).keys()].map(i => i < points.length ? points[i].value || '' : '');\r\n const axisLogs = [...Array(2).keys()].map(i => i < axes.length ? axes[i].log || false : false);\r\n\r\n return (\r\n
\r\n {toggleCombinedOrigin\r\n && combinedOrigin\r\n && }\r\n {toggleCombinedOrigin\r\n && !combinedOrigin\r\n && }\r\n\r\n {this.editRefs.map((r, i) => {\r\n const dataIndex = axisType === AxisType.BOTH ? i : i % 2;\r\n const value = editValues\r\n ? axisType === AxisType.VERTICAL\r\n ? axisValues[i - 2]\r\n : axisValues[i]\r\n : '';\r\n return (\r\n \r\n );\r\n })}\r\n {/* {this.debugPointRefs.map((r, i) =>
\r\n )} */}\r\n\r\n {this.cbRefs.map((r, i) => {\r\n const dataIndex = axisType === AxisType.VERTICAL ? i - 1 : i;\r\n return (\r\n \r\n );\r\n })}\r\n \r\n
\r\n )\r\n }\r\n}","import React, { Component } from 'react';\r\n\r\nimport AxisDiagram from './AxisDiagram';\r\nimport StepType from '../StepType';\r\n\r\nimport { keyDownArrowKeyPressed } from '../Utils';\r\n\r\nexport default class AxisCalibration extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.mouseLeftClicked = this.mouseLeftClicked.bind(this);\r\n this.keyDown = this.keyDown.bind(this);\r\n }\r\n\r\n nextStepDesc() {\r\n const { planStep } = this.props;\r\n if (planStep) {\r\n return `${planStep.desc}`;\r\n }\r\n else {\r\n return ''\r\n }\r\n }\r\n\r\n mouseLeftClicked(event) {\r\n const { scaledOffsetX, scaledOffsetY } = event.detail.pointerFocus;\r\n const { planStep, cloneSourceAxisPointToDest } = this.props;\r\n if (planStep.type !== StepType.AXIS_CALIBRATION_POINT) return;\r\n this.props.addAxisPoint({ ...planStep, point: { x: scaledOffsetX, y: scaledOffsetY } }, () => {\r\n this.props.setCalibrationPlanIndex(\r\n currentIndex => currentIndex + 1,\r\n nextPlanStep => {\r\n if (nextPlanStep.cloneDest) {\r\n cloneSourceAxisPointToDest();\r\n }\r\n }\r\n );\r\n });\r\n }\r\n\r\n _doNudgeAxisPointBy(ev, boost) {\r\n const pointIndex = ev.target.getAttribute('data-index');\r\n if (typeof pointIndex !== 'string') {\r\n return;\r\n }\r\n\r\n const { nudgeInfo, nudgeAxisPointBy } = this.props;\r\n const nudge = { x: 0, y: 0 };\r\n\r\n switch (ev.code) {\r\n case 'ArrowUp':\r\n nudge.y -= nudgeInfo.y.value;\r\n break;\r\n case 'ArrowDown':\r\n nudge.y += nudgeInfo.y.value;\r\n break;\r\n case 'ArrowLeft':\r\n nudge.x -= nudgeInfo.x.value;\r\n break;\r\n case 'ArrowRight':\r\n nudge.x += nudgeInfo.x.value;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (nudge.x || nudge.y) {\r\n ev.preventDefault();\r\n const booster = (boost ? 10 : 1);\r\n nudgeAxisPointBy(pointIndex, Object.keys(nudge).reduce((n, k) => ({ ...n, [k]: n[k] * booster }), nudge));\r\n }\r\n }\r\n\r\n keyDown(ev) {\r\n if (ev.ctrlKey && keyDownArrowKeyPressed(ev)) {\r\n this._doNudgeAxisPointBy(ev, ev.shiftKey);\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.props.subscribe('mouseLeftClicked', this.mouseLeftClicked);\r\n this.props.subscribe('keydown', this.keyDown);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.unsubscribe('mouseLeftClicked', this.mouseLeftClicked);\r\n this.props.unsubscribe('keydown', this.keyDown);\r\n }\r\n\r\n render() {\r\n const {\r\n axisType,\r\n axisPointCols,\r\n axisDiagramEditValues,\r\n addAxisPointValue,\r\n axisLogSettingChanged,\r\n planStep,\r\n axisConfig,\r\n zoomToAxisPoint,\r\n axisPointInverseCols,\r\n combinedOrigin,\r\n toggleCombinedOrigin,\r\n fullCalibrationPlan\r\n } = this.props;\r\n return (\r\n
\r\n \r\n
{this.nextStepDesc()}
\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\n\r\nimport Delete from '@material-ui/icons/DeleteOutline'\r\nimport Add from '@material-ui/icons/Add'\r\nimport Edit from '@material-ui/icons/Edit'\r\nimport Save from '@material-ui/icons/Save'\r\nimport Cancel from '@material-ui/icons/Cancel'\r\n\r\nexport default class SeriesSelector extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n adding: false,\r\n editing: false,\r\n seriesLabel: ''\r\n };\r\n this.currentSeriesChanged = this.currentSeriesChanged.bind(this);\r\n this.addSeriesClicked = this.addSeriesClicked.bind(this);\r\n this.editSeriesClicked = this.editSeriesClicked.bind(this);\r\n this.saveSeriesChanged = this.saveSeriesChanged.bind(this);\r\n this.cancelAddOrEditClicked = this.cancelAddOrEditClicked.bind(this);\r\n this.saveSeriesKeyPress = this.saveSeriesKeyPress.bind(this);\r\n this.removeSeriesClicked = this.removeSeriesClicked.bind(this);\r\n this.seriesLabelChanged = this.seriesLabelChanged.bind(this);\r\n }\r\n currentSeriesChanged(ev) {\r\n const currentSeriesId = ev.target.value;\r\n\r\n\r\n this.props.currentSeriesChanged(currentSeriesId);\r\n }\r\n _toggleAdding() {\r\n this.setState((state, props) => ({ adding: !state.adding }));\r\n }\r\n _toggleEditing() {\r\n this.setState((state, props) => ({ editing: !state.editing }));\r\n }\r\n addSeriesClicked(ev) {\r\n this._toggleAdding();\r\n }\r\n editSeriesClicked(ev) {\r\n const { currentSeries } = this.props;\r\n this.setState({ seriesLabel: currentSeries.label });\r\n this._toggleEditing();\r\n }\r\n _resetUiAfterAddOrEdit() {\r\n this.setState({ seriesLabel: '', adding: false, editing: false });\r\n }\r\n saveSeriesChanged(ev) {\r\n const { adding, editing } = this.state;\r\n const { currentSeries } = this.props;\r\n if (adding) {\r\n this.props.addSeries(this.state.seriesLabel);\r\n }\r\n else if (editing) {\r\n this.props.updateSeries(currentSeries.id, this.state.seriesLabel);\r\n }\r\n this._resetUiAfterAddOrEdit();\r\n }\r\n cancelAddOrEditClicked(ev) {\r\n this._resetUiAfterAddOrEdit();\r\n }\r\n saveSeriesKeyPress(ev) {\r\n if (ev.charCode === 13) {\r\n this.saveSeriesChanged();\r\n }\r\n }\r\n removeSeriesClicked(ev) {\r\n const { currentSeries } = this.props;\r\n\r\n this.props.removeSeries(currentSeries.id);\r\n }\r\n seriesLabelChanged(ev) {\r\n this.setState({\r\n seriesLabel: ev.target.value\r\n });\r\n }\r\n noSeriesHasLabel(label) {\r\n return this.props.series.every(s => s.label !== label);\r\n }\r\n noSeriesButOursHasLabel(ourSeries, label) {\r\n return this.props.series.every(s => s.label !== label || s === ourSeries);\r\n }\r\n render() {\r\n const {\r\n series,\r\n currentSeries,\r\n editMode,\r\n seriesSelectorLines\r\n } = this.props;\r\n const { adding, editing, seriesLabel } = this.state;\r\n\r\n const ifHaveSeries = !!series\r\n && series.length > 0\r\n && !!currentSeries;\r\n\r\n const ifNoSeriesPresent =\r\n !series\r\n || series.length === 0;\r\n\r\n const ifAdding = adding;\r\n const ifEditing = editing;\r\n const ifAddingOrEditing = adding || editing;\r\n const ifNotCurrentlyAdding = !adding;\r\n const ifNotCurrentlyAddingOrEditing = !adding && !editing;\r\n const ifHaveCurrentSeries = !!currentSeries;\r\n\r\n const ifMayCreateNewSeries = adding\r\n && !!seriesLabel\r\n && seriesLabel.length > 0\r\n && this.noSeriesHasLabel(seriesLabel);\r\n\r\n const ifMayRemoveSeries = currentSeries\r\n && !currentSeries.fixed;\r\n\r\n const ifMayEditSeriesLabel = !currentSeries.fixed;\r\n\r\n const ifMayUpdateSeriesLabel = editing\r\n && !currentSeries.fixed\r\n && !!seriesLabel\r\n && seriesLabel.length > 0\r\n && this.noSeriesButOursHasLabel(currentSeries, seriesLabel)\r\n\r\n return (\r\n
\r\n {editMode &&\r\n
\r\n {ifNotCurrentlyAddingOrEditing\r\n && \r\n }\r\n {ifNotCurrentlyAddingOrEditing\r\n && \r\n }\r\n {ifNotCurrentlyAddingOrEditing && ifHaveCurrentSeries\r\n && \r\n }\r\n {ifAddingOrEditing &&\r\n \r\n }\r\n {(ifAdding || ifEditing) &&\r\n \r\n }\r\n
\r\n }\r\n {ifNotCurrentlyAddingOrEditing && ifHaveSeries && \r\n {series.map(s =>\r\n {s.label}\r\n )}\r\n \r\n }\r\n\r\n {ifNotCurrentlyAdding && ifNoSeriesPresent\r\n && \r\n }\r\n\r\n {(ifAdding || ifEditing)\r\n && \r\n }\r\n
\r\n )\r\n }\r\n}","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport Delete from '@material-ui/icons/DeleteOutline';\r\nimport CheckBox from '@material-ui/icons/CheckBox';\r\nimport CheckBoxPartial from '@material-ui/icons/IndeterminateCheckBox';\r\nimport CheckBoxEmpty from '@material-ui/icons/CheckBoxOutlineBlank';\r\n\r\nimport SeriesSelector from './SeriesSelector';\r\n\r\nimport { roundTo, getIntegerAttribute, keyDownArrowKeyPressed } from '../Utils';\r\nimport AxisType from '../AxisType';\r\nimport StepType from '../StepType';\r\n\r\nexport default class DataCollection extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n\r\n this.keyDown = this.keyDown.bind(this);\r\n\r\n this.props.setCalibrationPlanIndexByType(StepType.ENTER_DATA_POINTS);\r\n\r\n this.state = {\r\n selectedRows: []\r\n };\r\n\r\n this.mouseLeftClicked = this.mouseLeftClicked.bind(this);\r\n this.headClicked = this.headClicked.bind(this);\r\n this.bodyClicked = this.bodyClicked.bind(this);\r\n this.deleteClicked = this.deleteClicked.bind(this);\r\n this.toggleRowSelected = this.toggleRowSelected.bind(this);\r\n this.toggleAllRows = this.toggleAllRows.bind(this);\r\n }\r\n\r\n rowSelected(id) {\r\n return this.state.selectedRows.includes(id);\r\n }\r\n toggleRowSelected(ev) {\r\n const tr = ev.target.closest('tr');\r\n const id = tr.getAttribute('data-id');\r\n\r\n this.setState((state, props) => ({\r\n selectedRows: state.selectedRows.includes(id)\r\n ? state.selectedRows.filter(r => r !== id)\r\n : [...state.selectedRows, id]\r\n }));\r\n }\r\n toggleAllRows(ev) {\r\n const tbody = ev.target.closest('table').querySelector('tbody');\r\n const allRowsSelected = this.getAllRowsSelectedInfo();\r\n\r\n this.setState({\r\n selectedRows: allRowsSelected === 'all'\r\n ? []\r\n : [...tbody.children]\r\n .map(r => r.getAttribute('data-id'))\r\n .filter(r => r !== \"\")\r\n });\r\n }\r\n mouseLeftClicked(ev) {\r\n const { scaledOffsetX, scaledOffsetY, valX, valY } = ev.detail.pointerFocus;\r\n\r\n this.props.addDataPoint({\r\n point: { x: scaledOffsetX, y: scaledOffsetY },\r\n dataPoint: { x: valX, y: valY }\r\n }, () => {\r\n\r\n });\r\n }\r\n\r\n headClicked(ev) {\r\n const th = ev.target.tagName.toLowerCase() === 'th'\r\n ? ev.target\r\n : null;\r\n\r\n if (th) {\r\n this.props.toggleShowRelativeValues();\r\n }\r\n }\r\n bodyClicked(ev) {\r\n const td = ev.target.tagName.toLowerCase() === 'td'\r\n ? ev.target\r\n : null;\r\n\r\n if (td) {\r\n const subPointId = td.getAttribute('data-id');\r\n const dataPointIndex = getIntegerAttribute(td, 'data-data-point-index');\r\n const blankCell = td.classList.contains('blank-cell');\r\n\r\n const tr = td.parentNode.tagName.toLowerCase() === 'tr'\r\n ? td.parentNode\r\n : null;\r\n\r\n if (tr && !td.classList.contains('independent')) {\r\n const pointIndex = getIntegerAttribute(tr, 'data-point-index');\r\n const pointId = tr.getAttribute('data-id');\r\n this.props.selectPoint(pointId, subPointId, pointIndex, dataPointIndex, blankCell);\r\n }\r\n }\r\n }\r\n\r\n deleteClicked(ev) {\r\n this.props.removePoints(this.state.selectedRows, () => {\r\n this.setState({ selectedRows: [] });\r\n });\r\n }\r\n\r\n _doNudgeSelectedPointBy(ev, boost) {\r\n const { nudgeInfo, nudgeSelectedPointBy } = this.props;\r\n const nudge = { x: 0, y: 0 };\r\n\r\n switch (ev.code) {\r\n case 'ArrowUp':\r\n nudge.y -= nudgeInfo.y.value;\r\n break;\r\n case 'ArrowDown':\r\n nudge.y += nudgeInfo.y.value;\r\n break;\r\n case 'ArrowLeft':\r\n nudge.x -= nudgeInfo.x.value;\r\n break;\r\n case 'ArrowRight':\r\n nudge.x += nudgeInfo.x.value;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (nudge.x || nudge.y) {\r\n ev.preventDefault();\r\n const booster = (boost ? 10 : 1);\r\n nudgeSelectedPointBy(Object.keys(nudge).reduce((n, k) => ({ ...n, [k]: n[k] * booster }), nudge));\r\n }\r\n }\r\n _doCycleBetweenSeries(ev) {\r\n const { cycleBetweenSeries } = this.props;\r\n let nudge = 0;\r\n\r\n switch (ev.code) {\r\n case 'ArrowUp':\r\n nudge -= 1;\r\n break;\r\n case 'ArrowDown':\r\n nudge += 1;\r\n break;\r\n case 'ArrowLeft':\r\n nudge -= 1;\r\n break;\r\n case 'ArrowRight':\r\n nudge += 1;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (nudge) {\r\n ev.preventDefault();\r\n cycleBetweenSeries(nudge);\r\n }\r\n }\r\n _doMoveCellSelection(ev) {\r\n const { moveCellSelection } = this.props;\r\n const nudge = { x: 0, y: 0 };\r\n\r\n switch (ev.code) {\r\n case 'ArrowUp':\r\n nudge.y -= 1;\r\n break;\r\n case 'ArrowDown':\r\n nudge.y += 1;\r\n break;\r\n case 'ArrowLeft':\r\n nudge.x -= 1;\r\n break;\r\n case 'ArrowRight':\r\n nudge.x += 1;\r\n break;\r\n default:\r\n break;\r\n }\r\n if (nudge.x || nudge.y) {\r\n ev.preventDefault();\r\n moveCellSelection(nudge);\r\n }\r\n }\r\n keyDown(ev) {\r\n if (ev.target !== document.body || !keyDownArrowKeyPressed(ev)) {\r\n return;\r\n }\r\n // console.log(`${ev.code}${ev.shiftKey ? '+Shift' : ''}${ev.altKey ? '+Alt' : ''}${ev.ctrlKey ? '+Ctrl' : ''}`)\r\n if (ev.ctrlKey) {\r\n this._doNudgeSelectedPointBy(ev, ev.shiftKey);\r\n }\r\n else if (ev.altKey) {\r\n this._doCycleBetweenSeries(ev);\r\n }\r\n else {\r\n this._doMoveCellSelection(ev);\r\n }\r\n }\r\n componentDidMount() {\r\n this.props.subscribe('mouseLeftClicked', this.mouseLeftClicked);\r\n this.props.subscribe('keydown', this.keyDown);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.unsubscribe('mouseLeftClicked', this.mouseLeftClicked);\r\n this.props.unsubscribe('keydown', this.keyDown);\r\n }\r\n\r\n getAllRowsSelectedInfo() {\r\n const { points } = this.props.currentSeries;\r\n\r\n const pointCount = points.length;\r\n const selectedCount = this.state.selectedRows.length;\r\n\r\n return selectedCount === pointCount && pointCount > 0\r\n ? 'all'\r\n : selectedCount === 0\r\n ? 'none'\r\n : 'some';\r\n\r\n }\r\n render() {\r\n const {\r\n currentSeries,\r\n axisType,\r\n dataType,\r\n currentSeriesChanged,\r\n updateSeries,\r\n removeSeries,\r\n editMode,\r\n series,\r\n addSeries,\r\n showRelativeValues,\r\n toggleShowRelativeValues,\r\n seriesSelectorLines,\r\n fontSize\r\n } = this.props;\r\n\r\n const {\r\n currentPointIndex,\r\n currentDataPointIndex,\r\n points,\r\n autoAdd\r\n } = currentSeries;\r\n\r\n const pointCount = points.length;\r\n\r\n const { multiPoints } = dataType;\r\n const refPoint = dataType.dataPoints[0];\r\n\r\n const getPoint = (p, independent, showPlusMinus) => {\r\n const pm = showPlusMinus ? '±' : '';\r\n\r\n return axisType === AxisType.BOTH\r\n ? (\r\n !multiPoints\r\n ? `(${roundTo(p.x, 2)}, ${roundTo(p.y, 2)})`\r\n : independent\r\n ? `${roundTo(p.x, 2)}`\r\n : `${pm}${roundTo(p.y, 2)}`\r\n )\r\n : axisType === AxisType.HORIZONTAL\r\n ? (\r\n `${pm}${roundTo(p.x, 2)}`\r\n ) : (\r\n `${pm}${roundTo(p.y, 2)}`\r\n );\r\n };\r\n\r\n const guardedGetPoint = (p, dp) => {\r\n const dp2 = dp.independent ? refPoint : dp;\r\n\r\n const p2 = p[dp2.abbrev];\r\n\r\n const isRelativePoint = !dp.isReferencePoint && !dp.independent;\r\n const dispPoint = !!p2\r\n ? (\r\n isRelativePoint && !showRelativeValues\r\n ? p2.dataPoint.origDp\r\n : p2.dataPoint\r\n ) : null;\r\n\r\n return !!p2 ? getPoint(\r\n dispPoint,\r\n dp.independent,\r\n isRelativePoint && showRelativeValues\r\n ) : '';\r\n };\r\n\r\n const dataPoints = axisType === AxisType.BOTH && multiPoints ? [\r\n {\r\n name: 'Independent variable',\r\n abbrev: 'x',\r\n independent: true\r\n },\r\n ...dataType.dataPoints\r\n ] : dataType.dataPoints;\r\n\r\n const getPointId = (p, dp) => {\r\n return !dp.independent && !!p[dp.abbrev]\r\n ? p[dp.abbrev].id\r\n : null;\r\n };\r\n\r\n const getClass = (p, dp, pointIndex) => {\r\n const isSelected = !dp.independent\r\n && pointIndex === currentPointIndex\r\n && dp.dataPointIndex === currentDataPointIndex;\r\n\r\n const id = getPointId(p, dp);\r\n return classNames({\r\n 'selected': isSelected && !autoAdd,\r\n 'data-cell': !dp.independent && !!id,\r\n 'blank-cell': !dp.independent && !id,\r\n 'independent': dp.independent,\r\n 'notFromBlank': true,\r\n 'auto-add': isSelected && autoAdd\r\n });\r\n };\r\n const getBlankClass = (dp, pointIndex) => {\r\n const isSelected = !dp.independent\r\n && pointIndex === currentPointIndex\r\n && dp.dataPointIndex === currentDataPointIndex;\r\n\r\n return classNames({\r\n 'selected': isSelected && !autoAdd,\r\n 'fromBlank': true,\r\n 'independent': dp.independent,\r\n 'blank-cell': !dp.independent,\r\n 'auto-add': isSelected && autoAdd\r\n });\r\n };\r\n\r\n const allRowsSelected = this.getAllRowsSelectedInfo();\r\n const deletePointsButtonDisabled = this.state.selectedRows.length === 0;\r\n\r\n if (currentSeries) {\r\n return (\r\n
\r\n \r\n
\r\n
\r\n {editMode && \r\n \r\n }\r\n {editMode &&\r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n \r\n {editMode && }\r\n {dataPoints.map(dp =>\r\n \r\n )}\r\n \r\n \r\n {points.map((p, i) =>\r\n \r\n {editMode && }\r\n {dataPoints.map(dp =>\r\n {guardedGetPoint(p, dp)})}\r\n \r\n )}\r\n \r\n {editMode && }\r\n\r\n {dataPoints.map((dp, dpi) =>\r\n  )}\r\n \r\n \r\n
\r\n {allRowsSelected === 'all'\r\n && \r\n }\r\n {allRowsSelected === 'some'\r\n && \r\n }\r\n {allRowsSelected === 'none'\r\n && \r\n }\r\n\r\n {dp.abbrev}
\r\n {this.rowSelected(p.id)\r\n ? \r\n : \r\n }\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n else {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n }\r\n}","\r\nconst DiscriminatorType = {\r\n HORIZONTAL: 'horizontal',\r\n VERTICAL: 'vertical'\r\n};\r\n\r\nexport default DiscriminatorType;","import React from 'react';\r\nimport { DuxDialog } from 'duxpanel';\r\n\r\nimport Wizard from './Wizard';\r\nimport WizardStep from './WizardStep';\r\nimport AxisDiagram from './AxisDiagram';\r\nimport AxisCalibration from './AxisCalibration';\r\nimport DataCollection from './DataCollection';\r\n\r\nimport AxisType from '../AxisType';\r\nimport StepType from '../StepType';\r\nimport DiscriminatorType from '../DiscriminatorType';\r\n\r\nimport { capitalize } from '../Utils';\r\n\r\nexport default class HelperDialog extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n dialogTitle: '',\r\n dialogModal: true\r\n }\r\n\r\n this.onTitleChange = this.onTitleChange.bind(this);\r\n this.haveAllCalibrationPoints = this.haveAllCalibrationPoints.bind(this);\r\n this.haveAllCalibrationPointsAndValues = this.haveAllCalibrationPointsAndValues.bind(this);\r\n this.setModal = this.setModal.bind(this);\r\n }\r\n onTitleChange(newTitle) {\r\n this.setState({ dialogTitle: newTitle });\r\n }\r\n plan = [{\r\n type: AxisType.HORIZONTAL,\r\n label: 'Horizontal axis'\r\n }, {\r\n type: AxisType.VERTICAL,\r\n label: 'Vertical axis'\r\n }, {\r\n type: AxisType.BOTH,\r\n label: 'Both axes'\r\n }]\r\n\r\n haveAllCalibrationPoints() {\r\n const { planStep } = this.props;\r\n const ret = !!planStep && planStep.type !== StepType.AXIS_CALIBRATION_POINT;\r\n return ret;\r\n }\r\n haveAllCalibrationPointsAndValues() {\r\n const { planStep } = this.props;\r\n const ret = !!planStep && planStep.type !== StepType.AXIS_CALIBRATION_POINT && this.props.haveAxisValues;\r\n return ret;\r\n }\r\n setModal(modal) {\r\n this.setState({ dialogModal: modal });\r\n }\r\n render() {\r\n const style = {\r\n left: '50%',\r\n right: '50%',\r\n transform: 'translate(-50%, -50%)'\r\n };\r\n const diagramSize = 100;\r\n const {\r\n config,\r\n showDiscriminator,\r\n selectedPointId,\r\n selectedSubPointId,\r\n currentPointIndex,\r\n currentDataPointIndex,\r\n selectPoint,\r\n nudgeInfo,\r\n nudgeSelectedPointBy,\r\n nudgeAxisPointBy,\r\n zoomToAxisPoint,\r\n moveCellSelection,\r\n cycleBetweenSeries,\r\n showRelativeValues,\r\n toggleShowRelativeValues,\r\n axisConfig,\r\n axisPointInverseCols,\r\n seriesSelectorLines,\r\n dataTableFontSize\r\n } = this.props;\r\n\r\n const discriminatorStyle = {\r\n display: config.axisType === AxisType.BOTH\r\n ? 'inline-block'\r\n : 'none'\r\n }\r\n return (\r\n \r\n \r\n \r\n {this.props.dataTypes &&\r\n (\r\n {this.props.dataTypes.map(gt =>\r\n {gt.text}\r\n )}\r\n )}\r\n \r\n {/* \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
*/}\r\n \r\n
\r\n {this.plan.map(({ type, label }) =>\r\n
\r\n \r\n \r\n {showDiscriminator && type === AxisType.BOTH\r\n &&
\r\n {Object.values(DiscriminatorType).map(dt =>\r\n \r\n )}\r\n
\r\n }\r\n
\r\n )}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport AxisType from '../AxisType';\r\n\r\nimport {\r\n isEmptyObject,\r\n roundTo\r\n} from '../Utils';\r\n\r\nimport MatrixDisplay from './MatrixDisplay';\r\n\r\nconst StatusDisplay = props => {\r\n const [state, setState] = useState({ mousePos: {}, valPos: {} });\r\n const { axisType, matrix } = props;\r\n\r\n useEffect(() => {\r\n const mouseMove = ev => {\r\n const { scaledOffsetX, scaledOffsetY, valX, valY } = ev.detail.pointerFocus;\r\n const newState = {\r\n mousePos: {\r\n x: roundTo(scaledOffsetX, 2),\r\n y: roundTo(scaledOffsetY, 2),\r\n },\r\n valPos: {\r\n x: axisType !== AxisType.VERTICAL ? roundTo(valX, 2) : '-',\r\n y: axisType !== AxisType.HORIZONTAL ? roundTo(valY, 2) : '-'\r\n }\r\n };\r\n setState(newState);\r\n };\r\n props.subscribe('mousePointerMoved', mouseMove);\r\n\r\n return () => {\r\n props.unsubscribe('mousePointerMoved', mouseMove);\r\n };\r\n }, []);\r\n\r\n const { mousePos, valPos } = state;\r\n return (\r\n
\r\n
Status
\r\n
\r\n
imageSpace: ({mousePos.x}, {mousePos.y})
\r\n {/* {matrix && !isEmptyObject(matrix) && } */}\r\n
dataSpace: ({valPos.x}, {valPos.y})
\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default StatusDisplay;\r\n","import React from 'react';\r\n\r\nimport { roundTo } from '../Utils';\r\n\r\nexport default class MatrixDisplay extends React.Component {\r\n render() {\r\n const { matrix, decimalPlaces } = this.props;\r\n if (!matrix) {\r\n return
;\r\n }\r\n const rows = [[\r\n matrix.a, matrix.c, matrix.e\r\n ], [\r\n matrix.b, matrix.d, matrix.f\r\n ]];\r\n return (\r\n
\r\n {rows.map((r, ri) =>\r\n
{\r\n r.map((i, ii) =>\r\n {\r\n roundTo(i, decimalPlaces)\r\n }\r\n )\r\n }
\r\n )}\r\n
\r\n )\r\n }\r\n}","import React from 'react';\r\nimport Edit from '@material-ui/icons/Edit';\r\nimport More from '@material-ui/icons/More';\r\nimport ZoomTracksNudges from '@material-ui/icons/FindReplace';\r\nimport classNames from 'classnames';\r\n\r\nimport ZoomControls from './ZoomControls';\r\n\r\nexport default class Settings extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.zoomTracksPointNudgesClicked = this.zoomTracksPointNudgesClicked.bind(this);\r\n this.editModeClicked = this.editModeClicked.bind(this);\r\n this.advancedModeClicked = this.advancedModeClicked.bind(this);\r\n }\r\n zoomTracksPointNudgesClicked(ev) {\r\n this.props.toggleZoomTracksPointNudgesClicked();\r\n }\r\n editModeClicked(ev) {\r\n this.props.toggleEditMode();\r\n }\r\n advancedModeClicked(ev) {\r\n this.props.toggleAdvancedMode();\r\n }\r\n render() {\r\n const {\r\n editMode,\r\n advancedMode,\r\n\r\n zoomInfo,\r\n zoomOut,\r\n zoomIn,\r\n pointZoomSquaredChanged,\r\n\r\n nudgeInfoX,\r\n nudgeZoomOutX,\r\n nudgeZoomInX,\r\n nudgeSquaredChangedX,\r\n\r\n nudgeInfoY,\r\n nudgeZoomOutY,\r\n nudgeZoomInY,\r\n nudgeSquaredChangedY,\r\n\r\n dataTableFontSizeInfo,\r\n dataTableFontSizeDown,\r\n dataTableFontSizeUp,\r\n\r\n zoomTracksPointNudges,\r\n \r\n seriesSelectorLines,\r\n seriesSelectorLinesUp,\r\n seriesSelectorLinesDown\r\n\r\n } = this.props;\r\n\r\n console.log(`dataTableFontSizeInfo: ${dataTableFontSizeInfo}`);\r\n\r\n const zoomTracksNudgesTitle = `Magnifier tracks point movement: ${zoomTracksPointNudges ? 'ON' : 'OFF'}`;\r\n const editModeTitle = `edit mode ${editMode ? 'ON' : 'OFF'}`;\r\n const advancedModeTitle = `advanced mode ${advancedMode ? 'ON' : 'OFF'}`;\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n\r\n {advancedMode && }\r\n {advancedMode && }\r\n {advancedMode && }\r\n {advancedMode && }\r\n {advancedMode && }\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n }\r\n}","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport uuid from 'uuid/v4';\r\n\r\nimport dataTypes from '../DataTypes';\r\nimport PointType from '../PointType';\r\nimport AxisType from '../AxisType';\r\nimport StepType from '../StepType';\r\nimport {\r\n getImageAsDataUrl,\r\n buildMatrix,\r\n transformPoint,\r\n isEmptyObject,\r\n persistSettings,\r\n recoverSettings,\r\n removeProps,\r\n doZoomIntegerValue,\r\n doZoomFloatValue,\r\n doZoomFloatValueSteps\r\n} from '../Utils';\r\nimport fullCalibrationPlan from '../FullCalibrationPlan';\r\n\r\nimport ImageDisplay from './ImageDisplay';\r\nimport Magnifier from './Magnifier';\r\nimport HelperDialog from './HelperDialog';\r\nimport StatusDisplay from './StatusDisplay';\r\nimport Settings from './Settings';\r\n\r\nexport default class MainUi extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this._devMode = this.props.devMode;\r\n\r\n console.log(`Running React version: ${React.version}`);\r\n\r\n this._processDataTypes();\r\n this.middleColumn = React.createRef();\r\n\r\n this.state = this._getInitialState();\r\n\r\n this.pointerFocus = {\r\n x: null,\r\n y: null,\r\n offsetX: null,\r\n offsetY: null,\r\n scaledOffsetX: null,\r\n scaledOffsetY: null,\r\n context: null,\r\n chromeContext: null,\r\n dpr: 1,\r\n scale: 1,\r\n valX: null,\r\n valY: null\r\n };\r\n\r\n\r\n\r\n\r\n this._bindHandlers();\r\n this.renderCounter = 1;\r\n\r\n // this.axisPointCols = ['limegreen', 'red', 'limegreen', 'red'];\r\n // this.axisPointInverseCols = ['#D736E3', '#00FFFF', '#D736E3', '#00FFFF'];\r\n const antiCyan = 'red';\r\n const antiRed = 'cyan';\r\n const antiLimeGreen = '#D736E3';\r\n const antiGold = '#002AFF';\r\n\r\n this.axisPointCols = ['red', 'red', 'red', 'red'];\r\n this.axisPointInverseCols = [antiRed, antiRed, antiRed, antiRed];\r\n }\r\n\r\n _getInitialState() {\r\n const combinedOrigin = true;\r\n\r\n return {\r\n // pointerFocus: {\r\n // x: null,\r\n // y: null,\r\n // offsetX: null,\r\n // offsetY: null,\r\n // scaledOffsetX: null,\r\n // scaledOffsetY: null,\r\n // context: null,\r\n // chromeContext: null,\r\n // dpr: 1,\r\n // scale: 1,\r\n // valX: null,\r\n // valY: null\r\n // },\r\n settings: {\r\n settingsVersion: 2,\r\n zoomTool: {\r\n value: 2,\r\n squared: true,\r\n refreshToggler: {\r\n toggle: 0,\r\n point: null\r\n // , showCross: true|false\r\n }\r\n },\r\n pointZoom: {\r\n value: 4,\r\n squared: true\r\n },\r\n nudgeInfo: {\r\n x: {\r\n value: 0.25,\r\n squared: true\r\n },\r\n y: {\r\n value: 0.25,\r\n squared: true\r\n }\r\n },\r\n dataTableFontSize: {\r\n value: 11\r\n },\r\n zoomTracksPointNudges: true,\r\n showRelativeValues: true,\r\n advancedMode: false,\r\n editMode: false,\r\n seriesSelectorLines: { value: 3 }\r\n },\r\n calibrationPlanIndex: this._devMode ? 0 : 0,\r\n showHelperDialog: true,\r\n helperDialogStep: this._devMode ? 2 : 0,\r\n fullCalibrationPlan: fullCalibrationPlan(combinedOrigin),\r\n data: {\r\n series: this._devMode\r\n ? [\r\n {\r\n id: \"116e146e-6213-48a7-889b-c1a00dfec6e8\",\r\n label: \"Series 1\",\r\n fixed: false,\r\n points: [],\r\n currentPointIndex: 0,\r\n currentDataPointIndex: 0,\r\n selectedPointId: null,\r\n selectedSubPointId: null,\r\n autoAdd: true\r\n }\r\n ]\r\n : [],\r\n axisConfig: {\r\n combinedOrigin,\r\n\r\n focusedAxisPointIndex: -1,\r\n points: this._devMode ? [] : [],\r\n axes: this._devMode ? [] : [],\r\n matrix: this._devMode ? {} : {}\r\n }\r\n },\r\n currentSeriesId: this._devMode ? \"116e146e-6213-48a7-889b-c1a00dfec6e8\" : 'guid',\r\n selectedAxisPointId: null,\r\n ...(this._devMode\r\n ? {\r\n config: {\r\n graphTypeId: \"mean-and-standard-deviation\",\r\n discriminator: \"vertical\",\r\n axisType: \"both\",\r\n includeIndividuals: false,\r\n dataUri: \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwIAAAKyCAYAAABmAWl5AAAgAElEQVR4XuydB5xU1dnGn3vvzGwFpKixoyaaxBj91FiwJPaKglGKYK8xdhM7ioooKiqIRqOxm2goNjQkauyxotiiUeyKBUVg65R77/d7zsxZBwTcHXZnZ+489/twd2duOef/nsy8zznv+x4nDMMQOkRABERABERABERABERABCqKgCMhUFH2VmdFQAREQAREQAREQAREwBCQENBAEAEREAEREAEREAEREIEKJCAhUIFGV5dFQAREQAREQAREQAREQEJAY0AEREAEREAEREAEREAEKpCAhEAFGl1dFgEREAEREAEREAEREAEJAY0BERABERABERABERABEahAAhICFWh0dVkEREAEREAEREAEREAEJAQ0BkRABERABERABERABESgAglICFSg0dVlERABERABERABERABEZAQ0BgQAREQAREQAREQAREQgQokICFQgUZXl0VABERABERABERABERAQkBjQAREQAREQAREQAREQAQqkICEQAUaXV0WAREQAREQAREQAREQAQkBjQEREAEREAEREAEREAERqEACEgIVaHR1WQREQAREQAREQAREQAQkBDQGREAEREAEREAEREAERKACCUgIVKDR1WUREAEREAEREAEREAERkBDQGBABERABERABERABERCBCiQgIVCQ0QMAGQAuEMSyd3By/8zrIRDydQeBw/+GcODnnsQT3ew55iJ75P9eUKN0kQiIgAiIgAiIgAiIgAi0m4CEQLtR5Z9IZ78VCOOAX5V9g769S+c+CdDpD6oRwoNPIeAEcHm+OSkGxwiAfCHgACHfy2kDvsUzctpAEqEgI+kiERABERABERABERCBZRCQEChoeFAItOSEQPViQoAOf2CEAELPrAjApRBoMcIAiC+yDtDm/ecLAaMCJAQKMo0uEgEREAEREAEREAERaBcBCYF2YVr8JAqBZFYIBIns5L5ZEWDIUCo3nZ8AAjcXMhQADgWCh9AIAZ7Mc7kSwNPz5vzzfs0tDCxBOBTUaF0kAiIgAiIgAiIgAiIgAm0EJAQKGgwUAmkT5pMVAzlf3uXr/MMDAs7+2wigAHApBOK5f8t6KK+34kBBQQWZRxeJgAiIgAiIgAiIgAj8IAEJgR9EtKQTssnCJgcAHjxO+BvfPZX9JUx8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25UA/uS/ffbZxwgBmxxsB55WAwoxrK4RAREQAREQAREQgeUjQF/M5gRsu+22mDVrlgkNshO1pTRhKyFQiK1zQiBwgbQLuJkQcTeJhvnv4qhjTscGm+6FU089FjWxZvgLFsKtr8cnX32F0eeMwTNP/ge1tT2wzo/XxV13/Q1e3EEyHSARz+4snP2Xe4D5md1vmOkBLS0tJizIOvts+h577NEWGkTn3+YRlNIgKwSxrhEBERABERABERCBciewxRZb4LXXXsNXX32Furo646cxgqNUDgmBQixB/5wh/A7AVYFsOE8KcBYiRDV81Ofc96SpLsRYn9DhWVVwgpzxc5WjeA/r7tumLEkIZAXB94/dd9/9eysCEgGFGFXXiIAIiIAIiIAIiEDnELCTthQCTBbODxfqnCd0zl0kBArhmBMC9M25KkDH3UGG0fwIkUAQJljkBy5fC/l6xlT9YW0hhMtQgW2+vn2AbRxFhIRAIabSNSIgAiIgAiIgAiJQbAISAsUmXszn5fvpxkdnUi//8Q3W8c867dn/MkucQoDvV5n325YAstVAl+bj5+637E0ntCJQTMPrWSIgAiIgAiIgAiLwwwQkBH6YUfmeYer8Wz89BNysCAgpAmycP18yPjz3AEixzBCAOELEF53bt2JgCTRyemIpawHZCyQEyncYqeUiIAIiIAIiIALRJCAhEE27Znu1iBAIANdHCA8+sgm/LP/p5M/2OwwRSgOOlxMCebP8EgJRHinqmwiIgAiIgAiIQAUSkBCIstHbhAA9/sB4/b7jIYBjEofNzsB2RcD4/PyD4UEsDJoVC22HmfZfcviP0QjOMiKHtCIQ5VGmvomACIiACIiACJQpAQmBMjVcu5vdFhqUFQIBS3zmXHqzIdgi8f85ZWAShhd3+nNlg3JOf9uKg23IslMEFBrUboPpRBEQAREQAREQAREoDgEJgeJwLpGnLF4AdEnNas85He+OcgQ6zkxXiIAIiIAIiIAIiEBXEpAQ6Eq6uncbAQkBDQYREAEREAEREAERKC0CEgKlZY/ItkZCILKmVcdEQAREQAREQATKlICEQJkartyaLSFQbhZTe0VABERABERABKJOQEIg6hYukf5JCJSIIdQMERABERABERABEcgRkBDQUCgKAQmBomDWQ0RABERABERABESg3QQkBNqNSicuDwEJgeWhp2tFQARE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TA0WgcgTsJVdOJvLgz8pBHbbbTc88vCj2HW3XXH11RPRv39/s8kX51w910EQBth5p13w2OOPIQgyJs47pHOnqdjIjxmG7NDedgWAjj//zo6BECeffDJuuukmkx+www474LrrrsPaa/fP5QK0d4BwrGXH47BhwzFl8lT4Zpzl1AMThM0f2fOUoR75YdelHZQQ6FK8urklICGgsSACIlBqBEwctueBs7yc1eXuvjvttBOeeuopbLvttpg6daqp/EJxQMeO5/J3XrfzzjvjsccoBII2J1C7AJeahTu/PRwrtDk3fuNhyoPG47jllltw4Qk/iAAAIABJREFU9tlnY8GCBWasfPbZZ2blgOPHntvR1mSFwDBMmTLFjDmNr44S1PntISAh0B5KOme5CUgILDdC3UAERKCTCdD554wuvwibm5txxBFHGOe+uroar732mnHg+D4dOzp0DP2wm0VJCHSyMcrkdnYViWOBjvknn3yCt956C4MHD0bv3r2N8//+++8vskpgNxfraBclBDpKTOcXQkBCoBBquqbDBCQEOoxMF4iACHQxATr4dNIYz33hhRfiL3/5C7bZZpu2mX46YvySzOYNhKYKTLY2vFYEutg0JXt7CgCOC64OceWI4T8UBOussw4mTpxoVpRsmJANGWJJ2UJm8yUESnYYRKphEgKRMmfpdkZCoHRto5aJQKUSaGhoMDO4xx9/PG677TbsueeemDBhAlZfffW2kA+yoUPGfxQNNkRDKwKVOWooBF544QX861//MrkAc+bMwahRo7DRRhthn332MePDCgX+zoNCUkKgMsdLOfRaQqAcrBSBNkoIRMCI6oIIRIwAQ4MGDRqERx55xCQIWxHA2V4edN4YMmQdOTqBFA784pQQiNhgaGd33nzzTRxwwAF44403zPi45557zNihSOT44Ow/x4fdWI6igL8XstGcVgTaaRSdtlwEJASWC58ubi8BCYH2ktJ5IiACnUmAzlR+oqXNCaAI4AoARcAWW2yBhx56yMR4t7S0oLY2W5edR7ZaUFYU2C9MhQZ1poW6514cFxwDFHlM+GVeCO1rk79tZSAb3kMnf9111zXnMJTskksuwX777WdWj/iaFYmLz/zbMbO0XtqEdQpOjk0KTf7O9rAtw4cPN0nrPM+WLrVCw5a9teObAraQlYfusYCeWioEJARKxRIRb4eEQMQN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D1+exC4HnMp5E69j3367kpXfG89BaJKHn7rvHwwdOoKtDx/MaacNoKbuG554+llWXff/eO+td/lxxnRWXnElNlq3D2++8QZb7LofK626PDVxgahxFk8++TTTvAoOOXR/agt12CmXfz71Iu+88w6RFbLj9juZMqD//uAj+u29J916dC8+1oJMAxufXN0XXHLmldzz0DtMvGUCm221YSIcpMpRFBIHBa6//hbOPnsct91zB7/den2yjgiV1uVYlMFr26FTVCHQobj1ZkpACSgBJfArIaBCoAwWsi1CQB5LxICMLRnpruvS2NhINivlPhc/JCwnNIm2Uis/KeGZt/KcOvJUrrllIusesDEz584mnFlg9jvf8+jdj7PdVtuaKJpMOt10L7my3MsY98WY/IXvloTaFPIetuz8p1PGAxGJB8K2jCBIhIB0Fc5D1MDHk59m5wOHctbEG9mv305Umt9DGIr3IsKf8x8OO+RQPo5X5oGHbqfyh48YOHAoqV5r8vTDj1I3ZyaHHXIQf9p9O4afdjrnTLyLLX+/CV2jRsK50zn2mJN4t6GWp566h24NM3nqiWcYeualfD7tcwI/z+abb84KK6zC19O+45ZbrqNP3zWSPgPmj4QeOaYk6XffTOHwfU+g97p7cdr5g+mxQnWxI4OFIwkLYb1JEp780ods9ttNqelRTcq2yZr+DHq0lYAKgbaS03FKQAkoASWwNBNQIVAGq99WIeB5njHIS8a47NA3/3mhRxej2koi4FNSvlNq8Xsh9z15L8cOOBarb4qatbuQrspSmJkj96/5ZOakef/tD+le05U4iozwkOvL3+IdkH+XhMiimH0vIJ1OY8WREQEyx0CMevEOyA56c49A2MAnkyex08FDOGPCTezXbwfp92vanZkxdoRTmMml557NWde/xJufv0fl1NcZOHQUT0z+iGuuu5atNl3XhAhN/fhtBp4yiP5/v4G99/6j2f0PZn3JoCHDeWVudx547DaCT6ZwzOHH8NVcm/HXXsXKK/binnvv5OLzL2f11dblrrtuYq21+yAegKTkqCQNS1JxwNefPcsBex3PIUdeyGH9D8CpjPEin2orgxuIh6ReFBoRPWj0wa1MujS4LVQ1KoNXs9NMUYVAp1kKnYgSUAJKQAmUEQEVAmWwWG0RAiVj/L777uOggw4yRnkpdKflR06aiVkSry/N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\",\r\n series: Array[0]\r\n }\r\n }\r\n : {}\r\n ),\r\n ...(this._devMode\r\n ? {\r\n calibrationPlan: [\r\n {\r\n \"type\": \"axis_calibration_point\",\r\n \"axis\": \"horizontal\",\r\n \"pointIndex\": 0,\r\n \"desc\": \"Choose origin\",\r\n \"cloneSource\": true,\r\n \"point\": {\r\n \"x\": \"xmin\",\r\n \"y\": \"ymin\"\r\n },\r\n \"may\": [],\r\n \"stepIndex\": 0\r\n },\r\n {\r\n \"type\": \"axis_calibration_point\",\r\n \"axis\": \"horizontal\",\r\n \"pointIndex\": 1,\r\n \"desc\": \"Choose second horizontal axis point\",\r\n \"point\": {\r\n \"x\": \"xmax\",\r\n \"y\": \"ymin\"\r\n },\r\n \"may\": [],\r\n \"stepIndex\": 1\r\n },\r\n {\r\n \"type\": \"axis_calibration_point\",\r\n \"axis\": \"vertical\",\r\n \"pointIndex\": 0,\r\n \"desc\": \"Origin already chosen\",\r\n \"cloneDest\": true,\r\n \"point\": {\r\n \"x\": \"xmin\",\r\n \"y\": \"ymin\"\r\n },\r\n \"may\": [],\r\n \"stepIndex\": 2\r\n },\r\n {\r\n \"type\": \"axis_calibration_point\",\r\n \"axis\": \"vertical\",\r\n \"pointIndex\": 1,\r\n \"desc\": \"Choose second vertical axis point\",\r\n \"point\": {\r\n \"x\": \"xmin\",\r\n \"y\": \"ymax\"\r\n },\r\n \"may\": [],\r\n \"stepIndex\": 3\r\n },\r\n {\r\n \"type\": \"axis_calibration_values\",\r\n \"may\": [\r\n \"may_extract_axes\",\r\n \"may_define_matrix\"\r\n ],\r\n \"desc\": \"Enter axis values\",\r\n \"axis\": null,\r\n \"stepIndex\": 4\r\n },\r\n {\r\n \"type\": \"enter_data_points\",\r\n \"may\": [\r\n \"may_extract_axes\",\r\n \"may_define_matrix\"\r\n ],\r\n \"desc\": \"Enter data points\",\r\n \"axis\": null,\r\n \"stepIndex\": 5\r\n }\r\n ]\r\n } : {}\r\n )\r\n };\r\n }\r\n\r\n _processDataTypes() {\r\n this.DataTypes = dataTypes.map(dt => ({\r\n ...dt,\r\n multiPoints: dt.dataPoints.length > 1,\r\n dataPoints: dt.dataPoints.sort((a, b) =>\r\n a.isReferencePoint === b.isReferencePoint\r\n ? 0\r\n : a.isReferencePoint ? -1 : +1\r\n ).map((dp, dpi) => ({\r\n ...dp,\r\n dataPointIndex: dpi\r\n }))\r\n })).map(dt => ({\r\n ...dt,\r\n lookup: dt.dataPoints.reduce((m, v, i) => ({ ...m, [v.abbrev]: i }), {})\r\n }));\r\n }\r\n\r\n _buildCalibrationPlan(fcp, axisType, combinedOrigin) {\r\n const plan = fcp.filter(\r\n p => (\r\n p.type === StepType.AXIS_CALIBRATION_POINT\r\n && (\r\n p.axis === axisType\r\n || axisType === AxisType.BOTH\r\n )\r\n )\r\n || p.type !== StepType.AXIS_CALIBRATION_POINT\r\n ).map((p, i) => ({ ...p, stepIndex: i }));\r\n\r\n return plan;\r\n }\r\n\r\n _bindHandlers() {\r\n this.mousePointerMoved = this.mousePointerMoved.bind(this);\r\n this.mouseLeftClicked = this.mouseLeftClicked.bind(this);\r\n this.raiseMousePointerMoved = this.raiseMousePointerMoved.bind(this);\r\n this.subscribeToOurEvents = this.subscribeToOurEvents.bind(this);\r\n this.unsubscribeFromOurEvents = this.unsubscribeFromOurEvents.bind(this);\r\n\r\n this.graphTypeChanged = this.graphTypeChanged.bind(this);\r\n this.dataSeriesCountChanged = this.dataSeriesCountChanged.bind(this);\r\n this.dataPointsCountChanged = this.dataPointsCountChanged.bind(this);\r\n this.axisTypeChanged = this.axisTypeChanged.bind(this);\r\n this.toggleCombinedOrigin = this.toggleCombinedOrigin.bind(this);\r\n this.discriminatorChanged = this.discriminatorChanged.bind(this);\r\n this.includeIndividualsChanged = this.includeIndividualsChanged.bind(this);\r\n this.prevStep = this.prevStep.bind(this);\r\n this.nextStep = this.nextStep.bind(this);\r\n this.finishWizard = this.finishWizard.bind(this);\r\n\r\n this.zoomToolZoomOut = this.zoomToolZoomOut.bind(this);\r\n this.zoomToolZoomIn = this.zoomToolZoomIn.bind(this);\r\n this.zoomToolSquaredChanged = this.zoomToolSquaredChanged.bind(this);\r\n this.zoomToolRefresh = this.zoomToolRefresh.bind(this);\r\n this.toggleEditMode = this.toggleEditMode.bind(this);\r\n this.toggleAdvancedMode = this.toggleAdvancedMode.bind(this);\r\n\r\n this.pointZoomZoomOut = this.pointZoomZoomOut.bind(this);\r\n this.pointZoomZoomIn = this.pointZoomZoomIn.bind(this);\r\n this.pointZoomSquaredChanged = this.pointZoomSquaredChanged.bind(this);\r\n\r\n this.nudgeZoomOutX = this.nudgeZoomOutX.bind(this);\r\n this.nudgeZoomInX = this.nudgeZoomInX.bind(this);\r\n this.nudgeSquaredChangedX = this.nudgeSquaredChangedX.bind(this);\r\n\r\n this.dataTableFontSizeDown = this.dataTableFontSizeDown.bind(this);\r\n this.dataTableFontSizeUp = this.dataTableFontSizeUp.bind(this);\r\n\r\n this.nudgeZoomOutY = this.nudgeZoomOutY.bind(this);\r\n this.nudgeZoomInY = this.nudgeZoomInY.bind(this);\r\n this.nudgeSquaredChangedY = this.nudgeSquaredChangedY.bind(this);\r\n\r\n this.seriesSelectorLinesUp = this.seriesSelectorLinesUp.bind(this);\r\n this.seriesSelectorLinesDown = this.seriesSelectorLinesDown.bind(this);\r\n\r\n this.toggleZoomTracksPointNudgesClicked = this.toggleZoomTracksPointNudgesClicked.bind(this);\r\n\r\n this._getConfig = this._getConfig.bind(this);\r\n\r\n this.addAxisPoint = this.addAxisPoint.bind(this);\r\n this.cloneSourceAxisPointToDest = this.cloneSourceAxisPointToDest.bind(this);\r\n this.addAxisPointValue = this.addAxisPointValue.bind(this);\r\n this.axisLogSettingChanged = this.axisLogSettingChanged.bind(this);\r\n this.removeAxisPoint = this.removeAxisPoint.bind(this);\r\n this.addDataPoint = this.addDataPoint.bind(this);\r\n this.removePoints = this.removePoints.bind(this);\r\n this.nudgeSelectedPointBy = this.nudgeSelectedPointBy.bind(this);\r\n this.nudgeAxisPointBy = this.nudgeAxisPointBy.bind(this);\r\n this.zoomToAxisPoint = this.zoomToAxisPoint.bind(this);\r\n this.moveCellSelection = this.moveCellSelection.bind(this);\r\n this.cycleBetweenSeries = this.cycleBetweenSeries.bind(this);\r\n this.selectPoint = this.selectPoint.bind(this);\r\n this.updateOverlay = this.updateOverlay.bind(this);\r\n this.setCalibrationPlanIndex = this.setCalibrationPlanIndex.bind(this);\r\n this.setCalibrationPlanIndexByType = this.setCalibrationPlanIndexByType.bind(this);\r\n this.getPlanStep = this.getPlanStep.bind(this);\r\n this.extractAxes = this.extractAxes.bind(this);\r\n this.currentSeriesChanged = this.currentSeriesChanged.bind(this);\r\n this.addSeries = this.addSeries.bind(this);\r\n this.updateSeries = this.updateSeries.bind(this);\r\n this.removeSeries = this.removeSeries.bind(this);\r\n this.toggleShowRelativeValues = this.toggleShowRelativeValues.bind(this);\r\n this.persistSettings = this.persistSettings.bind(this);\r\n this.recoverSettings = this.recoverSettings.bind(this);\r\n }\r\n\r\n setCalibrationPlanIndex(modifier, then = planStep => { }) {\r\n this.setState(state => ({\r\n calibrationPlanIndex: modifier(state.calibrationPlanIndex)\r\n }), () => {\r\n then(this.getPlanStep());\r\n this.extractAxes();\r\n });\r\n }\r\n\r\n setCalibrationPlanIndexByType(type) {\r\n this.setState(state => ({\r\n calibrationPlanIndex: state.calibrationPlan.findIndex(plan => plan.type === type)\r\n }));\r\n }\r\n\r\n updateOverlay(overlay) {\r\n const mainUiElem = ReactDOM.findDOMNode(this);\r\n const appElem = mainUiElem.parentElement;\r\n const metaHost = document.getElementById('g2dMetaHost');\r\n const mhd = { width: metaHost.offsetWidth, height: metaHost.offsetHeight };\r\n const or = {\r\n top: appElem.offsetTop,\r\n right: mhd.width - (appElem.offsetWidth + appElem.offsetLeft),\r\n bottom: mhd.height - (appElem.offsetTop + appElem.offsetHeight),\r\n left: appElem.offsetLeft\r\n };\r\n const styleClassName = 'duxpanelBackdropHack';\r\n\r\n const style = document.getElementsByClassName(styleClassName)[0] || document.createElement('style');\r\n style.className = styleClassName;\r\n style.innerText = [\r\n '.duxpanel-backdrop { ',\r\n ...Object.keys(or).map(k => `${k}: ${or[k]}px !important; `),\r\n ' }'\r\n ].join('');\r\n document.body.appendChild(style);\r\n }\r\n dataPointCount(mp) {\r\n const count = Object.keys(mp).filter(k => k !== 'id').length;\r\n return count;\r\n }\r\n addAxisPoint({ point, pointIndex }, then = () => { }) {\r\n const existingPoint = !!point.id;\r\n const id = point.id || uuid();\r\n\r\n this.setState((state, props) => {\r\n const { axisConfig } = state.data;\r\n return {\r\n selectedAxisPointId: id,\r\n data: {\r\n ...state.data,\r\n axisConfig: {\r\n ...axisConfig,\r\n points: existingPoint\r\n ? axisConfig.points.map(p =>\r\n p.id !== id\r\n ? p\r\n : { ...p, ...point }\r\n )\r\n : [\r\n ...axisConfig.points,\r\n { id, ...point, pointIndex, type: PointType.AXIS_CALIBRATION }\r\n ]\r\n }\r\n }\r\n };\r\n }, () => {\r\n this.extractAxes();\r\n this.zoomToolRefresh(this.state.settings.zoomTracksPointNudges ? point : null);\r\n // dumpState(this, 'after addAxisPoint', ['data']);\r\n then();\r\n });\r\n }\r\n\r\n cloneSourceAxisPointToDest() {\r\n const { calibrationPlan, data } = this.state;\r\n const { axisConfig } = data;\r\n const { points, combinedOrigin } = axisConfig;\r\n\r\n if (combinedOrigin) {\r\n const fromIndex = calibrationPlan.findIndex(plan => !!plan.cloneSource);\r\n const toStep = calibrationPlan.find(plan => !!plan.cloneDest);\r\n const newPoint = {\r\n ...removeProps(points[fromIndex], ['id'])\r\n };\r\n\r\n this.addAxisPoint({ point: newPoint, pointIndex: toStep.pointIndex }, () => {\r\n this.setCalibrationPlanIndex(currentIndex => currentIndex + 1);\r\n });\r\n }\r\n }\r\n\r\n applyAbsIf(apply, val) {\r\n return apply ? Math.abs(val) : val;\r\n }\r\n\r\n doMakePointRelative(refDP, dpDepPt, origDp) {\r\n return {\r\n x: refDP.x,\r\n y: this.applyAbsIf(dpDepPt.symmetric, origDp.y - refDP.y),\r\n origDp\r\n };\r\n }\r\n\r\n recalcDependentPoint(matrix, depPt, dpDepPt, refPt) {\r\n const origDataPoint = this.logExpandPoint(transformPoint(matrix, { x: depPt.x, y: depPt.y }));\r\n const tweakedPoint = {\r\n ...depPt,\r\n dataPoint: this.doMakePointRelative(refPt.dataPoint, dpDepPt, origDataPoint)\r\n };\r\n return tweakedPoint;\r\n }\r\n\r\n buildPoint({ id, dataType, dp, point, dataPoint }) {\r\n return {\r\n ...point,\r\n dataPoint,\r\n id,\r\n type: dp.pointType,\r\n dataPointIndex: dataType.lookup[dp.abbrev]\r\n };\r\n }\r\n\r\n makePoint(state, dataType, id, mp, dp, point, dataPoint) {\r\n const metaPoint = {\r\n [dp.abbrev]: this.buildPoint({ id, dataType, dp, point, dataPoint })\r\n };\r\n const { multiPoints } = dataType;\r\n\r\n if (multiPoints) {\r\n const { matrix } = state.data.axisConfig;\r\n\r\n if (dp.isReferencePoint) {\r\n Object.keys(mp).forEach(k => {\r\n if (k !== 'id' && k !== dp.abbrev) {\r\n const dpDep = this.getDataPoint(mp[k].dataPointIndex);\r\n metaPoint[k] = this.recalcDependentPoint(matrix, mp[k], dpDep, metaPoint[dp.abbrev]);\r\n }\r\n });\r\n }\r\n else {\r\n const dpRp = this.getDataPoint(0);\r\n const rp = mp[dpRp.abbrev];\r\n\r\n metaPoint[dp.abbrev] = this.buildPoint({\r\n id,\r\n dataType,\r\n dp,\r\n point,\r\n dataPoint: this.doMakePointRelative(rp.dataPoint, dp, dataPoint)\r\n });\r\n }\r\n }\r\n\r\n return metaPoint;\r\n }\r\n\r\n getAdvancePointersState(autoAdd, dataType, currentPointIndex, currentDataPointIndex) {\r\n const newDataPointIndex = (currentDataPointIndex + 1) % dataType.dataPoints.length;\r\n const newPointIndex = newDataPointIndex > currentDataPointIndex\r\n ? currentPointIndex\r\n : currentPointIndex + 1;\r\n\r\n return autoAdd\r\n ? {\r\n currentPointIndex: newPointIndex,\r\n currentDataPointIndex: newDataPointIndex\r\n } : {\r\n currentPointIndex,\r\n currentDataPointIndex\r\n };\r\n }\r\n\r\n syncIdToIndex(currentSeries, then) {\r\n const { currentPointIndex, currentDataPointIndex } = currentSeries;\r\n const dp = this.getDataPoint(currentDataPointIndex);\r\n const point = currentSeries.points[currentPointIndex];\r\n const subPoint = point ? point[dp.abbrev] : null;\r\n\r\n this.setState((state, props) => ({\r\n data: {\r\n ...state.data,\r\n series: state.data.series.map(s =>\r\n s !== currentSeries\r\n ? s\r\n : {\r\n ...s,\r\n selectedPointId: point ? point.id : null,\r\n selectedSubPointId: subPoint ? subPoint.id : null\r\n }\r\n )\r\n }\r\n }), then);\r\n }\r\n\r\n addDataPoint({ point, dataPoint }, then = () => { }) {\r\n const { currentSeriesId } = this.state;\r\n const currentSeries = this.getSeriesById(currentSeriesId);\r\n\r\n const {\r\n currentPointIndex,\r\n currentDataPointIndex,\r\n selectedPointId,\r\n autoAdd,\r\n points\r\n } = currentSeries;\r\n\r\n const addingAnother = autoAdd && currentPointIndex >= points.length;\r\n\r\n const dp = this.getDataPoint(currentDataPointIndex);\r\n const dataType = this.getDataType();\r\n\r\n const pointId = (!addingAnother && selectedPointId) || uuid();\r\n const subPointId = uuid();\r\n\r\n this.setState((state, props) => ({\r\n data: {\r\n ...state.data,\r\n series: state.data.series.map(s =>\r\n s.id !== currentSeriesId\r\n ? s\r\n : {\r\n ...s,\r\n selectedPointId: pointId,\r\n selectedSubPointId: subPointId,\r\n ...this.getAdvancePointersState(\r\n autoAdd,\r\n dataType,\r\n currentPointIndex,\r\n currentDataPointIndex\r\n ),\r\n points: addingAnother\r\n ? [\r\n ...s.points,\r\n {\r\n id: pointId,\r\n ...this.makePoint(state, dataType, subPointId, {}, dp, point, dataPoint)\r\n }\r\n ]\r\n : s.points.map((mp, i) =>\r\n i !== currentPointIndex\r\n ? mp\r\n : {\r\n ...mp,\r\n ...this.makePoint(state, dataType, subPointId, mp, dp, point, dataPoint)\r\n }\r\n )\r\n }\r\n )\r\n }\r\n }), () => {\r\n const { currentSeriesId } = this.state;\r\n this.syncIdToIndex(this.getSeriesById(currentSeriesId), () => {\r\n // dumpState(this, 'after addDataPoint');\r\n this.zoomToCurrentSubPoint(currentSeriesId);\r\n then();\r\n });\r\n });\r\n }\r\n\r\n zoomToCurrentSubPoint(seriesId) {\r\n const { zoomTracksPointNudges } = this.state.settings;\r\n\r\n const planStep = this.getPlanStep()\r\n if (planStep.type === StepType.ENTER_DATA_POINTS) {\r\n const series = this.getSeriesById(seriesId);\r\n const { currentPointIndex, currentDataPointIndex } = series;\r\n const point = series.points[currentPointIndex];\r\n const dp = this.getDataPoint(currentDataPointIndex);\r\n if (!dp) return;\r\n const subPoint = point ? point[dp.abbrev] : null;\r\n if (!subPoint) return;\r\n\r\n this.zoomToolRefresh(zoomTracksPointNudges ? subPoint : null);\r\n } else if (planStep.type === StepType.AXIS_CALIBRATION_VALUES) {\r\n const { axisConfig } = this.state.data;\r\n const { focusedAxisPointIndex, points } = axisConfig;\r\n if (focusedAxisPointIndex >= 0 && focusedAxisPointIndex < points.length) {\r\n const axisPoint = points[focusedAxisPointIndex];\r\n this.zoomToolRefresh(zoomTracksPointNudges ? axisPoint : null);\r\n }\r\n }\r\n }\r\n removePoints(ids, then = () => { }) {\r\n const { currentSeriesId } = this.state;\r\n\r\n this.setState((state, props) => ({\r\n data: {\r\n ...state.data,\r\n series: state.data.series.map(s =>\r\n s.id !== currentSeriesId\r\n ? s\r\n : {\r\n ...s,\r\n points: s.points.filter(p => !ids.includes(p.id))\r\n }\r\n )\r\n }\r\n }), () => {\r\n const selectedSeries = this.getSeriesById(this.state.currentSeriesId);\r\n this.selectPoint(null, null, selectedSeries.points.length, 0, true, then);\r\n });\r\n }\r\n\r\n getSelectedPoint() {\r\n const { currentSeriesId } = this.state;\r\n let selPoint;\r\n\r\n const currentSeries = this.getSeriesById(currentSeriesId);\r\n const { selectedPointId, selectedSubPointId } = currentSeries;\r\n\r\n currentSeries.points.forEach(mp => {\r\n if (mp.id !== selectedPointId) return;\r\n\r\n Object.keys(mp).forEach(k => {\r\n const pt = k !== 'id' && mp[k].id === selectedSubPointId\r\n ? mp[k]\r\n : null;\r\n\r\n if (pt) {\r\n selPoint = pt;\r\n }\r\n });\r\n });\r\n\r\n return selPoint;\r\n }\r\n\r\n _getAxisPoint(pointIndex) {\r\n const { points } = this.state.data.axisConfig;\r\n if (pointIndex >= points.length) return;\r\n\r\n const axisPoint = points[pointIndex];\r\n return axisPoint;\r\n }\r\n zoomToAxisPoint(pointIndex) {\r\n const axisPoint = this._getAxisPoint(pointIndex);\r\n // if (!axisPoint) {\r\n // return;\r\n // }\r\n this.setState((state, props) => ({\r\n data: {\r\n ...state.data,\r\n axisConfig: {\r\n ...state.data.axisConfig,\r\n focusedAxisPointIndex: pointIndex\r\n }\r\n }\r\n }), () => {\r\n this.zoomToolRefresh(this.state.settings.zoomTracksPointNudges ? axisPoint : null);\r\n })\r\n }\r\n _doNudgeAxisPointBy(pointIndex, { x, y }) {\r\n const curAxisPoint = this._getAxisPoint(pointIndex);\r\n if (!curAxisPoint) return;\r\n\r\n const newPoint = { ...curAxisPoint, x: curAxisPoint.x + x, y: curAxisPoint.y + y };\r\n this.addAxisPoint({ point: newPoint });\r\n }\r\n nudgeAxisPointBy(pointIndex, { x, y }) {\r\n this._doNudgeAxisPointBy(pointIndex, { x, y });\r\n\r\n const { calibrationPlan, data } = this.state;\r\n const { axisConfig } = data;\r\n const { combinedOrigin } = axisConfig;\r\n const pointPlan = calibrationPlan[pointIndex];\r\n\r\n if (combinedOrigin && (!!pointPlan.cloneSource || !!pointPlan.cloneDest)) {\r\n const correspondingOriginPointIndex = calibrationPlan.findIndex(\r\n plan => plan !== pointPlan\r\n && (!!plan.cloneSource || !!plan.cloneDest)\r\n )\r\n if (correspondingOriginPointIndex !== -1) {\r\n this._doNudgeAxisPointBy(correspondingOriginPointIndex, { x, y });\r\n }\r\n }\r\n }\r\n nudgeSelectedPointBy({ x, y }) {\r\n const point = this.getSelectedPoint();\r\n if (!point) return;\r\n\r\n const { matrix } = this.state.data.axisConfig;\r\n\r\n const newPoint = { x: point.x + x, y: point.y + y };\r\n const newDataPoint = this.logExpandPoint(transformPoint(matrix, newPoint));\r\n\r\n this.addDataPoint({ point: newPoint, dataPoint: newDataPoint });\r\n }\r\n\r\n cycleBetweenSeries(nudge) {\r\n this.setState((state, props) => {\r\n const { currentSeriesId } = state;\r\n const { series } = state.data;\r\n const seriesCount = series.length;\r\n\r\n let currentSeriesIndex = series.findIndex(s => s.id === currentSeriesId);\r\n\r\n currentSeriesIndex += nudge;\r\n if (currentSeriesIndex >= seriesCount) {\r\n currentSeriesIndex = 0;\r\n }\r\n else if (currentSeriesIndex < 0) {\r\n currentSeriesIndex = seriesCount - 1;\r\n }\r\n\r\n return {\r\n currentSeriesId: series[currentSeriesIndex].id\r\n };\r\n }, () => {\r\n const { currentSeriesId } = this.state;\r\n this.zoomToCurrentSubPoint(currentSeriesId);\r\n });\r\n }\r\n moveCellSelection({ x, y }) {\r\n const { currentSeriesId } = this.state;\r\n const currentSeries = this.getSeriesById(currentSeriesId);\r\n const { points } = currentSeries;\r\n\r\n const {\r\n currentPointIndex,\r\n currentDataPointIndex\r\n } = currentSeries;\r\n\r\n const dataType = this.getDataType();\r\n\r\n const pointCount = currentSeries.points.length;\r\n const dpCount = dataType.dataPoints.length;\r\n let newDataPointIndex = currentDataPointIndex + x;\r\n let newPointIndex = currentPointIndex + y;\r\n\r\n if (newDataPointIndex >= dpCount) {\r\n newPointIndex++;\r\n newDataPointIndex = 0;\r\n } else if (newDataPointIndex < 0) {\r\n newPointIndex--;\r\n newDataPointIndex = dpCount - 1;\r\n }\r\n\r\n if (newPointIndex >= pointCount) {\r\n newPointIndex = 0;\r\n } else if (newPointIndex < 0) {\r\n newPointIndex = pointCount - 1;\r\n }\r\n const pointNew = points[newPointIndex];\r\n const dpNew = this.getDataPoint(newDataPointIndex);\r\n const subPointNew = pointNew[dpNew.abbrev];\r\n\r\n this.setState((state, props) => ({\r\n data: {\r\n ...state.data,\r\n series: state.data.series.map(s =>\r\n s.id !== currentSeriesId\r\n ? s\r\n : {\r\n ...s,\r\n autoAdd: !subPointNew,\r\n currentDataPointIndex: newDataPointIndex,\r\n currentPointIndex: newPointIndex,\r\n }\r\n )\r\n }\r\n }), () => {\r\n const { currentSeriesId } = this.state;\r\n this.syncIdToIndex(this.getSeriesById(currentSeriesId), () => {\r\n this.zoomToCurrentSubPoint(currentSeriesId);\r\n });\r\n });\r\n }\r\n\r\n selectPoint(pointId, subPointId, pointIndex, dataPointIndex, blankCell, then = () => { }) {\r\n const { currentSeriesId } = this.state;\r\n\r\n // dumpState(this, 'before(in) selectPoint');\r\n\r\n this.setState((state, props) => {\r\n const currentSeries = this.getSeriesById(currentSeriesId);\r\n\r\n // if the current point is empty or doesn't have a reference point, \r\n // don't allow selection of the specified subPoint\r\n const curPoint = currentSeries.points[pointIndex];\r\n const dpRef = this.getDataPoint(0);\r\n const allowSelection = !curPoint || curPoint[dpRef.abbrev];\r\n\r\n return allowSelection\r\n ? {\r\n data: {\r\n ...state.data,\r\n series: state.data.series.map(s =>\r\n s.id !== currentSeriesId\r\n ? s\r\n : {\r\n ...s,\r\n autoAdd: !!blankCell,\r\n selectedPointId: pointId,\r\n selectedSubPointId: subPointId,\r\n currentPointIndex: pointIndex,\r\n currentDataPointIndex: dataPointIndex\r\n }\r\n )\r\n }\r\n } : {};\r\n }, () => {\r\n this.zoomToCurrentSubPoint(this.state.currentSeriesId);\r\n then();\r\n // dumpState(this, 'after(in) selectPoint');\r\n });\r\n }\r\n\r\n addAxisPointValue({ value, pointIndex }) {\r\n this.setState({\r\n data: {\r\n ...this.state.data,\r\n axisConfig: {\r\n ...this.state.data.axisConfig,\r\n points: this.state.data.axisConfig.points.map((p, i) => {\r\n const ret = i !== pointIndex ? p : {\r\n ...p,\r\n value\r\n };\r\n return ret;\r\n })\r\n }\r\n }\r\n }, () => {\r\n this.extractAxes();\r\n });\r\n }\r\n axisLogSettingChanged({ axisIndex, enabled }) {\r\n const { axisType } = this.state.config;\r\n\r\n this.setState((state, props) => ({\r\n data: {\r\n ...state.data,\r\n axisConfig: {\r\n ...state.data.axisConfig,\r\n axes: state.data.axisConfig.axes.map((a, i) =>\r\n i !== axisIndex\r\n ? a\r\n : {\r\n ...a,\r\n log: enabled\r\n }\r\n )\r\n }\r\n }\r\n }), () => {\r\n this.extractAxes();\r\n });\r\n }\r\n removeAxisPoint(point, then) {\r\n this.setState({\r\n data: {\r\n ...this.state.data,\r\n axisConfig: {\r\n ...this.state.data.axisConfig,\r\n points: this.state.data.axisConfig.points.filter(p => p.id !== point.id),\r\n }\r\n }\r\n }, then);\r\n }\r\n _buildMatrix(axes) {\r\n const getAxis = axisType => {\r\n const ax = axes.find(a => a.axisType === axisType);\r\n return ax && ax.from && ax.to ? ax : null;\r\n }\r\n const getScale = (axis, coord) => {\r\n const pixRange = axis ? axis.to[coord] - axis.from[coord] : null;\r\n const valRange = axis && axis.to.value && axis.from.value\r\n ? (\r\n axis.log\r\n ? Math.log10(axis.to.value) - Math.log10(axis.from.value)\r\n : axis.to.value - axis.from.value\r\n )\r\n : null;\r\n const scale = valRange && pixRange ? valRange / pixRange : 1;\r\n\r\n return scale;\r\n };\r\n\r\n const horz = getAxis(AxisType.HORIZONTAL);\r\n const vert = getAxis(AxisType.VERTICAL);\r\n\r\n // choose the origin as follows:\r\n // vertical or horizontal axis - the 'from' point\r\n // both axes - extrapolate the two axes to the intersection point (covers cases where the axes don't meet)\r\n\r\n const { axisType } = this.state.config;\r\n const t = (\r\n axisType === AxisType.BOTH\r\n ? [horz.from.x, vert.from.y]\r\n : axisType === AxisType.HORIZONTAL\r\n ? [horz.from.x, horz.from.y]\r\n : [vert.from.x, vert.from.y]\r\n ).map(v => -v);\r\n const s = [\r\n getScale(horz, 'x'),\r\n getScale(vert, 'y'),\r\n ];\r\n\r\n let matrix = null;\r\n if (!!s.find(s => !!s)) {\r\n matrix = buildMatrix(t, s);\r\n }\r\n\r\n return matrix;\r\n }\r\n _extractAxes(points) {\r\n const extractAxis = (n, axisType) => {\r\n const { axes } = this.state.data.axisConfig;\r\n const existing = axes.length > n ? axes[n] : {};\r\n return {\r\n ...existing,\r\n from: points[n * 2],\r\n to: points[n * 2 + 1],\r\n axisType\r\n };\r\n };\r\n return this.state.config.axisType === AxisType.HORIZONTAL\r\n ? [\r\n extractAxis(0, AxisType.HORIZONTAL)\r\n ]\r\n : this.state.config.axisType === AxisType.VERTICAL\r\n ? [\r\n extractAxis(0, AxisType.VERTICAL)\r\n ]\r\n : [\r\n extractAxis(0, AxisType.HORIZONTAL),\r\n extractAxis(1, AxisType.VERTICAL)\r\n ];\r\n }\r\n\r\n extractAxes() {\r\n const step = this.getPlanStep();\r\n if (step.may.includes(StepType.MAY_EXTRACT_AXES)) {\r\n const { points } = this.state.data.axisConfig;\r\n this._setAxes(this._extractAxes(points));\r\n }\r\n }\r\n\r\n getSeriesById(id) {\r\n return this.state.data.series.find(s => s.id === id);\r\n }\r\n currentSeriesChanged(currentSeriesId) {\r\n const prevCurrentSeries = this.getSeriesById(this.state.currentSeriesId);\r\n\r\n this.setState({ currentSeriesId }, () => {\r\n const { currentSeriesId } = this.state;\r\n\r\n this.zoomToCurrentSubPoint(currentSeriesId);\r\n this.props.raiseCurrentSeriesChanged({\r\n message: 'Current series changed',\r\n prevCurrentSeries,\r\n currentSeries: this.getSeriesById(currentSeriesId)\r\n });\r\n });\r\n }\r\n\r\n addSeries(newSeriesLabel) {\r\n const { config } = this.state;\r\n\r\n const dataType = this.getDataType(config);\r\n\r\n const newSeries = this._buildNewSeries({\r\n id: uuid(),\r\n label: newSeriesLabel,\r\n pointsCount: config.dataPointsCount || 0,\r\n dataType\r\n });\r\n const prevCurrentSeries = this.getSeriesById(this.state.currentSeriesId);\r\n\r\n this.setState((state, props) => ({\r\n currentSeriesId: newSeries.id,\r\n data: {\r\n ...state.data,\r\n series: [\r\n ...state.data.series,\r\n newSeries\r\n ]\r\n }\r\n }), () => {\r\n this.props.raiseSeriesAdded({\r\n message: 'Series added.',\r\n newSeries\r\n });\r\n this.props.raiseCurrentSeriesChanged({\r\n message: 'Current series changed',\r\n prevCurrentSeries,\r\n currentSeries: newSeries\r\n });\r\n });\r\n }\r\n\r\n updateSeries(id, newLabel) {\r\n const currentSeries = this.getSeriesById(this.state.currentSeriesId);\r\n const seriesBefore = { ...currentSeries };\r\n const seriesAfter = { ...currentSeries, label: newLabel };\r\n\r\n this.setState((state, props) => ({\r\n data: {\r\n ...state.data,\r\n series: state.data.series.map(s => s.id !== id\r\n ? s\r\n : { ...s, label: newLabel }\r\n )\r\n }\r\n }), () => {\r\n this.props.raiseSeriesLabelChanged({\r\n message: 'Series labelChanged.',\r\n seriesBefore,\r\n seriesAfter\r\n });\r\n });\r\n }\r\n\r\n // \r\n // 0 | 1 | 2 | 3\r\n // a b\r\n // a b\r\n // a b\r\n // b a\r\n // \r\n getNextCurrentSeriesId() {\r\n const { data, currentSeriesId } = this.state;\r\n const { series } = data;\r\n const idx = series.findIndex(s => s.id === currentSeriesId);\r\n const len = series.length;\r\n const idx2 = len > 1\r\n ? idx < len - 1 ? idx + 1 : idx - 1\r\n : null;\r\n return idx2 != null ? series[idx2].id : null;\r\n };\r\n\r\n removeSeries(id) {\r\n const { series } = this.state.data;\r\n const seriesToDelete = series.find(s => s.id === id);\r\n\r\n this.setState((state, props) => {\r\n return {\r\n currentSeriesId: id === state.currentSeriesId ? this.getNextCurrentSeriesId() : state.currentSeriesId,\r\n data: {\r\n ...state.data,\r\n series: series.filter(s => s !== seriesToDelete)\r\n }\r\n };\r\n }, () => {\r\n this.props.raiseSeriesDeleted({\r\n message: 'Series deleted.',\r\n seriesDeleted: seriesToDelete,\r\n allSeries: this.state.data.series\r\n });\r\n });\r\n }\r\n\r\n toggleShowRelativeValues() {\r\n this.setState((state, props) => ({\r\n settings: {\r\n ...state.settings,\r\n showRelativeValues: !state.settings.showRelativeValues\r\n }\r\n }));\r\n }\r\n\r\n _setAxes(axes) {\r\n const step = this.getPlanStep();\r\n if (step.may.includes(StepType.MAY_BUILD_MATRIX)) {\r\n const matrix = this._buildMatrix(axes);\r\n this.setState({\r\n data: {\r\n ...this.state.data,\r\n axisConfig: {\r\n ...this.state.data.axisConfig,\r\n axes,\r\n matrix\r\n }\r\n }\r\n });\r\n }\r\n }\r\n regenExistingDataPoints() {\r\n this.setState((state, props) => {\r\n // console.log('***-***-regenExistingDataPoints.before-start-***-***');\r\n // console.log(JSON.stringify(state, null, 2));\r\n // console.log('***-***-regenExistingDataPoints.before-end-***-***');\r\n const dt = this.getDataType();\r\n const { matrix } = state.data.axisConfig;\r\n\r\n return {\r\n data: {\r\n ...state.data,\r\n series: state.data.series.map(s => ({\r\n ...s,\r\n points: s.points.map(mp => ({\r\n ...mp,\r\n ...dt.dataPoints.reduce((ob, dp) => {\r\n const subPoint = mp[dp.abbrev];\r\n const dataPoint = this.logExpandPoint(transformPoint(matrix, subPoint));\r\n\r\n return {\r\n ...ob,\r\n [dp.abbrev]: dp.isReferencePoint\r\n ? {\r\n ...subPoint,\r\n dataPoint: dataPoint\r\n } : {\r\n ...subPoint,\r\n dataPoint: this.doMakePointRelative(\r\n mp[dt.dataPoints[0].abbrev].dataPoint,\r\n subPoint,\r\n dataPoint\r\n )\r\n }\r\n };\r\n }, {})\r\n }))\r\n }))\r\n }\r\n };\r\n }, () => {\r\n // const state = this.state;\r\n // console.log('***-***-regenExistingDataPoints.2-after-start-***-***');\r\n // console.log(JSON.stringify(state, null, 2));\r\n // console.log('***-***-regenExistingDataPoints.2-after-end-***-***');\r\n });\r\n }\r\n prevStep() {\r\n this.setState((state, props) => ({\r\n helperDialogStep: state.helperDialogStep - 1\r\n }));\r\n }\r\n nextStep() {\r\n this.setState((state, props) => {\r\n // console.log(`end of step ${state.helperDialogStep} - state: ${JSON.stringify(state, null, 2)}`);\r\n return {\r\n helperDialogStep: state.helperDialogStep + 1\r\n };\r\n }, () => {\r\n if (this.state.helperDialogStep === 3) {\r\n this.regenExistingDataPoints();\r\n }\r\n });\r\n }\r\n getDataType(config) {\r\n const { graphTypeId } = (config || this.state.config);\r\n return this.DataTypes.find(dt => dt.id === graphTypeId);\r\n }\r\n getDataPoint(index) {\r\n return this.getDataType().dataPoints[index];\r\n }\r\n\r\n _buildNewSeries({ id, label, fixed, dataPointsCount, dataType }) {\r\n return {\r\n id,\r\n label,\r\n fixed,\r\n points: [],\r\n // [...Array(dataPointsCount).keys()].map(_ =>\r\n // dataType.dataPoints.reduce((ob, p) => ({\r\n // ...ob,\r\n // [p.abbrev]: {\r\n // x: null,\r\n // y: null,\r\n // dataPoint: {\r\n // x: null,\r\n // y: null\r\n // },\r\n // id: uuid(),\r\n // type: PointType.DATA_POINT,\r\n // selected: false\r\n // }\r\n // }), {})\r\n // ),\r\n currentPointIndex: 0,\r\n currentDataPointIndex: 0,\r\n selectedPointId: null,\r\n selectedSubPointId: null,\r\n autoAdd: true\r\n };\r\n }\r\n\r\n _buildConfiguredSeriesState(config, data) {\r\n if (!config || !data) {\r\n return {};\r\n }\r\n\r\n // filter out unacceptable series\r\n const providedSeries = config.series.map(ps => ({\r\n id: ps.id ? ps.id.trim() : '',\r\n label: ps.label ? ps.label.trim() : ''\r\n })).filter((ps, i, arr) =>\r\n ps.label && ps.label.length > 0 && ps.id\r\n && arr.every((s, j) => j >= i || (s.label !== ps.label && s.id !== ps.id))\r\n );\r\n const providedCount = providedSeries.length;\r\n const { dataSeriesCount = 1, dataPointsCount = 0 } = config;\r\n const seriesCount = Math.max(providedSeries.length, dataSeriesCount);\r\n const newSeriesCount = seriesCount - providedCount;\r\n const dataType = this.getDataType(config);\r\n\r\n const ids = [\r\n ...providedSeries.map(ps => ps.id),\r\n ...[...Array(newSeriesCount).keys()].map(_ => uuid())\r\n ];\r\n const labels = [\r\n ...providedSeries.map(ps => ps.label),\r\n ...[...Array(newSeriesCount).keys()].map((_, i) => `Series ${i + 1 + providedCount}`)\r\n ];\r\n const fixeds = [\r\n ...providedSeries.map(ps => true),\r\n ...[...Array(newSeriesCount).keys()].map(_ => false)\r\n ];\r\n\r\n return {\r\n currentSeriesId: ids[0],\r\n data: {\r\n // ...this.state.data,\r\n ...data,\r\n series: ids.map((id, i) => {\r\n const label = labels[i];\r\n const fixed = fixeds[i];\r\n return this._buildNewSeries({ id, label, fixed, dataPointsCount, dataType });\r\n })\r\n }\r\n };\r\n }\r\n configureSeries() {\r\n const { config, data } = this.state;\r\n const seriesState = this._buildConfiguredSeriesState(config, data);\r\n\r\n this.setState(seriesState, () => { });\r\n }\r\n finishWizard() {\r\n this.setState({ showHelperDialog: false }, () => {\r\n const { raiseExtractionComplete } = this.props;\r\n const { data } = this.state;\r\n const { series } = data;\r\n\r\n raiseExtractionComplete({\r\n message: 'Extraction complete',\r\n series\r\n });\r\n });\r\n }\r\n graphTypeChanged(ev) {\r\n this.setState({\r\n config: { ...this.state.config, graphTypeId: ev.target.value }\r\n }, () => {\r\n this.configureSeries();\r\n });\r\n }\r\n dataSeriesCountChanged(ev) {\r\n this.setState({\r\n config: { ...this.state.config, dataSeriesCount: +ev.target.value }\r\n }, () => {\r\n this.configureSeries();\r\n });\r\n }\r\n dataPointsCountChanged(ev) {\r\n this.setState({\r\n config: { ...this.state.config, dataPointsCount: +ev.target.value }\r\n }, () => {\r\n this.configureSeries();\r\n });\r\n }\r\n axisTypeChanged(ev) {\r\n const axisType = ev.target.value;\r\n\r\n this.setState((state, props) => {\r\n const { combinedOrigin } = state.data.axisConfig;\r\n const fcp = fullCalibrationPlan(combinedOrigin && axisType === AxisType.BOTH)\r\n\r\n return {\r\n config: { ...state.config, axisType },\r\n fullCalibrationPlan: fcp,\r\n calibrationPlan: this._buildCalibrationPlan(\r\n fcp,\r\n axisType,\r\n combinedOrigin && axisType === AxisType.BOTH\r\n )\r\n };\r\n }, () => {\r\n });\r\n }\r\n toggleCombinedOrigin() {\r\n this.setState((state, props) => {\r\n const { data, config } = state;\r\n const { axisType } = config;\r\n const { axisConfig } = data;\r\n const { combinedOrigin } = axisConfig;\r\n const newCombinedOrigin = !combinedOrigin;\r\n\r\n const fcp = fullCalibrationPlan(newCombinedOrigin && axisType === AxisType.BOTH);\r\n return {\r\n fullCalibrationPlan: fcp,\r\n calibrationPlan: this._buildCalibrationPlan(\r\n fcp,\r\n axisType,\r\n combinedOrigin && axisType == AxisType.BOTH\r\n ),\r\n data: {\r\n ...state.data,\r\n axisConfig: {\r\n ...axisConfig,\r\n combinedOrigin: newCombinedOrigin\r\n }\r\n }\r\n };\r\n });\r\n }\r\n\r\n discriminatorChanged(ev) {\r\n const discriminator = ev.target.value;\r\n\r\n this.setState({\r\n config: { ...this.state.config, discriminator }\r\n });\r\n }\r\n\r\n get pointCount() {\r\n return (this.state.config.axisType === AxisType.BOTH ? 2 : 1) * 2;\r\n }\r\n\r\n getPlanStep() {\r\n const index = this.state.calibrationPlanIndex;\r\n return (index < this.state.calibrationPlan.length)\r\n ? this.state.calibrationPlan[index]\r\n : null;\r\n }\r\n includeIndividualsChanged(ev) {\r\n this.setState({\r\n config: { ...this.state.config, includeIndividuals: ev.target.checked }\r\n }, () => {\r\n });\r\n }\r\n _doZoomToolInOut(out, then = () => { }) {\r\n this.setState((state, props) => {\r\n const { zoomTool } = state.settings;\r\n if (out && zoomTool.value <= 1) return state;\r\n return {\r\n settings: {\r\n ...state.settings,\r\n zoomTool: {\r\n ...zoomTool,\r\n value: doZoomIntegerValue(out, zoomTool.squared, zoomTool.value)\r\n }\r\n }\r\n };\r\n }, then);\r\n }\r\n _doPointZoomInOut(out) {\r\n this.setState((state, props) => {\r\n const { pointZoom } = state.settings\r\n if (out && pointZoom.value <= 1) return state;\r\n return {\r\n settings: {\r\n ...state.settings,\r\n pointZoom: {\r\n ...pointZoom,\r\n value: doZoomIntegerValue(out, pointZoom.squared, pointZoom.value)\r\n }\r\n }\r\n };\r\n }, this.zoomToCurrentSubPoint(this.state.currentSeriesId));\r\n }\r\n _doNudgeZoomInOut({ xy, out }) {\r\n this.setState((state, props) => {\r\n const { nudgeInfo } = state.settings;\r\n const nixy = nudgeInfo[xy];\r\n // if (out && nixy.value <= 1) return state;\r\n return {\r\n settings: {\r\n ...state.settings,\r\n nudgeInfo: {\r\n ...nudgeInfo,\r\n [xy]: {\r\n ...nixy,\r\n value: doZoomFloatValue(out, nixy.squared, nixy.value)\r\n }\r\n }\r\n }\r\n };\r\n });\r\n }\r\n _doNudgeSquaredChanged(xy, squared) {\r\n this.setState((state, props) => ({\r\n settings: {\r\n ...state.settings,\r\n nudgeInfo: {\r\n ...state.settings.nudgeInfo,\r\n [xy]: {\r\n ...state.settings.nudgeInfo[xy],\r\n squared\r\n }\r\n }\r\n }\r\n }));\r\n }\r\n\r\n zoomToolZoomOut() {\r\n this._doZoomToolInOut(true, () => this.zoomToCurrentSubPoint(this.state.currentSeriesId));\r\n }\r\n zoomToolZoomIn() {\r\n this._doZoomToolInOut(false, () => this.zoomToCurrentSubPoint(this.state.currentSeriesId));\r\n }\r\n zoomToolSquaredChanged(squared) {\r\n this.setState((state, props) => ({\r\n settings: {\r\n ...state.settings,\r\n zoomTool: { ...state.settings.zoomTool, squared }\r\n }\r\n }));\r\n }\r\n zoomToolRefresh(point) {\r\n this.setState((state, props) => {\r\n const { refreshToggler } = state.settings.zoomTool;\r\n const { zoomTracksPointNudges } = state.settings;\r\n return {\r\n settings: {\r\n ...state.settings,\r\n zoomTool: {\r\n ...state.settings.zoomTool,\r\n refreshToggler: {\r\n ...refreshToggler,\r\n toggle: refreshToggler.toggle++,\r\n point: { ...this.pointerFocus, ...point },\r\n showCross: zoomTracksPointNudges\r\n }\r\n }\r\n }\r\n };\r\n });\r\n }\r\n toggleEditMode() {\r\n this.setState((state, props) => ({\r\n settings: {\r\n ...state.settings,\r\n editMode: !state.settings.editMode\r\n }\r\n }));\r\n }\r\n toggleAdvancedMode() {\r\n this.setState((state, props) => ({\r\n settings: {\r\n ...state.settings,\r\n advancedMode: !state.settings.advancedMode\r\n }\r\n }));\r\n }\r\n\r\n\r\n pointZoomZoomOut() {\r\n this._doPointZoomInOut(true);\r\n }\r\n pointZoomZoomIn() {\r\n this._doPointZoomInOut(false);\r\n }\r\n pointZoomSquaredChanged(squared) {\r\n this.setState((state, props) => ({\r\n settings: {\r\n ...state.settings,\r\n pointZoom: { ...this.state.settings.pointZoom, squared }\r\n }\r\n }));\r\n }\r\n\r\n nudgeZoomOutX() {\r\n this._doNudgeZoomInOut({ xy: 'x', out: true });\r\n }\r\n nudgeZoomInX() {\r\n this._doNudgeZoomInOut({ xy: 'x', out: false });\r\n }\r\n nudgeSquaredChangedX(squared) {\r\n this._doNudgeSquaredChanged('x', squared);\r\n }\r\n\r\n\r\n nudgeZoomOutY() {\r\n this._doNudgeZoomInOut({ xy: 'y', out: true });\r\n }\r\n nudgeZoomInY() {\r\n this._doNudgeZoomInOut({ xy: 'y', out: false });\r\n }\r\n nudgeSquaredChangedY(squared) {\r\n this._doNudgeSquaredChanged('y', squared);\r\n }\r\n\r\n _doNudgeDataTableFontSize(out) {\r\n this.setState((state, props) => ({\r\n settings: {\r\n ...state.settings,\r\n dataTableFontSize: {\r\n value: doZoomFloatValueSteps(\r\n out,\r\n state.settings.dataTableFontSize.value, [{\r\n from: 5, to: 6, increment: 0\r\n }, {\r\n from: 6, to: 16, increment: 1\r\n }, {\r\n from: 16, to: 17, increment: 0\r\n }])\r\n }\r\n }\r\n }));\r\n }\r\n dataTableFontSizeDown() {\r\n this._doNudgeDataTableFontSize(true);\r\n }\r\n dataTableFontSizeUp() {\r\n this._doNudgeDataTableFontSize(false);\r\n }\r\n\r\n _doSeriesSelectorLinesUpDown(down) {\r\n this.setState((state, props) => {\r\n const { seriesSelectorLines } = state.settings;\r\n return {\r\n settings: {\r\n ...state.settings,\r\n seriesSelectorLines: {\r\n value: doZoomIntegerValue(\r\n down,\r\n false,\r\n seriesSelectorLines.value,\r\n 1\r\n )\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n seriesSelectorLinesUp() {\r\n this._doSeriesSelectorLinesUpDown(false);\r\n }\r\n seriesSelectorLinesDown() {\r\n this._doSeriesSelectorLinesUpDown(true);\r\n }\r\n\r\n toggleZoomTracksPointNudgesClicked() {\r\n this.setState((state, props) => ({\r\n settings: {\r\n ...state.settings,\r\n zoomTracksPointNudges: !state.settings.zoomTracksPointNudges\r\n }\r\n }));\r\n }\r\n\r\n subscribeToOurEvents(eventName, handler) {\r\n document.addEventListener(eventName, handler);\r\n }\r\n unsubscribeFromOurEvents(eventName, handler) {\r\n document.removeEventListener(eventName, handler);\r\n }\r\n raiseMousePointerMoved(detail) {\r\n document.dispatchEvent(new CustomEvent(\"mousePointerMoved\", {\r\n bubbles: true,\r\n cancelable: false,\r\n composed: true,\r\n detail\r\n }));\r\n }\r\n mouseLeftClicked() {\r\n this.raiseMouseLeftClicked({\r\n pointerFocus: this.pointerFocus\r\n });\r\n }\r\n\r\n raiseMouseLeftClicked(detail) {\r\n document.dispatchEvent(new CustomEvent(\"mouseLeftClicked\", {\r\n bubbles: true,\r\n cancelable: false,\r\n composed: true,\r\n detail\r\n }));\r\n }\r\n logExpandPoint(point) {\r\n const { axisType } = this.state.config;\r\n const { axes } = this.state.data.axisConfig;\r\n if (axes.length === 0) return point;\r\n\r\n const newPoint = {\r\n ...point,\r\n x: (axisType === AxisType.HORIZONTAL || axisType === AxisType.BOTH)\r\n ? (\r\n axes[0].log\r\n ? Math.pow(10, point.x)\r\n : point.x + +axes[0].from.value\r\n ) : null,\r\n y: axisType === AxisType.VERTICAL\r\n ? (\r\n axes[0].log\r\n ? Math.pow(10, point.y)\r\n : point.y + +axes[0].from.value\r\n )\r\n : axisType === AxisType.BOTH\r\n ? (\r\n axes[1].log\r\n ? Math.pow(10, point.y)\r\n : point.y + +axes[1].from.value\r\n )\r\n : null\r\n };\r\n return newPoint;\r\n }\r\n mousePointerMoved({ x, y, offsetX, offsetY, context, chromeContext, dpr, scale }) {\r\n const scaledOffsetX = offsetX * scale;\r\n const scaledOffsetY = offsetY * scale;\r\n\r\n const { matrix } = this.state.data.axisConfig;\r\n const valPt = this.logExpandPoint(\r\n matrix && !isEmptyObject(matrix)\r\n ? transformPoint(matrix, { x: scaledOffsetX, y: scaledOffsetY })\r\n : { x: null, y: null }\r\n );\r\n this.pointerFocus = {\r\n x, y,\r\n offsetX, offsetY,\r\n scaledOffsetX, scaledOffsetY,\r\n context, chromeContext,\r\n dpr,\r\n scale,\r\n valX: valPt.x,\r\n valY: valPt.y\r\n };\r\n this.raiseMousePointerMoved({\r\n pointerFocus: this.pointerFocus\r\n })\r\n }\r\n\r\n async _getConfig() {\r\n const config = JSON.parse(this.props.config);\r\n const retVal = await this.processConfig(config);\r\n\r\n return retVal;\r\n }\r\n async processConfig(config) {\r\n if (!config.dataUri && config.imageUri) {\r\n config.dataUri = await getImageAsDataUrl(config.imageUri);\r\n }\r\n return config;\r\n }\r\n\r\n _buildDevSeriesState(config) {\r\n const ids = [uuid(), uuid()];\r\n const labels = ['Model', 'Model + Drug'];\r\n\r\n return {\r\n currentSeriesId: ids[0],\r\n data: {\r\n ...this.state.data,\r\n series: ids.map((id, i) => this._buildNewSeries({\r\n id,\r\n label: labels[i],\r\n pointsCount: 0,\r\n dataType: this.getDataType(config)\r\n }))\r\n }\r\n };\r\n }\r\n\r\n // configUpdateCounter = 0;\r\n async componentDidUpdate(prevProps, prevState, snapshot) {\r\n if (prevProps.config !== this.props.config) {\r\n this.persistSettings();\r\n\r\n const config = await this._getConfig();\r\n const stateReset = Object.keys(this.state).reduce((acc, v) => ({ ...acc, [v]: undefined }), {})\r\n const initialState = this._getInitialState();\r\n const seriesState = this._devMode\r\n ? this._buildDevSeriesState(config)\r\n : this._buildConfiguredSeriesState(config, initialState.data);\r\n // const seriesState = this._buildConfiguredSeriesState(config, initialState.data);\r\n\r\n this.setState((state, props) => {\r\n const { combinedOrigin } = state.data.axisConfig;\r\n\r\n return {\r\n ...stateReset,\r\n ...initialState,\r\n config,\r\n calibrationPlan: this._buildCalibrationPlan(\r\n state.fullCalibrationPlan,\r\n config.axisType,\r\n combinedOrigin && config.axisType == AxisType.BOTH\r\n ),\r\n ...seriesState\r\n };\r\n }, async () => {\r\n this.recoverSettings();\r\n });\r\n }\r\n }\r\n\r\n _settingsKey = this.props.settingsKey || 'Graph2DataSettings';\r\n\r\n persistSettings() {\r\n persistSettings({ component: this, localStorage: this.props.localStorage, settingsKey: this._settingsKey });\r\n }\r\n recoverSettings() {\r\n recoverSettings({ component: this, localStorage: this.props.localStorage, settingsKey: this._settingsKey });\r\n }\r\n\r\n\r\n componentDidMount() {\r\n document.title = \"graph2Data\";\r\n\r\n this.recoverSettings();\r\n\r\n window.addEventListener(\r\n \"beforeunload\",\r\n this.persistSettings\r\n );\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener(\r\n \"beforeunload\",\r\n this.persistSettings\r\n );\r\n\r\n this.persistSettings();\r\n }\r\n\r\n haveAxisValues() {\r\n const { axisConfig } = this.state.data;\r\n const { axes } = axisConfig;\r\n return axes.length > 0 && axes.every(a => !!a.from.value && !!a.to.value);\r\n }\r\n subscriptionHandlers = {\r\n subscribe: this.subscribeToOurEvents,\r\n unsubscribe: this.unsubscribeFromOurEvents\r\n }\r\n render() {\r\n const {\r\n config,\r\n selectedAxisPointId,\r\n settings\r\n } = this.state;\r\n\r\n const {\r\n pointZoom,\r\n nudgeInfo,\r\n zoomTracksPointNudges,\r\n showRelativeValues,\r\n advancedMode,\r\n editMode,\r\n seriesSelectorLines,\r\n dataTableFontSize\r\n } = settings;\r\n\r\n if (!config) {\r\n return ()\r\n }\r\n const { axisType } = config;\r\n\r\n const magnifierSize = { width: 200, height: 200 };\r\n const magnifierStageBorder = 8;\r\n\r\n const { axisConfig, series } = this.state.data;\r\n const { combinedOrigin } = axisConfig;\r\n const currentSeries = this.getSeriesById(this.state.currentSeriesId);\r\n const { selectedPointId, selectedSubPointId } = currentSeries;\r\n // console.log(`selectedPointId: ${selectedPointId} ][ selectedSubPointId: ${selectedSubPointId}`);\r\n const dataType = this.getDataType();\r\n const showDiscriminator = false && dataType.multiPoints;\r\n const planStep = this.getPlanStep();\r\n const showCalibrationPoints = planStep.type === StepType.AXIS_CALIBRATION_POINT\r\n || planStep.type === StepType.AXIS_CALIBRATION_VALUES;\r\n\r\n return (\r\n
\r\n {config.dataUri ? \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
: No image yet.}\r\n
\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport disableBrowserBackButton from 'disable-browser-back-navigation';\r\n\r\nimport './App.scss';\r\nimport ApiDriver from './Components/ApiDriver';\r\nimport MainUi from './Components/MainUi';\r\n\r\nclass App extends Component {\r\n componentDidMount() {\r\n disableBrowserBackButton();\r\n }\r\n render() {\r\n const { apiDriver, ...moreProps } = this.props;\r\n\r\n return (\r\n
\r\n {apiDriver\r\n ? \r\n : \r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default App;\r\n","import path from 'path';\r\n\r\nconst graphImageNames = [\r\n\t'01. bar with error bars (2S1B).png',\r\n\t'02. points and lines.png',\r\n\t'03. scatter plot.png',\r\n\t'04. box and whisker (5-points).png',\r\n\t'05. two series, three bars per series with error bar.png',\r\n\t'06. points and lines.png',\r\n\t'07. scatter plot.png',\r\n\t'08. points and lines.png',\r\n\t'09. scatter plot.png',\r\n\t'10. box and whisker.png',\r\n\t'11. AUC.png',\r\n\t'12. horizontal four series (four bars per series) bar chart with error bars.png',\r\n\t'13. points and lines.png',\r\n\t'14. scatter plot with error bars.png',\r\n\t'15. means plus individuals.png',\r\n\t'16. box and whisker.png',\r\n\t'17. AUC.png',\r\n\t'18. five series (four bars per series) with error bar.png',\r\n\t'19. points and lines.png',\r\n\t'20. scatter plot (no or one series).png',\r\n\t'21. mean plus individuals.png',\r\n\t'22. box and whisker.png',\r\n\t'23. AUC.png',\r\n\t'24. six series (one bar per series) with error bar.png',\r\n\t'25. points and lines.png',\r\n\t'26. scatter plot.png',\r\n\t'27. mean plus individuals.png',\r\n\t'28. box plot.png',\r\n\t'29. AUC.png',\r\n].map(n => path.join('/graphs', n));\r\n\r\nexport default graphImageNames;","import React from 'react';\r\nimport './style.scss';\r\nimport graphImageNames from './graphImageNames';\r\n\r\nimport { getImageAsDataUrl } from '../../../Utils';\r\n\r\nexport default class GraphChooserApiDriver extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n selectedGraphInfo: [],\r\n thumbSize: 150\r\n };\r\n this.graphChosenClicked = this.graphChosenClicked.bind(this);\r\n this.graphSelectionChanged = this.graphSelectionChanged.bind(this);\r\n }\r\n\r\n async getGraphImageData(graphInfo) {\r\n const data = await Promise.all(graphInfo\r\n .map(async gi => ({\r\n coords: gi.coords,\r\n dataUrl: await getImageAsDataUrl(this.indexToUrl(gi.number - 1))\r\n }))\r\n );\r\n return data;\r\n }\r\n async graphChosenClicked(ev) {\r\n const graphData = await this.getGraphImageData(this.state.selectedGraphInfo);\r\n\r\n const { raiseGraphChosen } = this.props;\r\n raiseGraphChosen({\r\n message: 'Graph chosen',\r\n graphData\r\n });\r\n this.setState({ selectedGraphInfo: [] });\r\n }\r\n graphSelectionChanged(ev) {\r\n const value = +ev.target.value;\r\n\r\n this.setState((state, props) => {\r\n const { thumbSize } = this.state;\r\n return {\r\n selectedGraphInfo: value === 0\r\n ? []\r\n : (\r\n state.selectedGraphInfo.find(item => item.number === value)\r\n ? state.selectedGraphInfo.filter(item => item.number !== value)\r\n : [...state.selectedGraphInfo, {\r\n number: value,\r\n coords: {\r\n x: 0,\r\n y: (value - 1) * thumbSize,\r\n w: thumbSize,\r\n h: thumbSize\r\n }\r\n }]\r\n )\r\n };\r\n });\r\n }\r\n indexToUrl(n) {\r\n return `http://localhost:5000/${graphImageNames[n]}`;\r\n }\r\n render() {\r\n const { selectedGraphInfo, thumbSize } = this.state;\r\n const selectedCount = selectedGraphInfo.length;\r\n\r\n return (\r\n
\r\n \r\n {graphImageNames.map((name, i) => ({\r\n name,\r\n selected: selectedGraphInfo.find(item => item.number === i + 1),\r\n url: this.indexToUrl(i),\r\n number: i + 1,\r\n nextSelected: selectedGraphInfo.find(item => item.number === i + 2)\r\n })).map(ob =>\r\n \r\n )}\r\n \r\n\r\n {selectedCount > 0 &&\r\n \r\n }\r\n
\r\n )\r\n }\r\n}","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport classNames from \"classnames\";\r\nimport uuid from \"uuid/v4\";\r\nimport ExtraPropTypes from \"react-extra-prop-types\";\r\nimport Delete from \"@material-ui/icons/DeleteOutline\";\r\n\r\nimport {\r\n px,\r\n svgNs,\r\n svgMirrorTitles\r\n} from \"../../Utils\";\r\nimport \"./style.scss\";\r\n\r\nclass SelectionRectangles extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n const { namespace } = props;\r\n\r\n this.state = {\r\n // data\r\n selections: {\r\n [namespace]: [],\r\n // namespace2: [\r\n // {\r\n // id: 'a-guid',\r\n // view: {\r\n // x: 226,\r\n // y: 56,\r\n // width: 311,\r\n // height: 214,\r\n // }\r\n // }\r\n // ]\r\n },\r\n\r\n // used to modify data\r\n currentSelectionId: null, // selection being added or handle-resized\r\n hoveredSelectionId: null,\r\n activeHandleKey: null,\r\n isWithinSelection: false,\r\n\r\n mouseDown: false,\r\n mouseDownAt: null,\r\n mouseNowAt: null,\r\n mouseWasAt: null,\r\n mouseUpAt: null\r\n };\r\n\r\n this._ourRef = React.createRef();\r\n\r\n this._bindHandlers();\r\n }\r\n\r\n _bindHandlers() {\r\n this.renderSelection = this.renderSelection.bind(this);\r\n this._handleMouseMove = this._handleMouseMove.bind(this);\r\n this._handleMouseDown = this._handleMouseDown.bind(this);\r\n this._handleMouseUp = this._handleMouseUp.bind(this);\r\n this._handleMouseUpDoc = this._handleMouseUpDoc.bind(this);\r\n this._handleMouseOver = this._handleMouseOver.bind(this);\r\n this._handleMouseOut = this._handleMouseOut.bind(this);\r\n this.deleteSelectionClicked = this.deleteSelectionClicked.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n this._offsetParent = this._ourRef.current.offsetParent;\r\n //console.log(`pageIndex: ${this.props.data.pageIndex} - this._offsetParent: `, this._offsetParent);\r\n this._offsetParent.addEventListener(\"mousemove\", this._handleMouseMove);\r\n this._offsetParent.addEventListener(\"mousedown\", this._handleMouseDown);\r\n this._offsetParent.addEventListener(\"mouseup\", this._handleMouseUp);\r\n document.addEventListener(\"mouseup\", this._handleMouseUpDoc);\r\n this._offsetParent.addEventListener(\"mouseover\", this._handleMouseOver);\r\n this._offsetParent.addEventListener(\"mouseout\", this._handleMouseOut);\r\n\r\n this.mirrorSvgTitles();\r\n }\r\n\r\n mirrorSvgTitles() {\r\n svgMirrorTitles(this._ourRef.current.getElementsByTagNameNS(svgNs, 'svg'));\r\n }\r\n\r\n getSelectionIdString(selections) {\r\n return JSON.stringify((selections ? selections.map(s => s.id) : []).sort(), null, 2);\r\n }\r\n\r\n shouldComponentUpdate(nextProps, nextState) {\r\n const { state } = this;\r\n\r\n return state.selections !== nextState.selections ||\r\n this.props.namespace !== nextProps.namespace ||\r\n this.props.applyReadOnly !== nextProps.applyReadOnly;\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n if (prevState.selections !== this.state.selections) {\r\n this.mirrorSvgTitles();\r\n }\r\n }\r\n componentWillUnmount() {\r\n this._offsetParent.removeEventListener(\"mousemove\", this._handleMouseMove);\r\n this._offsetParent.removeEventListener(\"mousedown\", this._handleMouseDown);\r\n this._offsetParent.removeEventListener(\"mouseup\", this._handleMouseUp);\r\n document.removeEventListener(\"mouseup\", this._handleMouseUpDoc);\r\n this._offsetParent.removeEventListener(\"mouseover\", this._handleMouseOver);\r\n this._offsetParent.removeEventListener(\"mouseout\", this._handleMouseOut);\r\n }\r\n\r\n addSelection({ x, y, width, height }) {\r\n const id = uuid();\r\n this.setState((state, props) => {\r\n const { namespace } = props;\r\n return {\r\n selections: {\r\n ...state.selections,\r\n [namespace]: [\r\n ...(state.selections[namespace] || []),\r\n {\r\n id: id,\r\n view: {\r\n x,\r\n y,\r\n width,\r\n height\r\n }\r\n }\r\n ]\r\n },\r\n currentSelectionId: id,\r\n creating: true\r\n };\r\n });\r\n }\r\n updateSelection({ selectionId, x, y, width, height, editing }) {\r\n this.setState((state, props) => {\r\n const { namespace } = props;\r\n return {\r\n selections: {\r\n ...state.selections,\r\n [namespace]: state.selections[namespace].map(s =>\r\n s.id !== selectionId\r\n ? s\r\n : {\r\n ...s,\r\n view: {\r\n x,\r\n y,\r\n width,\r\n height\r\n },\r\n editing\r\n }\r\n )\r\n }\r\n };\r\n });\r\n }\r\n _handleMouseDown(ev) {\r\n const activeHandleKey = ev.target.classList.contains(this._selectionHandleClass)\r\n ? ev.target.getAttribute(\"data-handle-info-key\")\r\n : null;\r\n\r\n const hoveredSelection =\r\n ev.target.classList.contains(this._selectionRectangleClass) &&\r\n ev.target.classList.contains(this._hovered)\r\n ? ev.target\r\n : null;\r\n const hoveredSelectionId = hoveredSelection\r\n ? hoveredSelection.getAttribute(\"data-id\")\r\n : null;\r\n const isWithinSelection = !!ev.target.closest(\r\n `.${this._selectionRectangleClass}`\r\n );\r\n\r\n const { x, y } = this.getMouseCoords(ev);\r\n // console.log(`pageIndex: ${this.props.data.pageIndex} - mouseDown ${x}, ${y}`);\r\n this.setState(\r\n (state, props) => {\r\n const currentSelectionId = activeHandleKey\r\n ? ev.target\r\n .closest(`.${this._selectionRectangleClass}`)\r\n .getAttribute(\"data-id\")\r\n : state.currentSelectionId;\r\n\r\n return {\r\n currentSelectionId,\r\n hoveredSelectionId,\r\n activeHandleKey,\r\n isWithinSelection,\r\n\r\n mouseDown: true,\r\n mouseDownAt: { x, y },\r\n mouseUpAt: null\r\n };\r\n },\r\n () => {\r\n if (!isWithinSelection) {\r\n this.addSelection({\r\n x,\r\n y,\r\n width: 0, //this._minimumSize.width,\r\n height: 0 //this._minimumSize.height\r\n });\r\n }\r\n }\r\n );\r\n }\r\n _getHandleResizeDeltas(hi, mdx, mdy) {\r\n const dx = mdx * (hi.dx || 0);\r\n const dy = mdy * (hi.dy || 0);\r\n const dw = mdx * (hi.dw || 0);\r\n const dh = mdy * (hi.dh || 0);\r\n\r\n return { dx, dy, dw, dh };\r\n }\r\n\r\n _handleMouseMove(ev) {\r\n ev.preventDefault();\r\n\r\n const { x, y } = this.getMouseCoords(ev);\r\n\r\n const { offsetWidth, offsetHeight } = this._offsetParent;\r\n // console.log(`offsetWidth: ${offsetWidth} - offsetHeight: ${offsetHeight}`);\r\n\r\n this.setState((state, props) => ({\r\n mouseWasAt: state.mouseNowAt ? state.mouseNowAt : { x, y },\r\n mouseNowAt: { x, y }\r\n }), () => {\r\n const { namespace } = this.props;\r\n const {\r\n currentSelectionId,\r\n hoveredSelectionId,\r\n activeHandleKey,\r\n mouseDownAt,\r\n\r\n mouseNowAt,\r\n mouseWasAt,\r\n selections\r\n } = this.state;\r\n\r\n const nss = (selections[namespace] || []);\r\n\r\n let mdx = mouseNowAt.x - mouseWasAt.x;\r\n let mdy = mouseNowAt.y - mouseWasAt.y;\r\n const hhs = this._handleSize / 2;\r\n\r\n if (hoveredSelectionId) {\r\n const hoveredSelection = nss.find(s => s.id === hoveredSelectionId);\r\n\r\n if (hoveredSelection.view.x - hhs + mdx < 0) {\r\n mdx = -hoveredSelection.view.x + hhs;\r\n }\r\n if (hoveredSelection.view.x + hoveredSelection.view.width + hhs + mdx >= offsetWidth) {\r\n mdx = offsetWidth - 1 - hoveredSelection.view.x - hoveredSelection.view.width - hhs;\r\n }\r\n if (hoveredSelection.view.y - hhs + mdy < 0) {\r\n mdy = -hoveredSelection.view.y + hhs;\r\n }\r\n if (hoveredSelection.view.y + hoveredSelection.view.height + hhs + mdy >= offsetHeight) {\r\n mdy = offsetHeight - 1 - hoveredSelection.view.y - hoveredSelection.view.height - hhs;\r\n }\r\n this.updateSelection({\r\n selectionId: hoveredSelectionId,\r\n x: hoveredSelection.view.x + mdx,\r\n y: hoveredSelection.view.y + mdy,\r\n width: hoveredSelection.view.width,\r\n height: hoveredSelection.view.height,\r\n editing: true\r\n });\r\n }\r\n else if (activeHandleKey) {\r\n const currentSelection = nss.find(s => s.id === currentSelectionId);\r\n const hi = this._handleInfo[activeHandleKey];\r\n\r\n let d = this._getHandleResizeDeltas(hi, mdx, mdy);\r\n\r\n if (d.dx || d.dy || d.dw || d.dh) {\r\n let newWidth = currentSelection.view.width + d.dw;\r\n let newHeight = currentSelection.view.height + d.dh;\r\n\r\n if (\r\n newWidth < this._minimumSize.width ||\r\n newHeight < this._minimumSize.height ||\r\n (currentSelection.view.x + d.dx) < 0 ||\r\n (currentSelection.view.y + d.dy) < 0 ||\r\n (currentSelection.view.x + newWidth) >= offsetWidth ||\r\n (currentSelection.view.y + newHeight) >= offsetHeight\r\n ) {\r\n if (newWidth < this._minimumSize.width) {\r\n mdx = (this._minimumSize.width - currentSelection.view.width) * (hi.dw || 0);\r\n }\r\n if (newHeight < this._minimumSize.height) {\r\n mdy = (this._minimumSize.height - currentSelection.view.height) * (hi.dh || 0);\r\n }\r\n if ((currentSelection.view.x - hhs + d.dx) < 0) {\r\n mdx = -currentSelection.view.x + hhs;\r\n }\r\n if ((currentSelection.view.y - hhs + d.dy) < 0) {\r\n mdy = -currentSelection.view.y + hhs;\r\n }\r\n if ((currentSelection.view.x + newWidth + hhs) >= offsetWidth) {\r\n mdx = offsetWidth - 1 - currentSelection.view.x - currentSelection.view.width - hhs;\r\n }\r\n if ((currentSelection.view.y + newHeight + hhs) >= offsetHeight) {\r\n mdy = offsetHeight - 1 - currentSelection.view.y - currentSelection.view.height - hhs;\r\n }\r\n d = this._getHandleResizeDeltas(hi, mdx, mdy);\r\n newWidth = currentSelection.view.width + d.dw;\r\n newHeight = currentSelection.view.height + d.dh;\r\n }\r\n\r\n this.updateSelection({\r\n selectionId: currentSelectionId,\r\n x: currentSelection.view.x + d.dx,\r\n y: currentSelection.view.y + d.dy,\r\n width: newWidth,\r\n height: newHeight,\r\n editing: true\r\n });\r\n }\r\n }\r\n else if (currentSelectionId) {\r\n const x1 = Math.min(mouseDownAt.x, mouseNowAt.x);\r\n const x2 = Math.max(mouseDownAt.x, mouseNowAt.x);\r\n const y1 = Math.min(mouseDownAt.y, mouseNowAt.y);\r\n const y2 = Math.max(mouseDownAt.y, mouseNowAt.y);\r\n\r\n const width = Math.max(x2 - x1, 0);//this._minimumSize.width);\r\n const height = Math.max(y2 - y1, 0);//this._minimumSize.height);\r\n\r\n this.updateSelection({\r\n selectionId: currentSelectionId,\r\n x: x1,\r\n y: y1,\r\n width,\r\n height,\r\n editing: true\r\n });\r\n }\r\n });\r\n }\r\n\r\n getMouseCoords(ev) {\r\n const rect = this._ourRef.current.getBoundingClientRect();\r\n return { x: ev.clientX - rect.left, y: ev.clientY - rect.top };\r\n }\r\n\r\n notifySelectionChanged({ id, deletion } = {}) {\r\n const { selectionChanged, namespace } = this.props;\r\n const { selections } = this.state;\r\n const nss = (selections[namespace] || []);\r\n\r\n if (selectionChanged) {\r\n const { currentSelectionId, hoveredSelectionId } = this.state;\r\n const selId = currentSelectionId || hoveredSelectionId || id;\r\n const selection = nss.find(s => s.id === selId);\r\n if (selection) {\r\n selectionChanged({\r\n data: selection.data,\r\n id: selection.id || selId,\r\n namespace,\r\n selection: deletion ? null : selection\r\n });\r\n }\r\n }\r\n }\r\n\r\n _doFinishOperation(ev) {\r\n const { x, y } = this.getMouseCoords(ev);\r\n // console.log(`pageIndex: ${this.props.data.pageIndex} - _doFinishOperation - setting mouseDown: false`);\r\n this.setState({\r\n mouseDown: false,\r\n mouseUpAt: { x, y }\r\n }, () => {\r\n this.notifySelectionChanged();\r\n\r\n this.setState((state, props) => {\r\n const { namespace } = props;\r\n return {\r\n currentSelectionId: null,\r\n hoveredSelectionId: null,\r\n activeHandleKey: null,\r\n isWithinSelection: false,\r\n creating: false,\r\n selections: {\r\n ...state.selections,\r\n [namespace]: (state.selections[namespace] || []).map(s => ({ ...s, editing: false }))\r\n }\r\n };\r\n });\r\n }\r\n );\r\n }\r\n _handleMouseUp(ev) {\r\n ev.preventDefault();\r\n const { mouseDown } = this.state;\r\n if (!mouseDown) {\r\n return;\r\n }\r\n\r\n const { x, y } = this.getMouseCoords(ev);\r\n // console.log(`pageIndex: ${this.props.data.pageIndex} - mouseUp: ${x}, ${y}`);\r\n\r\n const {\r\n currentSelectionId,\r\n creating,\r\n mouseDownAt,\r\n\r\n mouseNowAt\r\n } = this.state;\r\n\r\n const { offsetWidth, offsetHeight } = this._offsetParent;\r\n\r\n if (creating) {\r\n let x1 = Math.min(mouseDownAt.x, mouseNowAt.x);\r\n let y1 = Math.min(mouseDownAt.y, mouseNowAt.y);\r\n\r\n const x2 = Math.max(mouseDownAt.x, mouseNowAt.x);\r\n const y2 = Math.max(mouseDownAt.y, mouseNowAt.y);\r\n\r\n const width = Math.max(x2 - x1, this._minimumSize.width);\r\n const height = Math.max(y2 - y1, this._minimumSize.height);\r\n\r\n if (x1 + width >= offsetWidth) {\r\n x1 = offsetWidth - width - 1;\r\n }\r\n if (y1 + height >= offsetHeight) {\r\n y1 = offsetHeight - height - 1;\r\n }\r\n\r\n this.updateSelection({\r\n selectionId: currentSelectionId,\r\n x: x1,\r\n y: y1,\r\n width,\r\n height,\r\n editing: true\r\n });\r\n }\r\n\r\n // if (!isWithinSelection) {\r\n this._doFinishOperation(ev);\r\n // }\r\n }\r\n\r\n _handleMouseUpDoc(ev) {\r\n ev.preventDefault();\r\n\r\n const { mouseDown } = this.state;\r\n const { scrollTop, scrollLeft, scrollWidth, scrollHeight } = this._offsetParent;\r\n\r\n const { x, y } = this.getMouseCoords(ev);\r\n\r\n if (mouseDown) {\r\n // console.log(`has mouse: pageIndex: ${this.props.data.pageIndex} - mouseUpDoc: ${x}, ${y}`);\r\n this._handleMouseUp(ev);\r\n }\r\n // else {\r\n // console.log(`DOES NOT have mouse: pageIndex: ${this.props.data.pageIndex} - mouseUpDoc: ${x}, ${y}`);\r\n // }\r\n }\r\n\r\n _selectionRectangleClass = \"selection-rectangle\";\r\n _selectionHandleClass = \"selection-handle\";\r\n _externalChildNodesClass = \"external-child-nodes\";\r\n _hovered = \"hovered\";\r\n _readOnly = \"read-only\";\r\n\r\n _minimumSize = { width: 250, height: 100 };\r\n _handleSize = 9;\r\n _borderSize = 3;\r\n\r\n mouseOverOutCounter = 1;\r\n\r\n isReadOnly(id) {\r\n return this.props.applyReadOnly && this.props.readOnlyIds.includes(id);\r\n }\r\n _handleMouseOver(ev) {\r\n const selRect = ev.target.closest(`.${this._selectionRectangleClass}`);\r\n if (selRect) {\r\n const id = selRect.getAttribute(\"data-id\");\r\n if (!this.isReadOnly(id)) {\r\n this.hoverSelection(id, () => { });\r\n }\r\n }\r\n }\r\n\r\n _handleMouseOut(ev) {\r\n const selRect = ev.target.closest(`.${this._selectionRectangleClass}`);\r\n if (selRect) {\r\n const id = selRect.getAttribute(\"data-id\");\r\n this.unhoverSelection(id, () => { });\r\n }\r\n // if (\r\n // ev.target === this._offsetParent &&\r\n // (!ev.toElement || !ev.toElement.classList.contains(\"selection-rectangle\"))\r\n // ) {\r\n // this._doFinishOperation(ev);\r\n // }\r\n }\r\n\r\n deleteSelectionClicked(ev) {\r\n const selRect = ev.target.closest(`.${this._selectionRectangleClass}`);\r\n if (selRect) {\r\n const id = selRect.getAttribute(\"data-id\");\r\n if (!this.isReadOnly(id)) {\r\n this.notifySelectionChanged({ id, deletion: true });\r\n this.deleteSelection(id, () => { });\r\n }\r\n }\r\n }\r\n\r\n _setHovered(id, value, then) {\r\n this.setState(\r\n (state, props) => {\r\n const { namespace } = props;\r\n return {\r\n selections: {\r\n ...state.selections,\r\n [namespace]: (state.selections[namespace] || []).map(s =>\r\n s.id !== id\r\n ? s\r\n : {\r\n ...s,\r\n [this._hovered]: value\r\n }\r\n )\r\n }\r\n };\r\n },\r\n then\r\n );\r\n }\r\n hoverSelection(id, then) {\r\n this._setHovered(id, true, then);\r\n }\r\n\r\n unhoverSelection(id, then) {\r\n this._setHovered(id, false, then);\r\n }\r\n\r\n deleteSelection(id, then) {\r\n this.setState((state, props) => {\r\n const { namespace } = props;\r\n return {\r\n selections: {\r\n ...state.selections,\r\n [namespace]: (state.selections[namespace] || []).filter(s => s.id !== id)\r\n }\r\n };\r\n });\r\n }\r\n\r\n _handleInfo = {\r\n nw: {\r\n class: \"top-left\",\r\n // style: {\r\n // left: `calc(0% - (${px(this._borderSize)} + ${px(this._handleSize)}) / 2)`,\r\n // top: `calc(0% - (${px(this._borderSize)} + ${px(this._handleSize)}) / 2)` \r\n // },\r\n dx: +1,\r\n dy: +1,\r\n dw: -1,\r\n dh: -1\r\n },\r\n n: {\r\n class: \"top-center\",\r\n // style: {\r\n // top: `calc(0% - (${px(this._borderSize)} + ${px(this._handleSize)}) / 2)`\r\n // },\r\n dy: +1,\r\n dh: -1\r\n },\r\n ne: {\r\n class: \"top-right\",\r\n // style: {\r\n // top: `calc(0% - (${px(this._borderSize)} + ${px(this._handleSize)}) / 2)`\r\n // },\r\n dy: +1,\r\n dw: +1,\r\n dh: -1\r\n },\r\n e: {\r\n class: \"right-center\",\r\n // style: {\r\n\r\n // },\r\n dw: +1\r\n },\r\n se: {\r\n class: \"bottom-right\",\r\n // style: {\r\n\r\n // },\r\n dw: +1,\r\n dh: +1\r\n },\r\n s: {\r\n class: \"bottom-center\",\r\n // style: {\r\n\r\n // },\r\n dh: +1\r\n },\r\n sw: {\r\n class: \"bottom-left\",\r\n // style: {\r\n // left: `calc(0% - (${px(this._borderSize)} + ${px(this._handleSize)}) / 2)`\r\n // },\r\n dx: +1,\r\n dw: -1,\r\n dh: +1\r\n },\r\n w: {\r\n class: \"left-center\",\r\n // style: {\r\n // left: `calc(0% - (${px(this._borderSize)} + ${px(this._handleSize)}) / 2)`\r\n // },\r\n dx: +1,\r\n dw: -1\r\n }\r\n };\r\n\r\n renderSelection(selection, selectionIndex) {\r\n const { x, y, width, height } = selection.view;\r\n const {\r\n getSelectionClass,\r\n getHandleClass,\r\n data,\r\n renderSelectionChildNodes\r\n } = this.props;\r\n const { creating } = this.state;\r\n\r\n const additionalClasses = classNames(\r\n getSelectionClass ? getSelectionClass({ data, selection }) : \"\",\r\n {\r\n creating: creating,\r\n editing: selection.editing\r\n }\r\n );\r\n\r\n const additionalHandleClasses = getHandleClass\r\n ? getHandleClass({ data, selection })\r\n : \"\";\r\n\r\n const { mouseDown } = this.state;\r\n return (\r\n \r\n {Object.entries(this._handleInfo).map(([k, hi]) => (\r\n \r\n ))}\r\n \r\n {renderSelectionChildNodes &&\r\n renderSelectionChildNodes({\r\n data,\r\n selection,\r\n selectionIndex,\r\n mouseDown\r\n })}\r\n
\r\n );\r\n }\r\n\r\n render() {\r\n const { namespace } = this.props;\r\n const { selections } = this.state;\r\n const nss = selections[namespace] || [];\r\n // const nss = await this.ensureNamespaceSelections();\r\n\r\n return (\r\n
\r\n {nss.map(this.renderSelection)}\r\n
\r\n );\r\n }\r\n}\r\n\r\nSelectionRectangles.propTypes = {\r\n // an opaque piece of data provided by the parent, to be returned within event-handlers\r\n data: PropTypes.any,\r\n\r\n // an opaque string which namespaces the selections into a two-level hiearchy by namespace\r\n namespace: PropTypes.string,\r\n\r\n // a function ({ data, selection }) which provides the css class for the selection rectangle dependent upon its inputs \r\n getSelectionClass: PropTypes.func,\r\n\r\n // a function ({ data, selection }) which provides the css class for the selection rectangle handles dependent upon its inputs \r\n getHandleClass: PropTypes.func,\r\n\r\n // a function ({ data, selection, selectionIndex, mouseDown }) which renders some component sub-tree within the selection rectangle dependent upon its inputs\r\n renderSelectionChildNodes: PropTypes.func,\r\n\r\n // a function ({ id, deletion }) which notifies that a selection has changed\r\n selectionChanged: PropTypes.func,\r\n\r\n // a list of ids of selections which should be considered read-only\r\n readOnlyIds: PropTypes.arrayOf(ExtraPropTypes.uuid),\r\n\r\n // whether to enforce the read-only behaviour for those selections specified by 'readOnlyIds'\r\n applyReadOnly: PropTypes.bool,\r\n};\r\n\r\nSelectionRectangles.defaultProps = {\r\n readOnlyIds: [],\r\n applyReadOnly: true,\r\n namespace: 'defaultNamespace'\r\n};\r\n\r\nexport default SelectionRectangles;\r\n","import React from \"react\";\r\nimport pdfjsLib from \"pdfjs-dist\";\r\nimport classNames from \"classnames\";\r\nimport Draggable from \"react-draggable\";\r\nimport Lock from \"@material-ui/icons/Lock\";\r\nimport LockOpen from \"@material-ui/icons/LockOpen\";\r\nimport DragHandle from \"@material-ui/icons/DragHandle\";\r\nimport ZoomControls from '../../ZoomControls';\r\n\r\nimport SelectionRectangles from \"../../SelectionRectangles\";\r\n\r\nimport {\r\n persistSettings,\r\n recoverSettings,\r\n svgNs,\r\n svgMirrorTitles,\r\n clone,\r\n removeProps,\r\n getImageDataAsDataUrl,\r\n doZoomFloatValueSteps\r\n} from \"../../../Utils\";\r\n\r\nimport \"./style.scss\";\r\n\r\npdfjsLib.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjsLib.version}/pdf.worker.js`;\r\n\r\nexport default class GraphChooserMainUi extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n pageCount: -1,\r\n pageCanvasRefs: null,\r\n curPage: 1,\r\n dpr: window.devicePixelRatio,\r\n pageInfo: [],\r\n pdf: null,\r\n pdfUrl: null,\r\n selectOutcomes: null,\r\n\r\n settings: {\r\n settingsVersion: 2,\r\n lockSelectedGraphs: true,\r\n pdfScale: { value: 1 }\r\n },\r\n\r\n // maps graph id to outcome id\r\n graphInfo: {\r\n // ['graph-guid']: {\r\n // outcomeId: null,\r\n // pdfUrl: null,\r\n // pageIndex: 0,\r\n // readOnly: false,\r\n // view: { x, y, width, height }\r\n // }\r\n }\r\n };\r\n\r\n this._docWrapper = React.createRef();\r\n this._bindHandlers();\r\n this._notSelectedId = \"not-selected\";\r\n this.setStateAsync = updater => new Promise(resolve => this.setState(updater, resolve));\r\n this._ourRef = React.createRef();\r\n }\r\n\r\n _bindHandlers() {\r\n this.persistSettings = this.persistSettings.bind(this);\r\n this.recoverSettings = this.recoverSettings.bind(this);\r\n this.graphOutcomeSelectionChanged = this.graphOutcomeSelectionChanged.bind(this);\r\n this.toggleLockSelectedGraphs = this.toggleLockSelectedGraphs.bind(this);\r\n this.useSelectedGraphs = this.useSelectedGraphs.bind(this);\r\n this.renderSelectionChildNodes = this.renderSelectionChildNodes.bind(this);\r\n this.getSelectionClass = this.getSelectionClass.bind(this);\r\n this.getHandleClass = this.getHandleClass.bind(this);\r\n this.graphSelectionChanged = this.graphSelectionChanged.bind(this);\r\n this.pdfScaleUp = this.pdfScaleUp.bind(this);\r\n this.pdfScaleDown = this.pdfScaleDown.bind(this);\r\n }\r\n\r\n _settingsKey = this.props.settingsKey || 'graphChooserSettings';\r\n\r\n persistSettings() {\r\n persistSettings({ component: this, localStorage: this.props.localStorage, settingsKey: this._settingsKey });\r\n }\r\n recoverSettings() {\r\n recoverSettings({ component: this, localStorage: this.props.localStorage, settingsKey: this._settingsKey });\r\n }\r\n\r\n _scaleSteps = [{\r\n from: 0,\r\n to: 0.25,\r\n increment: 0\r\n }, {\r\n from: 0.25,\r\n to: 1,\r\n increment: 0.25\r\n }, {\r\n from: 1,\r\n to: 4,\r\n increment: 0.5\r\n }, {\r\n from: 4,\r\n to: 10,\r\n increment: 1\r\n }];\r\n\r\n _doPdfScaleUpDown(down) {\r\n this.setState((state, props) => {\r\n const { pdfScale } = state.settings;\r\n return {\r\n settings: {\r\n ...state.settings,\r\n pdfScale: {\r\n value: doZoomFloatValueSteps(\r\n down,\r\n pdfScale.value,\r\n this._scaleSteps\r\n )\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n pdfScaleUp() {\r\n this._doPdfScaleUpDown(false);\r\n }\r\n pdfScaleDown() {\r\n this._doPdfScaleUpDown(true);\r\n }\r\n\r\n\r\n allPagesLoaded() {\r\n this.setState(\r\n (state, props) => {\r\n return {\r\n pageInfo: state.pageInfo.map(pi => ({\r\n ...pi\r\n }))\r\n };\r\n },\r\n () => {\r\n }\r\n );\r\n }\r\n graphOutcomeSelectionChanged(ev) {\r\n const select = ev.target;\r\n const selectionRect = select.closest(\".graph-selection-rect\");\r\n\r\n const graphId = selectionRect.getAttribute(\"data-id\");\r\n const pageIndex = +selectionRect\r\n .closest(\".pdf-page-wrapper\")\r\n .getAttribute(\"data-page-index\");\r\n\r\n this.setState((state, props) => {\r\n const { graphInfo } = state;\r\n const newOutcomeId = select.value;\r\n\r\n return {\r\n graphInfo: {\r\n ...graphInfo,\r\n [graphId]: {\r\n ...graphInfo[graphId],\r\n outcomeId: newOutcomeId,\r\n pageIndex,\r\n readOnly: newOutcomeId && newOutcomeId !== this._notSelectedId\r\n }\r\n }\r\n };\r\n });\r\n }\r\n\r\n toggleLockSelectedGraphs(ev) {\r\n this.setState((state, props) => {\r\n return {\r\n settings: {\r\n ...state.settings,\r\n lockSelectedGraphs: !state.settings.lockSelectedGraphs\r\n }\r\n };\r\n });\r\n }\r\n\r\n getSelectedGraphCount() {\r\n const { graphInfo, pdfUrl } = this.state;\r\n const count = Object.entries(graphInfo)\r\n .filter(([_, v]) =>\r\n v.pdfUrl === pdfUrl\r\n && v.outcomeId\r\n && v.outcomeId !== this._notSelectedId\r\n ).length;\r\n return count;\r\n }\r\n useSelectedGraphs(ev) {\r\n const { raiseGraphChosen } = this.props;\r\n const { graphInfo, pageCanvasRefs, pdfUrl } = this.state;\r\n\r\n const graphData = Object.entries(graphInfo)\r\n .filter(([k, v]) =>\r\n v.pdfUrl === pdfUrl\r\n && v.outcomeId\r\n && v.outcomeId !== this._notSelectedId\r\n )\r\n .map(([k, v]) => {\r\n const { x, y, width, height } = v.view;\r\n return {\r\n outcomeId: v.outcomeId,\r\n pageIndex: v.pageIndex,\r\n coords: { x, y, w: width, h: height },\r\n dataUrl: getImageDataAsDataUrl(pageCanvasRefs[v.pageIndex].current, x, y, width, height)\r\n };\r\n });\r\n\r\n raiseGraphChosen({\r\n message: \"Graph chosen\",\r\n graphData\r\n });\r\n }\r\n\r\n renderSelectionChildNodes({ data, selection, selectionIndex, mouseDown }) {\r\n const { selectOutcomes, graphInfo } = this.state;\r\n const gi = graphInfo[selection.id];\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n {selectOutcomes.map(o => (\r\n \r\n ))}\r\n \r\n
\r\n \r\n \r\n );\r\n }\r\n\r\n getSelectionClass({ data, selection }) {\r\n const { graphInfo } = this.state;\r\n const info = graphInfo[selection.id];\r\n const curOutcomeId = info ? info.outcomeId : this._notSelectedId;\r\n\r\n const classStr = [\r\n !!curOutcomeId && curOutcomeId !== this._notSelectedId ? \"selected\" : \"\",\r\n \"graph-selection-rect\"\r\n ].join(\" \");\r\n\r\n return classStr;\r\n }\r\n\r\n getHandleClass({ data, selection }) {\r\n const { graphInfo } = this.state;\r\n const info = graphInfo[selection.id];\r\n const curOutcomeId = info ? info.outcomeId : this._notSelectedId;\r\n\r\n const classStr = [\r\n !!curOutcomeId && curOutcomeId !== this._notSelectedId ? \"selected\" : \"\",\r\n \"graph-selection-handle\"\r\n ].join(\" \");\r\n\r\n return classStr;\r\n }\r\n\r\n graphSelectionChanged({ data, id, namespace, selection }) {\r\n this.setState((state, props) => {\r\n const { graphInfo } = state;\r\n\r\n return {\r\n graphInfo: !!selection\r\n ? {\r\n ...graphInfo,\r\n [id]: {\r\n ...graphInfo[id],\r\n pdfUrl: namespace,\r\n view: clone(selection.view)\r\n }\r\n }\r\n : removeProps(graphInfo, id)\r\n };\r\n }, () => {\r\n // console.log('graphSelectionChanged - after set state: ', JSON.stringify(this.state.graphInfo, null, 2));\r\n });\r\n }\r\n\r\n async configure() {\r\n const config = JSON.parse(this.props.config);\r\n const { fileUrl, outcomes } = config;\r\n\r\n const selectOutcomes = outcomes\r\n ? [\r\n {\r\n id: this._notSelectedId,\r\n label: \"None\"\r\n },\r\n ...(outcomes ? outcomes : [])\r\n ]\r\n : outcomes;\r\n\r\n if (fileUrl) {\r\n const pdf = await this.loadPdf(fileUrl);\r\n\r\n const { numPages } = pdf;\r\n const pageIndices = [...Array(numPages)].map((_, i) => i);\r\n\r\n this.setState({\r\n pdf,\r\n pdfUrl: fileUrl,\r\n selectOutcomes,\r\n pageCount: numPages,\r\n pageCanvasRefs: pageIndices.map(_ => React.createRef()),\r\n pageInfo: pageIndices.map(_ => ({\r\n loaded: false\r\n }))\r\n });\r\n }\r\n }\r\n\r\n resetPageLoaded() {\r\n if (this.state.pageInfo) {\r\n this.setState((state, props) => ({\r\n pageInfo: state.pageInfo.map(pi => ({\r\n ...pi,\r\n loaded: false\r\n }))\r\n }));\r\n }\r\n }\r\n\r\n async loadPages() {\r\n this.resetPageLoaded();\r\n\r\n const { pageCanvasRefs, pdf, settings } = this.state;\r\n const { pdfScale } = settings;\r\n const scale = pdfScale.value;\r\n\r\n await Promise.all(\r\n pageCanvasRefs.map(async (pcr, pci) => {\r\n const page = await pdf.getPage(pci + 1);\r\n const viewport = page.getViewport({ scale: scale });\r\n\r\n const canvas = pcr.current;\r\n const canvasContext = canvas.getContext(\"2d\");\r\n canvas.height = viewport.height;\r\n canvas.width = viewport.width;\r\n\r\n await page.render({\r\n canvasContext,\r\n viewport\r\n }).promise;\r\n\r\n this.setState((state, props) => {\r\n return {\r\n pageInfo: state.pageInfo.map((pi, pii) =>\r\n pii !== pci\r\n ? pi\r\n : {\r\n ...pi,\r\n loaded: true,\r\n page\r\n }\r\n )\r\n };\r\n });\r\n })\r\n );\r\n }\r\n async loadPdf(fileUrl) {\r\n const pdf = await pdfjsLib.getDocument({\r\n url: fileUrl\r\n }).promise;\r\n\r\n return pdf;\r\n }\r\n\r\n mirrorSvgTitles() {\r\n svgMirrorTitles(this._ourRef.current.getElementsByTagNameNS(svgNs, 'svg'));\r\n }\r\n\r\n componentDidMount() {\r\n this.recoverSettings();\r\n\r\n window.addEventListener(\r\n \"beforeunload\",\r\n this.persistSettings\r\n );\r\n\r\n this.mirrorSvgTitles();\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n if (prevProps.config !== this.props.config) {\r\n this.configure();\r\n } else if (prevState.pageCanvasRefs !== this.state.pageCanvasRefs) {\r\n this.loadPages();\r\n } else if (prevState.settings.lockSelectedGraphs !== this.state.settings.lockSelectedGraphs) {\r\n this.mirrorSvgTitles();\r\n } else if (prevState.settings.pdfScale.value !== this.state.settings.pdfScale.value) {\r\n if (this.state.pageCanvasRefs) {\r\n this.loadPages();\r\n }\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener(\r\n \"beforeunload\",\r\n this.persistSettings\r\n );\r\n\r\n this.persistSettings();\r\n }\r\n\r\n\r\n render() {\r\n const {\r\n pageCount,\r\n pageCanvasRefs,\r\n pdf,\r\n pdfUrl,\r\n selectOutcomes,\r\n pageInfo,\r\n graphInfo,\r\n settings,\r\n } = this.state;\r\n\r\n const selectedCount = this.getSelectedGraphCount();\r\n const useSelectedGraphsLabel = [\r\n 'Use selected ',\r\n selectedCount !== 1 ? selectedCount + ' ' : '',\r\n 'graph',\r\n selectedCount !== 1 ? 's' : ''\r\n ].join('');\r\n\r\n const { lockSelectedGraphs, pdfScale } = settings;\r\n\r\n return (\r\n
\r\n
\r\n \r\n {pageInfo.map(({ loaded }, i) => (\r\n \r\n {i + 1}\r\n \r\n ))}\r\n \r\n {pdf && }\r\n {lockSelectedGraphs\r\n && }\r\n {!lockSelectedGraphs\r\n && }\r\n\r\n {selectedCount > 0\r\n && \r\n }\r\n
\r\n {pdf && selectOutcomes && (\r\n
\r\n {pageCount > 0 &&\r\n [...Array(pageCount).keys()].map(pageIndex => {\r\n const pageGraphInfos = Object.entries(graphInfo).filter(([k, v]) =>\r\n v.pageIndex === pageIndex\r\n );\r\n\r\n const readOnlyIds = pageGraphInfos\r\n .filter(([k, v]) => v.readOnly)\r\n .map(([k, v]) => k);\r\n\r\n return (\r\n \r\n {/* {\r\n pageGraphInfos.filter(([k, pgi]) =>\r\n pgi.outcomeId !== this._notSelectedId\r\n ).map(([k, pgi], index) => )\r\n } */}\r\n \r\n \r\n {pageIndex + 1}\r\n \r\n \r\n
\r\n );\r\n })}\r\n
\r\n )}\r\n \r\n );\r\n }\r\n}\r\n","import React from 'react';\r\n\r\nimport GraphChooserApiDriver from './ApiDriver';\r\nimport GraphChooserMainUi from './MainUi';\r\n\r\nexport default class GraphChooser extends React.Component {\r\n render() {\r\n const { apiDriver, ...moreProps } = this.props;\r\n\r\n return (\r\n
\r\n {apiDriver\r\n ? \r\n : \r\n }\r\n
\r\n )\r\n }\r\n}","import React from 'react';\r\nimport './style.scss';\r\n\r\nimport { isEmptyObject, px } from '../../../Utils';\r\n\r\nexport default class GraphDisplayerApiDriver extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.graphClicked = this.graphClicked.bind(this);\r\n }\r\n\r\n getConfig() {\r\n return JSON.parse(this.props.config);\r\n }\r\n graphClicked(ev) {\r\n const { raiseGraphClicked } = this.props;\r\n const { coords, dataUrl } = this.getConfig();\r\n raiseGraphClicked({\r\n message: 'Graph clicked',\r\n coords,\r\n dataUrl\r\n });\r\n }\r\n \r\n render() {\r\n const config = this.getConfig();\r\n const noConfig = isEmptyObject(config);\r\n const { width, height, coords, dataUrl } = config;\r\n\r\n const containerStyle = {\r\n };\r\n const imageStyle = {\r\n width: px(width),\r\n height: px(height),\r\n display: noConfig ? 'none' : 'block'\r\n }\r\n\r\n return (\r\n
\r\n \r\n ({coords.x}, {coords.y})\r\n ->\r\n ({coords.x + coords.w}, {coords.y + coords.h})\r\n
\r\n )\r\n }\r\n}","import React from 'react';\r\nimport './style.scss';\r\nimport { isEmptyObject, px } from '../../../Utils';\r\n\r\nexport default class GraphDisplayerMainUi extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.graphClicked = this.graphClicked.bind(this);\r\n }\r\n\r\n getConfig() {\r\n return JSON.parse(this.props.config);\r\n }\r\n graphClicked(ev) {\r\n const { raiseGraphClicked } = this.props;\r\n const { coords, dataUrl } = this.getConfig();\r\n raiseGraphClicked({\r\n message: 'Graph clicked',\r\n coords,\r\n dataUrl\r\n });\r\n }\r\n\r\n render() {\r\n const config = this.getConfig();\r\n const noConfig = isEmptyObject(config);\r\n const { width, height, dataUrl } = config;\r\n\r\n const containerStyle = {\r\n };\r\n const imageStyle = {\r\n width: px(width),\r\n height: px(height),\r\n display: noConfig ? 'none' : 'block'\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n}","import React from 'react';\r\n\r\nimport GraphDisplayerApiDriver from './ApiDriver';\r\nimport GraphDisplayerMainUi from './MainUi';\r\n\r\nexport default class GraphDisplayer extends React.Component {\r\n render() {\r\n const { apiDriver, ...moreProps } = this.props;\r\n\r\n return (\r\n
\r\n {apiDriver\r\n ? \r\n : \r\n }\r\n
\r\n )\r\n }\r\n}","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import { html, LitElement } from '@polymer/lit-element';\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport GraphChooser from './Components/GraphChooser';\r\nimport GraphDisplayer from './Components/GraphDisplayer';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\n/**\r\n * The LitElement class is an ultra-light wrapper for the W3C HTMLElement class.\r\n * It is published by the Polymer team, and provides helpers for templating, binding and lifecycle functions.\r\n * refer: https://github.com/Polymer/lit-element\r\n *\r\n * For info on 'slot' tag, refer to:\r\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot#Browser_compatibility\r\n * On browsers that do not natively support 'slot' elements, the webcomponentjs module will polyfill this.\r\n *\r\n * This approach means that W3C standards can be used in consuming apps to pull in component apps,\r\n * without any framework lockin. The aim is that shared webcomponents can use whichever framework\r\n * becomes popular over time, without consumers needing to know anything more than the webcomponent api.\r\n *\r\n */\r\n\r\n\r\nclass Graph2Data extends LitElement {\r\n static get properties() {\r\n return {\r\n config: { type: Object },\r\n apiDriver: { type: Boolean },\r\n devMode: { type: Boolean }\r\n };\r\n }\r\n constructor() {\r\n super();\r\n\r\n this.raisePointAdded = this.raisePointAdded.bind(this);\r\n this.raiseSeriesDeleted = this.raiseSeriesDeleted.bind(this);\r\n this.raiseCurrentSeriesChanged = this.raiseCurrentSeriesChanged.bind(this);\r\n this.raiseSeriesAdded = this.raiseSeriesAdded.bind(this);\r\n this.raiseSeriesLabelChanged = this.raiseSeriesLabelChanged.bind(this);\r\n this.raisePointDeleted = this.raisePointDeleted.bind(this);\r\n this.raiseExtractionComplete = this.raiseExtractionComplete.bind(this);\r\n }\r\n raisePointAdded(detail) {\r\n this.dispatchEvent(new CustomEvent(\"pointAdded\", {\r\n bubbles: true,\r\n cancelable: false,\r\n composed: true,\r\n detail\r\n }));\r\n }\r\n raiseSeriesDeleted(detail) {\r\n this.dispatchEvent(new CustomEvent(\"seriesDeleted\", {\r\n bubbles: true,\r\n cancelable: false,\r\n composed: true,\r\n detail\r\n }));\r\n }\r\n raiseCurrentSeriesChanged(detail) {\r\n this.dispatchEvent(new CustomEvent(\"currentSeriesChanged\", {\r\n bubbles: true,\r\n cancelable: false,\r\n composed: true,\r\n detail\r\n }));\r\n }\r\n raiseSeriesAdded(detail) {\r\n this.dispatchEvent(new CustomEvent(\"seriesAdded\", {\r\n bubbles: true,\r\n cancelable: false,\r\n composed: true,\r\n detail\r\n }));\r\n }\r\n raiseSeriesLabelChanged(detail) {\r\n this.dispatchEvent(new CustomEvent(\"seriesLabelChanged\", {\r\n bubbles: true,\r\n cancelable: false,\r\n composed: true,\r\n detail\r\n }));\r\n }\r\n raisePointDeleted(detail) {\r\n this.dispatchEvent(new CustomEvent(\"pointDeleted\", {\r\n bubbles: true,\r\n cancelable: false,\r\n composed: true,\r\n detail\r\n }));\r\n }\r\n raiseExtractionComplete(detail) {\r\n this.dispatchEvent(new CustomEvent(\"extractionComplete\", {\r\n bubbles: true,\r\n cancelable: false,\r\n composed: true,\r\n detail\r\n }));\r\n }\r\n render() {\r\n const config = this.getAttribute('config');\r\n const apiDriver = this.getAttribute('apiDriver') === 'true';\r\n const devMode = this.getAttribute('devMode') === 'true';\r\n\r\n ReactDOM.render(, this);\r\n return html`\r\n \r\n `;\r\n }\r\n\r\n // Use this instead if shadow dom is not wanted. Generally you do want shadow dom for encapsulation.\r\n // https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM\r\n\r\n /*\r\n public createRenderRoot(){ return this; }\r\n\r\n public connectedCallback() {\r\n ReactDOM.render(, this);\r\n }\r\n */\r\n}\r\n\r\nclass PdfGraphChooser extends LitElement {\r\n static get properties() {\r\n return {\r\n config: { type: Object },\r\n apiDriver: { type: Boolean }\r\n };\r\n }\r\n constructor() {\r\n super();\r\n\r\n this.raiseGraphChosen = this.raiseGraphChosen.bind(this);\r\n }\r\n raiseGraphChosen(detail) {\r\n this.dispatchEvent(new CustomEvent(\"graphChosen\", {\r\n bubbles: true,\r\n cancelable: false,\r\n composed: true,\r\n detail\r\n }));\r\n }\r\n render() {\r\n const config = this.getAttribute('config');\r\n const apiDriver = this.getAttribute('apiDriver') === 'true';\r\n\r\n ReactDOM.render(, this);\r\n return html`\r\n \r\n `;\r\n }\r\n\r\n // Use this instead if shadow dom is not wanted. Generally you do want shadow dom for encapsulation.\r\n // https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM\r\n\r\n /*\r\n public createRenderRoot(){ return this; }\r\n\r\n public connectedCallback() {\r\n ReactDOM.render(, this);\r\n }\r\n */\r\n}\r\nclass PdfGraphDisplayer extends LitElement {\r\n static get properties() {\r\n return {\r\n config: { type: Object },\r\n apiDriver: { type: Boolean }\r\n };\r\n }\r\n constructor() {\r\n super();\r\n\r\n this.raiseGraphClicked = this.raiseGraphClicked.bind(this);\r\n }\r\n raiseGraphClicked(detail) {\r\n this.dispatchEvent(new CustomEvent(\"graphClicked\", {\r\n bubbles: true,\r\n cancelable: false,\r\n composed: true,\r\n detail\r\n }));\r\n }\r\n render() {\r\n const config = this.getAttribute('config');\r\n const apiDriver = this.getAttribute('apiDriver') === 'true';\r\n\r\n ReactDOM.render(, this);\r\n return html`\r\n \r\n `;\r\n }\r\n\r\n // Use this instead if shadow dom is not wanted. Generally you do want shadow dom for encapsulation.\r\n // https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM\r\n\r\n /*\r\n public createRenderRoot(){ return this; }\r\n\r\n public connectedCallback() {\r\n ReactDOM.render(, this);\r\n }\r\n */\r\n}\r\n\r\n\r\ncustomElements.define('graph-2-data', Graph2Data);\r\ncustomElements.define('pdf-graph-chooser', PdfGraphChooser);\r\ncustomElements.define('pdf-graph-displayer', PdfGraphDisplayer);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: http://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 46;","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 49;"],"sourceRoot":""} \ No newline at end of file