{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/GraphControls.vue?f13d","webpack:///./src/components/About.vue?8170","webpack:///./src/components/Header.vue?f3d0","webpack:///./src/assets/img/github.svg","webpack:///./src/App.vue?512b","webpack:///./src/components/Graph.vue?ada7","webpack:///./src/components/Dialog.vue?e889","webpack:///./src/components/Toaster.vue?09b7","webpack:///./src/components/ContentTable.vue?9340","webpack:///./src/App.vue?ab7a","webpack:///./src/store/index.ts","webpack:///./src/components/Header.vue?9a83","webpack:///./src/tools/index.ts","webpack:///./src/graph/index.ts","webpack:///./src/graph/plotters/dotplot.ts","webpack:///./src/tools/math.ts","webpack:///./src/graph/list.ts","webpack:///./src/components/Dialog.vue?49b2","webpack:///./src/components/Dialog.vue","webpack:///./src/components/Dialog.vue?ed61","webpack:///./src/components/Header.vue","webpack:///./src/components/Header.vue?9bdd","webpack:///./src/components/ContentTable.vue?c35c","webpack:///./src/components/ContentTable.vue","webpack:///./src/components/ContentTable.vue?2e41","webpack:///./src/components/Graph.vue?cc7d","webpack:///./src/components/GraphControls.vue?a01b","webpack:///./src/components/GraphControls.vue","webpack:///./src/components/GraphControls.vue?08a1","webpack:///./src/components/Loader.vue?005c","webpack:///./src/components/Loader.vue","webpack:///./src/components/Loader.vue?9af2","webpack:///./src/components/Graph.vue","webpack:///./src/components/Graph.vue?bb87","webpack:///./src/components/ResizableGrid.vue?a153","webpack:///./src/components/ResizableGrid.vue","webpack:///./src/components/ResizableGrid.vue?1ec4","webpack:///./src/components/Toaster.vue?b29a","webpack:///./src/components/Toaster.vue","webpack:///./src/components/Toaster.vue?0986","webpack:///./src/components/About.vue?2d8a","webpack:///./src/storage.ts","webpack:///./src/components/About.vue","webpack:///./src/components/About.vue?0eb9","webpack:///./src/App.vue","webpack:///./src/App.vue?dfb6","webpack:///./src/main.ts","webpack:///./src/registerServiceWorker.ts","webpack:///./src/components/Loader.vue?d683","webpack:///./src/assets/img/logo-white.svg","webpack:///./src/components/ResizableGrid.vue?fecf"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_hoisted_1","class","render","_ctx","_cache","$props","$setup","$data","$options","_component_Header","_component_ContentTable","_component_Graph","_component_ResizableGrid","_component_Loader","_component_Toaster","_component_About","left","right","_","show","loading","message","state","cols","rows","selected","row","col","moveTo","toasts","graph","title","type","xAxis","yAxis","zAxis","size","scaleFactor","settings","values","bool","this","str","num","parseFloat","mutations","actions","_hoisted_2","src","alt","width","height","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_component_Dialog","placeholder","$event","lazy","toolbar","item","index","onMouseenter","action","expand","onMouseleave","closeAll","onClick","default","expanded","children","child","icon","graphData","graphType","graphs","open","pickURLDialog","onClose","buttons","importFromURL","importURL","importFromCSV","file","showLoader","lines","split","store","header","splitChar","getSplittingChar","line","parts","Array","fill","hideLoader","commas","match","semiColons","tabs","importFromFile","element","document","createElement","style","display","click","onchange","files","reader","FileReader","readAsText","onload","event","target","alert","content","importFromClipboard","navigator","clipboard","readText","text","console","error","dataToCSV","output","rowIndex","isEmptyRow","columnIndex","undefined","startDownloadBlob","fileName","url","URL","createObjectURL","href","download","body","appendChild","setTimeout","removeChild","revokeObjectURL","removeIndexY","removeIndexX","insertIndexX","insertIndexY","importCSVFromURL","a","response","isNumeric","test","toastID","duration","id","addDefaultSettings","definitions","def","min","dataFromIndexes","indexes","splitData","maxGroups","max","uniqueGroups","parseInt","groups","keys","groupSize","firstGroupMax","floatp","secondGroupMax","thirdGroupMax","group","numericMin","minValue","number","numericMax","maxValue","getColumnData","column","skipped","getColumnDataNumeric","sortFirstNumber","as","bs","regex","aMatch","toLowerCase","bMatch","aValue","bValue","isNaN","diff","firstSF","intf","axisMinMaxStep","range","rangeRound","steps","step","minTick","maxTick","scale","invScale","precision","toPrecision","toFixed","dataToPixel","minPx","maxPx","getPointColor","transparency","opacity","ctx","x","y","align","fillStyle","font","textAlign","fillText","x1","y1","x2","y2","beginPath","lineTo","stroke","box","rect","watermark","count","sort","b","median","Math","ceil","sum","reduce","mean","lowerQuartile","q","floor","upperQuartile","standardDeviation","_mean","squareDiffs","map","sqrt","minNoOutliers","lq","uq","maxNoOutliers","random","clamp","createDotPlot","canvas","xColumn","yColumn","zColumn","columnNames","xPoints","xSkipped","yPoints","ySkipped","zPoints","zSkipped","baseline","maxHeight","minX","maxX","minY","maxY","minZ","maxZ","graphMin","graphMax","graphStep","yGroups","zGroups","save","translate","rotate","PI","restore","blockWidth","renderGrid","reverse","groupMaxHeight","renderData","gridLineTop","strokeStyle","lineWidth","dataX","renderGridLines","points","sortIndex","createMap","getElementById","stripGraph","stackDots","pointSize","pointLabels","pointRadius","positions","xRel","counts","maxPoints","lastX","yHeight","pointColor","arc","area","shape","coords","onmouseenter","drawAdditonal","med","mea","minNO","maxNO","sd","minGraph","lqGraph","medGraph","uqGraph","maxGraph","minNOGraph","maxNOGraph","h","drawBoxPlot","textSize","informalCI","informalCILimits","halfWidth","minIn","maxIn","meanGraph","closePath","whisker","func","axisNames","closeDialog","$slots","$emit","props","__exports__","confirm","csvData","dataBlob","Blob","replaceAll","columnName","then","catch","other","components","Dialog","watch","select","editColumnIndex","onBlur","editColumn","onDblclick","colIndex","editRow","editRowIndex","editRowColumnIndex","displayedRows","lastScrollPoint","$nextTick","querySelector","focus","scrollIntoView","behavior","block","$el","onscroll","sh","scrollHeight","st","scrollTop","ht","offsetHeight","dMoveTo","scrollToRow","usemap","_component_GraphControls","resizeGraph","scaled","onResize","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","for","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","toggleControls","controls","contentData","setting","emits","graphWrapper","graphCanvas","graphImg","addEventListener","offsetWidth","renderGraph","getContext","clearRect","imageSmoothingEnabled","toDataURL","innerHTML","toBlob","GraphControls","Loader","handler","deep","onMousedown","startResize","dragging","CustomEvent","dispatchEvent","app","parent","leftChild","rightChild","handle","onmousemove","classList","add","pageX","clientX","leftPercent","offsetLeft","rightPercent","onmouseup","remove","toast","timeout","filter","createTimeouts","rel","hideAbout","hideNext","defaultValue","rawValue","localStorage","getItem","set","setItem","showAbout","storage","Header","ContentTable","Graph","ResizableGrid","Toaster","About","importExample","ready","log","registered","cached","updatefound","updated","offline","use","mount"],"mappings":"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","file":"js/app.8c01c427.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./GraphControls.vue?vue&type=style&index=0&id=795e60df&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./About.vue?vue&type=style&index=0&id=3b42e224&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Header.vue?vue&type=style&index=0&id=1ff6007a&scoped=true&lang=scss\"","module.exports = __webpack_public_path__ + \"img/github.08a7dee0.svg\";","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../node_modules/vue-loader-v16/dist/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./App.vue?vue&type=style&index=0&id=03b41e8f&lang=scss\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Graph.vue?vue&type=style&index=0&id=6aa23c7c&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Dialog.vue?vue&type=style&index=0&id=3879e6bf&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Toaster.vue?vue&type=style&index=0&id=3ef29b86&lang=scss&scoped=true\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ContentTable.vue?vue&type=style&index=0&id=da1df7d0&lang=scss&scoped=true\"","import { resolveComponent as _resolveComponent, createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"resize-area\" }, null, -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Header = _resolveComponent(\"Header\")!\n const _component_ContentTable = _resolveComponent(\"ContentTable\")!\n const _component_Graph = _resolveComponent(\"Graph\")!\n const _component_ResizableGrid = _resolveComponent(\"ResizableGrid\")!\n const _component_Loader = _resolveComponent(\"Loader\")!\n const _component_Toaster = _resolveComponent(\"Toaster\")!\n const _component_About = _resolveComponent(\"About\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createVNode(_component_Header),\n _createElementVNode(\"main\", null, [\n _createVNode(_component_ResizableGrid, null, {\n left: _withCtx(() => [\n _createVNode(_component_ContentTable)\n ]),\n right: _withCtx(() => [\n _createVNode(_component_Graph)\n ]),\n _: 1\n }),\n _createVNode(_component_Loader, {\n show: _ctx.loading.show,\n message: _ctx.loading.message\n }, null, 8, [\"show\", \"message\"]),\n _createVNode(_component_Toaster)\n ]),\n _createVNode(_component_About),\n _hoisted_1\n ], 64))\n}","import { Settings } from \"@/graph/types\";\nimport { createStore } from \"vuex\";\n\nexport type RowData = string | number;\nexport type Column = RowData[];\nexport type RowGroup = RowData[]\n\nexport type GraphData = {\n title: string;\n type: string;\n xAxis: number;\n yAxis: number;\n zAxis: number;\n size: number;\n scaleFactor: number;\n settings: Settings\n}\n\nexport type ContentData = {\n cols: string[],\n rows: RowData[][]\n selected: SelectedData;\n moveTo: number;\n}\n\nexport type SelectedData = {\n row: number;\n col: number;\n}\n\nexport type LoadingData = {\n show: boolean;\n message: string;\n}\n\nexport type ToastType = \"info\" | \"warn\" | \"error\";\n\nexport type Toast = {\n id: number;\n text: string;\n duration: number;\n type: ToastType;\n timeout?: number;\n}\n\nexport type State = {\n data: ContentData;\n graph: GraphData;\n loading: LoadingData;\n toasts: Toast[];\n}\n\nexport default createStore({\n state: {\n data: {\n cols: [\"\", \"\"],\n rows: [[\"\", \"\"]],\n selected: { row: -1, col: -1},\n moveTo: -1,\n },\n loading: {\n show: false,\n message: \"\"\n },\n toasts: [],\n graph: {\n title: \"\",\n type: \"dot-plot\",\n xAxis: 0,\n yAxis: -1,\n zAxis: -1,\n size: 0,\n scaleFactor: 1,\n settings: {\n values: {},\n bool(name: string): boolean {\n return (this.values[name] ?? false) as boolean;\n },\n str(name: string): string {\n return (this.values[name] ?? \"\") as string;\n },\n num(name: string): number {\n return (parseFloat(\"\" + this.values[name] ?? \"0\")) as number;\n }\n }\n }\n },\n mutations: {},\n actions: {},\n modules: {},\n});\n","import { createElementVNode as _createElementVNode, vModelText as _vModelText, withDirectives as _withDirectives, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, vModelSelect as _vModelSelect, resolveComponent as _resolveComponent, createStaticVNode as _createStaticVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nimport _imports_0 from '@/assets/img/logo-white.svg'\n\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-1ff6007a\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"header\" }\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"img\", {\n src: _imports_0,\n alt: \"NZGM\",\n title: \"NZGrapherModern\",\n width: \"148\",\n height: \"90\"\n}, null, -1))\nconst _hoisted_3 = { class: \"header__content\" }\nconst _hoisted_4 = { class: \"graph-name\" }\nconst _hoisted_5 = { class: \"toolbar\" }\nconst _hoisted_6 = [\"onMouseenter\"]\nconst _hoisted_7 = [\"onClick\"]\nconst _hoisted_8 = {\n key: 0,\n class: \"toolbar__menu__content\"\n}\nconst _hoisted_9 = [\"onClick\"]\nconst _hoisted_10 = {\n key: 0,\n class: \"material-icons toolbar__menu__content__button__icon\"\n}\nconst _hoisted_11 = {\n key: 1,\n class: \"toolbar__menu__content__separator\"\n}\nconst _hoisted_12 = { class: \"header__controls\" }\nconst _hoisted_13 = { class: \"select\" }\nconst _hoisted_14 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"label\", { class: \"select__label\" }, \"Size\", -1))\nconst _hoisted_15 = /*#__PURE__*/_createStaticVNode(\"\", 5)\nconst _hoisted_20 = [\n _hoisted_15\n]\nconst _hoisted_21 = { class: \"select\" }\nconst _hoisted_22 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"label\", { class: \"select__label\" }, \"Graph Type\", -1))\nconst _hoisted_23 = [\"value\"]\nconst _hoisted_24 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"h1\", null, \"Enter URL\", -1))\nconst _hoisted_25 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\" The provided URL must be a direct/raw link to a \"),\n /*#__PURE__*/_createElementVNode(\"span\", null, \".csv\"),\n /*#__PURE__*/_createTextVNode(\" file \")\n], -1))\nconst _hoisted_26 = { class: \"input\" }\nconst _hoisted_27 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"input__name\" }, \"URL\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n\n return (_openBlock(), _createElementBlock(_Fragment, null, [\n _createElementVNode(\"header\", _hoisted_1, [\n _hoisted_2,\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _withDirectives(_createElementVNode(\"input\", {\n class: \"graph-name__input\",\n type: \"text\",\n placeholder: \"Graph Name\",\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.title) = $event))\n }, null, 512), [\n [\n _vModelText,\n _ctx.title,\n void 0,\n { lazy: true }\n ]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.toolbar, (item, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"toolbar__menu\",\n key: index,\n onMouseenter: ($event: any) => (!item.action && _ctx.expand(item)),\n onMouseleave: _cache[1] || (_cache[1] = ($event: any) => (_ctx.closeAll()))\n }, [\n _createElementVNode(\"button\", {\n class: \"toolbar__menu__button\",\n onClick: ($event: any) => (_ctx.action(item))\n }, _toDisplayString(item.name), 9, _hoisted_7),\n _createVNode(_Transition, { name: \"menu\" }, {\n default: _withCtx(() => [\n (item.expanded)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(item.children, (child, index) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: index }, [\n (child.name)\n ? (_openBlock(), _createElementBlock(\"button\", {\n key: 0,\n class: \"toolbar__menu__content__button\",\n onClick: ($event: any) => (_ctx.action(child))\n }, [\n (child.icon)\n ? (_openBlock(), _createElementBlock(\"i\", _hoisted_10, _toDisplayString(child.icon), 1))\n : _createCommentVNode(\"\", true),\n _createTextVNode(\" \" + _toDisplayString(child.name), 1)\n ], 8, _hoisted_9))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_11))\n ], 64))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 2\n }, 1024)\n ], 40, _hoisted_6))\n }), 128))\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"div\", _hoisted_13, [\n _hoisted_14,\n _withDirectives(_createElementVNode(\"select\", {\n class: \"select__input\",\n name: \"\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.graphData.size) = $event))\n }, _hoisted_20, 512), [\n [_vModelSelect, _ctx.graphData.size]\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_21, [\n _hoisted_22,\n _withDirectives(_createElementVNode(\"select\", {\n class: \"select__input\",\n name: \"\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.graphType) = $event))\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.graphs, (graph, index) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: index,\n key: index\n }, _toDisplayString(graph.name), 9, _hoisted_23))\n }), 128))\n ], 512), [\n [_vModelSelect, _ctx.graphType]\n ])\n ])\n ])\n ]),\n _createVNode(_component_Dialog, {\n open: _ctx.pickURLDialog,\n onClose: _cache[7] || (_cache[7] = ($event: any) => (_ctx.pickURLDialog = false))\n }, {\n buttons: _withCtx(() => [\n _createElementVNode(\"button\", {\n onClick: _cache[5] || (_cache[5] = \n//@ts-ignore\n(...args) => (_ctx.importFromURL && _ctx.importFromURL(...args)))\n }, \"Import\"),\n _createElementVNode(\"button\", {\n onClick: _cache[6] || (_cache[6] = ($event: any) => (_ctx.pickURLDialog = false))\n }, \"Cancel\")\n ]),\n default: _withCtx(() => [\n _hoisted_24,\n _hoisted_25,\n _createElementVNode(\"label\", _hoisted_26, [\n _hoisted_27,\n _withDirectives(_createElementVNode(\"input\", {\n class: \"input__value\",\n type: \"url\",\n placeholder: \"https://example.com/example.csv\",\n \"onUpdate:modelValue\": _cache[4] || (_cache[4] = ($event: any) => ((_ctx.importURL) = $event))\n }, null, 512), [\n [_vModelText, _ctx.importURL]\n ])\n ])\n ]),\n _: 1\n }, 8, [\"open\"])\n ], 64))\n}","import axios, { AxiosResponse } from \"axios\";\nimport store, { ContentData, RowData, ToastType } from \"@/store\";\nimport { isEmptyRow } from \"@/graph\";\n\nexport function importFromCSV(file: string): void {\n showLoader(\"Importing Content\")\n const lines: string[] = file.split(\"\\n\");\n const data: ContentData = store.state.data;\n let header = true;\n if (lines.length < 1) return;\n data.rows = []; // Clear rows;\n data.selected = { row: -1, col: -1 };\n const splitChar: string = getSplittingChar(file);\n for (const line of lines) {\n if (line.length == 0) continue;\n const parts: string[] = line.split(splitChar);\n if (header) {\n data.cols = parts;\n header = false;\n } else {\n if (parts.length > data.cols.length) {\n data.cols.push(...new Array(parts.length - data.cols.length).fill(''));\n }\n data.rows.push(parts);\n }\n }\n toast(`Imported ${data.rows.length} row(s)`)\n hideLoader()\n}\n\nexport function getSplittingChar(data: string): string {\n const commas: number = (data.match(/,/g) ?? []).length;\n const semiColons: number = (data.match(/;/g) ?? []).length;\n const tabs: number = (data.match(/\\t/g) ?? []).length;\n if (semiColons > tabs && semiColons > commas) {\n return ';';\n } else if (tabs > semiColons && tabs > commas) {\n return '\\t';\n } else {\n return ',';\n }\n}\n\nexport function importFromFile(): void {\n const element: HTMLInputElement = document.createElement('input');\n element.type = \"file\";\n element.style.display = \"none\";\n element.click();\n element.onchange = () => {\n showLoader(\"Loading File\");\n const files: FileList | null = element.files;\n if (files == null || files.length < 1) return;\n const file: File = files[0];\n const reader = new FileReader();\n reader.readAsText(file);\n reader.onload = (event: ProgressEvent) => {\n if (!event.target) return alert(\"Failed to load file!\");\n const content = event.target.result as string;\n importFromCSV(content);\n };\n }\n}\n\nexport async function importFromClipboard(): Promise {\n if (\"navigator\" in window) {\n showLoader(\"Loading Clipboard Contents\");\n try {\n const text = await navigator.clipboard.readText();\n importFromCSV(text);\n } catch (e) {\n toast(\"Unable to read contents of clipboard\", \"error\");\n console.error(e);\n }\n }\n}\n\nexport function dataToCSV(): string {\n const cols: string[] = store.state.data.cols;\n const rows: RowData[][] = store.state.data.rows;\n let output = '';\n for (let index = 0; index < cols.length; index++) {\n output += cols[index];\n if (index < cols.length - 1) {\n output += ',';\n }\n }\n output += '\\n'\n for (let rowIndex = 0; rowIndex < rows.length; rowIndex++) {\n const row: RowData[] = rows[rowIndex];\n if (isEmptyRow(row)) continue;\n for (let columnIndex = 0; columnIndex < cols.length; columnIndex++) {\n const value = row[columnIndex];\n if (value == undefined) continue;\n output += value;\n if (columnIndex < cols.length - 1) {\n output += ',';\n }\n }\n if (rowIndex < rows.length - 1) {\n output += '\\n'\n }\n }\n return output;\n\n\n}\n\nexport function startDownloadBlob(data: Blob, fileName: string): void {\n toast(\"Starting download for \" + fileName);\n const element = document.createElement(\"a\");\n const url = URL.createObjectURL(data);\n element.href = url;\n element.download = fileName;\n document.body.appendChild(element);\n element.click();\n setTimeout(function () {\n document.body.removeChild(element);\n window.URL.revokeObjectURL(url);\n }, 0);\n}\n\nexport function showLoader(message: string): void {\n store.state.loading.show = true;\n store.state.loading.message = message;\n}\n\nexport function hideLoader(): void {\n store.state.loading.show = false;\n}\n\nexport function removeIndexY(values: T[][], index: number): T[][] {\n const output: T[][] = [];\n for (const row of values) {\n if (index == 0) output.push(row.slice(1, values.length));\n else if (index == row.length - 1)\n output.push(row.slice(0, row.length - 1));\n else {\n output.push([\n ...row.slice(0, index),\n ...row.slice(index + 1, row.length),\n ]);\n }\n }\n return output;\n}\n\nexport function removeIndexX(values: T[], index: number): T[] {\n if (index == 0) return values.slice(1, values.length);\n else if (index == values.length - 1) return values.slice(0, values.length - 1);\n else return [\n ...values.slice(0, index),\n ...values.slice(index + 1, values.length),\n ];\n}\n\nexport function insertIndexX(value: T, values: T[], index: number): T[] {\n if (index == 0) return [value, ...values];\n else if (index == values.length - 1) return [...values, value];\n else return [\n ...values.slice(0, index + 1),\n value,\n ...values.slice(index + 1, values.length),\n ];\n}\n\nexport function insertIndexY(value: T, values: T[][], index: number): T[][] {\n const output: T[][] = [];\n for (const row of values) {\n if (index == 0) output.push([value, ...row]);\n else if (index == row.length - 1)\n output.push([...row, value]);\n else {\n output.push([\n ...row.slice(0, index + 1),\n value,\n ...row.slice(index + 1, row.length),\n ]);\n }\n }\n return output;\n}\n\nexport async function importCSVFromURL(url: string): Promise {\n try {\n showLoader(\"Importing Content\")\n const response: AxiosResponse = await axios.get(url);\n const data: string = response.data;\n importFromCSV(data);\n } catch (e) {\n toast(`Failed to load contents from ${url}`, \"error\")\n }\n hideLoader();\n}\n\nexport function isNumeric(value: string | number): boolean {\n return value !== undefined && (typeof value === \"number\" || /^[+-]?(\\d*|\\d{1,3}(,\\d{3})*)(\\.\\d+)?\\b$/.test(value));\n}\n\nlet toastID = 0;\n\nexport function toast(text: string, type: ToastType = \"info\", duration = 2000): void {\n toastID++;\n if (toastID > 100) {\n toastID = 0;\n }\n store.state.toasts.push({ id: toastID, text, type, duration });\n}","import { DataGroups, SettingDefinition, Settings } from \"@/graph/types\";\nimport store, { RowData, RowGroup } from \"@/store\";\nimport { isNumeric } from \"@/tools\";\n\nexport function addDefaultSettings(definitions: SettingDefinition[]): void {\n const output: Settings = store.state.graph.settings;\n for (const def of definitions) {\n if (output.values[def.key] !== undefined) continue;\n output.values[def.key] = (\n def.type == \"toggle\" ?\n (def.default ?? false) : (\n def.type == \"slider\" ? (def.default ?? def.min ?? 0) : undefined\n )\n );\n }\n}\n\nexport function scrollToRow(row: number): void {\n store.state.data.moveTo = row;\n}\n\nexport function isEmptyRow(row: RowGroup): boolean {\n const cols: string[] = store.state.data.cols;\n for (const index in cols) {\n if (row[index] == undefined) continue;\n else {\n const value = row[index];\n if (typeof value == \"string\" && value.length < 1) continue;\n return false;\n }\n }\n return true;\n}\n\nexport function dataFromIndexes(indexes: number[], data: number[]): number[] {\n const output: number[] = [];\n for (const index of indexes) {\n if (data[index] == undefined) continue;\n output.push(data[index]);\n }\n return output;\n}\n\nexport function splitData(\n data: RowGroup,\n maxGroups: number,\n min: number,\n max: number\n): DataGroups {\n if (data.length == 0) return {}; /* Ignore empty data */\n\n let uniqueGroups: DataGroups = {}\n for (const index in data) {\n const value: string | number = data[index];\n if (uniqueGroups[value] == undefined) uniqueGroups[value] = []\n uniqueGroups[value].push(parseInt(index));\n }\n const groups: string[] = Object.keys(uniqueGroups);\n if (groups.length > maxGroups) {\n if (maxGroups < 4) {\n console.error(\"SEL 1\")\n //ERR SELECT CATEGORICAL OR NUMERICAL FOR VAR WITH MAX OR FEWER GROUPS\n return {};\n }\n if (!isNumeric(groups[0])) {\n console.error(\"SEL 2\")\n // ERR SELECT CATEGORICAL VAR WITH MAX OR FEWER GROUPS OR NUMERICAL VAR\n return {};\n } else {\n const groupSize: number = (max - min /* Difference */) / 4 /* Four Groups */;\n const firstGroupMax: number = floatp(min + groupSize, 2);\n const secondGroupMax: number = floatp(min + (groupSize * 2), 2);\n const thirdGroupMax: number = floatp(min + (groupSize * 3), 2);\n uniqueGroups = {}; /* Reset unique groups */\n for (const index in data) {\n let value = data[index];\n let group: string | number = value;\n if (isNumeric(value)) {\n if (typeof value == \"string\") value = parseFloat(value);\n if (value < firstGroupMax) group = `a: < ${firstGroupMax}`\n else if (value < secondGroupMax) group = `b: ${firstGroupMax} - ${secondGroupMax}`\n else if (value < thirdGroupMax) group = `c: ${secondGroupMax} - ${thirdGroupMax}`\n else group = `d: > ${thirdGroupMax}`;\n } else group = 'invalid';\n if (uniqueGroups[group] == undefined) uniqueGroups[group] = [];\n else uniqueGroups[group].push(parseInt(index));\n }\n }\n }\n return uniqueGroups;\n}\n\nexport function numericMin(values: RowGroup): number {\n if (values.length == 0) return 0;\n let minValue = -1;\n for (const value of values) {\n if (typeof value == \"number\" && (minValue == -1 || value < minValue)) minValue = value;\n else if (typeof value == \"string\") {\n const number: number = parseFloat(value);\n if (minValue == -1 || number < minValue) minValue = number;\n }\n }\n return minValue;\n}\n\nexport function numericMax(values: RowGroup): number {\n if (values.length == 0) return 0;\n let maxValue = 0;\n for (const value of values) {\n if (typeof value == \"number\" && value > maxValue) maxValue = value;\n else if (typeof value == \"string\") {\n const number: number = parseFloat(value);\n if (number > maxValue) maxValue = number;\n }\n }\n return maxValue;\n}\n\nexport function getColumnData(column: number): [RowGroup, number[]] {\n if (column == -1) return [[], []]; /* Ignore none columns */\n const rows: RowData[][] = store.state.data.rows;\n const values: RowGroup = [];\n const skipped: number[] = [];\n for (let index = 0; index < rows.length; index++) {\n const row: RowGroup = rows[index];\n const value: RowData = row[column];\n if (isEmptyRow(row)) continue;\n if (value == undefined) {\n /* Column not defined */\n skipped.push(index);\n } else {\n values.push(value)\n }\n }\n return [values, skipped];\n}\n\nexport function getColumnDataNumeric(column: number): [number[], number[]] {\n if (column == -1) return [[], []]; /* Ignore none columns */\n const rows: RowData[][] = store.state.data.rows;\n const values: number[] = [];\n const skipped: number[] = [];\n for (let index = 0; index < rows.length; index++) {\n const row: RowGroup = rows[index];\n const value: RowData = row[column];\n if (isEmptyRow(row)) continue;\n if (value == undefined || !isNumeric(value)) {\n /* Column not defined */\n skipped.push(index);\n } else {\n values.push(float(value));\n }\n }\n return [values, skipped];\n}\n\nexport function sortFirstNumber(as: string, bs: string): number {\n if (as == bs) return 0;\n const regex = /(\\.\\d+)|(\\d+(\\.\\d+)?)|([^\\d.]+)|(\\.\\D+)|(\\.$)/g;\n const aMatch = as.toLowerCase().match(regex);\n const bMatch = bs.toLowerCase().match(regex);\n let i = 0;\n if (aMatch == null) return -1;\n const length = aMatch == null ? 0 : aMatch.length;\n if (bMatch == null) return 1;\n while (i < length) {\n if (!bMatch[i]) return 1;\n const aValue: number = parseFloat(aMatch[i]);\n const bValue: number = parseFloat(bMatch[i]);\n if (aValue == bValue || isNaN(aValue) || isNaN(bValue)) {\n i++;\n continue;\n }\n const diff = aValue - bValue;\n if (!isNaN(diff)) return diff;\n return aValue > bValue ? 1 : -1;\n }\n return bMatch[i] ? -1 : 0;\n}\n\nexport function firstSF(number: number): number {\n if (number == 0) return 0;\n while (number < 0.1) {\n number *= 10;\n }\n while (number >= 1) {\n number /= 10;\n }\n number *= 10;\n return intf(number)\n}\n\nexport function axisMinMaxStep(min: number, max: number): [number, number, number] {\n if (min == max) {\n min += 1;\n max += 1;\n }\n const range: number = max - min;\n const rangeRound: number = floatp(range, 1);\n let steps: number = firstSF(rangeRound);\n if (steps < 2) steps *= 10;\n if (steps < 3) steps *= 5;\n if (steps < 5) steps *= 2;\n let step: number = floatp(rangeRound / steps, 15);\n if (step == 0) step = 1;\n let minTick: number = intf(min / step) * step;\n if (minTick > min) minTick -= step;\n let maxTick: number = intf(max / step) * step;\n if (minTick < min) maxTick += step;\n if (maxTick == minTick) {\n maxTick++;\n minTick--;\n }\n return [minTick, maxTick, step];\n}\n\nexport function scale(value: number): number {\n return value * store.state.graph.scaleFactor;\n}\n\nexport function invScale(value: number): number {\n return value / store.state.graph.scaleFactor;\n}\n\nexport function float(value: string | number): number {\n if (typeof value == \"number\") return value;\n else return parseFloat(value);\n}\n\nexport function floatp(value: number, precision: number): number {\n return parseFloat(value.toPrecision(precision));\n}\n\nexport function int(value: string | number): number {\n if (typeof value == \"number\") return value;\n else return parseFloat(value);\n}\n\nexport function intf(value: number): number {\n return parseInt(value.toFixed(0));\n}\n\nexport function dataToPixel(data: number, min: number, max: number, minPx: number, maxPx: number): number {\n return (data - min) / (max - min) * (maxPx - minPx) + minPx;\n}\n\nexport function getPointColor(settings: Settings): string | null {\n const transparency: number = settings.num('point-transparency');\n if (transparency == 0) return '#000000';\n else if (transparency == 10) return null;\n else {\n const opacity: number = (10 - transparency) / 10;\n return `rgba(0,0,0, ${opacity})`\n }\n}\n\nexport function text(\n ctx: CanvasRenderingContext2D,\n text: string,\n size: number,\n x: number,\n y: number,\n align: CanvasTextAlign = \"left\",\n fill = \"#000000\"\n): void {\n ctx.fillStyle = fill;\n ctx.font = `bold ${scale(size)}px Arial`;\n ctx.textAlign = align;\n ctx.fillText(text, x, y);\n}\n\nexport function line(\n ctx: CanvasRenderingContext2D,\n x1: number,\n y1: number,\n x2: number,\n y2: number\n): void {\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n}\n\nexport function box(\n ctx: CanvasRenderingContext2D,\n x1: number,\n y1: number,\n x2: number,\n y2: number\n): void {\n ctx.beginPath();\n ctx.rect(x1, y1, x2 - x1, y2 - y1);\n ctx.stroke();\n}\n\nexport function watermark(\n ctx: CanvasRenderingContext2D,\n width: number,\n height: number\n): void {\n text(ctx, \"Made with NZGM\", 13, scale(10), height - scale(10), \"left\");\n text(ctx, \"jacobtread.github.io/NZGM\", 13, width - scale(10), height - scale(10), \"right\");\n}","import store, { GraphData, RowGroup } from \"@/store\";\nimport { DataGroups, Settings } from \"@/graph/types\";\nimport {\n axisMinMaxStep,\n box,\n dataFromIndexes,\n dataToPixel,\n floatp,\n getColumnData,\n getColumnDataNumeric,\n getPointColor,\n invScale,\n line,\n numericMax,\n numericMin,\n scale,\n scrollToRow,\n sortFirstNumber,\n splitData,\n text\n} from \"@/graph\";\nimport { lowerQuartile, maxNoOutliers, mean, median, minNoOutliers, random, standardDeviation, upperQuartile } from \"@/tools/math\";\n\nlet settings: Settings;\n\nexport function createDotPlot(ctx: CanvasRenderingContext2D): void {\n\n const width: number = ctx.canvas.width;\n const height: number = ctx.canvas.height;\n\n const graphData: GraphData = store.state.graph;\n settings = graphData.settings;\n\n const xColumn: number = graphData.xAxis;\n const yColumn: number = graphData.yAxis;\n const zColumn: number = graphData.zAxis;\n\n const columnNames: string[] = store.state.data.cols;\n\n const [xPoints, xSkipped]: [number[], RowGroup] = getColumnDataNumeric(xColumn);\n const [yPoints, ySkipped]: [RowGroup, RowGroup] = getColumnData(yColumn);\n const [zPoints, zSkipped]: [RowGroup, RowGroup] = getColumnData(zColumn);\n\n const skipped: RowGroup = [...xSkipped, ...ySkipped, ...zSkipped];\n\n const left = scale(90);\n const right = width - scale(60);\n\n if (xPoints.length == 0) { // No Numeric Data Provided\n text(ctx, \"No Numeric Data Selected\", 20, width / 2, (height / 2) - scale(45), \"center\", \"#FF0000\");\n text(ctx, \"the 𝑥 axis requires numeric data\", 15, width / 2, (height / 2) - scale(15), \"center\", \"#666666\");\n text(ctx, \"to render a graph\", 15, width / 2, (height / 2) + scale(15), \"center\", \"#666666\");\n return; // Dont continue rendering;\n }\n\n if (skipped.length != 0 && settings.bool('show-removed')) { // Some data was not numeric\n text(ctx, \"Some non numeric data was present\", 10, scale(10), scale(30), \"left\", \"#FF0000\");\n text(ctx, \"at the following rows:\", 10, scale(10), scale(45), \"left\", \"#FF0000\");\n\n let y: number = scale(60);\n for (const index of skipped) {\n // Print out the row indexes\n text(ctx, `${index}`, 10, scale(10), y, \"left\", \"#666666\");\n y += scale(15);\n }\n }\n\n const baseline: number = height - scale(60); /* The baseline point on the graph */\n const maxHeight: number = height - scale(120); /* The highest allowed point */\n\n const minX = Math.min(...xPoints);\n const maxX = Math.max(...xPoints);\n\n const minY = numericMin(yPoints);\n const maxY = numericMax(yPoints);\n\n const minZ = numericMin(zPoints);\n const maxZ = numericMax(zPoints);\n\n // Calculates min, max and step for the graph;\n const [graphMin, graphMax, graphStep]: [number, number, number] = axisMinMaxStep(minX, maxX);\n\n // Render Graph Title\n text(ctx, graphData.title, 20, width / 2, scale(30), \"center\");\n\n // Render X-Axis Title\n text(ctx, columnNames[xColumn], 15, width / 2, height - scale(10), \"center\");\n\n const yGroups: DataGroups = splitData(yPoints, 10, minY, maxY);\n const zGroups: DataGroups = splitData(zPoints, 10, minZ, maxZ);\n\n if (yColumn != -1) { // Render Y-Axis Title\n const x: number = scale(20);\n const y: number = height / 2;\n ctx.save();\n ctx.translate(x, y);\n // Rotate -90deg \n ctx.rotate(-Math.PI / 2);\n text(ctx, columnNames[yColumn], 15, 0, 0, \"center\");\n ctx.restore();\n }\n\n if (zColumn != -1) {\n const groups: string[] = Object.keys(zGroups);\n let x: number = scale(60);\n // Width of each block\n const blockWidth: number = (width - scale(40)) / groups.length;\n for (const group of groups) {\n const indexes: number[] = zGroups[group];\n const width: number = x + blockWidth;\n if (indexes.length > 0) {\n const data: number[] = dataFromIndexes(indexes, xPoints)\n renderGraph(ctx, data, yPoints, yGroups, x + scale(30), width - scale(50), baseline, graphMin, graphMax, graphStep, maxHeight)\n }\n text(ctx, group, 15, (x + (width - scale(50))) / 2, baseline - maxHeight, \"center\");\n x += blockWidth;\n }\n } else {\n renderGraph(ctx, xPoints, yPoints, yGroups, left, right, baseline, graphMin, graphMax, graphStep, maxHeight);\n }\n\n}\n\nfunction renderGraph(\n ctx: CanvasRenderingContext2D,\n xPoints: number[],\n yPoints: RowGroup,\n yGroups: DataGroups,\n left: number,\n right: number,\n baseline: number,\n min: number,\n max: number,\n step: number,\n maxHeight: number,\n): void {\n renderGrid(ctx, left, right, baseline + scale(10), min, max, step);\n if (yPoints.length > 0) {\n const groups: string[] = Object.keys(yGroups);\n groups.sort(sortFirstNumber).reverse();\n const groupMaxHeight: number = maxHeight / groups.length;\n let y: number = baseline;\n for (const group of groups) {\n const indexes: number[] = yGroups[group];\n if (indexes.length > 0) {\n const data: number[] = dataFromIndexes(indexes, xPoints)\n renderData(ctx, data, left, right, y, min, max, maxHeight);\n }\n text(ctx, group, 15, right + scale(10), y - (groupMaxHeight / 2), \"right\");\n y -= groupMaxHeight;\n }\n } else {\n renderData(ctx, xPoints, left, right, baseline, min, max, maxHeight);\n }\n}\n\nfunction renderGrid(\n ctx: CanvasRenderingContext2D,\n x1: number,\n x2: number,\n y: number,\n min: number,\n max: number,\n step: number\n): void {\n const gridLineTop = 50;\n ctx.strokeStyle = \"#000000\";\n ctx.fillStyle = \"#000000\";\n ctx.lineWidth = scale(1);\n line(ctx, x1 - scale(10), y, x2 + scale(10), y);\n let dataX: number = floatp(min, 8);\n const renderGridLines: boolean = settings.bool(\"grid-lines\");\n while (dataX <= max) {\n const x: number = dataToPixel(dataX, min, max, x1, x2);\n line(ctx, x, y, x, y + scale(6));\n text(ctx, `${dataX}`, 15, x, y + scale(18), \"center\");\n if (renderGridLines) {\n ctx.strokeStyle = \"#DDDDDD\";\n line(ctx, x, y, x, gridLineTop);\n ctx.strokeStyle = \"#000000\"\n }\n dataX = floatp(dataX + step, 8);\n }\n}\n\nfunction renderData(\n ctx: CanvasRenderingContext2D,\n points: number[],\n left: number,\n right: number,\n baseline: number,\n min: number,\n max: number,\n maxHeight: number,\n sortIndex = 2,\n createMap = true\n): void {\n const map: HTMLMapElement = document.getElementById(\n \"canvasMap\"\n ) as HTMLMapElement;\n\n ctx.lineWidth = scale(2);\n\n if (settings.bool('thick-liness')) {\n ctx.lineWidth = scale(5);\n }\n\n const stripGraph = settings.bool(\"strip-graph\");\n const stackDots: boolean = settings.bool(\"stacked-dots\");\n const pointSize: number = settings.num(\"point-size\");\n const pointLabels: boolean = settings.bool(\"point-labels\");\n\n const pointRadius = scale(pointSize / 2)\n\n const positions: [number, number, number, number][] = [];\n for (let index = 0; index < points.length; index++) {\n const data = points[index];\n const x: number = dataToPixel(data, min, max, left, right);\n let xRel: number;\n if (stackDots) {\n xRel = Math.floor(x / (pointRadius * 2)) * pointRadius * 2;\n } else {\n xRel = Math.floor(x / (pointRadius * 3)) * pointRadius * 3;\n }\n positions.push([x, xRel, data, index])\n }\n\n const counts: { [key: number]: number } = {}\n for (const [_, xRel] of positions) {\n _;\n if (counts[xRel] == undefined) counts[xRel] = 1;\n else counts[xRel]++;\n }\n const maxPoints: number = Math.max(...Object.values(points));\n\n let y: number = baseline;\n\n let lastX = 0;\n\n const yHeight: number = (maxHeight - scale(10) / maxPoints < pointRadius * 2) ?\n (maxHeight - scale(10) / maxPoints) :\n pointRadius * 2;\n\n positions.sort((a, b) => a[sortIndex] - b[sortIndex]);\n\n const pointColor = getPointColor(settings);\n for (const [x, xRel, data, index] of positions) {\n if (lastX == xRel) y -= yHeight;\n else y = baseline - scale(10);\n\n if (stripGraph) y = random(\n baseline - scale(10),\n baseline - maxHeight + scale(10) + (maxHeight / 2)\n );\n\n lastX = xRel;\n if (pointColor != null) {\n // Render Point\n ctx.beginPath();\n ctx.strokeStyle = pointColor;\n ctx.arc(x, y, pointRadius, 0, 2 * Math.PI);\n ctx.stroke();\n }\n\n if (createMap) {\n const area: HTMLAreaElement = document.createElement(\"area\");\n area.shape = \"circle\";\n area.coords = `${invScale(x)},${invScale(y)},${invScale(pointRadius)}`\n area.alt = `${data}`;\n area.href = \"#\";\n area.title = `${index + 1}: ${data}`;\n area.onmouseenter = function() {\n scrollToRow(index);\n }\n map.appendChild(area);\n }\n\n if (pointLabels) {\n text(ctx, `${data}`, 10, (x + pointRadius) + scale(2), y + scale(4), \"left\", \"#0000FF\")\n }\n }\n\n drawAdditonal(ctx, points, left, right, baseline, min, max, maxHeight);\n\n}\n\nfunction drawAdditonal(\n ctx: CanvasRenderingContext2D,\n points: number[],\n left: number,\n right: number,\n baseline: number,\n min: number,\n max: number,\n maxHeight: number,\n) {\n\n const lq: number = lowerQuartile(points);\n const uq: number = upperQuartile(points);\n\n const med: number = median(points);\n const mea: number = mean(points);\n\n const minValue: number = floatp(Math.min(...points), 10);\n const maxValue: number = floatp(Math.max(...points), 10);\n\n const minNO: number = minNoOutliers(points, lq, uq);\n const maxNO: number = maxNoOutliers(points, lq, uq);\n\n const sd: number = standardDeviation(points);\n const minGraph: number = dataToPixel(minValue, min, max, left, right);\n const lqGraph: number = dataToPixel(lq, min, max, left, right);\n const medGraph: number = dataToPixel(med, min, max, left, right);\n const uqGraph: number = dataToPixel(uq, min, max, left, right);\n const maxGraph: number = dataToPixel(maxValue, min, max, left, right);\n const minNOGraph: number = dataToPixel(minNO, min, max, left, right);\n const maxNOGraph: number = dataToPixel(maxNO, min, max, left, right);\n const count: number = points.length;\n\n const h: number = maxHeight * 0.1;\n\n if (settings.bool(\"box-plot\")) {\n drawBoxPlot(\n ctx,\n minGraph,\n maxGraph,\n lqGraph,\n uqGraph,\n medGraph,\n baseline - maxHeight * 0.1,\n h\n )\n }\n\n if (settings.bool(\"high-box-plot\")) {\n drawBoxPlot(\n ctx,\n minGraph,\n maxGraph,\n lqGraph,\n uqGraph,\n medGraph,\n baseline - maxHeight * 0.8,\n h\n )\n }\n\n if (settings.bool(\"box-no-whisker\")) {\n drawBoxPlot(\n ctx,\n minGraph,\n maxGraph,\n lqGraph,\n uqGraph,\n medGraph,\n baseline - maxHeight * 0.1,\n h,\n false\n );\n }\n if (settings.bool(\"box-no-outlier\")) {\n drawBoxPlot(\n ctx,\n minNOGraph,\n maxNOGraph,\n lqGraph,\n uqGraph,\n medGraph,\n baseline - maxHeight * 0.1,\n h\n );\n }\n\n if (settings.bool('sum')) {\n const y = baseline - h;\n const textSize: number = settings.num('sum-text-size');\n text(ctx, `min: ${minValue}`, textSize, left - scale(60), y - scale(4 * textSize), \"left\", \"#FF0000\")\n text(ctx, `max: ${maxValue}`, textSize, left - scale(60), y - scale(3 * textSize), \"left\", \"#FF0000\")\n text(ctx, `mean: ${mea}`, textSize, left - scale(60), y - scale(2 * textSize), \"left\", \"#FF0000\")\n text(ctx, `med: ${med}`, textSize, left - scale(60), y - scale(textSize), \"left\", \"#FF0000\")\n text(ctx, `lq: ${lq}`, textSize, left - scale(60), y, \"left\", \"#FF0000\")\n text(ctx, `uq: ${uq}`, textSize, left - scale(60), y + scale(textSize), \"left\", \"#FF0000\")\n text(ctx, `sd: ${sd}`, textSize, left - scale(60), y + scale(2 * textSize), \"left\", \"#FF0000\")\n text(ctx, `num: ${count}`, textSize, left - scale(60), y + scale(3 * textSize), \"left\", \"#FF0000\")\n }\n\n const informalCI: boolean = settings.bool('informal-ci');\n const informalCILimits: boolean = settings.bool('ci-limits');\n\n if (informalCI || informalCILimits) {\n\n const halfWidth: number = 1.5 * (uq - lq) / Math.sqrt(count);\n const minIn: number = floatp(med - halfWidth, 5);\n const maxIn: number = floatp(med + halfWidth, 5);\n\n const minGraph: number = dataToPixel(minIn, min, max, left, right);\n const maxGraph: number = dataToPixel(maxIn, min, max, left, right);\n\n if (informalCI) {\n const y: number = baseline - h;\n ctx.lineWidth = scale(10);\n ctx.strokeStyle = \"#0000FF\";\n line(ctx, minGraph, y, maxGraph, y);\n }\n\n if (informalCILimits) {\n const y: number = (baseline - h) + (maxHeight * 0.1 + scale(8));\n text(ctx, `${minIn}`, 10, minGraph, y, \"right\", \"#0000FF\")\n text(ctx, `${maxIn}`, 10, maxGraph, y, \"left\", \"#0000FF\")\n }\n\n }\n\n if (settings.bool('mean-dot')) {\n const meanGraph: number = dataToPixel(mea, min, max, left, right);\n ctx.fillStyle = '#FF0000';\n ctx.beginPath();\n ctx.arc(meanGraph, baseline - scale(5), scale(7), 0, Math.PI * 2, true);\n ctx.closePath();\n ctx.fill();\n }\n}\n\nfunction drawBoxPlot(\n ctx: CanvasRenderingContext2D,\n min: number,\n max: number,\n lq: number,\n uq: number,\n med: number,\n y: number,\n h: number,\n whisker = true,\n): void {\n ctx.strokeStyle = \"#000000\";\n ctx.lineWidth = scale(1);\n // Quartile\n box(ctx, lq, y - h, uq, y + h)\n // Median Line\n line(ctx, med, y - h, med, y + h);\n if (whisker) {\n // Left Whisker\n line(ctx, min, y, lq, y); // Line\n line(ctx, min, y - scale(5), min, y + scale(5)); // Cap\n\n // Right Whisker\n line(ctx, uq, y, max, y); // Line\n line(ctx, max, y - scale(5), max, y + scale(5)); // Cap\n }\n}\n","import { floatp } from \"@/graph\";\n\nexport function median(values: number[]): number {\n const count: number = values.length;\n values.sort((a, b) => a - b);\n const n = count / 2 - 0.5;\n let median: number;\n if (Math.ceil(n) == n) {\n median = values[n];\n } else {\n median = (values[n - 0.5] + values[n + 0.5]) / 2;\n }\n return floatp(median, 10);\n}\n\nexport function sum(values: number[]): number {\n return values.reduce((a, b) => a + b, 0);\n}\n\nexport function mean(values: number[]): number {\n return floatp(sum(values) / values.length, 5);\n}\n\nexport function lowerQuartile(values: number[]): number {\n const count = values.length;\n values.sort((a, b) => a - b);\n const n = Math.floor(count / 2) / 2 - 0.5;\n let q: number;\n if (n < 0) { q = median(values); }\n else if (Math.ceil(n) == n) { q = values[n]; }\n else { q = (values[n - 0.5] + values[n + 0.5]) / 2; }\n return floatp(q, 10);\n}\n\nexport function upperQuartile(values: number[]): number {\n const count = values.length;\n values.sort((a, b) => b - a);\n const n = Math.floor(count / 2) / 2 - 0.5;\n let q: number;\n if (n < 0) { q = median(values); }\n else if (Math.ceil(n) == n) { q = values[n]; }\n else { q = (values[n - 0.5] + values[n + 0.5]) / 2; }\n return floatp(q, 10);\n}\n\nexport function standardDeviation(values: number[]): number {\n const _mean: number = mean(values);\n const squareDiffs = values.map(a => (a - _mean) ** 2);\n return floatp(Math.sqrt(\n sum(squareDiffs) / (values.length - 1)\n ), 5);\n}\n\nexport function minNoOutliers(values: number[], lq: number, uq: number): number {\n values.sort((a, b) => a - b);\n let min = values[0];\n let i = 0;\n while (i < values.length && min < lq - 1.5 * (uq - lq)) {\n min = values[i];\n i++;\n }\n return min;\n}\n\nexport function maxNoOutliers(values: number[], lq: number, uq: number): number {\n values.sort((a, b) => b - a);\n let max = values[0];\n let i = 0;\n while (i < values.length && max > uq + 1.5 * (uq - lq)) {\n max = values[i];\n i++;\n }\n return max;\n}\n\nexport function quantile(values: number[], q: number): number {\n values.sort((a, b) => a - b);\n const pos: number = (values.length - 1) * q;\n const base: number = Math.floor(pos);\n const rest: number = pos - base;\n if (values[base + 1] !== undefined) {\n return values[base] + rest * (values[base + 1] - values[base]);\n } else {\n return values[base];\n }\n}\n\nexport function random(min: number, max: number): number {\n return Math.floor((Math.random() * (max - min + 1)) + min);\n}\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(min, value), max)\n}","import { createDotPlot } from \"@/graph/plotters/dotplot\";\nimport { GraphTypeData } from \"@/graph/types\";\n\nexport default {\n \"dot-plot\": {\n name: \"Dot Plot (& Box & Whisker)\",\n func: createDotPlot,\n settings: [\n { key: \"point-size\", name: \"Point Size\", type: \"slider\", min: 3, max: 19, step: 1, default: 7 },\n { key: \"point-transparency\", name: \"Point Transparency\", type: \"slider\", min: 0, max: 10, step: 0.1, default: 5 },\n { key: \"sum\", name: \"Summaries\", type: \"toggle\" },\n { key: \"sum-text-size\", name: \"Summary Text Size\", type: \"slider\", min: 5, max: 25, step: 1, default: 13 },\n { key: \"box-plot\", name: \"Box Plots\", type: \"toggle\" },\n { key: \"strip-graph\", name: \"Strip Graph\", type: \"toggle\" },\n { key: \"high-box-plot\", name: \"High Box Plot\", type: \"toggle\" },\n { key: \"box-no-whisker\", name: \"Box (No Whisker)\", type: \"toggle\" },\n { key: \"box-no-outlier\", name: \"Box (No Outlier)\", type: \"toggle\" },\n { key: \"informal-ci\", name: \"Informal C-I\", type: \"toggle\" },\n { key: \"ci-limits\", name: \"C-I Limits\", type: \"toggle\" },\n { key: \"point-labels\", name: \"Point Labels\", type: \"toggle\" },\n { key: \"mean-dot\", name: \"Mean Dot\", type: \"toggle\" },\n { key: \"stack-dots\", name: \"Stack Dots\", type: \"toggle\", default: true },\n { key: \"grid-lines\", name: \"Grid Lines\", type: \"toggle\", default: true },\n { key: \"invert-colours\", name: \"Invert Colours\", type: \"toggle\" },\n { key: \"thick-lines\", name: \"Thick Lines\", type: \"toggle\" },\n { key: \"show-removed\", name: \"Show row of removed points\", type: \"toggle\", default: true },\n ],\n axisNames: ['Numerical', 'Category 1', 'Category 2']\n },\n \"bar-graph\": {\n name: \"Bar Graph\",\n func: createDotPlot,\n settings: [],\n axisNames: ['Numerical', 'Split']\n },\n} as { [key: string]: GraphTypeData };","import { renderSlot as _renderSlot, createElementVNode as _createElementVNode, Transition as _Transition, withCtx as _withCtx, createVNode as _createVNode, withModifiers as _withModifiers, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3879e6bf\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"dialog\" }\nconst _hoisted_2 = { class: \"buttons\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createBlock(_Transition, { name: \"dialog-wrapper\" }, {\n default: _withCtx(() => [\n (_ctx.open)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: \"dialog-wrapper\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(\n//@ts-ignore\n(...args) => (_ctx.closeDialog && _ctx.closeDialog(...args)), [\"self\"]))\n }, [\n _createVNode(_Transition, { name: \"dialog\" }, {\n default: _withCtx(() => [\n _createElementVNode(\"div\", _hoisted_1, [\n _renderSlot(_ctx.$slots, \"default\", {}, undefined, true),\n _createElementVNode(\"div\", _hoisted_2, [\n _renderSlot(_ctx.$slots, \"buttons\", {}, undefined, true)\n ])\n ])\n ]),\n _: 3\n })\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _: 3\n }))\n}","\nimport { Options, Vue } from \"vue-class-component\";\n\n@Options({ props: [\"open\"] })\nexport default class Dialog extends Vue {\n closeDialog(): void {\n this.$emit(\"close\");\n }\n}\n","import { render } from \"./Dialog.vue?vue&type=template&id=3879e6bf&scoped=true&ts=true\"\nimport script from \"./Dialog.vue?vue&type=script&lang=ts\"\nexport * from \"./Dialog.vue?vue&type=script&lang=ts\"\n\nimport \"./Dialog.vue?vue&type=style&index=0&id=3879e6bf&lang=scss&scoped=true\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3879e6bf\"]])\n\nexport default __exports__","\nimport store, { ContentData, GraphData, RowData, SelectedData } from \"@/store\";\nimport { Options, Vue } from \"vue-class-component\";\nimport graphList from \"@/graph/list\";\nimport Dialog from \"@/components/Dialog.vue\";\nimport {\n dataToCSV,\n importCSVFromURL,\n importFromClipboard,\n importFromFile,\n insertIndexX,\n insertIndexY,\n removeIndexX,\n removeIndexY,\n startDownloadBlob,\n toast,\n} from \"@/tools\";\nimport { addDefaultSettings } from \"@/graph\";\nimport graphTypes from \"@/graph/list\";\n\ninterface ToolbarItem {\n icon?: string;\n name?: string;\n group?: boolean;\n action?(): void;\n children?: ToolbarItem[];\n expanded?: boolean;\n}\n\n@Options({\n components: { Dialog },\n watch: {\n graphType() {\n addDefaultSettings(graphTypes[this.graphType].settings);\n },\n },\n})\nexport default class Header extends Vue {\n pickURLDialog = false;\n importURL = \"\";\n\n importFromURL(): void {\n var regex = /^(ftp|http|https):\\/\\/[^ \"]+$/;\n if (this.importURL.length < 1) return alert(\"No URL provided!\");\n if (!regex.test(this.importURL)) return alert(\"Invalid url provided\");\n this.pickURLDialog = false;\n importCSVFromURL(this.importURL)\n .then(() => {\n this.importURL = \"\";\n const rows = store.state.data.rows;\n alert(`Imported ${rows.length}row(s)`);\n })\n .catch(() => alert(\"Failed to import csv\"));\n }\n\n expanded = false;\n\n graphs = graphList;\n\n set graphType(value: string) {\n store.state.graph.type = value;\n }\n get graphType(): string {\n return store.state.graph.type;\n }\n\n get graphData(): GraphData {\n return store.state.graph;\n }\n\n set graphData(value: GraphData) {\n store.state.graph = value;\n }\n\n set title(value: string) {\n store.state.graph.title = value;\n }\n\n get title(): string {\n return store.state.graph.title;\n }\n\n toolbar: ToolbarItem[] = [\n {\n name: \"Data\",\n children: [\n {\n icon: \"delete\",\n name: \"Clear Data\",\n action: (): void => {\n if (\n confirm(\n \"Are you sure you want to clear the current data table? Make sure to download this data first because it will not be saved.\"\n )\n ) {\n store.state.data.rows = [[\"\"]];\n store.state.data.cols = [\"\"];\n store.state.data.selected = { row: -1, col: -1 };\n }\n },\n },\n {\n icon: \"file_upload\",\n name: \"Open File\",\n action: (): void => {\n importFromFile();\n },\n },\n {\n icon: \"link\",\n name: \"Import from URL\",\n action: (): void => {\n this.pickURLDialog = true;\n },\n },\n {\n icon: \"content_paste\",\n name: \"Import from Clipboard\",\n action: (): void => {\n importFromClipboard();\n },\n },\n\n { icon: \"highlight_alt\", name: \"Select & Copy Data Table\" },\n {\n icon: \"file_download\",\n name: \"Download Data\",\n action: (): void => {\n const csvData: string = dataToCSV();\n const dataBlob: Blob = new Blob([csvData]);\n startDownloadBlob(\n dataBlob,\n this.title.replaceAll(\" \", \"_\") + \".csv\"\n );\n },\n },\n { icon: \"save_alt\", name: \"Save Session\" },\n ],\n },\n {\n name: \"Edit\",\n children: [\n {\n name: \"Remove Row\",\n action(): void {\n const data: ContentData = store.state.data;\n const selected: SelectedData = store.state.data.selected;\n const row: number = selected.row;\n if (row != -1) {\n data.rows = removeIndexX(data.rows, row);\n toast(`Removed row ${row}`);\n data.selected = { row: -1, col: -1 };\n } else {\n toast(\"No row selected!\", \"error\");\n }\n },\n },\n { name: \"Remove Specific Row\" },\n {\n name: \"Remove Last Row\",\n action(): void {\n const data: ContentData = store.state.data;\n const rows: RowData[][] = data.rows;\n if (rows.length < 1) return;\n data.rows = data.rows.slice(0, data.rows.length - 1);\n toast(\"Removed last row\");\n },\n },\n {},\n {\n name: \"Remove Column\",\n action(): void {\n const data: ContentData = store.state.data;\n const col: number = data.selected.col;\n if (col != -1) {\n const columnName: string = data.cols[col];\n data.rows = removeIndexY(data.rows, col);\n data.cols = removeIndexX(data.cols, col);\n toast(`Removed Column \"${columnName}\"`);\n data.selected = { row: -1, col: -1 };\n } else {\n toast(\"No column selected!\", \"error\");\n }\n },\n },\n {\n name: \"Remove Last Column\",\n action(): void {\n const data: ContentData = store.state.data;\n const col: number = data.cols.length - 1;\n const columnName: string = data.cols[col];\n data.rows = removeIndexY(data.rows, col);\n data.cols = removeIndexX(data.cols, col);\n toast(`Removed Column \"${columnName}\"`);\n },\n },\n ],\n },\n {\n name: \"Insert\",\n children: [\n {\n name: \"Insert Row\",\n action(): void {\n toast(\"Inserted row\");\n store.state.data.rows.push(new Array(store.state.data.cols.length));\n },\n },\n {\n name: \"Insert Row Before\",\n action(): void {\n const data: ContentData = store.state.data;\n const selected: SelectedData = store.state.data.selected;\n const row: number = selected.row;\n if (row != -1) {\n data.rows = insertIndexX(\n new Array(store.state.data.cols.length),\n data.rows,\n row - 1\n );\n toast(`Inserted row after ${row}`);\n data.selected.row++;\n } else {\n toast(\"No row selected!\", \"error\");\n }\n },\n },\n {\n name: \"Insert Row After\",\n action(): void {\n const data: ContentData = store.state.data;\n const selected: SelectedData = store.state.data.selected;\n const row: number = selected.row;\n if (row != -1) {\n data.rows = insertIndexX(\n new Array(store.state.data.cols.length),\n data.rows,\n row\n );\n toast(`Inserted row after ${row}`);\n } else {\n toast(\"No row selected!\", \"error\");\n }\n },\n },\n {},\n {\n name: \"Insert Column\",\n action(): void {\n toast(\"Inserted column\");\n store.state.data.cols.push(\"\");\n },\n },\n {\n name: \"Insert Column Before\",\n action(): void {\n const data: ContentData = store.state.data;\n const selected: SelectedData = store.state.data.selected;\n const col: number = selected.col;\n if (col != -1) {\n data.cols = insertIndexX(\"\", data.cols, col - 1);\n data.rows = insertIndexY(\"\", data.rows, col - 1);\n toast(`Inserted column after ${col}`);\n data.selected.col++;\n } else {\n toast(\"No column selected!\", \"error\");\n }\n },\n },\n {\n name: \"Insert Column After\",\n action(): void {\n const data: ContentData = store.state.data;\n const selected: SelectedData = store.state.data.selected;\n const col: number = selected.col;\n if (col != -1) {\n data.cols = insertIndexX(\"\", data.cols, col);\n data.rows = insertIndexY(\"\", data.rows, col);\n toast(`Inserted column after ${col}`);\n } else {\n toast(\"No column selected!\", \"error\");\n }\n },\n },\n ],\n },\n ];\n\n expand(item: ToolbarItem): void {\n item.expanded = true;\n this.expanded = true;\n }\n\n closeAll(): void {\n this.expanded = false;\n for (const other of this.toolbar) {\n other.expanded = false;\n }\n }\n\n action(item: ToolbarItem): void {\n if (item.action) {\n item.action();\n this.closeAll();\n }\n }\n}\n","import { render } from \"./Header.vue?vue&type=template&id=1ff6007a&scoped=true&ts=true\"\nimport script from \"./Header.vue?vue&type=script&lang=ts\"\nexport * from \"./Header.vue?vue&type=script&lang=ts\"\n\nimport \"./Header.vue?vue&type=style&index=0&id=1ff6007a&scoped=true&lang=scss\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1ff6007a\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, vModelText as _vModelText, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, withModifiers as _withModifiers, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-da1df7d0\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"th\", null, [\n /*#__PURE__*/_createElementVNode(\"p\", null, \"id\")\n], -1))\nconst _hoisted_2 = [\"onClick\"]\nconst _hoisted_3 = [\"onUpdate:modelValue\", \"data-col\"]\nconst _hoisted_4 = [\"onDblclick\"]\nconst _hoisted_5 = [\"onClick\", \"data-row\"]\nconst _hoisted_6 = [\"onClick\", \"onDblclick\"]\nconst _hoisted_7 = [\"data-col\", \"data-row\", \"onUpdate:modelValue\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"table\", null, [\n _createElementVNode(\"thead\", null, [\n _createElementVNode(\"tr\", null, [\n _hoisted_1,\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.cols, (_, index) => {\n return (_openBlock(), _createElementBlock(\"th\", {\n key: index,\n onClick: ($event: any) => (_ctx.select(-1, index)),\n class: _normalizeClass({ selected: _ctx.selected.col == index })\n }, [\n (_ctx.editColumnIndex == index)\n ? _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"col-input\",\n type: \"text\",\n \"onUpdate:modelValue\": ($event: any) => ((_ctx.cols[index]) = $event),\n \"data-col\": index,\n onBlur: _cache[0] || (_cache[0] = ($event: any) => (_ctx.editColumn(-1)))\n }, null, 40, _hoisted_3)), [\n [_vModelText, _ctx.cols[index]]\n ])\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"p\", {\n onDblclick: ($event: any) => (_ctx.editColumn(index))\n }, _toDisplayString(_ctx.cols[index]), 41, _hoisted_4)\n ], 10, _hoisted_2))\n }), 128))\n ])\n ]),\n _createElementVNode(\"tbody\", null, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.rows, (_, rowIndex) => {\n return (_openBlock(), _createElementBlock(\"tr\", {\n class: _normalizeClass({ selected: _ctx.selected.row == rowIndex }),\n key: rowIndex,\n onClick: _withModifiers(($event: any) => (_ctx.select(rowIndex, -1)), [\"self\"]),\n \"data-row\": rowIndex\n }, [\n _createElementVNode(\"td\", null, [\n _createElementVNode(\"p\", null, _toDisplayString(rowIndex + 1), 1)\n ]),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.cols, (_, colIndex) => {\n return (_openBlock(), _createElementBlock(\"td\", {\n key: colIndex,\n class: _normalizeClass({ selected: _ctx.selected.col == colIndex }),\n onClick: ($event: any) => (_ctx.select(rowIndex, colIndex)),\n onDblclick: ($event: any) => (_ctx.editRow(rowIndex, colIndex))\n }, [\n (_ctx.editRowIndex == rowIndex && _ctx.editRowColumnIndex == colIndex)\n ? _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n key: 0,\n class: \"row-input\",\n \"data-col\": colIndex,\n \"data-row\": rowIndex,\n type: \"text\",\n \"onUpdate:modelValue\": ($event: any) => ((_ctx.rows[rowIndex][colIndex]) = $event),\n onBlur: _cache[1] || (_cache[1] = ($event: any) => (_ctx.editRow(-1, -1)))\n }, null, 40, _hoisted_7)), [\n [_vModelText, _ctx.rows[rowIndex][colIndex]]\n ])\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"p\", null, _toDisplayString(_ctx.rows[rowIndex][colIndex]), 1)\n ], 42, _hoisted_6))\n }), 128))\n ], 10, _hoisted_5))\n }), 128))\n ])\n ]))\n}","\nimport store, { RowData, SelectedData } from \"@/store\";\nimport { Options, Vue } from \"vue-class-component\";\n\n@Options({\n watch: {\n dMoveTo() {\n this.scrollToRow(store.state.data.moveTo);\n },\n },\n})\nexport default class ContentTable extends Vue {\n displayedRows = 50;\n lastScrollPoint = 0;\n\n editColumnIndex = -1;\n editRowIndex = -1;\n editRowColumnIndex = -1;\n\n editColumn(index: number): void {\n this.editColumnIndex = index;\n this.editRowIndex = -1;\n this.editRowColumnIndex = -1;\n this.$nextTick(function () {\n const element: HTMLElement | null = document.querySelector(\n `.col-input[data-col=\"${this.editColumnIndex}\"]`\n );\n if (!element) return;\n element.focus();\n });\n }\n\n editRow(index: number, column: number): void {\n this.editRowIndex = index;\n this.editRowColumnIndex = column;\n this.editColumnIndex = -1;\n this.$nextTick(function () {\n const element: HTMLElement | null = document.querySelector(\n `.row-input[data-col=\"${this.editRowColumnIndex}\"][data-row=\"${this.editRowIndex}\"]`\n );\n if (!element) return;\n element.focus();\n });\n }\n\n get rows(): RowData[][] {\n const rows = store.state.data.rows;\n if (rows.length > this.displayedRows) {\n return rows.slice(0, this.displayedRows);\n } else {\n return rows;\n }\n }\n\n set rows(value: RowData[][]) {\n store.state.data.rows = value;\n }\n\n get selected(): SelectedData {\n return store.state.data.selected;\n }\n\n get cols(): string[] {\n return store.state.data.cols;\n }\n\n set cols(value: string[]) {\n store.state.data.cols = value;\n }\n\n get dMoveTo(): number {\n return store.state.data.moveTo;\n }\n\n scrollToRow(row: number): void {\n if (row == -1) return;\n if (row > this.displayedRows) {\n this.displayedRows = row + 5;\n }\n store.state.data.selected.row = row;\n this.$nextTick(function () {\n const element: HTMLElement | null = document.querySelector(\n `tr[data-row=\"${row}\"]`\n );\n if (element == null) return;\n element.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n });\n }\n\n select(rowIndex: number, colIndex: number): void {\n store.state.data.selected = {\n col: colIndex,\n row: rowIndex,\n };\n }\n\n mounted(): void {\n this.$el.onscroll = () => {\n var sh = this.$el.scrollHeight;\n var st = this.$el.scrollTop;\n var ht = this.$el.offsetHeight;\n if (ht == 0 || st >= sh - ht) {\n this.displayedRows += 10;\n }\n };\n }\n}\n","import { render } from \"./ContentTable.vue?vue&type=template&id=da1df7d0&scoped=true&ts=true\"\nimport script from \"./ContentTable.vue?vue&type=script&lang=ts\"\nexport * from \"./ContentTable.vue?vue&type=script&lang=ts\"\n\nimport \"./ContentTable.vue?vue&type=style&index=0&id=da1df7d0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-da1df7d0\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-6aa23c7c\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"buttons\" }\nconst _hoisted_2 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", { class: \"material-icons\" }, \"download\", -1))\nconst _hoisted_3 = [\n _hoisted_2\n]\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"i\", { class: \"material-icons\" }, \"refresh\", -1))\nconst _hoisted_5 = [\n _hoisted_4\n]\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"img\", {\n id: \"graph\",\n src: \"\",\n alt: \"\",\n usemap: \"#canvas-map\"\n}, null, -1))\nconst _hoisted_7 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"canvas\", {\n id: \"graphCanvas\",\n usemap: \"#canvas-map\"\n}, null, -1))\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"map\", {\n name: \"canvas-map\",\n id: \"canvasMap\"\n}, null, -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Loader = _resolveComponent(\"Loader\")!\n const _component_GraphControls = _resolveComponent(\"GraphControls\")!\n\n return (_openBlock(), _createElementBlock(\"div\", {\n id: \"graphWrapper\",\n class: _normalizeClass({ loading: _ctx.loading })\n }, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"button\", {\n class: \"button--icon\",\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.download && _ctx.download(...args)))\n }, _hoisted_3),\n _createElementVNode(\"button\", {\n class: \"button--icon\",\n onClick: _cache[1] || (_cache[1] = \n//@ts-ignore\n(...args) => (_ctx.resizeGraph && _ctx.resizeGraph(...args)))\n }, _hoisted_5)\n ]),\n _createElementVNode(\"div\", {\n id: \"canvasWrapper\",\n class: _normalizeClass({ scaled: _ctx.scaled })\n }, [\n _createVNode(_component_Loader, {\n show: _ctx.loading,\n message: 'Loading Graph'\n }, null, 8, [\"show\"]),\n _hoisted_6,\n _hoisted_7,\n _hoisted_8\n ], 2),\n _createVNode(_component_GraphControls, { onResize: _ctx.resizeGraph }, null, 8, [\"onResize\"])\n ], 2))\n}","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, vModelSelect as _vModelSelect, withDirectives as _withDirectives, createCommentVNode as _createCommentVNode, vModelCheckbox as _vModelCheckbox, createTextVNode as _createTextVNode, vModelText as _vModelText, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-795e60df\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"material-icons\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"controls\"\n}\nconst _hoisted_3 = { class: \"controls__box controls__box--axies\" }\nconst _hoisted_4 = {\n key: 0,\n class: \"select\"\n}\nconst _hoisted_5 = { class: \"select__label\" }\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"option\", { value: \"-1\" }, \"None\", -1))\nconst _hoisted_7 = [\"value\"]\nconst _hoisted_8 = {\n key: 1,\n class: \"select\"\n}\nconst _hoisted_9 = { class: \"select__label\" }\nconst _hoisted_10 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"option\", { value: \"-1\" }, \"None\", -1))\nconst _hoisted_11 = [\"value\"]\nconst _hoisted_12 = {\n key: 2,\n class: \"select\"\n}\nconst _hoisted_13 = { class: \"select__label\" }\nconst _hoisted_14 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"option\", { value: \"-1\" }, \"None\", -1))\nconst _hoisted_15 = [\"value\"]\nconst _hoisted_16 = { class: \"controls__box--long\" }\nconst _hoisted_17 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"label\", { class: \"controls__box--long__title\" }, \"Settings\", -1))\nconst _hoisted_18 = { class: \"controls__box--long__content\" }\nconst _hoisted_19 = {\n key: 0,\n class: \"checkbox\"\n}\nconst _hoisted_20 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"checkbox__mark\" }, null, -1))\nconst _hoisted_21 = [\"onUpdate:modelValue\"]\nconst _hoisted_22 = { class: \"checkbox__text\" }\nconst _hoisted_23 = {\n key: 1,\n class: \"slider\",\n for: \"\"\n}\nconst _hoisted_24 = { class: \"slider__name\" }\nconst _hoisted_25 = { class: \"slider__value\" }\nconst _hoisted_26 = { class: \"slider__wrapper\" }\nconst _hoisted_27 = { class: \"slider__clamp\" }\nconst _hoisted_28 = [\"min\", \"max\", \"onUpdate:modelValue\"]\nconst _hoisted_29 = { class: \"slider__clamp\" }\nconst _hoisted_30 = {\n key: 2,\n class: \"input\",\n for: \"\"\n}\nconst _hoisted_31 = { class: \"input__name\" }\nconst _hoisted_32 = [\"onUpdate:modelValue\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"button\", {\n class: \"controls-min button--icon\",\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.toggleControls && _ctx.toggleControls(...args)))\n }, [\n _createElementVNode(\"i\", _hoisted_1, _toDisplayString(_ctx.controls ? \"expand_more\" : \"expand_less\"), 1)\n ]),\n (_ctx.controls)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n (_ctx.graphType.axisNames[0])\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n _createElementVNode(\"label\", _hoisted_5, _toDisplayString(_ctx.graphType.axisNames[0]), 1),\n _withDirectives(_createElementVNode(\"select\", {\n class: \"select__input\",\n name: \"\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.graphData.xAxis) = $event))\n }, [\n _hoisted_6,\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.contentData.cols, (col, index) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: index,\n key: index\n }, _toDisplayString(col), 9, _hoisted_7))\n }), 128))\n ], 512), [\n [_vModelSelect, _ctx.graphData.xAxis]\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.graphType.axisNames[1])\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"label\", _hoisted_9, _toDisplayString(_ctx.graphType.axisNames[1]), 1),\n _withDirectives(_createElementVNode(\"select\", {\n class: \"select__input\",\n name: \"\",\n \"onUpdate:modelValue\": _cache[2] || (_cache[2] = ($event: any) => ((_ctx.graphData.yAxis) = $event))\n }, [\n _hoisted_10,\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.contentData.cols, (col, index) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: index,\n key: index\n }, _toDisplayString(col), 9, _hoisted_11))\n }), 128))\n ], 512), [\n [_vModelSelect, _ctx.graphData.yAxis]\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.graphType.axisNames[2])\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n _createElementVNode(\"label\", _hoisted_13, _toDisplayString(_ctx.graphType.axisNames[2]), 1),\n _withDirectives(_createElementVNode(\"select\", {\n class: \"select__input\",\n name: \"\",\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.graphData.zAxis) = $event))\n }, [\n _hoisted_14,\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.contentData.cols, (col, index) => {\n return (_openBlock(), _createElementBlock(\"option\", {\n value: index,\n key: index\n }, _toDisplayString(col), 9, _hoisted_15))\n }), 128))\n ], 512), [\n [_vModelSelect, _ctx.graphData.zAxis]\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_16, [\n _hoisted_17,\n _createElementVNode(\"div\", _hoisted_18, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.graphType.settings, (setting, index) => {\n return (_openBlock(), _createElementBlock(_Fragment, { key: index }, [\n (setting.type == 'toggle')\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_19, [\n _hoisted_20,\n _withDirectives(_createElementVNode(\"input\", {\n class: \"checkbox__input\",\n type: \"checkbox\",\n name: \"\",\n \"onUpdate:modelValue\": ($event: any) => ((_ctx.graphData.settings.values[setting.key]) = $event)\n }, null, 8, _hoisted_21), [\n [_vModelCheckbox, _ctx.graphData.settings.values[setting.key]]\n ]),\n _createElementVNode(\"span\", _hoisted_22, _toDisplayString(setting.name), 1)\n ]))\n : _createCommentVNode(\"\", true),\n (setting.type == 'slider')\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_23, [\n _createElementVNode(\"span\", _hoisted_24, [\n _createTextVNode(_toDisplayString(setting.name) + \" \", 1),\n _createElementVNode(\"span\", _hoisted_25, _toDisplayString(_ctx.graphData.settings.values[setting.key]), 1)\n ]),\n _createElementVNode(\"span\", _hoisted_26, [\n _createElementVNode(\"span\", _hoisted_27, _toDisplayString(setting.min), 1),\n _withDirectives(_createElementVNode(\"input\", {\n class: \"slider__input\",\n type: \"range\",\n name: \"\",\n id: \"\",\n min: setting.min,\n max: setting.max,\n \"onUpdate:modelValue\": ($event: any) => ((_ctx.graphData.settings.values[setting.key]) = $event)\n }, null, 8, _hoisted_28), [\n [_vModelText, _ctx.graphData.settings.values[setting.key]]\n ]),\n _createElementVNode(\"span\", _hoisted_29, _toDisplayString(setting.max), 1)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (setting.type == 'number')\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_30, [\n _createElementVNode(\"span\", _hoisted_31, _toDisplayString(setting.name), 1),\n _withDirectives(_createElementVNode(\"input\", {\n type: \"number\",\n name: \"\",\n id: \"\",\n \"onUpdate:modelValue\": ($event: any) => ((_ctx.graphData.settings.values[setting.key]) = $event)\n }, null, 8, _hoisted_32), [\n [_vModelText, _ctx.graphData.settings.values[setting.key]]\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ], 64))\n }), 128))\n ])\n ])\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { Options, Vue } from \"vue-class-component\";\nimport store, { ContentData, GraphData } from \"@/store\";\nimport graphTypes from \"@/graph/list\";\nimport { GraphTypeData } from \"@/graph/types\";\n\n@Options({\n props: [\"resizeGraph\"],\n emits: [\"resize\"],\n})\nexport default class GraphControls extends Vue {\n width = 0;\n height = 0;\n controls = true;\n\n toggleControls(): void {\n this.controls = !this.controls;\n this.$nextTick(function () {\n this.$emit(\"resize\");\n });\n }\n\n get graphData(): GraphData {\n return store.state.graph;\n }\n\n set graphData(value: GraphData) {\n store.state.graph = value;\n }\n\n get graphType(): GraphTypeData {\n return graphTypes[this.graphData.type];\n }\n\n get size(): number {\n return store.state.graph.size;\n }\n\n set size(value: number) {\n store.state.graph.size = value;\n }\n\n get contentData(): ContentData {\n return store.state.data;\n }\n}\n","import { render } from \"./GraphControls.vue?vue&type=template&id=795e60df&scoped=true&ts=true\"\nimport script from \"./GraphControls.vue?vue&type=script&lang=ts\"\nexport * from \"./GraphControls.vue?vue&type=script&lang=ts\"\n\nimport \"./GraphControls.vue?vue&type=style&index=0&id=795e60df&lang=scss&scoped=true\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-795e60df\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nimport _imports_0 from '@/assets/img/logo-white.svg'\n\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-316b0550\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n class: \"loader-wrapper\"\n}\nconst _hoisted_2 = { class: \"loader\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"img\", {\n class: \"loader__icon\",\n src: _imports_0,\n alt: \"NZGM\",\n title: \"NZGrapherModern\"\n}, null, -1))\nconst _hoisted_4 = { class: \"loader__message\" }\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"loader__ellipsis\" }, [\n /*#__PURE__*/_createElementVNode(\"div\"),\n /*#__PURE__*/_createElementVNode(\"div\"),\n /*#__PURE__*/_createElementVNode(\"div\"),\n /*#__PURE__*/_createElementVNode(\"div\")\n], -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_ctx.show)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _createElementVNode(\"p\", _hoisted_4, _toDisplayString(_ctx.message), 1),\n _hoisted_5\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}","\nimport { Options, Vue } from \"vue-class-component\";\n\n@Options({\n props: [\"show\", \"message\"],\n})\nexport default class Loader extends Vue {\n}\n","import { render } from \"./Loader.vue?vue&type=template&id=316b0550&scoped=true&ts=true\"\nimport script from \"./Loader.vue?vue&type=script&lang=ts\"\nexport * from \"./Loader.vue?vue&type=script&lang=ts\"\n\nimport \"./Loader.vue?vue&type=style&index=0&id=316b0550&lang=scss&scoped=true\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-316b0550\"]])\n\nexport default __exports__","\nimport { Options, Vue } from \"vue-class-component\";\n\nimport store, { ContentData, GraphData } from \"@/store\";\nimport { hideLoader, showLoader, startDownloadBlob, toast } from \"@/tools\";\n\nimport { watermark } from \"@/graph\";\nimport graphTypes from \"@/graph/list\";\n\nimport GraphControls from \"@/components/GraphControls.vue\";\nimport Loader from \"@/components/Loader.vue\";\n@Options({\n components: {\n GraphControls,\n Loader,\n },\n watch: {\n contentData: {\n handler() {\n this.renderGraph();\n },\n deep: true,\n },\n graph: {\n handler() {\n this.renderGraph();\n },\n deep: true,\n },\n },\n})\nexport default class Graph extends Vue {\n width = 0;\n height = 0;\n graphWrapper: HTMLElement | undefined;\n graphCanvas: HTMLCanvasElement | undefined;\n graphImg: HTMLImageElement | undefined;\n scaled = false;\n loading = false;\n\n mounted(): void {\n this.graphWrapper = document.getElementById(\"canvasWrapper\") as HTMLElement;\n this.graphCanvas = document.getElementById(\n \"graphCanvas\"\n ) as HTMLCanvasElement;\n this.graphImg = document.getElementById(\"graph\") as HTMLImageElement;\n this.resizeGraph();\n document.addEventListener(\"app-resize\", (): void => {\n this.resizeGraph();\n this.loading = false;\n });\n document.addEventListener(\"app-resize-start\", (): void => {\n this.loading = true; \n });\n }\n\n resizeGraph(): void {\n if (this.graphWrapper == null) return;\n this.graph.scaleFactor = 1;\n if (this.size == 0) {\n // Auto\n this.width = this.graphWrapper.offsetWidth;\n this.height = this.graphWrapper.offsetHeight;\n } else if (this.size == 1) {\n // Auto - HighRes\n this.width = this.graphWrapper.offsetWidth * 5;\n this.height = this.graphWrapper.offsetHeight * 5;\n this.graph.scaleFactor = 5;\n } else if (this.size == 2) {\n // Standard\n this.width = 800;\n this.height = 600;\n } else if (this.size == 3) {\n // Small\n this.width = 500;\n this.height = 400;\n } else if (this.size == 4) {\n // Short\n this.width = 800;\n this.height = 300;\n }\n this.scaled = this.graph.scaleFactor == 5;\n this.renderGraph();\n }\n\n renderGraph(): void {\n if (this.graphImg == null || this.graphCanvas == null) {\n return;\n }\n const ctx: CanvasRenderingContext2D = this.graphCanvas.getContext(\n \"2d\"\n ) as CanvasRenderingContext2D;\n const canvas = ctx.canvas;\n canvas.width = this.width;\n canvas.height = this.height;\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.imageSmoothingEnabled = true;\n ctx.fillStyle = \"#ffffff\";\n ctx.rect(0, 0, canvas.width, canvas.height);\n ctx.fill();\n\n const graph = graphTypes[this.graphType];\n graph.func(ctx);\n watermark(ctx, ctx.canvas.width, ctx.canvas.height);\n const data = canvas.toDataURL();\n this.graphImg.src = data;\n }\n\n resetMap(): void {\n const map: HTMLMapElement = document.getElementById(\n \"canvasMap\"\n ) as HTMLMapElement;\n map.innerHTML = \"\";\n }\n\n download(): void {\n const graphCanvas: HTMLCanvasElement = document.getElementById(\n \"graphCanvas\"\n ) as HTMLCanvasElement;\n showLoader(\"Downloading Image\");\n graphCanvas.toBlob((data: Blob | null) => {\n if (!data) {\n toast(\"Failed to create image download\", \"error\");\n } else {\n startDownloadBlob(data, \"graph.png\");\n hideLoader();\n }\n });\n }\n\n get size(): number {\n return store.state.graph.size;\n }\n\n get graphType(): string {\n return store.state.graph.type;\n }\n\n get graph(): GraphData {\n return store.state.graph;\n }\n\n get contentData(): ContentData {\n return store.state.data;\n }\n}\n","import { render } from \"./Graph.vue?vue&type=template&id=6aa23c7c&scoped=true&ts=true\"\nimport script from \"./Graph.vue?vue&type=script&lang=ts\"\nexport * from \"./Graph.vue?vue&type=script&lang=ts\"\n\nimport \"./Graph.vue?vue&type=style&index=0&id=6aa23c7c&lang=scss&scoped=true\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6aa23c7c\"]])\n\nexport default __exports__","import { renderSlot as _renderSlot, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-61afb3e9\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"resizable\" }\nconst _hoisted_2 = {\n class: \"resizable__content\",\n \"data-position\": \"left\"\n}\nconst _hoisted_3 = {\n class: \"resizable__content\",\n \"data-position\": \"right\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _renderSlot(_ctx.$slots, \"left\", {}, undefined, true)\n ]),\n _createElementVNode(\"span\", {\n class: \"resizable__handle\",\n onMousedown: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.startResize && _ctx.startResize(...args)))\n }, null, 32),\n _createElementVNode(\"div\", _hoisted_3, [\n _renderSlot(_ctx.$slots, \"right\", {}, undefined, true)\n ])\n ]))\n}","\nimport { clamp } from \"@/tools/math\";\nimport { Vue } from \"vue-class-component\";\n\nexport default class App extends Vue {\n dragging = false;\n\n startResize(): void {\n this.dragging = true;\n const event = new CustomEvent(\"app-resize-start\", {});\n document.dispatchEvent(event);\n }\n\n mounted(): void {\n const app: HTMLElement = document.getElementById(\"app\") as HTMLElement;\n const parent: HTMLElement = this.$el;\n const leftChild: HTMLElement | null = parent.querySelector(\n '.resizable__content[data-position=\"left\"]'\n );\n const rightChild: HTMLElement | null = parent.querySelector(\n '.resizable__content[data-position=\"right\"]'\n );\n const handle: HTMLElement = parent.querySelector(\n \".resizable__handle\"\n ) as HTMLElement;\n\n if (leftChild == null && rightChild !== null) {\n rightChild.style.width = \"100%\";\n handle.style.left = \"calc(100% - 10px)\";\n } else if (rightChild == null && leftChild !== null) {\n leftChild.style.width = \"100%\";\n handle.style.left = \"calc(100% - 10px)\";\n } else if (rightChild != null && leftChild != null) {\n leftChild.style.width = \"40%\";\n rightChild.style.width = \"60%\";\n rightChild.style.left = \"40%\";\n handle.style.left = \"calc(40% - 5px)\";\n\n document.onmousemove = (event: MouseEvent): void => {\n if (!this.dragging) return;\n app.classList.add(\"resizing\");\n event = event || window.event;\n let x: number;\n if (event.pageX == null && event.clientX != null) {\n x = event.clientX;\n } else {\n x = event.pageX;\n }\n const leftPercent: number = clamp(\n ((x - parent.offsetLeft) / parent.offsetWidth) * 100,\n 5,\n 90\n );\n\n const rightPercent: number = 100 - leftPercent;\n leftChild.style.width = leftPercent + \"%\";\n rightChild.style.width = rightPercent + \"%\";\n rightChild.style.left = leftPercent + \"%\";\n handle.style.left = `calc(${leftPercent}% - 5px)`;\n };\n \n document.onmouseup = () => {\n app.classList.remove(\"resizing\");\n this.dragging = false;\n const event = new CustomEvent(\"app-resize\", {});\n document.dispatchEvent(event);\n };\n }\n }\n}\n","import { render } from \"./ResizableGrid.vue?vue&type=template&id=61afb3e9&scoped=true&ts=true\"\nimport script from \"./ResizableGrid.vue?vue&type=script&lang=ts\"\nexport * from \"./ResizableGrid.vue?vue&type=script&lang=ts\"\n\nimport \"./ResizableGrid.vue?vue&type=style&index=0&id=61afb3e9&lang=scss&scoped=true\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-61afb3e9\"]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3ef29b86\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = { class: \"wrapper\" }\nconst _hoisted_2 = [\"data-type\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.toasts, (toast, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"toast\",\n key: index,\n \"data-type\": toast.type\n }, _toDisplayString(toast.text), 9, _hoisted_2))\n }), 128))\n ]))\n}","\nimport store, { Toast } from \"@/store\";\nimport { Options, Vue } from \"vue-class-component\";\n\n@Options({\n watch: {\n toasts: {\n handler() {\n this.createTimeouts();\n },\n deep: true,\n },\n },\n})\nexport default class Loader extends Vue {\n get toasts(): Toast[] {\n return store.state.toasts;\n }\n set toasts(value: Toast[]) {\n store.state.toasts = value;\n }\n\n createTimeouts(): void {\n for (const toast of this.toasts) {\n if (!toast.timeout) {\n toast.timeout = setTimeout(() => {\n this.toasts = this.toasts.filter((t) => t.id != toast.id);\n }, toast.duration);\n }\n }\n }\n}\n","import { render } from \"./Toaster.vue?vue&type=template&id=3ef29b86&scoped=true&ts=true\"\nimport script from \"./Toaster.vue?vue&type=script&lang=ts\"\nexport * from \"./Toaster.vue?vue&type=script&lang=ts\"\n\nimport \"./Toaster.vue?vue&type=style&index=0&id=3ef29b86&lang=scss&scoped=true\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3ef29b86\"]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, vModelCheckbox as _vModelCheckbox, withDirectives as _withDirectives, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\nimport _imports_0 from '@/assets/img/logo-white.svg'\nimport _imports_1 from '@/assets/img/github.svg'\n\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-3b42e224\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"heading\" }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n src: _imports_0,\n alt: \"NZGM\",\n title: \"NZGrapherModern\",\n width: \"148\",\n height: \"90\"\n })\n], -1))\nconst _hoisted_2 = { class: \"content\" }\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"h2\", null, \"What is NZGM\", -1))\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"b\", null, \"NZGM\"),\n /*#__PURE__*/_createTextVNode(),\n /*#__PURE__*/_createElementVNode(\"span\", null, \"NZGrapher Modern\"),\n /*#__PURE__*/_createTextVNode(\") is a graphing tool designed to out perform and improve upon \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://github.com/mathsnz/NZGrapher/\",\n target: \"_blank\",\n rel: \"noopener\"\n }, \"NZGrapher\"),\n /*#__PURE__*/_createTextVNode(\" using more modern technologies and taking a serverless aproach. \")\n], -1))\nconst _hoisted_5 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { class: \"features\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", null, [\n /*#__PURE__*/_createElementVNode(\"i\", { class: \"material-icons\" }, \"dns\"),\n /*#__PURE__*/_createElementVNode(\"h3\", null, \"Serverless Aproach\"),\n /*#__PURE__*/_createElementVNode(\"p\", null, \" This application does not require a backend server to run so it can be installed and run completely offline. The only time a server is present in this app is for distributing the source files. \")\n ]),\n /*#__PURE__*/_createElementVNode(\"div\", null, [\n /*#__PURE__*/_createElementVNode(\"i\", { class: \"material-icons\" }, \"cloud\"),\n /*#__PURE__*/_createElementVNode(\"h3\", null, \"Mordern Techologies\"),\n /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createElementVNode(\"b\", null, \"NZGM\"),\n /*#__PURE__*/_createTextVNode(\" is using modern techologies such as \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://v3.vuejs.org/\",\n target: \"_blank\",\n rel: \"noopener\"\n }, \"VueJS\"),\n /*#__PURE__*/_createTextVNode(\" and \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://www.typescriptlang.org/\",\n target: \"_blank\",\n rel: \"noopener\"\n }, \"TypeScript\"),\n /*#__PURE__*/_createTextVNode(\" these allow the app to be well put together and prevent errors while also encourages faster development times. \")\n ])\n ])\n], -1))\nconst _hoisted_6 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\" This project is created and maintained by \"),\n /*#__PURE__*/_createElementVNode(\"b\", null, \"Jacob Read\"),\n /*#__PURE__*/_createTextVNode(\" (Jacobtread) you can view my github here. \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n class: \"github-button\",\n href: \"https://github.com/jacobtread/\",\n target: \"_blank\",\n rel: \"noopener\"\n }, [\n /*#__PURE__*/_createElementVNode(\"img\", {\n src: _imports_1,\n alt: \"GitHub Logo\"\n }),\n /*#__PURE__*/_createTextVNode(\"GitHub\")\n ]),\n /*#__PURE__*/_createTextVNode(\" or at \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://github.com/jacobtread/\",\n target: \"_blank\",\n rel: \"noopener\"\n }, \"https://github.com/jacobtread/\"),\n /*#__PURE__*/_createTextVNode(\" and you can view the source code for this app at \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://github.com/jacobtread/NZGM\",\n target: \"_blank\",\n rel: \"noopener\"\n }, \"https://github.com/jacobtread/NZGM\")\n], -1))\nconst _hoisted_7 = { class: \"checkbox\" }\nconst _hoisted_8 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"checkbox__mark\" }, null, -1))\nconst _hoisted_9 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"checkbox__text\" }, \"Dont show this dialog again.\", -1))\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Dialog = _resolveComponent(\"Dialog\")!\n\n return (_openBlock(), _createBlock(_component_Dialog, {\n open: _ctx.show,\n class: \"about-dialog\"\n }, {\n default: _withCtx(() => [\n _hoisted_1,\n _createElementVNode(\"div\", _hoisted_2, [\n _hoisted_3,\n _hoisted_4,\n _hoisted_5,\n _hoisted_6,\n _createElementVNode(\"button\", {\n class: \"start-button\",\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.hideAbout && _ctx.hideAbout(...args)))\n }, \"Start Using\"),\n _createElementVNode(\"label\", _hoisted_7, [\n _hoisted_8,\n _withDirectives(_createElementVNode(\"input\", {\n class: \"checkbox__input\",\n type: \"checkbox\",\n name: \"\",\n \"onUpdate:modelValue\": _cache[1] || (_cache[1] = ($event: any) => ((_ctx.hideNext) = $event))\n }, null, 512), [\n [_vModelCheckbox, _ctx.hideNext]\n ]),\n _hoisted_9\n ])\n ])\n ]),\n _: 1\n }, 8, [\"open\"]))\n}","export interface Storage {\n\n bool(key: string, defaultValue: boolean): boolean;\n\n set(key: string, value: string | number | boolean): void;\n}\n\nexport default {\n bool(key: string, defaultValue = false): boolean {\n const rawValue: string | null = localStorage.getItem(key);\n if (rawValue == null) return defaultValue;\n if (rawValue == \"true\") return true;\n else if (rawValue == \"false\") return false;\n return defaultValue;\n },\n set(key: string, value: string | number | boolean): void {\n if (typeof value == \"string\") localStorage.setItem(key, value);\n else localStorage.setItem(key, `${value}`)\n }\n}","\nimport { Options, Vue } from \"vue-class-component\";\nimport storage from \"@/storage\";\n\nimport Dialog from \"@/components/Dialog.vue\";\n\n@Options({\n components: { Dialog },\n})\nexport default class About extends Vue {\n open = true;\n hideNext = false;\n\n get show(): boolean {\n const showAbout: boolean = storage.bool(\"show-about\", true);\n if (!showAbout) {\n return false;\n }\n return this.open;\n }\n\n hideAbout(): void {\n storage.set(\"show-about\", !this.hideNext);\n this.open = false;\n }\n}\n","import { render } from \"./About.vue?vue&type=template&id=3b42e224&scoped=true&ts=true\"\nimport script from \"./About.vue?vue&type=script&lang=ts\"\nexport * from \"./About.vue?vue&type=script&lang=ts\"\n\nimport \"./About.vue?vue&type=style&index=0&id=3b42e224&lang=scss&scoped=true\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3b42e224\"]])\n\nexport default __exports__","\nimport { Options, Vue } from \"vue-class-component\";\nimport store, { LoadingData } from \"@/store\";\n\nimport Header from \"@/components/Header.vue\";\nimport ContentTable from \"@/components/ContentTable.vue\";\nimport Graph from \"@/components/Graph.vue\";\nimport ResizableGrid from \"@/components/ResizableGrid.vue\";\nimport Loader from \"@/components/Loader.vue\";\nimport Toaster from \"@/components/Toaster.vue\";\nimport About from \"@/components/About.vue\";\n\n@Options({\n components: {\n Header,\n ContentTable,\n Graph,\n ResizableGrid,\n Loader,\n Toaster,\n About\n },\n})\nexport default class App extends Vue {\n get loading(): LoadingData {\n return store.state.loading;\n }\n}\n","import { render } from \"./App.vue?vue&type=template&id=03b41e8f&ts=true\"\nimport script from \"./App.vue?vue&type=script&lang=ts\"\nexport * from \"./App.vue?vue&type=script&lang=ts\"\n\nimport \"./App.vue?vue&type=style&index=0&id=03b41e8f&lang=scss\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createApp } from \"vue\";\nimport App from \"@/App.vue\";\nimport store from \"@/store\";\nimport \"@/registerServiceWorker\";\n\nimport { importCSVFromURL } from \"@/tools\";\nimport { addDefaultSettings } from \"@/graph\";\nimport graphTypes from \"@/graph/list\";\n\nfunction importExample(): void {\n importCSVFromURL(\"https://raw.githubusercontent.com/mathsnz/NZGrapher/master/grapher/datasets/Babies.csv\").then().catch();\n const graph = store.state.graph;\n graph.title = \"Babies Graph\";\n graph.type = \"dot-plot\"\n graph.xAxis = 1;\n graph.yAxis = -1;\n graph.zAxis = -1;\n graph.size = 0;\n graph.scaleFactor = 1;\n addDefaultSettings(graphTypes[\"dot-plot\"].settings)\n}\n\nimportExample();\n\ncreateApp(App)\n .use(store)\n .mount(\"#app\");\n","/* eslint-disable no-console */\n\nimport { register } from \"register-service-worker\";\n\nif (process.env.NODE_ENV === \"production\") {\n register(`${process.env.BASE_URL}service-worker.js`, {\n ready() {\n console.log(\n \"App is being served from cache by a service worker.\\n\" +\n \"For more details, visit https://goo.gl/AFskqB\"\n );\n },\n registered() {\n console.log(\"Service worker has been registered.\");\n },\n cached() {\n console.log(\"Content has been cached for offline use.\");\n },\n updatefound() {\n console.log(\"New content is downloading.\");\n },\n updated() {\n console.log(\"New content is available; please refresh.\");\n },\n offline() {\n console.log(\n \"No internet connection found. App is running in offline mode.\"\n );\n },\n error(error) {\n console.error(\"Error during service worker registration:\", error);\n },\n });\n}\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Loader.vue?vue&type=style&index=0&id=316b0550&lang=scss&scoped=true\"","module.exports = __webpack_public_path__ + \"img/logo-white.847a59ff.svg\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./ResizableGrid.vue?vue&type=style&index=0&id=61afb3e9&lang=scss&scoped=true\""],"sourceRoot":""}