main.js 92 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. /*
  2. * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
  3. * This devtool is neither made for production nor for readable output files.
  4. * It uses "eval()" calls to create a separate source file in the browser devtools.
  5. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
  6. * or disable the default devtool with "devtool: false".
  7. * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
  8. */
  9. /******/ (() => { // webpackBootstrap
  10. /******/ var __webpack_modules__ = ({
  11. /***/ "./node_modules/sql.js-httpvfs/dist/index.js":
  12. /*!***************************************************!*\
  13. !*** ./node_modules/sql.js-httpvfs/dist/index.js ***!
  14. \***************************************************/
  15. /***/ (function(module) {
  16. eval("{!function(e,t){if(true)module.exports=t();else // removed by dead control flow\n{ var r, n; }}(this,(function(){return(()=>{\"use strict\";var e={870:(e,t,n)=>{n.r(t),n.d(t,{createEndpoint:()=>o,expose:()=>l,proxy:()=>v,proxyMarker:()=>r,releaseProxy:()=>a,transfer:()=>y,transferHandlers:()=>c,windowEndpoint:()=>g,wrap:()=>f});const r=Symbol(\"Comlink.proxy\"),o=Symbol(\"Comlink.endpoint\"),a=Symbol(\"Comlink.releaseProxy\"),i=Symbol(\"Comlink.thrown\"),s=e=>\"object\"==typeof e&&null!==e||\"function\"==typeof e,c=new Map([[\"proxy\",{canHandle:e=>s(e)&&e[r],serialize(e){const{port1:t,port2:n}=new MessageChannel;return l(e,t),[n,[n]]},deserialize:e=>(e.start(),f(e))}],[\"throw\",{canHandle:e=>s(e)&&i in e,serialize({value:e}){let t;return t=e instanceof Error?{isError:!0,value:{message:e.message,name:e.name,stack:e.stack}}:{isError:!1,value:e},[t,[]]},deserialize(e){if(e.isError)throw Object.assign(new Error(e.value.message),e.value);throw e.value}}]]);function l(e,t=self){t.addEventListener(\"message\",(function n(r){if(!r||!r.data)return;const{id:o,type:a,path:s}=Object.assign({path:[]},r.data),c=(r.data.argumentList||[]).map(w);let f;try{const t=s.slice(0,-1).reduce(((e,t)=>e[t]),e),n=s.reduce(((e,t)=>e[t]),e);switch(a){case 0:f=n;break;case 1:t[s.slice(-1)[0]]=w(r.data.value),f=!0;break;case 2:f=n.apply(t,c);break;case 3:f=v(new n(...c));break;case 4:{const{port1:t,port2:n}=new MessageChannel;l(e,n),f=y(t,[t])}break;case 5:f=void 0}}catch(e){f={value:e,[i]:0}}Promise.resolve(f).catch((e=>({value:e,[i]:0}))).then((e=>{const[r,i]=b(e);t.postMessage(Object.assign(Object.assign({},r),{id:o}),i),5===a&&(t.removeEventListener(\"message\",n),u(t))}))})),t.start&&t.start()}function u(e){(function(e){return\"MessagePort\"===e.constructor.name})(e)&&e.close()}function f(e,t){return d(e,[],t)}function p(e){if(e)throw new Error(\"Proxy has been released and is not useable\")}function d(e,t=[],n=function(){}){let r=!1;const i=new Proxy(n,{get(n,o){if(p(r),o===a)return()=>E(e,{type:5,path:t.map((e=>e.toString()))}).then((()=>{u(e),r=!0}));if(\"then\"===o){if(0===t.length)return{then:()=>i};const n=E(e,{type:0,path:t.map((e=>e.toString()))}).then(w);return n.then.bind(n)}return d(e,[...t,o])},set(n,o,a){p(r);const[i,s]=b(a);return E(e,{type:1,path:[...t,o].map((e=>e.toString())),value:i},s).then(w)},apply(n,a,i){p(r);const s=t[t.length-1];if(s===o)return E(e,{type:4}).then(w);if(\"bind\"===s)return d(e,t.slice(0,-1));const[c,l]=m(i);return E(e,{type:2,path:t.map((e=>e.toString())),argumentList:c},l).then(w)},construct(n,o){p(r);const[a,i]=m(o);return E(e,{type:3,path:t.map((e=>e.toString())),argumentList:a},i).then(w)}});return i}function m(e){const t=e.map(b);return[t.map((e=>e[0])),(n=t.map((e=>e[1])),Array.prototype.concat.apply([],n))];// removed by dead control flow\n{ var n; }}const h=new WeakMap;function y(e,t){return h.set(e,t),e}function v(e){return Object.assign(e,{[r]:!0})}function g(e,t=self,n=\"*\"){return{postMessage:(t,r)=>e.postMessage(t,n,r),addEventListener:t.addEventListener.bind(t),removeEventListener:t.removeEventListener.bind(t)}}function b(e){for(const[t,n]of c)if(n.canHandle(e)){const[r,o]=n.serialize(e);return[{type:3,name:t,value:r},o]}return[{type:0,value:e},h.get(e)||[]]}function w(e){switch(e.type){case 3:return c.get(e.name).deserialize(e.value);case 0:return e.value}}function E(e,t,n){return new Promise((r=>{const o=new Array(4).fill(0).map((()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16))).join(\"-\");e.addEventListener(\"message\",(function t(n){n.data&&n.data.id&&n.data.id===o&&(e.removeEventListener(\"message\",t),r(n.data))})),e.start&&e.start(),e.postMessage(Object.assign({id:o},t),n)}))}},162:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)\"default\"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t};Object.defineProperty(t,\"__esModule\",{value:!0}),t.createDbWorker=void 0;const i=a(n(870));async function s(e){if(e.data&&\"eval\"===e.data.action){const t=new Int32Array(e.data.notify,0,2),n=new Uint8Array(e.data.notify,8);let r;try{r={ok:await u(e.data.request)}}catch(t){console.error(\"worker request error\",e.data.request,t),r={err:String(t)}}const o=(new TextEncoder).encode(JSON.stringify(r));n.set(o,0),t[1]=o.length,Atomics.notify(t,0)}}function c(e){if(\"BODY\"===e.tagName)return\"body\";const t=[];for(;e.parentElement&&\"BODY\"!==e.tagName;){if(e.id){t.unshift(\"#\"+e.id);break}{let n=1,r=e;for(;r.previousElementSibling;)r=r.previousElementSibling,n++;t.unshift(e.tagName.toLowerCase()+\":nth-child(\"+n+\")\")}e=e.parentElement}return t.join(\" > \")}function l(e){return Object.keys(e)}async function u(e){if(console.log(\"dom vtable request\",e),\"select\"===e.type)return[...document.querySelectorAll(e.selector)].map((t=>{const n={};for(const r of e.columns)\"selector\"===r?n.selector=c(t):\"parent\"===r?t.parentElement&&(n.parent=t.parentElement?c(t.parentElement):null):\"idx\"===r||(n[r]=t[r]);return n}));if(\"insert\"===e.type){if(!e.value.parent)throw Error('\"parent\" column must be set when inserting');const t=document.querySelectorAll(e.value.parent);if(0===t.length)throw Error(`Parent element ${e.value.parent} could not be found`);if(t.length>1)throw Error(`Parent element ${e.value.parent} ambiguous (${t.length} results)`);const n=t[0];if(!e.value.tagName)throw Error(\"tagName must be set for inserting\");const r=document.createElement(e.value.tagName);for(const t of l(e.value))if(null!==e.value[t]){if(\"tagName\"===t||\"parent\"===t)continue;if(\"idx\"===t||\"selector\"===t)throw Error(`${t} can't be set`);r[t]=e.value[t]}return n.appendChild(r),null}if(\"update\"===e.type){const t=document.querySelector(e.value.selector);if(!t)throw Error(`Element ${e.value.selector} not found!`);const n=[];for(const r of l(e.value)){const o=e.value[r];if(\"parent\"!==r){if(\"idx\"!==r&&\"selector\"!==r&&o!==t[r]){if(console.log(\"SETTING \",r,t[r],\"->\",o),\"tagName\"===r)throw Error(\"can't change tagName\");n.push(r)}}else if(o!==c(t.parentElement)){const e=document.querySelectorAll(o);if(1!==e.length)throw Error(`Invalid target parent: found ${e.length} matches`);e[0].appendChild(t)}}for(const r of n)t[r]=e.value[r];return null}throw Error(`unknown request ${e.type}`)}i.transferHandlers.set(\"WORKERSQLPROXIES\",{canHandle:e=>!1,serialize(e){throw Error(\"no\")},deserialize:e=>(e.start(),i.wrap(e))}),t.createDbWorker=async function(e,t,n,r=1/0){const o=new Worker(t),a=i.wrap(o),c=await a.SplitFileHttpDatabase(n,e,void 0,r);return o.addEventListener(\"message\",s),{db:c,worker:a,configs:e}}},432:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)\"default\"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,\"__esModule\",{value:!0}),o(n(162),t)}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r].call(a.exports,a,a.exports,n),a.exports}return n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n(432)})()}));\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack://reports/./node_modules/sql.js-httpvfs/dist/index.js?\n}");
  17. /***/ }),
  18. /***/ "./node_modules/sql.js-httpvfs/dist/sql-wasm.wasm":
  19. /*!********************************************************!*\
  20. !*** ./node_modules/sql.js-httpvfs/dist/sql-wasm.wasm ***!
  21. \********************************************************/
  22. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  23. "use strict";
  24. eval("{module.exports = __webpack_require__.p + \"8a2a3c8efae774018112.wasm\";\n\n//# sourceURL=webpack://reports/./node_modules/sql.js-httpvfs/dist/sql-wasm.wasm?\n}");
  25. /***/ }),
  26. /***/ "./node_modules/sql.js-httpvfs/dist/sqlite.worker.js":
  27. /*!***********************************************************!*\
  28. !*** ./node_modules/sql.js-httpvfs/dist/sqlite.worker.js ***!
  29. \***********************************************************/
  30. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  31. "use strict";
  32. eval("{module.exports = __webpack_require__.p + \"9181ee78cd72b9be8ba3.js\";\n\n//# sourceURL=webpack://reports/./node_modules/sql.js-httpvfs/dist/sqlite.worker.js?\n}");
  33. /***/ }),
  34. /***/ "./src/core.ts":
  35. /*!*********************!*\
  36. !*** ./src/core.ts ***!
  37. \*********************/
  38. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  39. "use strict";
  40. eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createGraph: () => (/* binding */ createGraph),\n/* harmony export */ createTable: () => (/* binding */ createTable),\n/* harmony export */ switchPlot: () => (/* binding */ switchPlot)\n/* harmony export */ });\n/* harmony import */ var _main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./main */ \"./src/main.ts\");\n/* harmony import */ var _permalink__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./permalink */ \"./src/permalink.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\n\n\n\nfunction switchPlot() {\n const graphSelect = document.getElementById(\"graphType\");\n const graph = _main__WEBPACK_IMPORTED_MODULE_0__.graphs.find(obj => obj.id == graphSelect.value);\n // Configure layout\n const oldGraph = document.getElementById(\"mainPlot\");\n oldGraph?.remove();\n const newGraph = document.createElement(\"div\");\n newGraph.id = \"mainPlot\";\n const graphContainer = document.getElementById(\"mainPlotContainer\");\n graphContainer?.appendChild(newGraph);\n // Get data\n const configValues = {};\n graph?.configFieldIDs.forEach(id => {\n const inputElem = document.getElementById(id);\n configValues[id] = inputElem?.value;\n });\n (0,_permalink__WEBPACK_IMPORTED_MODULE_1__.updatePermalink)();\n (async () => {\n graph?.generatePlot(configValues, \"mainPlot\");\n })();\n}\n// Creating a Plotly graph using several defaults\n// Define defaults\nconst defaultData = { marker: { color: 'rgb(247, 166, 0)' }, hovertemplate: '%{x}: %{y:,.3~s}<extra></extra>' };\nconst defaultLayout = {\n title: {\n font: { color: '#eee', family: '\"Droid Sans\", sans-serif' }\n },\n xaxis: {\n title: {\n font: { color: '#bbb', family: '\"Droid Sans\", sans-serif' }\n },\n tickfont: { color: '#666', family: '\"Droid Sans\", sans-serif' },\n tickangle: -45\n },\n yaxis: {\n title: {\n font: { color: '#bbb', family: '\"Droid Sans\", sans-serif' }\n },\n tickfont: { color: '#666', family: '\"Droid Sans\", sans-serif' },\n gridcolor: '#323232'\n },\n plot_bgcolor: '#252525',\n paper_bgcolor: '#252525',\n dragmode: 'pan'\n};\nconst defaultConfig = {\n displayModeBar: true,\n modeBarButtonsToRemove: ['lasso2d'], // Remove unwanted buttons\n displaylogo: false,\n scrollZoom: true,\n responsive: true\n};\n// Actually create the graph\nfunction createGraph(plotContainerID, data, layout, config) {\n // Assign default values\n for (var i = 0; i < data.length; i++) {\n data[i] = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.deepMerge)(structuredClone(defaultData), data[i]);\n }\n layout = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.deepMerge)(structuredClone(defaultLayout), layout);\n config = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.deepMerge)(structuredClone(defaultConfig), config);\n // @ts-ignore\n Plotly.newPlot(plotContainerID, { 'data': data, 'layout': layout, 'config': config });\n}\n// Create a table\nfunction createTable(plotContainerID, titleText, headers, data, dataDisplay) {\n const container = document.getElementById(plotContainerID);\n if (!container) {\n return;\n }\n // Create title\n const title = document.createElement(\"div\");\n title.textContent = titleText;\n title.classList.add(\"title\");\n container.appendChild(title);\n const table = document.createElement(\"table\");\n // Create header\n const header = document.createElement(\"thead\");\n const headRow = document.createElement(\"tr\");\n headers.forEach(label => {\n const column = document.createElement(\"th\");\n column.textContent = label;\n headRow.appendChild(column);\n });\n header.appendChild(headRow);\n table.appendChild(header);\n // Create body\n const body = document.createElement(\"tbody\");\n dataDisplay.forEach((dataRow) => {\n const row = document.createElement(\"tr\");\n dataRow.forEach(dataElem => {\n const td = document.createElement(\"td\");\n td.appendChild(dataElem);\n row.appendChild(td);\n });\n body.appendChild(row);\n });\n table.appendChild(body);\n container.appendChild(table);\n}\n\n\n//# sourceURL=webpack://reports/./src/core.ts?\n}");
  41. /***/ }),
  42. /***/ "./src/graphs/companyHistory.ts":
  43. /*!**************************************!*\
  44. !*** ./src/graphs/companyHistory.ts ***!
  45. \**************************************/
  46. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  47. "use strict";
  48. eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CompanyHistory: () => (/* binding */ CompanyHistory)\n/* harmony export */ });\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core */ \"./src/core.ts\");\n/* harmony import */ var _staticData_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../staticData/constants */ \"./src/staticData/constants.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ \"./src/utils.ts\");\n\n\n\nclass CompanyHistory {\n constructor(loadedData, urlParams) {\n this.id = \"compHistory\";\n this.displayName = \"Company History\";\n this.configFieldIDs = [\"metric\", \"companyName\"];\n this.loadedData = loadedData;\n this.urlParams = urlParams;\n }\n setConfigs(useURLParams) {\n const updateFunc = function () { (0,_core__WEBPACK_IMPORTED_MODULE_0__.switchPlot)(); };\n const configDiv = document.getElementById(\"selectorSubtypes\");\n if (configDiv) {\n (0,_utils__WEBPACK_IMPORTED_MODULE_2__.clearChildren)(configDiv);\n }\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_2__.addConfigField)(\"select\", \"metric\", \"Metric: \", { prettyValues: [\"Volume\", \"Profit\", \"Bases\"], values: [\"volume\", \"profit\", \"bases\"] }, useURLParams ? this.urlParams.metric : undefined, updateFunc));\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_2__.addConfigField)(\"input\", \"companyName\", \"Username: \", undefined, useURLParams ? this.urlParams.companyName : undefined, updateFunc, \"-27px\"));\n }\n async generatePlot(configValues, plotContainerID) {\n if (!configValues.companyName || configValues.companyName == \"\") {\n return;\n }\n // Get Data\n var companyData;\n if (configValues.metric == 'bases') {\n companyData = await (0,_utils__WEBPACK_IMPORTED_MODULE_2__.query)(\"SELECT ci.username, bi.bases, bi.month FROM BaseInfo bi LEFT JOIN CompanyInfo ci ON ci.id = bi.id WHERE LOWER(ci.username) = LOWER('\" + configValues.companyName + \"')\");\n }\n else {\n companyData = await (0,_utils__WEBPACK_IMPORTED_MODULE_2__.query)(\"SELECT ci.username, tcd.\" + configValues.metric + \", tcd.month FROM TotalCompanyProd tcd LEFT JOIN CompanyInfo ci on ci.id = tcd.id WHERE LOWER(ci.username) = LOWER('\" + configValues.companyName + \"')\");\n }\n companyData.sort(_utils__WEBPACK_IMPORTED_MODULE_2__.monthSort);\n const months = companyData.map(item => _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.monthsPrettyMap[item.month]);\n const companyArray = companyData.map(item => item[configValues.metric]);\n // Create graph\n const titles = {\n 'profit': 'Production Profit History of ',\n 'volume': 'Production Volume History of ',\n 'bases': 'Base Count History of '\n };\n const yAxis = {\n 'profit': 'Daily Profit [$/day]',\n 'volume': 'Daily Volume [$/day]',\n 'bases': 'Bases'\n };\n (0,_core__WEBPACK_IMPORTED_MODULE_0__.createGraph)(plotContainerID, [{ x: months, y: companyArray, type: 'bar' }], {\n width: this.urlParams.hideOptions !== undefined ? undefined : 800,\n height: this.urlParams.hideOptions !== undefined ? undefined : 400,\n autosize: this.urlParams.hideOptions !== undefined,\n ...(this.urlParams.hideOptions !== undefined ? { margin: {\n l: 60, // left\n r: 10, // right\n t: 40, // top\n b: 60 // bottom\n } } : {}),\n title: { text: titles[configValues.metric] + configValues.companyName },\n xaxis: {\n title: { text: 'Month' }\n },\n yaxis: {\n title: { text: yAxis[configValues.metric] }\n }\n }, {});\n }\n}\n\n\n//# sourceURL=webpack://reports/./src/graphs/companyHistory.ts?\n}");
  49. /***/ }),
  50. /***/ "./src/graphs/companyRank.ts":
  51. /*!***********************************!*\
  52. !*** ./src/graphs/companyRank.ts ***!
  53. \***********************************/
  54. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  55. "use strict";
  56. eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CompanyRank: () => (/* binding */ CompanyRank)\n/* harmony export */ });\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core */ \"./src/core.ts\");\n/* harmony import */ var _staticData_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../staticData/constants */ \"./src/staticData/constants.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ \"./src/utils.ts\");\n\n\n\nclass CompanyRank {\n constructor(loadedData, urlParams) {\n this.id = \"compRank\";\n this.displayName = \"Company Rank\";\n this.configFieldIDs = [\"month\", \"companyName\"];\n this.loadedData = loadedData;\n this.urlParams = urlParams;\n }\n setConfigs(useURLParams) {\n const updateFunc = function () { (0,_core__WEBPACK_IMPORTED_MODULE_0__.switchPlot)(); };\n const configDiv = document.getElementById(\"selectorSubtypes\");\n if (configDiv) {\n (0,_utils__WEBPACK_IMPORTED_MODULE_2__.clearChildren)(configDiv);\n }\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_2__.addConfigField)(\"select\", \"month\", \"Month: \", { prettyValues: _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.monthsPretty, \"values\": _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months }, useURLParams && this.urlParams.month ? this.urlParams.month : _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months[_staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months.length - 1], updateFunc));\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_2__.addConfigField)(\"input\", \"companyName\", \"Username: \", undefined, useURLParams ? this.urlParams.companyName : undefined, updateFunc, \"-27px\"));\n }\n async generatePlot(configValues, plotContainerID) {\n if (!configValues.companyName || configValues.companyName == \"\") {\n return;\n }\n // Get Company Data\n const knownCompanies = await (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getData)(this.loadedData, \"knownCompanies\");\n // Get Company ID\n var companyID = await (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getCompanyId)(configValues.companyName, this.loadedData);\n if (!companyID) {\n return;\n }\n var companyName = knownCompanies[companyID];\n // Get Data\n const fullCompanyData = await (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getData)(this.loadedData, \"company\", configValues.month); // Company data for the current month\n const fullPrevCompanyData = configValues.month == _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months[0] ? { individual: {} } : await (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getData)(this.loadedData, \"company\", _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months[_staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months.indexOf(configValues.month) - 1]);\n const companyData = fullCompanyData.individual[companyID]; // Company data for this company for this month\n const prevCompanyData = fullPrevCompanyData.individual[companyID]; // Company data for this company for last month. May be undefined.\n if (!companyData) {\n return;\n }\n var tableData = []; // Entries in the table in raw data form\n var tableDisplay = []; // Entries in the table in presentable form\n Object.keys(companyData).forEach(ticker => {\n const tableRow = [companyData[ticker].rank, ticker, companyData[ticker].amount, companyData[ticker].volume, companyData[ticker].profit];\n const tableDisplayRow = [];\n // Add company rank\n if (prevCompanyData) {\n const outerRankDiv = document.createElement(\"div\");\n const symbolDiv = document.createElement(\"div\");\n const rankDiv = document.createElement(\"div\");\n outerRankDiv.style.display = \"flex\";\n symbolDiv.style.width = \"14px\";\n symbolDiv.style.minWidth = \"14px\";\n symbolDiv.style.marginRight = \"2px\";\n const prevRank = prevCompanyData[ticker]?.rank;\n const increasing = prevRank < companyData[ticker].rank;\n if (prevRank && prevRank != companyData[ticker].rank) {\n symbolDiv.textContent = increasing ? \"▼\" : \"▲\";\n symbolDiv.style.color = increasing ? \"#d9534f\" : \"#5cb85c\";\n }\n rankDiv.textContent = companyData[ticker].rank;\n outerRankDiv.appendChild(symbolDiv);\n outerRankDiv.appendChild(rankDiv);\n tableDisplayRow.push(outerRankDiv);\n }\n else {\n const rankDiv = document.createElement(\"div\");\n rankDiv.textContent = companyData[ticker].rank;\n tableDisplayRow.push(rankDiv);\n }\n // Add ticker\n const tickerDiv = document.createElement(\"div\");\n tickerDiv.textContent = ticker;\n tableDisplayRow.push(tickerDiv);\n // Add amount\n const amountDiv = document.createElement(\"div\");\n amountDiv.textContent = companyData[ticker].amount.toLocaleString(undefined, { maximumFractionDigits: 1 });\n tableDisplayRow.push(amountDiv);\n // Add volume\n const volumeDiv = document.createElement(\"div\");\n volumeDiv.textContent = \"$\" + companyData[ticker].volume.toLocaleString(undefined, { notation: \"compact\", maximumSignificantDigits: 3 });\n tableDisplayRow.push(volumeDiv);\n // Add profit\n const profitDiv = document.createElement(\"div\");\n var profitText;\n if (companyData[ticker].profit < 0) {\n profitText = \"-$\" + (-companyData[ticker].profit).toLocaleString(undefined, { notation: \"compact\", maximumSignificantDigits: 3 });\n }\n else {\n profitText = \"$\" + companyData[ticker].profit.toLocaleString(undefined, { notation: \"compact\", maximumSignificantDigits: 3 });\n }\n profitDiv.textContent = profitText;\n tableDisplayRow.push(profitDiv);\n tableData.push(tableRow);\n tableDisplay.push(tableDisplayRow);\n });\n // Sort by rank by default\n const indices = tableData.map((_, i) => i)\n .sort((a, b) => tableData[a][0] - tableData[b][0]);\n tableData = indices.map(i => tableData[i]);\n tableDisplay = indices.map(i => tableDisplay[i]);\n // Get overall ranks for the title\n const volumeRank = fullCompanyData.totals.volumeRank;\n const title = \"Production Ranking of \" + companyName + \" - \" + (0,_utils__WEBPACK_IMPORTED_MODULE_2__.prettyMonthName)(configValues.month) + \"\\nVolume: #\" + fullCompanyData.totals[companyID].volumeRank + \", Profit: #\" + fullCompanyData.totals[companyID].profitRank;\n const headers = [\"Rank\", \"Ticker\", \"Amount [/day]\", \"Volume [$/day]\", \"Profit [$/day]\"];\n (0,_core__WEBPACK_IMPORTED_MODULE_0__.createTable)(plotContainerID, title, headers, tableData, tableDisplay);\n }\n}\n\n\n//# sourceURL=webpack://reports/./src/graphs/companyRank.ts?\n}");
  57. /***/ }),
  58. /***/ "./src/graphs/companyTotals.ts":
  59. /*!*************************************!*\
  60. !*** ./src/graphs/companyTotals.ts ***!
  61. \*************************************/
  62. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  63. "use strict";
  64. eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CompanyTotals: () => (/* binding */ CompanyTotals)\n/* harmony export */ });\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core */ \"./src/core.ts\");\n/* harmony import */ var _staticData_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../staticData/constants */ \"./src/staticData/constants.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ \"./src/utils.ts\");\n\n\n\nclass CompanyTotals {\n constructor(loadedData, urlParams) {\n this.id = \"compTotals\";\n this.displayName = \"Company Totals\";\n this.configFieldIDs = [\"chartType\", \"metric\", \"month\", \"companyName\"];\n this.loadedData = loadedData;\n this.urlParams = urlParams;\n }\n setConfigs(useURLParams) {\n const updateFunc = function () { (0,_core__WEBPACK_IMPORTED_MODULE_0__.switchPlot)(); };\n const configDiv = document.getElementById(\"selectorSubtypes\");\n if (configDiv) {\n (0,_utils__WEBPACK_IMPORTED_MODULE_2__.clearChildren)(configDiv);\n }\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_2__.addConfigField)(\"select\", \"chartType\", \"Chart Type: \", { prettyValues: [\"Bar\", \"Pie\", \"Treemap (Mat)\", \"Treemap (Cat)\"], values: [\"bar\", \"pie\", \"treemap\", \"treemap-categories\"] }, useURLParams ? this.urlParams.chartType : undefined, updateFunc, \"-30px\"));\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_2__.addConfigField)(\"select\", \"metric\", \"Metric: \", { prettyValues: [\"Volume\", \"Profit\"], values: [\"volume\", \"profit\"] }, useURLParams ? this.urlParams.metric : undefined, updateFunc));\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_2__.addConfigField)(\"select\", \"month\", \"Month: \", { prettyValues: _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.monthsPretty, \"values\": _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months }, useURLParams && this.urlParams.month ? this.urlParams.month : _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months[_staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months.length - 1], updateFunc));\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_2__.addConfigField)(\"input\", \"companyName\", \"Username: \", undefined, useURLParams ? this.urlParams.companyName : undefined, updateFunc, \"-27px\"));\n }\n async generatePlot(configValues, plotContainerID) {\n if (!configValues.companyName || configValues.companyName == \"\") {\n return;\n }\n // Get Company Data\n const companyData = await (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getData)(this.loadedData, \"company\", configValues.month);\n const knownCompanies = await (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getData)(this.loadedData, \"knownCompanies\");\n // Get Company ID\n var companyID = await (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getCompanyId)(configValues.companyName, this.loadedData);\n if (!companyID) {\n return;\n }\n var companyName = knownCompanies[companyID];\n if (!companyData.individual[companyID]) {\n return;\n }\n // Parse Data\n var catData = []; // Y-axis of chart\n var categories = []; // X-axis of chart\n var totalValue = 0; // Total of metric\n Object.keys(companyData.individual[companyID]).forEach((ticker) => {\n const metric = companyData.individual[companyID][ticker][configValues.metric];\n if (metric < 0 && (configValues.chartType == \"treemap\" || configValues.chartType == \"treemap-categories\")) {\n return;\n }\n totalValue += metric;\n if (configValues.chartType == \"treemap-categories\") {\n const category = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getMatCategory)(ticker);\n const catIndex = categories.indexOf(category);\n if (catIndex == -1) {\n categories.push(category);\n catData.push(metric);\n }\n else {\n catData[catIndex] += metric;\n }\n }\n else {\n catData.push(metric);\n categories.push(ticker);\n }\n });\n // Sort data from largest to smallest categories\n const indices = Array.from(categories.keys());\n indices.sort((a, b) => catData[b] - catData[a]);\n catData = indices.map(i => catData[i]);\n categories = indices.map(i => categories[i]);\n // Create graph\n const titles = {\n 'profit': 'Production Profit Breakdown of ',\n 'volume': 'Production Volume Breakdown of ',\n };\n if (configValues.chartType == \"treemap\" || configValues.chartType == \"treemap-categories\") {\n // Get Colors\n const colors = [];\n if (configValues.chartType == \"treemap\") {\n categories.forEach(cat => {\n colors.push((0,_utils__WEBPACK_IMPORTED_MODULE_2__.getMatColor)(cat));\n });\n }\n else {\n categories.forEach(cat => {\n colors.push(_staticData_constants__WEBPACK_IMPORTED_MODULE_1__.materialCategoryColors[cat] ?? \"#000000\");\n });\n }\n const parents = categories.map(m => \"Total\");\n categories.push(\"Total\");\n catData.push(totalValue);\n parents.push('');\n colors.push('#252525');\n // Make graph\n (0,_core__WEBPACK_IMPORTED_MODULE_0__.createGraph)(plotContainerID, [{\n labels: categories,\n values: catData,\n parents: parents,\n type: 'treemap',\n maxdepth: 2,\n branchvalues: 'total',\n marker: {\n colors: colors,\n },\n tiling: {\n pad: 0,\n },\n textposition: 'middle center',\n hovertemplate: '%{label}<br>$%{value:,.3~s}/day<br>%{percentEntry:.2%}<extra></extra>'\n }], {\n width: this.urlParams.hideOptions !== undefined ? undefined : 800,\n height: this.urlParams.hideOptions !== undefined ? undefined : 400,\n autosize: this.urlParams.hideOptions !== undefined,\n ...(this.urlParams.hideOptions !== undefined ? { margin: {\n l: 10, // left\n r: 10, // right\n t: 40, // top\n b: 10 // bottom\n } } : {}),\n title: { text: titles[configValues.metric] + companyName + ' - ' + (0,_utils__WEBPACK_IMPORTED_MODULE_2__.prettyMonthName)(configValues.month) }\n }, {});\n }\n else if (configValues.chartType == \"bar\") {\n // Create graph\n (0,_core__WEBPACK_IMPORTED_MODULE_0__.createGraph)(plotContainerID, [{ x: categories, y: catData, type: 'bar' }], {\n width: this.urlParams.hideOptions !== undefined ? undefined : 800,\n height: this.urlParams.hideOptions !== undefined ? undefined : 400,\n autosize: this.urlParams.hideOptions !== undefined,\n ...(this.urlParams.hideOptions !== undefined ? { margin: {\n l: 60, // left\n r: 10, // right\n t: 40, // top\n b: 60 // bottom\n } } : {}),\n title: { text: titles[configValues.metric] + companyName + ' - ' + (0,_utils__WEBPACK_IMPORTED_MODULE_2__.prettyMonthName)(configValues.month) },\n xaxis: {\n title: { text: 'Ticker' },\n range: [-0.5, Math.min(categories.length, 30) - 0.5]\n },\n yaxis: {\n title: { text: _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.prettyModeNames[configValues.metric] + ' [$/day]' },\n range: [0, null]\n }\n }, {});\n }\n else if (configValues.chartType == \"pie\") {\n // Create graph\n (0,_core__WEBPACK_IMPORTED_MODULE_0__.createGraph)(plotContainerID, [{ labels: categories, values: catData, type: 'pie', textinfo: 'label', textposition: 'inside', insidetextorientation: 'none', automargin: false, hovertemplate: '%{label}<br>$%{value:,.3~s}/day<br>%{percent}<extra></extra>' }], {\n width: this.urlParams.hideOptions !== undefined ? undefined : 800,\n height: this.urlParams.hideOptions !== undefined ? undefined : 400,\n autosize: this.urlParams.hideOptions !== undefined,\n ...(this.urlParams.hideOptions !== undefined ? { margin: {\n l: 10, // left\n r: 10, // right\n t: 40, // top\n b: 10 // bottom\n } } : {}),\n title: { text: titles[configValues.metric] + companyName + ' - ' + (0,_utils__WEBPACK_IMPORTED_MODULE_2__.prettyMonthName)(configValues.month) },\n xaxis: {\n title: { text: 'Ticker' },\n range: [-0.5, Math.min(categories.length, 30) - 0.5]\n },\n yaxis: {\n title: { text: _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.prettyModeNames[configValues.metric] + ' [$/day]' },\n range: [0, null]\n }\n }, {});\n }\n }\n}\n\n\n//# sourceURL=webpack://reports/./src/graphs/companyTotals.ts?\n}");
  65. /***/ }),
  66. /***/ "./src/graphs/marketOverview.ts":
  67. /*!**************************************!*\
  68. !*** ./src/graphs/marketOverview.ts ***!
  69. \**************************************/
  70. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  71. "use strict";
  72. eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MarketOverview: () => (/* binding */ MarketOverview)\n/* harmony export */ });\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core */ \"./src/core.ts\");\n/* harmony import */ var _staticData_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../staticData/constants */ \"./src/staticData/constants.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ \"./src/utils.ts\");\n\n\n\nclass MarketOverview {\n constructor(loadedData, urlParams) {\n this.id = \"marketOverview\";\n this.displayName = \"Market Overview\";\n this.configFieldIDs = [\"month\", \"ticker\"];\n this.loadedData = loadedData;\n this.urlParams = urlParams;\n }\n setConfigs(useURLParams) {\n const updateFunc = _core__WEBPACK_IMPORTED_MODULE_0__.switchPlot;\n const configDiv = document.getElementById(\"selectorSubtypes\");\n if (configDiv) {\n (0,_utils__WEBPACK_IMPORTED_MODULE_2__.clearChildren)(configDiv);\n }\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_2__.addConfigField)(\"select\", \"month\", \"Month: \", {\n prettyValues: _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.monthsPretty,\n \"values\": _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months\n }, useURLParams && this.urlParams.month ? this.urlParams.month : _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months[_staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months.length - 1], updateFunc));\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_2__.addConfigField)(\"input\", \"ticker\", \"Ticker: \", undefined, useURLParams && this.urlParams.ticker ? this.urlParams.ticker : undefined, updateFunc));\n }\n async generatePlot(configValues, plotContainerID) {\n const ticker = configValues.ticker?.toUpperCase();\n if (!ticker) {\n return;\n }\n const companyData = await (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getData)(this.loadedData, \"company\", configValues.month);\n const knownCompanies = await (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getData)(this.loadedData, \"knownCompanies\");\n const labels = [];\n const parents = [];\n const values = [];\n let totalAmount = 0;\n let totalVolume = 0;\n let totalProfit = 0;\n for (const key of Object.keys(companyData.individual)) {\n const individualData = companyData.individual[key];\n const tickerData = individualData[ticker];\n if (!tickerData) {\n continue;\n }\n labels.push(knownCompanies[key] ?? (key.substring(0, 5) + \"...\"));\n parents.push(\"Total\");\n values.push(tickerData.amount);\n totalVolume += tickerData.volume;\n totalProfit += tickerData.profit;\n totalAmount += tickerData.amount;\n }\n if (labels.length === 0) {\n return;\n }\n labels.push(\"Total\");\n parents.push(\"\");\n values.push(totalAmount);\n const formatMoney = (num) => \"$\" + num.toLocaleString(undefined, { maximumFractionDigits: 0 });\n const title = `${ticker} Market - ${(0,_utils__WEBPACK_IMPORTED_MODULE_2__.prettyMonthName)(configValues.month)}`\n + \"<br>\"\n + `Produced per day: ${Math.round(totalAmount).toLocaleString()} ${ticker}`\n + \"<br>\"\n + `Volume: ${formatMoney(totalVolume)} | Profit: ${formatMoney(totalProfit)}`;\n // Create graph\n (0,_core__WEBPACK_IMPORTED_MODULE_0__.createGraph)(plotContainerID, [{\n labels: labels,\n values: values,\n parents: parents,\n type: \"treemap\",\n branchvalues: \"total\",\n tiling: {\n pad: 0,\n },\n textposition: \"middle center\",\n hovertemplate: \"%{label}<br>%{value:,.3~s}/day<br>%{percentEntry:.2%}<extra></extra>\"\n }], {\n title: { text: title },\n width: this.urlParams.hideOptions !== undefined ? undefined : 800,\n height: this.urlParams.hideOptions !== undefined ? undefined : 400,\n autosize: this.urlParams.hideOptions !== undefined,\n ...(this.urlParams.hideOptions !== undefined ? {\n margin: {\n l: 10, // left\n r: 10, // right\n t: 60, // top\n b: 10 // bottom\n }\n } : {}),\n }, {});\n }\n}\n\n\n//# sourceURL=webpack://reports/./src/graphs/marketOverview.ts?\n}");
  73. /***/ }),
  74. /***/ "./src/graphs/matHistory.ts":
  75. /*!**********************************!*\
  76. !*** ./src/graphs/matHistory.ts ***!
  77. \**********************************/
  78. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  79. "use strict";
  80. eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MatHistory: () => (/* binding */ MatHistory)\n/* harmony export */ });\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core */ \"./src/core.ts\");\n/* harmony import */ var _staticData_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../staticData/constants */ \"./src/staticData/constants.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ \"./src/utils.ts\");\n\n\n\nclass MatHistory {\n constructor(loadedData, urlParams) {\n this.id = \"matHistory\";\n this.displayName = \"MAT History\";\n this.configFieldIDs = [\"metric\", \"ticker\"];\n this.loadedData = loadedData;\n this.urlParams = urlParams;\n }\n setConfigs(useURLParams) {\n const updateFunc = function () { (0,_core__WEBPACK_IMPORTED_MODULE_0__.switchPlot)(); };\n const configDiv = document.getElementById(\"selectorSubtypes\");\n if (configDiv) {\n (0,_utils__WEBPACK_IMPORTED_MODULE_2__.clearChildren)(configDiv);\n }\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_2__.addConfigField)(\"select\", \"metric\", \"Metric: \", { prettyValues: [\"Volume\", \"Profit\", \"Price\", \"Produced\", \"Consumption\", \"Surplus\"], values: [\"volume\", \"profit\", \"price\", \"amount\", \"consumed\", \"surplus\"] }, useURLParams ? this.urlParams.metric : undefined, updateFunc));\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_2__.addConfigField)(\"input\", \"ticker\", \"Ticker: \", undefined, useURLParams && this.urlParams.ticker ? this.urlParams.ticker : undefined, updateFunc));\n }\n async generatePlot(configValues, plotContainerID) {\n if (!configValues.ticker || configValues.ticker == \"\") {\n return;\n }\n // Get Data\n const totalTickerData = [];\n for (var i = 0; i < _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months.length; i++) {\n const monthData = await (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getData)(this.loadedData, \"prod\", _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months[i]);\n totalTickerData.push(monthData[(configValues.ticker ?? \"\").toUpperCase()]);\n }\n const tickerData = []; // Data for the specific metric\n const validMonths = []; // Months with data\n totalTickerData.forEach((data, i) => {\n if (!data) {\n return;\n }\n validMonths.push(_staticData_constants__WEBPACK_IMPORTED_MODULE_1__.monthsPretty[i]);\n switch (configValues.metric) {\n case \"volume\":\n tickerData.push(data.volume);\n break;\n case \"profit\":\n tickerData.push(data.profit);\n break;\n case \"price\":\n tickerData.push(data.amount == 0 ? 0 : data.volume / data.amount);\n break;\n case \"amount\":\n tickerData.push(data.amount);\n break;\n case \"consumed\":\n tickerData.push(data.consumed);\n break;\n case \"surplus\":\n tickerData.push(data.amount - data.consumed);\n break;\n }\n });\n if (validMonths.length == 0) {\n return;\n }\n const titles = {\n 'profit': 'Production Profit History of ',\n 'volume': 'Production Volume History of ',\n 'amount': 'Production Amount History of ',\n 'price': 'Price History of ',\n 'consumed': 'Consumption History of ',\n 'surplus': 'Surplus Production History of '\n };\n const yAxis = {\n 'profit': 'Daily Profit [$/day]',\n 'volume': 'Daily Volume [$/day]',\n 'amount': 'Daily Production [per day]',\n 'price': 'Price [$]',\n 'consumed': 'Daily Consumption [per day]',\n 'surplus': 'Daily Surplus [per day]'\n };\n // Create graph\n (0,_core__WEBPACK_IMPORTED_MODULE_0__.createGraph)(plotContainerID, [{ x: validMonths, y: tickerData, type: 'bar' }], {\n width: this.urlParams.hideOptions !== undefined ? undefined : 800,\n height: this.urlParams.hideOptions !== undefined ? undefined : 400,\n autosize: this.urlParams.hideOptions !== undefined,\n ...(this.urlParams.hideOptions !== undefined ? { margin: {\n l: 60, // left\n r: 10, // right\n t: 40, // top\n b: 60 // bottom\n } } : {}),\n title: { text: titles[configValues.metric] + (configValues.ticker ?? \"\").toUpperCase() },\n xaxis: {\n title: { text: 'Month' }\n },\n yaxis: {\n title: { text: yAxis[configValues.metric] }\n }\n }, {});\n }\n}\n\n\n//# sourceURL=webpack://reports/./src/graphs/matHistory.ts?\n}");
  81. /***/ }),
  82. /***/ "./src/graphs/topCompanies.ts":
  83. /*!************************************!*\
  84. !*** ./src/graphs/topCompanies.ts ***!
  85. \************************************/
  86. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  87. "use strict";
  88. eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TopCompanies: () => (/* binding */ TopCompanies)\n/* harmony export */ });\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core */ \"./src/core.ts\");\n/* harmony import */ var _staticData_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../staticData/constants */ \"./src/staticData/constants.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ \"./src/utils.ts\");\n\n\n\nclass TopCompanies {\n constructor(loadedData, urlParams) {\n this.id = \"topCompanies\";\n this.displayName = \"Top Companies\";\n this.configFieldIDs = [\"metric\", \"month\"];\n this.loadedData = loadedData;\n this.urlParams = urlParams;\n }\n setConfigs(useURLParams) {\n const updateFunc = function () { (0,_core__WEBPACK_IMPORTED_MODULE_0__.switchPlot)(); };\n const configDiv = document.getElementById(\"selectorSubtypes\");\n if (configDiv) {\n (0,_utils__WEBPACK_IMPORTED_MODULE_2__.clearChildren)(configDiv);\n }\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_2__.addConfigField)(\"select\", \"metric\", \"Metric: \", { prettyValues: [\"Volume\", \"Profit\", \"Bases\"], values: [\"volume\", \"profit\", \"bases\"] }, useURLParams ? this.urlParams.metric : undefined, updateFunc));\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_2__.addConfigField)(\"select\", \"month\", \"Month: \", { prettyValues: _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.monthsPretty, \"values\": _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months }, useURLParams && this.urlParams.month ? this.urlParams.month : _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months[_staticData_constants__WEBPACK_IMPORTED_MODULE_1__.months.length - 1], updateFunc));\n }\n async generatePlot(configValues, plotContainerID) {\n // Get Data\n const companyData = await (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getData)(this.loadedData, configValues.metric == \"bases\" ? \"base\" : \"company\", configValues.month);\n const knownCompanies = await (0,_utils__WEBPACK_IMPORTED_MODULE_2__.getData)(this.loadedData, \"knownCompanies\");\n // Convert the data object into an array of [companyID, volume] pairs\n const volumeArray = Object.entries(configValues.metric == \"bases\" ? companyData : companyData.totals).map(([companyID, info]) => ({\n companyID,\n volume: info[configValues.metric]\n }));\n // Sort the array by volume in descending order\n volumeArray.sort((a, b) => b.volume - a.volume);\n // Extract tickers and volumes into separate arrays\n const companyIDs = volumeArray.map(item => item.companyID);\n const volumes = volumeArray.map(item => item.volume);\n const companyNames = [];\n companyIDs.forEach(id => {\n companyNames.push(knownCompanies[id] || (id.slice(0, 5) + \"...\"));\n });\n // Create graph\n (0,_core__WEBPACK_IMPORTED_MODULE_0__.createGraph)(plotContainerID, [{ x: companyNames, y: volumes, type: 'bar' }], {\n width: this.urlParams.hideOptions !== undefined ? undefined : 800,\n height: this.urlParams.hideOptions !== undefined ? undefined : 400,\n autosize: this.urlParams.hideOptions !== undefined,\n ...(this.urlParams.hideOptions !== undefined ? { margin: {\n l: 60, // left\n r: 10, // right\n t: 40, // top\n b: 100 // bottom\n } } : {}),\n title: { text: 'Top Companies (' + _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.prettyModeNames[configValues.metric] + ') - ' + (0,_utils__WEBPACK_IMPORTED_MODULE_2__.prettyMonthName)(configValues.month) },\n xaxis: {\n title: { text: 'Ticker' },\n range: [-0.5, 29.5]\n },\n yaxis: {\n title: { text: configValues.metric == \"bases\" ? \"Bases\" : _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.prettyModeNames[configValues.metric] + ' [$/day]' },\n range: [0, null]\n }\n }, {});\n }\n}\n\n\n//# sourceURL=webpack://reports/./src/graphs/topCompanies.ts?\n}");
  89. /***/ }),
  90. /***/ "./src/graphs/topProduction.ts":
  91. /*!*************************************!*\
  92. !*** ./src/graphs/topProduction.ts ***!
  93. \*************************************/
  94. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  95. "use strict";
  96. eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TopProduction: () => (/* binding */ TopProduction)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ \"./src/utils.ts\");\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core */ \"./src/core.ts\");\n/* harmony import */ var _staticData_constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../staticData/constants */ \"./src/staticData/constants.ts\");\n\n\n\nclass TopProduction {\n constructor(loadedData, urlParams) {\n this.id = \"topProduction\";\n this.displayName = \"Top Production\";\n this.configFieldIDs = [\"metric\", \"month\"];\n this.loadedData = loadedData;\n this.urlParams = urlParams;\n }\n setConfigs(useURLParams) {\n const updateFunc = function () { (0,_core__WEBPACK_IMPORTED_MODULE_1__.switchPlot)(); };\n const configDiv = document.getElementById(\"selectorSubtypes\");\n if (configDiv) {\n (0,_utils__WEBPACK_IMPORTED_MODULE_0__.clearChildren)(configDiv);\n }\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_0__.addConfigField)(\"select\", \"metric\", \"Metric: \", { prettyValues: [\"Volume\", \"Profit\", \"Deficit\"], values: [\"volume\", \"profit\", \"deficit\"] }, useURLParams ? this.urlParams.metric : undefined, updateFunc));\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_0__.addConfigField)(\"select\", \"month\", \"Month: \", { prettyValues: _staticData_constants__WEBPACK_IMPORTED_MODULE_2__.monthsPretty, \"values\": _staticData_constants__WEBPACK_IMPORTED_MODULE_2__.months }, useURLParams && this.urlParams.month ? this.urlParams.month : _staticData_constants__WEBPACK_IMPORTED_MODULE_2__.months[_staticData_constants__WEBPACK_IMPORTED_MODULE_2__.months.length - 1], updateFunc));\n }\n async generatePlot(configValues, plotContainerID) {\n // Fields to be queried from table\n const queryFields = configValues.metric == 'deficit' ? 'amount, consumed, volume' : configValues.metric;\n // Get Data\n const prodData = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.query)(\"SELECT ticker, \" + queryFields + \" FROM ProdInfo WHERE month = '\" + configValues.month + \"'\");\n // Process Data\n if (configValues.metric == 'deficit') // Populate deficit into data\n {\n prodData.forEach(row => {\n if (!row.amount || row.amount == 0) {\n row.deficit = 0;\n return;\n }\n row.deficit = (row.amount - (row.consumed || 0)) * row.volume / row.amount;\n });\n }\n if (configValues.metric == 'deficit') {\n prodData.sort((a, b) => a[configValues.metric] - b[configValues.metric]);\n }\n else {\n prodData.sort((a, b) => b[configValues.metric] - a[configValues.metric]);\n }\n // Extract tickers and volumes into separate arrays\n const tickers = prodData.map(item => item.ticker);\n const volumes = prodData.map(item => item[configValues.metric]);\n const titles = {\n 'profit': 'Profit Materials',\n 'volume': 'Production Volumes',\n 'deficit': 'Deficits'\n };\n // Create graph\n (0,_core__WEBPACK_IMPORTED_MODULE_1__.createGraph)(plotContainerID, [{ x: tickers, y: volumes, type: 'bar' }], {\n width: this.urlParams.hideOptions !== undefined ? undefined : 800,\n height: this.urlParams.hideOptions !== undefined ? undefined : 400,\n autosize: this.urlParams.hideOptions !== undefined,\n ...(this.urlParams.hideOptions !== undefined ? { margin: {\n l: 60, // left\n r: 10, // right\n t: 40, // top\n b: 60 // bottom\n } } : {}),\n title: { text: 'Top ' + titles[configValues.metric] + ' - ' + (0,_utils__WEBPACK_IMPORTED_MODULE_0__.prettyMonthName)(configValues.month) },\n xaxis: {\n title: { text: 'Ticker' },\n range: [-0.5, 29.5]\n },\n yaxis: {\n title: { text: _staticData_constants__WEBPACK_IMPORTED_MODULE_2__.prettyModeNames[configValues.metric] + ' [$/day]' },\n range: [(configValues.metric == 'deficit' ? null : 0), (configValues.metric == 'deficit' ? 0 : null)]\n }\n }, {});\n }\n}\n\n\n//# sourceURL=webpack://reports/./src/graphs/topProduction.ts?\n}");
  97. /***/ }),
  98. /***/ "./src/graphs/universeHistory.ts":
  99. /*!***************************************!*\
  100. !*** ./src/graphs/universeHistory.ts ***!
  101. \***************************************/
  102. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  103. "use strict";
  104. eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ UniverseHistory: () => (/* binding */ UniverseHistory)\n/* harmony export */ });\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core */ \"./src/core.ts\");\n/* harmony import */ var _staticData_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../staticData/constants */ \"./src/staticData/constants.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ \"./src/utils.ts\");\n\n\n\nclass UniverseHistory {\n constructor(loadedData, urlParams) {\n this.id = \"universeHistory\";\n this.displayName = \"Universe History\";\n this.configFieldIDs = [\"metric\"];\n this.loadedData = loadedData;\n this.urlParams = urlParams;\n }\n setConfigs(useURLParams) {\n const updateFunc = function () { (0,_core__WEBPACK_IMPORTED_MODULE_0__.switchPlot)(); };\n const configDiv = document.getElementById(\"selectorSubtypes\");\n if (configDiv) {\n (0,_utils__WEBPACK_IMPORTED_MODULE_2__.clearChildren)(configDiv);\n }\n configDiv?.appendChild((0,_utils__WEBPACK_IMPORTED_MODULE_2__.addConfigField)(\"select\", \"metric\", \"Metric: \", { prettyValues: [\"Volume\", \"Profit\", \"Bases\", \"Companies\"], values: [\"volume\", \"profit\", \"bases\", \"companies\"] }, useURLParams ? this.urlParams.metric : undefined, updateFunc));\n }\n async generatePlot(configValues, plotContainerID) {\n // Get Data\n const fullData = await (0,_utils__WEBPACK_IMPORTED_MODULE_2__.query)(\"select month, \" + configValues.metric + \" from UniverseInfo\");\n fullData.sort(_utils__WEBPACK_IMPORTED_MODULE_2__.monthSort);\n const months = fullData.map(x => _staticData_constants__WEBPACK_IMPORTED_MODULE_1__.monthsPrettyMap[x.month]);\n const data = fullData.map(x => x[configValues.metric]);\n // Create graph\n const titles = {\n 'profit': 'Profit History of the Universe',\n 'volume': 'Production Volume History of the Universe',\n 'bases': 'Base Count History of the Universe',\n 'companies': 'Company Count History of the Universe'\n };\n const yAxis = {\n 'profit': 'Daily Profit [$/day]',\n 'volume': 'Daily Volume [$/day]',\n 'bases': 'Bases',\n 'companies': 'Companies'\n };\n (0,_core__WEBPACK_IMPORTED_MODULE_0__.createGraph)(plotContainerID, [{ x: months, y: data, type: 'bar' }], {\n width: this.urlParams.hideOptions !== undefined ? undefined : 800,\n height: this.urlParams.hideOptions !== undefined ? undefined : 400,\n autosize: this.urlParams.hideOptions !== undefined,\n ...(this.urlParams.hideOptions !== undefined ? { margin: {\n l: 60, // left\n r: 10, // right\n t: 40, // top\n b: 60 // bottom\n } } : {}),\n title: { text: titles[configValues.metric] },\n xaxis: {\n title: { text: 'Month' }\n },\n yaxis: {\n title: { text: yAxis[configValues.metric] }\n }\n }, {});\n }\n}\n\n\n//# sourceURL=webpack://reports/./src/graphs/universeHistory.ts?\n}");
  105. /***/ }),
  106. /***/ "./src/main.ts":
  107. /*!*********************!*\
  108. !*** ./src/main.ts ***!
  109. \*********************/
  110. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  111. "use strict";
  112. eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ graphs: () => (/* binding */ graphs)\n/* harmony export */ });\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core */ \"./src/core.ts\");\n/* harmony import */ var _graphs_companyHistory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./graphs/companyHistory */ \"./src/graphs/companyHistory.ts\");\n/* harmony import */ var _graphs_companyRank__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./graphs/companyRank */ \"./src/graphs/companyRank.ts\");\n/* harmony import */ var _graphs_companyTotals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./graphs/companyTotals */ \"./src/graphs/companyTotals.ts\");\n/* harmony import */ var _graphs_matHistory__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./graphs/matHistory */ \"./src/graphs/matHistory.ts\");\n/* harmony import */ var _graphs_topCompanies__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./graphs/topCompanies */ \"./src/graphs/topCompanies.ts\");\n/* harmony import */ var _graphs_topProduction__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./graphs/topProduction */ \"./src/graphs/topProduction.ts\");\n/* harmony import */ var _graphs_universeHistory__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./graphs/universeHistory */ \"./src/graphs/universeHistory.ts\");\n/* harmony import */ var _graphs_marketOverview__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./graphs/marketOverview */ \"./src/graphs/marketOverview.ts\");\n/* harmony import */ var _permalink__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./permalink */ \"./src/permalink.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils */ \"./src/utils.ts\");\n\n\n\n\n\n\n\n\n\n\n\nwindow.onload = function () {\n // Do permalink stuff\n (0,_permalink__WEBPACK_IMPORTED_MODULE_9__.addPermalink)();\n // Populate the graph select with options\n const graphSelect = document.getElementById(\"graphType\");\n graphs.forEach(graph => {\n (0,_utils__WEBPACK_IMPORTED_MODULE_10__.addOption)(graphSelect, graph.displayName, graph.id);\n });\n if (urlParams.type) {\n graphSelect.value = urlParams.type;\n }\n graphSelect.addEventListener(\"change\", function () {\n graphs.find(graph => graph.id == graphSelect.value)?.setConfigs();\n (0,_core__WEBPACK_IMPORTED_MODULE_0__.switchPlot)();\n });\n // Initialize default values\n graphs.find(graph => graph.id == graphSelect.value)?.setConfigs(true);\n (0,_core__WEBPACK_IMPORTED_MODULE_0__.switchPlot)();\n // Set the graphs to fullscreen\n if (urlParams.hideOptions !== undefined) {\n const graphTypeContainer = document.getElementById('graphTypeContainer');\n const topTabs = document.getElementById('topTabContainer');\n const configDiv = document.getElementById(\"selectorSubtypes\");\n const plotContainer = document.getElementById(\"mainPlot\");\n if (topTabs && graphTypeContainer && configDiv) {\n topTabs.style.display = 'none';\n graphTypeContainer.style.display = 'none';\n configDiv.style.display = 'none';\n plotContainer?.classList.add(\"fullScreen\");\n }\n }\n};\nconst urlParams = Object.fromEntries(new URLSearchParams(window.location.search));\nconst loadedData = {};\nconst graphs = [\n new _graphs_topProduction__WEBPACK_IMPORTED_MODULE_6__.TopProduction(loadedData, urlParams),\n new _graphs_topCompanies__WEBPACK_IMPORTED_MODULE_5__.TopCompanies(loadedData, urlParams),\n new _graphs_matHistory__WEBPACK_IMPORTED_MODULE_4__.MatHistory(loadedData, urlParams),\n new _graphs_universeHistory__WEBPACK_IMPORTED_MODULE_7__.UniverseHistory(loadedData, urlParams),\n new _graphs_marketOverview__WEBPACK_IMPORTED_MODULE_8__.MarketOverview(loadedData, urlParams),\n new _graphs_companyTotals__WEBPACK_IMPORTED_MODULE_3__.CompanyTotals(loadedData, urlParams),\n new _graphs_companyHistory__WEBPACK_IMPORTED_MODULE_1__.CompanyHistory(loadedData, urlParams),\n new _graphs_companyRank__WEBPACK_IMPORTED_MODULE_2__.CompanyRank(loadedData, urlParams)\n];\n\n\n//# sourceURL=webpack://reports/./src/main.ts?\n}");
  113. /***/ }),
  114. /***/ "./src/permalink.ts":
  115. /*!**************************!*\
  116. !*** ./src/permalink.ts ***!
  117. \**************************/
  118. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  119. "use strict";
  120. eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ addPermalink: () => (/* binding */ addPermalink),\n/* harmony export */ updatePermalink: () => (/* binding */ updatePermalink)\n/* harmony export */ });\n/* harmony import */ var _main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./main */ \"./src/main.ts\");\n\nfunction addPermalink() {\n // Permalink stuff\n const permalinkContainer = document.getElementById(\"permalinkContainer\");\n const permalinkButton = document.getElementById(\"permalinkButton\");\n const permalinkCopyButton = document.getElementById(\"permalinkCopyButton\");\n const rprunCopyButton = document.getElementById(\"permalinkCopyButton-rprun\");\n const permalinkOptionsButton = document.getElementById(\"hideOptions\");\n const permalinkLatestMonth = document.getElementById(\"latestMonth\");\n permalinkButton?.addEventListener(\"click\", function (e) {\n e.stopPropagation();\n const currentDisplay = permalinkContainer.style.display;\n if (currentDisplay == \"none\") {\n permalinkContainer.style.display = \"block\";\n }\n else {\n permalinkContainer.style.display = \"none\";\n }\n });\n document.addEventListener(\"click\", function (e) {\n if (!permalinkContainer.contains(e.target) && !permalinkButton.contains(e.target)) {\n permalinkContainer.style.display = \"none\";\n }\n });\n permalinkCopyButton.addEventListener(\"click\", function () {\n const permalinkElem = document.getElementById(\"permalink\");\n if (permalinkElem.value && permalinkElem.value != \"\") {\n navigator.clipboard.writeText(permalinkElem.value);\n }\n });\n rprunCopyButton.addEventListener(\"click\", function () {\n const permalinkElem = document.getElementById(\"permalink-rprun\");\n if (permalinkElem.value && permalinkElem.value != \"\") {\n navigator.clipboard.writeText(permalinkElem.value);\n }\n });\n permalinkOptionsButton.addEventListener(\"change\", function () {\n updatePermalink();\n });\n permalinkLatestMonth.addEventListener(\"change\", function () {\n updatePermalink();\n });\n}\nfunction updatePermalink() {\n const graphSelect = document.getElementById(\"graphType\");\n const permalinkInput = document.getElementById(\"permalink\");\n const rprunInput = document.getElementById(\"permalink-rprun\");\n const hideOptionsButton = document.getElementById(\"hideOptions\");\n const latestMonthButton = document.getElementById(\"latestMonth\");\n var permalink = \"https://pmmg-products.github.io/reports/?type=\" + graphSelect.value;\n var rprunLink = \"XIT PRUNSTATS type-\" + graphSelect.value;\n const graph = _main__WEBPACK_IMPORTED_MODULE_0__.graphs.find(obj => obj.id == graphSelect.value);\n graph?.configFieldIDs.forEach(subtype => {\n if (subtype == \"month\" && latestMonthButton.checked) {\n return;\n }\n const inputElem = document.getElementById(subtype);\n if (inputElem.value && inputElem.value != \"\") {\n permalink += \"&\" + subtype + \"=\" + inputElem.value;\n rprunLink += \" \" + subtype + \"-\" + inputElem.value;\n }\n });\n if (hideOptionsButton.checked) {\n permalink += \"&hideOptions\";\n rprunLink += \" hideOptions\";\n }\n permalinkInput.value = permalink;\n rprunInput.value = rprunLink;\n return;\n}\n\n\n//# sourceURL=webpack://reports/./src/permalink.ts?\n}");
  121. /***/ }),
  122. /***/ "./src/staticData/constants.ts":
  123. /*!*************************************!*\
  124. !*** ./src/staticData/constants.ts ***!
  125. \*************************************/
  126. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  127. "use strict";
  128. eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ fullMonthNames: () => (/* binding */ fullMonthNames),\n/* harmony export */ materialCategories: () => (/* binding */ materialCategories),\n/* harmony export */ materialCategoryColors: () => (/* binding */ materialCategoryColors),\n/* harmony export */ months: () => (/* binding */ months),\n/* harmony export */ monthsPretty: () => (/* binding */ monthsPretty),\n/* harmony export */ monthsPrettyMap: () => (/* binding */ monthsPrettyMap),\n/* harmony export */ prettyModeNames: () => (/* binding */ prettyModeNames)\n/* harmony export */ });\nconst months = [\"mar25\", \"apr25\", \"may25\", \"jun25\", \"jul25\", \"aug25\", \"sep25\", \"oct25\", \"nov25\"];\nconst monthsPretty = [\"March 3025\", \"April 3025\", \"May 3025\", \"June 3025\", \"July 3025\", \"August 3025\", \"September 3025\", \"October 3025\", \"November 3025\"];\nconst monthsPrettyMap = Object.fromEntries(months.map((m, i) => [m, monthsPretty[i]]));\nconst fullMonthNames = {\n \"jan\": \"January\",\n \"feb\": \"February\",\n \"mar\": \"March\",\n \"apr\": \"April\",\n \"may\": \"May\",\n \"jun\": \"June\",\n \"jul\": \"July\",\n \"aug\": \"August\",\n \"sep\": \"September\",\n \"oct\": \"October\",\n \"nov\": \"November\",\n \"dec\": \"December\"\n};\nconst prettyModeNames = {\n \"amount\": \"Amount\",\n \"profit\": \"Profit\",\n \"volume\": \"Volume\",\n \"price\": \"Price\",\n \"deficit\": \"Deficit\",\n \"bases\": \"Bases\"\n};\nconst materialCategories = {\n 'Consumables (Luxury)': [\n 'ALE',\n 'COF',\n 'GIN',\n 'KOM',\n 'NST',\n 'PWO',\n 'REP',\n 'SC',\n 'VG',\n 'WIN'\n ],\n 'Ship Engines': [\n 'AEN',\n 'AFP',\n 'AFR',\n 'ANZ',\n 'BFP',\n 'BFR',\n 'CHA',\n 'ENG',\n 'FIR',\n 'FSE',\n 'GCH',\n 'GEN',\n 'GNZ',\n 'HNZ',\n 'HPR',\n 'HTE',\n 'HYR',\n 'LFE',\n 'LFP',\n 'MFE',\n 'NOZ',\n 'QCR',\n 'RAG',\n 'RCS',\n 'RCT',\n 'SFE',\n 'VOE',\n 'VOR'\n ],\n 'Software Tools': [\n 'DA',\n 'DD',\n 'DV',\n 'EDC',\n 'NN',\n 'OS'\n ],\n 'Construction Parts': [\n 'AEF',\n 'AIR',\n 'DEC',\n 'FC',\n 'FLO',\n 'FLP',\n 'GC',\n 'GV',\n 'LIT',\n 'MGC',\n 'MHL',\n 'PSH',\n 'RSH',\n 'TCS',\n 'TRU',\n 'TSH'\n ],\n 'Alloys': [\n 'ALR',\n 'AST',\n 'BGO',\n 'BOS',\n 'BRO',\n 'FAL',\n 'FET',\n 'RGO',\n 'WAL',\n 'WRH'\n ],\n 'Consumable Bundles': [\n 'CBU',\n 'EBU',\n 'PBU',\n 'SBU',\n 'TBU'\n ],\n 'Medical Equipment': [\n 'ADR',\n 'BND',\n 'PK',\n 'SEQ',\n 'STR',\n 'TUB'\n ],\n 'Electronic Parts': [\n 'CD',\n 'DIS',\n 'FAN',\n 'MB',\n 'MPC',\n 'PCB',\n 'RAM',\n 'ROM',\n 'SEN',\n 'TPU',\n 'TRA'\n ],\n 'Energy Systems': [\n 'CBL',\n 'CBM',\n 'CBS',\n 'POW',\n 'SOL',\n 'SP'\n ],\n 'Minerals': [\n 'BER',\n 'BOR',\n 'BRM',\n 'CLI',\n 'GAL',\n 'HAL',\n 'LST',\n 'MAG',\n 'MGS',\n 'SCR',\n 'TAI',\n 'TCO',\n 'TS',\n 'ZIR'\n ],\n 'Construction Materials': [\n 'CMK',\n 'EPO',\n 'GL',\n 'INS',\n 'MCG',\n 'MTC',\n 'NCS',\n 'NFI',\n 'NG',\n 'RG',\n 'SEA'\n ],\n 'Consumables (Basic)': [\n 'DW',\n 'EXO',\n 'FIM',\n 'HMS',\n 'HSS',\n 'LC',\n 'MEA',\n 'MED',\n 'OVE',\n 'PDA',\n 'PT',\n 'RAT',\n 'SCN',\n 'WS'\n ],\n 'Software Systems': [\n 'IDC',\n 'IMM',\n 'SNM',\n 'WAI'\n ],\n 'Electronic Pieces': [\n 'BCO',\n 'BGC',\n 'CAP',\n 'HCC',\n 'LDI',\n 'MFK',\n 'MWF',\n 'SFK',\n 'SWF',\n 'TRN'\n ],\n 'Software Components': [\n 'BAI',\n 'LD',\n 'MLI',\n 'NF',\n 'SA',\n 'SAL',\n 'WM'\n ],\n 'Ores': [\n 'ALO',\n 'AUO',\n 'CUO',\n 'FEO',\n 'LIO',\n 'REO',\n 'SIO',\n 'TIO',\n 'REO'\n ],\n 'Unit Prefabs': [\n 'BR1',\n 'BR2',\n 'BRS',\n 'BSU',\n 'CPU',\n 'CQL',\n 'CQM',\n 'CQS',\n 'CQT',\n 'DOU',\n 'FUN',\n 'HAB',\n 'LU',\n 'RDL',\n 'RDS',\n 'SU',\n 'TCU',\n 'WOR',\n 'BSU',\n 'CPU'\n ],\n 'Ship Shields': [\n 'APT',\n 'ARP',\n 'AWH',\n 'BPT',\n 'BRP',\n 'BWH',\n 'SRP'\n ],\n 'Electronic Devices': [\n 'AAR',\n 'AWF',\n 'BID',\n 'BMF',\n 'BSC',\n 'BWS',\n 'HD',\n 'HOG',\n 'HPC',\n 'MHP',\n 'RAD',\n 'SAR'\n ],\n 'Metals': [\n 'AL',\n 'AU',\n 'CU',\n 'FE',\n 'LI',\n 'RE',\n 'SI',\n 'STL',\n 'TI',\n 'W',\n 'RE'\n ],\n 'Electronic Systems': [\n 'ACS',\n 'ADS',\n 'CC',\n 'COM',\n 'CRU',\n 'FFC',\n 'LIS',\n 'LOG',\n 'STS',\n 'TAC',\n 'WR'\n ],\n 'Textiles': [\n 'CF',\n 'COT',\n 'CTF',\n 'KV',\n 'NL',\n 'SIL',\n 'TK'\n ],\n 'Plastics': [\n 'DCL',\n 'DCM',\n 'DCS',\n 'PE',\n 'PG',\n 'PSL',\n 'PSM',\n 'PSS'\n ],\n 'Chemicals': [\n 'BAC',\n 'BL',\n 'BLE',\n 'CST',\n 'DDT',\n 'EES',\n 'ETC',\n 'FLX',\n 'IND',\n 'JUI',\n 'KRE',\n 'LCR',\n 'NAB',\n 'NR',\n 'NS',\n 'OLF',\n 'PFE',\n 'REA',\n 'SOI',\n 'TCL',\n 'THF',\n 'KRE'\n ],\n 'Elements': [\n 'BE',\n 'C',\n 'CA',\n 'CL',\n 'ES',\n 'I',\n 'MG',\n 'NA',\n 'S',\n 'TA',\n 'TC',\n 'ZR'\n ],\n 'Gases': [\n 'AMM',\n 'AR',\n 'F',\n 'H',\n 'HE',\n 'HE3',\n 'KR',\n 'N',\n 'NE',\n 'O',\n 'KR'\n ],\n 'Ship Parts': [\n 'AGS',\n 'AHP',\n 'ATP',\n 'BGS',\n 'BHP',\n 'HAM',\n 'HHP',\n 'LHP',\n 'NV1',\n 'NV2',\n 'RHP',\n 'SSC',\n 'THP',\n 'HAM'\n ],\n 'Drones': [\n 'CCD',\n 'DCH',\n 'DRF',\n 'RED',\n 'SDR',\n 'SRD',\n 'SUD'\n ],\n 'Agricultural Products': [\n 'ALG',\n 'BEA',\n 'CAF',\n 'FOD',\n 'GRA',\n 'GRN',\n 'HCP',\n 'HER',\n 'HOP',\n 'MAI',\n 'MTP',\n 'MUS',\n 'NUT',\n 'PIB',\n 'PPA',\n 'RCO',\n 'RSI',\n 'VEG',\n 'VIT'\n ],\n 'Construction Prefabs': [\n 'ABH',\n 'ADE',\n 'ASE',\n 'ATA',\n 'BBH',\n 'BDE',\n 'BSE',\n 'BTA',\n 'HSE',\n 'LBH',\n 'LDE',\n 'LSE',\n 'LTA',\n 'RBH',\n 'RDE',\n 'RSE',\n 'RTA'\n ],\n 'Fuels': [\n 'FF',\n 'SF',\n 'VF'\n ],\n 'Ship Kits': [\n 'HCB',\n 'LCB',\n 'LFL',\n 'LSL',\n 'MCB',\n 'MFL',\n 'MSL',\n 'SCB',\n 'SFL',\n 'SSL',\n 'TCB',\n 'VCB',\n 'VFT',\n 'VSC',\n 'WCB',\n 'VFT'\n ],\n 'Liquids': [\n 'BTS',\n 'H2O',\n 'HEX',\n 'LES'\n ],\n 'Utility': [\n 'OFF',\n 'SUN',\n 'UTS'\n ],\n 'Infrastructure': [\n 'GWS',\n 'PFG',\n 'SDM',\n 'SST',\n 'SPT',\n 'TRS',\n 'TOR'\n ]\n};\nconst materialCategoryColors = {\n \"Agricultural Products\": \"#0a4708\",\n \"Alloys\": \"#946537\",\n \"Chemicals\": \"#d04774\",\n \"Construction Materials\": \"#3174ec\",\n \"Construction Parts\": \"#426684\",\n \"Construction Prefabs\": \"#28377b\",\n \"Consumable Bundles\": \"#57232a\",\n \"Consumables (Basic)\": \"#ba363c\",\n \"Consumables (Luxury)\": \"#680000\",\n \"Drones\": \"#a54d2b\",\n \"Electronic Devices\": \"#6f2dac\",\n \"Electronic Parts\": \"#7447d0\",\n \"Electronic Pieces\": \"#906bd6\",\n \"Electronic Systems\": \"#4c3365\",\n \"Elements\": \"#564739\",\n \"Energy Systems\": \"#2e5740\",\n \"Fuels\": \"#6ba23c\",\n \"Gases\": \"#198284\",\n \"Liquids\": \"#6098c3\",\n \"Medical Equipment\": \"#6ec36e\",\n \"Metals\": \"#4f4f4f\",\n \"Minerals\": \"#b28a62\",\n \"Ores\": \"#6b707a\",\n \"Plastics\": \"#791f62\",\n \"Ship Engines\": \"#b24219\",\n \"Ship Kits\": \"#b26d19\",\n \"Ship Parts\": \"#b27c19\",\n \"Ship Shields\": \"#d98c21\",\n \"Software Components\": \"#a19248\",\n \"Software Systems\": \"#554e1e\",\n \"Software Tools\": \"#9a7b2c\",\n \"Textiles\": \"#6b733a\",\n \"Unit Prefabs\": \"#363435\",\n \"Utility\": \"#baada1\",\n \"Infrastructure\": \"#252551\"\n};\n\n\n//# sourceURL=webpack://reports/./src/staticData/constants.ts?\n}");
  129. /***/ }),
  130. /***/ "./src/utils.ts":
  131. /*!**********************!*\
  132. !*** ./src/utils.ts ***!
  133. \**********************/
  134. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  135. "use strict";
  136. eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ addConfigField: () => (/* binding */ addConfigField),\n/* harmony export */ addOption: () => (/* binding */ addOption),\n/* harmony export */ clearChildren: () => (/* binding */ clearChildren),\n/* harmony export */ deepMerge: () => (/* binding */ deepMerge),\n/* harmony export */ getCompanyId: () => (/* binding */ getCompanyId),\n/* harmony export */ getData: () => (/* binding */ getData),\n/* harmony export */ getMatCategory: () => (/* binding */ getMatCategory),\n/* harmony export */ getMatColor: () => (/* binding */ getMatColor),\n/* harmony export */ monthSort: () => (/* binding */ monthSort),\n/* harmony export */ prettyMonthName: () => (/* binding */ prettyMonthName),\n/* harmony export */ query: () => (/* binding */ query)\n/* harmony export */ });\n/* harmony import */ var _staticData_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./staticData/constants */ \"./src/staticData/constants.ts\");\n/* harmony import */ var sql_js_httpvfs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! sql.js-httpvfs */ \"./node_modules/sql.js-httpvfs/dist/index.js\");\n/* harmony import */ var sql_js_httpvfs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(sql_js_httpvfs__WEBPACK_IMPORTED_MODULE_1__);\n\n\n// Get data from SQL database\nvar sqlWorker = undefined;\nasync function query(sqlQuery) {\n if (!sqlWorker) {\n const workerUrl = new URL(/* asset import */ __webpack_require__(/*! sql.js-httpvfs/dist/sqlite.worker.js */ \"./node_modules/sql.js-httpvfs/dist/sqlite.worker.js\"), __webpack_require__.b);\n const wasmUrl = new URL(/* asset import */ __webpack_require__(/*! sql.js-httpvfs/dist/sql-wasm.wasm */ \"./node_modules/sql.js-httpvfs/dist/sql-wasm.wasm\"), __webpack_require__.b);\n sqlWorker = await (0,sql_js_httpvfs__WEBPACK_IMPORTED_MODULE_1__.createDbWorker)([\n {\n from: \"inline\",\n config: {\n serverMode: \"full\",\n url: \"./data/prun-data.sqlite\",\n requestChunkSize: 4096,\n // @ts-ignore\n fileLength: 26374144\n },\n },\n ], workerUrl.toString(), wasmUrl.toString());\n }\n const result = await sqlWorker.db.query(sqlQuery);\n return result;\n}\n// Sort an array by the key of each object month\nconst monthOrder = {\n jan: 0, feb: 1, mar: 2, apr: 3, may: 4, jun: 5,\n jul: 6, aug: 7, sep: 8, oct: 9, nov: 10, dec: 11\n};\nfunction monthSort(a, b) {\n const ma = a.month.slice(0, 3);\n const mb = b.month.slice(0, 3);\n const ya = Number(a.month.slice(3));\n const yb = Number(b.month.slice(3));\n return (ya * 12 + monthOrder[ma]) - (yb * 12 + monthOrder[mb]);\n}\n// Add an option to a selector\nfunction addOption(selector, displayName, id) {\n const optionElem = document.createElement(\"option\");\n optionElem.textContent = displayName;\n optionElem.value = id ?? displayName;\n selector.appendChild(optionElem);\n}\n// Remove all the children of a given element\nfunction clearChildren(elem) {\n elem.textContent = \"\";\n while (elem.children[0]) {\n elem.removeChild(elem.children[0]);\n }\n return;\n}\n// Add a config field\nfunction addConfigField(inputType, id, label, value, defaultValue, updateFunc, marginShift) {\n const labelElem = document.createElement('label');\n labelElem.textContent = label;\n const inputElem = document.createElement(inputType);\n inputElem.id = id;\n inputElem.classList.add(\"plotSelector\");\n if (inputType == 'select') {\n addOptions(inputElem, value.prettyValues, value.values);\n }\n if (defaultValue) {\n inputElem.value = defaultValue;\n }\n inputElem.addEventListener(\"change\", updateFunc);\n labelElem.appendChild(inputElem);\n const output = wrapInDiv(labelElem);\n if (marginShift) {\n output.style.marginLeft = marginShift;\n }\n return output;\n}\n// Wrap an element in an extra div\nfunction wrapInDiv(elem) {\n const div = document.createElement('div');\n div.appendChild(elem);\n return div;\n}\n// Add options to a selector\nfunction addOptions(selector, prettyValues, values) {\n for (var i = 0; i < prettyValues.length; i++) {\n const optionElem = document.createElement(\"option\");\n optionElem.textContent = prettyValues[i];\n optionElem.value = values ? values[i] : prettyValues[i];\n selector.appendChild(optionElem);\n }\n}\n// Merge a default object with one entered by the user.\nfunction deepMerge(target, source) {\n for (const key in source) {\n if (source[key] &&\n typeof source[key] === \"object\" &&\n !Array.isArray(source[key])) {\n // @ts-ignore\n target[key] = deepMerge(target[key] || {}, source[key]);\n }\n else {\n // @ts-ignore\n target[key] = source[key];\n }\n }\n return target;\n}\n// Generate pretty month name from id format: mar25\nfunction prettyMonthName(monthStr) {\n const monthAbv = monthStr.substring(0, 3);\n const monthNum = monthStr.substring(3);\n return _staticData_constants__WEBPACK_IMPORTED_MODULE_0__.fullMonthNames[monthAbv] + \" 30\" + monthNum;\n}\n// Functions to deal with loading data\nasync function getData(loadedData, dataType, month) {\n switch (dataType) {\n case \"prod\":\n case \"company\":\n case \"base\":\n if (!loadedData[dataType + '-data-' + month]) {\n loadedData[dataType + '-data-' + month] = await fetch('data/' + dataType + '-data-' + month + '.json?cb=' + Date.now()).then(response => response.json());\n }\n return loadedData[dataType + '-data-' + month];\n case \"knownCompanies\":\n if (!loadedData['known-companies']) {\n loadedData['known-companies'] = await fetch('data/knownCompanies.json?cb=' + Date.now()).then(response => response.json());\n }\n return loadedData['known-companies'];\n case \"universe\":\n if (!loadedData['universe-data']) {\n loadedData['universe-data'] = await fetch('data/universe-data.json?cb=' + Date.now()).then(response => response.json());\n }\n return loadedData['universe-data'];\n }\n}\nfunction getMatCategory(ticker) {\n return Object.entries(_staticData_constants__WEBPACK_IMPORTED_MODULE_0__.materialCategories).find(([_, tickers]) => tickers.includes(ticker))?.[0];\n}\nfunction getMatColor(ticker) {\n return _staticData_constants__WEBPACK_IMPORTED_MODULE_0__.materialCategoryColors[getMatCategory(ticker) ?? \"\"] ?? \"#000000\";\n}\nasync function getCompanyId(companyName, loadedData) {\n const knownCompanies = await getData(loadedData, \"knownCompanies\");\n // Pull from known companies\n var companyID = Object.keys(knownCompanies).find(id => (knownCompanies[id] ?? \"\").toLowerCase() == companyName.toLowerCase());\n if (companyID) {\n return companyID;\n }\n // Resort to FIO\n console.log(\"Unknown username, querying FIO.\");\n const fioResult = await fetch('https://rest.fnar.net/user/' + companyName).then(response => response.json()).catch(error => { alert('Bad Response: Check Username'); console.error(error); });\n companyID = fioResult?.CompanyId;\n companyName = fioResult?.UserName;\n // Temporarily add to the list of known companies preventing multiple FIO queries\n knownCompanies[companyID] = companyName;\n return companyID;\n}\n\n\n//# sourceURL=webpack://reports/./src/utils.ts?\n}");
  137. /***/ })
  138. /******/ });
  139. /************************************************************************/
  140. /******/ // The module cache
  141. /******/ var __webpack_module_cache__ = {};
  142. /******/
  143. /******/ // The require function
  144. /******/ function __webpack_require__(moduleId) {
  145. /******/ // Check if module is in cache
  146. /******/ var cachedModule = __webpack_module_cache__[moduleId];
  147. /******/ if (cachedModule !== undefined) {
  148. /******/ return cachedModule.exports;
  149. /******/ }
  150. /******/ // Create a new module (and put it into the cache)
  151. /******/ var module = __webpack_module_cache__[moduleId] = {
  152. /******/ // no module.id needed
  153. /******/ // no module.loaded needed
  154. /******/ exports: {}
  155. /******/ };
  156. /******/
  157. /******/ // Execute the module function
  158. /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  159. /******/
  160. /******/ // Return the exports of the module
  161. /******/ return module.exports;
  162. /******/ }
  163. /******/
  164. /******/ // expose the modules object (__webpack_modules__)
  165. /******/ __webpack_require__.m = __webpack_modules__;
  166. /******/
  167. /************************************************************************/
  168. /******/ /* webpack/runtime/compat get default export */
  169. /******/ (() => {
  170. /******/ // getDefaultExport function for compatibility with non-harmony modules
  171. /******/ __webpack_require__.n = (module) => {
  172. /******/ var getter = module && module.__esModule ?
  173. /******/ () => (module['default']) :
  174. /******/ () => (module);
  175. /******/ __webpack_require__.d(getter, { a: getter });
  176. /******/ return getter;
  177. /******/ };
  178. /******/ })();
  179. /******/
  180. /******/ /* webpack/runtime/define property getters */
  181. /******/ (() => {
  182. /******/ // define getter functions for harmony exports
  183. /******/ __webpack_require__.d = (exports, definition) => {
  184. /******/ for(var key in definition) {
  185. /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
  186. /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
  187. /******/ }
  188. /******/ }
  189. /******/ };
  190. /******/ })();
  191. /******/
  192. /******/ /* webpack/runtime/global */
  193. /******/ (() => {
  194. /******/ __webpack_require__.g = (function() {
  195. /******/ if (typeof globalThis === 'object') return globalThis;
  196. /******/ try {
  197. /******/ return this || new Function('return this')();
  198. /******/ } catch (e) {
  199. /******/ if (typeof window === 'object') return window;
  200. /******/ }
  201. /******/ })();
  202. /******/ })();
  203. /******/
  204. /******/ /* webpack/runtime/hasOwnProperty shorthand */
  205. /******/ (() => {
  206. /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
  207. /******/ })();
  208. /******/
  209. /******/ /* webpack/runtime/make namespace object */
  210. /******/ (() => {
  211. /******/ // define __esModule on exports
  212. /******/ __webpack_require__.r = (exports) => {
  213. /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  214. /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  215. /******/ }
  216. /******/ Object.defineProperty(exports, '__esModule', { value: true });
  217. /******/ };
  218. /******/ })();
  219. /******/
  220. /******/ /* webpack/runtime/publicPath */
  221. /******/ (() => {
  222. /******/ var scriptUrl;
  223. /******/ if (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + "";
  224. /******/ var document = __webpack_require__.g.document;
  225. /******/ if (!scriptUrl && document) {
  226. /******/ if (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')
  227. /******/ scriptUrl = document.currentScript.src;
  228. /******/ if (!scriptUrl) {
  229. /******/ var scripts = document.getElementsByTagName("script");
  230. /******/ if(scripts.length) {
  231. /******/ var i = scripts.length - 1;
  232. /******/ while (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;
  233. /******/ }
  234. /******/ }
  235. /******/ }
  236. /******/ // When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration
  237. /******/ // or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.
  238. /******/ if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser");
  239. /******/ scriptUrl = scriptUrl.replace(/^blob:/, "").replace(/#.*$/, "").replace(/\?.*$/, "").replace(/\/[^\/]+$/, "/");
  240. /******/ __webpack_require__.p = scriptUrl;
  241. /******/ })();
  242. /******/
  243. /******/ /* webpack/runtime/jsonp chunk loading */
  244. /******/ (() => {
  245. /******/ __webpack_require__.b = document.baseURI || self.location.href;
  246. /******/
  247. /******/ // object to store loaded and loading chunks
  248. /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
  249. /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
  250. /******/ var installedChunks = {
  251. /******/ "main": 0
  252. /******/ };
  253. /******/
  254. /******/ // no chunk on demand loading
  255. /******/
  256. /******/ // no prefetching
  257. /******/
  258. /******/ // no preloaded
  259. /******/
  260. /******/ // no HMR
  261. /******/
  262. /******/ // no HMR manifest
  263. /******/
  264. /******/ // no on chunks loaded
  265. /******/
  266. /******/ // no jsonp function
  267. /******/ })();
  268. /******/
  269. /************************************************************************/
  270. /******/
  271. /******/ // startup
  272. /******/ // Load entry module and return exports
  273. /******/ // This entry module is referenced by other modules so it can't be inlined
  274. /******/ var __webpack_exports__ = __webpack_require__("./src/main.ts");
  275. /******/
  276. /******/ })()
  277. ;