commit d8ca4e154fe5e94e3038780641fa9f93f438b863 Author: Mees van der Wijk Date: Wed Oct 22 22:06:16 2025 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6c10ed7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/node_modules/ +/frontend/views/*/node_modules/ diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..f2fcefc --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Launch Program", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}\\dist\\Entry.js" + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..36605a7 --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +# NTSH-Control + +A Node.js control system for Nothing to See Here installation. + +## Overview + +NTSH-Control provides centralized control and monitoring of: + +- Camera runner processes via WebSocket communication +- Unity application lifecycle management +- Real-time system status and calibration through a web dashboard + +## Configuration + +Configuration is stored in `~/MorphixProductions/NTSHControl/config.json`. Default settings include: + +- Web server port: `6300` +- Unity WebSocket: `127.0.0.1:3000` +- Camera runner WebSocket: `127.0.0.1:6301` +- Unity startup delay: `5000ms` diff --git a/dist/CameraRunner.js b/dist/CameraRunner.js new file mode 100644 index 0000000..5257f35 --- /dev/null +++ b/dist/CameraRunner.js @@ -0,0 +1,215 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CameraRunner = void 0; +var socket_io_client_1 = require("socket.io-client"); +var Utils_1 = require("./Utils"); +var PREFIX = "[CameraRunner]"; +var CameraRunner = /** @class */ (function () { + function CameraRunner(Main) { + this.state = 'DISCONNECTED'; + this.processStatus = { + state: 'STOPPED', + startTime: -1, + output: { current: [], last: [] }, + }; + this._Main = Main; + } + CameraRunner.prototype.handle = function (command) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + switch (command) { + case 'restart': + case 'reboot': + var callback = args[0]; + if (typeof callback !== 'function') + return; + this.sendCommand(command, callback); + break; + } + }; + CameraRunner.prototype.sendCommand = function (command, callback) { + if (this.socket == null || !this.socket.connected) + return callback({ + succeed: false, + message: 'Not connected to CameraRunner', + }); + this.socket.emit(command, function (response) { + callback(response); + }); + }; + CameraRunner.prototype.broadcastState = function () { + this._Main.WebServer.socket.emit('cameraRunnerState', this.getState()); + }; + CameraRunner.prototype.getState = function () { + return { + state: this.state, + message: this.message, + error: this.error, + processStatus: this.processStatus, + }; + }; + CameraRunner.prototype.setInfo = function (message, error, state) { + if (state === void 0) { state = 'FAILED'; } + this.message = message; + this.error = error; + this.state = state; + this.broadcastState(); + if (state == 'FAILED' || state == 'DISCONNECTED') + console.warn(PREFIX, message !== null && message !== void 0 ? message : error); + else + console.log(PREFIX, message !== null && message !== void 0 ? message : error); + }; + CameraRunner.prototype.startPollClock = function () { + var _this = this; + var poll = function () { return __awaiter(_this, void 0, void 0, function () { + var data; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, new Promise(function (resolve) { + _this.socket.emit('getStatus', function (response) { + return resolve(response); + }); + })]; + case 1: + data = _a.sent(); + this.processStatus = data; + this.broadcastState(); + return [2 /*return*/]; + } + }); + }); }; + this.socket.on('simpleStatus', function (simpleStatus) { + _this.processStatus.state = simpleStatus.state; + _this.processStatus.message = simpleStatus.message; + _this.processStatus.error = simpleStatus.error; + _this.broadcastState(); + }); + clearInterval(this.pollClock); + this.pollClock = setInterval(function () { return poll(); }, this._Main.Config.cameraRunner.pollInterval); + poll(); + }; + CameraRunner.prototype.reconnect = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + clearInterval(this.pollClock); + if (this.socket != null) { + this.socket.disconnect(); + this.socket.close(); + this.socket = null; + } + return [4 /*yield*/, (0, Utils_1.delay)(2000)]; + case 1: + _a.sent(); + this.message = 'Reconnecting in 10 seconds...'; + this.broadcastState(); + return [4 /*yield*/, (0, Utils_1.delay)(5000)]; + case 2: + _a.sent(); + return [4 /*yield*/, this.connect()]; + case 3: + _a.sent(); + return [2 /*return*/]; + } + }); + }); + }; + CameraRunner.prototype.connect = function () { + return __awaiter(this, void 0, void 0, function () { + var ip, port; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.setInfo('Connecting...', null, 'CONNECTING'); + return [4 /*yield*/, (0, Utils_1.delay)(1000)]; + case 1: + _a.sent(); + ip = this._Main.Config.cameraRunner.webSocket.ip; + port = this._Main.Config.cameraRunner.webSocket.port; + if (ip == null || port == null) { + return [2 /*return*/, this.setInfo('Connection problem', 'Camera Runner WebSocket IP or port is not configured.')]; + } + this.socket = (0, socket_io_client_1.io)("ws://".concat(ip, ":").concat(port), { + reconnectionAttempts: 0, + reconnectionDelay: 2000, + }); + this.socket.on('connect', function () { + _this.setInfo('Connected', null, 'CONNECTED'); + _this.startPollClock(); + }); + this.socket.on('disconnect', function () { + _this.setInfo('Disconnected', 'Camera Runner was disconnected unexpectedly', 'DISCONNECTED'); + _this.reconnect(); + }); + this.socket.on('reconnect', function () { + _this.setInfo('Connected (reconnection)', null, 'CONNECTED'); + }); + this.socket.on('connect_error', function (err) { + _this.setInfo('Connection problem', "Connection error: ".concat(err)); + _this.reconnect(); + }); + this.socket.on('error', function (err) { + _this.setInfo('Connection problem', "Socket error: ".concat(err)); + _this.reconnect(); + }); + this.socket.on('reconnect_attempt', function () { + _this.setInfo('Reconnecting', null, 'CONNECTING'); + }); + this.socket.on('reconnect_failed', function () { + _this.setInfo('Connection problem', 'Reconnection failed'); + _this.reconnect(); + }); + this.socket.on('close', function () { + _this.setInfo('Disconnected', null, 'DISCONNECTED'); + _this.reconnect(); + }); + return [2 /*return*/]; + } + }); + }); + }; + return CameraRunner; +}()); +exports.CameraRunner = CameraRunner; +//# sourceMappingURL=CameraRunner.js.map \ No newline at end of file diff --git a/dist/CameraRunner.js.map b/dist/CameraRunner.js.map new file mode 100644 index 0000000..20f277c --- /dev/null +++ b/dist/CameraRunner.js.map @@ -0,0 +1 @@ +{"version":3,"file":"CameraRunner.js","sourceRoot":"","sources":["../src/CameraRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/Configuration/ConfigurationManager.js b/dist/Configuration/ConfigurationManager.js new file mode 100644 index 0000000..6d15f27 --- /dev/null +++ b/dist/Configuration/ConfigurationManager.js @@ -0,0 +1,138 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ConfigurationManager = void 0; +var fs_extra_1 = require("fs-extra"); +var path_1 = require("path"); +var DefaultConfiguration_1 = require("./DefaultConfiguration"); +var PREFIX = '[ConfigurationManager]'; +var ConfigurationManager = /** @class */ (function () { + function ConfigurationManager(Main) { + this._Main = Main; + } + ConfigurationManager.prototype.load = function () { + return __awaiter(this, void 0, void 0, function () { + var configPath, configExists, config, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + console.log(PREFIX, 'Loading'); + return [4 /*yield*/, (0, fs_extra_1.ensureDir)((0, path_1.join)(this._Main.dataPath))]; + case 1: + _b.sent(); + configPath = (0, path_1.join)(this._Main.dataPath, 'config.json'); + return [4 /*yield*/, (0, fs_extra_1.pathExists)(configPath)]; + case 2: + configExists = _b.sent(); + if (!!configExists) return [3 /*break*/, 4]; + return [4 /*yield*/, (0, fs_extra_1.writeFile)(configPath, JSON.stringify(DefaultConfiguration_1.DefaultConfiguration, null, 4))]; + case 3: + _b.sent(); + this._Main.Config = DefaultConfiguration_1.DefaultConfiguration; + console.log(PREFIX, 'Written default configuration'); + return [3 /*break*/, 7]; + case 4: return [4 /*yield*/, (0, fs_extra_1.readJSON)(configPath)]; + case 5: + config = _b.sent(); + _a = this._Main; + return [4 /*yield*/, this.validateConfig(config)]; + case 6: + _a.Config = _b.sent(); + console.log(PREFIX, 'Loaded configuration'); + _b.label = 7; + case 7: return [2 /*return*/]; + } + }); + }); + }; + ConfigurationManager.prototype.validateConfig = function (config) { + return __awaiter(this, void 0, void 0, function () { + var normalizedConfig, hasChanges, configPath; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + normalizedConfig = this.normalizeConfig(config, DefaultConfiguration_1.DefaultConfiguration); + hasChanges = JSON.stringify(config) !== JSON.stringify(normalizedConfig); + if (!hasChanges) return [3 /*break*/, 2]; + this._Main.Config = normalizedConfig; + configPath = (0, path_1.join)(this._Main.dataPath, 'config.json'); + return [4 /*yield*/, (0, fs_extra_1.writeFile)(configPath, JSON.stringify(normalizedConfig, null, 4))]; + case 1: + _a.sent(); + console.log(PREFIX, 'Configuration updated and saved'); + _a.label = 2; + case 2: return [2 /*return*/, normalizedConfig]; + } + }); + }); + }; + ConfigurationManager.prototype.normalizeConfig = function (current, template) { + var _this = this; + if (template === null || template === undefined) { + return template; + } + if (typeof template !== 'object' || Array.isArray(template)) { + if (current !== null && + current !== undefined && + typeof current === typeof template) { + if (Array.isArray(template) && Array.isArray(current)) { + if (template.length > 0 && + typeof template[0] === 'object' && + !Array.isArray(template[0])) { + return current.map(function (item) { + return _this.normalizeConfig(item, template[0]); + }); + } + return current; + } + return current; + } + return template; + } + var result = {}; + for (var key in template) { + if (template.hasOwnProperty(key)) { + result[key] = this.normalizeConfig(current === null || current === void 0 ? void 0 : current[key], template[key]); + } + } + return result; + }; + return ConfigurationManager; +}()); +exports.ConfigurationManager = ConfigurationManager; +//# sourceMappingURL=ConfigurationManager.js.map \ No newline at end of file diff --git a/dist/Configuration/ConfigurationManager.js.map b/dist/Configuration/ConfigurationManager.js.map new file mode 100644 index 0000000..6f327f6 --- /dev/null +++ b/dist/Configuration/ConfigurationManager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ConfigurationManager.js","sourceRoot":"","sources":["../../src/Configuration/ConfigurationManager.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/Configuration/DefaultConfiguration.js b/dist/Configuration/DefaultConfiguration.js new file mode 100644 index 0000000..f7506b1 --- /dev/null +++ b/dist/Configuration/DefaultConfiguration.js @@ -0,0 +1,29 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DefaultConfiguration = void 0; +exports.DefaultConfiguration = { + webServer: { + port: 6300, + }, + unity: { + executable: { + path: '', + arguments: [], + startUpDelay: 5000, + }, + webSocket: { + ip: '127.0.0.1', + port: 3000, + }, + heartbeatInterval: 1000, + calibrationImageInterval: 2000, + }, + cameraRunner: { + webSocket: { + ip: '127.0.0.1', + port: 6301, + }, + pollInterval: 5000, + }, +}; +//# sourceMappingURL=DefaultConfiguration.js.map \ No newline at end of file diff --git a/dist/Configuration/DefaultConfiguration.js.map b/dist/Configuration/DefaultConfiguration.js.map new file mode 100644 index 0000000..a4cc79d --- /dev/null +++ b/dist/Configuration/DefaultConfiguration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"DefaultConfiguration.js","sourceRoot":"","sources":["../../src/Configuration/DefaultConfiguration.ts"],"names":[],"mappings":";;;AAEa,QAAA,oBAAoB,GAAW;IAC3C,SAAS,EAAE;QACV,IAAI,EAAE,IAAI;KACV;IACD,KAAK,EAAE;QACN,UAAU,EAAE;YACX,IAAI,EAAE,EAAE;YACR,SAAS,EAAE,EAAE;YACb,YAAY,EAAE,IAAI;SAClB;QAED,SAAS,EAAE;YACV,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,IAAI;SACV;QAED,iBAAiB,EAAE,IAAI;QACvB,wBAAwB,EAAE,IAAI;KAC9B;IACD,YAAY,EAAE;QACb,SAAS,EAAE;YACV,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,IAAI;SACV;QAED,YAAY,EAAE,IAAI;KAClB;CACD,CAAC"} \ No newline at end of file diff --git a/dist/ConfigurationManager.js b/dist/ConfigurationManager.js new file mode 100644 index 0000000..ead3306 --- /dev/null +++ b/dist/ConfigurationManager.js @@ -0,0 +1,138 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ConfigurationManager = void 0; +var fs_extra_1 = require("fs-extra"); +var path_1 = require("path"); +var DefaultConfiguration_1 = require("./Defaults/DefaultConfiguration"); +var PREFIX = '[ConfigurationManager]'; +var ConfigurationManager = /** @class */ (function () { + function ConfigurationManager(Main) { + this._Main = Main; + } + ConfigurationManager.prototype.load = function () { + return __awaiter(this, void 0, void 0, function () { + var configPath, configExists, config, _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + console.log(PREFIX, 'Loading'); + return [4 /*yield*/, (0, fs_extra_1.ensureDir)((0, path_1.join)(this._Main.dataPath))]; + case 1: + _b.sent(); + configPath = (0, path_1.join)(this._Main.dataPath, 'config.json'); + return [4 /*yield*/, (0, fs_extra_1.pathExists)(configPath)]; + case 2: + configExists = _b.sent(); + if (!!configExists) return [3 /*break*/, 4]; + return [4 /*yield*/, (0, fs_extra_1.writeFile)(configPath, JSON.stringify(DefaultConfiguration_1.DefaultConfiguration, null, 4))]; + case 3: + _b.sent(); + this._Main.Config = DefaultConfiguration_1.DefaultConfiguration; + console.log(PREFIX, 'Written default configuration'); + return [3 /*break*/, 7]; + case 4: return [4 /*yield*/, (0, fs_extra_1.readJSON)(configPath)]; + case 5: + config = _b.sent(); + _a = this._Main; + return [4 /*yield*/, this.validateConfig(config)]; + case 6: + _a.Config = _b.sent(); + console.log(PREFIX, 'Loaded configuration'); + _b.label = 7; + case 7: return [2 /*return*/]; + } + }); + }); + }; + ConfigurationManager.prototype.validateConfig = function (config) { + return __awaiter(this, void 0, void 0, function () { + var normalizedConfig, hasChanges, configPath; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + normalizedConfig = this.normalizeConfig(config, DefaultConfiguration_1.DefaultConfiguration); + hasChanges = JSON.stringify(config) !== JSON.stringify(normalizedConfig); + if (!hasChanges) return [3 /*break*/, 2]; + this._Main.Config = normalizedConfig; + configPath = (0, path_1.join)(this._Main.dataPath, 'config.json'); + return [4 /*yield*/, (0, fs_extra_1.writeFile)(configPath, JSON.stringify(normalizedConfig, null, 4))]; + case 1: + _a.sent(); + console.log(PREFIX, 'Configuration updated and saved'); + _a.label = 2; + case 2: return [2 /*return*/, normalizedConfig]; + } + }); + }); + }; + ConfigurationManager.prototype.normalizeConfig = function (current, template) { + var _this = this; + if (template === null || template === undefined) { + return template; + } + if (typeof template !== 'object' || Array.isArray(template)) { + if (current !== null && + current !== undefined && + typeof current === typeof template) { + if (Array.isArray(template) && Array.isArray(current)) { + if (template.length > 0 && + typeof template[0] === 'object' && + !Array.isArray(template[0])) { + return current.map(function (item) { + return _this.normalizeConfig(item, template[0]); + }); + } + return current; + } + return current; + } + return template; + } + var result = {}; + for (var key in template) { + if (template.hasOwnProperty(key)) { + result[key] = this.normalizeConfig(current === null || current === void 0 ? void 0 : current[key], template[key]); + } + } + return result; + }; + return ConfigurationManager; +}()); +exports.ConfigurationManager = ConfigurationManager; +//# sourceMappingURL=ConfigurationManager.js.map \ No newline at end of file diff --git a/dist/ConfigurationManager.js.map b/dist/ConfigurationManager.js.map new file mode 100644 index 0000000..1be6b05 --- /dev/null +++ b/dist/ConfigurationManager.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ConfigurationManager.js","sourceRoot":"","sources":["../src/ConfigurationManager.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/Entry.js b/dist/Entry.js new file mode 100644 index 0000000..45f679a --- /dev/null +++ b/dist/Entry.js @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var Main_1 = require("./Main"); +var _Main = new Main_1.Main(); +_Main.start(); +//# sourceMappingURL=Entry.js.map \ No newline at end of file diff --git a/dist/Entry.js.map b/dist/Entry.js.map new file mode 100644 index 0000000..246c029 --- /dev/null +++ b/dist/Entry.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Entry.js","sourceRoot":"","sources":["../src/Entry.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAE9B,IAAM,KAAK,GAAG,IAAI,WAAI,EAAE,CAAC;AACzB,KAAK,CAAC,KAAK,EAAE,CAAC"} \ No newline at end of file diff --git a/dist/Main.js b/dist/Main.js new file mode 100644 index 0000000..c141153 --- /dev/null +++ b/dist/Main.js @@ -0,0 +1,82 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Main = void 0; +var path_1 = require("path"); +var WebServer_1 = require("./WebServer/WebServer"); +var os_1 = require("os"); +var ConfigurationManager_1 = require("./Configuration/ConfigurationManager"); +var CameraRunner_1 = require("./CameraRunner"); +var UnityRunner_1 = require("./Unity/UnityRunner"); +var UnityWebSocket_1 = require("./Unity/UnityWebSocket"); +var Main = /** @class */ (function () { + function Main() { + this.dataPath = (0, path_1.join)((0, os_1.homedir)(), 'MorphixProductions', 'NTSHControl'); + this.ConfigurationManager = new ConfigurationManager_1.ConfigurationManager(this); + this.WebServer = new WebServer_1.WebServer(this); + this.CameraRunner = new CameraRunner_1.CameraRunner(this); + this.UnityRunner = new UnityRunner_1.UnityRunner(this); + this.UnityWebSocket = new UnityWebSocket_1.UnityWebSocket(this); + } + Main.prototype.start = function () { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: return [4 /*yield*/, this.ConfigurationManager.load()]; + case 1: + _b.sent(); + return [4 /*yield*/, this.WebServer.listen()]; + case 2: + _b.sent(); + return [4 /*yield*/, this.CameraRunner.connect()]; + case 3: + _b.sent(); + setTimeout(function () { + _this.UnityRunner.start(); + }, (_a = this.Config.unity.executable.startUpDelay) !== null && _a !== void 0 ? _a : 0); + return [2 /*return*/]; + } + }); + }); + }; + return Main; +}()); +exports.Main = Main; +//# sourceMappingURL=Main.js.map \ No newline at end of file diff --git a/dist/Main.js.map b/dist/Main.js.map new file mode 100644 index 0000000..afa227e --- /dev/null +++ b/dist/Main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Main.js","sourceRoot":"","sources":["../src/Main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6BAA4B;AAC5B,mDAAkD;AAClD,yBAA6B;AAC7B,6EAG8C;AAC9C,+CAA8C;AAC9C,mDAAkD;AAClD,yDAAwD;AAExD;IAAA;QACC,aAAQ,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,oBAAoB,EAAE,aAAa,CAAC,CAAC;QAEhE,yBAAoB,GAAG,IAAI,2CAAoB,CAAC,IAAI,CAAC,CAAC;QACtD,cAAS,GAAG,IAAI,qBAAS,CAAC,IAAI,CAAC,CAAC;QAEhC,iBAAY,GAAG,IAAI,2BAAY,CAAC,IAAI,CAAC,CAAC;QACtC,gBAAW,GAAG,IAAI,yBAAW,CAAC,IAAI,CAAC,CAAC;QACpC,mBAAc,GAAG,IAAI,+BAAc,CAAC,IAAI,CAAC,CAAC;IAc3C,CAAC;IAVM,oBAAK,GAAX;;;;;;4BACC,qBAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,EAAA;;wBAAtC,SAAsC,CAAC;wBACvC,qBAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAA;;wBAA7B,SAA6B,CAAC;wBAE9B,qBAAM,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAA;;wBAAjC,SAAiC,CAAC;wBAElC,UAAU,CAAC;4BACV,KAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;wBAC1B,CAAC,EAAE,MAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,mCAAI,CAAC,CAAC,CAAC;;;;;KACnD;IACF,WAAC;AAAD,CAAC,AAtBD,IAsBC;AAtBY,oBAAI"} \ No newline at end of file diff --git a/dist/Unity/CameraRunner.js b/dist/Unity/CameraRunner.js new file mode 100644 index 0000000..2fc125b --- /dev/null +++ b/dist/Unity/CameraRunner.js @@ -0,0 +1,214 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CameraRunner = void 0; +var socket_io_client_1 = require("socket.io-client"); +var Utils_1 = require("../Utils"); +var PREFIX = "[CameraRunner]"; +var CameraRunner = /** @class */ (function () { + function CameraRunner(Main) { + this.state = 'DISCONNECTED'; + this.processStatus = { + state: 'STOPPED', + startTime: -1, + output: { current: [], last: [] }, + }; + this._Main = Main; + } + CameraRunner.prototype.handle = function (command) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + switch (command) { + case 'restart': + case 'reboot': + var callback = args[0]; + if (typeof callback !== 'function') + return; + this.sendCommand(command, callback); + break; + } + }; + CameraRunner.prototype.sendCommand = function (command, callback) { + if (this.socket == null || !this.socket.connected) + return callback({ + succeed: false, + message: 'Not connected to CameraRunner', + }); + this.socket.emit(command, function (response) { + callback(response); + }); + }; + CameraRunner.prototype.broadcastState = function () { + this._Main.WebServer.socket.emit('cameraRunnerState', this.getState()); + }; + CameraRunner.prototype.getState = function () { + return { + state: this.state, + message: this.message, + error: this.error, + processStatus: this.processStatus, + }; + }; + CameraRunner.prototype.setInfo = function (message, error, state) { + if (state === void 0) { state = 'FAILED'; } + this.message = message; + this.error = error; + this.state = state; + this.broadcastState(); + if (state == 'FAILED' || state == 'DISCONNECTED') + console.warn(PREFIX, message !== null && message !== void 0 ? message : error); + else + console.log(PREFIX, message !== null && message !== void 0 ? message : error); + }; + CameraRunner.prototype.startPollClock = function () { + var _this = this; + var poll = function () { return __awaiter(_this, void 0, void 0, function () { + var data; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, new Promise(function (resolve) { + _this.socket.emit('getStatus', function (response) { + return resolve(response); + }); + })]; + case 1: + data = _a.sent(); + this.processStatus = data; + this.broadcastState(); + return [2 /*return*/]; + } + }); + }); }; + this.socket.on('simpleStatus', function (simpleStatus) { + _this.processStatus.state = simpleStatus.state; + _this.processStatus.message = simpleStatus.message; + _this.processStatus.error = simpleStatus.error; + _this.broadcastState(); + }); + clearInterval(this.pollClock); + this.pollClock = setInterval(function () { return poll(); }, this._Main.Config.cameraRunner.pollInterval); + poll(); + }; + CameraRunner.prototype.reconnect = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + clearInterval(this.pollClock); + if (this.socket != null) { + this.socket.disconnect(); + this.socket.close(); + this.socket = null; + } + return [4 /*yield*/, (0, Utils_1.delay)(500)]; + case 1: + _a.sent(); + this.setInfo("Reconnecting to CameraRunner in 5 seconds...", null, 'CONNECTING'); + return [4 /*yield*/, (0, Utils_1.delay)(5000)]; + case 2: + _a.sent(); + return [4 /*yield*/, this.connect()]; + case 3: + _a.sent(); + return [2 /*return*/]; + } + }); + }); + }; + CameraRunner.prototype.connect = function () { + return __awaiter(this, void 0, void 0, function () { + var ip, port; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.setInfo('Connecting to CameraRunner', null, 'CONNECTING'); + return [4 /*yield*/, (0, Utils_1.delay)(1000)]; + case 1: + _a.sent(); + ip = this._Main.Config.cameraRunner.webSocket.ip; + port = this._Main.Config.cameraRunner.webSocket.port; + if (ip == null || port == null) { + return [2 /*return*/, this.setInfo('Connection problem', 'Camera Runner WebSocket IP or port is not configured.')]; + } + this.socket = (0, socket_io_client_1.io)("ws://".concat(ip, ":").concat(port), { + reconnectionAttempts: 0, + reconnectionDelay: 2000, + }); + this.socket.on('connect', function () { + _this.setInfo('Connected', null, 'CONNECTED'); + _this.startPollClock(); + }); + this.socket.on('disconnect', function () { + _this.setInfo('Disconnected', null, 'DISCONNECTED'); + _this.reconnect(); + }); + this.socket.on('reconnect', function () { + _this.setInfo('Connected (reconnection)', null, 'CONNECTED'); + }); + this.socket.on('connect_error', function (err) { + _this.setInfo('Connection problem', "Connection error: ".concat(err)); + _this.reconnect(); + }); + this.socket.on('error', function (err) { + _this.setInfo('Connection problem', "Socket error: ".concat(err)); + _this.reconnect(); + }); + this.socket.on('reconnect_attempt', function () { + _this.setInfo('Reconnecting', null, 'CONNECTING'); + }); + this.socket.on('reconnect_failed', function () { + _this.setInfo('Connection problem', 'Reconnection failed'); + _this.reconnect(); + }); + this.socket.on('close', function () { + _this.setInfo('Disconnected', null, 'DISCONNECTED'); + _this.reconnect(); + }); + return [2 /*return*/]; + } + }); + }); + }; + return CameraRunner; +}()); +exports.CameraRunner = CameraRunner; +//# sourceMappingURL=CameraRunner.js.map \ No newline at end of file diff --git a/dist/Unity/CameraRunner.js.map b/dist/Unity/CameraRunner.js.map new file mode 100644 index 0000000..b7b1474 --- /dev/null +++ b/dist/Unity/CameraRunner.js.map @@ -0,0 +1 @@ +{"version":3,"file":"CameraRunner.js","sourceRoot":"","sources":["../../src/Unity/CameraRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/Unity/Unity.js b/dist/Unity/Unity.js new file mode 100644 index 0000000..6438c08 --- /dev/null +++ b/dist/Unity/Unity.js @@ -0,0 +1,117 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Unity = void 0; +var ws_1 = require("ws"); +var Utils_1 = require("../Utils"); +var PREFIX = '[Unity]'; +var Unity = /** @class */ (function () { + function Unity(Main) { + this.state = 'DISCONNECTED'; + this.restartRequested = false; + this._Main = Main; + } + Unity.prototype.broadcastState = function () { + this._Main.WebServer.socket.emit('unityState', this.getState()); + }; + Unity.prototype.setInfo = function (message, error, state) { + if (state === void 0) { state = 'FAILED'; } + this.message = message; + this.error = error; + this.state = state; + this.broadcastState(); + if (state == 'FAILED' || state == 'DISCONNECTED') + console.warn(PREFIX, message !== null && message !== void 0 ? message : error); + else + console.log(PREFIX, message !== null && message !== void 0 ? message : error); + }; + Unity.prototype.reconnect = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (this.restartRequested) + return [2 /*return*/]; + this.restartRequested = true; + if (this.socket != null) { + this.socket.close(); + this.socket = null; + } + return [4 /*yield*/, (0, Utils_1.delay)(500)]; + case 1: + _a.sent(); + this.setInfo("Reconnecting to Unity in 5 seconds...", null, 'CONNECTING'); + return [4 /*yield*/, (0, Utils_1.delay)(5000)]; + case 2: + _a.sent(); + return [4 /*yield*/, this.connect()]; + case 3: + _a.sent(); + return [2 /*return*/]; + } + }); + }); + }; + Unity.prototype.connect = function () { + var _this = this; + var ws = new ws_1.WebSocket("ws://".concat(this._Main.Config.unity.webSocket.ip, ":").concat(this._Main.Config.unity.webSocket.port)); + ws.on('error', function (error) { + _this.setInfo('Connection error', "Could not connect: ".concat(error.message), 'FAILED'); + _this.reconnect(); + }); + ws.on('open', function () { + _this.setInfo('Connected', null, 'CONNECTED'); + }); + ws.on('close', function () { + if (_this.restartRequested) + return; + _this.setInfo('Disconnected', 'Unity was disconnected unexpectedly', 'DISCONNECTED'); + _this.reconnect(); + }); + }; + Unity.prototype.getState = function () { + return { + state: this.state, + message: this.message, + error: this.error, + }; + }; + return Unity; +}()); +exports.Unity = Unity; +//# sourceMappingURL=Unity.js.map \ No newline at end of file diff --git a/dist/Unity/Unity.js.map b/dist/Unity/Unity.js.map new file mode 100644 index 0000000..53a07e1 --- /dev/null +++ b/dist/Unity/Unity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Unity.js","sourceRoot":"","sources":["../../src/Unity/Unity.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/Unity/UnityRunner.js b/dist/Unity/UnityRunner.js new file mode 100644 index 0000000..5103535 --- /dev/null +++ b/dist/Unity/UnityRunner.js @@ -0,0 +1,278 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UnityRunner = void 0; +var fs_extra_1 = require("fs-extra"); +var child_process_1 = require("child_process"); +var Utils_1 = require("../Utils"); +var PREFIX = '[UnityRunner]'; +var LOG_OUTPUT = !process.argv.includes('--no-output-log'); +var UnityRunner = /** @class */ (function () { + function UnityRunner(Main) { + this.message = 'Awaiting startup delay...'; + this.startTime = null; + this.output = { current: [], last: [] }; + this.restartTriggered = false; + this._Main = Main; + } + UnityRunner.prototype.handle = function (command) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + switch (command) { + case 'restart': + var callback = args[0]; + if (typeof callback !== 'function') + return; + callback(this.requestRestart()); + break; + } + }; + UnityRunner.prototype.startStatusClock = function () { + var _this = this; + clearInterval(this.statusClock); + this.statusClock = setInterval(function () { + _this.broadcastState(); + }, 3000); + }; + UnityRunner.prototype.requestRestart = function () { + if (this.state !== 'RUNNING') + return { + succeed: false, + message: 'Cannot restart when process is not running. It is probably restarting already.', + }; + this.restart(true); + return { succeed: true }; + }; + UnityRunner.prototype.broadcastState = function () { + this._Main.WebServer.socket.emit('unityRunnerState', this.getStatus()); + }; + UnityRunner.prototype.setInfo = function (message, error, state) { + if (state === void 0) { state = 'PROBLEM'; } + this.message = message; + this.error = error; + this.state = state; + this.broadcastState(); + this.output.current.push("[".concat(new Date().toLocaleTimeString('nl-NL'), "] [System] [").concat(state, "] ").concat(message !== null && message !== void 0 ? message : error)); + if (state == 'PROBLEM' || state == 'STOPPED') + console.warn(PREFIX, message !== null && message !== void 0 ? message : error); + else + console.log(PREFIX, message !== null && message !== void 0 ? message : error); + }; + UnityRunner.prototype.restart = function () { + return __awaiter(this, arguments, void 0, function (instant) { + if (instant === void 0) { instant = false; } + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (this.restartTriggered) + return [2 /*return*/]; + clearInterval(this.statusClock); + this._Main.WebServer.Calibration.hasCalibrationImage = false; + this._Main.UnityWebSocket.disconnect(); + this.restartTriggered = true; + this.startTime = -1; + this.broadcastState(); + return [4 /*yield*/, (0, Utils_1.delay)(2000)]; + case 1: + _a.sent(); + if (this.output.current.length > 0) { + this.output.last = __spreadArray([], this.output.current, true); + this.output.current = []; + } + if (instant) + this.setInfo('Process will restart shortly...', null, 'STOPPED'); + if (!(this.process != null)) return [3 /*break*/, 3]; + this.process.kill('SIGTERM'); + return [4 /*yield*/, (0, Utils_1.delay)(3000)]; + case 2: + _a.sent(); + if (!this.process.killed && this.process.exitCode === null) { + this.process.kill('SIGKILL'); + console.log(PREFIX, 'Sent SIGKILL to process.'); + } + _a.label = 3; + case 3: + this.startTime = -1; + if (!!instant) return [3 /*break*/, 5]; + this.message = 'Reconnecting in 10 seconds...'; + this.broadcastState(); + return [4 /*yield*/, (0, Utils_1.delay)(10000)]; + case 4: + _a.sent(); + _a.label = 5; + case 5: return [4 /*yield*/, this.start()]; + case 6: + _a.sent(); + return [2 /*return*/]; + } + }); + }); + }; + UnityRunner.prototype.start = function () { + return __awaiter(this, void 0, void 0, function () { + var path, fileName; + var _this = this; + var _a, _b, _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + if (this.output.current.length > 0) { + this.output.last = __spreadArray([], this.output.current, true); + this.output.current = []; + } + this.startTime = Date.now(); + this.restartTriggered = false; + this.broadcastState(); + this._Main.WebServer.Calibration.hasCalibrationImage = false; + clearInterval(this.statusClock); + path = this._Main.Config.unity.executable.path; + if (path == null || !(0, fs_extra_1.pathExistsSync)(path)) { + this.setInfo('Executable problem', "Executable path is not set or does not exist: ".concat(path)); + return [2 /*return*/]; + } + if (!(this._Main.CameraRunner.state !== 'CONNECTED')) return [3 /*break*/, 2]; + return [4 /*yield*/, new Promise(function (resolve) { + _this.setInfo('Waiting for CameraRunner to connect...', null, 'STARTING'); + var c = setInterval(function () { + if (_this._Main.CameraRunner.state !== 'CONNECTED') + return; + clearInterval(c); + resolve(); + }, 1000); + })]; + case 1: + _d.sent(); + _d.label = 2; + case 2: + if (!(((_a = this._Main.CameraRunner.processStatus) === null || _a === void 0 ? void 0 : _a.state) !== 'RUNNING')) return [3 /*break*/, 4]; + return [4 /*yield*/, new Promise(function (resolve) { + _this.setInfo('Waiting for CameraRunner process to start...', null, 'STARTING'); + var c = setInterval(function () { + var _a; + if (((_a = _this._Main.CameraRunner.processStatus) === null || _a === void 0 ? void 0 : _a.state) !== + 'RUNNING') + return; + clearInterval(c); + resolve(); + }, 1000); + })]; + case 3: + _d.sent(); + _d.label = 4; + case 4: + fileName = path.split(/(\/|\\)/).pop(); + this.setInfo("Starting executable: ".concat(fileName), null, 'STARTING'); + this.process = (0, child_process_1.spawn)(path, this._Main.Config.unity.executable.arguments, { + stdio: 'pipe', + }); + this.process.on('exit', function (code, signal) { + if (_this.restartTriggered) + return; + _this.setInfo('Process exited', "Process exited with code ".concat(code, " and signal ").concat(signal), 'STOPPED'); + _this.restart(); + }); + this.process.on('error', function (err) { + _this.setInfo('Process error', err.message); + _this.restart(); + }); + (_b = this.process.stdout) === null || _b === void 0 ? void 0 : _b.on('data', function (data) { + var lines = data + .toString() + .trim() + .split('\n') + .filter(function (line) { return line.length > 0; }); + lines.forEach(function (line) { + var formattedLine = "[".concat(new Date().toLocaleTimeString('nl-NL'), "] [").concat(fileName, "] ").concat(line); + if (LOG_OUTPUT) + console.log(PREFIX, formattedLine); + _this.output.current.push(formattedLine); + }); + }); + (_c = this.process.stderr) === null || _c === void 0 ? void 0 : _c.on('data', function (data) { + var lines = data + .toString() + .trim() + .split('\n') + .filter(function (line) { return line.length > 0; }); + lines.forEach(function (line) { + var formattedLine = "[".concat(new Date().toLocaleTimeString('nl-NL'), "] [").concat(fileName, "] [ERROR] ").concat(line); + if (LOG_OUTPUT) + console.error(PREFIX, formattedLine); + _this.output.current.push(formattedLine); + }); + }); + this.startStatusClock(); + setTimeout(function () { + var _a, _b; + if (_this.process == null || + ((_a = _this.process) === null || _a === void 0 ? void 0 : _a.killed) || + ((_b = _this.process) === null || _b === void 0 ? void 0 : _b.exitCode) != null || + _this.restartTriggered) + return; + _this.setInfo('Running', '', 'RUNNING'); + _this._Main.UnityWebSocket.connect(); + }, 5000); + return [2 /*return*/]; + } + }); + }); + }; + UnityRunner.prototype.getStatus = function () { + return { + state: this.state, + message: this.message, + error: this.error, + startTime: this.startTime, + output: this.output, + }; + }; + return UnityRunner; +}()); +exports.UnityRunner = UnityRunner; +//# sourceMappingURL=UnityRunner.js.map \ No newline at end of file diff --git a/dist/Unity/UnityRunner.js.map b/dist/Unity/UnityRunner.js.map new file mode 100644 index 0000000..ae9004b --- /dev/null +++ b/dist/Unity/UnityRunner.js.map @@ -0,0 +1 @@ +{"version":3,"file":"UnityRunner.js","sourceRoot":"","sources":["../../src/Unity/UnityRunner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAA0C;AAC1C,+CAA0D;AAC1D,kCAAiC;AAGjC,IAAM,MAAM,GAAG,eAAe,CAAC;AAE/B,IAAM,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AAE7D;IAYC,qBAAY,IAAU;QARtB,YAAO,GAAY,2BAA2B,CAAC;QAG/C,cAAS,GAAW,IAAI,CAAC;QACzB,WAAM,GAA0C,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QAmElE,qBAAgB,GAAY,KAAK,CAAC;QA9DzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,4BAAM,GAAN,UAAO,OAAe;QAAE,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,6BAAc;;QACrC,QAAQ,OAAO,EAAE,CAAC;YACjB,KAAK,SAAS;gBACb,IAAM,QAAQ,GAGD,IAAI,CAAC,CAAC,CAAC,CAAC;gBACrB,IAAI,OAAO,QAAQ,KAAK,UAAU;oBAAE,OAAO;gBAE3C,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;gBAChC,MAAM;QACR,CAAC;IACF,CAAC;IAGD,sCAAgB,GAAhB;QAAA,iBAKC;QAJA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YAC9B,KAAI,CAAC,cAAc,EAAE,CAAC;QACvB,CAAC,EAAE,IAAI,CAAC,CAAC;IACV,CAAC;IAED,oCAAc,GAAd;QACC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAC3B,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,OAAO,EACN,gFAAgF;aACjF,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,oCAAc,GAAd;QACC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,6BAAO,GAAP,UACC,OAAe,EACf,KAAa,EACb,KAAmC;QAAnC,sBAAA,EAAA,iBAAmC;QAEnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CACvB,WAAI,IAAI,IAAI,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,yBAAe,KAAK,eAC7D,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,KAAK,CACf,CACF,CAAC;QAEF,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI,SAAS;YAC3C,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,KAAK,CAAC,CAAC;;YACnC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,KAAK,CAAC,CAAC;IAC5C,CAAC;IAGK,6BAAO,GAAb;4DAAc,OAAwB;YAAxB,wBAAA,EAAA,eAAwB;;;;wBACrC,IAAI,IAAI,CAAC,gBAAgB;4BAAE,sBAAO;wBAClC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAEhC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,mBAAmB,GAAG,KAAK,CAAC;wBAE7D,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;wBAEvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;wBAC7B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;wBACpB,IAAI,CAAC,cAAc,EAAE,CAAC;wBAEtB,qBAAM,IAAA,aAAK,EAAC,IAAI,CAAC,EAAA;;wBAAjB,SAAiB,CAAC;wBAElB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACpC,IAAI,CAAC,MAAM,CAAC,IAAI,qBAAO,IAAI,CAAC,MAAM,CAAC,OAAO,OAAC,CAAC;4BAC5C,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;wBAC1B,CAAC;wBAED,IAAI,OAAO;4BACV,IAAI,CAAC,OAAO,CAAC,iCAAiC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;6BAE9D,CAAA,IAAI,CAAC,OAAO,IAAI,IAAI,CAAA,EAApB,wBAAoB;wBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAE7B,qBAAM,IAAA,aAAK,EAAC,IAAI,CAAC,EAAA;;wBAAjB,SAAiB,CAAC;wBAElB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;4BAC5D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;4BAC7B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;wBACjD,CAAC;;;wBAEF,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;6BAEhB,CAAC,OAAO,EAAR,wBAAQ;wBACX,IAAI,CAAC,OAAO,GAAG,+BAA+B,CAAC;wBAC/C,IAAI,CAAC,cAAc,EAAE,CAAC;wBAEtB,qBAAM,IAAA,aAAK,EAAC,KAAK,CAAC,EAAA;;wBAAlB,SAAkB,CAAC;;4BAEpB,qBAAM,IAAI,CAAC,KAAK,EAAE,EAAA;;wBAAlB,SAAkB,CAAC;;;;;KACnB;IAEK,2BAAK,GAAX;;;;;;;;wBACC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACpC,IAAI,CAAC,MAAM,CAAC,IAAI,qBAAO,IAAI,CAAC,MAAM,CAAC,OAAO,OAAC,CAAC;4BAC5C,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;wBAC1B,CAAC;wBACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBAC5B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;wBAC9B,IAAI,CAAC,cAAc,EAAE,CAAC;wBAEtB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,mBAAmB,GAAG,KAAK,CAAC;wBAE7D,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAE1B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;wBACrD,IAAI,IAAI,IAAI,IAAI,IAAI,CAAC,IAAA,yBAAc,EAAC,IAAI,CAAC,EAAE,CAAC;4BAC3C,IAAI,CAAC,OAAO,CACX,oBAAoB,EACpB,wDAAiD,IAAI,CAAE,CACvD,CAAC;4BACF,sBAAO;wBACR,CAAC;6BAEG,CAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,KAAK,WAAW,CAAA,EAA7C,wBAA6C;wBAChD,qBAAM,IAAI,OAAO,CAAO,UAAC,OAAO;gCAC/B,KAAI,CAAC,OAAO,CACX,wCAAwC,EACxC,IAAI,EACJ,UAAU,CACV,CAAC;gCACF,IAAI,CAAC,GAAG,WAAW,CAAC;oCACnB,IAAI,KAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,KAAK,WAAW;wCAAE,OAAO;oCAE1D,aAAa,CAAC,CAAC,CAAC,CAAC;oCACjB,OAAO,EAAE,CAAC;gCACX,CAAC,EAAE,IAAI,CAAC,CAAC;4BACV,CAAC,CAAC,EAAA;;wBAZF,SAYE,CAAC;;;6BAEA,CAAA,CAAA,MAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,0CAAE,KAAK,MAAK,SAAS,CAAA,EAA1D,wBAA0D;wBAC7D,qBAAM,IAAI,OAAO,CAAO,UAAC,OAAO;gCAC/B,KAAI,CAAC,OAAO,CACX,8CAA8C,EAC9C,IAAI,EACJ,UAAU,CACV,CAAC;gCACF,IAAI,CAAC,GAAG,WAAW,CAAC;;oCACnB,IACC,CAAA,MAAA,KAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,0CAAE,KAAK;wCAC5C,SAAS;wCAET,OAAO;oCAER,aAAa,CAAC,CAAC,CAAC,CAAC;oCACjB,OAAO,EAAE,CAAC;gCACX,CAAC,EAAE,IAAI,CAAC,CAAC;4BACV,CAAC,CAAC,EAAA;;wBAhBF,SAgBE,CAAC;;;wBAEE,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC;wBAE7C,IAAI,CAAC,OAAO,CAAC,+BAAwB,QAAQ,CAAE,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;wBAEnE,IAAI,CAAC,OAAO,GAAG,IAAA,qBAAK,EACnB,IAAI,EACJ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAC5C;4BACC,KAAK,EAAE,MAAM;yBACb,CACD,CAAC;wBAEF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,IAAI,EAAE,MAAM;4BACpC,IAAI,KAAI,CAAC,gBAAgB;gCAAE,OAAO;4BAClC,KAAI,CAAC,OAAO,CACX,gBAAgB,EAChB,mCAA4B,IAAI,yBAAe,MAAM,CAAE,EACvD,SAAS,CACT,CAAC;4BACF,KAAI,CAAC,OAAO,EAAE,CAAC;wBAChB,CAAC,CAAC,CAAC;wBACH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,UAAC,GAAG;4BAC5B,KAAI,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;4BAC3C,KAAI,CAAC,OAAO,EAAE,CAAC;wBAChB,CAAC,CAAC,CAAC;wBACH,MAAA,IAAI,CAAC,OAAO,CAAC,MAAM,0CAAE,EAAE,CAAC,MAAM,EAAE,UAAC,IAAI;4BACpC,IAAM,KAAK,GAAG,IAAI;iCAChB,QAAQ,EAAE;iCACV,IAAI,EAAE;iCACN,KAAK,CAAC,IAAI,CAAC;iCACX,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,MAAM,GAAG,CAAC,EAAf,CAAe,CAAC,CAAC;4BACpC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI;gCAClB,IAAM,aAAa,GAAG,WAAI,IAAI,IAAI,EAAE,CAAC,kBAAkB,CACtD,OAAO,CACP,gBAAM,QAAQ,eAAK,IAAI,CAAE,CAAC;gCAC3B,IAAI,UAAU;oCAAE,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;gCACnD,KAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;4BACzC,CAAC,CAAC,CAAC;wBACJ,CAAC,CAAC,CAAC;wBACH,MAAA,IAAI,CAAC,OAAO,CAAC,MAAM,0CAAE,EAAE,CAAC,MAAM,EAAE,UAAC,IAAI;4BACpC,IAAM,KAAK,GAAG,IAAI;iCAChB,QAAQ,EAAE;iCACV,IAAI,EAAE;iCACN,KAAK,CAAC,IAAI,CAAC;iCACX,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,MAAM,GAAG,CAAC,EAAf,CAAe,CAAC,CAAC;4BACpC,KAAK,CAAC,OAAO,CAAC,UAAC,IAAI;gCAClB,IAAM,aAAa,GAAG,WAAI,IAAI,IAAI,EAAE,CAAC,kBAAkB,CACtD,OAAO,CACP,gBAAM,QAAQ,uBAAa,IAAI,CAAE,CAAC;gCACnC,IAAI,UAAU;oCAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;gCACrD,KAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;4BACzC,CAAC,CAAC,CAAC;wBACJ,CAAC,CAAC,CAAC;wBACH,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACxB,UAAU,CAAC;;4BACV,IACC,KAAI,CAAC,OAAO,IAAI,IAAI;iCACpB,MAAA,KAAI,CAAC,OAAO,0CAAE,MAAM,CAAA;gCACpB,CAAA,MAAA,KAAI,CAAC,OAAO,0CAAE,QAAQ,KAAI,IAAI;gCAC9B,KAAI,CAAC,gBAAgB;gCAErB,OAAO;4BAER,KAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;4BACvC,KAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;wBACrC,CAAC,EAAE,IAAI,CAAC,CAAC;;;;;KACT;IAED,+BAAS,GAAT;QACC,OAAO;YACN,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YAEjB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;SACnB,CAAC;IACH,CAAC;IACF,kBAAC;AAAD,CAAC,AA7PD,IA6PC;AA7PY,kCAAW"} \ No newline at end of file diff --git a/dist/Unity/UnityWebSocket.js b/dist/Unity/UnityWebSocket.js new file mode 100644 index 0000000..d249968 --- /dev/null +++ b/dist/Unity/UnityWebSocket.js @@ -0,0 +1,244 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UnityWebSocket = void 0; +var ws_1 = require("ws"); +var Utils_1 = require("../Utils"); +var PREFIX = '[Unity]'; +var UnityWebSocket = /** @class */ (function () { + function UnityWebSocket(Main) { + this.state = 'DISCONNECTED'; + this.message = 'Waiting for process...'; + this.parameters = { + timelineWatching: false, + timelineStanding: false, + timelineProgress: 0, + zedPath: '', + zedReady: false, + zedFPS: '-', + parameters: [], + }; + this.disconnected = false; + this.restartRequested = false; + this._Main = Main; + } + UnityWebSocket.prototype.handle = function (command) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + switch (command) { + case 'parameterValue': + var sliderIndex = args[0]; + var percentage = args[1]; + if (this.parameters.parameters[sliderIndex] == undefined) + return; + this.parameters.parameters[sliderIndex].outputValue = + percentage; + if (this.socket == null || + this.socket.readyState !== ws_1.WebSocket.OPEN) + return; + this.socket.send(JSON.stringify({ + type: 'set_slider_value', + sliderIndex: sliderIndex, + sliderValue: percentage, + })); + this.broadcastState(); + break; + } + }; + UnityWebSocket.prototype.broadcastState = function () { + this._Main.WebServer.socket.emit('unityWebSocketState', this.getState()); + }; + UnityWebSocket.prototype.setInfo = function (message, error, state) { + if (state === void 0) { state = 'FAILED'; } + this.message = message; + this.error = error; + this.state = state; + this.broadcastState(); + if (state == 'FAILED' || state == 'DISCONNECTED') + console.warn(PREFIX, message !== null && message !== void 0 ? message : error); + else + console.log(PREFIX, message !== null && message !== void 0 ? message : error); + }; + UnityWebSocket.prototype.stopFetchClocks = function () { + clearInterval(this.heartbeatClock); + clearInterval(this.calibrationImageClock); + }; + UnityWebSocket.prototype.handleSocketMessage = function (data) { + var message; + try { + message = JSON.parse(data.toString()); + } + catch (error) { + return; + } + switch (message.type) { + case 'heartbeat_data': + this.parameters.timelineWatching = + message.heartbeat.dataTimeline.isWatching; + this.parameters.timelineStanding = + message.heartbeat.dataTimeline.isStanding; + this.parameters.timelineProgress = + message.heartbeat.dataTimeline.timelineProgress; + this.parameters.zedPath = "".concat(message.heartbeat.zedCamera.streamInputIP, ":").concat(message.heartbeat.zedCamera.streamInputPort); + this.parameters.zedReady = + message.heartbeat.zedCamera.isZedReady; + this.parameters.zedFPS = message.heartbeat.zedCamera.cameraFPS; + this.parameters.parameters = message.heartbeat.dataSliders; + this.broadcastState(); + break; + case 'response_camera_frame': + this._Main.WebServer.Calibration.writeCalibrationImage(message.imageBase64); + break; + } + }; + UnityWebSocket.prototype.disconnect = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + this.restartRequested = true; + this.disconnected = true; + if (this.socket != null) { + this.socket.close(); + this.socket = null; + } + this.stopFetchClocks(); + this.setInfo('Waiting for process...', null, 'DISCONNECTED'); + return [2 /*return*/]; + }); + }); + }; + UnityWebSocket.prototype.reconnect = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (this.restartRequested) + return [2 /*return*/]; + if (this.disconnected) + return [2 /*return*/]; + this.restartRequested = true; + this.stopFetchClocks(); + if (this.socket != null) { + this.socket.close(); + this.socket = null; + } + return [4 /*yield*/, (0, Utils_1.delay)(2000)]; + case 1: + _a.sent(); + if (this.disconnected) + return [2 /*return*/]; + this.message = "Reconnecting in 10 seconds..."; + this.broadcastState(); + return [4 /*yield*/, (0, Utils_1.delay)(10000)]; + case 2: + _a.sent(); + if (this.disconnected) + return [2 /*return*/]; + return [4 /*yield*/, this.connect()]; + case 3: + _a.sent(); + return [2 /*return*/]; + } + }); + }); + }; + UnityWebSocket.prototype.connect = function () { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this.restartRequested = false; + this.disconnected = false; + this.stopFetchClocks(); + this.setInfo('Connecting...', null, 'CONNECTING'); + return [4 /*yield*/, (0, Utils_1.delay)(1000)]; + case 1: + _a.sent(); + this.socket = new ws_1.WebSocket("ws://".concat(this._Main.Config.unity.webSocket.ip, ":").concat(this._Main.Config.unity.webSocket.port)); + this.socket.on('error', function (error) { + if (_this.restartRequested) + return; + _this.setInfo('Connection error', "Could not connect: ".concat(error.message), 'FAILED'); + _this.reconnect(); + }); + this.socket.on('open', function () { + _this.startFetchClocks(); + _this.setInfo('Connected', null, 'CONNECTED'); + }); + this.socket.on('close', function () { + if (_this.restartRequested) + return; + _this.setInfo('Disconnected', 'Unity was disconnected unexpectedly', 'FAILED'); + _this.reconnect(); + }); + this.socket.on('message', function (data) { return _this.handleSocketMessage(data); }); + return [2 /*return*/]; + } + }); + }); + }; + UnityWebSocket.prototype.startFetchClocks = function () { + var _this = this; + this.socket.send(JSON.stringify({ type: 'set_heartbeat_auto_send', autoSend: false })); + this.heartbeatClock = setInterval(function () { + if (_this.socket == null || + _this.socket.readyState !== ws_1.WebSocket.OPEN) + return; + _this.socket.send(JSON.stringify({ type: 'request_heartbeat' })); + }, this._Main.Config.unity.heartbeatInterval); + this.calibrationImageClock = setInterval(function () { + if (_this.socket == null || + _this.socket.readyState !== ws_1.WebSocket.OPEN) + return; + _this.socket.send(JSON.stringify({ type: 'request_camera_frame' })); + }, this._Main.Config.unity.calibrationImageInterval); + }; + UnityWebSocket.prototype.getState = function () { + return { + state: this.state, + message: this.message, + error: this.error, + parameters: this.parameters, + }; + }; + return UnityWebSocket; +}()); +exports.UnityWebSocket = UnityWebSocket; +//# sourceMappingURL=UnityWebSocket.js.map \ No newline at end of file diff --git a/dist/Unity/UnityWebSocket.js.map b/dist/Unity/UnityWebSocket.js.map new file mode 100644 index 0000000..d6044ca --- /dev/null +++ b/dist/Unity/UnityWebSocket.js.map @@ -0,0 +1 @@ +{"version":3,"file":"UnityWebSocket.js","sourceRoot":"","sources":["../../src/Unity/UnityWebSocket.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/UnityRunner.js b/dist/UnityRunner.js new file mode 100644 index 0000000..882f9f7 --- /dev/null +++ b/dist/UnityRunner.js @@ -0,0 +1,207 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UnityRunner = void 0; +var fs_extra_1 = require("fs-extra"); +var child_process_1 = require("child_process"); +var Utils_1 = require("./Utils"); +var PREFIX = '[UnityRunner]'; +var LOG_OUTPUT = !process.argv.includes('--no-output-log'); +var UnityRunner = /** @class */ (function () { + function UnityRunner(Main) { + this.state = 'STOPPED'; + this.startTime = null; + this.output = { current: [], last: [] }; + this.restartTriggered = false; + this._Main = Main; + } + UnityRunner.prototype.requestRestart = function () { + if (this.state !== 'RUNNING') + return { + succeed: false, + message: 'Cannot restart when process is not running. It is probably restarting already.', + }; + this.restart(true); + return { succeed: true }; + }; + UnityRunner.prototype.broadcastState = function () { + this._Main.WebServer.socket.emit('unityRunnerState', this.getStatus()); + }; + UnityRunner.prototype.setInfo = function (message, error, state) { + if (state === void 0) { state = 'PROBLEM'; } + this.message = message; + this.error = error; + this.state = state; + this.broadcastState(); + this.output.current.push("[".concat(new Date().toLocaleTimeString('nl-NL'), "] [System] [").concat(state, "] ").concat(message !== null && message !== void 0 ? message : error)); + if (state == 'PROBLEM' || state == 'STOPPED') + console.warn(PREFIX, message !== null && message !== void 0 ? message : error); + else + console.log(PREFIX, message !== null && message !== void 0 ? message : error); + }; + UnityRunner.prototype.restart = function () { + return __awaiter(this, arguments, void 0, function (instant) { + if (instant === void 0) { instant = false; } + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (this.restartTriggered) + return [2 /*return*/]; + if (this.output.current.length > 0) { + this.output.last = __spreadArray([], this.output.current, true); + this.output.current = []; + } + this.restartTriggered = true; + this.startTime = -1; + this.broadcastState(); + if (instant) + this.setInfo('Process will restart shortly...', null, 'STOPPED'); + if (!(this.process != null)) return [3 /*break*/, 2]; + this.process.kill('SIGTERM'); + return [4 /*yield*/, (0, Utils_1.delay)(3000)]; + case 1: + _a.sent(); + if (!this.process.killed && this.process.exitCode === null) { + this.process.kill('SIGKILL'); + console.log(PREFIX, 'Sent SIGKILL to process.'); + } + _a.label = 2; + case 2: + this.startTime = -1; + if (!!instant) return [3 /*break*/, 4]; + this.setInfo("Restarting process in 5 seconds...", null, 'STOPPED'); + return [4 /*yield*/, (0, Utils_1.delay)(5000)]; + case 3: + _a.sent(); + _a.label = 4; + case 4: return [4 /*yield*/, this.start()]; + case 5: + _a.sent(); + return [2 /*return*/]; + } + }); + }); + }; + UnityRunner.prototype.start = function () { + var _this = this; + var _a, _b; + if (this.output.current.length > 0) { + this.output.last = __spreadArray([], this.output.current, true); + this.output.current = []; + } + this.startTime = Date.now(); + this.restartTriggered = false; + this.broadcastState(); + var path = this._Main.Config.unity.executable.path; + if (path == null || !(0, fs_extra_1.pathExistsSync)(path)) { + this.setInfo('Executable problem', "Executable path is not set or does not exist: ".concat(path)); + return; + } + var fileName = path.split(/(\/|\\)/).pop(); + this.setInfo("Starting executable: ".concat(fileName), null, 'STARTING'); + this.process = (0, child_process_1.spawn)(path, this._Main.Config.unity.executable.arguments, { + stdio: 'pipe', + }); + this.process.on('exit', function (code, signal) { + if (_this.restartTriggered) + return; + _this.setInfo('Process exited', "Process exited with code ".concat(code, " and signal ").concat(signal), 'STOPPED'); + _this.restart(); + }); + this.process.on('error', function (err) { + _this.setInfo('Process error', err.message); + _this.restart(); + }); + (_a = this.process.stdout) === null || _a === void 0 ? void 0 : _a.on('data', function (data) { + var lines = data + .toString() + .trim() + .split('\n') + .filter(function (line) { return line.length > 0; }); + lines.forEach(function (line) { + var formattedLine = "[".concat(new Date().toLocaleTimeString('nl-NL'), "] [").concat(fileName, "] ").concat(line); + if (LOG_OUTPUT) + console.log(PREFIX, formattedLine); + _this.output.current.push(formattedLine); + }); + }); + (_b = this.process.stderr) === null || _b === void 0 ? void 0 : _b.on('data', function (data) { + var lines = data + .toString() + .trim() + .split('\n') + .filter(function (line) { return line.length > 0; }); + lines.forEach(function (line) { + var formattedLine = "[".concat(new Date().toLocaleTimeString('nl-NL'), "] [").concat(fileName, "] [ERROR] ").concat(line); + if (LOG_OUTPUT) + console.error(PREFIX, formattedLine); + _this.output.current.push(formattedLine); + }); + }); + setTimeout(function () { + var _a, _b; + if (_this.process == null || + ((_a = _this.process) === null || _a === void 0 ? void 0 : _a.killed) || + ((_b = _this.process) === null || _b === void 0 ? void 0 : _b.exitCode) != null || + _this.restartTriggered) + return; + _this.setInfo('Running', '', 'RUNNING'); + }, 5000); + }; + UnityRunner.prototype.getStatus = function () { + return { + state: this.state, + message: this.message, + error: this.error, + startTime: this.startTime, + output: this.output, + }; + }; + return UnityRunner; +}()); +exports.UnityRunner = UnityRunner; +//# sourceMappingURL=UnityRunner.js.map \ No newline at end of file diff --git a/dist/UnityRunner.js.map b/dist/UnityRunner.js.map new file mode 100644 index 0000000..ea9f62e --- /dev/null +++ b/dist/UnityRunner.js.map @@ -0,0 +1 @@ +{"version":3,"file":"UnityRunner.js","sourceRoot":"","sources":["../src/UnityRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/Utils.js b/dist/Utils.js new file mode 100644 index 0000000..f995540 --- /dev/null +++ b/dist/Utils.js @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.delay = delay; +function delay(duration) { + return new Promise(function (resolve) { return setTimeout(resolve, duration); }); +} +//# sourceMappingURL=Utils.js.map \ No newline at end of file diff --git a/dist/Utils.js.map b/dist/Utils.js.map new file mode 100644 index 0000000..cd36e95 --- /dev/null +++ b/dist/Utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../src/Utils.ts"],"names":[],"mappings":";;AAMA,sBAEC;AAFD,SAAgB,KAAK,CAAC,QAAgB;IACrC,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,EAA7B,CAA6B,CAAC,CAAC;AAChE,CAAC"} \ No newline at end of file diff --git a/dist/WebServer.js b/dist/WebServer.js new file mode 100644 index 0000000..8eeefac --- /dev/null +++ b/dist/WebServer.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.WebServer = void 0; +var express = require("express"); +var socket_io_1 = require("socket.io"); +var http_1 = require("http"); +var PREFIX = '[WebServer]'; +var WebServer = /** @class */ (function () { + function WebServer(Main) { + this._Main = Main; + this.prepare(); + } + WebServer.prototype.prepare = function () { + this.app = express(); + this.httpServer = (0, http_1.createServer)(this.app); + this.socket = new socket_io_1.Server(this.httpServer); + }; + WebServer.prototype.listen = function () { + var _this = this; + return new Promise(function (resolve) { + var port = _this._Main.Config.webServer.port; + _this.httpServer.listen(port, function () { + console.log(PREFIX, "Listening on port http://127.0.0.1:".concat(port)); + resolve(); + }); + }); + }; + return WebServer; +}()); +exports.WebServer = WebServer; +//# sourceMappingURL=WebServer.js.map \ No newline at end of file diff --git a/dist/WebServer.js.map b/dist/WebServer.js.map new file mode 100644 index 0000000..f42f2be --- /dev/null +++ b/dist/WebServer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"WebServer.js","sourceRoot":"","sources":["../src/WebServer.ts"],"names":[],"mappings":";;;AACA,iCAAmC;AACnC,uCAAqD;AACrD,6BAA0D;AAG1D,IAAM,MAAM,GAAG,aAAa,CAAC;AAC7B;IAOC,mBAAY,IAAU;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,OAAO,EAAE,CAAC;IAChB,CAAC;IAEO,2BAAO,GAAf;QACC,IAAI,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,IAAA,mBAAY,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,GAAG,IAAI,kBAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC;IAED,0BAAM,GAAN;QAAA,iBAWC;QAVA,OAAO,IAAI,OAAO,CAAO,UAAC,OAAO;YAChC,IAAM,IAAI,GAAG,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;YAC9C,KAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE;gBAC5B,OAAO,CAAC,GAAG,CACV,MAAM,EACN,6CAAsC,IAAI,CAAE,CAC5C,CAAC;gBACF,OAAO,EAAE,CAAC;YACX,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC;IACF,gBAAC;AAAD,CAAC,AA/BD,IA+BC;AA/BY,8BAAS"} \ No newline at end of file diff --git a/dist/WebServer/CalibrationRouter.js b/dist/WebServer/CalibrationRouter.js new file mode 100644 index 0000000..1a795eb --- /dev/null +++ b/dist/WebServer/CalibrationRouter.js @@ -0,0 +1,80 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CalibrationRouter = void 0; +var express_1 = require("express"); +var path_1 = require("path"); +var fs_extra_1 = require("fs-extra"); +var CalibrationRouter = /** @class */ (function () { + function CalibrationRouter(Main) { + this.hasCalibrationImage = false; + this._Main = Main; + this.Router = (0, express_1.Router)(); + this.calibrationImagePath = (0, path_1.join)(this._Main.dataPath, 'calibrationImage.png'); + this.registerRoutes(); + } + CalibrationRouter.prototype.registerRoutes = function () { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + this.Router.get('/calibrationImage', function (req, res) { + if (!_this.hasCalibrationImage) + return res.redirect('/img/noCalibrationImage.png'); + res.sendFile(_this.calibrationImagePath); + }); + return [2 /*return*/]; + }); + }); + }; + CalibrationRouter.prototype.writeCalibrationImage = function (base64) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, (0, fs_extra_1.writeFile)(this.calibrationImagePath, Buffer.from(base64, 'base64'))]; + case 1: + _a.sent(); + this.hasCalibrationImage = true; + return [2 /*return*/]; + } + }); + }); + }; + return CalibrationRouter; +}()); +exports.CalibrationRouter = CalibrationRouter; +//# sourceMappingURL=CalibrationRouter.js.map \ No newline at end of file diff --git a/dist/WebServer/CalibrationRouter.js.map b/dist/WebServer/CalibrationRouter.js.map new file mode 100644 index 0000000..df8c197 --- /dev/null +++ b/dist/WebServer/CalibrationRouter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"CalibrationRouter.js","sourceRoot":"","sources":["../../src/WebServer/CalibrationRouter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAiC;AAEjC,6BAA4B;AAC5B,qCAA4E;AAE5E;IAOC,2BAAY,IAAU;QAFtB,wBAAmB,GAAY,KAAK,CAAC;QAGpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;QAEvB,IAAI,CAAC,oBAAoB,GAAG,IAAA,WAAI,EAC/B,IAAI,CAAC,KAAK,CAAC,QAAQ,EACnB,sBAAsB,CACtB,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC;IAEK,0CAAc,GAApB;;;;gBACC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,UAAC,GAAG,EAAE,GAAG;oBAC7C,IAAI,CAAC,KAAI,CAAC,mBAAmB;wBAC5B,OAAO,GAAG,CAAC,QAAQ,CAAC,6BAA6B,CAAC,CAAC;oBAEpD,GAAG,CAAC,QAAQ,CAAC,KAAI,CAAC,oBAAoB,CAAC,CAAC;gBACzC,CAAC,CAAC,CAAC;;;;KACH;IAEK,iDAAqB,GAA3B,UAA4B,MAAc;;;;4BACzC,qBAAM,IAAA,oBAAS,EACd,IAAI,CAAC,oBAAoB,EACzB,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAC7B,EAAA;;wBAHD,SAGC,CAAC;wBACF,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;;;;;KAChC;IACF,wBAAC;AAAD,CAAC,AAnCD,IAmCC;AAnCY,8CAAiB"} \ No newline at end of file diff --git a/dist/WebServer/DahboardRouter.js b/dist/WebServer/DahboardRouter.js new file mode 100644 index 0000000..9272a90 --- /dev/null +++ b/dist/WebServer/DahboardRouter.js @@ -0,0 +1,100 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DashboardRouter = void 0; +var express_1 = require("express"); +var path_1 = require("path"); +var fs_extra_1 = require("fs-extra"); +var DashboardRouter = /** @class */ (function () { + function DashboardRouter(Main) { + this._Main = Main; + this.Router = (0, express_1.Router)(); + this.path = (0, path_1.join)(__filename, '..', '..', '..', 'frontend', 'views', 'dashboard'); + this.registerRoutes(); + } + DashboardRouter.prototype.registerRoutes = function () { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + this.Router.get(['/', '/dashboard'], function (req, res) { return __awaiter(_this, void 0, void 0, function () { + var htmlContent; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, (0, fs_extra_1.readFile)((0, path_1.join)(this.path, 'index.html'))]; + case 1: + htmlContent = _a.sent(); + res.setHeader('Content-Type', 'text/html'); + res.send(htmlContent); + return [2 /*return*/]; + } + }); + }); }); + this.Router.get('/style.css', function (req, res) { return __awaiter(_this, void 0, void 0, function () { + var styleContent; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, (0, fs_extra_1.readFile)((0, path_1.join)(this.path, 'style.css'))]; + case 1: + styleContent = _a.sent(); + res.setHeader('Content-Type', 'text/css'); + res.send(styleContent); + return [2 /*return*/]; + } + }); + }); }); + this.Router.get('/script.js', function (req, res) { return __awaiter(_this, void 0, void 0, function () { + var scriptContent; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, (0, fs_extra_1.readFile)((0, path_1.join)(this.path, 'script.js'))]; + case 1: + scriptContent = _a.sent(); + res.setHeader('Content-Type', 'application/javascript'); + res.send(scriptContent); + return [2 /*return*/]; + } + }); + }); }); + return [2 /*return*/]; + }); + }); + }; + return DashboardRouter; +}()); +exports.DashboardRouter = DashboardRouter; +//# sourceMappingURL=DahboardRouter.js.map \ No newline at end of file diff --git a/dist/WebServer/DahboardRouter.js.map b/dist/WebServer/DahboardRouter.js.map new file mode 100644 index 0000000..64b8def --- /dev/null +++ b/dist/WebServer/DahboardRouter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"DahboardRouter.js","sourceRoot":"","sources":["../../src/WebServer/DahboardRouter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAiC;AAEjC,6BAA4B;AAC5B,qCAAiE;AAEjE;IAMC,yBAAY,IAAU;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;QAEvB,IAAI,CAAC,IAAI,GAAG,IAAA,WAAI,EACf,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,OAAO,EACP,WAAW,CACX,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC;IAEK,wCAAc,GAApB;;;;gBACC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCAC/B,qBAAM,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,EAAA;;gCAA3D,WAAW,GAAG,SAA6C;gCACjE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;gCAC3C,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;;;qBACtB,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCACvB,qBAAM,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAA;;gCAA3D,YAAY,GAAG,SAA4C;gCACjE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;gCAC1C,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;;;qBACvB,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCACtB,qBAAM,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAA;;gCAA5D,aAAa,GAAG,SAA4C;gCAClE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;gCACxD,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;;;qBACxB,CAAC,CAAC;;;;KACH;IACF,sBAAC;AAAD,CAAC,AAxCD,IAwCC;AAxCY,0CAAe"} \ No newline at end of file diff --git a/dist/WebServer/DashboardRouter.js b/dist/WebServer/DashboardRouter.js new file mode 100644 index 0000000..53eb9ec --- /dev/null +++ b/dist/WebServer/DashboardRouter.js @@ -0,0 +1,100 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DashboardRouter = void 0; +var express_1 = require("express"); +var path_1 = require("path"); +var fs_extra_1 = require("fs-extra"); +var DashboardRouter = /** @class */ (function () { + function DashboardRouter(Main) { + this._Main = Main; + this.Router = (0, express_1.Router)(); + this.path = (0, path_1.join)(__filename, '..', '..', '..', 'frontend', 'views', 'dashboard'); + this.registerRoutes(); + } + DashboardRouter.prototype.registerRoutes = function () { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + this.Router.get(['/', '/dashboard', '/calibration', '/cameralogs', '/unitylogs'], function (req, res) { return __awaiter(_this, void 0, void 0, function () { + var htmlContent; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, (0, fs_extra_1.readFile)((0, path_1.join)(this.path, 'index.html'))]; + case 1: + htmlContent = _a.sent(); + res.setHeader('Content-Type', 'text/html'); + res.send(htmlContent); + return [2 /*return*/]; + } + }); + }); }); + this.Router.get('/style.css', function (req, res) { return __awaiter(_this, void 0, void 0, function () { + var styleContent; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, (0, fs_extra_1.readFile)((0, path_1.join)(this.path, 'style.css'))]; + case 1: + styleContent = _a.sent(); + res.setHeader('Content-Type', 'text/css'); + res.send(styleContent); + return [2 /*return*/]; + } + }); + }); }); + this.Router.get('/script.js', function (req, res) { return __awaiter(_this, void 0, void 0, function () { + var scriptContent; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, (0, fs_extra_1.readFile)((0, path_1.join)(this.path, 'script.js'))]; + case 1: + scriptContent = _a.sent(); + res.setHeader('Content-Type', 'application/javascript'); + res.send(scriptContent); + return [2 /*return*/]; + } + }); + }); }); + return [2 /*return*/]; + }); + }); + }; + return DashboardRouter; +}()); +exports.DashboardRouter = DashboardRouter; +//# sourceMappingURL=DashboardRouter.js.map \ No newline at end of file diff --git a/dist/WebServer/DashboardRouter.js.map b/dist/WebServer/DashboardRouter.js.map new file mode 100644 index 0000000..b7505c9 --- /dev/null +++ b/dist/WebServer/DashboardRouter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"DashboardRouter.js","sourceRoot":"","sources":["../../src/WebServer/DashboardRouter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAiC;AAEjC,6BAA4B;AAC5B,qCAAiE;AAEjE;IAMC,yBAAY,IAAU;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;QAEvB,IAAI,CAAC,IAAI,GAAG,IAAA,WAAI,EACf,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,OAAO,EACP,WAAW,CACX,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC;IAEK,wCAAc,GAApB;;;;gBACC,IAAI,CAAC,MAAM,CAAC,GAAG,CACd,CAAC,GAAG,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,CAAC,EAChE,UAAO,GAAG,EAAE,GAAG;;;;oCACM,qBAAM,IAAA,mBAAQ,EACjC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAC7B,EAAA;;gCAFK,WAAW,GAAG,SAEnB;gCACD,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;gCAC3C,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;;;qBACtB,CACD,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCACvB,qBAAM,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAA;;gCAA3D,YAAY,GAAG,SAA4C;gCACjE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;gCAC1C,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;;;qBACvB,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCACtB,qBAAM,IAAA,mBAAQ,EAAC,IAAA,WAAI,EAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,EAAA;;gCAA5D,aAAa,GAAG,SAA4C;gCAClE,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;gCACxD,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;;;qBACxB,CAAC,CAAC;;;;KACH;IACF,sBAAC;AAAD,CAAC,AA7CD,IA6CC;AA7CY,0CAAe"} \ No newline at end of file diff --git a/dist/WebServer/WebServer.js b/dist/WebServer/WebServer.js new file mode 100644 index 0000000..6c52666 --- /dev/null +++ b/dist/WebServer/WebServer.js @@ -0,0 +1,78 @@ +"use strict"; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.WebServer = void 0; +var express = require("express"); +var socket_io_1 = require("socket.io"); +var http_1 = require("http"); +var DashboardRouter_1 = require("./DashboardRouter"); +var path_1 = require("path"); +var CalibrationRouter_1 = require("./CalibrationRouter"); +var PREFIX = '[WebServer]'; +var WebServer = /** @class */ (function () { + function WebServer(Main) { + this._Main = Main; + this.Dashboard = new DashboardRouter_1.DashboardRouter(this._Main); + this.Calibration = new CalibrationRouter_1.CalibrationRouter(this._Main); + this.prepare(); + } + WebServer.prototype.prepare = function () { + var _this = this; + this.app = express(); + this.httpServer = (0, http_1.createServer)(this.app); + this.socket = new socket_io_1.Server(this.httpServer); + this.app.use(express.static((0, path_1.join)(__filename, '..', '..', '..', 'frontend', 'static'))); + this.app.use(this.Dashboard.Router); + this.app.use(this.Calibration.Router); + this.socket.on('connection', function (socket) { + socket.emit('cameraRunnerState', _this._Main.CameraRunner.getState()); + socket.emit('unityRunnerState', _this._Main.UnityRunner.getStatus()); + socket.emit('unityWebSocketState', _this._Main.UnityWebSocket.getState()); + socket.on('cameraRunner', function (command) { + var _a; + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + return (_a = _this._Main.CameraRunner).handle.apply(_a, __spreadArray([command], args, false)); + }); + socket.on('unityRunner', function (command) { + var _a; + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + return (_a = _this._Main.UnityRunner).handle.apply(_a, __spreadArray([command], args, false)); + }); + socket.on('unityWebSocket', function (command) { + var _a; + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + return (_a = _this._Main.UnityWebSocket).handle.apply(_a, __spreadArray([command], args, false)); + }); + }); + }; + WebServer.prototype.listen = function () { + var _this = this; + return new Promise(function (resolve) { + var port = _this._Main.Config.webServer.port; + _this.httpServer.listen(port, function () { + console.log(PREFIX, "Listening on port http://127.0.0.1:".concat(port)); + resolve(); + }); + }); + }; + return WebServer; +}()); +exports.WebServer = WebServer; +//# sourceMappingURL=WebServer.js.map \ No newline at end of file diff --git a/dist/WebServer/WebServer.js.map b/dist/WebServer/WebServer.js.map new file mode 100644 index 0000000..f7dc790 --- /dev/null +++ b/dist/WebServer/WebServer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"WebServer.js","sourceRoot":"","sources":["../../src/WebServer/WebServer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/static/img/morphix_logo_white.png b/frontend/static/img/morphix_logo_white.png new file mode 100644 index 0000000..dab6fc4 Binary files /dev/null and b/frontend/static/img/morphix_logo_white.png differ diff --git a/frontend/static/img/noCalibrationImage.png b/frontend/static/img/noCalibrationImage.png new file mode 100644 index 0000000..cdea5fb Binary files /dev/null and b/frontend/static/img/noCalibrationImage.png differ diff --git a/frontend/static/material-symbols/LICENSE b/frontend/static/material-symbols/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/frontend/static/material-symbols/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/frontend/static/material-symbols/README.md b/frontend/static/material-symbols/README.md new file mode 100644 index 0000000..64d45ec --- /dev/null +++ b/frontend/static/material-symbols/README.md @@ -0,0 +1,116 @@ +# [material-symbols](https://github.com/marella/material-symbols/tree/main/material-symbols) + +Latest variable icon fonts and CSS for Material Symbols. + +> This package is automatically updated, so it will always have the latest icons from Google. + +> For fonts with fewer variations, see [`@material-symbols/font-400`](https://www.npmjs.com/package/@material-symbols/font-400) +> +> For SVGs, see [`@material-symbols/svg-400`](https://www.npmjs.com/package/@material-symbols/svg-400) + +- [Installation](#installation) +- [Usage](#usage) +- [Available Icons](#available-icons) + +## Installation + +Install the [latest version][releases] using: + +```sh +npm install material-symbols@latest +``` + +## Usage + +Import in JS (example: `src/index.js` in Create React App, `src/main.js` in Vue CLI): + +```js +import 'material-symbols'; +``` + +or import in CSS (example: `src/styles.css` in Angular CLI): + +```css +@import 'material-symbols'; +``` + +or import in HTML: + +```html + +``` + +To display an icon, use one of the following: + +```html +face +face +face +``` + +To customize the variable font axes (fill, weight, grade, and optical size), use: + +```css +.material-symbols-outlined { + font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 48; +} +``` + +### Reducing Build Size + +The default `index.css` includes CSS for all fonts. This may cause build tools such as webpack to copy all fonts to the build directory even if you are not using all of them. To reduce the build size, import only the styles you need. For example, if you only need outlined icons, import `outlined.css` instead of the default `index.css`: + +```diff +-import 'material-symbols'; ++import 'material-symbols/outlined.css'; +``` + +
+Show all
+ +Icons | CSS | Sass +:--- | :--- | :--- +Outlined | outlined.css | outlined.scss +Rounded | rounded.css | rounded.scss +Sharp | sharp.css | sharp.scss + +
+ +### Using Sass + +Import in Sass (example: `src/styles.scss` in Angular CLI): + +```scss +@import 'material-symbols'; +``` + +If you are getting errors with webpack or Vue CLI, add this line before importing: + +```scss +$material-symbols-font-path: '~material-symbols/'; +``` + +### Using Angular `mat-icon` + +To display an icon, use one of the following: + +```html +face +face +face +``` + +## Available Icons + +See [demo]. + +## License + +Material Symbols are created by [Google](https://github.com/google/material-design-icons#license). + +> We have made these icons available for you to incorporate into your products under the [Apache License Version 2.0][license]. Feel free to remix and re-share these icons and documentation in your products. +We'd love attribution in your app's *about* screen, but it's not required. + +[releases]: https://github.com/marella/material-symbols/releases +[license]: https://github.com/marella/material-symbols/blob/main/material-symbols/LICENSE +[demo]: https://marella.github.io/material-symbols/demo/ diff --git a/frontend/static/material-symbols/_core.scss b/frontend/static/material-symbols/_core.scss new file mode 100644 index 0000000..55d198f --- /dev/null +++ b/frontend/static/material-symbols/_core.scss @@ -0,0 +1,47 @@ +$material-symbols-font-path: './' !default; + +// @see https://github.com/twbs/bootstrap/blob/main/scss/_functions.scss +@function material-symbols-str-replace($string, $search, $replace: '') { + $index: str-index($string, $search); + @if $index { + @return str-slice($string, 1, $index - 1) + $replace + + material-symbols-str-replace( + str-slice($string, $index + str-length($search)), + $search, + $replace + ); + } + @return $string; +} + +@mixin material-symbols-font($font-family) { + $class-name: to-lower-case($font-family); + $class-name: material-symbols-str-replace($class-name, ' ', '-'); + $font-file: $material-symbols-font-path + $class-name; + + @font-face { + font-family: $font-family; + font-style: normal; + font-weight: 100 700; + font-display: block; + src: url('#{$font-file}.woff2') format('woff2'); + } + + .#{$class-name} { + font-family: $font-family; + font-weight: normal; + font-style: normal; + font-size: 24px; + line-height: 1; + letter-spacing: normal; + text-transform: none; + display: inline-block; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + -webkit-font-smoothing: antialiased; // Support for all WebKit browsers + -moz-osx-font-smoothing: grayscale; // Support for Firefox + text-rendering: optimizeLegibility; // Support for Safari and Chrome + font-feature-settings: 'liga'; // Support for IE + } +} diff --git a/frontend/static/material-symbols/index.css b/frontend/static/material-symbols/index.css new file mode 100644 index 0000000..c7b7555 --- /dev/null +++ b/frontend/static/material-symbols/index.css @@ -0,0 +1,74 @@ +@font-face { + font-family: "Material Symbols Outlined"; + font-style: normal; + font-weight: 100 700; + font-display: block; + src: url("./material-symbols-outlined.woff2") format("woff2"); +} +.material-symbols-outlined { + font-family: "Material Symbols Outlined"; + font-weight: normal; + font-style: normal; + font-size: 24px; + line-height: 1; + letter-spacing: normal; + text-transform: none; + display: inline-block; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + font-feature-settings: "liga"; +} + +@font-face { + font-family: "Material Symbols Rounded"; + font-style: normal; + font-weight: 100 700; + font-display: block; + src: url("./material-symbols-rounded.woff2") format("woff2"); +} +.material-symbols-rounded { + font-family: "Material Symbols Rounded"; + font-weight: normal; + font-style: normal; + font-size: 24px; + line-height: 1; + letter-spacing: normal; + text-transform: none; + display: inline-block; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + font-feature-settings: "liga"; +} + +@font-face { + font-family: "Material Symbols Sharp"; + font-style: normal; + font-weight: 100 700; + font-display: block; + src: url("./material-symbols-sharp.woff2") format("woff2"); +} +.material-symbols-sharp { + font-family: "Material Symbols Sharp"; + font-weight: normal; + font-style: normal; + font-size: 24px; + line-height: 1; + letter-spacing: normal; + text-transform: none; + display: inline-block; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + font-feature-settings: "liga"; +} diff --git a/frontend/static/material-symbols/index.d.ts b/frontend/static/material-symbols/index.d.ts new file mode 100644 index 0000000..7108911 --- /dev/null +++ b/frontend/static/material-symbols/index.d.ts @@ -0,0 +1,3282 @@ +type MaterialSymbols = [ + "123", + "360", + "10k", + "10mp", + "11mp", + "12mp", + "13mp", + "14mp", + "15mp", + "16mp", + "17mp", + "18_up_rating", + "18mp", + "19mp", + "1k", + "1k_plus", + "1x_mobiledata", + "1x_mobiledata_badge", + "20mp", + "21mp", + "22mp", + "23mp", + "24mp", + "2d", + "2k", + "2k_plus", + "2mp", + "30fps", + "30fps_select", + "3d_rotation", + "3g_mobiledata", + "3g_mobiledata_badge", + "3k", + "3k_plus", + "3mp", + "3p", + "4g_mobiledata", + "4g_mobiledata_badge", + "4g_plus_mobiledata", + "4k", + "4k_plus", + "4mp", + "50mp", + "5g", + "5g_mobiledata_badge", + "5k", + "5k_plus", + "5mp", + "60fps", + "60fps_select", + "6_ft_apart", + "6k", + "6k_plus", + "6mp", + "7k", + "7k_plus", + "7mp", + "8k", + "8k_plus", + "8mp", + "9k", + "9k_plus", + "9mp", + "abc", + "ac_unit", + "accessibility", + "accessibility_new", + "accessible", + "accessible_forward", + "account_balance", + "account_balance_wallet", + "account_box", + "account_child", + "account_child_invert", + "account_circle", + "account_circle_off", + "account_tree", + "action_key", + "activity_zone", + "acute", + "ad", + "ad_group", + "ad_group_off", + "ad_off", + "ad_units", + "adaptive_audio_mic", + "adaptive_audio_mic_off", + "adb", + "add", + "add_a_photo", + "add_ad", + "add_alert", + "add_box", + "add_business", + "add_call", + "add_card", + "add_chart", + "add_circle", + "add_comment", + "add_diamond", + "add_home", + "add_home_work", + "add_link", + "add_location", + "add_location_alt", + "add_moderator", + "add_notes", + "add_photo_alternate", + "add_reaction", + "add_road", + "add_shopping_cart", + "add_task", + "add_to_drive", + "add_to_home_screen", + "add_to_photos", + "add_to_queue", + "add_triangle", + "adf_scanner", + "adjust", + "admin_meds", + "admin_panel_settings", + "ads_click", + "agender", + "agriculture", + "air", + "air_freshener", + "air_purifier", + "air_purifier_gen", + "airline_seat_flat", + "airline_seat_flat_angled", + "airline_seat_individual_suite", + "airline_seat_legroom_extra", + "airline_seat_legroom_normal", + "airline_seat_legroom_reduced", + "airline_seat_recline_extra", + "airline_seat_recline_normal", + "airline_stops", + "airlines", + "airplane_ticket", + "airplanemode_active", + "airplanemode_inactive", + "airplay", + "airport_shuttle", + "airware", + "airwave", + "alarm", + "alarm_add", + "alarm_off", + "alarm_on", + "alarm_smart_wake", + "album", + "align_center", + "align_end", + "align_flex_center", + "align_flex_end", + "align_flex_start", + "align_horizontal_center", + "align_horizontal_left", + "align_horizontal_right", + "align_items_stretch", + "align_justify_center", + "align_justify_flex_end", + "align_justify_flex_start", + "align_justify_space_around", + "align_justify_space_between", + "align_justify_space_even", + "align_justify_stretch", + "align_self_stretch", + "align_space_around", + "align_space_between", + "align_space_even", + "align_start", + "align_stretch", + "align_vertical_bottom", + "align_vertical_center", + "align_vertical_top", + "all_inbox", + "all_inclusive", + "all_match", + "all_out", + "allergies", + "allergy", + "alt_route", + "alternate_email", + "altitude", + "ambulance", + "amend", + "amp_stories", + "analytics", + "anchor", + "android", + "animated_images", + "animation", + "aod", + "aod_tablet", + "aod_watch", + "apartment", + "api", + "apk_document", + "apk_install", + "app_badging", + "app_blocking", + "app_promo", + "app_registration", + "app_shortcut", + "apparel", + "approval", + "approval_delegation", + "apps", + "apps_outage", + "aq", + "aq_indoor", + "ar_on_you", + "ar_stickers", + "architecture", + "archive", + "area_chart", + "arming_countdown", + "arrow_and_edge", + "arrow_back", + "arrow_back_ios", + "arrow_back_ios_new", + "arrow_circle_down", + "arrow_circle_left", + "arrow_circle_right", + "arrow_circle_up", + "arrow_cool_down", + "arrow_downward", + "arrow_downward_alt", + "arrow_drop_down", + "arrow_drop_down_circle", + "arrow_drop_up", + "arrow_forward", + "arrow_forward_ios", + "arrow_insert", + "arrow_left", + "arrow_left_alt", + "arrow_or_edge", + "arrow_outward", + "arrow_range", + "arrow_right", + "arrow_right_alt", + "arrow_selector_tool", + "arrow_split", + "arrow_top_left", + "arrow_top_right", + "arrow_upward", + "arrow_upward_alt", + "arrow_warm_up", + "arrows_more_down", + "arrows_more_up", + "arrows_outward", + "art_track", + "article", + "article_shortcut", + "artist", + "aspect_ratio", + "assignment", + "assignment_add", + "assignment_ind", + "assignment_late", + "assignment_return", + "assignment_returned", + "assignment_turned_in", + "assist_walker", + "assistant_device", + "assistant_direction", + "assistant_navigation", + "assistant_on_hub", + "assured_workload", + "asterisk", + "atm", + "atr", + "attach_email", + "attach_file", + "attach_file_add", + "attach_file_off", + "attach_money", + "attachment", + "attractions", + "attribution", + "audio_description", + "audio_file", + "audio_video_receiver", + "auto_awesome_mosaic", + "auto_awesome_motion", + "auto_delete", + "auto_read_pause", + "auto_read_play", + "auto_stories", + "auto_towing", + "auto_transmission", + "autofps_select", + "autopause", + "autoplay", + "autorenew", + "autostop", + "av1", + "av_timer", + "avc", + "avg_pace", + "avg_time", + "award_star", + "azm", + "baby_changing_station", + "back_hand", + "back_to_tab", + "background_dot_large", + "background_dot_small", + "background_grid_small", + "background_replace", + "backlight_high", + "backlight_high_off", + "backlight_low", + "backpack", + "backspace", + "backup", + "backup_table", + "badge", + "badge_critical_battery", + "bakery_dining", + "balance", + "balcony", + "ballot", + "bar_chart", + "bar_chart_4_bars", + "barcode", + "barcode_reader", + "barcode_scanner", + "barefoot", + "batch_prediction", + "bath_outdoor", + "bath_private", + "bath_public_large", + "bathroom", + "bathtub", + "battery_0_bar", + "battery_1_bar", + "battery_2_bar", + "battery_3_bar", + "battery_4_bar", + "battery_5_bar", + "battery_6_bar", + "battery_alert", + "battery_change", + "battery_charging_20", + "battery_charging_30", + "battery_charging_50", + "battery_charging_60", + "battery_charging_80", + "battery_charging_90", + "battery_charging_full", + "battery_error", + "battery_full", + "battery_full_alt", + "battery_horiz_000", + "battery_horiz_050", + "battery_horiz_075", + "battery_low", + "battery_plus", + "battery_profile", + "battery_saver", + "battery_share", + "battery_status_good", + "battery_unknown", + "battery_very_low", + "beach_access", + "bed", + "bedroom_baby", + "bedroom_child", + "bedroom_parent", + "bedtime", + "bedtime_off", + "beenhere", + "bento", + "bia", + "bid_landscape", + "bid_landscape_disabled", + "bigtop_updates", + "bike_scooter", + "biotech", + "blanket", + "blender", + "blind", + "blinds", + "blinds_closed", + "block", + "blood_pressure", + "bloodtype", + "bluetooth", + "bluetooth_connected", + "bluetooth_disabled", + "bluetooth_drive", + "bluetooth_searching", + "blur_circular", + "blur_linear", + "blur_medium", + "blur_off", + "blur_on", + "blur_short", + "body_fat", + "body_system", + "bolt", + "bomb", + "book", + "book_2", + "book_3", + "book_4", + "book_5", + "book_online", + "bookmark", + "bookmark_add", + "bookmark_added", + "bookmark_manager", + "bookmark_remove", + "bookmarks", + "border_all", + "border_bottom", + "border_clear", + "border_color", + "border_horizontal", + "border_inner", + "border_left", + "border_outer", + "border_right", + "border_style", + "border_top", + "border_vertical", + "bottom_app_bar", + "bottom_drawer", + "bottom_navigation", + "bottom_panel_close", + "bottom_panel_open", + "bottom_right_click", + "bottom_sheets", + "box", + "box_add", + "box_edit", + "boy", + "brand_awareness", + "brand_family", + "branding_watermark", + "breakfast_dining", + "breaking_news", + "breaking_news_alt_1", + "breastfeeding", + "brightness_1", + "brightness_2", + "brightness_3", + "brightness_4", + "brightness_5", + "brightness_6", + "brightness_7", + "brightness_alert", + "brightness_auto", + "brightness_empty", + "brightness_high", + "brightness_low", + "brightness_medium", + "bring_your_own_ip", + "broadcast_on_home", + "broadcast_on_personal", + "broken_image", + "browse", + "browse_activity", + "browse_gallery", + "browser_updated", + "brunch_dining", + "brush", + "bubble", + "bubble_chart", + "bubbles", + "bug_report", + "build", + "build_circle", + "bungalow", + "burst_mode", + "bus_alert", + "business_center", + "business_chip", + "business_messages", + "buttons_alt", + "cabin", + "cable", + "cached", + "cadence", + "cake", + "cake_add", + "calculate", + "calendar_add_on", + "calendar_apps_script", + "calendar_clock", + "calendar_month", + "calendar_today", + "calendar_view_day", + "calendar_view_month", + "calendar_view_week", + "call", + "call_end", + "call_log", + "call_made", + "call_merge", + "call_missed", + "call_missed_outgoing", + "call_quality", + "call_received", + "call_split", + "call_to_action", + "camera", + "camera_front", + "camera_indoor", + "camera_outdoor", + "camera_rear", + "camera_roll", + "camera_video", + "cameraswitch", + "campaign", + "camping", + "cancel", + "cancel_presentation", + "cancel_schedule_send", + "candle", + "candlestick_chart", + "captive_portal", + "capture", + "car_crash", + "car_rental", + "car_repair", + "car_tag", + "card_membership", + "card_travel", + "cardio_load", + "cardiology", + "cards", + "carpenter", + "carry_on_bag", + "carry_on_bag_checked", + "carry_on_bag_inactive", + "carry_on_bag_question", + "cases", + "casino", + "cast", + "cast_connected", + "cast_for_education", + "cast_pause", + "cast_warning", + "castle", + "category", + "celebration", + "cell_merge", + "cell_tower", + "cell_wifi", + "center_focus_strong", + "center_focus_weak", + "chair", + "chair_alt", + "chalet", + "change_circle", + "change_history", + "charger", + "charging_station", + "chart_data", + "chat", + "chat_add_on", + "chat_apps_script", + "chat_bubble", + "chat_error", + "chat_info", + "chat_paste_go", + "check", + "check_box", + "check_box_outline_blank", + "check_circle", + "check_in_out", + "check_indeterminate_small", + "check_small", + "checkbook", + "checked_bag", + "checked_bag_question", + "checklist", + "checklist_rtl", + "checkroom", + "cheer", + "chess", + "chevron_left", + "chevron_right", + "child_care", + "child_friendly", + "chip_extraction", + "chips", + "chrome_reader_mode", + "chromecast_2", + "chromecast_device", + "chronic", + "church", + "cinematic_blur", + "circle", + "circle_notifications", + "circles", + "circles_ext", + "clarify", + "clean_hands", + "cleaning", + "cleaning_bucket", + "cleaning_services", + "clear_all", + "clear_day", + "clear_night", + "climate_mini_split", + "clinical_notes", + "clock_loader_10", + "clock_loader_20", + "clock_loader_40", + "clock_loader_60", + "clock_loader_80", + "clock_loader_90", + "close", + "close_fullscreen", + "close_small", + "closed_caption", + "closed_caption_add", + "closed_caption_disabled", + "cloud", + "cloud_circle", + "cloud_done", + "cloud_download", + "cloud_off", + "cloud_sync", + "cloud_upload", + "cloudy_snowing", + "co2", + "co_present", + "code", + "code_blocks", + "code_off", + "coffee", + "coffee_maker", + "cognition", + "collapse_all", + "collapse_content", + "collections_bookmark", + "colorize", + "colors", + "comedy_mask", + "comic_bubble", + "comment", + "comment_bank", + "comments_disabled", + "commit", + "communication", + "communities", + "commute", + "compare", + "compare_arrows", + "compass_calibration", + "component_exchange", + "compost", + "compress", + "computer", + "concierge", + "conditions", + "confirmation_number", + "congenital", + "connect_without_contact", + "connected_tv", + "connecting_airports", + "construction", + "contact_emergency", + "contact_mail", + "contact_page", + "contact_phone", + "contact_support", + "contactless", + "contactless_off", + "contacts", + "contacts_product", + "content_copy", + "content_cut", + "content_paste", + "content_paste_go", + "content_paste_off", + "content_paste_search", + "contract", + "contract_delete", + "contract_edit", + "contrast", + "contrast_circle", + "contrast_rtl_off", + "contrast_square", + "control_camera", + "control_point_duplicate", + "controller_gen", + "conversion_path", + "conversion_path_off", + "conveyor_belt", + "cookie", + "cookie_off", + "cooking", + "cool_to_dry", + "copy_all", + "copyright", + "coronavirus", + "corporate_fare", + "cottage", + "counter_0", + "counter_1", + "counter_2", + "counter_3", + "counter_4", + "counter_5", + "counter_6", + "counter_7", + "counter_8", + "counter_9", + "countertops", + "create_new_folder", + "credit_card", + "credit_card_gear", + "credit_card_heart", + "credit_card_off", + "credit_score", + "crib", + "crisis_alert", + "crop", + "crop_16_9", + "crop_3_2", + "crop_5_4", + "crop_7_5", + "crop_9_16", + "crop_free", + "crop_landscape", + "crop_portrait", + "crop_rotate", + "crop_square", + "crossword", + "crowdsource", + "cruelty_free", + "css", + "csv", + "currency_bitcoin", + "currency_exchange", + "currency_franc", + "currency_lira", + "currency_pound", + "currency_ruble", + "currency_rupee", + "currency_yen", + "currency_yuan", + "curtains", + "curtains_closed", + "custom_typography", + "cut", + "cycle", + "cyclone", + "dangerous", + "dark_mode", + "dashboard", + "dashboard_customize", + "data_alert", + "data_array", + "data_check", + "data_exploration", + "data_info_alert", + "data_loss_prevention", + "data_object", + "data_saver_on", + "data_table", + "data_thresholding", + "data_usage", + "database", + "dataset", + "dataset_linked", + "date_range", + "deblur", + "deceased", + "decimal_decrease", + "decimal_increase", + "deck", + "dehaze", + "delete", + "delete_forever", + "delete_history", + "delete_sweep", + "demography", + "density_large", + "density_medium", + "density_small", + "dentistry", + "departure_board", + "deployed_code", + "deployed_code_account", + "deployed_code_alert", + "deployed_code_history", + "deployed_code_update", + "dermatology", + "description", + "deselect", + "design_services", + "desk", + "deskphone", + "desktop_access_disabled", + "desktop_mac", + "desktop_windows", + "destruction", + "details", + "detection_and_zone", + "detector", + "detector_alarm", + "detector_battery", + "detector_co", + "detector_offline", + "detector_smoke", + "detector_status", + "developer_board", + "developer_board_off", + "developer_guide", + "developer_mode", + "developer_mode_tv", + "device_hub", + "device_reset", + "device_thermostat", + "device_unknown", + "devices", + "devices_fold", + "devices_off", + "devices_other", + "devices_wearables", + "dew_point", + "diagnosis", + "dialer_sip", + "dialogs", + "dialpad", + "diamond", + "dictionary", + "difference", + "digital_out_of_home", + "digital_wellbeing", + "dining", + "dinner_dining", + "directions", + "directions_alt", + "directions_alt_off", + "directions_bike", + "directions_boat", + "directions_bus", + "directions_car", + "directions_off", + "directions_railway", + "directions_run", + "directions_subway", + "directions_walk", + "directory_sync", + "dirty_lens", + "disabled_by_default", + "disabled_visible", + "disc_full", + "discover_tune", + "dishwasher", + "dishwasher_gen", + "display_external_input", + "display_settings", + "distance", + "diversity_1", + "diversity_2", + "diversity_3", + "diversity_4", + "dns", + "do_not_disturb_off", + "do_not_disturb_on", + "do_not_disturb_on_total_silence", + "do_not_step", + "do_not_touch", + "dock", + "dock_to_bottom", + "dock_to_left", + "dock_to_right", + "docs_add_on", + "docs_apps_script", + "document_scanner", + "domain", + "domain_add", + "domain_disabled", + "domain_verification", + "domain_verification_off", + "domino_mask", + "done", + "done_all", + "done_outline", + "donut_large", + "donut_small", + "door_back", + "door_front", + "door_open", + "door_sensor", + "door_sliding", + "doorbell", + "doorbell_3p", + "doorbell_chime", + "double_arrow", + "downhill_skiing", + "download", + "download_2", + "download_done", + "download_for_offline", + "downloading", + "draft", + "draft_orders", + "drafts", + "drag_click", + "drag_handle", + "drag_indicator", + "drag_pan", + "draw", + "draw_abstract", + "draw_collage", + "dresser", + "drive_file_move", + "drive_folder_upload", + "dropdown", + "dry", + "dry_cleaning", + "dual_screen", + "duo", + "dvr", + "dynamic_feed", + "dynamic_form", + "e911_avatar", + "e911_emergency", + "e_mobiledata", + "e_mobiledata_badge", + "earbuds", + "earbuds_battery", + "early_on", + "earthquake", + "east", + "ecg", + "ecg_heart", + "eco", + "eda", + "edgesensor_high", + "edgesensor_low", + "edit", + "edit_attributes", + "edit_calendar", + "edit_document", + "edit_location", + "edit_location_alt", + "edit_note", + "edit_notifications", + "edit_off", + "edit_road", + "edit_square", + "editor_choice", + "egg", + "egg_alt", + "eject", + "elderly", + "elderly_woman", + "electric_bike", + "electric_bolt", + "electric_car", + "electric_meter", + "electric_moped", + "electric_rickshaw", + "electric_scooter", + "electrical_services", + "elevation", + "elevator", + "emergency", + "emergency_heat", + "emergency_heat_2", + "emergency_home", + "emergency_recording", + "emergency_share", + "emergency_share_off", + "emoji_events", + "emoji_flags", + "emoji_food_beverage", + "emoji_language", + "emoji_nature", + "emoji_objects", + "emoji_people", + "emoji_symbols", + "emoji_transportation", + "emoticon", + "empty_dashboard", + "enable", + "encrypted", + "endocrinology", + "energy", + "energy_program_saving", + "energy_program_time_used", + "energy_savings_leaf", + "engineering", + "enhanced_encryption", + "ent", + "enterprise", + "enterprise_off", + "equal", + "equalizer", + "error", + "error_med", + "escalator", + "escalator_warning", + "euro", + "euro_symbol", + "ev_charger", + "ev_mobiledata_badge", + "ev_shadow", + "ev_shadow_add", + "ev_shadow_minus", + "ev_station", + "event", + "event_available", + "event_busy", + "event_list", + "event_note", + "event_repeat", + "event_seat", + "event_upcoming", + "exclamation", + "exercise", + "exit_to_app", + "expand", + "expand_all", + "expand_circle_down", + "expand_circle_right", + "expand_circle_up", + "expand_content", + "expand_less", + "expand_more", + "experiment", + "explicit", + "explore", + "explore_nearby", + "explore_off", + "explosion", + "export_notes", + "exposure", + "exposure_neg_1", + "exposure_neg_2", + "exposure_plus_1", + "exposure_plus_2", + "exposure_zero", + "extension", + "extension_off", + "eye_tracking", + "eyeglasses", + "face", + "face_2", + "face_3", + "face_4", + "face_5", + "face_6", + "face_retouching_off", + "fact_check", + "factory", + "falling", + "familiar_face_and_zone", + "family_history", + "family_home", + "family_link", + "family_restroom", + "family_star", + "farsight_digital", + "fast_forward", + "fast_rewind", + "fastfood", + "faucet", + "favorite", + "fax", + "feature_search", + "featured_play_list", + "featured_seasonal_and_gifts", + "featured_video", + "feed", + "feedback", + "female", + "femur", + "femur_alt", + "fence", + "fertile", + "festival", + "fiber_dvr", + "fiber_manual_record", + "fiber_new", + "fiber_pin", + "fiber_smart_record", + "file_copy", + "file_copy_off", + "file_download_done", + "file_download_off", + "file_map", + "file_open", + "file_present", + "file_save", + "file_save_off", + "file_upload_off", + "filter", + "filter_1", + "filter_2", + "filter_3", + "filter_4", + "filter_5", + "filter_6", + "filter_7", + "filter_8", + "filter_9", + "filter_9_plus", + "filter_alt", + "filter_alt_off", + "filter_b_and_w", + "filter_center_focus", + "filter_drama", + "filter_frames", + "filter_hdr", + "filter_list", + "filter_list_off", + "filter_none", + "filter_retrolux", + "filter_tilt_shift", + "filter_vintage", + "finance", + "finance_chip", + "finance_mode", + "find_in_page", + "find_replace", + "fingerprint", + "fingerprint_off", + "fire_extinguisher", + "fire_hydrant", + "fire_truck", + "fireplace", + "first_page", + "fit_page", + "fit_screen", + "fit_width", + "fitness_center", + "flag", + "flag_circle", + "flaky", + "flare", + "flash_auto", + "flash_off", + "flash_on", + "flashlight_off", + "flashlight_on", + "flatware", + "flex_direction", + "flex_no_wrap", + "flex_wrap", + "flight", + "flight_class", + "flight_land", + "flight_takeoff", + "flights_and_hotels", + "flightsmode", + "flip", + "flip_camera_android", + "flip_camera_ios", + "flip_to_back", + "flip_to_front", + "flood", + "floor", + "floor_lamp", + "flowsheet", + "fluid", + "fluid_balance", + "fluid_med", + "fluorescent", + "flutter", + "flutter_dash", + "fmd_bad", + "foggy", + "folded_hands", + "folder", + "folder_copy", + "folder_data", + "folder_delete", + "folder_limited", + "folder_managed", + "folder_off", + "folder_open", + "folder_shared", + "folder_special", + "folder_supervised", + "folder_zip", + "follow_the_signs", + "font_download", + "font_download_off", + "food_bank", + "foot_bones", + "footprint", + "for_you", + "forest", + "fork_left", + "fork_right", + "forklift", + "format_align_center", + "format_align_justify", + "format_align_left", + "format_align_right", + "format_bold", + "format_clear", + "format_color_fill", + "format_color_reset", + "format_color_text", + "format_h1", + "format_h2", + "format_h3", + "format_h4", + "format_h5", + "format_h6", + "format_image_left", + "format_image_right", + "format_indent_decrease", + "format_indent_increase", + "format_ink_highlighter", + "format_italic", + "format_letter_spacing", + "format_letter_spacing_2", + "format_letter_spacing_standard", + "format_letter_spacing_wide", + "format_letter_spacing_wider", + "format_line_spacing", + "format_list_bulleted", + "format_list_bulleted_add", + "format_list_numbered", + "format_list_numbered_rtl", + "format_overline", + "format_paint", + "format_paragraph", + "format_quote", + "format_shapes", + "format_size", + "format_strikethrough", + "format_text_clip", + "format_text_overflow", + "format_text_wrap", + "format_textdirection_l_to_r", + "format_textdirection_r_to_l", + "format_textdirection_vertical", + "format_underlined", + "format_underlined_squiggle", + "forms_add_on", + "forms_apps_script", + "fort", + "forum", + "forward", + "forward_10", + "forward_30", + "forward_5", + "forward_circle", + "forward_media", + "forward_to_inbox", + "foundation", + "frame_inspect", + "frame_person", + "frame_person_mic", + "frame_person_off", + "frame_reload", + "frame_source", + "free_cancellation", + "front_hand", + "front_loader", + "full_coverage", + "full_hd", + "full_stacked_bar_chart", + "fullscreen", + "fullscreen_exit", + "function", + "functions", + "g_mobiledata", + "g_mobiledata_badge", + "g_translate", + "gallery_thumbnail", + "gamepad", + "garage", + "garage_door", + "garage_home", + "garden_cart", + "gas_meter", + "gastroenterology", + "gate", + "gavel", + "general_device", + "genetics", + "genres", + "gesture", + "gesture_select", + "gif", + "gif_box", + "girl", + "gite", + "glass_cup", + "globe", + "globe_asia", + "globe_uk", + "glucose", + "glyphs", + "go_to_line", + "golf_course", + "google_home_devices", + "google_tv_remote", + "google_wifi", + "gpp_bad", + "gpp_maybe", + "grade", + "gradient", + "grading", + "grain", + "graphic_eq", + "grass", + "grid_3x3", + "grid_3x3_off", + "grid_4x4", + "grid_goldenratio", + "grid_guides", + "grid_off", + "grid_on", + "grid_view", + "grocery", + "group", + "group_add", + "group_off", + "group_remove", + "group_work", + "grouped_bar_chart", + "groups", + "groups_2", + "groups_3", + "guardian", + "gynecology", + "h_mobiledata", + "h_mobiledata_badge", + "h_plus_mobiledata", + "h_plus_mobiledata_badge", + "hail", + "hallway", + "hand_bones", + "hand_gesture", + "handheld_controller", + "handshake", + "handyman", + "hangout_video", + "hangout_video_off", + "hard_drive", + "hard_drive_2", + "hardware", + "hd", + "hdr_auto", + "hdr_auto_select", + "hdr_enhanced_select", + "hdr_off", + "hdr_off_select", + "hdr_on", + "hdr_on_select", + "hdr_plus", + "hdr_plus_off", + "hdr_strong", + "hdr_weak", + "head_mounted_device", + "headphones", + "headphones_battery", + "headset_mic", + "headset_off", + "healing", + "health_and_beauty", + "health_and_safety", + "health_metrics", + "heap_snapshot_large", + "heap_snapshot_multiple", + "heap_snapshot_thumbnail", + "hearing", + "hearing_disabled", + "heart_broken", + "heart_check", + "heart_minus", + "heart_plus", + "heat", + "heat_pump", + "heat_pump_balance", + "height", + "helicopter", + "help", + "help_center", + "help_clinic", + "hematology", + "hevc", + "hexagon", + "hide", + "hide_image", + "hide_source", + "high_density", + "high_quality", + "high_res", + "highlight", + "highlight_keyboard_focus", + "highlight_mouse_cursor", + "highlight_text_cursor", + "highlighter_size_1", + "highlighter_size_2", + "highlighter_size_3", + "highlighter_size_4", + "highlighter_size_5", + "hiking", + "history", + "history_edu", + "history_off", + "history_toggle_off", + "hive", + "hls", + "hls_off", + "holiday_village", + "home", + "home_and_garden", + "home_app_logo", + "home_health", + "home_improvement_and_tools", + "home_iot_device", + "home_max", + "home_max_dots", + "home_mini", + "home_pin", + "home_repair_service", + "home_speaker", + "home_storage", + "home_work", + "horizontal_distribute", + "horizontal_rule", + "horizontal_split", + "hot_tub", + "hotel", + "hotel_class", + "hourglass", + "hourglass_bottom", + "hourglass_disabled", + "hourglass_empty", + "hourglass_top", + "house", + "house_siding", + "house_with_shield", + "houseboat", + "household_supplies", + "how_to_reg", + "how_to_vote", + "hr_resting", + "html", + "http", + "hub", + "humerus", + "humerus_alt", + "humidity_high", + "humidity_indoor", + "humidity_low", + "humidity_mid", + "humidity_percentage", + "hvac", + "ice_skating", + "icecream", + "id_card", + "ifl", + "iframe", + "iframe_off", + "image", + "image_aspect_ratio", + "image_search", + "imagesearch_roller", + "imagesmode", + "immunology", + "import_contacts", + "important_devices", + "in_home_mode", + "inactive_order", + "inbox", + "inbox_customize", + "incomplete_circle", + "indeterminate_check_box", + "indeterminate_question_box", + "info", + "info_i", + "infrared", + "ink_eraser", + "ink_eraser_off", + "ink_highlighter", + "ink_highlighter_move", + "ink_marker", + "ink_pen", + "inpatient", + "input", + "input_circle", + "insert_chart", + "insert_page_break", + "insert_text", + "install_desktop", + "install_mobile", + "instant_mix", + "integration_instructions", + "interactive_space", + "interests", + "interpreter_mode", + "inventory", + "inventory_2", + "invert_colors", + "invert_colors_off", + "ios", + "ios_share", + "iron", + "jamboard_kiosk", + "javascript", + "join", + "join_inner", + "join_left", + "join_right", + "joystick", + "jump_to_element", + "kayaking", + "kebab_dining", + "keep", + "keep_off", + "keep_public", + "kettle", + "key", + "key_off", + "key_vertical", + "key_visualizer", + "keyboard", + "keyboard_alt", + "keyboard_arrow_down", + "keyboard_arrow_left", + "keyboard_arrow_right", + "keyboard_arrow_up", + "keyboard_backspace", + "keyboard_capslock", + "keyboard_capslock_badge", + "keyboard_command_key", + "keyboard_control_key", + "keyboard_double_arrow_down", + "keyboard_double_arrow_left", + "keyboard_double_arrow_right", + "keyboard_double_arrow_up", + "keyboard_external_input", + "keyboard_full", + "keyboard_hide", + "keyboard_keys", + "keyboard_lock", + "keyboard_lock_off", + "keyboard_off", + "keyboard_onscreen", + "keyboard_option_key", + "keyboard_previous_language", + "keyboard_return", + "keyboard_tab", + "keyboard_tab_rtl", + "kid_star", + "king_bed", + "kitchen", + "kitesurfing", + "lab_panel", + "lab_profile", + "lab_research", + "label", + "label_important", + "label_off", + "labs", + "lan", + "landscape", + "landscape_2", + "landscape_2_off", + "landslide", + "language", + "language_chinese_array", + "language_chinese_cangjie", + "language_chinese_dayi", + "language_chinese_pinyin", + "language_chinese_quick", + "language_chinese_wubi", + "language_french", + "language_gb_english", + "language_international", + "language_japanese_kana", + "language_korean_latin", + "language_pinyin", + "language_spanish", + "language_us", + "language_us_colemak", + "language_us_dvorak", + "laps", + "laptop_chromebook", + "laptop_mac", + "laptop_windows", + "lasso_select", + "last_page", + "laundry", + "layers", + "layers_clear", + "lda", + "leaderboard", + "leak_add", + "leak_remove", + "left_click", + "left_panel_close", + "left_panel_open", + "legend_toggle", + "lens", + "lens_blur", + "letter_switch", + "library_add", + "library_add_check", + "library_books", + "library_music", + "license", + "lift_to_talk", + "light", + "light_group", + "light_mode", + "light_off", + "lightbulb", + "lightbulb_circle", + "lightning_stand", + "line_axis", + "line_curve", + "line_end", + "line_end_arrow", + "line_end_arrow_notch", + "line_end_circle", + "line_end_diamond", + "line_end_square", + "line_start", + "line_start_arrow", + "line_start_arrow_notch", + "line_start_circle", + "line_start_diamond", + "line_start_square", + "line_style", + "line_weight", + "linear_scale", + "link", + "link_off", + "linked_camera", + "linked_services", + "liquor", + "list", + "list_alt", + "list_alt_add", + "lists", + "live_help", + "live_tv", + "living", + "local_activity", + "local_atm", + "local_bar", + "local_cafe", + "local_car_wash", + "local_convenience_store", + "local_dining", + "local_drink", + "local_fire_department", + "local_florist", + "local_gas_station", + "local_hospital", + "local_laundry_service", + "local_library", + "local_mall", + "local_parking", + "local_pharmacy", + "local_pizza", + "local_police", + "local_post_office", + "local_see", + "local_shipping", + "local_taxi", + "location_away", + "location_chip", + "location_city", + "location_disabled", + "location_home", + "location_off", + "location_on", + "location_searching", + "lock", + "lock_clock", + "lock_open", + "lock_open_right", + "lock_person", + "lock_reset", + "login", + "logo_dev", + "logout", + "looks", + "looks_3", + "looks_4", + "looks_5", + "looks_6", + "looks_one", + "looks_two", + "loupe", + "low_density", + "low_priority", + "lowercase", + "loyalty", + "lte_mobiledata", + "lte_mobiledata_badge", + "lte_plus_mobiledata", + "lte_plus_mobiledata_badge", + "luggage", + "lunch_dining", + "lyrics", + "macro_auto", + "macro_off", + "magnification_large", + "magnification_small", + "magnify_docked", + "magnify_fullscreen", + "mail", + "mail_lock", + "mail_off", + "male", + "man", + "man_2", + "man_3", + "man_4", + "manage_accounts", + "manage_history", + "manage_search", + "manga", + "manufacturing", + "map", + "maps_ugc", + "margin", + "mark_as_unread", + "mark_chat_read", + "mark_chat_unread", + "mark_email_read", + "mark_email_unread", + "mark_unread_chat_alt", + "markdown", + "markdown_copy", + "markdown_paste", + "markunread_mailbox", + "masked_transitions", + "masks", + "match_case", + "match_word", + "matter", + "maximize", + "measuring_tape", + "media_bluetooth_off", + "media_bluetooth_on", + "media_link", + "media_output", + "media_output_off", + "mediation", + "medical_information", + "medical_mask", + "medical_services", + "medication", + "medication_liquid", + "meeting_room", + "memory", + "memory_alt", + "menstrual_health", + "menu", + "menu_book", + "menu_open", + "merge", + "merge_type", + "metabolism", + "mfg_nest_yale_lock", + "mic", + "mic_double", + "mic_external_off", + "mic_external_on", + "mic_off", + "microbiology", + "microwave", + "microwave_gen", + "military_tech", + "mimo", + "mimo_disconnect", + "mindfulness", + "minimize", + "minor_crash", + "mintmark", + "missed_video_call", + "missing_controller", + "mist", + "mitre", + "mixture_med", + "mms", + "mobile_friendly", + "mobile_off", + "mobile_screen_share", + "mobiledata_off", + "mode_comment", + "mode_cool", + "mode_cool_off", + "mode_dual", + "mode_fan", + "mode_fan_off", + "mode_heat", + "mode_heat_cool", + "mode_heat_off", + "mode_night", + "mode_of_travel", + "mode_off_on", + "mode_standby", + "model_training", + "monetization_on", + "money", + "money_off", + "monitor", + "monitor_heart", + "monitor_weight", + "monitor_weight_gain", + "monitor_weight_loss", + "monitoring", + "monochrome_photos", + "mood", + "mood_bad", + "mop", + "more", + "more_down", + "more_horiz", + "more_time", + "more_up", + "more_vert", + "mosque", + "motion_blur", + "motion_mode", + "motion_photos_auto", + "motion_photos_off", + "motion_photos_on", + "motion_photos_paused", + "motion_sensor_active", + "motion_sensor_alert", + "motion_sensor_idle", + "motion_sensor_urgent", + "motorcycle", + "mountain_flag", + "mouse", + "mouse_lock", + "mouse_lock_off", + "move", + "move_down", + "move_group", + "move_item", + "move_location", + "move_selection_down", + "move_selection_left", + "move_selection_right", + "move_selection_up", + "move_to_inbox", + "move_up", + "moved_location", + "movie", + "movie_edit", + "movie_info", + "movie_off", + "moving", + "moving_beds", + "moving_ministry", + "mp", + "multicooker", + "multiline_chart", + "multiple_stop", + "museum", + "music_cast", + "music_note", + "music_off", + "music_video", + "my_location", + "mystery", + "nat", + "nature", + "nature_people", + "navigate_before", + "navigate_next", + "navigation", + "near_me", + "near_me_disabled", + "nearby", + "nearby_error", + "nearby_off", + "nephrology", + "nest_audio", + "nest_cam_floodlight", + "nest_cam_indoor", + "nest_cam_iq", + "nest_cam_iq_outdoor", + "nest_cam_magnet_mount", + "nest_cam_outdoor", + "nest_cam_stand", + "nest_cam_wall_mount", + "nest_cam_wired_stand", + "nest_clock_farsight_analog", + "nest_clock_farsight_digital", + "nest_connect", + "nest_detect", + "nest_display", + "nest_display_max", + "nest_doorbell_visitor", + "nest_eco_leaf", + "nest_farsight_weather", + "nest_found_savings", + "nest_gale_wifi", + "nest_heat_link_e", + "nest_heat_link_gen_3", + "nest_hello_doorbell", + "nest_mini", + "nest_multi_room", + "nest_protect", + "nest_remote", + "nest_remote_comfort_sensor", + "nest_secure_alarm", + "nest_sunblock", + "nest_tag", + "nest_thermostat", + "nest_thermostat_e_eu", + "nest_thermostat_gen_3", + "nest_thermostat_sensor", + "nest_thermostat_sensor_eu", + "nest_thermostat_zirconium_eu", + "nest_true_radiant", + "nest_wake_on_approach", + "nest_wake_on_press", + "nest_wifi_point", + "nest_wifi_pro", + "nest_wifi_pro_2", + "nest_wifi_router", + "network_cell", + "network_check", + "network_intelligence_history", + "network_intelligence_update", + "network_locked", + "network_manage", + "network_node", + "network_ping", + "network_wifi", + "network_wifi_1_bar", + "network_wifi_1_bar_locked", + "network_wifi_2_bar", + "network_wifi_2_bar_locked", + "network_wifi_3_bar", + "network_wifi_3_bar_locked", + "network_wifi_locked", + "neurology", + "new_label", + "new_releases", + "new_window", + "news", + "newsmode", + "newspaper", + "newsstand", + "next_plan", + "next_week", + "nfc", + "night_shelter", + "night_sight_auto", + "night_sight_auto_off", + "night_sight_max", + "nightlife", + "nightlight", + "nights_stay", + "no_accounts", + "no_adult_content", + "no_backpack", + "no_crash", + "no_drinks", + "no_encryption", + "no_flash", + "no_food", + "no_luggage", + "no_meals", + "no_meeting_room", + "no_photography", + "no_sim", + "no_sound", + "no_stroller", + "no_transfer", + "noise_aware", + "noise_control_off", + "noise_control_on", + "nordic_walking", + "north", + "north_east", + "north_west", + "not_accessible", + "not_accessible_forward", + "not_listed_location", + "not_started", + "note_add", + "note_alt", + "note_stack", + "note_stack_add", + "notes", + "notification_add", + "notification_important", + "notification_multiple", + "notifications", + "notifications_active", + "notifications_off", + "notifications_paused", + "notifications_unread", + "numbers", + "nutrition", + "ods", + "odt", + "offline_bolt", + "offline_pin", + "offline_pin_off", + "offline_share", + "oil_barrel", + "on_device_training", + "on_hub_device", + "oncology", + "online_prediction", + "onsen", + "opacity", + "open_in_browser", + "open_in_full", + "open_in_new", + "open_in_new_down", + "open_in_new_off", + "open_in_phone", + "open_jam", + "open_run", + "open_with", + "ophthalmology", + "oral_disease", + "order_approve", + "order_play", + "orders", + "orthopedics", + "other_admission", + "other_houses", + "outbound", + "outbox", + "outbox_alt", + "outdoor_garden", + "outdoor_grill", + "outgoing_mail", + "outlet", + "outpatient", + "outpatient_med", + "output", + "output_circle", + "oven", + "oven_gen", + "overview", + "overview_key", + "oxygen_saturation", + "p2p", + "pace", + "pacemaker", + "package", + "package_2", + "padding", + "page_control", + "page_info", + "pageless", + "pages", + "pageview", + "paid", + "palette", + "pallet", + "pan_tool", + "pan_tool_alt", + "pan_zoom", + "panorama", + "panorama_fish_eye", + "panorama_horizontal", + "panorama_photosphere", + "panorama_vertical", + "panorama_wide_angle", + "paragliding", + "park", + "partly_cloudy_day", + "partly_cloudy_night", + "partner_exchange", + "partner_reports", + "party_mode", + "passkey", + "password", + "password_2", + "password_2_off", + "patient_list", + "pattern", + "pause", + "pause_circle", + "pause_presentation", + "payments", + "pedal_bike", + "pediatrics", + "pen_size_1", + "pen_size_2", + "pen_size_3", + "pen_size_4", + "pen_size_5", + "pending", + "pending_actions", + "pentagon", + "percent", + "pergola", + "perm_camera_mic", + "perm_contact_calendar", + "perm_data_setting", + "perm_device_information", + "perm_media", + "perm_phone_msg", + "perm_scan_wifi", + "person", + "person_2", + "person_3", + "person_4", + "person_add", + "person_add_disabled", + "person_alert", + "person_apron", + "person_book", + "person_cancel", + "person_celebrate", + "person_check", + "person_edit", + "person_off", + "person_pin", + "person_pin_circle", + "person_play", + "person_raised_hand", + "person_remove", + "person_search", + "personal_bag", + "personal_bag_off", + "personal_bag_question", + "personal_injury", + "personal_places", + "pest_control", + "pest_control_rodent", + "pet_supplies", + "pets", + "phishing", + "phone_android", + "phone_bluetooth_speaker", + "phone_callback", + "phone_disabled", + "phone_enabled", + "phone_forwarded", + "phone_in_talk", + "phone_iphone", + "phone_locked", + "phone_missed", + "phone_paused", + "phonelink_erase", + "phonelink_lock", + "phonelink_off", + "phonelink_ring", + "phonelink_ring_off", + "phonelink_setup", + "photo", + "photo_album", + "photo_auto_merge", + "photo_camera", + "photo_camera_back", + "photo_camera_front", + "photo_frame", + "photo_library", + "photo_prints", + "photo_size_select_large", + "photo_size_select_small", + "php", + "physical_therapy", + "piano", + "piano_off", + "picture_as_pdf", + "picture_in_picture", + "picture_in_picture_alt", + "picture_in_picture_center", + "picture_in_picture_large", + "picture_in_picture_medium", + "picture_in_picture_mobile", + "picture_in_picture_off", + "picture_in_picture_small", + "pie_chart", + "pill", + "pill_off", + "pin", + "pin_drop", + "pin_end", + "pin_invoke", + "pinch", + "pinch_zoom_in", + "pinch_zoom_out", + "pip", + "pip_exit", + "pivot_table_chart", + "place_item", + "plagiarism", + "planner_banner_ad_pt", + "planner_review", + "play_arrow", + "play_circle", + "play_disabled", + "play_for_work", + "play_lesson", + "play_pause", + "playing_cards", + "playlist_add", + "playlist_add_check", + "playlist_add_check_circle", + "playlist_add_circle", + "playlist_play", + "playlist_remove", + "plumbing", + "podcasts", + "podiatry", + "podium", + "point_of_sale", + "point_scan", + "poker_chip", + "policy", + "polyline", + "polymer", + "pool", + "portable_wifi_off", + "position_bottom_left", + "position_bottom_right", + "position_top_right", + "post", + "post_add", + "potted_plant", + "power", + "power_input", + "power_off", + "power_settings_new", + "prayer_times", + "precision_manufacturing", + "pregnancy", + "pregnant_woman", + "preliminary", + "prescriptions", + "present_to_all", + "preview", + "preview_off", + "price_change", + "price_check", + "print", + "print_add", + "print_connect", + "print_disabled", + "print_error", + "print_lock", + "priority", + "priority_high", + "privacy", + "privacy_tip", + "private_connectivity", + "problem", + "procedure", + "process_chart", + "production_quantity_limits", + "productivity", + "progress_activity", + "prompt_suggestion", + "propane", + "propane_tank", + "psychiatry", + "psychology", + "psychology_alt", + "public", + "public_off", + "publish", + "published_with_changes", + "pulmonology", + "pulse_alert", + "punch_clock", + "qr_code", + "qr_code_2", + "qr_code_2_add", + "qr_code_scanner", + "query_stats", + "question_exchange", + "question_mark", + "queue_music", + "queue_play_next", + "quick_phrases", + "quick_reference", + "quick_reference_all", + "quick_reorder", + "quickreply", + "quiet_time", + "quiet_time_active", + "quiz", + "r_mobiledata", + "radar", + "radio", + "radio_button_checked", + "radio_button_partial", + "radio_button_unchecked", + "radiology", + "railway_alert", + "rainy", + "rainy_heavy", + "rainy_light", + "rainy_snow", + "ramen_dining", + "ramp_left", + "ramp_right", + "range_hood", + "rate_review", + "raven", + "raw_off", + "raw_on", + "read_more", + "readiness_score", + "real_estate_agent", + "rear_camera", + "rebase", + "rebase_edit", + "receipt", + "receipt_long", + "recent_actors", + "recent_patient", + "recenter", + "recommend", + "record_voice_over", + "rectangle", + "recycling", + "redeem", + "redo", + "reduce_capacity", + "refresh", + "regular_expression", + "relax", + "release_alert", + "remember_me", + "reminder", + "remote_gen", + "remove", + "remove_done", + "remove_from_queue", + "remove_moderator", + "remove_road", + "remove_selection", + "remove_shopping_cart", + "reopen_window", + "reorder", + "repartition", + "repeat", + "repeat_on", + "repeat_one", + "repeat_one_on", + "replay", + "replay_10", + "replay_30", + "replay_5", + "reply", + "reply_all", + "report", + "report_off", + "request_page", + "request_quote", + "reset_image", + "reset_tv", + "reset_wrench", + "resize", + "respiratory_rate", + "responsive_layout", + "restart_alt", + "restaurant", + "restaurant_menu", + "restore_from_trash", + "restore_page", + "resume", + "reviews", + "rewarded_ads", + "rheumatology", + "rib_cage", + "rice_bowl", + "right_click", + "right_panel_close", + "right_panel_open", + "ring_volume", + "ripples", + "robot", + "robot_2", + "rocket", + "rocket_launch", + "roller_shades", + "roller_shades_closed", + "roller_skating", + "roofing", + "room_preferences", + "room_service", + "rotate_90_degrees_ccw", + "rotate_90_degrees_cw", + "rotate_left", + "rotate_right", + "roundabout_left", + "roundabout_right", + "rounded_corner", + "route", + "router", + "routine", + "rowing", + "rss_feed", + "rsvp", + "rtt", + "rubric", + "rule", + "rule_folder", + "rule_settings", + "run_circle", + "running_with_errors", + "rv_hookup", + "safety_check", + "safety_check_off", + "safety_divider", + "sailing", + "salinity", + "sanitizer", + "satellite", + "satellite_alt", + "sauna", + "save", + "save_as", + "saved_search", + "savings", + "scale", + "scan", + "scan_delete", + "scanner", + "scatter_plot", + "scene", + "schedule", + "schedule_send", + "schema", + "school", + "science", + "science_off", + "score", + "scoreboard", + "screen_lock_landscape", + "screen_lock_portrait", + "screen_lock_rotation", + "screen_record", + "screen_rotation", + "screen_rotation_alt", + "screen_rotation_up", + "screen_search_desktop", + "screen_share", + "screenshot", + "screenshot_frame", + "screenshot_keyboard", + "screenshot_monitor", + "screenshot_region", + "screenshot_tablet", + "scrollable_header", + "scuba_diving", + "sd", + "sd_card", + "sd_card_alert", + "sdk", + "search", + "search_check", + "search_hands_free", + "search_insights", + "search_off", + "security", + "security_key", + "security_update_good", + "security_update_warning", + "segment", + "select", + "select_all", + "select_check_box", + "select_to_speak", + "select_window", + "select_window_2", + "select_window_off", + "self_care", + "self_improvement", + "sell", + "send", + "send_and_archive", + "send_money", + "send_time_extension", + "send_to_mobile", + "sensor_door", + "sensor_occupied", + "sensor_window", + "sensors", + "sensors_krx", + "sensors_krx_off", + "sensors_off", + "sentiment_calm", + "sentiment_content", + "sentiment_dissatisfied", + "sentiment_excited", + "sentiment_extremely_dissatisfied", + "sentiment_frustrated", + "sentiment_neutral", + "sentiment_sad", + "sentiment_satisfied", + "sentiment_stressed", + "sentiment_very_dissatisfied", + "sentiment_very_satisfied", + "sentiment_worried", + "serif", + "service_toolbox", + "set_meal", + "settings", + "settings_accessibility", + "settings_account_box", + "settings_alert", + "settings_applications", + "settings_b_roll", + "settings_backup_restore", + "settings_bluetooth", + "settings_brightness", + "settings_cell", + "settings_cinematic_blur", + "settings_ethernet", + "settings_heart", + "settings_input_antenna", + "settings_input_component", + "settings_input_hdmi", + "settings_input_svideo", + "settings_motion_mode", + "settings_night_sight", + "settings_overscan", + "settings_panorama", + "settings_phone", + "settings_photo_camera", + "settings_power", + "settings_remote", + "settings_slow_motion", + "settings_system_daydream", + "settings_timelapse", + "settings_video_camera", + "settings_voice", + "settop_component", + "severe_cold", + "shadow", + "shadow_add", + "shadow_minus", + "shape_line", + "shapes", + "share", + "share_location", + "share_off", + "share_reviews", + "share_windows", + "sheets_rtl", + "shelf_auto_hide", + "shelf_position", + "shelves", + "shield", + "shield_lock", + "shield_locked", + "shield_moon", + "shield_person", + "shield_question", + "shield_with_heart", + "shield_with_house", + "shift", + "shift_lock", + "shift_lock_off", + "shop", + "shop_two", + "shopping_bag", + "shopping_basket", + "shopping_cart", + "shopping_cart_checkout", + "shopping_cart_off", + "shoppingmode", + "short_stay", + "short_text", + "show_chart", + "shower", + "shuffle", + "shuffle_on", + "shutter_speed", + "shutter_speed_add", + "shutter_speed_minus", + "sick", + "side_navigation", + "sign_language", + "signal_cellular_0_bar", + "signal_cellular_1_bar", + "signal_cellular_2_bar", + "signal_cellular_3_bar", + "signal_cellular_4_bar", + "signal_cellular_add", + "signal_cellular_alt", + "signal_cellular_alt_1_bar", + "signal_cellular_alt_2_bar", + "signal_cellular_connected_no_internet_0_bar", + "signal_cellular_connected_no_internet_4_bar", + "signal_cellular_nodata", + "signal_cellular_null", + "signal_cellular_off", + "signal_cellular_pause", + "signal_disconnected", + "signal_wifi_0_bar", + "signal_wifi_4_bar", + "signal_wifi_bad", + "signal_wifi_off", + "signal_wifi_statusbar_not_connected", + "signal_wifi_statusbar_null", + "signature", + "signpost", + "sim_card", + "sim_card_download", + "single_bed", + "sip", + "skateboarding", + "skeleton", + "skillet", + "skillet_cooktop", + "skip_next", + "skip_previous", + "skull", + "slab_serif", + "sledding", + "sleep_score", + "slide_library", + "sliders", + "slideshow", + "slow_motion_video", + "smart_card_reader", + "smart_card_reader_off", + "smart_display", + "smart_outlet", + "smart_screen", + "smart_toy", + "smartphone", + "smb_share", + "smoke_free", + "smoking_rooms", + "sms", + "snippet_folder", + "snooze", + "snowboarding", + "snowing", + "snowing_heavy", + "snowmobile", + "snowshoeing", + "soap", + "social_distance", + "social_leaderboard", + "solar_power", + "sort", + "sort_by_alpha", + "sos", + "sound_detection_dog_barking", + "sound_detection_glass_break", + "sound_detection_loud_sound", + "sound_sampler", + "soup_kitchen", + "source_environment", + "source_notes", + "south", + "south_america", + "south_east", + "south_west", + "spa", + "space_bar", + "space_dashboard", + "spatial_audio", + "spatial_audio_off", + "spatial_speaker", + "spatial_tracking", + "speaker", + "speaker_group", + "speaker_notes", + "speaker_notes_off", + "speaker_phone", + "special_character", + "specific_gravity", + "speech_to_text", + "speed", + "speed_0_25", + "speed_0_2x", + "speed_0_5", + "speed_0_5x", + "speed_0_75", + "speed_0_7x", + "speed_1_2", + "speed_1_25", + "speed_1_2x", + "speed_1_5", + "speed_1_5x", + "speed_1_75", + "speed_1_7x", + "speed_2x", + "spellcheck", + "splitscreen", + "splitscreen_add", + "splitscreen_bottom", + "splitscreen_left", + "splitscreen_right", + "splitscreen_top", + "splitscreen_vertical_add", + "spo2", + "spoke", + "sports", + "sports_and_outdoors", + "sports_bar", + "sports_baseball", + "sports_basketball", + "sports_cricket", + "sports_esports", + "sports_football", + "sports_golf", + "sports_gymnastics", + "sports_handball", + "sports_hockey", + "sports_kabaddi", + "sports_martial_arts", + "sports_mma", + "sports_motorsports", + "sports_rugby", + "sports_score", + "sports_soccer", + "sports_tennis", + "sports_volleyball", + "sprinkler", + "sprint", + "square", + "square_foot", + "ssid_chart", + "stack", + "stack_off", + "stack_star", + "stacked_bar_chart", + "stacked_email", + "stacked_inbox", + "stacked_line_chart", + "stacks", + "stadia_controller", + "stadium", + "stairs", + "star", + "star_half", + "star_rate", + "star_rate_half", + "stars", + "start", + "stat_0", + "stat_1", + "stat_2", + "stat_3", + "stat_minus_1", + "stat_minus_2", + "stat_minus_3", + "stay_current_landscape", + "stay_current_portrait", + "stay_primary_landscape", + "stay_primary_portrait", + "step", + "step_into", + "step_out", + "step_over", + "steppers", + "steps", + "stethoscope", + "stethoscope_arrow", + "stethoscope_check", + "sticky_note", + "sticky_note_2", + "stock_media", + "stockpot", + "stop", + "stop_circle", + "stop_screen_share", + "storage", + "store", + "storefront", + "storm", + "straight", + "straighten", + "strategy", + "stream", + "stream_apps", + "streetview", + "stress_management", + "strikethrough_s", + "stroke_full", + "stroke_partial", + "stroller", + "style", + "styler", + "stylus", + "stylus_laser_pointer", + "stylus_note", + "subdirectory_arrow_left", + "subdirectory_arrow_right", + "subheader", + "subject", + "subscript", + "subscriptions", + "subtitles", + "subtitles_off", + "subway", + "summarize", + "sunny", + "sunny_snowing", + "superscript", + "supervised_user_circle", + "supervised_user_circle_off", + "supervisor_account", + "support", + "support_agent", + "surfing", + "surgical", + "surround_sound", + "swap_calls", + "swap_driving_apps", + "swap_driving_apps_wheel", + "swap_horiz", + "swap_horizontal_circle", + "swap_vert", + "swap_vertical_circle", + "sweep", + "swipe", + "swipe_down", + "swipe_down_alt", + "swipe_left", + "swipe_left_alt", + "swipe_right", + "swipe_right_alt", + "swipe_up", + "swipe_up_alt", + "swipe_vertical", + "switch", + "switch_access", + "switch_access_2", + "switch_access_shortcut", + "switch_access_shortcut_add", + "switch_account", + "switch_camera", + "switch_left", + "switch_right", + "switch_video", + "switches", + "sword_rose", + "swords", + "symptoms", + "synagogue", + "sync", + "sync_alt", + "sync_disabled", + "sync_lock", + "sync_problem", + "sync_saved_locally", + "syringe", + "system_update", + "system_update_alt", + "tab", + "tab_close", + "tab_close_right", + "tab_duplicate", + "tab_group", + "tab_move", + "tab_new_right", + "tab_recent", + "tab_unselected", + "table", + "table_bar", + "table_chart", + "table_chart_view", + "table_lamp", + "table_restaurant", + "table_rows", + "table_rows_narrow", + "table_view", + "tablet", + "tablet_android", + "tablet_mac", + "tabs", + "tactic", + "tag", + "takeout_dining", + "tamper_detection_off", + "tamper_detection_on", + "tap_and_play", + "tapas", + "target", + "task", + "task_alt", + "taunt", + "taxi_alert", + "team_dashboard", + "temp_preferences_eco", + "temple_buddhist", + "temple_hindu", + "tenancy", + "terminal", + "text_ad", + "text_decrease", + "text_fields", + "text_fields_alt", + "text_format", + "text_increase", + "text_rotate_up", + "text_rotate_vertical", + "text_rotation_angledown", + "text_rotation_angleup", + "text_rotation_down", + "text_rotation_none", + "text_select_end", + "text_select_jump_to_beginning", + "text_select_jump_to_end", + "text_select_move_back_character", + "text_select_move_back_word", + "text_select_move_down", + "text_select_move_forward_character", + "text_select_move_forward_word", + "text_select_move_up", + "text_select_start", + "text_snippet", + "text_to_speech", + "text_up", + "texture", + "texture_add", + "texture_minus", + "theater_comedy", + "theaters", + "thermometer", + "thermometer_add", + "thermometer_gain", + "thermometer_loss", + "thermometer_minus", + "thermostat", + "thermostat_auto", + "thermostat_carbon", + "things_to_do", + "thread_unread", + "thumb_down", + "thumb_up", + "thumbnail_bar", + "thumbs_up_down", + "thunderstorm", + "tibia", + "tibia_alt", + "time_auto", + "timelapse", + "timeline", + "timer", + "timer_10", + "timer_10_alt_1", + "timer_10_select", + "timer_3", + "timer_3_alt_1", + "timer_3_select", + "timer_5", + "timer_5_shutter", + "timer_off", + "timer_pause", + "timer_play", + "tire_repair", + "title", + "titlecase", + "toast", + "toc", + "today", + "toggle_off", + "toggle_on", + "token", + "toll", + "tonality", + "toolbar", + "tools_flat_head", + "tools_installation_kit", + "tools_ladder", + "tools_level", + "tools_phillips", + "tools_pliers_wire_stripper", + "tools_power_drill", + "tooltip", + "top_panel_close", + "top_panel_open", + "topic", + "tornado", + "total_dissolved_solids", + "touch_app", + "touchpad_mouse", + "touchpad_mouse_off", + "tour", + "toys", + "toys_and_games", + "toys_fan", + "track_changes", + "trackpad_input", + "traffic", + "trail_length", + "trail_length_medium", + "trail_length_short", + "train", + "tram", + "transcribe", + "transfer_within_a_station", + "transform", + "transgender", + "transit_enterexit", + "transition_chop", + "transition_dissolve", + "transition_fade", + "transition_push", + "transition_slide", + "translate", + "transportation", + "travel", + "travel_explore", + "travel_luggage_and_bags", + "trending_down", + "trending_flat", + "trending_up", + "trip", + "trip_origin", + "trolley", + "trophy", + "troubleshoot", + "tsunami", + "tsv", + "tty", + "tune", + "turn_left", + "turn_right", + "turn_sharp_left", + "turn_sharp_right", + "turn_slight_left", + "turn_slight_right", + "tv", + "tv_gen", + "tv_guide", + "tv_off", + "tv_options_edit_channels", + "tv_options_input_settings", + "tv_remote", + "tv_signin", + "tv_with_assistant", + "two_pager", + "two_wheeler", + "type_specimen", + "u_turn_left", + "u_turn_right", + "ulna_radius", + "ulna_radius_alt", + "umbrella", + "unarchive", + "undo", + "unfold_less", + "unfold_less_double", + "unfold_more", + "unfold_more_double", + "ungroup", + "universal_currency", + "universal_currency_alt", + "universal_local", + "unknown_2", + "unknown_5", + "unknown_7", + "unknown_document", + "unknown_med", + "unlicense", + "unpublished", + "unsubscribe", + "upcoming", + "update", + "update_disabled", + "upgrade", + "upload", + "upload_2", + "upload_file", + "uppercase", + "urology", + "usb", + "usb_off", + "user_attributes", + "vaccines", + "vacuum", + "valve", + "vape_free", + "vaping_rooms", + "variable_add", + "variable_insert", + "variable_remove", + "variables", + "ventilator", + "verified", + "verified_user", + "vertical_align_bottom", + "vertical_align_center", + "vertical_align_top", + "vertical_distribute", + "vertical_shades", + "vertical_shades_closed", + "vertical_split", + "vibration", + "video_call", + "video_camera_back", + "video_camera_front", + "video_camera_front_off", + "video_chat", + "video_file", + "video_label", + "video_library", + "video_search", + "video_settings", + "video_stable", + "videocam", + "videocam_off", + "videogame_asset", + "videogame_asset_off", + "view_agenda", + "view_array", + "view_carousel", + "view_column", + "view_column_2", + "view_comfy", + "view_comfy_alt", + "view_compact", + "view_compact_alt", + "view_cozy", + "view_day", + "view_headline", + "view_in_ar", + "view_in_ar_off", + "view_kanban", + "view_list", + "view_module", + "view_quilt", + "view_real_size", + "view_sidebar", + "view_stream", + "view_timeline", + "view_week", + "vignette", + "villa", + "visibility", + "visibility_lock", + "visibility_off", + "vital_signs", + "vo2_max", + "voice_chat", + "voice_over_off", + "voice_selection", + "voicemail", + "volcano", + "volume_down", + "volume_down_alt", + "volume_mute", + "volume_off", + "volume_up", + "volunteer_activism", + "voting_chip", + "vpn_key", + "vpn_key_alert", + "vpn_key_off", + "vpn_lock", + "vr180_create2d", + "vr180_create2d_off", + "vrpano", + "wall_art", + "wall_lamp", + "wallet", + "wallpaper", + "wallpaper_slideshow", + "ward", + "warehouse", + "warning", + "warning_off", + "wash", + "watch", + "watch_button_press", + "watch_off", + "watch_screentime", + "watch_wake", + "water", + "water_bottle", + "water_bottle_large", + "water_damage", + "water_do", + "water_drop", + "water_ec", + "water_full", + "water_heater", + "water_lock", + "water_loss", + "water_lux", + "water_medium", + "water_orp", + "water_ph", + "water_pump", + "water_voc", + "waterfall_chart", + "waves", + "waving_hand", + "wb_auto", + "wb_incandescent", + "wb_iridescent", + "wb_shade", + "wb_sunny", + "wb_twilight", + "wc", + "weather_hail", + "weather_mix", + "weather_snowy", + "web", + "web_asset", + "web_asset_off", + "web_stories", + "web_traffic", + "webhook", + "weekend", + "weight", + "west", + "whatshot", + "wheelchair_pickup", + "where_to_vote", + "widgets", + "width", + "width_full", + "width_normal", + "width_wide", + "wifi", + "wifi_1_bar", + "wifi_2_bar", + "wifi_add", + "wifi_calling", + "wifi_calling_1", + "wifi_calling_2", + "wifi_calling_3", + "wifi_channel", + "wifi_find", + "wifi_home", + "wifi_lock", + "wifi_notification", + "wifi_off", + "wifi_password", + "wifi_protected_setup", + "wifi_proxy", + "wifi_tethering", + "wifi_tethering_error", + "wifi_tethering_off", + "wind_power", + "window", + "window_closed", + "window_open", + "window_sensor", + "wine_bar", + "woman", + "woman_2", + "work", + "work_alert", + "work_history", + "work_update", + "workspace_premium", + "workspaces", + "wounds_injuries", + "wrap_text", + "wrist", + "wrong_location", + "wysiwyg", + "yard", + "your_trips", + "youtube_activity", + "youtube_searched_for", + "zone_person_alert", + "zone_person_idle", + "zone_person_urgent", + "zoom_in", + "zoom_in_map", + "zoom_out", + "zoom_out_map" +]; + +type MaterialSymbol = MaterialSymbols[number]; + +export { MaterialSymbol }; diff --git a/frontend/static/material-symbols/index.scss b/frontend/static/material-symbols/index.scss new file mode 100644 index 0000000..4dc4264 --- /dev/null +++ b/frontend/static/material-symbols/index.scss @@ -0,0 +1,3 @@ +@import 'outlined'; +@import 'rounded'; +@import 'sharp'; diff --git a/frontend/static/material-symbols/material-symbols-outlined.woff2 b/frontend/static/material-symbols/material-symbols-outlined.woff2 new file mode 100644 index 0000000..936bfca Binary files /dev/null and b/frontend/static/material-symbols/material-symbols-outlined.woff2 differ diff --git a/frontend/static/material-symbols/material-symbols-rounded.woff2 b/frontend/static/material-symbols/material-symbols-rounded.woff2 new file mode 100644 index 0000000..e96cb00 Binary files /dev/null and b/frontend/static/material-symbols/material-symbols-rounded.woff2 differ diff --git a/frontend/static/material-symbols/material-symbols-sharp.woff2 b/frontend/static/material-symbols/material-symbols-sharp.woff2 new file mode 100644 index 0000000..a07ef8a Binary files /dev/null and b/frontend/static/material-symbols/material-symbols-sharp.woff2 differ diff --git a/frontend/static/material-symbols/outlined.css b/frontend/static/material-symbols/outlined.css new file mode 100644 index 0000000..517afd5 --- /dev/null +++ b/frontend/static/material-symbols/outlined.css @@ -0,0 +1,24 @@ +@font-face { + font-family: "Material Symbols Outlined"; + font-style: normal; + font-weight: 100 700; + font-display: block; + src: url("./material-symbols-outlined.woff2") format("woff2"); +} +.material-symbols-outlined { + font-family: "Material Symbols Outlined"; + font-weight: normal; + font-style: normal; + font-size: 24px; + line-height: 1; + letter-spacing: normal; + text-transform: none; + display: inline-block; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + font-feature-settings: "liga"; +} diff --git a/frontend/static/material-symbols/outlined.scss b/frontend/static/material-symbols/outlined.scss new file mode 100644 index 0000000..428f86e --- /dev/null +++ b/frontend/static/material-symbols/outlined.scss @@ -0,0 +1,3 @@ +@import 'core'; + +@include material-symbols-font('Material Symbols Outlined'); diff --git a/frontend/static/material-symbols/package.json b/frontend/static/material-symbols/package.json new file mode 100644 index 0000000..56523ee --- /dev/null +++ b/frontend/static/material-symbols/package.json @@ -0,0 +1,41 @@ +{ + "name": "material-symbols", + "version": "0.17.4", + "description": "Latest variable icon fonts and CSS for Material Symbols.", + "main": "index.css", + "sass": "index.scss", + "types": "index.d.ts", + "files": [ + "index.d.ts", + "*.{css,scss,woff2}" + ], + "scripts": { + "build": "sass --no-source-map --no-error-css ." + }, + "devDependencies": { + "sass": "1.56.1" + }, + "license": "Apache-2.0", + "repository": { + "type": "git", + "url": "git+https://github.com/marella/material-symbols.git", + "directory": "material-symbols" + }, + "bugs": { + "url": "https://github.com/marella/material-symbols/issues" + }, + "homepage": "https://marella.github.io/material-symbols/demo/", + "keywords": [ + "material-symbols", + "material-icons", + "material-design-icons", + "material-design", + "material", + "symbols", + "icons", + "font" + ], + "publishConfig": { + "access": "public" + } +} diff --git a/frontend/static/material-symbols/rounded.css b/frontend/static/material-symbols/rounded.css new file mode 100644 index 0000000..15cf899 --- /dev/null +++ b/frontend/static/material-symbols/rounded.css @@ -0,0 +1,24 @@ +@font-face { + font-family: "Material Symbols Rounded"; + font-style: normal; + font-weight: 100 700; + font-display: block; + src: url("./material-symbols-rounded.woff2") format("woff2"); +} +.material-symbols-rounded { + font-family: "Material Symbols Rounded"; + font-weight: normal; + font-style: normal; + font-size: 24px; + line-height: 1; + letter-spacing: normal; + text-transform: none; + display: inline-block; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + font-feature-settings: "liga"; +} diff --git a/frontend/static/material-symbols/rounded.scss b/frontend/static/material-symbols/rounded.scss new file mode 100644 index 0000000..d4130a2 --- /dev/null +++ b/frontend/static/material-symbols/rounded.scss @@ -0,0 +1,3 @@ +@import 'core'; + +@include material-symbols-font('Material Symbols Rounded'); diff --git a/frontend/static/material-symbols/sharp.css b/frontend/static/material-symbols/sharp.css new file mode 100644 index 0000000..0e8f837 --- /dev/null +++ b/frontend/static/material-symbols/sharp.css @@ -0,0 +1,24 @@ +@font-face { + font-family: "Material Symbols Sharp"; + font-style: normal; + font-weight: 100 700; + font-display: block; + src: url("./material-symbols-sharp.woff2") format("woff2"); +} +.material-symbols-sharp { + font-family: "Material Symbols Sharp"; + font-weight: normal; + font-style: normal; + font-size: 24px; + line-height: 1; + letter-spacing: normal; + text-transform: none; + display: inline-block; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + text-rendering: optimizeLegibility; + font-feature-settings: "liga"; +} diff --git a/frontend/static/material-symbols/sharp.scss b/frontend/static/material-symbols/sharp.scss new file mode 100644 index 0000000..6770306 --- /dev/null +++ b/frontend/static/material-symbols/sharp.scss @@ -0,0 +1,3 @@ +@import 'core'; + +@include material-symbols-font('Material Symbols Sharp'); diff --git a/frontend/views/dashboard/dist/artNet.js b/frontend/views/dashboard/dist/artNet.js new file mode 100644 index 0000000..648a096 --- /dev/null +++ b/frontend/views/dashboard/dist/artNet.js @@ -0,0 +1,113 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function () { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ArtNet = void 0; +var morphux_1 = require("morphux"); +var ArtNet = /** @class */ (function () { + function ArtNet(Main) { + this.universesContainer = document.querySelector('.ntsh_artnet-universes'); + this.stateContainer = document.querySelector('.ntsh_artnet-state'); + this._Main = Main; + this.prepareUniverses(); + this.setupHandler(); + } + ArtNet.prototype.prepareUniverses = function () { + return __awaiter(this, void 0, void 0, function () { + var request, universes; + var _this = this; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, fetch('/universes')]; + case 1: + request = _a.sent(); + return [4 /*yield*/, request.json()]; + case 2: + universes = _a.sent(); + universes.forEach(function (universe) { + var button = new morphux_1.MorphComponent.Button({ + mode: 'normal', + content: String(universe), + target: function () { + _this.universesContainer + .querySelectorAll('.mux_button') + .forEach(function (btn) { return btn.classList.remove('ntsh_active'); }); + button.container.classList.add('ntsh_active'); + _this.showFrame(universe); + }, + }); + _this.universesContainer.appendChild(button.container); + }); + return [2 /*return*/]; + } + }); + }); + }; + ArtNet.prototype.showFrame = function (universe) { + this.frame = (0, morphux_1.ce)('iframe', null, { src: "/universe/".concat(universe) }); + this.stateContainer.innerHTML = ''; + this.stateContainer.appendChild(this.frame); + this.currentUniverse = universe; + this.setupRefreshClock(); + }; + ArtNet.prototype.setupRefreshClock = function () { + var _this = this; + clearInterval(this.refreshClock); + this.refreshClock = setInterval(function () { + _this.frame.src = "/universe/".concat(_this.currentUniverse); + }, 1000); + }; + ArtNet.prototype.setupHandler = function () { + var _this = this; + this._Main.TabController.registerListener('artnet', function (visible) { + var _a; + if (visible) { + _this.universesContainer + .querySelectorAll('.mux_button') + .forEach(function (btn) { return btn.classList.remove('ntsh_active'); }); + } + else { + if (((_a = _this.frame) === null || _a === void 0 ? void 0 : _a.parentElement) != null) + _this.frame.remove(); + clearInterval(_this.refreshClock); + } + }); + }; + return ArtNet; +}()); +exports.ArtNet = ArtNet; +//# sourceMappingURL=artNet.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/artNet.js.map b/frontend/views/dashboard/dist/artNet.js.map new file mode 100644 index 0000000..0d8d012 --- /dev/null +++ b/frontend/views/dashboard/dist/artNet.js.map @@ -0,0 +1 @@ +{"version":3,"file":"artNet.js","sourceRoot":"","sources":["../ts/artNet.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/calibration.js b/frontend/views/dashboard/dist/calibration.js new file mode 100644 index 0000000..7ebb931 --- /dev/null +++ b/frontend/views/dashboard/dist/calibration.js @@ -0,0 +1,37 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Calibration = void 0; +var Calibration = /** @class */ (function () { + function Calibration(Main) { + this.container = document.querySelector('.ntsh_calibration'); + this.image = this.container.querySelector('img'); + this.fullscreenButton = this.container.querySelector('.ntsh_calibration-fullscreen'); + this._Main = Main; + this.registerListeners(); + } + Calibration.prototype.startFetchClock = function () { + var _this = this; + this.image.src = "/calibrationImage?t=".concat(Date.now()); + this.fetchClock = setInterval(function () { + _this.image.src = "/calibrationImage?t=".concat(Date.now()); + }, 1000); + }; + Calibration.prototype.stopFetchClock = function () { + clearInterval(this.fetchClock); + }; + Calibration.prototype.registerListeners = function () { + var _this = this; + this._Main.TabController.registerListener('calibration', function (visible) { + if (visible) + _this.startFetchClock(); + else + _this.stopFetchClock(); + }); + this.fullscreenButton.addEventListener('click', function () { + _this.image.requestFullscreen(); + }); + }; + return Calibration; +}()); +exports.Calibration = Calibration; +//# sourceMappingURL=calibration.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/calibration.js.map b/frontend/views/dashboard/dist/calibration.js.map new file mode 100644 index 0000000..ba3969d --- /dev/null +++ b/frontend/views/dashboard/dist/calibration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"calibration.js","sourceRoot":"","sources":["../ts/calibration.ts"],"names":[],"mappings":";;;AAEA;IASC,qBAAY,IAAU;QANtB,cAAS,GAAmB,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;QACxE,UAAK,GAAqB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9D,qBAAgB,GAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CAC9D,8BAA8B,CAC9B,CAAC;QAGD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAGD,qCAAe,GAAf;QAAA,iBAKC;QAJA,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,8BAAuB,IAAI,CAAC,GAAG,EAAE,CAAE,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC;YAC7B,KAAI,CAAC,KAAK,CAAC,GAAG,GAAG,8BAAuB,IAAI,CAAC,GAAG,EAAE,CAAE,CAAC;QACtD,CAAC,EAAE,IAAI,CAAC,CAAC;IACV,CAAC;IAED,oCAAc,GAAd;QACC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAEO,uCAAiB,GAAzB;QAAA,iBASC;QARA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,aAAa,EAAE,UAAC,OAAO;YAChE,IAAI,OAAO;gBAAE,KAAI,CAAC,eAAe,EAAE,CAAC;;gBAC/B,KAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,EAAE;YAC/C,KAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;IACJ,CAAC;IACF,kBAAC;AAAD,CAAC,AArCD,IAqCC;AArCY,kCAAW"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.camerarunner copy.js b/frontend/views/dashboard/dist/dashboard.camerarunner copy.js new file mode 100644 index 0000000..f225cb6 --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.camerarunner copy.js @@ -0,0 +1,161 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DashboardCameraRunner = void 0; +var morphux_1 = require("morphux"); +var utils_1 = require("./utils"); +var CELCIUS = 'ºC'; +var DashboardCameraRunner = /** @class */ (function () { + function DashboardCameraRunner(Main) { + this.container = document.querySelector('.ntsh_dashboard-camerarunner'); + this.connectionStatus = this.container.querySelector('.ntsh_dashboard-camerarunner-connectionstatus'); + this.connectionInfo = this.container.querySelector('.ntsh_dashboard-camerarunner-connectioninfo'); + this.rebootButton = this.container.querySelector('.ntsh_dashboard-camerarunner-reboot'); + this.processStatus = this.container.querySelector('.ntsh_dashboard-camerarunner-processstatus'); + this.processInfo = this.container.querySelector('.ntsh_dashboard-camerarunner-processinfo'); + this.restartButton = this.container.querySelector('.ntsh_dashboard-camerarunner-restart'); + this.uptimeInfo = this.container.querySelector('.ntsh_dashboard-camerarunner-uptime'); + this.errorContainer = this.container.querySelector('.ntsh_dashboard-camerarunner-error'); + this.errorText = this.container.querySelector('.ntsh_dashboard-camerarunner-errortext'); + this._Main = Main; + this.registerListeners(); + } + DashboardCameraRunner.prototype.updateState = function (state) { + var _a, _b, _c; + // ----------- Connection ----------- + (0, utils_1.setStatusState)(this.connectionStatus, { + CONNECTING: 'yellow', + CONNECTED: 'green', + DISCONNECTED: 'gray', + FAILED: 'red', + }[state.state]); + this.connectionInfo.innerText = (_a = state.message) !== null && _a !== void 0 ? _a : ''; + // ----------- Process ----------- + if (state.state != 'CONNECTED') { + state.processStatus.state = 'PROBLEM'; + state.processStatus.message = 'Not connected to CameraRunner'; + state.processStatus.startTime = -1; + this.restartButton.style.display = 'none'; + this.rebootButton.style.display = 'none'; + } + else { + this.rebootButton.style.display = 'flex'; + if (state.processStatus.state == 'RUNNING') + this.restartButton.style.display = 'flex'; + else + this.restartButton.style.display = 'none'; + } + (0, utils_1.setStatusState)(this.processStatus, { + RUNNING: 'green', + STOPPED: 'gray', + STARTING: 'yellow', + PROBLEM: 'red', + }[state.processStatus.state]); + this.processInfo.innerText = (_b = state.processStatus.message) !== null && _b !== void 0 ? _b : ''; + // ----------- Uptime ----------- + var uptimeSeconds = state.processStatus.startTime == -1 + ? -1 + : (Date.now() - state.processStatus.startTime) / 1000; + this.uptimeInfo.innerText = (0, utils_1.formatUptime)(uptimeSeconds); + // ----------- Error ----------- + if (((_c = state === null || state === void 0 ? void 0 : state.error) !== null && _c !== void 0 ? _c : '').trim().length > 0) { + this.errorText.innerText = state.error; + this.errorContainer.style.display = 'block'; + } + else { + this.errorContainer.style.display = 'none'; + this.errorText.innerText = ''; + } + this._Main.Logs.setCameraLogs(state.processStatus.output.current); + }; + DashboardCameraRunner.prototype.registerListeners = function () { + var _this = this; + this._Main.socket.on('cameraRunnerState', function (state) { + _this.updateState(state); + }); + this.restartButton.addEventListener('click', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + this.executeCommand('restart', 'Are you sure you want to restart the Camera Runner process?'); + return [2 /*return*/]; + }); + }); }); + this.rebootButton.addEventListener('click', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + this.executeCommand('reboot', 'Are you sure you want to reboot the Camera Runner machine?'); + return [2 /*return*/]; + }); + }); }); + }; + DashboardCameraRunner.prototype.executeCommand = function (command, message) { + return __awaiter(this, void 0, void 0, function () { + var confirmed; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, morphux_1.MorphFeature.Confirm({ + title: 'Are you sure?', + message: message, + })]; + case 1: + confirmed = _a.sent(); + if (!confirmed) + return [2 /*return*/]; + morphux_1.MorphFeature.Loader({ + active: true, + message: "Requesting Camera Runner ".concat(command, "..."), + }); + this._Main.socket.emit('cameraRunner', command, function (response) { + morphux_1.MorphFeature.Loader({ active: false }); + if (!response.succeed) + return morphux_1.MorphFeature.Alert({ + title: 'Error', + message: response.message, + }); + morphux_1.MorphFeature.Notification({ + level: 'success', + message: "Camera Runner is ".concat(command, "ing..."), + }); + }); + return [2 /*return*/]; + } + }); + }); + }; + return DashboardCameraRunner; +}()); +exports.DashboardCameraRunner = DashboardCameraRunner; +//# sourceMappingURL=dashboard.camerarunner%20copy.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.camerarunner copy.js.map b/frontend/views/dashboard/dist/dashboard.camerarunner copy.js.map new file mode 100644 index 0000000..5c4e93f --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.camerarunner copy.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dashboard.camerarunner copy.js","sourceRoot":"","sources":["../ts/dashboard.camerarunner copy.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.camerarunner.js b/frontend/views/dashboard/dist/dashboard.camerarunner.js new file mode 100644 index 0000000..0c2b57a --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.camerarunner.js @@ -0,0 +1,166 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DashboardCameraRunner = void 0; +var morphux_1 = require("morphux"); +var utils_1 = require("./utils"); +var CELCIUS = 'ºC'; +var DashboardCameraRunner = /** @class */ (function () { + function DashboardCameraRunner(Main) { + this.container = document.querySelector('.ntsh_dashboard-camerarunner'); + this.connectionStatus = this.container.querySelector('.ntsh_dashboard-camerarunner-connectionstatus'); + this.connectionInfo = this.container.querySelector('.ntsh_dashboard-camerarunner-connectioninfo'); + this.rebootButton = this.container.querySelector('.ntsh_dashboard-camerarunner-reboot'); + this.processStatus = this.container.querySelector('.ntsh_dashboard-camerarunner-processstatus'); + this.processInfo = this.container.querySelector('.ntsh_dashboard-camerarunner-processinfo'); + this.restartButton = this.container.querySelector('.ntsh_dashboard-camerarunner-restart'); + this.uptimeInfo = this.container.querySelector('.ntsh_dashboard-camerarunner-uptime'); + this.errorContainer = this.container.querySelector('.ntsh_dashboard-camerarunner-error'); + this.errorText = this.container.querySelector('.ntsh_dashboard-camerarunner-errortext'); + this._Main = Main; + this.registerListeners(); + } + DashboardCameraRunner.prototype.updateState = function (state) { + var _a, _b, _c, _d, _e; + // ----------- Connection ----------- + (0, utils_1.setStatusState)(this.connectionStatus, { + CONNECTING: 'yellow', + CONNECTED: 'green', + DISCONNECTED: 'red', + FAILED: 'red', + }[state.state]); + this.connectionInfo.innerText = (_a = state.message) !== null && _a !== void 0 ? _a : ''; + // ----------- Process ----------- + if (state.state != 'CONNECTED') { + state.processStatus.state = 'STOPPED'; + state.processStatus.message = 'Not connected'; + state.processStatus.startTime = -1; + this.restartButton.style.display = 'none'; + this.rebootButton.style.display = 'none'; + } + else { + this.rebootButton.style.display = 'flex'; + if (state.processStatus.state == 'RUNNING') + this.restartButton.style.display = 'flex'; + else + this.restartButton.style.display = 'none'; + } + (0, utils_1.setStatusState)(this.processStatus, { + RUNNING: 'green', + STOPPED: 'gray', + STARTING: 'yellow', + PROBLEM: 'red', + }[state.processStatus.state]); + this.processInfo.innerText = (_b = state.processStatus.message) !== null && _b !== void 0 ? _b : ''; + // ----------- Uptime ----------- + var uptimeSeconds = state.processStatus.startTime == -1 + ? -1 + : (Date.now() - state.processStatus.startTime) / 1000; + this.uptimeInfo.innerText = (0, utils_1.formatUptime)(uptimeSeconds); + // ----------- Error ----------- + var errors = []; + if (((_c = state === null || state === void 0 ? void 0 : state.error) !== null && _c !== void 0 ? _c : '').trim().length > 0) + errors.push(state.error); + if (((_e = (_d = state === null || state === void 0 ? void 0 : state.processStatus) === null || _d === void 0 ? void 0 : _d.error) !== null && _e !== void 0 ? _e : '').trim().length > 0) + errors.push(state.processStatus.error); + if (errors.length > 0) { + this.errorText.innerText = errors.join('\n'); + this.errorContainer.style.display = 'block'; + } + else { + this.errorContainer.style.display = 'none'; + this.errorText.innerText = ''; + } + this._Main.Logs.setCameraLogs(state.processStatus.output.current); + }; + DashboardCameraRunner.prototype.registerListeners = function () { + var _this = this; + this._Main.socket.on('cameraRunnerState', function (state) { + _this.updateState(state); + }); + this.restartButton.addEventListener('click', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + this.executeCommand('restart', 'Are you sure you want to restart the Camera Runner process?'); + return [2 /*return*/]; + }); + }); }); + this.rebootButton.addEventListener('click', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + this.executeCommand('reboot', 'Are you sure you want to reboot the Camera Runner machine?'); + return [2 /*return*/]; + }); + }); }); + }; + DashboardCameraRunner.prototype.executeCommand = function (command, message) { + return __awaiter(this, void 0, void 0, function () { + var confirmed; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, morphux_1.MorphFeature.Confirm({ + title: 'Are you sure?', + message: message, + })]; + case 1: + confirmed = _a.sent(); + if (!confirmed) + return [2 /*return*/]; + morphux_1.MorphFeature.Loader({ + active: true, + message: "Requesting Camera Runner ".concat(command, "..."), + }); + this._Main.socket.emit('cameraRunner', command, function (response) { + morphux_1.MorphFeature.Loader({ active: false }); + if (!response.succeed) + return morphux_1.MorphFeature.Alert({ + title: 'Error', + message: response.message, + }); + morphux_1.MorphFeature.Notification({ + level: 'success', + message: "Camera Runner is ".concat(command, "ing..."), + }); + }); + return [2 /*return*/]; + } + }); + }); + }; + return DashboardCameraRunner; +}()); +exports.DashboardCameraRunner = DashboardCameraRunner; +//# sourceMappingURL=dashboard.camerarunner.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.camerarunner.js.map b/frontend/views/dashboard/dist/dashboard.camerarunner.js.map new file mode 100644 index 0000000..8531d48 --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.camerarunner.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dashboard.camerarunner.js","sourceRoot":"","sources":["../ts/dashboard.camerarunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.ledcontroller.js b/frontend/views/dashboard/dist/dashboard.ledcontroller.js new file mode 100644 index 0000000..8430b85 --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.ledcontroller.js @@ -0,0 +1,41 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DashboardCameraRunner = void 0; +var CELCIUS = 'ºC'; +var DashboardCameraRunner = /** @class */ (function () { + function DashboardCameraRunner(Main) { + this.container = document.querySelector('.ntsh_dashboard-camerarunner'); + this.connectionStatus = this.container.querySelector('.ntsh_dashboard-camerarunner-connectedstatus'); + this.connectionInfo = this.container.querySelector('.ntsh_dashboard-camerarunner-connectedinfo'); + this.processStatus = this.container.querySelector('.ntsh_dashboard-camerarunner-processstatus'); + this.processInfo = this.container.querySelector('.ntsh_dashboard-camerarunner-processinfo'); + this.restartButton = this.container.querySelector('.ntsh_dashboard-camerarunner-restart'); + this.uptimeInfo = this.container.querySelector('.ntsh_dashboard-camerarunner-uptimeinfo'); + this.errorContainer = this.container.querySelector('.ntsh_dashboard-camerarunner-error'); + this.errorText = this.container.querySelector('.ntsh_dashboard-camerarunner-errortext'); + this._Main = Main; + this.registerListeners(); + } + DashboardCameraRunner.prototype.updateState = function (state) { + var _a; + console.log(state); + // ----------- Error ----------- + if (((_a = state === null || state === void 0 ? void 0 : state.error) !== null && _a !== void 0 ? _a : '').trim().length > 0) { + this.errorText.innerText = state.error; + this.errorContainer.style.display = 'block'; + } + else { + this.errorContainer.style.display = 'none'; + this.errorText.innerText = ''; + } + }; + DashboardCameraRunner.prototype.registerListeners = function () { + var _this = this; + this._Main.socket.on('ledControllerState', function (state) { + _this.updateState(state); + }); + }; + return DashboardCameraRunner; +}()); +exports.DashboardCameraRunner = DashboardCameraRunner; +//# sourceMappingURL=dashboard.ledcontroller.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.ledcontroller.js.map b/frontend/views/dashboard/dist/dashboard.ledcontroller.js.map new file mode 100644 index 0000000..43be2b5 --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.ledcontroller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dashboard.ledcontroller.js","sourceRoot":"","sources":["../ts/dashboard.ledcontroller.ts"],"names":[],"mappings":";;;AAIA,IAAM,OAAO,GAAG,IAAI,CAAC;AAErB;IAmCC,+BAAY,IAAU;QAhCtB,cAAS,GAAmB,QAAQ,CAAC,aAAa,CACjD,8BAA8B,CAC9B,CAAC;QAEF,qBAAgB,GAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CAC9D,8CAA8C,CAC9C,CAAC;QACF,mBAAc,GAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CAC5D,4CAA4C,CAC5C,CAAC;QAEF,kBAAa,GAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CAC3D,4CAA4C,CAC5C,CAAC;QACF,gBAAW,GAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CACzD,0CAA0C,CAC1C,CAAC;QACF,kBAAa,GAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CAC3D,sCAAsC,CACtC,CAAC;QAEF,eAAU,GAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CACxD,yCAAyC,CACzC,CAAC;QAEF,mBAAc,GAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CAC5D,oCAAoC,CACpC,CAAC;QACF,cAAS,GAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CACvD,wCAAwC,CACxC,CAAC;QAGD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAED,2CAAW,GAAX,UAAY,KAAyB;;QACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,gCAAgC;QAChC,IAAI,CAAC,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,mCAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;YACvC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAC7C,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC3C,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;QAC/B,CAAC;IACF,CAAC;IAED,iDAAiB,GAAjB;QAAA,iBAOC;QANA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CACnB,oBAAoB,EACpB,UAAC,KAAyB;YACzB,KAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CACD,CAAC;IACH,CAAC;IACF,4BAAC;AAAD,CAAC,AA7DD,IA6DC;AA7DY,sDAAqB"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.mmwave copy.js b/frontend/views/dashboard/dist/dashboard.mmwave copy.js new file mode 100644 index 0000000..a772394 --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.mmwave copy.js @@ -0,0 +1,50 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DashboardMMWave = void 0; +var utils_1 = require("./utils"); +var CELCIUS = 'ºC'; +var DashboardMMWave = /** @class */ (function () { + function DashboardMMWave(Main) { + this.container = document.querySelector('.ntsh_dashboard-mmwave'); + this.standardPortStatus = this.container.querySelector('.ntsh_dashboard-mmwave-standardstatus'); + this.standardPortInfo = this.container.querySelector('.ntsh_dashboard-mmwave-standardinfo'); + this.enhancedPortStatus = this.container.querySelector('.ntsh_dashboard-mmwave-enhancedstatus'); + this.enhancedPortInfo = this.container.querySelector('.ntsh_dashboard-mmwave-enhancedinfo'); + this.framesPerSecond = this.container.querySelector('.ntsh_dashboard-mmwave-framespersecond'); + this.trackedPersons = this.container.querySelector('.ntsh_dashboard-mmwave-trackedpersons'); + this.personsInBounds = this.container.querySelector('.ntsh_dashboard-mmwave-personsinbounds'); + this._Main = Main; + this.registerListeners(); + } + DashboardMMWave.prototype.updateState = function (state) { + if (state == null) + return; + // ----------- Standard Port ----------- + (0, utils_1.setStatusState)(this.standardPortStatus, state.ports.standard.connected == 'connecting' + ? 'warning' + : state.ports.standard.connected + ? 'ok' + : 'error'); + this.standardPortInfo.innerText = state.ports.standard.path; + // ----------- Enhanced Port ----------- + (0, utils_1.setStatusState)(this.enhancedPortStatus, state.ports.enhanced.connected == 'connecting' + ? 'warning' + : state.ports.enhanced.connected + ? 'ok' + : 'error'); + this.enhancedPortInfo.innerText = state.ports.enhanced.path; + // ----------- Statistics ----------- + this.framesPerSecond.innerText = state.framesPerSecond.toString(); + this.trackedPersons.innerText = state.trackedPersons.toString(); + this.personsInBounds.innerText = state.personsInBounds.toString(); + }; + DashboardMMWave.prototype.registerListeners = function () { + var _this = this; + this._Main.socket.on('mmWaveState', function (state) { + _this.updateState(state); + }); + }; + return DashboardMMWave; +}()); +exports.DashboardMMWave = DashboardMMWave; +//# sourceMappingURL=dashboard.mmwave%20copy.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.mmwave copy.js.map b/frontend/views/dashboard/dist/dashboard.mmwave copy.js.map new file mode 100644 index 0000000..cb967fb --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.mmwave copy.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dashboard.mmwave copy.js","sourceRoot":"","sources":["../ts/dashboard.mmwave copy.ts"],"names":[],"mappings":";;;AAEA,iCAAyC;AAEzC,IAAM,OAAO,GAAG,IAAI,CAAC;AAErB;IA+BC,yBAAY,IAAU;QA5BtB,cAAS,GAAmB,QAAQ,CAAC,aAAa,CACjD,wBAAwB,CACxB,CAAC;QAEF,uBAAkB,GAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CAChE,uCAAuC,CACvC,CAAC;QACF,qBAAgB,GAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CAC9D,qCAAqC,CACrC,CAAC;QAEF,uBAAkB,GAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CAChE,uCAAuC,CACvC,CAAC;QACF,qBAAgB,GAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CAC9D,qCAAqC,CACrC,CAAC;QAEF,oBAAe,GAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CAC7D,wCAAwC,CACxC,CAAC;QACF,mBAAc,GAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CAC5D,uCAAuC,CACvC,CAAC;QACF,oBAAe,GAAmB,IAAI,CAAC,SAAS,CAAC,aAAa,CAC7D,wCAAwC,CACxC,CAAC;QAGD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAED,qCAAW,GAAX,UAAY,KAAkB;QAC7B,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO;QAE1B,wCAAwC;QACxC,IAAA,sBAAc,EACb,IAAI,CAAC,kBAAkB,EACvB,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,IAAI,YAAY;YAC7C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS;gBAChC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,OAAO,CACV,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAE5D,wCAAwC;QACxC,IAAA,sBAAc,EACb,IAAI,CAAC,kBAAkB,EACvB,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,IAAI,YAAY;YAC7C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS;gBAChC,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,OAAO,CACV,CAAC;QACF,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QAE5D,qCAAqC;QACrC,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;QAClE,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QAChE,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;IACnE,CAAC;IAED,2CAAiB,GAAjB;QAAA,iBAIC;QAHA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,UAAC,KAAkB;YACtD,KAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACJ,CAAC;IACF,sBAAC;AAAD,CAAC,AAzED,IAyEC;AAzEY,0CAAe"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.mmwave.js b/frontend/views/dashboard/dist/dashboard.mmwave.js new file mode 100644 index 0000000..8c06ee0 --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.mmwave.js @@ -0,0 +1,60 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DashboardMMWave = void 0; +var utils_1 = require("./utils"); +var CELCIUS = 'ºC'; +var DashboardMMWave = /** @class */ (function () { + function DashboardMMWave(Main) { + this.container = document.querySelector('.ntsh_dashboard-mmwave'); + this.standardPortStatus = this.container.querySelector('.ntsh_dashboard-mmwave-standardstatus'); + this.standardPortInfo = this.container.querySelector('.ntsh_dashboard-mmwave-standardinfo'); + this.enhancedPortStatus = this.container.querySelector('.ntsh_dashboard-mmwave-enhancedstatus'); + this.enhancedPortInfo = this.container.querySelector('.ntsh_dashboard-mmwave-enhancedinfo'); + this.framesPerSecond = this.container.querySelector('.ntsh_dashboard-mmwave-framespersecond'); + this.trackedPersons = this.container.querySelector('.ntsh_dashboard-mmwave-trackedpersons'); + this.personsInBounds = this.container.querySelector('.ntsh_dashboard-mmwave-personsinbounds'); + this.errorContainer = this.container.querySelector('.ntsh_dashboard-mmwave-error'); + this.errorText = this.container.querySelector('.ntsh_dashboard-mmwave-errortext'); + this._Main = Main; + this.registerListeners(); + } + DashboardMMWave.prototype.updateState = function (state) { + var _a; + if (state == null) + return; + var statusColors = { + CONNECTED: 'green', + DISCONNECTED: 'gray', + CONNECTING: 'yellow', + PROBLEM: 'red', + }; + // ----------- Standard Port ----------- + (0, utils_1.setStatusState)(this.standardPortStatus, statusColors[state.ports.standard.connected]); + this.standardPortInfo.innerText = state.ports.standard.info; + // ----------- Enhanced Port ----------- + (0, utils_1.setStatusState)(this.enhancedPortStatus, statusColors[state.ports.enhanced.connected]); + this.enhancedPortInfo.innerText = state.ports.enhanced.info; + // ----------- Statistics ----------- + this.framesPerSecond.innerText = state.framesPerSecond.toString(); + this.trackedPersons.innerText = state.trackedPersons.toString(); + this.personsInBounds.innerText = state.personsInBounds.toString(); + // ----------- Error ----------- + if (((_a = state === null || state === void 0 ? void 0 : state.error) !== null && _a !== void 0 ? _a : '').trim().length > 0) { + this.errorText.innerText = state.error; + this.errorContainer.style.display = 'block'; + } + else { + this.errorContainer.style.display = 'none'; + this.errorText.innerText = ''; + } + }; + DashboardMMWave.prototype.registerListeners = function () { + var _this = this; + this._Main.socket.on('mmWaveState', function (state) { + _this.updateState(state); + }); + }; + return DashboardMMWave; +}()); +exports.DashboardMMWave = DashboardMMWave; +//# sourceMappingURL=dashboard.mmwave.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.mmwave.js.map b/frontend/views/dashboard/dist/dashboard.mmwave.js.map new file mode 100644 index 0000000..52dfd4b --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.mmwave.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dashboard.mmwave.js","sourceRoot":"","sources":["../ts/dashboard.mmwave.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.projector copy.js b/frontend/views/dashboard/dist/dashboard.projector copy.js new file mode 100644 index 0000000..f61909b --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.projector copy.js @@ -0,0 +1,149 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function () { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DashboardProjector = void 0; +var morphux_1 = require("morphux"); +var utils_1 = require("./utils"); +var CELCIUS = 'ºC'; +var DashboardProjector = /** @class */ (function () { + function DashboardProjector(Main) { + this.container = document.querySelector('.ntsh_dashboard-projector'); + this.powerStatus = this.container.querySelector('.ntsh_dashboard-projector-powerstatus'); + this.powerInfo = this.container.querySelector('.ntsh_dashboard-projector-powerinfo'); + this.powerOnButton = this.container.querySelector('.ntsh_dashboard-projector-poweron'); + this.powerOffButton = this.container.querySelector('.ntsh_dashboard-projector-poweroff'); + this.laserStatus = this.container.querySelector('.ntsh_dashboard-projector-laserstatus'); + this.laserInfo = this.container.querySelector('.ntsh_dashboard-projector-laserinfo'); + this.shutterOpenButton = this.container.querySelector('.ntsh_dashboard-projector-shutteropen'); + this.shutterCloseButton = this.container.querySelector('.ntsh_dashboard-projector-shutterclose'); + this.sourceStatus = this.container.querySelector('.ntsh_dashboard-projector-sourcestatus'); + this.sourceInfo = this.container.querySelector('.ntsh_dashboard-projector-sourceinfo'); + this.sourceHDMIButton = this.container.querySelector('.ntsh_dashboard-projector-sourcehdmi'); + this.sourceDVIDButton = this.container.querySelector('.ntsh_dashboard-projector-sourcedvid'); + this.sourceDisplayPortButton = this.container.querySelector('.ntsh_dashboard-projector-sourcedisplayport'); + this.sourceSDIButton = this.container.querySelector('.ntsh_dashboard-projector-sourcesdi'); + this.temperatureIntake = this.container.querySelector('.ntsh_dashboard-projector-temperature-temperatureintake'); + this.temmperatureLaser = this.container.querySelector('.ntsh_dashboard-projector-temperature-temperaturelaser'); + this.temperatureDMD = this.container.querySelector('.ntsh_dashboard-projector-temperature-temperaturedmd'); + this.errorContainer = this.container.querySelector('.ntsh_dashboard-projector-error'); + this.errorText = this.container.querySelector('.ntsh_dashboard-projector-errortext'); + this._Main = Main; + this.registerListeners(); + } + DashboardProjector.prototype.updateState = function (state) { + if (state == null) + return; + // ----------- Power ----------- + (0, utils_1.setStatusState)(this.powerStatus, state.Powermd == 'Power On' ? 'ok' : 'error'); + this.powerInfo.innerText = state.Powermd; + this.powerOnButton.style.display = + state.Powermd == 'Power On' ? 'none' : 'flex'; + this.powerOffButton.style.display = + state.Powermd == 'Power On' ? 'flex' : 'none'; + // ----------- Laser ----------- + (0, utils_1.setStatusState)(this.laserStatus, state.LaserStatus == 'On' ? 'ok' : 'error'); + this.laserInfo.innerText = "".concat(state.LaserStatus, " (").concat(state.Laserhr, " hrs)"); + this.shutterOpenButton.style.display = + state.LaserStatus == 'On' ? 'none' : 'flex'; + this.shutterCloseButton.style.display = + state.LaserStatus == 'On' ? 'flex' : 'none'; + // ----------- Source ----------- + (0, utils_1.setStatusState)(this.sourceStatus, state.Sourcemd == 'No Source' ? 'error' : 'ok'); + this.sourceInfo.innerText = state.Sourcemd; + this.sourceHDMIButton.style.display = + state.Sourcemd == 'HDMI' ? 'none' : 'flex'; + this.sourceDVIDButton.style.display = + state.Sourcemd == 'DVI-D' ? 'none' : 'flex'; + this.sourceDisplayPortButton.style.display = + state.Sourcemd == 'DisplayPort' ? 'none' : 'flex'; + this.sourceSDIButton.style.display = + state.Sourcemd == '3G-SDI' ? 'none' : 'flex'; + // ----------- Temperature ----------- + this.temperatureIntake.innerText = "".concat(state.IntakeTempDeg, " ").concat(CELCIUS); + this.temmperatureLaser.innerText = "".concat(state.LaserTempDeg, " ").concat(CELCIUS); + this.temperatureDMD.innerText = "".concat(state.DMDTempDeg, " ").concat(CELCIUS); + }; + DashboardProjector.prototype.registerListeners = function () { + var _this = this; + this._Main.socket.on('projectorState', function (state) { + _this.updateState(state); + }); + this.powerOnButton.onclick = function () { + _this._Main.socket.emit('projectorCommand', 'powerOn'); + }; + this.powerOffButton.onclick = function () { + return __awaiter(_this, void 0, void 0, function () { + var confirmed; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, morphux_1.MorphFeature.Confirm({ + message: 'Are you sure you want to power on the projector?', + })]; + case 1: + confirmed = _a.sent(); + if (!confirmed) + return [2 /*return*/]; + this._Main.socket.emit('projectorCommand', 'powerOff'); + return [2 /*return*/]; + } + }); + }); + }; + this.shutterOpenButton.onclick = function () { + _this._Main.socket.emit('projectorCommand', 'shutterOpen'); + }; + this.shutterCloseButton.onclick = function () { + _this._Main.socket.emit('projectorCommand', 'shutterClose'); + }; + this.sourceHDMIButton.onclick = function () { + _this._Main.socket.emit('projectorCommand', 'source', 'HDMI'); + }; + this.sourceDVIDButton.onclick = function () { + _this._Main.socket.emit('projectorCommand', 'source', 'DVI-D'); + }; + this.sourceDisplayPortButton.onclick = function () { + _this._Main.socket.emit('projectorCommand', 'source', 'DisplayPort'); + }; + this.sourceSDIButton.onclick = function () { + _this._Main.socket.emit('projectorCommand', 'source', '3G-SDI'); + }; + }; + return DashboardProjector; +}()); +exports.DashboardProjector = DashboardProjector; +//# sourceMappingURL=dashboard.projector%20copy.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.projector copy.js.map b/frontend/views/dashboard/dist/dashboard.projector copy.js.map new file mode 100644 index 0000000..a689c53 --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.projector copy.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dashboard.projector copy.js","sourceRoot":"","sources":["../ts/dashboard.projector copy.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.projector.js b/frontend/views/dashboard/dist/dashboard.projector.js new file mode 100644 index 0000000..085c392 --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.projector.js @@ -0,0 +1,182 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function () { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DashboardProjector = void 0; +var morphux_1 = require("morphux"); +var utils_1 = require("./utils"); +var CELCIUS = 'ºC'; +var DashboardProjector = /** @class */ (function () { + function DashboardProjector(Main) { + this.container = document.querySelector('.ntsh_dashboard-projector'); + this.powerStatus = this.container.querySelector('.ntsh_dashboard-projector-powerstatus'); + this.powerInfo = this.container.querySelector('.ntsh_dashboard-projector-powerinfo'); + this.powerOnButton = this.container.querySelector('.ntsh_dashboard-projector-poweron'); + this.powerOffButton = this.container.querySelector('.ntsh_dashboard-projector-poweroff'); + this.laserStatus = this.container.querySelector('.ntsh_dashboard-projector-laserstatus'); + this.laserInfo = this.container.querySelector('.ntsh_dashboard-projector-laserinfo'); + this.shutterOpenButton = this.container.querySelector('.ntsh_dashboard-projector-shutteropen'); + this.shutterCloseButton = this.container.querySelector('.ntsh_dashboard-projector-shutterclose'); + this.sourceStatus = this.container.querySelector('.ntsh_dashboard-projector-sourcestatus'); + this.sourceInfo = this.container.querySelector('.ntsh_dashboard-projector-sourceinfo'); + this.sourceHDMIButton = this.container.querySelector('.ntsh_dashboard-projector-sourcehdmi'); + this.sourceDVIDButton = this.container.querySelector('.ntsh_dashboard-projector-sourcedvid'); + this.sourceDisplayPortButton = this.container.querySelector('.ntsh_dashboard-projector-sourcedisplayport'); + this.sourceSDIButton = this.container.querySelector('.ntsh_dashboard-projector-sourcesdi'); + this.temperatureIntake = this.container.querySelector('.ntsh_dashboard-projector-temperature-temperatureintake'); + this.temmperatureLaser = this.container.querySelector('.ntsh_dashboard-projector-temperature-temperaturelaser'); + this.temperatureDMD = this.container.querySelector('.ntsh_dashboard-projector-temperature-temperaturedmd'); + this.errorContainer = this.container.querySelector('.ntsh_dashboard-projector-error'); + this.errorText = this.container.querySelector('.ntsh_dashboard-projector-errortext'); + this._Main = Main; + this.registerListeners(); + } + DashboardProjector.prototype.updateState = function (state) { + if (state == null) + return; + // ----------- Power ----------- + (0, utils_1.setStatusState)(this.powerStatus, { + Disabled: 'red', + 'Not Connected': 'red', + 'Power On': 'green', + 'Power Off': 'gray', + 'Powering Up': 'yellow', + 'Powering Down': 'yellow', + }[state.Powermd]); + this.powerInfo.innerText = state.Powermd; + this.powerOnButton.style.display = + state.Powermd == 'Power Off' ? 'flex' : 'none'; + this.powerOffButton.style.display = + state.Powermd == 'Power On' ? 'flex' : 'none'; + // ----------- Laser ----------- + (0, utils_1.setStatusState)(this.laserStatus, state.LaserStatus == 'On' ? 'green' : 'gray'); + this.laserInfo.innerText = "".concat(state.LaserStatus, " (").concat(state.Laserhr, " hrs)"); + this.shutterOpenButton.style.display = + state.LaserStatus == 'On' || state.Powermd != 'Power On' + ? 'none' + : 'flex'; + this.shutterCloseButton.style.display = + state.LaserStatus == 'Off' || state.Powermd != 'Power On' + ? 'none' + : 'flex'; + // ----------- Source ----------- + (0, utils_1.setStatusState)(this.sourceStatus, state.Sourcemd == 'No Source' || + state.Sourcemd == '?' || + state.Powermd != 'Power On' + ? 'gray' + : 'green'); + this.sourceInfo.innerText = + state.Powermd == 'Power On' ? state.Sourcemd : ''; + this.sourceHDMIButton.style.display = + state.Sourcemd == 'HDMI' || state.Powermd != 'Power On' + ? 'none' + : 'flex'; + this.sourceDVIDButton.style.display = + state.Sourcemd == 'DVI-D' || state.Powermd != 'Power On' + ? 'none' + : 'flex'; + this.sourceDisplayPortButton.style.display = + state.Sourcemd == 'DisplayPort' || state.Powermd != 'Power On' + ? 'none' + : 'flex'; + this.sourceSDIButton.style.display = + state.Sourcemd == '3G-SDI' || state.Powermd != 'Power On' + ? 'none' + : 'flex'; + // ----------- Temperature ----------- + this.temperatureIntake.innerText = "".concat(state.IntakeTempDeg, " ").concat(CELCIUS); + this.temmperatureLaser.innerText = "".concat(state.LaserTempDeg, " ").concat(CELCIUS); + this.temperatureDMD.innerText = "".concat(state.DMDTempDeg, " ").concat(CELCIUS); + // ----------- Error ----------- + if (state.Err != '(No Error)') { + this.errorText.innerText = state.Err; + this.errorContainer.style.display = 'block'; + } + else { + this.errorContainer.style.display = 'none'; + this.errorText.innerText = ''; + } + }; + DashboardProjector.prototype.registerListeners = function () { + var _this = this; + this._Main.socket.on('projectorState', function (state) { + _this.updateState(state); + }); + this.powerOnButton.onclick = function () { + _this._Main.socket.emit('projectorCommand', 'powerOn'); + }; + this.powerOffButton.onclick = function () { + return __awaiter(_this, void 0, void 0, function () { + var confirmed; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, morphux_1.MorphFeature.Confirm({ + message: 'Are you sure you want to power on the projector?', + })]; + case 1: + confirmed = _a.sent(); + if (!confirmed) + return [2 /*return*/]; + this._Main.socket.emit('projectorCommand', 'powerOff'); + return [2 /*return*/]; + } + }); + }); + }; + this.shutterOpenButton.onclick = function () { + _this._Main.socket.emit('projectorCommand', 'shutterOpen'); + }; + this.shutterCloseButton.onclick = function () { + _this._Main.socket.emit('projectorCommand', 'shutterClose'); + }; + this.sourceHDMIButton.onclick = function () { + _this._Main.socket.emit('projectorCommand', 'source', 'HDMI'); + }; + this.sourceDVIDButton.onclick = function () { + _this._Main.socket.emit('projectorCommand', 'source', 'DVI-D'); + }; + this.sourceDisplayPortButton.onclick = function () { + _this._Main.socket.emit('projectorCommand', 'source', 'DisplayPort'); + }; + this.sourceSDIButton.onclick = function () { + _this._Main.socket.emit('projectorCommand', 'source', '3G-SDI'); + }; + }; + return DashboardProjector; +}()); +exports.DashboardProjector = DashboardProjector; +//# sourceMappingURL=dashboard.projector.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.projector.js.map b/frontend/views/dashboard/dist/dashboard.projector.js.map new file mode 100644 index 0000000..83397e7 --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.projector.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dashboard.projector.js","sourceRoot":"","sources":["../ts/dashboard.projector.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.showcontrol.js b/frontend/views/dashboard/dist/dashboard.showcontrol.js new file mode 100644 index 0000000..6621db7 --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.showcontrol.js @@ -0,0 +1,74 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DashboardShowControl = void 0; +var utils_1 = require("./utils"); +var CELCIUS = 'ºC'; +var DashboardShowControl = /** @class */ (function () { + function DashboardShowControl(Main) { + this.container = document.querySelector('.ntsh_dashboard-showcontrol'); + this.runningStatus = this.container.querySelector('.ntsh_dashboard-showcontrol-runningstatus'); + this.runningInfo = this.container.querySelector('.ntsh_dashboard-showcontrol-runninginfo'); + this.errorContainer = this.container.querySelector('.ntsh_dashboard-showcontrol-error'); + this.errorText = this.container.querySelector('.ntsh_dashboard-showcontrol-errortext'); + this.startButton = this.container.querySelector('.ntsh_dashboard-showcontrol-start'); + this.stopButton = this.container.querySelector('.ntsh_dashboard-showcontrol-stop'); + this._Main = Main; + this.registerListeners(); + } + DashboardShowControl.prototype.updateState = function (state) { + var _a; + // ----------- Running ----------- + var runningStatus = { + STOPPED: 'gray', + STARTING: 'yellow', + RUNNING: 'green', + STOPPING: 'yellow', + RETRYING: 'red', + HALTED: 'red', + }[state.status]; + (0, utils_1.setStatusState)(this.runningStatus, runningStatus); + this.runningInfo.innerText = { + STOPPED: 'Idle', + STARTING: state.info, + RUNNING: 'Running', + STOPPING: 'Stopping...', + RETRYING: 'Problem detected! Retrying...', + HALTED: 'Halted due to problems!', + }[state.status]; + // ----------- Buttons ----------- + this.startButton.style.display = + state.status == 'STOPPED' || + state.status == 'HALTED' || + state.status == 'RETRYING' + ? 'flex' + : 'none'; + this.stopButton.style.display = + state.status == 'RUNNING' || state.status == 'RETRYING' + ? 'flex' + : 'none'; + // ----------- Error ----------- + if (((_a = state === null || state === void 0 ? void 0 : state.error) !== null && _a !== void 0 ? _a : '').trim().length > 0) { + this.errorText.innerText = state.error; + this.errorContainer.style.display = 'block'; + } + else { + this.errorContainer.style.display = 'none'; + this.errorText.innerText = ''; + } + }; + DashboardShowControl.prototype.registerListeners = function () { + var _this = this; + this._Main.socket.on('showControlState', function (state) { + _this.updateState(state); + }); + this.startButton.onclick = function () { + fetch('/api/v1/start'); + }; + this.stopButton.onclick = function () { + fetch('/api/v1/stop'); + }; + }; + return DashboardShowControl; +}()); +exports.DashboardShowControl = DashboardShowControl; +//# sourceMappingURL=dashboard.showcontrol.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.showcontrol.js.map b/frontend/views/dashboard/dist/dashboard.showcontrol.js.map new file mode 100644 index 0000000..c8ea52a --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.showcontrol.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dashboard.showcontrol.js","sourceRoot":"","sources":["../ts/dashboard.showcontrol.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.testing.js b/frontend/views/dashboard/dist/dashboard.testing.js new file mode 100644 index 0000000..09b97ba --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.testing.js @@ -0,0 +1,176 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function () { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Testing = void 0; +var morphux_1 = require("morphux"); +var Testing = /** @class */ (function () { + function Testing(Main) { + this.container = document.querySelector('.ntsh_testing'); + this.weatherResetButton = this.container.querySelector('.ntsh_testing-weather-reset'); + this.weather0Button = this.container.querySelector('.ntsh_testing-weather-0'); + this.weather5Button = this.container.querySelector('.ntsh_testing-weather-5'); + this.weather10Button = this.container.querySelector('.ntsh_testing-weather-10'); + this.weather20Button = this.container.querySelector('.ntsh_testing-weather-20'); + this.weather50Button = this.container.querySelector('.ntsh_testing-weather-50'); + this.resetAllTracksButton = this.container.querySelector('.ntsh_testing-tracks-reset'); + this.cloudAnimationsSimoultaneousContainer = this.container.querySelector('.ntsh_testing-cloud-animations-simoultaneous'); + this.cloudAnimationsStandaloneContainer = this.container.querySelector('.ntsh_testing-cloud-animations-standalone'); + this._Main = Main; + this.registerListeners(); + } + Testing.prototype.registerListeners = function () { + var _this = this; + this.weatherResetButton.onclick = function () { return _this.setWeather('reset'); }; + this.weather0Button.onclick = function () { return _this.setWeather(0); }; + this.weather5Button.onclick = function () { return _this.setWeather(5); }; + this.weather10Button.onclick = function () { return _this.setWeather(10); }; + this.weather20Button.onclick = function () { return _this.setWeather(20); }; + this.weather50Button.onclick = function () { return _this.setWeather(50); }; + [ + 'Rain', + 'Blink', + 'Breath', + 'Fill', + 'Rainbow', + 'Wave', + 'Pulse', + 'Ambient', + 'Flow', + 'Thunder', + 'Swipe Left', + 'Swipe Right', + 'Swipe Down', + 'Swipe Up', + 'Sphere Pulse', + ].forEach(function (effect) { + var simoultaneous = (0, morphux_1.ce)('div', ['mux_button', 'mux_normal', 'mux_text'], null, effect); + var standalone = simoultaneous.cloneNode(true); + _this.cloudAnimationsSimoultaneousContainer.appendChild(simoultaneous); + _this.cloudAnimationsStandaloneContainer.appendChild(standalone); + simoultaneous.onclick = function () { + return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.fetch("/dev/animation/cloud/simoultaneous/".concat(effect + .replace(/ /g, '') + .toLowerCase()))]; + case 1: + _a.sent(); + morphux_1.MorphFeature.Notification({ + level: 'success', + message: "Cloud animation set to ".concat(effect, " (simoultaneous)!"), + }); + return [2 /*return*/]; + } + }); + }); + }; + standalone.onclick = function () { + return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.fetch("/dev/animation/cloud/standalone/".concat(effect + .replace(/ /g, '') + .toLowerCase()))]; + case 1: + _a.sent(); + morphux_1.MorphFeature.Notification({ + level: 'success', + message: "Cloud animation set to ".concat(effect, " (standalone)!"), + }); + return [2 /*return*/]; + } + }); + }); + }; + }); + this.resetAllTracksButton.onclick = function () { + return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.fetch('/dev/resetTracks')]; + case 1: + _a.sent(); + morphux_1.MorphFeature.Notification({ + level: 'success', + message: "All tracks have been reset!", + }); + return [2 /*return*/]; + } + }); + }); + }; + }; + Testing.prototype.setWeather = function (rainAmount) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.fetch("/dev/weather/".concat(rainAmount))]; + case 1: + _a.sent(); + morphux_1.MorphFeature.Notification({ + level: 'success', + message: rainAmount == 'reset' + ? 'Returned to actual weather!' + : "Weather set to ".concat(rainAmount, "!"), + }); + return [2 /*return*/]; + } + }); + }); + }; + Testing.prototype.fetch = function (address) { + return __awaiter(this, void 0, void 0, function () { + var request; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + morphux_1.MorphFeature.Loader({ active: true }); + return [4 /*yield*/, fetch(address)]; + case 1: + request = _a.sent(); + morphux_1.MorphFeature.Loader({ active: false }); + return [2 /*return*/]; + } + }); + }); + }; + return Testing; +}()); +exports.Testing = Testing; +//# sourceMappingURL=dashboard.testing.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.testing.js.map b/frontend/views/dashboard/dist/dashboard.testing.js.map new file mode 100644 index 0000000..ed8632f --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.testing.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dashboard.testing.js","sourceRoot":"","sources":["../ts/dashboard.testing.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.unity.js b/frontend/views/dashboard/dist/dashboard.unity.js new file mode 100644 index 0000000..ccb304f --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.unity.js @@ -0,0 +1,243 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DashboardUnity = void 0; +var morphux_1 = require("morphux"); +var utils_1 = require("./utils"); +var DashboardUnity = /** @class */ (function () { + function DashboardUnity(Main) { + this.container = document.querySelector('.ntsh_dashboard-unity'); + this.processStatus = document.querySelector('.ntsh_dashboard-unity-processstatus'); + this.processInfo = document.querySelector('.ntsh_dashboard-unity-processinfo'); + this.restartButton = document.querySelector('.ntsh_dashboard-unity-restart'); + this.uptimeInfo = document.querySelector('.ntsh_dashboard-unity-uptime'); + this.webSocketStatus = document.querySelector('.ntsh_dashboard-unity-websocketstatus'); + this.webSocketInfo = document.querySelector('.ntsh_dashboard-unity-websocketinfo'); + this.zedStreamStatus = document.querySelector('.ntsh_dashboard-unity-zedstreamstatus'); + this.zedStreamInfo = document.querySelector('.ntsh_dashboard-unity-zedstreaminfo'); + this.zedStreamFps = document.querySelector('.ntsh_dashboard-unity-zedstreamfps'); + this.zedStreamPath = document.querySelector('.ntsh_dashboard-unity-zedstreampath'); + this.timelineWatching = document.querySelector('.ntsh_dashboard-unity-timeline-watching'); + this.timelineStanding = document.querySelector('.ntsh_dashboard-unity-timeline-standing'); + this.timelineProgress = document.querySelector('.ntsh_dashboard-unity-timeline-progress'); + this.parametersTable = document.querySelector('.ntsh_dashboard-unity-parameters'); + this.errorContainer = document.querySelector('.ntsh_dashboard-unity-error'); + this.errorText = document.querySelector('.ntsh_dashboard-unity-errortext'); + this._Main = Main; + this.registerListeners(); + } + DashboardUnity.prototype.updateRunnerState = function (state) { + var _a, _b; + // ----------- Process ----------- + if (state.state != 'RUNNING') { + state.startTime = -1; + this.restartButton.style.display = 'none'; + } + else { + this.restartButton.style.display = 'flex'; + } + (0, utils_1.setStatusState)(this.processStatus, { + RUNNING: 'green', + STOPPED: 'red', + STARTING: 'yellow', + PROBLEM: 'red', + }[state.state]); + this.processInfo.innerText = (_a = state.message) !== null && _a !== void 0 ? _a : ''; + // ----------- Uptime ----------- + var uptimeSeconds = state.startTime == -1 ? -1 : (Date.now() - state.startTime) / 1000; + this.uptimeInfo.innerText = (0, utils_1.formatUptime)(uptimeSeconds); + // ----------- Error ----------- + if (((_b = state === null || state === void 0 ? void 0 : state.error) !== null && _b !== void 0 ? _b : '').trim().length > 0) + this.runnerError = state.error; + else + this.runnerError = null; + this.updateError(); + this._Main.Logs.setUnityLogs(state.output.current); + }; + DashboardUnity.prototype.updateWebSocketState = function (state) { + var _a, _b; + // ----------- WebSocket ----------- + (0, utils_1.setStatusState)(this.webSocketStatus, { + CONNECTING: 'yellow', + CONNECTED: 'green', + DISCONNECTED: 'gray', + FAILED: 'red', + }[state.state]); + this.webSocketInfo.innerText = (_a = state.message) !== null && _a !== void 0 ? _a : ''; + // ----------- ZED Stream ----------- + (0, utils_1.setStatusState)(this.zedStreamStatus, state.parameters.zedReady ? 'green' : 'red'); + this.zedStreamInfo.innerText = state.parameters.zedReady + ? "Connected to ".concat(state.parameters.zedPath) + : 'Not ready'; + this.zedStreamFps.innerText = + state.parameters.zedFPS == '-' ? '' : state.parameters.zedFPS; + // ----------- Timeline ----------- + this.timelineWatching.innerText = state.parameters.timelineWatching + ? 'Yes' + : 'No'; + this.timelineStanding.innerText = state.parameters.timelineStanding + ? 'Yes' + : 'No'; + (0, utils_1.setProgressState)(this.timelineProgress, state.parameters.timelineProgress); + // ----------- Parameters ----------- + this.renderParameterSliders(state.parameters.parameters); + // ----------- Error ----------- + if (((_b = state === null || state === void 0 ? void 0 : state.error) !== null && _b !== void 0 ? _b : '').trim().length > 0) + this.webSocketError = state.error; + else + this.webSocketError = null; + this.updateError(); + }; + DashboardUnity.prototype.renderParameterSliders = function (parameters) { + var _this = this; + if (parameters.length === 0) + return; + var existingSliders = this.parametersTable.querySelectorAll('.ntsh_dashboard-unity-parameter-row'); + if (existingSliders.length !== parameters.length) { + this.parametersTable.innerHTML = ''; + parameters.forEach(function (param) { + var row = (0, morphux_1.ce)('tr', 'ntsh_dashboard-unity-parameter-row'); + var nameCell = (0, morphux_1.ce)('td'); + nameCell.appendChild((0, morphux_1.ce)('div', 'mux_text', null, param.sliderName)); + row.appendChild(nameCell); + var progressCell = (0, morphux_1.ce)('td', 'no-service'); + progressCell.appendChild((0, utils_1.createProgress)(param.outputValue)); + row.appendChild(progressCell); + var sliderCell = (0, morphux_1.ce)('td', 'only-service'); + var sliderProgress = (0, utils_1.createProgress)(param.outputValue); + var sliderValue = sliderProgress.querySelector('.ntsh_progress-value'); + sliderValue.classList.add('mux_resizer'); + sliderCell.appendChild(sliderProgress); + var resizer = new morphux_1.MorphComponent.Resizer({ + existingContainer: sliderValue, + direction: 'right', + relative: true, + min: 0, + max: function () { return sliderProgress.clientWidth; }, + }); + var lastPercentage = -1; + resizer.on('resized', function (size) { + var percentage = Math.round((size / sliderProgress.clientWidth) * 100) / + 100; + if (percentage === lastPercentage) + return; + lastPercentage = percentage; + _this._Main.socket.emit('unityWebSocket', 'parameterValue', param.sliderIndex, percentage); + (0, utils_1.setProgressState)(sliderProgress, percentage); + }); + row.appendChild(sliderCell); + _this.parametersTable.appendChild(row); + }); + } + else { + existingSliders.forEach(function (row, index) { + var value = parameters[index].outputValue; + var progressElement = row.querySelector('.no-service .ntsh_progress'); + (0, utils_1.setProgressState)(progressElement, value); + var sliderElement = row.querySelector('.only-service .ntsh_progress'); + if (sliderElement.querySelector('.mux_resizer-moving') == null) + (0, utils_1.setProgressState)(sliderElement, value); + }); + } + }; + DashboardUnity.prototype.updateError = function () { + var errors = []; + if (this.runnerError != null) + errors.push(this.runnerError); + if (this.webSocketError != null) + errors.push(this.webSocketError); + if (errors.length > 0) { + this.errorText.innerText = errors.join('\n'); + this.errorContainer.style.display = 'block'; + } + else { + this.errorContainer.style.display = 'none'; + this.errorText.innerText = ''; + } + }; + DashboardUnity.prototype.registerListeners = function () { + var _this = this; + this._Main.socket.on('unityRunnerState', function (state) { + return _this.updateRunnerState(state); + }); + this._Main.socket.on('unityWebSocketState', function (state) { return _this.updateWebSocketState(state); }); + this.restartButton.addEventListener('click', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + this.executeCommand('restart', 'Are you sure you want to restart the Unity Runner process?'); + return [2 /*return*/]; + }); + }); }); + }; + DashboardUnity.prototype.executeCommand = function (command, message) { + return __awaiter(this, void 0, void 0, function () { + var confirmed; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, morphux_1.MorphFeature.Confirm({ + title: 'Are you sure?', + message: message, + })]; + case 1: + confirmed = _a.sent(); + if (!confirmed) + return [2 /*return*/]; + morphux_1.MorphFeature.Loader({ + active: true, + message: "Requesting Unity Runner ".concat(command, "..."), + }); + this._Main.socket.emit('unityRunner', command, function (response) { + morphux_1.MorphFeature.Loader({ active: false }); + if (!response.succeed) + return morphux_1.MorphFeature.Alert({ + title: 'Error', + message: response.message, + }); + morphux_1.MorphFeature.Notification({ + level: 'success', + message: "Unity Runner is ".concat(command, "ing..."), + }); + }); + return [2 /*return*/]; + } + }); + }); + }; + return DashboardUnity; +}()); +exports.DashboardUnity = DashboardUnity; +//# sourceMappingURL=dashboard.unity.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.unity.js.map b/frontend/views/dashboard/dist/dashboard.unity.js.map new file mode 100644 index 0000000..5cf9eb2 --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.unity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dashboard.unity.js","sourceRoot":"","sources":["../ts/dashboard.unity.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.unityrunner.js b/frontend/views/dashboard/dist/dashboard.unityrunner.js new file mode 100644 index 0000000..f00d1e1 --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.unityrunner.js @@ -0,0 +1,143 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function () { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DashboardUnityRunner = void 0; +var morphux_1 = require("morphux"); +var utils_1 = require("./utils"); +var CELCIUS = 'ºC'; +var DashboardUnityRunner = /** @class */ (function () { + function DashboardUnityRunner(Main) { + this.container = document.querySelector('.ntsh_dashboard-unity'); + this.processStatus = this.container.querySelector('.ntsh_dashboard-unity-processstatus'); + this.processInfo = this.container.querySelector('.ntsh_dashboard-unity-processinfo'); + this.restartButton = this.container.querySelector('.ntsh_dashboard-unity-restart'); + this.uptimeInfo = this.container.querySelector('.ntsh_dashboard-unity-uptime'); + this.errorContainer = this.container.querySelector('.ntsh_dashboard-unity-error'); + this.errorText = this.container.querySelector('.ntsh_dashboard-unity-errortext'); + this._Main = Main; + this.registerListeners(); + } + DashboardUnityRunner.prototype.updateState = function (state) { + var _a, _b; + // ----------- Process ----------- + if (state.state != 'RUNNING') { + state.startTime = -1; + this.restartButton.style.display = 'none'; + } + else { + this.restartButton.style.display = 'flex'; + } + (0, utils_1.setStatusState)(this.processStatus, { + RUNNING: 'green', + STOPPED: 'red', + STARTING: 'yellow', + PROBLEM: 'red', + }[state.state]); + this.processInfo.innerText = (_a = state.message) !== null && _a !== void 0 ? _a : ''; + // ----------- Uptime ----------- + var uptimeSeconds = state.startTime == -1 ? -1 : (Date.now() - state.startTime) / 1000; + this.uptimeInfo.innerText = (0, utils_1.formatUptime)(uptimeSeconds); + // ----------- Error ----------- + var errors = []; + if (((_b = state === null || state === void 0 ? void 0 : state.error) !== null && _b !== void 0 ? _b : '').trim().length > 0) + errors.push(state.error); + if (errors.length > 0) { + this.errorText.innerText = errors.join('\n'); + this.errorContainer.style.display = 'block'; + } + else { + this.errorContainer.style.display = 'none'; + this.errorText.innerText = ''; + } + this._Main.Logs.setUnityLogs(state.output.current); + }; + DashboardUnityRunner.prototype.registerListeners = function () { + var _this = this; + this._Main.socket.on('unityRunnerState', function (state) { + _this.updateState(state); + }); + this._Main.socket.on('unityWebSocketState', function (state) { + console.log('Unity WebSocket State:', state); + }); + this.restartButton.addEventListener('click', function () { + return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + this.executeCommand('restart', 'Are you sure you want to restart the Unity Runner process?'); + return [2 /*return*/]; + }); + }); + }); + }; + DashboardUnityRunner.prototype.executeCommand = function (command, message) { + return __awaiter(this, void 0, void 0, function () { + var confirmed; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, morphux_1.MorphFeature.Confirm({ + title: 'Are you sure?', + message: message, + })]; + case 1: + confirmed = _a.sent(); + if (!confirmed) + return [2 /*return*/]; + morphux_1.MorphFeature.Loader({ + active: true, + message: "Requesting Unity Runner ".concat(command, "..."), + }); + this._Main.socket.emit('unityRunner', command, function (response) { + morphux_1.MorphFeature.Loader({ active: false }); + if (!response.succeed) + return morphux_1.MorphFeature.Alert({ + title: 'Error', + message: response.message, + }); + morphux_1.MorphFeature.Notification({ + level: 'success', + message: "Unity Runner is ".concat(command, "ing..."), + }); + }); + return [2 /*return*/]; + } + }); + }); + }; + return DashboardUnityRunner; +}()); +exports.DashboardUnityRunner = DashboardUnityRunner; +//# sourceMappingURL=dashboard.unityrunner.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/dashboard.unityrunner.js.map b/frontend/views/dashboard/dist/dashboard.unityrunner.js.map new file mode 100644 index 0000000..6d25b59 --- /dev/null +++ b/frontend/views/dashboard/dist/dashboard.unityrunner.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dashboard.unityrunner.js","sourceRoot":"","sources":["../ts/dashboard.unityrunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/leds copy.js b/frontend/views/dashboard/dist/leds copy.js new file mode 100644 index 0000000..5e2a111 --- /dev/null +++ b/frontend/views/dashboard/dist/leds copy.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Leds = void 0; +var morphux_1 = require("morphux"); +var Leds = /** @class */ (function () { + function Leds(Main) { + this.container = document.querySelector(".ntsh_tab[tabid=\"leds\"]"); + this._Main = Main; + this.registerTabListener(); + } + Leds.prototype.createPreviewFrame = function () { + var container = (0, morphux_1.ce)('div', 'ntsh_leds'); + var urlParams = new URLSearchParams(window.location.search); + var transform = urlParams.has('transform') + ? "?transform=".concat(urlParams.get('transform')) + : ''; + var frame = (0, morphux_1.ce)('iframe', 'ntsh_leds-frame', { + src: "http://".concat(window.location.hostname, ":84").concat(transform), + }); + container.appendChild(frame); + this.container.appendChild(container); + }; + Leds.prototype.removePreviewFrame = function () { + this.container.innerHTML = ''; + }; + Leds.prototype.registerTabListener = function () { + var _this = this; + this._Main.TabController.registerListener('leds', function (visible) { + if (visible) + _this.createPreviewFrame(); + else + _this.removePreviewFrame(); + }); + }; + return Leds; +}()); +exports.Leds = Leds; +//# sourceMappingURL=leds%20copy.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/leds copy.js.map b/frontend/views/dashboard/dist/leds copy.js.map new file mode 100644 index 0000000..e1c7045 --- /dev/null +++ b/frontend/views/dashboard/dist/leds copy.js.map @@ -0,0 +1 @@ +{"version":3,"file":"leds copy.js","sourceRoot":"","sources":["../ts/leds copy.ts"],"names":[],"mappings":";;;AAAA,mCAA6B;AAG7B;IAOC,cAAY,IAAU;QAJtB,cAAS,GAAmB,QAAQ,CAAC,aAAa,CACjD,2BAAyB,CACzB,CAAC;QAGD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC5B,CAAC;IAED,iCAAkB,GAAlB;QACC,IAAI,SAAS,GAAG,IAAA,YAAE,EAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAEvC,IAAI,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE5D,IAAI,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;YACzC,CAAC,CAAC,qBAAc,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAE;YAC5C,CAAC,CAAC,EAAE,CAAC;QAEN,IAAI,KAAK,GAAG,IAAA,YAAE,EAAC,QAAQ,EAAE,iBAAiB,EAAE;YAC3C,GAAG,EAAE,iBAAU,MAAM,CAAC,QAAQ,CAAC,QAAQ,gBAAM,SAAS,CAAE;SACxD,CAAC,CAAC;QACH,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE7B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,iCAAkB,GAAlB;QACC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;IAC/B,CAAC;IAEO,kCAAmB,GAA3B;QAAA,iBAKC;QAJA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAC,OAAO;YACzD,IAAI,OAAO;gBAAE,KAAI,CAAC,kBAAkB,EAAE,CAAC;;gBAClC,KAAI,CAAC,kBAAkB,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;IACJ,CAAC;IACF,WAAC;AAAD,CAAC,AAxCD,IAwCC;AAxCY,oBAAI"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/leds.js b/frontend/views/dashboard/dist/leds.js new file mode 100644 index 0000000..8e7e3e8 --- /dev/null +++ b/frontend/views/dashboard/dist/leds.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Leds = void 0; +var morphux_1 = require("morphux"); +var Leds = /** @class */ (function () { + function Leds(Main) { + this.container = document.querySelector(".ntsh_tab[tabid=\"leds\"]"); + this._Main = Main; + this.registerTabListener(); + } + Leds.prototype.createPreviewFrame = function () { + var container = (0, morphux_1.ce)('div', 'ntsh_leds'); + var urlParams = new URLSearchParams(window.location.search); + var transform = urlParams.has('transform') + ? "?transform=".concat(urlParams.get('transform')) + : ''; + var frame = (0, morphux_1.ce)('iframe', 'ntsh_leds-frame', { + src: "http://".concat(window.location.hostname, ":84").concat(transform), + }); + container.appendChild(frame); + this.container.appendChild(container); + }; + Leds.prototype.removePreviewFrame = function () { + this.container.innerHTML = ''; + }; + Leds.prototype.registerTabListener = function () { + var _this = this; + this._Main.TabController.registerListener('leds', function (visible) { + if (visible) + _this.createPreviewFrame(); + else + _this.removePreviewFrame(); + }); + }; + return Leds; +}()); +exports.Leds = Leds; +//# sourceMappingURL=leds.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/leds.js.map b/frontend/views/dashboard/dist/leds.js.map new file mode 100644 index 0000000..c0747c2 --- /dev/null +++ b/frontend/views/dashboard/dist/leds.js.map @@ -0,0 +1 @@ +{"version":3,"file":"leds.js","sourceRoot":"","sources":["../ts/leds.ts"],"names":[],"mappings":";;;AAAA,mCAA6B;AAG7B;IAOC,cAAY,IAAU;QAJtB,cAAS,GAAmB,QAAQ,CAAC,aAAa,CACjD,2BAAyB,CACzB,CAAC;QAGD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC5B,CAAC;IAED,iCAAkB,GAAlB;QACC,IAAI,SAAS,GAAG,IAAA,YAAE,EAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAEvC,IAAI,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE5D,IAAI,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;YACzC,CAAC,CAAC,qBAAc,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAE;YAC5C,CAAC,CAAC,EAAE,CAAC;QAEN,IAAI,KAAK,GAAG,IAAA,YAAE,EAAC,QAAQ,EAAE,iBAAiB,EAAE;YAC3C,GAAG,EAAE,iBAAU,MAAM,CAAC,QAAQ,CAAC,QAAQ,gBAAM,SAAS,CAAE;SACxD,CAAC,CAAC;QACH,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE7B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,iCAAkB,GAAlB;QACC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;IAC/B,CAAC;IAEO,kCAAmB,GAA3B;QAAA,iBAKC;QAJA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,MAAM,EAAE,UAAC,OAAO;YACzD,IAAI,OAAO;gBAAE,KAAI,CAAC,kBAAkB,EAAE,CAAC;;gBAClC,KAAI,CAAC,kBAAkB,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;IACJ,CAAC;IACF,WAAC;AAAD,CAAC,AAxCD,IAwCC;AAxCY,oBAAI"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/logs.js b/frontend/views/dashboard/dist/logs.js new file mode 100644 index 0000000..576c599 --- /dev/null +++ b/frontend/views/dashboard/dist/logs.js @@ -0,0 +1,19 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Logs = void 0; +var Logs = /** @class */ (function () { + function Logs() { + this.cameraLogsContainer = document.querySelector('.ntsh_tab[tabid="cameralogs"] .ntsh_logs'); + this.unityLogsContainer = document.querySelector('.ntsh_tab[tabid="unitylogs"] .ntsh_logs'); + } + Logs.prototype.setCameraLogs = function (logs) { + this.applyLogs(this.cameraLogsContainer, logs); + }; + Logs.prototype.setUnityLogs = function (logs) { + this.applyLogs(this.unityLogsContainer, logs); + }; + Logs.prototype.applyLogs = function (container, logs) { }; + return Logs; +}()); +exports.Logs = Logs; +//# sourceMappingURL=logs.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/logs.js.map b/frontend/views/dashboard/dist/logs.js.map new file mode 100644 index 0000000..edb81f8 --- /dev/null +++ b/frontend/views/dashboard/dist/logs.js.map @@ -0,0 +1 @@ +{"version":3,"file":"logs.js","sourceRoot":"","sources":["../ts/logs.ts"],"names":[],"mappings":";;;AAAA;IAAA;QACC,wBAAmB,GAAmB,QAAQ,CAAC,aAAa,CAC3D,sCAAsC,CACtC,CAAC;QACF,uBAAkB,GAAmB,QAAQ,CAAC,aAAa,CAC1D,qCAAqC,CACrC,CAAC;IAWH,CAAC;IATA,4BAAa,GAAb,UAAc,IAAc;QAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,2BAAY,GAAZ,UAAa,IAAc;QAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAEO,wBAAS,GAAjB,UAAkB,SAAyB,EAAE,IAAc,IAAG,CAAC;IAChE,WAAC;AAAD,CAAC,AAjBD,IAiBC;AAjBY,oBAAI"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/logsHandler.js b/frontend/views/dashboard/dist/logsHandler.js new file mode 100644 index 0000000..d36cb09 --- /dev/null +++ b/frontend/views/dashboard/dist/logsHandler.js @@ -0,0 +1,116 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LogsHandler = void 0; +var morphux_1 = require("morphux"); +var ansi_up_1 = require("ansi_up"); +var LogsHandler = /** @class */ (function () { + function LogsHandler(Main) { + this.ansiUp = new ansi_up_1.AnsiUp(); + this.cameraLogsContainer = document.querySelector('.ntsh_tab[tabid="cameralogs"] .ntsh_logs'); + this.unityLogsContainer = document.querySelector('.ntsh_tab[tabid="unitylogs"] .ntsh_logs'); + this.firstTime = new Set(); + this._Main = Main; + this.registerListeners(); + } + LogsHandler.prototype.setCameraLogs = function (logs) { + this.applyLogs(this.cameraLogsContainer, logs); + }; + LogsHandler.prototype.setUnityLogs = function (logs) { + this.applyLogs(this.unityLogsContainer, logs); + }; + LogsHandler.prototype.applyLogs = function (container, logs) { + return __awaiter(this, void 0, void 0, function () { + var logCount, isAtBottom; + var _this = this; + return __generator(this, function (_a) { + logCount = container.querySelectorAll('.ntsh_log.ntsh_log-normal').length; + if (logCount === logs.length) + return [2 /*return*/]; + if (logCount > logs.length) + logCount = 0; + isAtBottom = !this.firstTime.has(container) || + container.scrollTop + container.clientHeight >= + container.scrollHeight; + container.innerHTML = ''; + logs.forEach(function (log, i) { + var element = (0, morphux_1.ce)('div', ['ntsh_log', 'ntsh_log-normal'], null, null, _this.ansiUp.ansi_to_html(log)); + if (_this.firstTime.has(container) && i > logCount - 1) { + element.style.display = 'none'; + var spawnDelay = (i - logCount) * 10; + setTimeout(function () { + element.style.display = 'block'; + if (isAtBottom) + container.scrollTop = container.scrollHeight; + }, spawnDelay); + } + container.appendChild(element); + if (isAtBottom) + container.scrollTop = container.scrollHeight; + }); + if (!this.firstTime.has(container)) { + container.scrollTop = container.scrollHeight; + this.firstTime.add(container); + } + return [2 /*return*/]; + }); + }); + }; + LogsHandler.prototype.registerListeners = function () { + var _this = this; + this._Main.TabController.registerListener('cameralogs', function (visible) { + if (!visible) + return; + setTimeout(function () { + _this.cameraLogsContainer.scrollTop = + _this.cameraLogsContainer.scrollHeight; + }, 10); + }); + this._Main.TabController.registerListener('unitylogs', function (visible) { + if (!visible) + return; + setTimeout(function () { + _this.unityLogsContainer.scrollTop = + _this.unityLogsContainer.scrollHeight; + }, 10); + }); + }; + return LogsHandler; +}()); +exports.LogsHandler = LogsHandler; +//# sourceMappingURL=logsHandler.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/logsHandler.js.map b/frontend/views/dashboard/dist/logsHandler.js.map new file mode 100644 index 0000000..9b549d3 --- /dev/null +++ b/frontend/views/dashboard/dist/logsHandler.js.map @@ -0,0 +1 @@ +{"version":3,"file":"logsHandler.js","sourceRoot":"","sources":["../ts/logsHandler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAA6B;AAG7B,mCAAiC;AAEjC;IAYC,qBAAY,IAAU;QATtB,WAAM,GAAG,IAAI,gBAAM,EAAE,CAAC;QAEtB,wBAAmB,GAAmB,QAAQ,CAAC,aAAa,CAC3D,0CAA0C,CAC1C,CAAC;QACF,uBAAkB,GAAmB,QAAQ,CAAC,aAAa,CAC1D,yCAAyC,CACzC,CAAC;QAgBM,cAAS,GAAwB,IAAI,GAAG,EAAE,CAAC;QAblD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAED,mCAAa,GAAb,UAAc,IAAc;QAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,kCAAY,GAAZ,UAAa,IAAc;QAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAIa,+BAAS,GAAvB,UAAwB,SAAyB,EAAE,IAAc;;;;;gBAC5D,QAAQ,GAAG,SAAS,CAAC,gBAAgB,CACxC,2BAA2B,CAC3B,CAAC,MAAM,CAAC;gBACT,IAAI,QAAQ,KAAK,IAAI,CAAC,MAAM;oBAAE,sBAAO;gBACrC,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM;oBAAE,QAAQ,GAAG,CAAC,CAAC;gBAEnC,UAAU,GACf,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;oBAC9B,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,YAAY;wBAC3C,SAAS,CAAC,YAAY,CAAC;gBAEzB,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;gBAEzB,IAAI,CAAC,OAAO,CAAC,UAAC,GAAG,EAAE,CAAC;oBACnB,IAAM,OAAO,GAAG,IAAA,YAAE,EACjB,KAAK,EACL,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAC/B,IAAI,EACJ,IAAI,EACJ,KAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAC7B,CAAC;oBAEF,IAAI,KAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;wBACvD,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;wBAC/B,IAAM,UAAU,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;wBACvC,UAAU,CAAC;4BACV,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;4BAChC,IAAI,UAAU;gCACb,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC;wBAC/C,CAAC,EAAE,UAAU,CAAC,CAAC;oBAChB,CAAC;oBAED,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBAC/B,IAAI,UAAU;wBAAE,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC;gBAC9D,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBACpC,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC;oBAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC/B,CAAC;;;;KACD;IAEO,uCAAiB,GAAzB;QAAA,iBAkBC;QAjBA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,YAAY,EAAE,UAAC,OAAO;YAC/D,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,UAAU,CAAC;gBACV,KAAI,CAAC,mBAAmB,CAAC,SAAS;oBACjC,KAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;YACxC,CAAC,EAAE,EAAE,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,WAAW,EAAE,UAAC,OAAO;YAC9D,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,UAAU,CAAC;gBACV,KAAI,CAAC,kBAAkB,CAAC,SAAS;oBAChC,KAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;YACvC,CAAC,EAAE,EAAE,CAAC,CAAC;QACR,CAAC,CAAC,CAAC;IACJ,CAAC;IACF,kBAAC;AAAD,CAAC,AA1FD,IA0FC;AA1FY,kCAAW"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/main.js b/frontend/views/dashboard/dist/main.js new file mode 100644 index 0000000..65f6e93 --- /dev/null +++ b/frontend/views/dashboard/dist/main.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Main = void 0; +var socket_io_client_1 = require("socket.io-client"); +var menuBar_1 = require("./menuBar"); +var tabController_1 = require("./tabController"); +var morphux_1 = require("morphux"); +var dashboard_camerarunner_1 = require("./dashboard.camerarunner"); +var logsHandler_1 = require("./logsHandler"); +var calibration_1 = require("./calibration"); +var dashboard_unity_1 = require("./dashboard.unity"); +var socket = (0, socket_io_client_1.io)('/'); +var Main = /** @class */ (function () { + function Main() { + this.socket = socket; + this.MenuBar = new menuBar_1.MenuBar(this); + this.TabController = new tabController_1.TabController(this); + this.Logs = new logsHandler_1.LogsHandler(this); + this.Calibration = new calibration_1.Calibration(this); + this.DashboardCameraRunner = new dashboard_camerarunner_1.DashboardCameraRunner(this); + this.DashboardUnityRunner = new dashboard_unity_1.DashboardUnity(this); + if (window.location.search.includes('debug')) { + window.SN = this; + console.log('Debug mode enabled'); + } + } + return Main; +}()); +exports.Main = Main; +morphux_1.MorphFeature.Loader({ active: true, message: 'Connecting to server...' }); +socket.on('connect', function () { + console.log('Connected to server'); + morphux_1.MorphFeature.Loader({ active: false }); +}); +var _Main = new Main(); +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/main.js.map b/frontend/views/dashboard/dist/main.js.map new file mode 100644 index 0000000..1693e38 --- /dev/null +++ b/frontend/views/dashboard/dist/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sourceRoot":"","sources":["../ts/main.ts"],"names":[],"mappings":";;;AAAA,qDAAsC;AACtC,qCAAoC;AACpC,iDAAgD;AAChD,mCAAuC;AACvC,mEAAiE;AACjE,6CAA4C;AAC5C,6CAA4C;AAC5C,qDAAmD;AAEnD,IAAM,MAAM,GAAG,IAAA,qBAAE,EAAC,GAAG,CAAC,CAAC;AACvB;IAYC;QAXA,WAAM,GAAG,MAAM,CAAC;QAEhB,YAAO,GAAG,IAAI,iBAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,kBAAa,GAAG,IAAI,6BAAa,CAAC,IAAI,CAAC,CAAC;QAExC,SAAI,GAAG,IAAI,yBAAW,CAAC,IAAI,CAAC,CAAC;QAC7B,gBAAW,GAAG,IAAI,yBAAW,CAAC,IAAI,CAAC,CAAC;QAEpC,0BAAqB,GAAG,IAAI,8CAAqB,CAAC,IAAI,CAAC,CAAC;QACxD,yBAAoB,GAAG,IAAI,gCAAc,CAAC,IAAI,CAAC,CAAC;QAG/C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,MAAc,CAAC,EAAE,GAAG,IAAI,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QACnC,CAAC;IACF,CAAC;IACF,WAAC;AAAD,CAAC,AAlBD,IAkBC;AAlBY,oBAAI;AAoBjB,sBAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;AAC1E,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE;IACpB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,sBAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACxC,CAAC,CAAC,CAAC;AAEH,IAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/menubar.js b/frontend/views/dashboard/dist/menubar.js new file mode 100644 index 0000000..58fd590 --- /dev/null +++ b/frontend/views/dashboard/dist/menubar.js @@ -0,0 +1,171 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MenuBar = void 0; +var morphux_1 = require("morphux"); +var Component_MenuBar_1 = require("morphux/dist/Components/MenuBar/Component.MenuBar"); +var MenuBar = /** @class */ (function () { + function MenuBar(main) { + var _this = this; + this.container = document.querySelector('.ntsh_menubar'); + this._Main = main; + this.build(); + setTimeout(function () { + if ((localStorage === null || localStorage === void 0 ? void 0 : localStorage.getItem('serviceMode')) === 'true') + _this.toggleServiceMode(true, true); + }, 10); + } + MenuBar.prototype.build = function () { + var _this = this; + this.menubar = new Component_MenuBar_1.ComponentMenuBar({ + left: [ + { + type: 'image', + url: '/img/morphix_logo_white.png', + }, + { + type: 'normal', + text: 'Dashboard', + materialIcon: 'dashboard', + uniqueIdentifier: 'dashboard', + selected: true, + click: function () { return _this._Main.TabController.showTab('dashboard'); }, + }, + { + type: 'normal', + text: 'Calibration', + uniqueIdentifier: 'calibration', + materialIcon: 'crop_free', + click: function () { + return _this._Main.TabController.showTab('calibration'); + }, + }, + { + type: 'normal', + text: 'Unity Logs', + uniqueIdentifier: 'unitylogs', + materialIcon: 'deployed_code', + click: function () { return _this._Main.TabController.showTab('unitylogs'); }, + }, + { + type: 'normal', + text: 'Camera Logs', + uniqueIdentifier: 'cameralogs', + materialIcon: 'photo_camera', + click: function () { return _this._Main.TabController.showTab('cameralogs'); }, + }, + ], + right: [ + { + type: 'normal', + text: document.body.classList.contains('ntsh_service') + ? 'Exit Service' + : 'Service Mode', + uniqueIdentifier: 'serviceMode', + materialIcon: document.body.classList.contains('ntsh_service') + ? 'logout' + : 'engineering', + click: function () { return __awaiter(_this, void 0, void 0, function () { + var mobileMenu; + return __generator(this, function (_a) { + mobileMenu = document.querySelector('.mux_mobilemenu'); + mobileMenu === null || mobileMenu === void 0 ? void 0 : mobileMenu.click(); + this.toggleServiceMode(); + return [2 /*return*/]; + }); + }); }, + }, + ], + }); + this.container.innerHTML = ''; + this.container.appendChild(this.menubar.container); + }; + MenuBar.prototype.toggleServiceMode = function (mode, skipPin) { + return __awaiter(this, void 0, void 0, function () { + var newMode, servicePin; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + newMode = mode !== null && mode !== void 0 ? mode : !document.body.classList.contains('ntsh_service'); + if (!newMode) return [3 /*break*/, 3]; + if (!(skipPin !== true)) return [3 /*break*/, 2]; + return [4 /*yield*/, morphux_1.MorphFeature.Prompt({ + title: 'Service Mode', + message: 'Enter the service PIN:', + type: 'number', + canBeEmpty: false, + placeholder: '****', + })]; + case 1: + servicePin = _a.sent(); + if (servicePin !== '4252') { + morphux_1.MorphFeature.Alert({ + title: 'Error', + message: 'Incorrect PIN provided.', + }); + return [2 /*return*/, false]; + } + _a.label = 2; + case 2: + document.body.classList.add('ntsh_service'); + localStorage.setItem('serviceMode', 'true'); + morphux_1.MorphFeature.Notification({ + level: 'success', + message: 'Service mode activated.', + }); + return [3 /*break*/, 4]; + case 3: + document.body.classList.remove('ntsh_service'); + this._Main.TabController.showTab('dashboard'); + localStorage.setItem('serviceMode', 'false'); + morphux_1.MorphFeature.Notification({ + level: 'success', + message: 'Service mode deactivated.', + }); + _a.label = 4; + case 4: + this.build(); + return [2 /*return*/, true]; + } + }); + }); + }; + return MenuBar; +}()); +exports.MenuBar = MenuBar; +//# sourceMappingURL=menuBar.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/menubar.js.map b/frontend/views/dashboard/dist/menubar.js.map new file mode 100644 index 0000000..b437e11 --- /dev/null +++ b/frontend/views/dashboard/dist/menubar.js.map @@ -0,0 +1 @@ +{"version":3,"file":"menuBar.js","sourceRoot":"","sources":["../ts/menuBar.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/mmWave.js b/frontend/views/dashboard/dist/mmWave.js new file mode 100644 index 0000000..2138245 --- /dev/null +++ b/frontend/views/dashboard/dist/mmWave.js @@ -0,0 +1,166 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.mmWave = void 0; +var morphux_1 = require("morphux"); +var MAPPING_CORNER_COLOR = '#f00'; +var MAPPING_LINE_COLOR = '#9c0000ff'; +var mmWave = /** @class */ (function () { + function mmWave(Main) { + this.container = document.querySelector('.ntsh_mmwave-container'); + this.nodes = this.container.querySelector('.ntsh_mmwave-nodes'); + this.lines = this.container.querySelector('.ntsh_mmwave-lines'); + this.linesContext = this.lines.getContext('2d'); + this._Main = Main; + this.registerListeners(); + } + mmWave.prototype.registerListeners = function () { + var _this = this; + console.log('Registering mmWave listeners'); + this._Main.socket.on('mmwaveROI', function (roi) { + _this.roi = roi; + _this.updateROI(); + }); + this._Main.socket.on('mmwaveMapping', function (mapping) { + _this.mapping = mapping; + _this.setMappingCorners(); + }); + // this._Main.socket.on('mmwaveTracks', (tracks: Track[]) => { + // this.updateTracks(tracks); + // }); + this._Main.socket.on('mmwavePoints', function (mappedPoints) { + _this.updateTracks(mappedPoints); + }); + this.container.onclick = function (e) { + var rect = _this.container.getBoundingClientRect(); + var scaleX = _this.container.clientWidth / rect.width; + var scaleY = _this.container.clientHeight / rect.height; + var x = (e.clientX - rect.left) * scaleX; + var y = (e.clientY - rect.top) * scaleY; + var xPercentage = (x / _this.container.clientWidth) * 100; + var yPercentage = (y / _this.container.clientHeight) * 100; + var roiPos = _this.toROI(xPercentage, yPercentage); + console.log(roiPos); + }; + window.addEventListener('resize', function () { return _this.scale(); }); + }; + mmWave.prototype.updateTracks = function (mappedPoints) { + var _this = this; + if (this.roi == null) + return; + mappedPoints.forEach(function (_a) { + var track = _a.track, mapped = _a.mapped; + var trackPoint = _this.nodes.querySelector(".ntsh_mmwave-track[trackid=\"".concat(track.trackId, "\"]")); + var trackLabel = trackPoint === null || trackPoint === void 0 ? void 0 : trackPoint.querySelector('.ntsh_mmwave-label'); + if (trackPoint == null) { + trackPoint = (0, morphux_1.ce)('div', 'ntsh_mmwave-track', { + trackid: track.trackId, + }); + trackPoint.appendChild((0, morphux_1.ce)('div', 'ntsh_mmwave-track-cross')); + trackPoint.appendChild((0, morphux_1.ce)('div', 'ntsh_mmwave-track-cross')); + trackLabel = (0, morphux_1.ce)('div', 'ntsh_mmwave-label'); + trackPoint.appendChild(trackLabel); + _this.nodes.appendChild(trackPoint); + trackPoint.animate({ + opacity: [0, 1], + }, { duration: 200 }); + } + var _b = _this.toPercentage(track.x, track.y), xPercentage = _b.xPercentage, yPercentage = _b.yPercentage; + trackPoint.style.left = "".concat(xPercentage, "%"); + trackPoint.style.top = "".concat(yPercentage, "%"); + if (mapped == null) + return trackPoint.classList.add('ntsh_mmwave-track-outside'); + trackPoint.classList.remove('ntsh_mmwave-track-outside'); + trackLabel.innerHTML = ''; + trackLabel.appendChild((0, morphux_1.ce)('span', 'ntsh_mmwave-label-id', null, track.trackId.toString())); + trackLabel.appendChild((0, morphux_1.ce)('span', null, null, "".concat(Math.round(mapped.x), "%, ").concat(Math.round(mapped.y), "%"))); + }); + var trackIds = mappedPoints.map(function (t) { return t.track.trackId; }); + this.nodes + .querySelectorAll('.ntsh_mmwave-track') + .forEach(function (trackPoint) { + var trackId = parseInt(trackPoint.getAttribute('trackid')); + if (trackIds.includes(trackId)) + return; + trackPoint.animate({ + opacity: 0, + }, { duration: 200 }).onfinish = function () { + trackPoint.remove(); + }; + }); + }; + mmWave.prototype.updateROI = function () { + if (this.roi == null) + return; + var xDif = Math.abs(this.roi.x[1] - this.roi.x[0]); + var yDif = Math.abs(this.roi.y[1] - this.roi.y[0]); + var height = (1920 / xDif) * yDif; + this.container.style.minWidth = "1920px"; + this.container.style.minHeight = "".concat(height, "px"); + this.lines.height = height; + this.lines.width = 1920; + this.scale(); + }; + mmWave.prototype.setMappingCorners = function () { + if (this.mapping == null) + return; + this.nodes + .querySelectorAll('.ntsh_mmwave-corner') + .forEach(function (el) { return el.remove(); }); + var tl = this.addCorner(this.mapping.topLeft.x, this.mapping.topLeft.y, 'tl'); + var tr = this.addCorner(this.mapping.topRight.x, this.mapping.topRight.y, 'tr'); + var bl = this.addCorner(this.mapping.bottomLeft.x, this.mapping.bottomLeft.y, 'bl'); + var br = this.addCorner(this.mapping.bottomRight.x, this.mapping.bottomRight.y, 'br'); + this.linesContext.clearRect(0, 0, this.lines.width, this.lines.height); + this.linesContext.strokeStyle = MAPPING_LINE_COLOR; + this.linesContext.lineWidth = 2; + this.linesContext.beginPath(); + this.linesContext.moveTo((tl.xPercentage / 100) * this.lines.width, (tl.yPercentage / 100) * this.lines.height); + this.linesContext.lineTo((tr.xPercentage / 100) * this.lines.width, (tr.yPercentage / 100) * this.lines.height); + this.linesContext.lineTo((br.xPercentage / 100) * this.lines.width, (br.yPercentage / 100) * this.lines.height); + this.linesContext.lineTo((bl.xPercentage / 100) * this.lines.width, (bl.yPercentage / 100) * this.lines.height); + this.linesContext.closePath(); + this.linesContext.stroke(); + }; + mmWave.prototype.addCorner = function (x, y, corner) { + var cornerPoint = (0, morphux_1.ce)('div', [ + 'ntsh_mmwave-corner', + "ntsh_mmwave-corner-".concat(corner), + ]); + cornerPoint.style.setProperty('--sn-mmwave-corner-color', MAPPING_CORNER_COLOR); + cornerPoint.appendChild((0, morphux_1.ce)('div', 'ntsh_mmwave-corner-cross')); + cornerPoint.appendChild((0, morphux_1.ce)('div', 'ntsh_mmwave-corner-cross')); + var position = this.toPercentage(x, y); + cornerPoint.style.left = "".concat(position.xPercentage, "%"); + cornerPoint.style.top = "".concat(position.yPercentage, "%"); + cornerPoint.appendChild((0, morphux_1.ce)('div', 'ntsh_mmwave-label', null, "".concat(x, ", ").concat(y))); + this.nodes.appendChild(cornerPoint); + return position; + }; + mmWave.prototype.toPercentage = function (x, y) { + var xPercentage = ((x - this.roi.x[0]) / (this.roi.x[1] - this.roi.x[0])) * 100; + var yPercentage = ((y - this.roi.y[0]) / (this.roi.y[1] - this.roi.y[0])) * 100; + return { xPercentage: xPercentage, yPercentage: yPercentage }; + }; + mmWave.prototype.toROI = function (xPercentage, yPercentage) { + var x = this.roi.x[0] + + (xPercentage / 100) * (this.roi.x[1] - this.roi.x[0]); + var y = this.roi.y[0] + + (yPercentage / 100) * (this.roi.y[1] - this.roi.y[0]); + return { x: x, y: y }; + }; + mmWave.prototype.scale = function () { + var elementWidth = this.container.clientWidth; + var elementHeight = this.container.clientHeight; + var parentWidth = this.container.parentElement.clientWidth; + var parentHeight = this.container.parentElement.clientHeight; + var ratioWidth = parentWidth / elementWidth; + var ratioHeight = parentHeight / elementHeight; + var ratio = elementHeight * ratioWidth > parentHeight + ? ratioHeight + : ratioWidth; + this.container.style.transform = "scale(".concat(ratio, ")"); + }; + return mmWave; +}()); +exports.mmWave = mmWave; +//# sourceMappingURL=mmWave.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/mmWave.js.map b/frontend/views/dashboard/dist/mmWave.js.map new file mode 100644 index 0000000..42825e5 --- /dev/null +++ b/frontend/views/dashboard/dist/mmWave.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mmWave.js","sourceRoot":"","sources":["../ts/mmWave.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/preview.js b/frontend/views/dashboard/dist/preview.js new file mode 100644 index 0000000..6d934c5 --- /dev/null +++ b/frontend/views/dashboard/dist/preview.js @@ -0,0 +1,38 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Preview = void 0; +var morphux_1 = require("morphux"); +var Preview = /** @class */ (function () { + function Preview(Main) { + this.container = document.querySelector(".ntsh_tab[tabid=\"preview\"]"); + this._Main = Main; + this.registerTabListener(); + } + Preview.prototype.createPreviewFrame = function () { + var container = (0, morphux_1.ce)('div', 'ntsh_preview'); + var urlParams = new URLSearchParams(window.location.search); + var transform = urlParams.has('transform') + ? "?transform=".concat(urlParams.get('transform')) + : ''; + var frame = (0, morphux_1.ce)('iframe', 'ntsh_preview-frame', { + src: "http://".concat(window.location.hostname, ":84").concat(transform), + }); + container.appendChild(frame); + this.container.appendChild(container); + }; + Preview.prototype.removePreviewFrame = function () { + this.container.innerHTML = ''; + }; + Preview.prototype.registerTabListener = function () { + var _this = this; + this._Main.TabController.registerListener('preview', function (visible) { + if (visible) + _this.createPreviewFrame(); + else + _this.removePreviewFrame(); + }); + }; + return Preview; +}()); +exports.Preview = Preview; +//# sourceMappingURL=preview.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/preview.js.map b/frontend/views/dashboard/dist/preview.js.map new file mode 100644 index 0000000..2b54ee0 --- /dev/null +++ b/frontend/views/dashboard/dist/preview.js.map @@ -0,0 +1 @@ +{"version":3,"file":"preview.js","sourceRoot":"","sources":["../ts/preview.ts"],"names":[],"mappings":";;;AAAA,mCAA6B;AAG7B;IAOC,iBAAY,IAAU;QAJtB,cAAS,GAAmB,QAAQ,CAAC,aAAa,CACjD,8BAA4B,CAC5B,CAAC;QAGD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC5B,CAAC;IAED,oCAAkB,GAAlB;QACC,IAAI,SAAS,GAAG,IAAA,YAAE,EAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAE1C,IAAI,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE5D,IAAI,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;YACzC,CAAC,CAAC,qBAAc,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAE;YAC5C,CAAC,CAAC,EAAE,CAAC;QAEN,IAAI,KAAK,GAAG,IAAA,YAAE,EAAC,QAAQ,EAAE,oBAAoB,EAAE;YAC9C,GAAG,EAAE,iBAAU,MAAM,CAAC,QAAQ,CAAC,QAAQ,gBAAM,SAAS,CAAE;SACxD,CAAC,CAAC;QACH,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE7B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,oCAAkB,GAAlB;QACC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;IAC/B,CAAC;IAEO,qCAAmB,GAA3B;QAAA,iBAKC;QAJA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAC,OAAO;YAC5D,IAAI,OAAO;gBAAE,KAAI,CAAC,kBAAkB,EAAE,CAAC;;gBAClC,KAAI,CAAC,kBAAkB,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;IACJ,CAAC;IACF,cAAC;AAAD,CAAC,AAxCD,IAwCC;AAxCY,0BAAO"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/projection.js b/frontend/views/dashboard/dist/projection.js new file mode 100644 index 0000000..5e63281 --- /dev/null +++ b/frontend/views/dashboard/dist/projection.js @@ -0,0 +1,34 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Projection = void 0; +var morphux_1 = require("morphux"); +var Projection = /** @class */ (function () { + function Projection(Main) { + this.container = document.querySelector(".ntsh_tab[tabid=\"projection\"]"); + this._Main = Main; + this.registerTabListener(); + } + Projection.prototype.createPreviewFrame = function () { + var container = (0, morphux_1.ce)('div', 'ntsh_projection'); + var frame = (0, morphux_1.ce)('iframe', 'ntsh_projection-frame', { + src: "".concat(window.location.origin, "/visualization").concat(window.location.search), + }); + container.appendChild(frame); + this.container.appendChild(container); + }; + Projection.prototype.removePreviewFrame = function () { + this.container.innerHTML = ''; + }; + Projection.prototype.registerTabListener = function () { + var _this = this; + this._Main.TabController.registerListener('projection', function (visible) { + if (visible) + _this.createPreviewFrame(); + else + _this.removePreviewFrame(); + }); + }; + return Projection; +}()); +exports.Projection = Projection; +//# sourceMappingURL=projection.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/projection.js.map b/frontend/views/dashboard/dist/projection.js.map new file mode 100644 index 0000000..4cfc637 --- /dev/null +++ b/frontend/views/dashboard/dist/projection.js.map @@ -0,0 +1 @@ +{"version":3,"file":"projection.js","sourceRoot":"","sources":["../ts/projection.ts"],"names":[],"mappings":";;;AAAA,mCAA6B;AAG7B;IAOC,oBAAY,IAAU;QAJtB,cAAS,GAAmB,QAAQ,CAAC,aAAa,CACjD,iCAA+B,CAC/B,CAAC;QAGD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC5B,CAAC;IAED,uCAAkB,GAAlB;QACC,IAAI,SAAS,GAAG,IAAA,YAAE,EAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAE7C,IAAI,KAAK,GAAG,IAAA,YAAE,EAAC,QAAQ,EAAE,uBAAuB,EAAE;YACjD,GAAG,EAAE,UAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,2BAAiB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAE;SACvE,CAAC,CAAC;QACH,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE7B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAED,uCAAkB,GAAlB;QACC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;IAC/B,CAAC;IAEO,wCAAmB,GAA3B;QAAA,iBAKC;QAJA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,YAAY,EAAE,UAAC,OAAO;YAC/D,IAAI,OAAO;gBAAE,KAAI,CAAC,kBAAkB,EAAE,CAAC;;gBAClC,KAAI,CAAC,kBAAkB,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;IACJ,CAAC;IACF,iBAAC;AAAD,CAAC,AAlCD,IAkCC;AAlCY,gCAAU"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/tabController.js b/frontend/views/dashboard/dist/tabController.js new file mode 100644 index 0000000..ff5c14d --- /dev/null +++ b/frontend/views/dashboard/dist/tabController.js @@ -0,0 +1,120 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TabController = void 0; +var morphux_1 = require("morphux"); +var TabController = /** @class */ (function () { + function TabController(main) { + this.container = document.querySelector('.ntsh_tabs'); + this.tabListeners = new Map(); + this._Main = main; + this.registerNavigationListener(); + } + TabController.prototype.registerListener = function (tabId, callback) { + if (this.tabListeners.has(tabId)) + throw new Error("Listener for tab id ".concat(tabId, " has already been registered!")); + this.tabListeners.set(tabId, callback); + callback(this.currentTabId == tabId); + }; + TabController.prototype.showTab = function (tabId) { + return __awaiter(this, void 0, void 0, function () { + var confirmed, succeed, tabName; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + if (this.currentTabId == tabId) + return [2 /*return*/]; + if (!(tabId !== 'dashboard' && + !document.body.classList.contains('ntsh_service'))) return [3 /*break*/, 3]; + return [4 /*yield*/, morphux_1.MorphFeature.Confirm({ + title: 'Service Mode Required', + message: "You need to be in service mode to access tab ".concat(tabId, ", switch to Service Mode now?"), + })]; + case 1: + confirmed = _a.sent(); + if (!confirmed) + return [2 /*return*/, this.showTab('dashboard')]; + return [4 /*yield*/, this._Main.MenuBar.toggleServiceMode(true)]; + case 2: + succeed = _a.sent(); + if (!succeed) + return [2 /*return*/, this.showTab('dashboard')]; + _a.label = 3; + case 3: + this._Main.MenuBar.menubar.setSelected(tabId); + if (this.tabListeners.has(this.currentTabId)) + this.tabListeners.get(this.currentTabId)(false); + if (this.tabListeners.has(tabId)) + this.tabListeners.get(tabId)(true); + this.currentTabId = tabId; + this.container + .querySelectorAll('.ntsh_tab') + .forEach(function (tab) { return tab.classList.remove('ntsh_tab-visible'); }); + this.container + .querySelector(".ntsh_tab[tabid=\"".concat(tabId, "\"]")) + .classList.add('ntsh_tab-visible'); + window.history.pushState({ tab: tabId }, '', "/".concat(tabId).concat(window.location.search)); + tabName = { + dashboard: 'Dashboard', + calibration: 'Calibration', + cameralogs: 'Camera Logs', + unitylogs: 'Unity Logs', + }[tabId]; + document.title = "NTSH Control - ".concat(tabName); + return [2 /*return*/]; + } + }); + }); + }; + TabController.prototype.registerNavigationListener = function () { + var _this = this; + window.addEventListener('popstate', function (event) { + var state = event.state; + if (state && state.tab) + _this.showTab(state.tab); + }); + var startTab = window.location.pathname + .replace('/', '') + .split('/') + .shift(); + this.showTab(startTab.length > 0 ? startTab : 'dashboard'); + }; + return TabController; +}()); +exports.TabController = TabController; +//# sourceMappingURL=tabController.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/tabController.js.map b/frontend/views/dashboard/dist/tabController.js.map new file mode 100644 index 0000000..2ddcf37 --- /dev/null +++ b/frontend/views/dashboard/dist/tabController.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tabController.js","sourceRoot":"","sources":["../ts/tabController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAuC;AAIvC;IAOC,uBAAY,IAAU;QAJtB,cAAS,GAAmB,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAUzD,iBAAY,GAA0C,IAAI,GAAG,EAAE,CAAC;QALvE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,0BAA0B,EAAE,CAAC;IACnC,CAAC;IAGD,wCAAgB,GAAhB,UAAiB,KAAW,EAAE,QAAoC;QACjE,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;YAC/B,MAAM,IAAI,KAAK,CACd,8BAAuB,KAAK,kCAA+B,CAC3D,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvC,QAAQ,CAAC,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,CAAC;IACtC,CAAC;IAEK,+BAAO,GAAb,UAAc,KAAW;;;;;;wBACxB,IAAI,IAAI,CAAC,YAAY,IAAI,KAAK;4BAAE,sBAAO;6BAGtC,CAAA,KAAK,KAAK,WAAW;4BACrB,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA,EADjD,wBACiD;wBAE/B,qBAAM,sBAAY,CAAC,OAAO,CAAC;gCAC5C,KAAK,EAAE,uBAAuB;gCAC9B,OAAO,EAAE,uDAAgD,KAAK,kCAA+B;6BAC7F,CAAC,EAAA;;wBAHI,SAAS,GAAG,SAGhB;wBACF,IAAI,CAAC,SAAS;4BAAE,sBAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC;wBAEjC,qBAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAA;;wBAA1D,OAAO,GAAG,SAAgD;wBAChE,IAAI,CAAC,OAAO;4BAAE,sBAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAC;;;wBAGhD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;wBAE9C,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;4BAC3C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;wBACjD,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;4BAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;wBACrE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;wBAE1B,IAAI,CAAC,SAAS;6BACZ,gBAAgB,CAAC,WAAW,CAAC;6BAC7B,OAAO,CAAC,UAAC,GAAG,IAAK,OAAA,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAxC,CAAwC,CAAC,CAAC;wBAE7D,IAAI,CAAC,SAAS;6BACZ,aAAa,CAAC,4BAAoB,KAAK,QAAI,CAAC;6BAC5C,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;wBAEpC,MAAM,CAAC,OAAO,CAAC,SAAS,CACvB,EAAE,GAAG,EAAE,KAAK,EAAE,EACd,EAAE,EACF,WAAI,KAAK,SAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAE,CACpC,CAAC;wBAEE,OAAO,GAAG;4BACb,SAAS,EAAE,WAAW;4BACtB,WAAW,EAAE,aAAa;4BAC1B,UAAU,EAAE,aAAa;4BACzB,SAAS,EAAE,YAAY;yBACvB,CAAC,KAAK,CAAC,CAAC;wBACT,QAAQ,CAAC,KAAK,GAAG,yBAAkB,OAAO,CAAE,CAAC;;;;;KAC7C;IAEO,kDAA0B,GAAlC;QAAA,iBAWC;QAVA,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAC,KAAK;YACzC,IAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAC1B,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG;gBAAE,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ;aACrC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;aAChB,KAAK,CAAC,GAAG,CAAC;aACV,KAAK,EAAU,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC5D,CAAC;IACF,oBAAC;AAAD,CAAC,AAnFD,IAmFC;AAnFY,sCAAa"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/testing.js b/frontend/views/dashboard/dist/testing.js new file mode 100644 index 0000000..8122a50 --- /dev/null +++ b/frontend/views/dashboard/dist/testing.js @@ -0,0 +1,198 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function () { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Testing = void 0; +var morphux_1 = require("morphux"); +var Testing = /** @class */ (function () { + function Testing(Main) { + this.container = document.querySelector('.ntsh_testing'); + this.alphaContainer = this.container.querySelector('.ntsh_testing-ledalpha'); + this.weatherResetButton = this.container.querySelector('.ntsh_testing-weather-reset'); + this.weather0Button = this.container.querySelector('.ntsh_testing-weather-0'); + this.weather5Button = this.container.querySelector('.ntsh_testing-weather-5'); + this.weather10Button = this.container.querySelector('.ntsh_testing-weather-10'); + this.weather20Button = this.container.querySelector('.ntsh_testing-weather-20'); + this.weather50Button = this.container.querySelector('.ntsh_testing-weather-50'); + this.resetAllTracksButton = this.container.querySelector('.ntsh_testing-tracks-reset'); + this.cloudAnimationsSimoultaneousContainer = this.container.querySelector('.ntsh_testing-cloud-animations-simoultaneous'); + this.cloudAnimationsStandaloneContainer = this.container.querySelector('.ntsh_testing-cloud-animations-standalone'); + this._Main = Main; + this.registerListeners(); + } + Testing.prototype.registerListeners = function () { + var _this = this; + Array.from({ length: 21 }, function (_, i) { return i; }).forEach(function (i) { + var button = (0, morphux_1.ce)('div', ['mux_button', 'mux_normal', 'mux_text'], null, "".concat(i * 5, "%")); + // if (i == 20) button.innerText = '100%'; + _this.alphaContainer.appendChild(button); + button.onclick = function () { + return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.fetch("/dev/alpha/".concat(i * 0.05))]; + case 1: + _a.sent(); + morphux_1.MorphFeature.Notification({ + level: 'success', + message: "LED alpha set to ".concat(i * 5, "%!"), + }); + return [2 /*return*/]; + } + }); + }); + }; + }); + this.weatherResetButton.onclick = function () { return _this.setWeather('reset'); }; + this.weather0Button.onclick = function () { return _this.setWeather(0); }; + this.weather5Button.onclick = function () { return _this.setWeather(5); }; + this.weather10Button.onclick = function () { return _this.setWeather(10); }; + this.weather20Button.onclick = function () { return _this.setWeather(20); }; + this.weather50Button.onclick = function () { return _this.setWeather(50); }; + [ + 'Rain', + 'Blink', + 'Breath', + 'Fill', + 'Rainbow', + 'Wave', + 'Pulse', + 'Ambient', + 'Flow', + 'Thunder', + 'Swipe Left', + 'Swipe Right', + 'Swipe Down', + 'Swipe Up', + 'Sphere Pulse', + ].forEach(function (effect) { + var simoultaneous = (0, morphux_1.ce)('div', ['mux_button', 'mux_normal', 'mux_text'], null, effect); + var standalone = simoultaneous.cloneNode(true); + _this.cloudAnimationsSimoultaneousContainer.appendChild(simoultaneous); + _this.cloudAnimationsStandaloneContainer.appendChild(standalone); + simoultaneous.onclick = function () { + return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.fetch("/dev/animation/cloud/simoultaneous/".concat(effect + .replace(/ /g, '') + .toLowerCase()))]; + case 1: + _a.sent(); + morphux_1.MorphFeature.Notification({ + level: 'success', + message: "Cloud animation set to ".concat(effect, " (simoultaneous)!"), + }); + return [2 /*return*/]; + } + }); + }); + }; + standalone.onclick = function () { + return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.fetch("/dev/animation/cloud/standalone/".concat(effect + .replace(/ /g, '') + .toLowerCase()))]; + case 1: + _a.sent(); + morphux_1.MorphFeature.Notification({ + level: 'success', + message: "Cloud animation set to ".concat(effect, " (standalone)!"), + }); + return [2 /*return*/]; + } + }); + }); + }; + }); + this.resetAllTracksButton.onclick = function () { + return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.fetch('/dev/resetTracks')]; + case 1: + _a.sent(); + morphux_1.MorphFeature.Notification({ + level: 'success', + message: "All tracks have been reset!", + }); + return [2 /*return*/]; + } + }); + }); + }; + }; + Testing.prototype.setWeather = function (rainAmount) { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this.fetch("/dev/weather/".concat(rainAmount))]; + case 1: + _a.sent(); + morphux_1.MorphFeature.Notification({ + level: 'success', + message: rainAmount == 'reset' + ? 'Returned to actual weather!' + : "Weather set to ".concat(rainAmount, "!"), + }); + return [2 /*return*/]; + } + }); + }); + }; + Testing.prototype.fetch = function (address) { + return __awaiter(this, void 0, void 0, function () { + var request; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + morphux_1.MorphFeature.Loader({ active: true }); + return [4 /*yield*/, fetch(address)]; + case 1: + request = _a.sent(); + morphux_1.MorphFeature.Loader({ active: false }); + return [2 /*return*/]; + } + }); + }); + }; + return Testing; +}()); +exports.Testing = Testing; +//# sourceMappingURL=testing.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/testing.js.map b/frontend/views/dashboard/dist/testing.js.map new file mode 100644 index 0000000..4800e39 --- /dev/null +++ b/frontend/views/dashboard/dist/testing.js.map @@ -0,0 +1 @@ +{"version":3,"file":"testing.js","sourceRoot":"","sources":["../ts/testing.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/dashboard/dist/utils.js b/frontend/views/dashboard/dist/utils.js new file mode 100644 index 0000000..e5c87da --- /dev/null +++ b/frontend/views/dashboard/dist/utils.js @@ -0,0 +1,62 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createProgress = exports.setProgressState = exports.setStatusState = exports.lerp = void 0; +exports.capitalizeFirstLetter = capitalizeFirstLetter; +exports.formatUptime = formatUptime; +exports.delay = delay; +var morphux_1 = require("morphux"); +/** + * A linear interpolation helper function. + * @param a The start value. + * @param b The end value. + * @param t The interpolation factor (0 to 1). + * @returns The interpolated value. + */ +var lerp = function (a, b, t) { + return a + (b - a) * t; +}; +exports.lerp = lerp; +var setStatusState = function (statusElement, state) { + statusElement.classList.remove('ntsh_status-green', 'ntsh_status-yellow', 'ntsh_status-red', 'ntsh_status-gray'); + statusElement.classList.add("ntsh_status-".concat(state)); +}; +exports.setStatusState = setStatusState; +var setProgressState = function (progressElement, percentage) { + var value = progressElement.querySelector('.ntsh_progress-value'); + value.style.width = "".concat(percentage * 100, "%"); + var label = progressElement.querySelector('.ntsh_progress-label'); + label.innerText = "".concat(Math.round(percentage * 100), "%"); +}; +exports.setProgressState = setProgressState; +var createProgress = function (value) { + var progress = (0, morphux_1.ce)('div', 'ntsh_progress'); + progress.appendChild((0, morphux_1.ce)('div', 'ntsh_progress-value')); + progress.appendChild((0, morphux_1.ce)('div', 'ntsh_progress-label')); + (0, exports.setProgressState)(progress, value); + return progress; +}; +exports.createProgress = createProgress; +function capitalizeFirstLetter(string) { + return string.charAt(0).toUpperCase() + string.slice(1); +} +function formatUptime(seconds) { + if (seconds < 0) + return ''; + var days = Math.floor(seconds / 86400); + seconds %= 86400; + var hours = Math.floor(seconds / 3600); + seconds %= 3600; + var minutes = Math.floor(seconds / 60); + seconds = Math.floor(seconds % 60); + var parts = []; + if (days > 0) + parts.push("".concat(days, "d")); + parts.push("".concat(hours.toString().padStart(2, '0'), ":").concat(minutes + .toString() + .padStart(2, '0'), ":").concat(seconds.toString().padStart(2, '0'))); + return parts.join(' '); +} +function delay(duration) { + return new Promise(function (resolve) { return setTimeout(resolve, duration); }); +} +//# sourceMappingURL=utils.js.map \ No newline at end of file diff --git a/frontend/views/dashboard/dist/utils.js.map b/frontend/views/dashboard/dist/utils.js.map new file mode 100644 index 0000000..30906a6 --- /dev/null +++ b/frontend/views/dashboard/dist/utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.js","sourceRoot":"","sources":["../ts/utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/dashboard/index.html b/frontend/views/dashboard/index.html new file mode 100644 index 0000000..820b996 --- /dev/null +++ b/frontend/views/dashboard/index.html @@ -0,0 +1,267 @@ + + + + + + + NTSH Control + + + + + + + + + +
+
+ +
+ +
+
+
+ +
+
Camera Runner
+ + + + + + + + + + + + + + + + + + + + +
+
Connection
+
+
+
+
+
+
+
+
+ Reboot +
+
+
+
Process
+
+
+
+
+
+
+
+
+ Restart Process +
+
+
+
Uptime
+
+ +
+
+
+
+ +
+
Error
+
+
+
+
+ +
+
Unity
+ + + + + + + + + + + + + + + + + + + + + +
+
Process
+
+
+
+
+
+
+
+
+ Restart Process +
+
+
+
Uptime
+
+ +
+
+
+
+
WebSocket
+
+
+
+
+
+
+
+ +
+
Error
+
+
+
+
+ +
+
ZED Stream
+ + + + + + + + + + + + + +
+
Connection
+
+
+
+
+
+
+
+
FPS
+
+ + +
+
+
+
+
+ + +
+
Timeline
+ + + + + + + + + + + + +
+
Watching
+
+
Standing
+
+
Progress
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+
Parameters
+ + + + + +
+
Waiting for Unity... +
+
+
+
+
+ +
+
+
+ + fullscreen + +
+ + +
+ +
+ +
+
+
+ No logs yet... +
+
+
+ +
+
+
+ No logs yet... +
+
+
+
+
+ + + \ No newline at end of file diff --git a/frontend/views/dashboard/package-lock.json b/frontend/views/dashboard/package-lock.json new file mode 100644 index 0000000..2faa03b --- /dev/null +++ b/frontend/views/dashboard/package-lock.json @@ -0,0 +1,942 @@ +{ + "name": "dashboard", + "version": "2025.5.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "license": "ISC", + "dependencies": { + "@rollup/plugin-commonjs": "^25.0.7", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.1.0", + "@types/node": "^20.12.8", + "ansi_up": "^6.0.6", + "material-symbols": "^0.17.4", + "morphux": "file:../../../../MorphUX", + "rollup": "^2.79.1", + "rollup-plugin-terser": "^7.0.2", + "socket.io-client": "^4.8.1" + }, + "devDependencies": { + "@types/sortablejs": "^1.15.8", + "dts-bundle-generator": "^9.5.1" + } + }, + "../../../../MorphUx": { + "name": "morphux", + "version": "2025.9.1", + "extraneous": true, + "license": "ISC", + "dependencies": { + "@egjs/hammerjs": "^2.0.17", + "@rollup/plugin-commonjs": "^25.0.7", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.1.0", + "@types/node": "^20.12.8", + "material-symbols": "^0.17.4", + "rollup": "^2.79.1", + "rollup-plugin-terser": "^7.0.2", + "sortablejs": "^1.2.1" + }, + "devDependencies": { + "@types/sortablejs": "^1.15.8", + "dts-bundle-generator": "^9.5.1" + } + }, + "../../../../MorphUX": { + "name": "morphux", + "version": "2025.9.1", + "license": "ISC", + "dependencies": { + "@egjs/hammerjs": "^2.0.17", + "@rollup/plugin-commonjs": "^25.0.7", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.1.0", + "@types/node": "^20.12.8", + "material-symbols": "^0.17.4", + "rollup": "^2.79.1", + "rollup-plugin-terser": "^7.0.2", + "sortablejs": "^1.2.1" + }, + "devDependencies": { + "@types/sortablejs": "^1.15.8", + "dts-bundle-generator": "^9.5.1" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "25.0.8", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.8.tgz", + "integrity": "sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", + "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" + }, + "node_modules/@types/node": { + "version": "20.19.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.13.tgz", + "integrity": "sha512-yCAeZl7a0DxgNVteXFHt9+uyFbqXGy/ShC4BlcHkoE0AfGXYv/BUiplV72DjMYXHDBXFjhvr6DD1NiRVfB4j8g==", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==" + }, + "node_modules/@types/sortablejs": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.8.tgz", + "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi_up": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/ansi_up/-/ansi_up-6.0.6.tgz", + "integrity": "sha512-yIa1x3Ecf8jWP4UWEunNjqNX6gzE4vg2gGz+xqRGY+TBSucnYp6RRdPV4brmtg6bQ1ljD48mZ5iGSEj7QEpRKA==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dts-bundle-generator": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/dts-bundle-generator/-/dts-bundle-generator-9.5.1.tgz", + "integrity": "sha512-DxpJOb2FNnEyOzMkG11sxO2dmxPjthoVWxfKqWYJ/bI/rT1rvTMktF5EKjAYrRZu6Z6t3NhOUZ0sZ5ZXevOfbA==", + "dev": true, + "dependencies": { + "typescript": ">=5.0.2", + "yargs": "^17.6.0" + }, + "bin": { + "dts-bundle-generator": "dist/bin/dts-bundle-generator.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/engine.io-client": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz", + "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1", + "xmlhttprequest-ssl": "~2.1.1" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/material-symbols": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/material-symbols/-/material-symbols-0.17.4.tgz", + "integrity": "sha512-5zI+rSzAidMJxAIrQCVwnp4rMjFnx8aQg68lfFXtaDeksZzJ7m8eDl16y9bRNxMosuYbLKeDHDbOWHPJJTSLhQ==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/morphux": { + "resolved": "../../../../MorphUX", + "link": true + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rollup": { + "version": "2.79.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/socket.io-client": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", + "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.6.1", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/terser": { + "version": "5.44.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.0.tgz", + "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", + "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + } + } +} diff --git a/frontend/views/dashboard/package.json b/frontend/views/dashboard/package.json new file mode 100644 index 0000000..ef9226c --- /dev/null +++ b/frontend/views/dashboard/package.json @@ -0,0 +1,27 @@ +{ + "scripts": { + "build": "sass scss/index.scss style.css && tsc && npm run bundle", + "watch-ts": "tsc -w", + "watch-scss": "sass scss/index.scss style.css -w", + "watch-rollup": "rollup -c --watch", + "watch-rebuildscss": "rm style.css && npm run watch-scss" + }, + "author": "", + "license": "ISC", + "dependencies": { + "@rollup/plugin-commonjs": "^25.0.7", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.1.0", + "@types/node": "^20.12.8", + "ansi_up": "^6.0.6", + "material-symbols": "^0.17.4", + "morphux": "file:../../../../MorphUX", + "rollup": "^2.79.1", + "rollup-plugin-terser": "^7.0.2", + "socket.io-client": "^4.8.1" + }, + "devDependencies": { + "@types/sortablejs": "^1.15.8", + "dts-bundle-generator": "^9.5.1" + } +} diff --git a/frontend/views/dashboard/rollup.config.js b/frontend/views/dashboard/rollup.config.js new file mode 100644 index 0000000..1fa702c --- /dev/null +++ b/frontend/views/dashboard/rollup.config.js @@ -0,0 +1,19 @@ +import cjs from '@rollup/plugin-commonjs'; +import node from '@rollup/plugin-node-resolve'; +import { terser } from 'rollup-plugin-terser'; +import json from '@rollup/plugin-json'; + +const production = !process.env.ROLLUP_WATCH; + +export default { + input: 'dist/main.js', + output: [ + { file: 'script.js', format: 'iife', sourcemap: true, inlineDynamicImports: true } + ], + plugins: [ + node({ browser: true }), + cjs(), + production && terser(), + json() + ], +}; \ No newline at end of file diff --git a/frontend/views/dashboard/script.js b/frontend/views/dashboard/script.js new file mode 100644 index 0000000..bf81fc5 --- /dev/null +++ b/frontend/views/dashboard/script.js @@ -0,0 +1,15758 @@ +(function (exports) { + 'use strict'; + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function getAugmentedNamespace(n) { + if (n.__esModule) return n; + var f = n.default; + if (typeof f == "function") { + var a = function a () { + if (this instanceof a) { + return Reflect.construct(f, arguments, this.constructor); + } + return f.apply(this, arguments); + }; + a.prototype = f.prototype; + } else a = {}; + Object.defineProperty(a, '__esModule', {value: true}); + Object.keys(n).forEach(function (k) { + var d = Object.getOwnPropertyDescriptor(n, k); + Object.defineProperty(a, k, d.get ? d : { + enumerable: true, + get: function () { + return n[k]; + } + }); + }); + return a; + } + + var main$1 = {}; + + var cjs$3 = {exports: {}}; + + var url$1 = {}; + + var cjs$2 = {}; + + var socket$2 = {}; + + var transports = {}; + + var pollingXhr = {}; + + var polling = {}; + + var transport = {}; + + var cjs$1 = {}; + + var encodePacket_browser = {}; + + var commons = {}; + + Object.defineProperty(commons, "__esModule", { value: true }); + commons.ERROR_PACKET = commons.PACKET_TYPES_REVERSE = commons.PACKET_TYPES = void 0; + const PACKET_TYPES = Object.create(null); // no Map = no polyfill + commons.PACKET_TYPES = PACKET_TYPES; + PACKET_TYPES["open"] = "0"; + PACKET_TYPES["close"] = "1"; + PACKET_TYPES["ping"] = "2"; + PACKET_TYPES["pong"] = "3"; + PACKET_TYPES["message"] = "4"; + PACKET_TYPES["upgrade"] = "5"; + PACKET_TYPES["noop"] = "6"; + const PACKET_TYPES_REVERSE = Object.create(null); + commons.PACKET_TYPES_REVERSE = PACKET_TYPES_REVERSE; + Object.keys(PACKET_TYPES).forEach((key) => { + PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key; + }); + const ERROR_PACKET = { type: "error", data: "parser error" }; + commons.ERROR_PACKET = ERROR_PACKET; + + Object.defineProperty(encodePacket_browser, "__esModule", { value: true }); + encodePacket_browser.encodePacket = void 0; + encodePacket_browser.encodePacketToBinary = encodePacketToBinary; + const commons_js_1$1 = commons; + const withNativeBlob$1 = typeof Blob === "function" || + (typeof Blob !== "undefined" && + Object.prototype.toString.call(Blob) === "[object BlobConstructor]"); + const withNativeArrayBuffer$2 = typeof ArrayBuffer === "function"; + // ArrayBuffer.isView method is not defined in IE10 + const isView$1 = (obj) => { + return typeof ArrayBuffer.isView === "function" + ? ArrayBuffer.isView(obj) + : obj && obj.buffer instanceof ArrayBuffer; + }; + const encodePacket = ({ type, data }, supportsBinary, callback) => { + if (withNativeBlob$1 && data instanceof Blob) { + if (supportsBinary) { + return callback(data); + } + else { + return encodeBlobAsBase64(data, callback); + } + } + else if (withNativeArrayBuffer$2 && + (data instanceof ArrayBuffer || isView$1(data))) { + if (supportsBinary) { + return callback(data); + } + else { + return encodeBlobAsBase64(new Blob([data]), callback); + } + } + // plain string + return callback(commons_js_1$1.PACKET_TYPES[type] + (data || "")); + }; + encodePacket_browser.encodePacket = encodePacket; + const encodeBlobAsBase64 = (data, callback) => { + const fileReader = new FileReader(); + fileReader.onload = function () { + const content = fileReader.result.split(",")[1]; + callback("b" + (content || "")); + }; + return fileReader.readAsDataURL(data); + }; + function toArray$1(data) { + if (data instanceof Uint8Array) { + return data; + } + else if (data instanceof ArrayBuffer) { + return new Uint8Array(data); + } + else { + return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); + } + } + let TEXT_ENCODER; + function encodePacketToBinary(packet, callback) { + if (withNativeBlob$1 && packet.data instanceof Blob) { + return packet.data.arrayBuffer().then(toArray$1).then(callback); + } + else if (withNativeArrayBuffer$2 && + (packet.data instanceof ArrayBuffer || isView$1(packet.data))) { + return callback(toArray$1(packet.data)); + } + encodePacket(packet, false, (encoded) => { + if (!TEXT_ENCODER) { + TEXT_ENCODER = new TextEncoder(); + } + callback(TEXT_ENCODER.encode(encoded)); + }); + } + + var decodePacket_browser = {}; + + var base64Arraybuffer = {}; + + Object.defineProperty(base64Arraybuffer, "__esModule", { value: true }); + base64Arraybuffer.decode = base64Arraybuffer.encode = void 0; + // imported from https://github.com/socketio/base64-arraybuffer + const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + // Use a lookup table to find the index. + const lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256); + for (let i = 0; i < chars.length; i++) { + lookup[chars.charCodeAt(i)] = i; + } + const encode$1 = (arraybuffer) => { + let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = ''; + for (i = 0; i < len; i += 3) { + base64 += chars[bytes[i] >> 2]; + base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)]; + base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)]; + base64 += chars[bytes[i + 2] & 63]; + } + if (len % 3 === 2) { + base64 = base64.substring(0, base64.length - 1) + '='; + } + else if (len % 3 === 1) { + base64 = base64.substring(0, base64.length - 2) + '=='; + } + return base64; + }; + base64Arraybuffer.encode = encode$1; + const decode$1 = (base64) => { + let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4; + if (base64[base64.length - 1] === '=') { + bufferLength--; + if (base64[base64.length - 2] === '=') { + bufferLength--; + } + } + const arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer); + for (i = 0; i < len; i += 4) { + encoded1 = lookup[base64.charCodeAt(i)]; + encoded2 = lookup[base64.charCodeAt(i + 1)]; + encoded3 = lookup[base64.charCodeAt(i + 2)]; + encoded4 = lookup[base64.charCodeAt(i + 3)]; + bytes[p++] = (encoded1 << 2) | (encoded2 >> 4); + bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2); + bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63); + } + return arraybuffer; + }; + base64Arraybuffer.decode = decode$1; + + Object.defineProperty(decodePacket_browser, "__esModule", { value: true }); + decodePacket_browser.decodePacket = void 0; + const commons_js_1 = commons; + const base64_arraybuffer_js_1 = base64Arraybuffer; + const withNativeArrayBuffer$1 = typeof ArrayBuffer === "function"; + const decodePacket = (encodedPacket, binaryType) => { + if (typeof encodedPacket !== "string") { + return { + type: "message", + data: mapBinary(encodedPacket, binaryType), + }; + } + const type = encodedPacket.charAt(0); + if (type === "b") { + return { + type: "message", + data: decodeBase64Packet(encodedPacket.substring(1), binaryType), + }; + } + const packetType = commons_js_1.PACKET_TYPES_REVERSE[type]; + if (!packetType) { + return commons_js_1.ERROR_PACKET; + } + return encodedPacket.length > 1 + ? { + type: commons_js_1.PACKET_TYPES_REVERSE[type], + data: encodedPacket.substring(1), + } + : { + type: commons_js_1.PACKET_TYPES_REVERSE[type], + }; + }; + decodePacket_browser.decodePacket = decodePacket; + const decodeBase64Packet = (data, binaryType) => { + if (withNativeArrayBuffer$1) { + const decoded = (0, base64_arraybuffer_js_1.decode)(data); + return mapBinary(decoded, binaryType); + } + else { + return { base64: true, data }; // fallback for old browsers + } + }; + const mapBinary = (data, binaryType) => { + switch (binaryType) { + case "blob": + if (data instanceof Blob) { + // from WebSocket + binaryType "blob" + return data; + } + else { + // from HTTP long-polling or WebTransport + return new Blob([data]); + } + case "arraybuffer": + default: + if (data instanceof ArrayBuffer) { + // from HTTP long-polling (base64) or WebSocket + binaryType "arraybuffer" + return data; + } + else { + // from WebTransport (Uint8Array) + return data.buffer; + } + } + }; + + (function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.decodePayload = exports.decodePacket = exports.encodePayload = exports.encodePacket = exports.protocol = void 0; + exports.createPacketEncoderStream = createPacketEncoderStream; + exports.createPacketDecoderStream = createPacketDecoderStream; + const encodePacket_js_1 = encodePacket_browser; + Object.defineProperty(exports, "encodePacket", { enumerable: true, get: function () { return encodePacket_js_1.encodePacket; } }); + const decodePacket_js_1 = decodePacket_browser; + Object.defineProperty(exports, "decodePacket", { enumerable: true, get: function () { return decodePacket_js_1.decodePacket; } }); + const commons_js_1 = commons; + const SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text + const encodePayload = (packets, callback) => { + // some packets may be added to the array while encoding, so the initial length must be saved + const length = packets.length; + const encodedPackets = new Array(length); + let count = 0; + packets.forEach((packet, i) => { + // force base64 encoding for binary packets + (0, encodePacket_js_1.encodePacket)(packet, false, (encodedPacket) => { + encodedPackets[i] = encodedPacket; + if (++count === length) { + callback(encodedPackets.join(SEPARATOR)); + } + }); + }); + }; + exports.encodePayload = encodePayload; + const decodePayload = (encodedPayload, binaryType) => { + const encodedPackets = encodedPayload.split(SEPARATOR); + const packets = []; + for (let i = 0; i < encodedPackets.length; i++) { + const decodedPacket = (0, decodePacket_js_1.decodePacket)(encodedPackets[i], binaryType); + packets.push(decodedPacket); + if (decodedPacket.type === "error") { + break; + } + } + return packets; + }; + exports.decodePayload = decodePayload; + function createPacketEncoderStream() { + return new TransformStream({ + transform(packet, controller) { + (0, encodePacket_js_1.encodePacketToBinary)(packet, (encodedPacket) => { + const payloadLength = encodedPacket.length; + let header; + // inspired by the WebSocket format: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#decoding_payload_length + if (payloadLength < 126) { + header = new Uint8Array(1); + new DataView(header.buffer).setUint8(0, payloadLength); + } + else if (payloadLength < 65536) { + header = new Uint8Array(3); + const view = new DataView(header.buffer); + view.setUint8(0, 126); + view.setUint16(1, payloadLength); + } + else { + header = new Uint8Array(9); + const view = new DataView(header.buffer); + view.setUint8(0, 127); + view.setBigUint64(1, BigInt(payloadLength)); + } + // first bit indicates whether the payload is plain text (0) or binary (1) + if (packet.data && typeof packet.data !== "string") { + header[0] |= 0x80; + } + controller.enqueue(header); + controller.enqueue(encodedPacket); + }); + }, + }); + } + let TEXT_DECODER; + function totalLength(chunks) { + return chunks.reduce((acc, chunk) => acc + chunk.length, 0); + } + function concatChunks(chunks, size) { + if (chunks[0].length === size) { + return chunks.shift(); + } + const buffer = new Uint8Array(size); + let j = 0; + for (let i = 0; i < size; i++) { + buffer[i] = chunks[0][j++]; + if (j === chunks[0].length) { + chunks.shift(); + j = 0; + } + } + if (chunks.length && j < chunks[0].length) { + chunks[0] = chunks[0].slice(j); + } + return buffer; + } + function createPacketDecoderStream(maxPayload, binaryType) { + if (!TEXT_DECODER) { + TEXT_DECODER = new TextDecoder(); + } + const chunks = []; + let state = 0 /* State.READ_HEADER */; + let expectedLength = -1; + let isBinary = false; + return new TransformStream({ + transform(chunk, controller) { + chunks.push(chunk); + while (true) { + if (state === 0 /* State.READ_HEADER */) { + if (totalLength(chunks) < 1) { + break; + } + const header = concatChunks(chunks, 1); + isBinary = (header[0] & 0x80) === 0x80; + expectedLength = header[0] & 0x7f; + if (expectedLength < 126) { + state = 3 /* State.READ_PAYLOAD */; + } + else if (expectedLength === 126) { + state = 1 /* State.READ_EXTENDED_LENGTH_16 */; + } + else { + state = 2 /* State.READ_EXTENDED_LENGTH_64 */; + } + } + else if (state === 1 /* State.READ_EXTENDED_LENGTH_16 */) { + if (totalLength(chunks) < 2) { + break; + } + const headerArray = concatChunks(chunks, 2); + expectedLength = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length).getUint16(0); + state = 3 /* State.READ_PAYLOAD */; + } + else if (state === 2 /* State.READ_EXTENDED_LENGTH_64 */) { + if (totalLength(chunks) < 8) { + break; + } + const headerArray = concatChunks(chunks, 8); + const view = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length); + const n = view.getUint32(0); + if (n > Math.pow(2, 53 - 32) - 1) { + // the maximum safe integer in JavaScript is 2^53 - 1 + controller.enqueue(commons_js_1.ERROR_PACKET); + break; + } + expectedLength = n * Math.pow(2, 32) + view.getUint32(4); + state = 3 /* State.READ_PAYLOAD */; + } + else { + if (totalLength(chunks) < expectedLength) { + break; + } + const data = concatChunks(chunks, expectedLength); + controller.enqueue((0, decodePacket_js_1.decodePacket)(isBinary ? data : TEXT_DECODER.decode(data), binaryType)); + state = 0 /* State.READ_HEADER */; + } + if (expectedLength === 0 || expectedLength > maxPayload) { + controller.enqueue(commons_js_1.ERROR_PACKET); + break; + } + } + }, + }); + } + exports.protocol = 4; + } (cjs$1)); + + /** + * Initialize a new `Emitter`. + * + * @api public + */ + + function Emitter(obj) { + if (obj) return mixin(obj); + } + + /** + * Mixin the emitter properties. + * + * @param {Object} obj + * @return {Object} + * @api private + */ + + function mixin(obj) { + for (var key in Emitter.prototype) { + obj[key] = Emitter.prototype[key]; + } + return obj; + } + + /** + * Listen on the given `event` with `fn`. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + Emitter.prototype.on = + Emitter.prototype.addEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + (this._callbacks['$' + event] = this._callbacks['$' + event] || []) + .push(fn); + return this; + }; + + /** + * Adds an `event` listener that will be invoked a single + * time then automatically removed. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + Emitter.prototype.once = function(event, fn){ + function on() { + this.off(event, on); + fn.apply(this, arguments); + } + + on.fn = fn; + this.on(event, on); + return this; + }; + + /** + * Remove the given callback for `event` or all + * registered callbacks. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + + Emitter.prototype.off = + Emitter.prototype.removeListener = + Emitter.prototype.removeAllListeners = + Emitter.prototype.removeEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + + // all + if (0 == arguments.length) { + this._callbacks = {}; + return this; + } + + // specific event + var callbacks = this._callbacks['$' + event]; + if (!callbacks) return this; + + // remove all handlers + if (1 == arguments.length) { + delete this._callbacks['$' + event]; + return this; + } + + // remove specific handler + var cb; + for (var i = 0; i < callbacks.length; i++) { + cb = callbacks[i]; + if (cb === fn || cb.fn === fn) { + callbacks.splice(i, 1); + break; + } + } + + // Remove event specific arrays for event types that no + // one is subscribed for to avoid memory leak. + if (callbacks.length === 0) { + delete this._callbacks['$' + event]; + } + + return this; + }; + + /** + * Emit `event` with the given args. + * + * @param {String} event + * @param {Mixed} ... + * @return {Emitter} + */ + + Emitter.prototype.emit = function(event){ + this._callbacks = this._callbacks || {}; + + var args = new Array(arguments.length - 1) + , callbacks = this._callbacks['$' + event]; + + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + + if (callbacks) { + callbacks = callbacks.slice(0); + for (var i = 0, len = callbacks.length; i < len; ++i) { + callbacks[i].apply(this, args); + } + } + + return this; + }; + + // alias used for reserved events (protected method) + Emitter.prototype.emitReserved = Emitter.prototype.emit; + + /** + * Return array of callbacks for `event`. + * + * @param {String} event + * @return {Array} + * @api public + */ + + Emitter.prototype.listeners = function(event){ + this._callbacks = this._callbacks || {}; + return this._callbacks['$' + event] || []; + }; + + /** + * Check if this emitter has `event` handlers. + * + * @param {String} event + * @return {Boolean} + * @api public + */ + + Emitter.prototype.hasListeners = function(event){ + return !! this.listeners(event).length; + }; + + var esm = /*#__PURE__*/Object.freeze({ + __proto__: null, + Emitter: Emitter + }); + + var require$$5 = /*@__PURE__*/getAugmentedNamespace(esm); + + var util = {}; + + var globals = {}; + + Object.defineProperty(globals, "__esModule", { value: true }); + globals.defaultBinaryType = globals.globalThisShim = globals.nextTick = void 0; + globals.createCookieJar = createCookieJar; + globals.nextTick = (() => { + const isPromiseAvailable = typeof Promise === "function" && typeof Promise.resolve === "function"; + if (isPromiseAvailable) { + return (cb) => Promise.resolve().then(cb); + } + else { + return (cb, setTimeoutFn) => setTimeoutFn(cb, 0); + } + })(); + globals.globalThisShim = (() => { + if (typeof self !== "undefined") { + return self; + } + else if (typeof window !== "undefined") { + return window; + } + else { + return Function("return this")(); + } + })(); + globals.defaultBinaryType = "arraybuffer"; + function createCookieJar() { } + + Object.defineProperty(util, "__esModule", { value: true }); + util.pick = pick; + util.installTimerFunctions = installTimerFunctions; + util.byteLength = byteLength; + util.randomString = randomString; + const globals_node_js_1$4 = globals; + function pick(obj, ...attr) { + return attr.reduce((acc, k) => { + if (obj.hasOwnProperty(k)) { + acc[k] = obj[k]; + } + return acc; + }, {}); + } + // Keep a reference to the real timeout functions so they can be used when overridden + const NATIVE_SET_TIMEOUT = globals_node_js_1$4.globalThisShim.setTimeout; + const NATIVE_CLEAR_TIMEOUT = globals_node_js_1$4.globalThisShim.clearTimeout; + function installTimerFunctions(obj, opts) { + if (opts.useNativeTimers) { + obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globals_node_js_1$4.globalThisShim); + obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globals_node_js_1$4.globalThisShim); + } + else { + obj.setTimeoutFn = globals_node_js_1$4.globalThisShim.setTimeout.bind(globals_node_js_1$4.globalThisShim); + obj.clearTimeoutFn = globals_node_js_1$4.globalThisShim.clearTimeout.bind(globals_node_js_1$4.globalThisShim); + } + } + // base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64) + const BASE64_OVERHEAD = 1.33; + // we could also have used `new Blob([obj]).size`, but it isn't supported in IE9 + function byteLength(obj) { + if (typeof obj === "string") { + return utf8Length(obj); + } + // arraybuffer or blob + return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD); + } + function utf8Length(str) { + let c = 0, length = 0; + for (let i = 0, l = str.length; i < l; i++) { + c = str.charCodeAt(i); + if (c < 0x80) { + length += 1; + } + else if (c < 0x800) { + length += 2; + } + else if (c < 0xd800 || c >= 0xe000) { + length += 3; + } + else { + i++; + length += 4; + } + } + return length; + } + /** + * Generates a random 8-characters string. + */ + function randomString() { + return (Date.now().toString(36).substring(3) + + Math.random().toString(36).substring(2, 5)); + } + + var parseqs = {}; + + // imported from https://github.com/galkn/querystring + /** + * Compiles a querystring + * Returns string representation of the object + * + * @param {Object} + * @api private + */ + Object.defineProperty(parseqs, "__esModule", { value: true }); + parseqs.encode = encode; + parseqs.decode = decode; + function encode(obj) { + let str = ''; + for (let i in obj) { + if (obj.hasOwnProperty(i)) { + if (str.length) + str += '&'; + str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]); + } + } + return str; + } + /** + * Parses a simple querystring into an object + * + * @param {String} qs + * @api private + */ + function decode(qs) { + let qry = {}; + let pairs = qs.split('&'); + for (let i = 0, l = pairs.length; i < l; i++) { + let pair = pairs[i].split('='); + qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); + } + return qry; + } + + var browser = {exports: {}}; + + /** + * Helpers. + */ + + var ms; + var hasRequiredMs; + + function requireMs () { + if (hasRequiredMs) return ms; + hasRequiredMs = 1; + var s = 1000; + var m = s * 60; + var h = m * 60; + var d = h * 24; + var w = d * 7; + var y = d * 365.25; + + /** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + + ms = function (val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isFinite(val)) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); + }; + + /** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + + function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'weeks': + case 'week': + case 'w': + return n * w; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } + } + + /** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; + } + + /** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + + function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + return ms + ' ms'; + } + + /** + * Pluralization helper. + */ + + function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); + } + return ms; + } + + /** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ + + function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = requireMs(); + createDebug.destroy = destroy; + + Object.keys(env).forEach(key => { + createDebug[key] = env[key]; + }); + + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + createDebug.formatters = {}; + + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + function selectColor(namespace) { + let hash = 0; + + for (let i = 0; i < namespace.length; i++) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + createDebug.selectColor = selectColor; + + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + function createDebug(namespace) { + let prevTime; + let enableOverride = null; + let namespacesCache; + let enabledCache; + + function debug(...args) { + // Disabled? + if (!debug.enabled) { + return; + } + + const self = debug; + + // Set `diff` timestamp + const curr = Number(new Date()); + const ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } + + // Apply any `formatters` transformations + let index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return '%'; + } + index++; + const formatter = createDebug.formatters[format]; + if (typeof formatter === 'function') { + const val = args[index]; + match = formatter.call(self, val); + + // Now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // Apply env-specific formatting (colors, etc.) + createDebug.formatArgs.call(self, args); + + const logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.useColors = createDebug.useColors(); + debug.color = createDebug.selectColor(namespace); + debug.extend = extend; + debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release. + + Object.defineProperty(debug, 'enabled', { + enumerable: true, + configurable: false, + get: () => { + if (enableOverride !== null) { + return enableOverride; + } + if (namespacesCache !== createDebug.namespaces) { + namespacesCache = createDebug.namespaces; + enabledCache = createDebug.enabled(namespace); + } + + return enabledCache; + }, + set: v => { + enableOverride = v; + } + }); + + // Env-specific initialization logic for debug instances + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + return debug; + } + + function extend(namespace, delimiter) { + const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + function enable(namespaces) { + createDebug.save(namespaces); + createDebug.namespaces = namespaces; + + createDebug.names = []; + createDebug.skips = []; + + let i; + const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + const len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + } + + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + function disable() { + const namespaces = [ + ...createDebug.names.map(toNamespace), + ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) + ].join(','); + createDebug.enable(''); + return namespaces; + } + + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + let i; + let len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + function toNamespace(regexp) { + return regexp.toString() + .substring(2, regexp.toString().length - 2) + .replace(/\.\*\?$/, '*'); + } + + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + return val; + } + + /** + * XXX DO NOT USE. This is a temporary stub function. + * XXX It WILL be removed in the next major release. + */ + function destroy() { + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + + createDebug.enable(createDebug.load()); + + return createDebug; + } + + var common = setup; + + /* eslint-env browser */ + browser.exports; + + (function (module, exports) { + /** + * This is the web browser implementation of `debug()`. + */ + + exports.formatArgs = formatArgs; + exports.save = save; + exports.load = load; + exports.useColors = useColors; + exports.storage = localstorage(); + exports.destroy = (() => { + let warned = false; + + return () => { + if (!warned) { + warned = true; + console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'); + } + }; + })(); + + /** + * Colors. + */ + + exports.colors = [ + '#0000CC', + '#0000FF', + '#0033CC', + '#0033FF', + '#0066CC', + '#0066FF', + '#0099CC', + '#0099FF', + '#00CC00', + '#00CC33', + '#00CC66', + '#00CC99', + '#00CCCC', + '#00CCFF', + '#3300CC', + '#3300FF', + '#3333CC', + '#3333FF', + '#3366CC', + '#3366FF', + '#3399CC', + '#3399FF', + '#33CC00', + '#33CC33', + '#33CC66', + '#33CC99', + '#33CCCC', + '#33CCFF', + '#6600CC', + '#6600FF', + '#6633CC', + '#6633FF', + '#66CC00', + '#66CC33', + '#9900CC', + '#9900FF', + '#9933CC', + '#9933FF', + '#99CC00', + '#99CC33', + '#CC0000', + '#CC0033', + '#CC0066', + '#CC0099', + '#CC00CC', + '#CC00FF', + '#CC3300', + '#CC3333', + '#CC3366', + '#CC3399', + '#CC33CC', + '#CC33FF', + '#CC6600', + '#CC6633', + '#CC9900', + '#CC9933', + '#CCCC00', + '#CCCC33', + '#FF0000', + '#FF0033', + '#FF0066', + '#FF0099', + '#FF00CC', + '#FF00FF', + '#FF3300', + '#FF3333', + '#FF3366', + '#FF3399', + '#FF33CC', + '#FF33FF', + '#FF6600', + '#FF6633', + '#FF9900', + '#FF9933', + '#FFCC00', + '#FFCC33' + ]; + + /** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + + // eslint-disable-next-line complexity + function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } + + // Internet Explorer and Edge do not support colors. + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } + + let m; + + // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // Is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31) || + // Double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); + } + + /** + * Colorize log arguments if enabled. + * + * @api public + */ + + function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + + this.namespace + + (this.useColors ? ' %c' : ' ') + + args[0] + + (this.useColors ? '%c ' : ' ') + + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + const c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); + + // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + let index = 0; + let lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, match => { + if (match === '%%') { + return; + } + index++; + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); + } + + /** + * Invokes `console.debug()` when available. + * No-op when `console.debug` is not a "function". + * If `console.debug` is not available, falls back + * to `console.log`. + * + * @api public + */ + exports.log = console.debug || console.log || (() => {}); + + /** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + } + + /** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + function load() { + let r; + try { + r = exports.storage.getItem('debug'); + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; + } + + /** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + + function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + } + + module.exports = common(exports); + + const {formatters} = module.exports; + + /** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + + formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } + }; + } (browser, browser.exports)); + + var browserExports = browser.exports; + + var __importDefault$8 = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + }; + Object.defineProperty(transport, "__esModule", { value: true }); + transport.Transport = transport.TransportError = void 0; + const engine_io_parser_1$4 = cjs$1; + const component_emitter_1$4 = require$$5; + const util_js_1$4 = util; + const parseqs_js_1$1 = parseqs; + const debug_1$8 = __importDefault$8(browserExports); // debug() + const debug$8 = (0, debug_1$8.default)("engine.io-client:transport"); // debug() + class TransportError extends Error { + constructor(reason, description, context) { + super(reason); + this.description = description; + this.context = context; + this.type = "TransportError"; + } + } + transport.TransportError = TransportError; + class Transport extends component_emitter_1$4.Emitter { + /** + * Transport abstract constructor. + * + * @param {Object} opts - options + * @protected + */ + constructor(opts) { + super(); + this.writable = false; + (0, util_js_1$4.installTimerFunctions)(this, opts); + this.opts = opts; + this.query = opts.query; + this.socket = opts.socket; + this.supportsBinary = !opts.forceBase64; + } + /** + * Emits an error. + * + * @param {String} reason + * @param description + * @param context - the error context + * @return {Transport} for chaining + * @protected + */ + onError(reason, description, context) { + super.emitReserved("error", new TransportError(reason, description, context)); + return this; + } + /** + * Opens the transport. + */ + open() { + this.readyState = "opening"; + this.doOpen(); + return this; + } + /** + * Closes the transport. + */ + close() { + if (this.readyState === "opening" || this.readyState === "open") { + this.doClose(); + this.onClose(); + } + return this; + } + /** + * Sends multiple packets. + * + * @param {Array} packets + */ + send(packets) { + if (this.readyState === "open") { + this.write(packets); + } + else { + // this might happen if the transport was silently closed in the beforeunload event handler + debug$8("transport is not open, discarding packets"); + } + } + /** + * Called upon open + * + * @protected + */ + onOpen() { + this.readyState = "open"; + this.writable = true; + super.emitReserved("open"); + } + /** + * Called with data. + * + * @param {String} data + * @protected + */ + onData(data) { + const packet = (0, engine_io_parser_1$4.decodePacket)(data, this.socket.binaryType); + this.onPacket(packet); + } + /** + * Called with a decoded packet. + * + * @protected + */ + onPacket(packet) { + super.emitReserved("packet", packet); + } + /** + * Called upon close. + * + * @protected + */ + onClose(details) { + this.readyState = "closed"; + super.emitReserved("close", details); + } + /** + * Pauses the transport, in order not to lose packets during an upgrade. + * + * @param onPause + */ + pause(onPause) { } + createUri(schema, query = {}) { + return (schema + + "://" + + this._hostname() + + this._port() + + this.opts.path + + this._query(query)); + } + _hostname() { + const hostname = this.opts.hostname; + return hostname.indexOf(":") === -1 ? hostname : "[" + hostname + "]"; + } + _port() { + if (this.opts.port && + ((this.opts.secure && Number(this.opts.port !== 443)) || + (!this.opts.secure && Number(this.opts.port) !== 80))) { + return ":" + this.opts.port; + } + else { + return ""; + } + } + _query(query) { + const encodedQuery = (0, parseqs_js_1$1.encode)(query); + return encodedQuery.length ? "?" + encodedQuery : ""; + } + } + transport.Transport = Transport; + + var __importDefault$7 = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + }; + Object.defineProperty(polling, "__esModule", { value: true }); + polling.Polling = void 0; + const transport_js_1$2 = transport; + const util_js_1$3 = util; + const engine_io_parser_1$3 = cjs$1; + const debug_1$7 = __importDefault$7(browserExports); // debug() + const debug$7 = (0, debug_1$7.default)("engine.io-client:polling"); // debug() + class Polling extends transport_js_1$2.Transport { + constructor() { + super(...arguments); + this._polling = false; + } + get name() { + return "polling"; + } + /** + * Opens the socket (triggers polling). We write a PING message to determine + * when the transport is open. + * + * @protected + */ + doOpen() { + this._poll(); + } + /** + * Pauses polling. + * + * @param {Function} onPause - callback upon buffers are flushed and transport is paused + * @package + */ + pause(onPause) { + this.readyState = "pausing"; + const pause = () => { + debug$7("paused"); + this.readyState = "paused"; + onPause(); + }; + if (this._polling || !this.writable) { + let total = 0; + if (this._polling) { + debug$7("we are currently polling - waiting to pause"); + total++; + this.once("pollComplete", function () { + debug$7("pre-pause polling complete"); + --total || pause(); + }); + } + if (!this.writable) { + debug$7("we are currently writing - waiting to pause"); + total++; + this.once("drain", function () { + debug$7("pre-pause writing complete"); + --total || pause(); + }); + } + } + else { + pause(); + } + } + /** + * Starts polling cycle. + * + * @private + */ + _poll() { + debug$7("polling"); + this._polling = true; + this.doPoll(); + this.emitReserved("poll"); + } + /** + * Overloads onData to detect payloads. + * + * @protected + */ + onData(data) { + debug$7("polling got data %s", data); + const callback = (packet) => { + // if its the first message we consider the transport open + if ("opening" === this.readyState && packet.type === "open") { + this.onOpen(); + } + // if its a close packet, we close the ongoing requests + if ("close" === packet.type) { + this.onClose({ description: "transport closed by the server" }); + return false; + } + // otherwise bypass onData and handle the message + this.onPacket(packet); + }; + // decode payload + (0, engine_io_parser_1$3.decodePayload)(data, this.socket.binaryType).forEach(callback); + // if an event did not trigger closing + if ("closed" !== this.readyState) { + // if we got data we're not polling + this._polling = false; + this.emitReserved("pollComplete"); + if ("open" === this.readyState) { + this._poll(); + } + else { + debug$7('ignoring poll - transport state "%s"', this.readyState); + } + } + } + /** + * For polling, send a close packet. + * + * @protected + */ + doClose() { + const close = () => { + debug$7("writing close packet"); + this.write([{ type: "close" }]); + }; + if ("open" === this.readyState) { + debug$7("transport open - closing"); + close(); + } + else { + // in case we're trying to close while + // handshaking is in progress (GH-164) + debug$7("transport not open - deferring close"); + this.once("open", close); + } + } + /** + * Writes a packets payload. + * + * @param {Array} packets - data packets + * @protected + */ + write(packets) { + this.writable = false; + (0, engine_io_parser_1$3.encodePayload)(packets, (data) => { + this.doWrite(data, () => { + this.writable = true; + this.emitReserved("drain"); + }); + }); + } + /** + * Generates uri for connection. + * + * @private + */ + uri() { + const schema = this.opts.secure ? "https" : "http"; + const query = this.query || {}; + // cache busting is forced + if (false !== this.opts.timestampRequests) { + query[this.opts.timestampParam] = (0, util_js_1$3.randomString)(); + } + if (!this.supportsBinary && !query.sid) { + query.b64 = 1; + } + return this.createUri(schema, query); + } + } + polling.Polling = Polling; + + var hasCors = {}; + + Object.defineProperty(hasCors, "__esModule", { value: true }); + hasCors.hasCORS = void 0; + // imported from https://github.com/component/has-cors + let value = false; + try { + value = typeof XMLHttpRequest !== 'undefined' && + 'withCredentials' in new XMLHttpRequest(); + } + catch (err) { + // if XMLHttp support is disabled in IE then it will throw + // when trying to create + } + hasCors.hasCORS = value; + + var __importDefault$6 = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + }; + Object.defineProperty(pollingXhr, "__esModule", { value: true }); + pollingXhr.XHR = pollingXhr.Request = pollingXhr.BaseXHR = void 0; + const polling_js_1$1 = polling; + const component_emitter_1$3 = require$$5; + const util_js_1$2 = util; + const globals_node_js_1$3 = globals; + const has_cors_js_1 = hasCors; + const debug_1$6 = __importDefault$6(browserExports); // debug() + const debug$6 = (0, debug_1$6.default)("engine.io-client:polling"); // debug() + function empty() { } + class BaseXHR extends polling_js_1$1.Polling { + /** + * XHR Polling constructor. + * + * @param {Object} opts + * @package + */ + constructor(opts) { + super(opts); + if (typeof location !== "undefined") { + const isSSL = "https:" === location.protocol; + let port = location.port; + // some user agents have empty `location.port` + if (!port) { + port = isSSL ? "443" : "80"; + } + this.xd = + (typeof location !== "undefined" && + opts.hostname !== location.hostname) || + port !== opts.port; + } + } + /** + * Sends data. + * + * @param {String} data to send. + * @param {Function} called upon flush. + * @private + */ + doWrite(data, fn) { + const req = this.request({ + method: "POST", + data: data, + }); + req.on("success", fn); + req.on("error", (xhrStatus, context) => { + this.onError("xhr post error", xhrStatus, context); + }); + } + /** + * Starts a poll cycle. + * + * @private + */ + doPoll() { + debug$6("xhr poll"); + const req = this.request(); + req.on("data", this.onData.bind(this)); + req.on("error", (xhrStatus, context) => { + this.onError("xhr poll error", xhrStatus, context); + }); + this.pollXhr = req; + } + } + pollingXhr.BaseXHR = BaseXHR; + class Request extends component_emitter_1$3.Emitter { + /** + * Request constructor + * + * @param {Object} options + * @package + */ + constructor(createRequest, uri, opts) { + super(); + this.createRequest = createRequest; + (0, util_js_1$2.installTimerFunctions)(this, opts); + this._opts = opts; + this._method = opts.method || "GET"; + this._uri = uri; + this._data = undefined !== opts.data ? opts.data : null; + this._create(); + } + /** + * Creates the XHR object and sends the request. + * + * @private + */ + _create() { + var _a; + const opts = (0, util_js_1$2.pick)(this._opts, "agent", "pfx", "key", "passphrase", "cert", "ca", "ciphers", "rejectUnauthorized", "autoUnref"); + opts.xdomain = !!this._opts.xd; + const xhr = (this._xhr = this.createRequest(opts)); + try { + debug$6("xhr open %s: %s", this._method, this._uri); + xhr.open(this._method, this._uri, true); + try { + if (this._opts.extraHeaders) { + // @ts-ignore + xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true); + for (let i in this._opts.extraHeaders) { + if (this._opts.extraHeaders.hasOwnProperty(i)) { + xhr.setRequestHeader(i, this._opts.extraHeaders[i]); + } + } + } + } + catch (e) { } + if ("POST" === this._method) { + try { + xhr.setRequestHeader("Content-type", "text/plain;charset=UTF-8"); + } + catch (e) { } + } + try { + xhr.setRequestHeader("Accept", "*/*"); + } + catch (e) { } + (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.addCookies(xhr); + // ie6 check + if ("withCredentials" in xhr) { + xhr.withCredentials = this._opts.withCredentials; + } + if (this._opts.requestTimeout) { + xhr.timeout = this._opts.requestTimeout; + } + xhr.onreadystatechange = () => { + var _a; + if (xhr.readyState === 3) { + (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies( + // @ts-ignore + xhr.getResponseHeader("set-cookie")); + } + if (4 !== xhr.readyState) + return; + if (200 === xhr.status || 1223 === xhr.status) { + this._onLoad(); + } + else { + // make sure the `error` event handler that's user-set + // does not throw in the same tick and gets caught here + this.setTimeoutFn(() => { + this._onError(typeof xhr.status === "number" ? xhr.status : 0); + }, 0); + } + }; + debug$6("xhr data %s", this._data); + xhr.send(this._data); + } + catch (e) { + // Need to defer since .create() is called directly from the constructor + // and thus the 'error' event can only be only bound *after* this exception + // occurs. Therefore, also, we cannot throw here at all. + this.setTimeoutFn(() => { + this._onError(e); + }, 0); + return; + } + if (typeof document !== "undefined") { + this._index = Request.requestsCount++; + Request.requests[this._index] = this; + } + } + /** + * Called upon error. + * + * @private + */ + _onError(err) { + this.emitReserved("error", err, this._xhr); + this._cleanup(true); + } + /** + * Cleans up house. + * + * @private + */ + _cleanup(fromError) { + if ("undefined" === typeof this._xhr || null === this._xhr) { + return; + } + this._xhr.onreadystatechange = empty; + if (fromError) { + try { + this._xhr.abort(); + } + catch (e) { } + } + if (typeof document !== "undefined") { + delete Request.requests[this._index]; + } + this._xhr = null; + } + /** + * Called upon load. + * + * @private + */ + _onLoad() { + const data = this._xhr.responseText; + if (data !== null) { + this.emitReserved("data", data); + this.emitReserved("success"); + this._cleanup(); + } + } + /** + * Aborts the request. + * + * @package + */ + abort() { + this._cleanup(); + } + } + pollingXhr.Request = Request; + Request.requestsCount = 0; + Request.requests = {}; + /** + * Aborts pending requests when unloading the window. This is needed to prevent + * memory leaks (e.g. when using IE) and to ensure that no spurious error is + * emitted. + */ + if (typeof document !== "undefined") { + // @ts-ignore + if (typeof attachEvent === "function") { + // @ts-ignore + attachEvent("onunload", unloadHandler); + } + else if (typeof addEventListener === "function") { + const terminationEvent = "onpagehide" in globals_node_js_1$3.globalThisShim ? "pagehide" : "unload"; + addEventListener(terminationEvent, unloadHandler, false); + } + } + function unloadHandler() { + for (let i in Request.requests) { + if (Request.requests.hasOwnProperty(i)) { + Request.requests[i].abort(); + } + } + } + const hasXHR2 = (function () { + const xhr = newRequest({ + xdomain: false, + }); + return xhr && xhr.responseType !== null; + })(); + /** + * HTTP long-polling based on the built-in `XMLHttpRequest` object. + * + * Usage: browser + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest + */ + class XHR extends BaseXHR { + constructor(opts) { + super(opts); + const forceBase64 = opts && opts.forceBase64; + this.supportsBinary = hasXHR2 && !forceBase64; + } + request(opts = {}) { + Object.assign(opts, { xd: this.xd }, this.opts); + return new Request(newRequest, this.uri(), opts); + } + } + pollingXhr.XHR = XHR; + function newRequest(opts) { + const xdomain = opts.xdomain; + // XMLHttpRequest can be disabled on IE + try { + if ("undefined" !== typeof XMLHttpRequest && (!xdomain || has_cors_js_1.hasCORS)) { + return new XMLHttpRequest(); + } + } + catch (e) { } + if (!xdomain) { + try { + return new globals_node_js_1$3.globalThisShim[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP"); + } + catch (e) { } + } + } + + var websocket = {}; + + var __importDefault$5 = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + }; + Object.defineProperty(websocket, "__esModule", { value: true }); + websocket.WS = websocket.BaseWS = void 0; + const transport_js_1$1 = transport; + const util_js_1$1 = util; + const engine_io_parser_1$2 = cjs$1; + const globals_node_js_1$2 = globals; + const debug_1$5 = __importDefault$5(browserExports); // debug() + const debug$5 = (0, debug_1$5.default)("engine.io-client:websocket"); // debug() + // detect ReactNative environment + const isReactNative = typeof navigator !== "undefined" && + typeof navigator.product === "string" && + navigator.product.toLowerCase() === "reactnative"; + class BaseWS extends transport_js_1$1.Transport { + get name() { + return "websocket"; + } + doOpen() { + const uri = this.uri(); + const protocols = this.opts.protocols; + // React Native only supports the 'headers' option, and will print a warning if anything else is passed + const opts = isReactNative + ? {} + : (0, util_js_1$1.pick)(this.opts, "agent", "perMessageDeflate", "pfx", "key", "passphrase", "cert", "ca", "ciphers", "rejectUnauthorized", "localAddress", "protocolVersion", "origin", "maxPayload", "family", "checkServerIdentity"); + if (this.opts.extraHeaders) { + opts.headers = this.opts.extraHeaders; + } + try { + this.ws = this.createSocket(uri, protocols, opts); + } + catch (err) { + return this.emitReserved("error", err); + } + this.ws.binaryType = this.socket.binaryType; + this.addEventListeners(); + } + /** + * Adds event listeners to the socket + * + * @private + */ + addEventListeners() { + this.ws.onopen = () => { + if (this.opts.autoUnref) { + this.ws._socket.unref(); + } + this.onOpen(); + }; + this.ws.onclose = (closeEvent) => this.onClose({ + description: "websocket connection closed", + context: closeEvent, + }); + this.ws.onmessage = (ev) => this.onData(ev.data); + this.ws.onerror = (e) => this.onError("websocket error", e); + } + write(packets) { + this.writable = false; + // encodePacket efficient as it uses WS framing + // no need for encodePayload + for (let i = 0; i < packets.length; i++) { + const packet = packets[i]; + const lastPacket = i === packets.length - 1; + (0, engine_io_parser_1$2.encodePacket)(packet, this.supportsBinary, (data) => { + // Sometimes the websocket has already been closed but the browser didn't + // have a chance of informing us about it yet, in that case send will + // throw an error + try { + this.doWrite(packet, data); + } + catch (e) { + debug$5("websocket closed before onclose event"); + } + if (lastPacket) { + // fake drain + // defer to next tick to allow Socket to clear writeBuffer + (0, globals_node_js_1$2.nextTick)(() => { + this.writable = true; + this.emitReserved("drain"); + }, this.setTimeoutFn); + } + }); + } + } + doClose() { + if (typeof this.ws !== "undefined") { + this.ws.onerror = () => { }; + this.ws.close(); + this.ws = null; + } + } + /** + * Generates uri for connection. + * + * @private + */ + uri() { + const schema = this.opts.secure ? "wss" : "ws"; + const query = this.query || {}; + // append timestamp to URI + if (this.opts.timestampRequests) { + query[this.opts.timestampParam] = (0, util_js_1$1.randomString)(); + } + // communicate binary support capabilities + if (!this.supportsBinary) { + query.b64 = 1; + } + return this.createUri(schema, query); + } + } + websocket.BaseWS = BaseWS; + const WebSocketCtor = globals_node_js_1$2.globalThisShim.WebSocket || globals_node_js_1$2.globalThisShim.MozWebSocket; + /** + * WebSocket transport based on the built-in `WebSocket` object. + * + * Usage: browser, Node.js (since v21), Deno, Bun + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket + * @see https://caniuse.com/mdn-api_websocket + * @see https://nodejs.org/api/globals.html#websocket + */ + class WS extends BaseWS { + createSocket(uri, protocols, opts) { + return !isReactNative + ? protocols + ? new WebSocketCtor(uri, protocols) + : new WebSocketCtor(uri) + : new WebSocketCtor(uri, protocols, opts); + } + doWrite(_packet, data) { + this.ws.send(data); + } + } + websocket.WS = WS; + + var webtransport = {}; + + var __importDefault$4 = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + }; + Object.defineProperty(webtransport, "__esModule", { value: true }); + webtransport.WT = void 0; + const transport_js_1 = transport; + const globals_node_js_1$1 = globals; + const engine_io_parser_1$1 = cjs$1; + const debug_1$4 = __importDefault$4(browserExports); // debug() + const debug$4 = (0, debug_1$4.default)("engine.io-client:webtransport"); // debug() + /** + * WebTransport transport based on the built-in `WebTransport` object. + * + * Usage: browser, Node.js (with the `@fails-components/webtransport` package) + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/WebTransport + * @see https://caniuse.com/webtransport + */ + class WT extends transport_js_1.Transport { + get name() { + return "webtransport"; + } + doOpen() { + try { + // @ts-ignore + this._transport = new WebTransport(this.createUri("https"), this.opts.transportOptions[this.name]); + } + catch (err) { + return this.emitReserved("error", err); + } + this._transport.closed + .then(() => { + debug$4("transport closed gracefully"); + this.onClose(); + }) + .catch((err) => { + debug$4("transport closed due to %s", err); + this.onError("webtransport error", err); + }); + // note: we could have used async/await, but that would require some additional polyfills + this._transport.ready.then(() => { + this._transport.createBidirectionalStream().then((stream) => { + const decoderStream = (0, engine_io_parser_1$1.createPacketDecoderStream)(Number.MAX_SAFE_INTEGER, this.socket.binaryType); + const reader = stream.readable.pipeThrough(decoderStream).getReader(); + const encoderStream = (0, engine_io_parser_1$1.createPacketEncoderStream)(); + encoderStream.readable.pipeTo(stream.writable); + this._writer = encoderStream.writable.getWriter(); + const read = () => { + reader + .read() + .then(({ done, value }) => { + if (done) { + debug$4("session is closed"); + return; + } + debug$4("received chunk: %o", value); + this.onPacket(value); + read(); + }) + .catch((err) => { + debug$4("an error occurred while reading: %s", err); + }); + }; + read(); + const packet = { type: "open" }; + if (this.query.sid) { + packet.data = `{"sid":"${this.query.sid}"}`; + } + this._writer.write(packet).then(() => this.onOpen()); + }); + }); + } + write(packets) { + this.writable = false; + for (let i = 0; i < packets.length; i++) { + const packet = packets[i]; + const lastPacket = i === packets.length - 1; + this._writer.write(packet).then(() => { + if (lastPacket) { + (0, globals_node_js_1$1.nextTick)(() => { + this.writable = true; + this.emitReserved("drain"); + }, this.setTimeoutFn); + } + }); + } + } + doClose() { + var _a; + (_a = this._transport) === null || _a === void 0 ? void 0 : _a.close(); + } + } + webtransport.WT = WT; + + Object.defineProperty(transports, "__esModule", { value: true }); + transports.transports = void 0; + const polling_xhr_node_js_1 = pollingXhr; + const websocket_node_js_1 = websocket; + const webtransport_js_1 = webtransport; + transports.transports = { + websocket: websocket_node_js_1.WS, + webtransport: webtransport_js_1.WT, + polling: polling_xhr_node_js_1.XHR, + }; + + var parseuri = {}; + + Object.defineProperty(parseuri, "__esModule", { value: true }); + parseuri.parse = parse; + // imported from https://github.com/galkn/parseuri + /** + * Parses a URI + * + * Note: we could also have used the built-in URL object, but it isn't supported on all platforms. + * + * See: + * - https://developer.mozilla.org/en-US/docs/Web/API/URL + * - https://caniuse.com/url + * - https://www.rfc-editor.org/rfc/rfc3986#appendix-B + * + * History of the parse() method: + * - first commit: https://github.com/socketio/socket.io-client/commit/4ee1d5d94b3906a9c052b459f1a818b15f38f91c + * - export into its own module: https://github.com/socketio/engine.io-client/commit/de2c561e4564efeb78f1bdb1ba39ef81b2822cb3 + * - reimport: https://github.com/socketio/engine.io-client/commit/df32277c3f6d622eec5ed09f493cae3f3391d242 + * + * @author Steven Levithan (MIT license) + * @api private + */ + const re = /^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; + const parts = [ + 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor' + ]; + function parse(str) { + if (str.length > 8000) { + throw "URI too long"; + } + const src = str, b = str.indexOf('['), e = str.indexOf(']'); + if (b != -1 && e != -1) { + str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length); + } + let m = re.exec(str || ''), uri = {}, i = 14; + while (i--) { + uri[parts[i]] = m[i] || ''; + } + if (b != -1 && e != -1) { + uri.source = src; + uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':'); + uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':'); + uri.ipv6uri = true; + } + uri.pathNames = pathNames(uri, uri['path']); + uri.queryKey = queryKey(uri, uri['query']); + return uri; + } + function pathNames(obj, path) { + const regx = /\/{2,9}/g, names = path.replace(regx, "/").split("/"); + if (path.slice(0, 1) == '/' || path.length === 0) { + names.splice(0, 1); + } + if (path.slice(-1) == '/') { + names.splice(names.length - 1, 1); + } + return names; + } + function queryKey(uri, query) { + const data = {}; + query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) { + if ($1) { + data[$1] = $2; + } + }); + return data; + } + + var __importDefault$3 = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + }; + Object.defineProperty(socket$2, "__esModule", { value: true }); + socket$2.Socket = socket$2.SocketWithUpgrade = socket$2.SocketWithoutUpgrade = void 0; + const index_js_1 = transports; + const util_js_1 = util; + const parseqs_js_1 = parseqs; + const parseuri_js_1 = parseuri; + const component_emitter_1$2 = require$$5; + const engine_io_parser_1 = cjs$1; + const globals_node_js_1 = globals; + const debug_1$3 = __importDefault$3(browserExports); // debug() + const debug$3 = (0, debug_1$3.default)("engine.io-client:socket"); // debug() + const withEventListeners = typeof addEventListener === "function" && + typeof removeEventListener === "function"; + const OFFLINE_EVENT_LISTENERS = []; + if (withEventListeners) { + // within a ServiceWorker, any event handler for the 'offline' event must be added on the initial evaluation of the + // script, so we create one single event listener here which will forward the event to the socket instances + addEventListener("offline", () => { + debug$3("closing %d connection(s) because the network was lost", OFFLINE_EVENT_LISTENERS.length); + OFFLINE_EVENT_LISTENERS.forEach((listener) => listener()); + }, false); + } + /** + * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established + * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport. + * + * This class comes without upgrade mechanism, which means that it will keep the first low-level transport that + * successfully establishes the connection. + * + * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory. + * + * @example + * import { SocketWithoutUpgrade, WebSocket } from "engine.io-client"; + * + * const socket = new SocketWithoutUpgrade({ + * transports: [WebSocket] + * }); + * + * socket.on("open", () => { + * socket.send("hello"); + * }); + * + * @see SocketWithUpgrade + * @see Socket + */ + class SocketWithoutUpgrade extends component_emitter_1$2.Emitter { + /** + * Socket constructor. + * + * @param {String|Object} uri - uri or options + * @param {Object} opts - options + */ + constructor(uri, opts) { + super(); + this.binaryType = globals_node_js_1.defaultBinaryType; + this.writeBuffer = []; + this._prevBufferLen = 0; + this._pingInterval = -1; + this._pingTimeout = -1; + this._maxPayload = -1; + /** + * The expiration timestamp of the {@link _pingTimeoutTimer} object is tracked, in case the timer is throttled and the + * callback is not fired on time. This can happen for example when a laptop is suspended or when a phone is locked. + */ + this._pingTimeoutTime = Infinity; + if (uri && "object" === typeof uri) { + opts = uri; + uri = null; + } + if (uri) { + const parsedUri = (0, parseuri_js_1.parse)(uri); + opts.hostname = parsedUri.host; + opts.secure = + parsedUri.protocol === "https" || parsedUri.protocol === "wss"; + opts.port = parsedUri.port; + if (parsedUri.query) + opts.query = parsedUri.query; + } + else if (opts.host) { + opts.hostname = (0, parseuri_js_1.parse)(opts.host).host; + } + (0, util_js_1.installTimerFunctions)(this, opts); + this.secure = + null != opts.secure + ? opts.secure + : typeof location !== "undefined" && "https:" === location.protocol; + if (opts.hostname && !opts.port) { + // if no port is specified manually, use the protocol default + opts.port = this.secure ? "443" : "80"; + } + this.hostname = + opts.hostname || + (typeof location !== "undefined" ? location.hostname : "localhost"); + this.port = + opts.port || + (typeof location !== "undefined" && location.port + ? location.port + : this.secure + ? "443" + : "80"); + this.transports = []; + this._transportsByName = {}; + opts.transports.forEach((t) => { + const transportName = t.prototype.name; + this.transports.push(transportName); + this._transportsByName[transportName] = t; + }); + this.opts = Object.assign({ + path: "/engine.io", + agent: false, + withCredentials: false, + upgrade: true, + timestampParam: "t", + rememberUpgrade: false, + addTrailingSlash: true, + rejectUnauthorized: true, + perMessageDeflate: { + threshold: 1024, + }, + transportOptions: {}, + closeOnBeforeunload: false, + }, opts); + this.opts.path = + this.opts.path.replace(/\/$/, "") + + (this.opts.addTrailingSlash ? "/" : ""); + if (typeof this.opts.query === "string") { + this.opts.query = (0, parseqs_js_1.decode)(this.opts.query); + } + if (withEventListeners) { + if (this.opts.closeOnBeforeunload) { + // Firefox closes the connection when the "beforeunload" event is emitted but not Chrome. This event listener + // ensures every browser behaves the same (no "disconnect" event at the Socket.IO level when the page is + // closed/reloaded) + this._beforeunloadEventListener = () => { + if (this.transport) { + // silently close the transport + this.transport.removeAllListeners(); + this.transport.close(); + } + }; + addEventListener("beforeunload", this._beforeunloadEventListener, false); + } + if (this.hostname !== "localhost") { + debug$3("adding listener for the 'offline' event"); + this._offlineEventListener = () => { + this._onClose("transport close", { + description: "network connection lost", + }); + }; + OFFLINE_EVENT_LISTENERS.push(this._offlineEventListener); + } + } + if (this.opts.withCredentials) { + this._cookieJar = (0, globals_node_js_1.createCookieJar)(); + } + this._open(); + } + /** + * Creates transport of the given type. + * + * @param {String} name - transport name + * @return {Transport} + * @private + */ + createTransport(name) { + debug$3('creating transport "%s"', name); + const query = Object.assign({}, this.opts.query); + // append engine.io protocol identifier + query.EIO = engine_io_parser_1.protocol; + // transport name + query.transport = name; + // session id if we already have one + if (this.id) + query.sid = this.id; + const opts = Object.assign({}, this.opts, { + query, + socket: this, + hostname: this.hostname, + secure: this.secure, + port: this.port, + }, this.opts.transportOptions[name]); + debug$3("options: %j", opts); + return new this._transportsByName[name](opts); + } + /** + * Initializes transport to use and starts probe. + * + * @private + */ + _open() { + if (this.transports.length === 0) { + // Emit error on next tick so it can be listened to + this.setTimeoutFn(() => { + this.emitReserved("error", "No transports available"); + }, 0); + return; + } + const transportName = this.opts.rememberUpgrade && + SocketWithoutUpgrade.priorWebsocketSuccess && + this.transports.indexOf("websocket") !== -1 + ? "websocket" + : this.transports[0]; + this.readyState = "opening"; + const transport = this.createTransport(transportName); + transport.open(); + this.setTransport(transport); + } + /** + * Sets the current transport. Disables the existing one (if any). + * + * @private + */ + setTransport(transport) { + debug$3("setting transport %s", transport.name); + if (this.transport) { + debug$3("clearing existing transport %s", this.transport.name); + this.transport.removeAllListeners(); + } + // set up transport + this.transport = transport; + // set up transport listeners + transport + .on("drain", this._onDrain.bind(this)) + .on("packet", this._onPacket.bind(this)) + .on("error", this._onError.bind(this)) + .on("close", (reason) => this._onClose("transport close", reason)); + } + /** + * Called when connection is deemed open. + * + * @private + */ + onOpen() { + debug$3("socket open"); + this.readyState = "open"; + SocketWithoutUpgrade.priorWebsocketSuccess = + "websocket" === this.transport.name; + this.emitReserved("open"); + this.flush(); + } + /** + * Handles a packet. + * + * @private + */ + _onPacket(packet) { + if ("opening" === this.readyState || + "open" === this.readyState || + "closing" === this.readyState) { + debug$3('socket receive: type "%s", data "%s"', packet.type, packet.data); + this.emitReserved("packet", packet); + // Socket is live - any packet counts + this.emitReserved("heartbeat"); + switch (packet.type) { + case "open": + this.onHandshake(JSON.parse(packet.data)); + break; + case "ping": + this._sendPacket("pong"); + this.emitReserved("ping"); + this.emitReserved("pong"); + this._resetPingTimeout(); + break; + case "error": + const err = new Error("server error"); + // @ts-ignore + err.code = packet.data; + this._onError(err); + break; + case "message": + this.emitReserved("data", packet.data); + this.emitReserved("message", packet.data); + break; + } + } + else { + debug$3('packet received with socket readyState "%s"', this.readyState); + } + } + /** + * Called upon handshake completion. + * + * @param {Object} data - handshake obj + * @private + */ + onHandshake(data) { + this.emitReserved("handshake", data); + this.id = data.sid; + this.transport.query.sid = data.sid; + this._pingInterval = data.pingInterval; + this._pingTimeout = data.pingTimeout; + this._maxPayload = data.maxPayload; + this.onOpen(); + // In case open handler closes socket + if ("closed" === this.readyState) + return; + this._resetPingTimeout(); + } + /** + * Sets and resets ping timeout timer based on server pings. + * + * @private + */ + _resetPingTimeout() { + this.clearTimeoutFn(this._pingTimeoutTimer); + const delay = this._pingInterval + this._pingTimeout; + this._pingTimeoutTime = Date.now() + delay; + this._pingTimeoutTimer = this.setTimeoutFn(() => { + this._onClose("ping timeout"); + }, delay); + if (this.opts.autoUnref) { + this._pingTimeoutTimer.unref(); + } + } + /** + * Called on `drain` event + * + * @private + */ + _onDrain() { + this.writeBuffer.splice(0, this._prevBufferLen); + // setting prevBufferLen = 0 is very important + // for example, when upgrading, upgrade packet is sent over, + // and a nonzero prevBufferLen could cause problems on `drain` + this._prevBufferLen = 0; + if (0 === this.writeBuffer.length) { + this.emitReserved("drain"); + } + else { + this.flush(); + } + } + /** + * Flush write buffers. + * + * @private + */ + flush() { + if ("closed" !== this.readyState && + this.transport.writable && + !this.upgrading && + this.writeBuffer.length) { + const packets = this._getWritablePackets(); + debug$3("flushing %d packets in socket", packets.length); + this.transport.send(packets); + // keep track of current length of writeBuffer + // splice writeBuffer and callbackBuffer on `drain` + this._prevBufferLen = packets.length; + this.emitReserved("flush"); + } + } + /** + * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP + * long-polling) + * + * @private + */ + _getWritablePackets() { + const shouldCheckPayloadSize = this._maxPayload && + this.transport.name === "polling" && + this.writeBuffer.length > 1; + if (!shouldCheckPayloadSize) { + return this.writeBuffer; + } + let payloadSize = 1; // first packet type + for (let i = 0; i < this.writeBuffer.length; i++) { + const data = this.writeBuffer[i].data; + if (data) { + payloadSize += (0, util_js_1.byteLength)(data); + } + if (i > 0 && payloadSize > this._maxPayload) { + debug$3("only send %d out of %d packets", i, this.writeBuffer.length); + return this.writeBuffer.slice(0, i); + } + payloadSize += 2; // separator + packet type + } + debug$3("payload size is %d (max: %d)", payloadSize, this._maxPayload); + return this.writeBuffer; + } + /** + * Checks whether the heartbeat timer has expired but the socket has not yet been notified. + * + * Note: this method is private for now because it does not really fit the WebSocket API, but if we put it in the + * `write()` method then the message would not be buffered by the Socket.IO client. + * + * @return {boolean} + * @private + */ + /* private */ _hasPingExpired() { + if (!this._pingTimeoutTime) + return true; + const hasExpired = Date.now() > this._pingTimeoutTime; + if (hasExpired) { + debug$3("throttled timer detected, scheduling connection close"); + this._pingTimeoutTime = 0; + (0, globals_node_js_1.nextTick)(() => { + this._onClose("ping timeout"); + }, this.setTimeoutFn); + } + return hasExpired; + } + /** + * Sends a message. + * + * @param {String} msg - message. + * @param {Object} options. + * @param {Function} fn - callback function. + * @return {Socket} for chaining. + */ + write(msg, options, fn) { + this._sendPacket("message", msg, options, fn); + return this; + } + /** + * Sends a message. Alias of {@link Socket#write}. + * + * @param {String} msg - message. + * @param {Object} options. + * @param {Function} fn - callback function. + * @return {Socket} for chaining. + */ + send(msg, options, fn) { + this._sendPacket("message", msg, options, fn); + return this; + } + /** + * Sends a packet. + * + * @param {String} type: packet type. + * @param {String} data. + * @param {Object} options. + * @param {Function} fn - callback function. + * @private + */ + _sendPacket(type, data, options, fn) { + if ("function" === typeof data) { + fn = data; + data = undefined; + } + if ("function" === typeof options) { + fn = options; + options = null; + } + if ("closing" === this.readyState || "closed" === this.readyState) { + return; + } + options = options || {}; + options.compress = false !== options.compress; + const packet = { + type: type, + data: data, + options: options, + }; + this.emitReserved("packetCreate", packet); + this.writeBuffer.push(packet); + if (fn) + this.once("flush", fn); + this.flush(); + } + /** + * Closes the connection. + */ + close() { + const close = () => { + this._onClose("forced close"); + debug$3("socket closing - telling transport to close"); + this.transport.close(); + }; + const cleanupAndClose = () => { + this.off("upgrade", cleanupAndClose); + this.off("upgradeError", cleanupAndClose); + close(); + }; + const waitForUpgrade = () => { + // wait for upgrade to finish since we can't send packets while pausing a transport + this.once("upgrade", cleanupAndClose); + this.once("upgradeError", cleanupAndClose); + }; + if ("opening" === this.readyState || "open" === this.readyState) { + this.readyState = "closing"; + if (this.writeBuffer.length) { + this.once("drain", () => { + if (this.upgrading) { + waitForUpgrade(); + } + else { + close(); + } + }); + } + else if (this.upgrading) { + waitForUpgrade(); + } + else { + close(); + } + } + return this; + } + /** + * Called upon transport error + * + * @private + */ + _onError(err) { + debug$3("socket error %j", err); + SocketWithoutUpgrade.priorWebsocketSuccess = false; + if (this.opts.tryAllTransports && + this.transports.length > 1 && + this.readyState === "opening") { + debug$3("trying next transport"); + this.transports.shift(); + return this._open(); + } + this.emitReserved("error", err); + this._onClose("transport error", err); + } + /** + * Called upon transport close. + * + * @private + */ + _onClose(reason, description) { + if ("opening" === this.readyState || + "open" === this.readyState || + "closing" === this.readyState) { + debug$3('socket close with reason: "%s"', reason); + // clear timers + this.clearTimeoutFn(this._pingTimeoutTimer); + // stop event from firing again for transport + this.transport.removeAllListeners("close"); + // ensure transport won't stay open + this.transport.close(); + // ignore further transport communication + this.transport.removeAllListeners(); + if (withEventListeners) { + if (this._beforeunloadEventListener) { + removeEventListener("beforeunload", this._beforeunloadEventListener, false); + } + if (this._offlineEventListener) { + const i = OFFLINE_EVENT_LISTENERS.indexOf(this._offlineEventListener); + if (i !== -1) { + debug$3("removing listener for the 'offline' event"); + OFFLINE_EVENT_LISTENERS.splice(i, 1); + } + } + } + // set ready state + this.readyState = "closed"; + // clear session id + this.id = null; + // emit close event + this.emitReserved("close", reason, description); + // clean buffers after, so users can still + // grab the buffers on `close` event + this.writeBuffer = []; + this._prevBufferLen = 0; + } + } + } + socket$2.SocketWithoutUpgrade = SocketWithoutUpgrade; + SocketWithoutUpgrade.protocol = engine_io_parser_1.protocol; + /** + * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established + * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport. + * + * This class comes with an upgrade mechanism, which means that once the connection is established with the first + * low-level transport, it will try to upgrade to a better transport. + * + * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory. + * + * @example + * import { SocketWithUpgrade, WebSocket } from "engine.io-client"; + * + * const socket = new SocketWithUpgrade({ + * transports: [WebSocket] + * }); + * + * socket.on("open", () => { + * socket.send("hello"); + * }); + * + * @see SocketWithoutUpgrade + * @see Socket + */ + class SocketWithUpgrade extends SocketWithoutUpgrade { + constructor() { + super(...arguments); + this._upgrades = []; + } + onOpen() { + super.onOpen(); + if ("open" === this.readyState && this.opts.upgrade) { + debug$3("starting upgrade probes"); + for (let i = 0; i < this._upgrades.length; i++) { + this._probe(this._upgrades[i]); + } + } + } + /** + * Probes a transport. + * + * @param {String} name - transport name + * @private + */ + _probe(name) { + debug$3('probing transport "%s"', name); + let transport = this.createTransport(name); + let failed = false; + SocketWithoutUpgrade.priorWebsocketSuccess = false; + const onTransportOpen = () => { + if (failed) + return; + debug$3('probe transport "%s" opened', name); + transport.send([{ type: "ping", data: "probe" }]); + transport.once("packet", (msg) => { + if (failed) + return; + if ("pong" === msg.type && "probe" === msg.data) { + debug$3('probe transport "%s" pong', name); + this.upgrading = true; + this.emitReserved("upgrading", transport); + if (!transport) + return; + SocketWithoutUpgrade.priorWebsocketSuccess = + "websocket" === transport.name; + debug$3('pausing current transport "%s"', this.transport.name); + this.transport.pause(() => { + if (failed) + return; + if ("closed" === this.readyState) + return; + debug$3("changing transport and sending upgrade packet"); + cleanup(); + this.setTransport(transport); + transport.send([{ type: "upgrade" }]); + this.emitReserved("upgrade", transport); + transport = null; + this.upgrading = false; + this.flush(); + }); + } + else { + debug$3('probe transport "%s" failed', name); + const err = new Error("probe error"); + // @ts-ignore + err.transport = transport.name; + this.emitReserved("upgradeError", err); + } + }); + }; + function freezeTransport() { + if (failed) + return; + // Any callback called by transport should be ignored since now + failed = true; + cleanup(); + transport.close(); + transport = null; + } + // Handle any error that happens while probing + const onerror = (err) => { + const error = new Error("probe error: " + err); + // @ts-ignore + error.transport = transport.name; + freezeTransport(); + debug$3('probe transport "%s" failed because of error: %s', name, err); + this.emitReserved("upgradeError", error); + }; + function onTransportClose() { + onerror("transport closed"); + } + // When the socket is closed while we're probing + function onclose() { + onerror("socket closed"); + } + // When the socket is upgraded while we're probing + function onupgrade(to) { + if (transport && to.name !== transport.name) { + debug$3('"%s" works - aborting "%s"', to.name, transport.name); + freezeTransport(); + } + } + // Remove all listeners on the transport and on self + const cleanup = () => { + transport.removeListener("open", onTransportOpen); + transport.removeListener("error", onerror); + transport.removeListener("close", onTransportClose); + this.off("close", onclose); + this.off("upgrading", onupgrade); + }; + transport.once("open", onTransportOpen); + transport.once("error", onerror); + transport.once("close", onTransportClose); + this.once("close", onclose); + this.once("upgrading", onupgrade); + if (this._upgrades.indexOf("webtransport") !== -1 && + name !== "webtransport") { + // favor WebTransport + this.setTimeoutFn(() => { + if (!failed) { + transport.open(); + } + }, 200); + } + else { + transport.open(); + } + } + onHandshake(data) { + this._upgrades = this._filterUpgrades(data.upgrades); + super.onHandshake(data); + } + /** + * Filters upgrades, returning only those matching client transports. + * + * @param {Array} upgrades - server upgrades + * @private + */ + _filterUpgrades(upgrades) { + const filteredUpgrades = []; + for (let i = 0; i < upgrades.length; i++) { + if (~this.transports.indexOf(upgrades[i])) + filteredUpgrades.push(upgrades[i]); + } + return filteredUpgrades; + } + } + socket$2.SocketWithUpgrade = SocketWithUpgrade; + /** + * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established + * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport. + * + * This class comes with an upgrade mechanism, which means that once the connection is established with the first + * low-level transport, it will try to upgrade to a better transport. + * + * @example + * import { Socket } from "engine.io-client"; + * + * const socket = new Socket(); + * + * socket.on("open", () => { + * socket.send("hello"); + * }); + * + * @see SocketWithoutUpgrade + * @see SocketWithUpgrade + */ + class Socket$1 extends SocketWithUpgrade { + constructor(uri, opts = {}) { + const o = typeof uri === "object" ? uri : opts; + if (!o.transports || + (o.transports && typeof o.transports[0] === "string")) { + o.transports = (o.transports || ["polling", "websocket", "webtransport"]) + .map((transportName) => index_js_1.transports[transportName]) + .filter((t) => !!t); + } + super(uri, o); + } + } + socket$2.Socket = Socket$1; + + var pollingFetch = {}; + + Object.defineProperty(pollingFetch, "__esModule", { value: true }); + pollingFetch.Fetch = void 0; + const polling_js_1 = polling; + /** + * HTTP long-polling based on the built-in `fetch()` method. + * + * Usage: browser, Node.js (since v18), Deno, Bun + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/fetch + * @see https://caniuse.com/fetch + * @see https://nodejs.org/api/globals.html#fetch + */ + class Fetch extends polling_js_1.Polling { + doPoll() { + this._fetch() + .then((res) => { + if (!res.ok) { + return this.onError("fetch read error", res.status, res); + } + res.text().then((data) => this.onData(data)); + }) + .catch((err) => { + this.onError("fetch read error", err); + }); + } + doWrite(data, callback) { + this._fetch(data) + .then((res) => { + if (!res.ok) { + return this.onError("fetch write error", res.status, res); + } + callback(); + }) + .catch((err) => { + this.onError("fetch write error", err); + }); + } + _fetch(data) { + var _a; + const isPost = data !== undefined; + const headers = new Headers(this.opts.extraHeaders); + if (isPost) { + headers.set("content-type", "text/plain;charset=UTF-8"); + } + (_a = this.socket._cookieJar) === null || _a === void 0 ? void 0 : _a.appendCookies(headers); + return fetch(this.uri(), { + method: isPost ? "POST" : "GET", + body: isPost ? data : null, + headers, + credentials: this.opts.withCredentials ? "include" : "omit", + }).then((res) => { + var _a; + // @ts-ignore getSetCookie() was added in Node.js v19.7.0 + (_a = this.socket._cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(res.headers.getSetCookie()); + return res; + }); + } + } + pollingFetch.Fetch = Fetch; + + (function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.WebTransport = exports.WebSocket = exports.NodeWebSocket = exports.XHR = exports.NodeXHR = exports.Fetch = exports.nextTick = exports.parse = exports.installTimerFunctions = exports.transports = exports.TransportError = exports.Transport = exports.protocol = exports.SocketWithUpgrade = exports.SocketWithoutUpgrade = exports.Socket = void 0; + const socket_js_1 = socket$2; + Object.defineProperty(exports, "Socket", { enumerable: true, get: function () { return socket_js_1.Socket; } }); + var socket_js_2 = socket$2; + Object.defineProperty(exports, "SocketWithoutUpgrade", { enumerable: true, get: function () { return socket_js_2.SocketWithoutUpgrade; } }); + Object.defineProperty(exports, "SocketWithUpgrade", { enumerable: true, get: function () { return socket_js_2.SocketWithUpgrade; } }); + exports.protocol = socket_js_1.Socket.protocol; + var transport_js_1 = transport; + Object.defineProperty(exports, "Transport", { enumerable: true, get: function () { return transport_js_1.Transport; } }); + Object.defineProperty(exports, "TransportError", { enumerable: true, get: function () { return transport_js_1.TransportError; } }); + var index_js_1 = transports; + Object.defineProperty(exports, "transports", { enumerable: true, get: function () { return index_js_1.transports; } }); + var util_js_1 = util; + Object.defineProperty(exports, "installTimerFunctions", { enumerable: true, get: function () { return util_js_1.installTimerFunctions; } }); + var parseuri_js_1 = parseuri; + Object.defineProperty(exports, "parse", { enumerable: true, get: function () { return parseuri_js_1.parse; } }); + var globals_node_js_1 = globals; + Object.defineProperty(exports, "nextTick", { enumerable: true, get: function () { return globals_node_js_1.nextTick; } }); + var polling_fetch_js_1 = pollingFetch; + Object.defineProperty(exports, "Fetch", { enumerable: true, get: function () { return polling_fetch_js_1.Fetch; } }); + var polling_xhr_node_js_1 = pollingXhr; + Object.defineProperty(exports, "NodeXHR", { enumerable: true, get: function () { return polling_xhr_node_js_1.XHR; } }); + var polling_xhr_js_1 = pollingXhr; + Object.defineProperty(exports, "XHR", { enumerable: true, get: function () { return polling_xhr_js_1.XHR; } }); + var websocket_node_js_1 = websocket; + Object.defineProperty(exports, "NodeWebSocket", { enumerable: true, get: function () { return websocket_node_js_1.WS; } }); + var websocket_js_1 = websocket; + Object.defineProperty(exports, "WebSocket", { enumerable: true, get: function () { return websocket_js_1.WS; } }); + var webtransport_js_1 = webtransport; + Object.defineProperty(exports, "WebTransport", { enumerable: true, get: function () { return webtransport_js_1.WT; } }); + } (cjs$2)); + + var __importDefault$2 = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + }; + Object.defineProperty(url$1, "__esModule", { value: true }); + url$1.url = url; + const engine_io_client_1$1 = cjs$2; + const debug_1$2 = __importDefault$2(browserExports); // debug() + const debug$2 = (0, debug_1$2.default)("socket.io-client:url"); // debug() + /** + * URL parser. + * + * @param uri - url + * @param path - the request path of the connection + * @param loc - An object meant to mimic window.location. + * Defaults to window.location. + * @public + */ + function url(uri, path = "", loc) { + let obj = uri; + // default to window.location + loc = loc || (typeof location !== "undefined" && location); + if (null == uri) + uri = loc.protocol + "//" + loc.host; + // relative path support + if (typeof uri === "string") { + if ("/" === uri.charAt(0)) { + if ("/" === uri.charAt(1)) { + uri = loc.protocol + uri; + } + else { + uri = loc.host + uri; + } + } + if (!/^(https?|wss?):\/\//.test(uri)) { + debug$2("protocol-less url %s", uri); + if ("undefined" !== typeof loc) { + uri = loc.protocol + "//" + uri; + } + else { + uri = "https://" + uri; + } + } + // parse + debug$2("parse %s", uri); + obj = (0, engine_io_client_1$1.parse)(uri); + } + // make sure we treat `localhost:80` and `localhost` equally + if (!obj.port) { + if (/^(http|ws)$/.test(obj.protocol)) { + obj.port = "80"; + } + else if (/^(http|ws)s$/.test(obj.protocol)) { + obj.port = "443"; + } + } + obj.path = obj.path || "/"; + const ipv6 = obj.host.indexOf(":") !== -1; + const host = ipv6 ? "[" + obj.host + "]" : obj.host; + // define unique id + obj.id = obj.protocol + "://" + host + ":" + obj.port + path; + // define href + obj.href = + obj.protocol + + "://" + + host + + (loc && loc.port === obj.port ? "" : ":" + obj.port); + return obj; + } + + var manager = {}; + + var socket$1 = {}; + + var cjs = {}; + + var binary = {}; + + var isBinary$1 = {}; + + Object.defineProperty(isBinary$1, "__esModule", { value: true }); + isBinary$1.hasBinary = isBinary$1.isBinary = void 0; + const withNativeArrayBuffer = typeof ArrayBuffer === "function"; + const isView = (obj) => { + return typeof ArrayBuffer.isView === "function" + ? ArrayBuffer.isView(obj) + : obj.buffer instanceof ArrayBuffer; + }; + const toString = Object.prototype.toString; + const withNativeBlob = typeof Blob === "function" || + (typeof Blob !== "undefined" && + toString.call(Blob) === "[object BlobConstructor]"); + const withNativeFile = typeof File === "function" || + (typeof File !== "undefined" && + toString.call(File) === "[object FileConstructor]"); + /** + * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File. + * + * @private + */ + function isBinary(obj) { + return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) || + (withNativeBlob && obj instanceof Blob) || + (withNativeFile && obj instanceof File)); + } + isBinary$1.isBinary = isBinary; + function hasBinary(obj, toJSON) { + if (!obj || typeof obj !== "object") { + return false; + } + if (Array.isArray(obj)) { + for (let i = 0, l = obj.length; i < l; i++) { + if (hasBinary(obj[i])) { + return true; + } + } + return false; + } + if (isBinary(obj)) { + return true; + } + if (obj.toJSON && + typeof obj.toJSON === "function" && + arguments.length === 1) { + return hasBinary(obj.toJSON(), true); + } + for (const key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) { + return true; + } + } + return false; + } + isBinary$1.hasBinary = hasBinary; + + Object.defineProperty(binary, "__esModule", { value: true }); + binary.reconstructPacket = binary.deconstructPacket = void 0; + const is_binary_js_1 = isBinary$1; + /** + * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder. + * + * @param {Object} packet - socket.io event packet + * @return {Object} with deconstructed packet and list of buffers + * @public + */ + function deconstructPacket(packet) { + const buffers = []; + const packetData = packet.data; + const pack = packet; + pack.data = _deconstructPacket(packetData, buffers); + pack.attachments = buffers.length; // number of binary 'attachments' + return { packet: pack, buffers: buffers }; + } + binary.deconstructPacket = deconstructPacket; + function _deconstructPacket(data, buffers) { + if (!data) + return data; + if ((0, is_binary_js_1.isBinary)(data)) { + const placeholder = { _placeholder: true, num: buffers.length }; + buffers.push(data); + return placeholder; + } + else if (Array.isArray(data)) { + const newData = new Array(data.length); + for (let i = 0; i < data.length; i++) { + newData[i] = _deconstructPacket(data[i], buffers); + } + return newData; + } + else if (typeof data === "object" && !(data instanceof Date)) { + const newData = {}; + for (const key in data) { + if (Object.prototype.hasOwnProperty.call(data, key)) { + newData[key] = _deconstructPacket(data[key], buffers); + } + } + return newData; + } + return data; + } + /** + * Reconstructs a binary packet from its placeholder packet and buffers + * + * @param {Object} packet - event packet with placeholders + * @param {Array} buffers - binary buffers to put in placeholder positions + * @return {Object} reconstructed packet + * @public + */ + function reconstructPacket(packet, buffers) { + packet.data = _reconstructPacket(packet.data, buffers); + delete packet.attachments; // no longer useful + return packet; + } + binary.reconstructPacket = reconstructPacket; + function _reconstructPacket(data, buffers) { + if (!data) + return data; + if (data && data._placeholder === true) { + const isIndexValid = typeof data.num === "number" && + data.num >= 0 && + data.num < buffers.length; + if (isIndexValid) { + return buffers[data.num]; // appropriate buffer (should be natural order anyway) + } + else { + throw new Error("illegal attachments"); + } + } + else if (Array.isArray(data)) { + for (let i = 0; i < data.length; i++) { + data[i] = _reconstructPacket(data[i], buffers); + } + } + else if (typeof data === "object") { + for (const key in data) { + if (Object.prototype.hasOwnProperty.call(data, key)) { + data[key] = _reconstructPacket(data[key], buffers); + } + } + } + return data; + } + + (function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Decoder = exports.Encoder = exports.PacketType = exports.protocol = void 0; + const component_emitter_1 = require$$5; + const binary_js_1 = binary; + const is_binary_js_1 = isBinary$1; + const debug_1 = browserExports; // debug() + const debug = (0, debug_1.default)("socket.io-parser"); // debug() + /** + * These strings must not be used as event names, as they have a special meaning. + */ + const RESERVED_EVENTS = [ + "connect", + "connect_error", + "disconnect", + "disconnecting", + "newListener", + "removeListener", // used by the Node.js EventEmitter + ]; + /** + * Protocol version. + * + * @public + */ + exports.protocol = 5; + var PacketType; + (function (PacketType) { + PacketType[PacketType["CONNECT"] = 0] = "CONNECT"; + PacketType[PacketType["DISCONNECT"] = 1] = "DISCONNECT"; + PacketType[PacketType["EVENT"] = 2] = "EVENT"; + PacketType[PacketType["ACK"] = 3] = "ACK"; + PacketType[PacketType["CONNECT_ERROR"] = 4] = "CONNECT_ERROR"; + PacketType[PacketType["BINARY_EVENT"] = 5] = "BINARY_EVENT"; + PacketType[PacketType["BINARY_ACK"] = 6] = "BINARY_ACK"; + })(PacketType = exports.PacketType || (exports.PacketType = {})); + /** + * A socket.io Encoder instance + */ + class Encoder { + /** + * Encoder constructor + * + * @param {function} replacer - custom replacer to pass down to JSON.parse + */ + constructor(replacer) { + this.replacer = replacer; + } + /** + * Encode a packet as a single string if non-binary, or as a + * buffer sequence, depending on packet type. + * + * @param {Object} obj - packet object + */ + encode(obj) { + debug("encoding packet %j", obj); + if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) { + if ((0, is_binary_js_1.hasBinary)(obj)) { + return this.encodeAsBinary({ + type: obj.type === PacketType.EVENT + ? PacketType.BINARY_EVENT + : PacketType.BINARY_ACK, + nsp: obj.nsp, + data: obj.data, + id: obj.id, + }); + } + } + return [this.encodeAsString(obj)]; + } + /** + * Encode packet as string. + */ + encodeAsString(obj) { + // first is type + let str = "" + obj.type; + // attachments if we have them + if (obj.type === PacketType.BINARY_EVENT || + obj.type === PacketType.BINARY_ACK) { + str += obj.attachments + "-"; + } + // if we have a namespace other than `/` + // we append it followed by a comma `,` + if (obj.nsp && "/" !== obj.nsp) { + str += obj.nsp + ","; + } + // immediately followed by the id + if (null != obj.id) { + str += obj.id; + } + // json data + if (null != obj.data) { + str += JSON.stringify(obj.data, this.replacer); + } + debug("encoded %j as %s", obj, str); + return str; + } + /** + * Encode packet as 'buffer sequence' by removing blobs, and + * deconstructing packet into object with placeholders and + * a list of buffers. + */ + encodeAsBinary(obj) { + const deconstruction = (0, binary_js_1.deconstructPacket)(obj); + const pack = this.encodeAsString(deconstruction.packet); + const buffers = deconstruction.buffers; + buffers.unshift(pack); // add packet info to beginning of data list + return buffers; // write all the buffers + } + } + exports.Encoder = Encoder; + // see https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript + function isObject(value) { + return Object.prototype.toString.call(value) === "[object Object]"; + } + /** + * A socket.io Decoder instance + * + * @return {Object} decoder + */ + class Decoder extends component_emitter_1.Emitter { + /** + * Decoder constructor + * + * @param {function} reviver - custom reviver to pass down to JSON.stringify + */ + constructor(reviver) { + super(); + this.reviver = reviver; + } + /** + * Decodes an encoded packet string into packet JSON. + * + * @param {String} obj - encoded packet + */ + add(obj) { + let packet; + if (typeof obj === "string") { + if (this.reconstructor) { + throw new Error("got plaintext data when reconstructing a packet"); + } + packet = this.decodeString(obj); + const isBinaryEvent = packet.type === PacketType.BINARY_EVENT; + if (isBinaryEvent || packet.type === PacketType.BINARY_ACK) { + packet.type = isBinaryEvent ? PacketType.EVENT : PacketType.ACK; + // binary packet's json + this.reconstructor = new BinaryReconstructor(packet); + // no attachments, labeled binary but no binary data to follow + if (packet.attachments === 0) { + super.emitReserved("decoded", packet); + } + } + else { + // non-binary full packet + super.emitReserved("decoded", packet); + } + } + else if ((0, is_binary_js_1.isBinary)(obj) || obj.base64) { + // raw binary data + if (!this.reconstructor) { + throw new Error("got binary data when not reconstructing a packet"); + } + else { + packet = this.reconstructor.takeBinaryData(obj); + if (packet) { + // received final buffer + this.reconstructor = null; + super.emitReserved("decoded", packet); + } + } + } + else { + throw new Error("Unknown type: " + obj); + } + } + /** + * Decode a packet String (JSON data) + * + * @param {String} str + * @return {Object} packet + */ + decodeString(str) { + let i = 0; + // look up type + const p = { + type: Number(str.charAt(0)), + }; + if (PacketType[p.type] === undefined) { + throw new Error("unknown packet type " + p.type); + } + // look up attachments if type binary + if (p.type === PacketType.BINARY_EVENT || + p.type === PacketType.BINARY_ACK) { + const start = i + 1; + while (str.charAt(++i) !== "-" && i != str.length) { } + const buf = str.substring(start, i); + if (buf != Number(buf) || str.charAt(i) !== "-") { + throw new Error("Illegal attachments"); + } + p.attachments = Number(buf); + } + // look up namespace (if any) + if ("/" === str.charAt(i + 1)) { + const start = i + 1; + while (++i) { + const c = str.charAt(i); + if ("," === c) + break; + if (i === str.length) + break; + } + p.nsp = str.substring(start, i); + } + else { + p.nsp = "/"; + } + // look up id + const next = str.charAt(i + 1); + if ("" !== next && Number(next) == next) { + const start = i + 1; + while (++i) { + const c = str.charAt(i); + if (null == c || Number(c) != c) { + --i; + break; + } + if (i === str.length) + break; + } + p.id = Number(str.substring(start, i + 1)); + } + // look up json data + if (str.charAt(++i)) { + const payload = this.tryParse(str.substr(i)); + if (Decoder.isPayloadValid(p.type, payload)) { + p.data = payload; + } + else { + throw new Error("invalid payload"); + } + } + debug("decoded %s as %j", str, p); + return p; + } + tryParse(str) { + try { + return JSON.parse(str, this.reviver); + } + catch (e) { + return false; + } + } + static isPayloadValid(type, payload) { + switch (type) { + case PacketType.CONNECT: + return isObject(payload); + case PacketType.DISCONNECT: + return payload === undefined; + case PacketType.CONNECT_ERROR: + return typeof payload === "string" || isObject(payload); + case PacketType.EVENT: + case PacketType.BINARY_EVENT: + return (Array.isArray(payload) && + (typeof payload[0] === "number" || + (typeof payload[0] === "string" && + RESERVED_EVENTS.indexOf(payload[0]) === -1))); + case PacketType.ACK: + case PacketType.BINARY_ACK: + return Array.isArray(payload); + } + } + /** + * Deallocates a parser's resources + */ + destroy() { + if (this.reconstructor) { + this.reconstructor.finishedReconstruction(); + this.reconstructor = null; + } + } + } + exports.Decoder = Decoder; + /** + * A manager of a binary event's 'buffer sequence'. Should + * be constructed whenever a packet of type BINARY_EVENT is + * decoded. + * + * @param {Object} packet + * @return {BinaryReconstructor} initialized reconstructor + */ + class BinaryReconstructor { + constructor(packet) { + this.packet = packet; + this.buffers = []; + this.reconPack = packet; + } + /** + * Method to be called when binary data received from connection + * after a BINARY_EVENT packet. + * + * @param {Buffer | ArrayBuffer} binData - the raw binary data received + * @return {null | Object} returns null if more binary data is expected or + * a reconstructed packet object if all buffers have been received. + */ + takeBinaryData(binData) { + this.buffers.push(binData); + if (this.buffers.length === this.reconPack.attachments) { + // done with buffer list + const packet = (0, binary_js_1.reconstructPacket)(this.reconPack, this.buffers); + this.finishedReconstruction(); + return packet; + } + return null; + } + /** + * Cleans up binary packet reconstruction variables. + */ + finishedReconstruction() { + this.reconPack = null; + this.buffers = []; + } + } + } (cjs)); + + var on$1 = {}; + + Object.defineProperty(on$1, "__esModule", { value: true }); + on$1.on = on; + function on(obj, ev, fn) { + obj.on(ev, fn); + return function subDestroy() { + obj.off(ev, fn); + }; + } + + var __importDefault$1 = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + }; + Object.defineProperty(socket$1, "__esModule", { value: true }); + socket$1.Socket = void 0; + const socket_io_parser_1 = cjs; + const on_js_1$1 = on$1; + const component_emitter_1$1 = require$$5; + const debug_1$1 = __importDefault$1(browserExports); // debug() + const debug$1 = (0, debug_1$1.default)("socket.io-client:socket"); // debug() + /** + * Internal events. + * These events can't be emitted by the user. + */ + const RESERVED_EVENTS = Object.freeze({ + connect: 1, + connect_error: 1, + disconnect: 1, + disconnecting: 1, + // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener + newListener: 1, + removeListener: 1, + }); + /** + * A Socket is the fundamental class for interacting with the server. + * + * A Socket belongs to a certain Namespace (by default /) and uses an underlying {@link Manager} to communicate. + * + * @example + * const socket = io(); + * + * socket.on("connect", () => { + * console.log("connected"); + * }); + * + * // send an event to the server + * socket.emit("foo", "bar"); + * + * socket.on("foobar", () => { + * // an event was received from the server + * }); + * + * // upon disconnection + * socket.on("disconnect", (reason) => { + * console.log(`disconnected due to ${reason}`); + * }); + */ + class Socket extends component_emitter_1$1.Emitter { + /** + * `Socket` constructor. + */ + constructor(io, nsp, opts) { + super(); + /** + * Whether the socket is currently connected to the server. + * + * @example + * const socket = io(); + * + * socket.on("connect", () => { + * console.log(socket.connected); // true + * }); + * + * socket.on("disconnect", () => { + * console.log(socket.connected); // false + * }); + */ + this.connected = false; + /** + * Whether the connection state was recovered after a temporary disconnection. In that case, any missed packets will + * be transmitted by the server. + */ + this.recovered = false; + /** + * Buffer for packets received before the CONNECT packet + */ + this.receiveBuffer = []; + /** + * Buffer for packets that will be sent once the socket is connected + */ + this.sendBuffer = []; + /** + * The queue of packets to be sent with retry in case of failure. + * + * Packets are sent one by one, each waiting for the server acknowledgement, in order to guarantee the delivery order. + * @private + */ + this._queue = []; + /** + * A sequence to generate the ID of the {@link QueuedPacket}. + * @private + */ + this._queueSeq = 0; + this.ids = 0; + /** + * A map containing acknowledgement handlers. + * + * The `withError` attribute is used to differentiate handlers that accept an error as first argument: + * + * - `socket.emit("test", (err, value) => { ... })` with `ackTimeout` option + * - `socket.timeout(5000).emit("test", (err, value) => { ... })` + * - `const value = await socket.emitWithAck("test")` + * + * From those that don't: + * + * - `socket.emit("test", (value) => { ... });` + * + * In the first case, the handlers will be called with an error when: + * + * - the timeout is reached + * - the socket gets disconnected + * + * In the second case, the handlers will be simply discarded upon disconnection, since the client will never receive + * an acknowledgement from the server. + * + * @private + */ + this.acks = {}; + this.flags = {}; + this.io = io; + this.nsp = nsp; + if (opts && opts.auth) { + this.auth = opts.auth; + } + this._opts = Object.assign({}, opts); + if (this.io._autoConnect) + this.open(); + } + /** + * Whether the socket is currently disconnected + * + * @example + * const socket = io(); + * + * socket.on("connect", () => { + * console.log(socket.disconnected); // false + * }); + * + * socket.on("disconnect", () => { + * console.log(socket.disconnected); // true + * }); + */ + get disconnected() { + return !this.connected; + } + /** + * Subscribe to open, close and packet events + * + * @private + */ + subEvents() { + if (this.subs) + return; + const io = this.io; + this.subs = [ + (0, on_js_1$1.on)(io, "open", this.onopen.bind(this)), + (0, on_js_1$1.on)(io, "packet", this.onpacket.bind(this)), + (0, on_js_1$1.on)(io, "error", this.onerror.bind(this)), + (0, on_js_1$1.on)(io, "close", this.onclose.bind(this)), + ]; + } + /** + * Whether the Socket will try to reconnect when its Manager connects or reconnects. + * + * @example + * const socket = io(); + * + * console.log(socket.active); // true + * + * socket.on("disconnect", (reason) => { + * if (reason === "io server disconnect") { + * // the disconnection was initiated by the server, you need to manually reconnect + * console.log(socket.active); // false + * } + * // else the socket will automatically try to reconnect + * console.log(socket.active); // true + * }); + */ + get active() { + return !!this.subs; + } + /** + * "Opens" the socket. + * + * @example + * const socket = io({ + * autoConnect: false + * }); + * + * socket.connect(); + */ + connect() { + if (this.connected) + return this; + this.subEvents(); + if (!this.io["_reconnecting"]) + this.io.open(); // ensure open + if ("open" === this.io._readyState) + this.onopen(); + return this; + } + /** + * Alias for {@link connect()}. + */ + open() { + return this.connect(); + } + /** + * Sends a `message` event. + * + * This method mimics the WebSocket.send() method. + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send + * + * @example + * socket.send("hello"); + * + * // this is equivalent to + * socket.emit("message", "hello"); + * + * @return self + */ + send(...args) { + args.unshift("message"); + this.emit.apply(this, args); + return this; + } + /** + * Override `emit`. + * If the event is in `events`, it's emitted normally. + * + * @example + * socket.emit("hello", "world"); + * + * // all serializable datastructures are supported (no need to call JSON.stringify) + * socket.emit("hello", 1, "2", { 3: ["4"], 5: Uint8Array.from([6]) }); + * + * // with an acknowledgement from the server + * socket.emit("hello", "world", (val) => { + * // ... + * }); + * + * @return self + */ + emit(ev, ...args) { + var _a, _b, _c; + if (RESERVED_EVENTS.hasOwnProperty(ev)) { + throw new Error('"' + ev.toString() + '" is a reserved event name'); + } + args.unshift(ev); + if (this._opts.retries && !this.flags.fromQueue && !this.flags.volatile) { + this._addToQueue(args); + return this; + } + const packet = { + type: socket_io_parser_1.PacketType.EVENT, + data: args, + }; + packet.options = {}; + packet.options.compress = this.flags.compress !== false; + // event ack callback + if ("function" === typeof args[args.length - 1]) { + const id = this.ids++; + debug$1("emitting packet with ack id %d", id); + const ack = args.pop(); + this._registerAckCallback(id, ack); + packet.id = id; + } + const isTransportWritable = (_b = (_a = this.io.engine) === null || _a === void 0 ? void 0 : _a.transport) === null || _b === void 0 ? void 0 : _b.writable; + const isConnected = this.connected && !((_c = this.io.engine) === null || _c === void 0 ? void 0 : _c._hasPingExpired()); + const discardPacket = this.flags.volatile && !isTransportWritable; + if (discardPacket) { + debug$1("discard packet as the transport is not currently writable"); + } + else if (isConnected) { + this.notifyOutgoingListeners(packet); + this.packet(packet); + } + else { + this.sendBuffer.push(packet); + } + this.flags = {}; + return this; + } + /** + * @private + */ + _registerAckCallback(id, ack) { + var _a; + const timeout = (_a = this.flags.timeout) !== null && _a !== void 0 ? _a : this._opts.ackTimeout; + if (timeout === undefined) { + this.acks[id] = ack; + return; + } + // @ts-ignore + const timer = this.io.setTimeoutFn(() => { + delete this.acks[id]; + for (let i = 0; i < this.sendBuffer.length; i++) { + if (this.sendBuffer[i].id === id) { + debug$1("removing packet with ack id %d from the buffer", id); + this.sendBuffer.splice(i, 1); + } + } + debug$1("event with ack id %d has timed out after %d ms", id, timeout); + ack.call(this, new Error("operation has timed out")); + }, timeout); + const fn = (...args) => { + // @ts-ignore + this.io.clearTimeoutFn(timer); + ack.apply(this, args); + }; + fn.withError = true; + this.acks[id] = fn; + } + /** + * Emits an event and waits for an acknowledgement + * + * @example + * // without timeout + * const response = await socket.emitWithAck("hello", "world"); + * + * // with a specific timeout + * try { + * const response = await socket.timeout(1000).emitWithAck("hello", "world"); + * } catch (err) { + * // the server did not acknowledge the event in the given delay + * } + * + * @return a Promise that will be fulfilled when the server acknowledges the event + */ + emitWithAck(ev, ...args) { + return new Promise((resolve, reject) => { + const fn = (arg1, arg2) => { + return arg1 ? reject(arg1) : resolve(arg2); + }; + fn.withError = true; + args.push(fn); + this.emit(ev, ...args); + }); + } + /** + * Add the packet to the queue. + * @param args + * @private + */ + _addToQueue(args) { + let ack; + if (typeof args[args.length - 1] === "function") { + ack = args.pop(); + } + const packet = { + id: this._queueSeq++, + tryCount: 0, + pending: false, + args, + flags: Object.assign({ fromQueue: true }, this.flags), + }; + args.push((err, ...responseArgs) => { + if (packet !== this._queue[0]) { + // the packet has already been acknowledged + return; + } + const hasError = err !== null; + if (hasError) { + if (packet.tryCount > this._opts.retries) { + debug$1("packet [%d] is discarded after %d tries", packet.id, packet.tryCount); + this._queue.shift(); + if (ack) { + ack(err); + } + } + } + else { + debug$1("packet [%d] was successfully sent", packet.id); + this._queue.shift(); + if (ack) { + ack(null, ...responseArgs); + } + } + packet.pending = false; + return this._drainQueue(); + }); + this._queue.push(packet); + this._drainQueue(); + } + /** + * Send the first packet of the queue, and wait for an acknowledgement from the server. + * @param force - whether to resend a packet that has not been acknowledged yet + * + * @private + */ + _drainQueue(force = false) { + debug$1("draining queue"); + if (!this.connected || this._queue.length === 0) { + return; + } + const packet = this._queue[0]; + if (packet.pending && !force) { + debug$1("packet [%d] has already been sent and is waiting for an ack", packet.id); + return; + } + packet.pending = true; + packet.tryCount++; + debug$1("sending packet [%d] (try n°%d)", packet.id, packet.tryCount); + this.flags = packet.flags; + this.emit.apply(this, packet.args); + } + /** + * Sends a packet. + * + * @param packet + * @private + */ + packet(packet) { + packet.nsp = this.nsp; + this.io._packet(packet); + } + /** + * Called upon engine `open`. + * + * @private + */ + onopen() { + debug$1("transport is open - connecting"); + if (typeof this.auth == "function") { + this.auth((data) => { + this._sendConnectPacket(data); + }); + } + else { + this._sendConnectPacket(this.auth); + } + } + /** + * Sends a CONNECT packet to initiate the Socket.IO session. + * + * @param data + * @private + */ + _sendConnectPacket(data) { + this.packet({ + type: socket_io_parser_1.PacketType.CONNECT, + data: this._pid + ? Object.assign({ pid: this._pid, offset: this._lastOffset }, data) + : data, + }); + } + /** + * Called upon engine or manager `error`. + * + * @param err + * @private + */ + onerror(err) { + if (!this.connected) { + this.emitReserved("connect_error", err); + } + } + /** + * Called upon engine `close`. + * + * @param reason + * @param description + * @private + */ + onclose(reason, description) { + debug$1("close (%s)", reason); + this.connected = false; + delete this.id; + this.emitReserved("disconnect", reason, description); + this._clearAcks(); + } + /** + * Clears the acknowledgement handlers upon disconnection, since the client will never receive an acknowledgement from + * the server. + * + * @private + */ + _clearAcks() { + Object.keys(this.acks).forEach((id) => { + const isBuffered = this.sendBuffer.some((packet) => String(packet.id) === id); + if (!isBuffered) { + // note: handlers that do not accept an error as first argument are ignored here + const ack = this.acks[id]; + delete this.acks[id]; + if (ack.withError) { + ack.call(this, new Error("socket has been disconnected")); + } + } + }); + } + /** + * Called with socket packet. + * + * @param packet + * @private + */ + onpacket(packet) { + const sameNamespace = packet.nsp === this.nsp; + if (!sameNamespace) + return; + switch (packet.type) { + case socket_io_parser_1.PacketType.CONNECT: + if (packet.data && packet.data.sid) { + this.onconnect(packet.data.sid, packet.data.pid); + } + else { + this.emitReserved("connect_error", new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)")); + } + break; + case socket_io_parser_1.PacketType.EVENT: + case socket_io_parser_1.PacketType.BINARY_EVENT: + this.onevent(packet); + break; + case socket_io_parser_1.PacketType.ACK: + case socket_io_parser_1.PacketType.BINARY_ACK: + this.onack(packet); + break; + case socket_io_parser_1.PacketType.DISCONNECT: + this.ondisconnect(); + break; + case socket_io_parser_1.PacketType.CONNECT_ERROR: + this.destroy(); + const err = new Error(packet.data.message); + // @ts-ignore + err.data = packet.data.data; + this.emitReserved("connect_error", err); + break; + } + } + /** + * Called upon a server event. + * + * @param packet + * @private + */ + onevent(packet) { + const args = packet.data || []; + debug$1("emitting event %j", args); + if (null != packet.id) { + debug$1("attaching ack callback to event"); + args.push(this.ack(packet.id)); + } + if (this.connected) { + this.emitEvent(args); + } + else { + this.receiveBuffer.push(Object.freeze(args)); + } + } + emitEvent(args) { + if (this._anyListeners && this._anyListeners.length) { + const listeners = this._anyListeners.slice(); + for (const listener of listeners) { + listener.apply(this, args); + } + } + super.emit.apply(this, args); + if (this._pid && args.length && typeof args[args.length - 1] === "string") { + this._lastOffset = args[args.length - 1]; + } + } + /** + * Produces an ack callback to emit with an event. + * + * @private + */ + ack(id) { + const self = this; + let sent = false; + return function (...args) { + // prevent double callbacks + if (sent) + return; + sent = true; + debug$1("sending ack %j", args); + self.packet({ + type: socket_io_parser_1.PacketType.ACK, + id: id, + data: args, + }); + }; + } + /** + * Called upon a server acknowledgement. + * + * @param packet + * @private + */ + onack(packet) { + const ack = this.acks[packet.id]; + if (typeof ack !== "function") { + debug$1("bad ack %s", packet.id); + return; + } + delete this.acks[packet.id]; + debug$1("calling ack %s with %j", packet.id, packet.data); + // @ts-ignore FIXME ack is incorrectly inferred as 'never' + if (ack.withError) { + packet.data.unshift(null); + } + // @ts-ignore + ack.apply(this, packet.data); + } + /** + * Called upon server connect. + * + * @private + */ + onconnect(id, pid) { + debug$1("socket connected with id %s", id); + this.id = id; + this.recovered = pid && this._pid === pid; + this._pid = pid; // defined only if connection state recovery is enabled + this.connected = true; + this.emitBuffered(); + this.emitReserved("connect"); + this._drainQueue(true); + } + /** + * Emit buffered events (received and emitted). + * + * @private + */ + emitBuffered() { + this.receiveBuffer.forEach((args) => this.emitEvent(args)); + this.receiveBuffer = []; + this.sendBuffer.forEach((packet) => { + this.notifyOutgoingListeners(packet); + this.packet(packet); + }); + this.sendBuffer = []; + } + /** + * Called upon server disconnect. + * + * @private + */ + ondisconnect() { + debug$1("server disconnect (%s)", this.nsp); + this.destroy(); + this.onclose("io server disconnect"); + } + /** + * Called upon forced client/server side disconnections, + * this method ensures the manager stops tracking us and + * that reconnections don't get triggered for this. + * + * @private + */ + destroy() { + if (this.subs) { + // clean subscriptions to avoid reconnections + this.subs.forEach((subDestroy) => subDestroy()); + this.subs = undefined; + } + this.io["_destroy"](this); + } + /** + * Disconnects the socket manually. In that case, the socket will not try to reconnect. + * + * If this is the last active Socket instance of the {@link Manager}, the low-level connection will be closed. + * + * @example + * const socket = io(); + * + * socket.on("disconnect", (reason) => { + * // console.log(reason); prints "io client disconnect" + * }); + * + * socket.disconnect(); + * + * @return self + */ + disconnect() { + if (this.connected) { + debug$1("performing disconnect (%s)", this.nsp); + this.packet({ type: socket_io_parser_1.PacketType.DISCONNECT }); + } + // remove socket from pool + this.destroy(); + if (this.connected) { + // fire events + this.onclose("io client disconnect"); + } + return this; + } + /** + * Alias for {@link disconnect()}. + * + * @return self + */ + close() { + return this.disconnect(); + } + /** + * Sets the compress flag. + * + * @example + * socket.compress(false).emit("hello"); + * + * @param compress - if `true`, compresses the sending data + * @return self + */ + compress(compress) { + this.flags.compress = compress; + return this; + } + /** + * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not + * ready to send messages. + * + * @example + * socket.volatile.emit("hello"); // the server may or may not receive it + * + * @returns self + */ + get volatile() { + this.flags.volatile = true; + return this; + } + /** + * Sets a modifier for a subsequent event emission that the callback will be called with an error when the + * given number of milliseconds have elapsed without an acknowledgement from the server: + * + * @example + * socket.timeout(5000).emit("my-event", (err) => { + * if (err) { + * // the server did not acknowledge the event in the given delay + * } + * }); + * + * @returns self + */ + timeout(timeout) { + this.flags.timeout = timeout; + return this; + } + /** + * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the + * callback. + * + * @example + * socket.onAny((event, ...args) => { + * console.log(`got ${event}`); + * }); + * + * @param listener + */ + onAny(listener) { + this._anyListeners = this._anyListeners || []; + this._anyListeners.push(listener); + return this; + } + /** + * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the + * callback. The listener is added to the beginning of the listeners array. + * + * @example + * socket.prependAny((event, ...args) => { + * console.log(`got event ${event}`); + * }); + * + * @param listener + */ + prependAny(listener) { + this._anyListeners = this._anyListeners || []; + this._anyListeners.unshift(listener); + return this; + } + /** + * Removes the listener that will be fired when any event is emitted. + * + * @example + * const catchAllListener = (event, ...args) => { + * console.log(`got event ${event}`); + * } + * + * socket.onAny(catchAllListener); + * + * // remove a specific listener + * socket.offAny(catchAllListener); + * + * // or remove all listeners + * socket.offAny(); + * + * @param listener + */ + offAny(listener) { + if (!this._anyListeners) { + return this; + } + if (listener) { + const listeners = this._anyListeners; + for (let i = 0; i < listeners.length; i++) { + if (listener === listeners[i]) { + listeners.splice(i, 1); + return this; + } + } + } + else { + this._anyListeners = []; + } + return this; + } + /** + * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated, + * e.g. to remove listeners. + */ + listenersAny() { + return this._anyListeners || []; + } + /** + * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the + * callback. + * + * Note: acknowledgements sent to the server are not included. + * + * @example + * socket.onAnyOutgoing((event, ...args) => { + * console.log(`sent event ${event}`); + * }); + * + * @param listener + */ + onAnyOutgoing(listener) { + this._anyOutgoingListeners = this._anyOutgoingListeners || []; + this._anyOutgoingListeners.push(listener); + return this; + } + /** + * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the + * callback. The listener is added to the beginning of the listeners array. + * + * Note: acknowledgements sent to the server are not included. + * + * @example + * socket.prependAnyOutgoing((event, ...args) => { + * console.log(`sent event ${event}`); + * }); + * + * @param listener + */ + prependAnyOutgoing(listener) { + this._anyOutgoingListeners = this._anyOutgoingListeners || []; + this._anyOutgoingListeners.unshift(listener); + return this; + } + /** + * Removes the listener that will be fired when any event is emitted. + * + * @example + * const catchAllListener = (event, ...args) => { + * console.log(`sent event ${event}`); + * } + * + * socket.onAnyOutgoing(catchAllListener); + * + * // remove a specific listener + * socket.offAnyOutgoing(catchAllListener); + * + * // or remove all listeners + * socket.offAnyOutgoing(); + * + * @param [listener] - the catch-all listener (optional) + */ + offAnyOutgoing(listener) { + if (!this._anyOutgoingListeners) { + return this; + } + if (listener) { + const listeners = this._anyOutgoingListeners; + for (let i = 0; i < listeners.length; i++) { + if (listener === listeners[i]) { + listeners.splice(i, 1); + return this; + } + } + } + else { + this._anyOutgoingListeners = []; + } + return this; + } + /** + * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated, + * e.g. to remove listeners. + */ + listenersAnyOutgoing() { + return this._anyOutgoingListeners || []; + } + /** + * Notify the listeners for each packet sent + * + * @param packet + * + * @private + */ + notifyOutgoingListeners(packet) { + if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) { + const listeners = this._anyOutgoingListeners.slice(); + for (const listener of listeners) { + listener.apply(this, packet.data); + } + } + } + } + socket$1.Socket = Socket; + + var backo2 = {}; + + /** + * Initialize backoff timer with `opts`. + * + * - `min` initial timeout in milliseconds [100] + * - `max` max timeout [10000] + * - `jitter` [0] + * - `factor` [2] + * + * @param {Object} opts + * @api public + */ + Object.defineProperty(backo2, "__esModule", { value: true }); + backo2.Backoff = Backoff; + function Backoff(opts) { + opts = opts || {}; + this.ms = opts.min || 100; + this.max = opts.max || 10000; + this.factor = opts.factor || 2; + this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0; + this.attempts = 0; + } + /** + * Return the backoff duration. + * + * @return {Number} + * @api public + */ + Backoff.prototype.duration = function () { + var ms = this.ms * Math.pow(this.factor, this.attempts++); + if (this.jitter) { + var rand = Math.random(); + var deviation = Math.floor(rand * this.jitter * ms); + ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation; + } + return Math.min(ms, this.max) | 0; + }; + /** + * Reset the number of attempts. + * + * @api public + */ + Backoff.prototype.reset = function () { + this.attempts = 0; + }; + /** + * Set the minimum duration + * + * @api public + */ + Backoff.prototype.setMin = function (min) { + this.ms = min; + }; + /** + * Set the maximum duration + * + * @api public + */ + Backoff.prototype.setMax = function (max) { + this.max = max; + }; + /** + * Set the jitter + * + * @api public + */ + Backoff.prototype.setJitter = function (jitter) { + this.jitter = jitter; + }; + + var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); + }) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; + })); + var __setModuleDefault = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); + }) : function(o, v) { + o["default"] = v; + }); + var __importStar = (commonjsGlobal && commonjsGlobal.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; + }; + var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + }; + Object.defineProperty(manager, "__esModule", { value: true }); + manager.Manager = void 0; + const engine_io_client_1 = cjs$2; + const socket_js_1 = socket$1; + const parser = __importStar(cjs); + const on_js_1 = on$1; + const backo2_js_1 = backo2; + const component_emitter_1 = require$$5; + const debug_1 = __importDefault(browserExports); // debug() + const debug = (0, debug_1.default)("socket.io-client:manager"); // debug() + class Manager$1 extends component_emitter_1.Emitter { + constructor(uri, opts) { + var _a; + super(); + this.nsps = {}; + this.subs = []; + if (uri && "object" === typeof uri) { + opts = uri; + uri = undefined; + } + opts = opts || {}; + opts.path = opts.path || "/socket.io"; + this.opts = opts; + (0, engine_io_client_1.installTimerFunctions)(this, opts); + this.reconnection(opts.reconnection !== false); + this.reconnectionAttempts(opts.reconnectionAttempts || Infinity); + this.reconnectionDelay(opts.reconnectionDelay || 1000); + this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000); + this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5); + this.backoff = new backo2_js_1.Backoff({ + min: this.reconnectionDelay(), + max: this.reconnectionDelayMax(), + jitter: this.randomizationFactor(), + }); + this.timeout(null == opts.timeout ? 20000 : opts.timeout); + this._readyState = "closed"; + this.uri = uri; + const _parser = opts.parser || parser; + this.encoder = new _parser.Encoder(); + this.decoder = new _parser.Decoder(); + this._autoConnect = opts.autoConnect !== false; + if (this._autoConnect) + this.open(); + } + reconnection(v) { + if (!arguments.length) + return this._reconnection; + this._reconnection = !!v; + if (!v) { + this.skipReconnect = true; + } + return this; + } + reconnectionAttempts(v) { + if (v === undefined) + return this._reconnectionAttempts; + this._reconnectionAttempts = v; + return this; + } + reconnectionDelay(v) { + var _a; + if (v === undefined) + return this._reconnectionDelay; + this._reconnectionDelay = v; + (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v); + return this; + } + randomizationFactor(v) { + var _a; + if (v === undefined) + return this._randomizationFactor; + this._randomizationFactor = v; + (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v); + return this; + } + reconnectionDelayMax(v) { + var _a; + if (v === undefined) + return this._reconnectionDelayMax; + this._reconnectionDelayMax = v; + (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v); + return this; + } + timeout(v) { + if (!arguments.length) + return this._timeout; + this._timeout = v; + return this; + } + /** + * Starts trying to reconnect if reconnection is enabled and we have not + * started reconnecting yet + * + * @private + */ + maybeReconnectOnOpen() { + // Only try to reconnect if it's the first time we're connecting + if (!this._reconnecting && + this._reconnection && + this.backoff.attempts === 0) { + // keeps reconnection from firing twice for the same reconnection loop + this.reconnect(); + } + } + /** + * Sets the current transport `socket`. + * + * @param {Function} fn - optional, callback + * @return self + * @public + */ + open(fn) { + debug("readyState %s", this._readyState); + if (~this._readyState.indexOf("open")) + return this; + debug("opening %s", this.uri); + this.engine = new engine_io_client_1.Socket(this.uri, this.opts); + const socket = this.engine; + const self = this; + this._readyState = "opening"; + this.skipReconnect = false; + // emit `open` + const openSubDestroy = (0, on_js_1.on)(socket, "open", function () { + self.onopen(); + fn && fn(); + }); + const onError = (err) => { + debug("error"); + this.cleanup(); + this._readyState = "closed"; + this.emitReserved("error", err); + if (fn) { + fn(err); + } + else { + // Only do this if there is no fn to handle the error + this.maybeReconnectOnOpen(); + } + }; + // emit `error` + const errorSub = (0, on_js_1.on)(socket, "error", onError); + if (false !== this._timeout) { + const timeout = this._timeout; + debug("connect attempt will timeout after %d", timeout); + // set timer + const timer = this.setTimeoutFn(() => { + debug("connect attempt timed out after %d", timeout); + openSubDestroy(); + onError(new Error("timeout")); + socket.close(); + }, timeout); + if (this.opts.autoUnref) { + timer.unref(); + } + this.subs.push(() => { + this.clearTimeoutFn(timer); + }); + } + this.subs.push(openSubDestroy); + this.subs.push(errorSub); + return this; + } + /** + * Alias for open() + * + * @return self + * @public + */ + connect(fn) { + return this.open(fn); + } + /** + * Called upon transport open. + * + * @private + */ + onopen() { + debug("open"); + // clear old subs + this.cleanup(); + // mark as open + this._readyState = "open"; + this.emitReserved("open"); + // add new subs + const socket = this.engine; + this.subs.push((0, on_js_1.on)(socket, "ping", this.onping.bind(this)), (0, on_js_1.on)(socket, "data", this.ondata.bind(this)), (0, on_js_1.on)(socket, "error", this.onerror.bind(this)), (0, on_js_1.on)(socket, "close", this.onclose.bind(this)), + // @ts-ignore + (0, on_js_1.on)(this.decoder, "decoded", this.ondecoded.bind(this))); + } + /** + * Called upon a ping. + * + * @private + */ + onping() { + this.emitReserved("ping"); + } + /** + * Called with data. + * + * @private + */ + ondata(data) { + try { + this.decoder.add(data); + } + catch (e) { + this.onclose("parse error", e); + } + } + /** + * Called when parser fully decodes a packet. + * + * @private + */ + ondecoded(packet) { + // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a "parse error" + (0, engine_io_client_1.nextTick)(() => { + this.emitReserved("packet", packet); + }, this.setTimeoutFn); + } + /** + * Called upon socket error. + * + * @private + */ + onerror(err) { + debug("error", err); + this.emitReserved("error", err); + } + /** + * Creates a new socket for the given `nsp`. + * + * @return {Socket} + * @public + */ + socket(nsp, opts) { + let socket = this.nsps[nsp]; + if (!socket) { + socket = new socket_js_1.Socket(this, nsp, opts); + this.nsps[nsp] = socket; + } + else if (this._autoConnect && !socket.active) { + socket.connect(); + } + return socket; + } + /** + * Called upon a socket close. + * + * @param socket + * @private + */ + _destroy(socket) { + const nsps = Object.keys(this.nsps); + for (const nsp of nsps) { + const socket = this.nsps[nsp]; + if (socket.active) { + debug("socket %s is still active, skipping close", nsp); + return; + } + } + this._close(); + } + /** + * Writes a packet. + * + * @param packet + * @private + */ + _packet(packet) { + debug("writing packet %j", packet); + const encodedPackets = this.encoder.encode(packet); + for (let i = 0; i < encodedPackets.length; i++) { + this.engine.write(encodedPackets[i], packet.options); + } + } + /** + * Clean up transport subscriptions and packet buffer. + * + * @private + */ + cleanup() { + debug("cleanup"); + this.subs.forEach((subDestroy) => subDestroy()); + this.subs.length = 0; + this.decoder.destroy(); + } + /** + * Close the current socket. + * + * @private + */ + _close() { + debug("disconnect"); + this.skipReconnect = true; + this._reconnecting = false; + this.onclose("forced close"); + } + /** + * Alias for close() + * + * @private + */ + disconnect() { + return this._close(); + } + /** + * Called when: + * + * - the low-level engine is closed + * - the parser encountered a badly formatted packet + * - all sockets are disconnected + * + * @private + */ + onclose(reason, description) { + var _a; + debug("closed due to %s", reason); + this.cleanup(); + (_a = this.engine) === null || _a === void 0 ? void 0 : _a.close(); + this.backoff.reset(); + this._readyState = "closed"; + this.emitReserved("close", reason, description); + if (this._reconnection && !this.skipReconnect) { + this.reconnect(); + } + } + /** + * Attempt a reconnection. + * + * @private + */ + reconnect() { + if (this._reconnecting || this.skipReconnect) + return this; + const self = this; + if (this.backoff.attempts >= this._reconnectionAttempts) { + debug("reconnect failed"); + this.backoff.reset(); + this.emitReserved("reconnect_failed"); + this._reconnecting = false; + } + else { + const delay = this.backoff.duration(); + debug("will wait %dms before reconnect attempt", delay); + this._reconnecting = true; + const timer = this.setTimeoutFn(() => { + if (self.skipReconnect) + return; + debug("attempting reconnect"); + this.emitReserved("reconnect_attempt", self.backoff.attempts); + // check again for the case socket closed in above events + if (self.skipReconnect) + return; + self.open((err) => { + if (err) { + debug("reconnect attempt error"); + self._reconnecting = false; + self.reconnect(); + this.emitReserved("reconnect_error", err); + } + else { + debug("reconnect success"); + self.onreconnect(); + } + }); + }, delay); + if (this.opts.autoUnref) { + timer.unref(); + } + this.subs.push(() => { + this.clearTimeoutFn(timer); + }); + } + } + /** + * Called upon successful reconnect. + * + * @private + */ + onreconnect() { + const attempt = this.backoff.attempts; + this._reconnecting = false; + this.backoff.reset(); + this.emitReserved("reconnect", attempt); + } + } + manager.Manager = Manager$1; + + cjs$3.exports; + + (function (module, exports) { + var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.WebTransport = exports.WebSocket = exports.NodeWebSocket = exports.XHR = exports.NodeXHR = exports.Fetch = exports.Socket = exports.Manager = exports.protocol = void 0; + exports.io = lookup; + exports.connect = lookup; + exports.default = lookup; + const url_js_1 = url$1; + const manager_js_1 = manager; + Object.defineProperty(exports, "Manager", { enumerable: true, get: function () { return manager_js_1.Manager; } }); + const socket_js_1 = socket$1; + Object.defineProperty(exports, "Socket", { enumerable: true, get: function () { return socket_js_1.Socket; } }); + const debug_1 = __importDefault(browserExports); // debug() + const debug = (0, debug_1.default)("socket.io-client"); // debug() + /** + * Managers cache. + */ + const cache = {}; + function lookup(uri, opts) { + if (typeof uri === "object") { + opts = uri; + uri = undefined; + } + opts = opts || {}; + const parsed = (0, url_js_1.url)(uri, opts.path || "/socket.io"); + const source = parsed.source; + const id = parsed.id; + const path = parsed.path; + const sameNamespace = cache[id] && path in cache[id]["nsps"]; + const newConnection = opts.forceNew || + opts["force new connection"] || + false === opts.multiplex || + sameNamespace; + let io; + if (newConnection) { + debug("ignoring socket cache for %s", source); + io = new manager_js_1.Manager(source, opts); + } + else { + if (!cache[id]) { + debug("new io instance for %s", source); + cache[id] = new manager_js_1.Manager(source, opts); + } + io = cache[id]; + } + if (parsed.query && !opts.query) { + opts.query = parsed.queryKey; + } + return io.socket(parsed.path, opts); + } + // so that "lookup" can be used both as a function (e.g. `io(...)`) and as a + // namespace (e.g. `io.connect(...)`), for backward compatibility + Object.assign(lookup, { + Manager: manager_js_1.Manager, + Socket: socket_js_1.Socket, + io: lookup, + connect: lookup, + }); + /** + * Protocol version. + * + * @public + */ + var socket_io_parser_1 = cjs; + Object.defineProperty(exports, "protocol", { enumerable: true, get: function () { return socket_io_parser_1.protocol; } }); + var engine_io_client_1 = cjs$2; + Object.defineProperty(exports, "Fetch", { enumerable: true, get: function () { return engine_io_client_1.Fetch; } }); + Object.defineProperty(exports, "NodeXHR", { enumerable: true, get: function () { return engine_io_client_1.NodeXHR; } }); + Object.defineProperty(exports, "XHR", { enumerable: true, get: function () { return engine_io_client_1.XHR; } }); + Object.defineProperty(exports, "NodeWebSocket", { enumerable: true, get: function () { return engine_io_client_1.NodeWebSocket; } }); + Object.defineProperty(exports, "WebSocket", { enumerable: true, get: function () { return engine_io_client_1.WebSocket; } }); + Object.defineProperty(exports, "WebTransport", { enumerable: true, get: function () { return engine_io_client_1.WebTransport; } }); + + module.exports = lookup; + } (cjs$3, cjs$3.exports)); + + var cjsExports = cjs$3.exports; + + var menuBar = {}; + + var Index = {}; + + var name = "morphux"; + var version = "2025.9.1"; + var description = "Standardized Morphix UX framework."; + var main = "dist/Index.js"; + var types = "dist/index.d.ts"; + var scripts = { + build: "sass scss/index.scss style.css && tsc && npm run bundle", + "watch-ts": "tsc -w", + "watch-scss": "sass scss/index.scss style.css -w", + "watch-rollup": "rollup -c --watch", + bundle: "npm run bundle-ts && npm run bundle-defenitions", + "bundle-ts": "rollup --config rollup.config.js", + "bundle-defenitions": "dts-bundle-generator dist/index.d.ts -o bundle.d.ts --no-check" + }; + var author = ""; + var license = "ISC"; + var dependencies = { + "@egjs/hammerjs": "^2.0.17", + "@rollup/plugin-commonjs": "^25.0.7", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.1.0", + "@types/node": "^20.12.8", + "material-symbols": "^0.17.4", + rollup: "^2.79.1", + "rollup-plugin-terser": "^7.0.2", + sortablejs: "^1.2.1" + }; + var devDependencies = { + "@types/sortablejs": "^1.15.8", + "dts-bundle-generator": "^9.5.1" + }; + var require$$0$1 = { + name: name, + version: version, + description: description, + main: main, + types: types, + scripts: scripts, + author: author, + license: license, + dependencies: dependencies, + devDependencies: devDependencies + }; + + var Morph_Components = {}; + + var Component_Button = {}; + + var CE = {}; + + Object.defineProperty(CE, "__esModule", { value: true }); + CE.ce = ce; + function ce(tagName, classList, attributes, innerText, innerHTML, style) { + var _a; + var element = document.createElement(tagName); + if (classList) + if (typeof classList == 'string') + element.classList.add(classList); + else + (_a = element.classList).add.apply(_a, classList); + if (attributes) + for (var key in attributes) + if (element[key] != undefined) + element[key] = attributes[key]; + else + element.setAttribute(key, String(attributes[key])); + if (innerText) + element.innerText = innerText; + if (innerHTML) + element.innerHTML = innerHTML; + if (style != undefined) + for (var key in style) + element.style[key] = style[key]; + return element; + } + + var baseComponent = {}; + + Object.defineProperty(baseComponent, "__esModule", { value: true }); + baseComponent.MUXComponent = void 0; + var MUXComponent = /** @class */ (function () { + function MUXComponent() { + this._events = {}; + } + MUXComponent.prototype.callEvent = function (event) { + var _a; + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + if (this._events[event] != undefined) { + (_a = this._events)[event].apply(_a, args); + } + }; + MUXComponent.prototype.on = function (event, callback) { + this._events[event] = callback; + }; + MUXComponent.prototype.destroy = function () { + this.container.remove(); + }; + return MUXComponent; + }()); + baseComponent.MUXComponent = MUXComponent; + + var __extends$9 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Button, "__esModule", { value: true }); + Component_Button.ComponentButton = void 0; + var CE_1$9 = CE; + var baseComponent_1$9 = baseComponent; + var ComponentButton = /** @class */ (function (_super) { + __extends$9(ComponentButton, _super); + function ComponentButton(options) { + var _a, _b; + var _this = _super.call(this) || this; + _this.mode = 'normal'; + _this.mode = (_a = options === null || options === void 0 ? void 0 : options.mode) !== null && _a !== void 0 ? _a : 'normal'; + var target = (_b = options === null || options === void 0 ? void 0 : options.target) !== null && _b !== void 0 ? _b : ''; + _this.container = (0, CE_1$9.ce)(typeof target === 'string' ? 'a' : 'div', [ + 'mux_button', + "mux_".concat(_this.mode), + ]); + if ((options === null || options === void 0 ? void 0 : options.materialIcon) != undefined) + _this.container.append((0, CE_1$9.ce)('span', 'material-symbols-outlined', null, options.materialIcon)); + _this.container.appendChild((0, CE_1$9.ce)('span', ['mux_text', 'mux_normal'], null, options.content)); + _this.container.onclick = function (e) { + e.preventDefault(); + if (_this.mode == 'disabled') + return; + if (typeof target === 'function') + target(); + else { + if ((options === null || options === void 0 ? void 0 : options.openInNewTab) == true) + window.open(target, '_blank'); + else + window.location.href = target; + } + }; + if (typeof target === 'string') + _this.container.setAttribute('href', target); + return _this; + } + ComponentButton.prototype.updateContent = function (content) { + this.container.innerHTML = content; + }; + ComponentButton.prototype.updateMode = function (mode) { + this.mode = mode; + this.container.classList.remove('mux_normal'); + this.container.classList.remove('mux_highlight'); + this.container.classList.remove('mux_secondary'); + this.container.classList.remove('mux_disabled'); + this.container.classList.add("mux_".concat(mode)); + }; + return ComponentButton; + }(baseComponent_1$9.MUXComponent)); + Component_Button.ComponentButton = ComponentButton; + + var Component_Cards = {}; + + var TextHighlighter = {}; + + Object.defineProperty(TextHighlighter, "__esModule", { value: true }); + TextHighlighter.generateTextHighlights = generateTextHighlights; + function generateTextHighlights(originalText, additionalClassnames) { + var _a; + if (additionalClassnames === void 0) { additionalClassnames = []; } + var div = document.createElement('div'); + (_a = div.classList).add.apply(_a, additionalClassnames); + var remainingStr = originalText; + var regex = /\<(.*?)\>/; + while (remainingStr.length) { + var match = regex.exec(remainingStr); + if (match) { + var normalText = remainingStr.substring(0, match.index); + if (normalText) { + var normalSpan = document.createElement('span'); + normalSpan.className = 'normal'; + normalSpan.textContent = normalText; + div.appendChild(normalSpan); + } + var highlightSpan = document.createElement('span'); + highlightSpan.className = 'highlight'; + highlightSpan.textContent = match[1]; + div.appendChild(highlightSpan); + remainingStr = remainingStr.substring(match.index + match[0].length); + } + else { + var normalSpan = document.createElement('span'); + normalSpan.className = 'normal'; + normalSpan.textContent = remainingStr; + div.appendChild(normalSpan); + break; + } + } + return div; + } + + var Sortable$2 = {exports: {}}; + + /**! + * Sortable + * @author RubaXa + * @license MIT + */ + Sortable$2.exports; + + (function (module) { + (function (factory) { + + { + module.exports = factory(); + } + })(function () { + + var dragEl, + ghostEl, + cloneEl, + rootEl, + nextEl, + + scrollEl, + scrollParentEl, + + lastEl, + lastCSS, + + oldIndex, + newIndex, + + activeGroup, + autoScroll = {}, + + tapEvt, + touchEvt, + + /** @const */ + RSPACE = /\s+/g, + + expando = 'Sortable' + (new Date).getTime(), + + win = window, + document = win.document, + parseInt = win.parseInt, + + supportDraggable = !!('draggable' in document.createElement('div')), + + _silent = false, + + abs = Math.abs, + slice = [].slice, + + touchDragOverListeners = [], + + _autoScroll = _throttle(function (/**Event*/evt, /**Object*/options, /**HTMLElement*/rootEl) { + // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 + if (rootEl && options.scroll) { + var el, + rect, + sens = options.scrollSensitivity, + speed = options.scrollSpeed, + + x = evt.clientX, + y = evt.clientY, + + winWidth = window.innerWidth, + winHeight = window.innerHeight, + + vx, + vy + ; + + // Delect scrollEl + if (scrollParentEl !== rootEl) { + scrollEl = options.scroll; + scrollParentEl = rootEl; + + if (scrollEl === true) { + scrollEl = rootEl; + + do { + if ((scrollEl.offsetWidth < scrollEl.scrollWidth) || + (scrollEl.offsetHeight < scrollEl.scrollHeight) + ) { + break; + } + /* jshint boss:true */ + } while (scrollEl = scrollEl.parentNode); + } + } + + if (scrollEl) { + el = scrollEl; + rect = scrollEl.getBoundingClientRect(); + vx = (abs(rect.right - x) <= sens) - (abs(rect.left - x) <= sens); + vy = (abs(rect.bottom - y) <= sens) - (abs(rect.top - y) <= sens); + } + + + if (!(vx || vy)) { + vx = (winWidth - x <= sens) - (x <= sens); + vy = (winHeight - y <= sens) - (y <= sens); + + /* jshint expr:true */ + (vx || vy) && (el = win); + } + + + if (autoScroll.vx !== vx || autoScroll.vy !== vy || autoScroll.el !== el) { + autoScroll.el = el; + autoScroll.vx = vx; + autoScroll.vy = vy; + + clearInterval(autoScroll.pid); + + if (el) { + autoScroll.pid = setInterval(function () { + if (el === win) { + win.scrollTo(win.pageXOffset + vx * speed, win.pageYOffset + vy * speed); + } else { + vy && (el.scrollTop += vy * speed); + vx && (el.scrollLeft += vx * speed); + } + }, 24); + } + } + } + }, 30) + ; + + + + /** + * @class Sortable + * @param {HTMLElement} el + * @param {Object} [options] + */ + function Sortable(el, options) { + this.el = el; // root element + this.options = options = _extend({}, options); + + + // Export instance + el[expando] = this; + + + // Default options + var defaults = { + group: Math.random(), + sort: true, + disabled: false, + store: null, + handle: null, + scroll: true, + scrollSensitivity: 30, + scrollSpeed: 10, + draggable: /[uo]l/i.test(el.nodeName) ? 'li' : '>*', + ghostClass: 'sortable-ghost', + ignore: 'a, img', + filter: null, + animation: 0, + setData: function (dataTransfer, dragEl) { + dataTransfer.setData('Text', dragEl.textContent); + }, + dropBubble: false, + dragoverBubble: false, + dataIdAttr: 'data-id', + delay: 0 + }; + + + // Set default options + for (var name in defaults) { + !(name in options) && (options[name] = defaults[name]); + } + + + var group = options.group; + + if (!group || typeof group != 'object') { + group = options.group = { name: group }; + } + + + ['pull', 'put'].forEach(function (key) { + if (!(key in group)) { + group[key] = true; + } + }); + + + options.groups = ' ' + group.name + (group.put.join ? ' ' + group.put.join(' ') : '') + ' '; + + + // Bind all private methods + for (var fn in this) { + if (fn.charAt(0) === '_') { + this[fn] = _bind(this, this[fn]); + } + } + + + // Bind events + _on(el, 'mousedown', this._onTapStart); + _on(el, 'touchstart', this._onTapStart); + + _on(el, 'dragover', this); + _on(el, 'dragenter', this); + + touchDragOverListeners.push(this._onDragOver); + + // Restore sorting + options.store && this.sort(options.store.get(this)); + } + + + Sortable.prototype = /** @lends Sortable.prototype */ { + constructor: Sortable, + + _onTapStart: function (/** Event|TouchEvent */evt) { + var _this = this, + el = this.el, + options = this.options, + type = evt.type, + touch = evt.touches && evt.touches[0], + target = (touch || evt).target, + originalTarget = target, + filter = options.filter; + + + if (type === 'mousedown' && evt.button !== 0 || options.disabled) { + return; // only left button or enabled + } + + target = _closest(target, options.draggable, el); + + if (!target) { + return; + } + + // get the index of the dragged element within its parent + oldIndex = _index(target); + + // Check filter + if (typeof filter === 'function') { + if (filter.call(this, evt, target, this)) { + _dispatchEvent(_this, originalTarget, 'filter', target, el, oldIndex); + evt.preventDefault(); + return; // cancel dnd + } + } + else if (filter) { + filter = filter.split(',').some(function (criteria) { + criteria = _closest(originalTarget, criteria.trim(), el); + + if (criteria) { + _dispatchEvent(_this, criteria, 'filter', target, el, oldIndex); + return true; + } + }); + + if (filter) { + evt.preventDefault(); + return; // cancel dnd + } + } + + + if (options.handle && !_closest(originalTarget, options.handle, el)) { + return; + } + + + // Prepare `dragstart` + this._prepareDragStart(evt, touch, target); + }, + + _prepareDragStart: function (/** Event */evt, /** Touch */touch, /** HTMLElement */target) { + var _this = this, + el = _this.el, + options = _this.options, + ownerDocument = el.ownerDocument, + dragStartFn; + + if (target && !dragEl && (target.parentNode === el)) { + tapEvt = evt; + + rootEl = el; + dragEl = target; + nextEl = dragEl.nextSibling; + activeGroup = options.group; + + dragStartFn = function () { + // Delayed drag has been triggered + // we can re-enable the events: touchmove/mousemove + _this._disableDelayedDrag(); + + // Make the element draggable + dragEl.draggable = true; + + // Disable "draggable" + options.ignore.split(',').forEach(function (criteria) { + _find(dragEl, criteria.trim(), _disableDraggable); + }); + + // Bind the events: dragstart/dragend + _this._triggerDragStart(touch); + }; + + _on(ownerDocument, 'mouseup', _this._onDrop); + _on(ownerDocument, 'touchend', _this._onDrop); + _on(ownerDocument, 'touchcancel', _this._onDrop); + + if (options.delay) { + // If the user moves the pointer before the delay has been reached: + // disable the delayed drag + _on(ownerDocument, 'mousemove', _this._disableDelayedDrag); + _on(ownerDocument, 'touchmove', _this._disableDelayedDrag); + + _this._dragStartTimer = setTimeout(dragStartFn, options.delay); + } else { + dragStartFn(); + } + } + }, + + _disableDelayedDrag: function () { + var ownerDocument = this.el.ownerDocument; + + clearTimeout(this._dragStartTimer); + + _off(ownerDocument, 'mousemove', this._disableDelayedDrag); + _off(ownerDocument, 'touchmove', this._disableDelayedDrag); + }, + + _triggerDragStart: function (/** Touch */touch) { + if (touch) { + // Touch device support + tapEvt = { + target: dragEl, + clientX: touch.clientX, + clientY: touch.clientY + }; + + this._onDragStart(tapEvt, 'touch'); + } + else if (!supportDraggable) { + this._onDragStart(tapEvt, true); + } + else { + _on(dragEl, 'dragend', this); + _on(rootEl, 'dragstart', this._onDragStart); + } + + try { + if (document.selection) { + document.selection.empty(); + } else { + window.getSelection().removeAllRanges(); + } + } catch (err) { + } + }, + + _dragStarted: function () { + if (rootEl && dragEl) { + // Apply effect + _toggleClass(dragEl, this.options.ghostClass, true); + + Sortable.active = this; + + // Drag start event + _dispatchEvent(this, rootEl, 'start', dragEl, rootEl, oldIndex); + } + }, + + _emulateDragOver: function () { + if (touchEvt) { + _css(ghostEl, 'display', 'none'); + + var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY), + parent = target, + groupName = ' ' + this.options.group.name + '', + i = touchDragOverListeners.length; + + if (parent) { + do { + if (parent[expando] && parent[expando].options.groups.indexOf(groupName) > -1) { + while (i--) { + touchDragOverListeners[i]({ + clientX: touchEvt.clientX, + clientY: touchEvt.clientY, + target: target, + rootEl: parent + }); + } + + break; + } + + target = parent; // store last element + } + /* jshint boss:true */ + while (parent = parent.parentNode); + } + + _css(ghostEl, 'display', ''); + } + }, + + + _onTouchMove: function (/**TouchEvent*/evt) { + if (tapEvt) { + var touch = evt.touches ? evt.touches[0] : evt, + dx = touch.clientX - tapEvt.clientX, + dy = touch.clientY - tapEvt.clientY, + translate3d = evt.touches ? 'translate3d(' + dx + 'px,' + dy + 'px,0)' : 'translate(' + dx + 'px,' + dy + 'px)'; + + touchEvt = touch; + + _css(ghostEl, 'webkitTransform', translate3d); + _css(ghostEl, 'mozTransform', translate3d); + _css(ghostEl, 'msTransform', translate3d); + _css(ghostEl, 'transform', translate3d); + + evt.preventDefault(); + } + }, + + + _onDragStart: function (/**Event*/evt, /**boolean*/useFallback) { + var dataTransfer = evt.dataTransfer, + options = this.options; + + this._offUpEvents(); + + if (activeGroup.pull == 'clone') { + cloneEl = dragEl.cloneNode(true); + _css(cloneEl, 'display', 'none'); + rootEl.insertBefore(cloneEl, dragEl); + } + + if (useFallback) { + var rect = dragEl.getBoundingClientRect(), + css = _css(dragEl), + ghostRect; + + ghostEl = dragEl.cloneNode(true); + + _css(ghostEl, 'top', rect.top - parseInt(css.marginTop, 10)); + _css(ghostEl, 'left', rect.left - parseInt(css.marginLeft, 10)); + _css(ghostEl, 'width', rect.width); + _css(ghostEl, 'height', rect.height); + _css(ghostEl, 'opacity', '0.8'); + _css(ghostEl, 'position', 'fixed'); + _css(ghostEl, 'zIndex', '100000'); + + rootEl.appendChild(ghostEl); + + // Fixing dimensions. + ghostRect = ghostEl.getBoundingClientRect(); + _css(ghostEl, 'width', rect.width * 2 - ghostRect.width); + _css(ghostEl, 'height', rect.height * 2 - ghostRect.height); + + if (useFallback === 'touch') { + // Bind touch events + _on(document, 'touchmove', this._onTouchMove); + _on(document, 'touchend', this._onDrop); + _on(document, 'touchcancel', this._onDrop); + } else { + // Old brwoser + _on(document, 'mousemove', this._onTouchMove); + _on(document, 'mouseup', this._onDrop); + } + + this._loopId = setInterval(this._emulateDragOver, 150); + } + else { + if (dataTransfer) { + dataTransfer.effectAllowed = 'move'; + options.setData && options.setData.call(this, dataTransfer, dragEl); + } + + _on(document, 'drop', this); + } + + setTimeout(this._dragStarted, 0); + }, + + _onDragOver: function (/**Event*/evt) { + var el = this.el, + target, + dragRect, + revert, + options = this.options, + group = options.group, + groupPut = group.put, + isOwner = (activeGroup === group), + canSort = options.sort; + + if (evt.preventDefault !== void 0) { + evt.preventDefault(); + !options.dragoverBubble && evt.stopPropagation(); + } + + if (activeGroup && !options.disabled && + (isOwner + ? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list + : activeGroup.pull && groupPut && ( + (activeGroup.name === group.name) || // by Name + (groupPut.indexOf && ~groupPut.indexOf(activeGroup.name)) // by Array + ) + ) && + (evt.rootEl === void 0 || evt.rootEl === this.el) // touch fallback + ) { + // Smart auto-scrolling + _autoScroll(evt, options, this.el); + + if (_silent) { + return; + } + + target = _closest(evt.target, options.draggable, el); + dragRect = dragEl.getBoundingClientRect(); + + + if (revert) { + _cloneHide(true); + + if (cloneEl || nextEl) { + rootEl.insertBefore(dragEl, cloneEl || nextEl); + } + else if (!canSort) { + rootEl.appendChild(dragEl); + } + + return; + } + + + if ((el.children.length === 0) || (el.children[0] === ghostEl) || + (el === evt.target) && (target = _ghostInBottom(el, evt)) + ) { + if (target) { + if (target.animated) { + return; + } + targetRect = target.getBoundingClientRect(); + } + + _cloneHide(isOwner); + + if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect) !== false) { + el.appendChild(dragEl); + this._animate(dragRect, dragEl); + target && this._animate(targetRect, target); + } + } + else if (target && !target.animated && target !== dragEl && (target.parentNode[expando] !== void 0)) { + if (lastEl !== target) { + lastEl = target; + lastCSS = _css(target); + } + + + var targetRect = target.getBoundingClientRect(), + width = targetRect.right - targetRect.left, + height = targetRect.bottom - targetRect.top, + floating = /left|right|inline/.test(lastCSS.cssFloat + lastCSS.display), + isWide = (target.offsetWidth > dragEl.offsetWidth), + isLong = (target.offsetHeight > dragEl.offsetHeight), + halfway = (floating ? (evt.clientX - targetRect.left) / width : (evt.clientY - targetRect.top) / height) > 0.5, + nextSibling = target.nextElementSibling, + moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect), + after + ; + + if (moveVector !== false) { + _silent = true; + setTimeout(_unsilent, 30); + + _cloneHide(isOwner); + + if (moveVector === 1 || moveVector === -1) { + after = (moveVector === 1); + } + else if (floating) { + after = (target.previousElementSibling === dragEl) && !isWide || halfway && isWide; + } else { + after = (nextSibling !== dragEl) && !isLong || halfway && isLong; + } + + if (after && !nextSibling) { + el.appendChild(dragEl); + } else { + target.parentNode.insertBefore(dragEl, after ? nextSibling : target); + } + + this._animate(dragRect, dragEl); + this._animate(targetRect, target); + } + } + } + }, + + _animate: function (prevRect, target) { + var ms = this.options.animation; + + if (ms) { + var currentRect = target.getBoundingClientRect(); + + _css(target, 'transition', 'none'); + _css(target, 'transform', 'translate3d(' + + (prevRect.left - currentRect.left) + 'px,' + + (prevRect.top - currentRect.top) + 'px,0)' + ); + + target.offsetWidth; // repaint + + _css(target, 'transition', 'all ' + ms + 'ms'); + _css(target, 'transform', 'translate3d(0,0,0)'); + + clearTimeout(target.animated); + target.animated = setTimeout(function () { + _css(target, 'transition', ''); + _css(target, 'transform', ''); + target.animated = false; + }, ms); + } + }, + + _offUpEvents: function () { + var ownerDocument = this.el.ownerDocument; + + _off(document, 'touchmove', this._onTouchMove); + _off(ownerDocument, 'mouseup', this._onDrop); + _off(ownerDocument, 'touchend', this._onDrop); + _off(ownerDocument, 'touchcancel', this._onDrop); + }, + + _onDrop: function (/**Event*/evt) { + var el = this.el, + options = this.options; + + clearInterval(this._loopId); + clearInterval(autoScroll.pid); + clearTimeout(this._dragStartTimer); + + // Unbind events + _off(document, 'drop', this); + _off(document, 'mousemove', this._onTouchMove); + _off(el, 'dragstart', this._onDragStart); + + this._offUpEvents(); + + if (evt) { + evt.preventDefault(); + !options.dropBubble && evt.stopPropagation(); + + ghostEl && ghostEl.parentNode.removeChild(ghostEl); + + if (dragEl) { + _off(dragEl, 'dragend', this); + + _disableDraggable(dragEl); + _toggleClass(dragEl, this.options.ghostClass, false); + + if (rootEl !== dragEl.parentNode) { + newIndex = _index(dragEl); + + // drag from one list and drop into another + _dispatchEvent(null, dragEl.parentNode, 'sort', dragEl, rootEl, oldIndex, newIndex); + _dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex); + + // Add event + _dispatchEvent(null, dragEl.parentNode, 'add', dragEl, rootEl, oldIndex, newIndex); + + // Remove event + _dispatchEvent(this, rootEl, 'remove', dragEl, rootEl, oldIndex, newIndex); + } + else { + // Remove clone + cloneEl && cloneEl.parentNode.removeChild(cloneEl); + + if (dragEl.nextSibling !== nextEl) { + // Get the index of the dragged element within its parent + newIndex = _index(dragEl); + + // drag & drop within the same list + _dispatchEvent(this, rootEl, 'update', dragEl, rootEl, oldIndex, newIndex); + _dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex); + } + } + + if (Sortable.active) { + // Drag end event + _dispatchEvent(this, rootEl, 'end', dragEl, rootEl, oldIndex, newIndex); + + // Save sorting + this.save(); + } + } + + // Nulling + rootEl = + dragEl = + ghostEl = + nextEl = + cloneEl = + + scrollEl = + scrollParentEl = + + tapEvt = + touchEvt = + + lastEl = + lastCSS = + + activeGroup = + Sortable.active = null; + } + }, + + + handleEvent: function (/**Event*/evt) { + var type = evt.type; + + if (type === 'dragover' || type === 'dragenter') { + if (dragEl) { + this._onDragOver(evt); + _globalDragOver(evt); + } + } + else if (type === 'drop' || type === 'dragend') { + this._onDrop(evt); + } + }, + + + /** + * Serializes the item into an array of string. + * @returns {String[]} + */ + toArray: function () { + var order = [], + el, + children = this.el.children, + i = 0, + n = children.length, + options = this.options; + + for (; i < n; i++) { + el = children[i]; + if (_closest(el, options.draggable, this.el)) { + order.push(el.getAttribute(options.dataIdAttr) || _generateId(el)); + } + } + + return order; + }, + + + /** + * Sorts the elements according to the array. + * @param {String[]} order order of the items + */ + sort: function (order) { + var items = {}, rootEl = this.el; + + this.toArray().forEach(function (id, i) { + var el = rootEl.children[i]; + + if (_closest(el, this.options.draggable, rootEl)) { + items[id] = el; + } + }, this); + + order.forEach(function (id) { + if (items[id]) { + rootEl.removeChild(items[id]); + rootEl.appendChild(items[id]); + } + }); + }, + + + /** + * Save the current sorting + */ + save: function () { + var store = this.options.store; + store && store.set(this); + }, + + + /** + * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree. + * @param {HTMLElement} el + * @param {String} [selector] default: `options.draggable` + * @returns {HTMLElement|null} + */ + closest: function (el, selector) { + return _closest(el, selector || this.options.draggable, this.el); + }, + + + /** + * Set/get option + * @param {string} name + * @param {*} [value] + * @returns {*} + */ + option: function (name, value) { + var options = this.options; + + if (value === void 0) { + return options[name]; + } else { + options[name] = value; + } + }, + + + /** + * Destroy + */ + destroy: function () { + var el = this.el; + + el[expando] = null; + + _off(el, 'mousedown', this._onTapStart); + _off(el, 'touchstart', this._onTapStart); + + _off(el, 'dragover', this); + _off(el, 'dragenter', this); + + // Remove draggable attributes + Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) { + el.removeAttribute('draggable'); + }); + + touchDragOverListeners.splice(touchDragOverListeners.indexOf(this._onDragOver), 1); + + this._onDrop(); + + this.el = el = null; + } + }; + + + function _cloneHide(state) { + if (cloneEl && (cloneEl.state !== state)) { + _css(cloneEl, 'display', state ? 'none' : ''); + !state && cloneEl.state && rootEl.insertBefore(cloneEl, dragEl); + cloneEl.state = state; + } + } + + + function _bind(ctx, fn) { + var args = slice.call(arguments, 2); + return fn.bind ? fn.bind.apply(fn, [ctx].concat(args)) : function () { + return fn.apply(ctx, args.concat(slice.call(arguments))); + }; + } + + + function _closest(/**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx) { + if (el) { + ctx = ctx || document; + selector = selector.split('.'); + + var tag = selector.shift().toUpperCase(), + re = new RegExp('\\s(' + selector.join('|') + ')(?=\\s)', 'g'); + + do { + if ( + (tag === '>*' && el.parentNode === ctx) || ( + (tag === '' || el.nodeName.toUpperCase() == tag) && + (!selector.length || ((' ' + el.className + ' ').match(re) || []).length == selector.length) + ) + ) { + return el; + } + } + while (el !== ctx && (el = el.parentNode)); + } + + return null; + } + + + function _globalDragOver(/**Event*/evt) { + evt.dataTransfer.dropEffect = 'move'; + evt.preventDefault(); + } + + + function _on(el, event, fn) { + el.addEventListener(event, fn, false); + } + + + function _off(el, event, fn) { + el.removeEventListener(event, fn, false); + } + + + function _toggleClass(el, name, state) { + if (el) { + if (el.classList) { + el.classList[state ? 'add' : 'remove'](name); + } + else { + var className = (' ' + el.className + ' ').replace(RSPACE, ' ').replace(' ' + name + ' ', ' '); + el.className = (className + (state ? ' ' + name : '')).replace(RSPACE, ' '); + } + } + } + + + function _css(el, prop, val) { + var style = el && el.style; + + if (style) { + if (val === void 0) { + if (document.defaultView && document.defaultView.getComputedStyle) { + val = document.defaultView.getComputedStyle(el, ''); + } + else if (el.currentStyle) { + val = el.currentStyle; + } + + return prop === void 0 ? val : val[prop]; + } + else { + if (!(prop in style)) { + prop = '-webkit-' + prop; + } + + style[prop] = val + (typeof val === 'string' ? '' : 'px'); + } + } + } + + + function _find(ctx, tagName, iterator) { + if (ctx) { + var list = ctx.getElementsByTagName(tagName), i = 0, n = list.length; + + if (iterator) { + for (; i < n; i++) { + iterator(list[i], i); + } + } + + return list; + } + + return []; + } + + + + function _dispatchEvent(sortable, rootEl, name, targetEl, fromEl, startIndex, newIndex) { + var evt = document.createEvent('Event'), + options = (sortable || rootEl[expando]).options, + onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1); + + evt.initEvent(name, true, true); + + evt.to = rootEl; + evt.from = fromEl || rootEl; + evt.item = targetEl || rootEl; + evt.clone = cloneEl; + + evt.oldIndex = startIndex; + evt.newIndex = newIndex; + + rootEl.dispatchEvent(evt); + + if (options[onName]) { + options[onName].call(sortable, evt); + } + } + + + function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect) { + var evt, + sortable = fromEl[expando], + onMoveFn = sortable.options.onMove, + retVal; + + if (onMoveFn) { + evt = document.createEvent('Event'); + evt.initEvent('move', true, true); + + evt.to = toEl; + evt.from = fromEl; + evt.dragged = dragEl; + evt.draggedRect = dragRect; + evt.related = targetEl || toEl; + evt.relatedRect = targetRect || toEl.getBoundingClientRect(); + + retVal = onMoveFn.call(sortable, evt); + } + + return retVal; + } + + + function _disableDraggable(el) { + el.draggable = false; + } + + + function _unsilent() { + _silent = false; + } + + + /** @returns {HTMLElement|false} */ + function _ghostInBottom(el, evt) { + var lastEl = el.lastElementChild, + rect = lastEl.getBoundingClientRect(); + + return (evt.clientY - (rect.top + rect.height) > 5) && lastEl; // min delta + } + + + /** + * Generate id + * @param {HTMLElement} el + * @returns {String} + * @private + */ + function _generateId(el) { + var str = el.tagName + el.className + el.src + el.href + el.textContent, + i = str.length, + sum = 0; + + while (i--) { + sum += str.charCodeAt(i); + } + + return sum.toString(36); + } + + /** + * Returns the index of an element within its parent + * @param el + * @returns {number} + * @private + */ + function _index(/**HTMLElement*/el) { + var index = 0; + while (el && (el = el.previousElementSibling)) { + if (el.nodeName.toUpperCase() !== 'TEMPLATE') { + index++; + } + } + return index; + } + + function _throttle(callback, ms) { + var args, _this; + + return function () { + if (args === void 0) { + args = arguments; + _this = this; + + setTimeout(function () { + if (args.length === 1) { + callback.call(_this, args[0]); + } else { + callback.apply(_this, args); + } + + args = void 0; + }, ms); + } + }; + } + + function _extend(dst, src) { + if (dst && src) { + for (var key in src) { + if (src.hasOwnProperty(key)) { + dst[key] = src[key]; + } + } + } + + return dst; + } + + + // Export utils + Sortable.utils = { + on: _on, + off: _off, + css: _css, + find: _find, + bind: _bind, + is: function (el, selector) { + return !!_closest(el, selector, el); + }, + extend: _extend, + throttle: _throttle, + closest: _closest, + toggleClass: _toggleClass, + index: _index + }; + + + Sortable.version = '1.2.1'; + + + /** + * Create sortable instance + * @param {HTMLElement} el + * @param {Object} [options] + */ + Sortable.create = function (el, options) { + return new Sortable(el, options); + }; + + // Export + return Sortable; + }); + } (Sortable$2)); + + var SortableExports = Sortable$2.exports; + + var __extends$8 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Cards, "__esModule", { value: true }); + Component_Cards.ComponentCards = void 0; + var CE_1$8 = CE; + var TextHighlighter_1 = TextHighlighter; + var baseComponent_1$8 = baseComponent; + var Sortable$1 = SortableExports; + var ComponentCards = /** @class */ (function (_super) { + __extends$8(ComponentCards, _super); + function ComponentCards(options) { + var _a, _b; + var _this = _super.call(this) || this; + _this.entries = {}; + _this.container = (0, CE_1$8.ce)('div', 'mux_cards'); + if (options.onePerRow === true) + _this.container.classList.add('mux_cards-oneperrow'); + if (options.dragable !== false) + _this.sortable = new Sortable$1(_this.container, { + ghostClass: 'mux_cards-item-dragging', + onStart: function () { + _this.container.classList.add('mux_cards-dragging'); + }, + onEnd: function (evt) { + _this.container.classList.remove('mux_cards-dragging'); + _this.callEvent('orderUpdated', _this.getOrder()); + }, + }); + _this.highlightText = (_a = options === null || options === void 0 ? void 0 : options.highlightText) !== null && _a !== void 0 ? _a : false; + _this.setItems((_b = options === null || options === void 0 ? void 0 : options.items) !== null && _b !== void 0 ? _b : []); + return _this; + } + ComponentCards.prototype.setItems = function (items) { + var _this = this; + this.container.innerHTML = ''; + this.entries = {}; + items.forEach(function (item) { return _this.addItem(item); }); + }; + ComponentCards.prototype.addItem = function (item) { + var _this = this; + var _a, _b; + var element = (0, CE_1$8.ce)(item.href != undefined ? 'a' : 'div', 'mux_cards-item', { + uid: item.uniqueIdentifier, + }); + if (item.href != undefined) + element.href = item.href; + if (item.click != undefined) + element.onclick = function () { return item.click(); }; + if (item.tooltip != undefined) + element.title = item.title; + if (item.enabled == false) + element.classList.add('mux_cards-item-disabled'); + if (item.uniqueIdentifier != undefined) + this.entries[item.uniqueIdentifier] = element; + if (item.thumbnail != null) { + var thumbnailType = (_a = item.thumbnailType) !== null && _a !== void 0 ? _a : 'image'; + if (thumbnailType == 'image') { + element.appendChild((0, CE_1$8.ce)('img', 'mux_cards-item-thumbnail', { + src: item.thumbnail, + })); + } + else if (thumbnailType == 'frame') { + var ratio = (_b = item.thumbnailWidthRatio) !== null && _b !== void 0 ? _b : 1; + var frame = (0, CE_1$8.ce)('iframe', 'mux_cards-item-thumbnail', { + scrolling: 'no', + src: item.thumbnail, + }); + element.appendChild(frame); + var scaleClock = setInterval(function () { + if (element == null || + element.parentElement == null || + frame == null) + return clearInterval(scaleClock); + frame.style.width = "".concat(frame.clientHeight * ratio, "px"); + }, 100); + } + } + var info = (0, CE_1$8.ce)('div', 'mux_cards-item-info'); + info.appendChild(this.highlightText + ? (0, TextHighlighter_1.generateTextHighlights)(item.title, [ + 'mux_header', + 'mux_small', + ]) + : (0, CE_1$8.ce)('div', ['mux_header', 'mux_small'], null, item.title)); + if (item.sublines != undefined && item.sublines.length > 0) + item.sublines.forEach(function (subline) { + if (subline != null) + info.appendChild(_this.highlightText + ? (0, TextHighlighter_1.generateTextHighlights)(subline, [ + 'mux_text', + 'mux_small', + ]) + : (0, CE_1$8.ce)('div', ['mux_text', 'mux_small'], null, subline)); + }); + element.appendChild(info); + if (item.actions != undefined && item.actions.length > 0) { + var buttons = (0, CE_1$8.ce)('div', 'mux_cards-item-buttons'); + item.actions.forEach(function (action) { + var buttonelem = (0, CE_1$8.ce)(action.href != undefined ? 'a' : 'div', 'mux_cards-item-button'); + if (action.href != undefined) + buttonelem.href = action.href; + if (action.click != undefined) + buttonelem.onclick = function (e) { + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + action.click(); + }; + if (action.tooltip != undefined) + buttonelem.title = action.tooltip; + buttonelem.appendChild((0, CE_1$8.ce)('span', 'material-symbols-outlined', null, action.materialIcon)); + buttons.appendChild(buttonelem); + }); + element.appendChild(buttons); + } + this.container.appendChild(element); + }; + ComponentCards.prototype.removeItem = function (uniqueIdentifier) { + if (this.entries[uniqueIdentifier] != undefined) { + this.entries[uniqueIdentifier].parentElement.removeChild(this.entries[uniqueIdentifier]); + delete this.entries[uniqueIdentifier]; + } + }; + ComponentCards.prototype.hasItem = function (uniqueIdentifier) { + return this.entries[uniqueIdentifier] != undefined; + }; + ComponentCards.prototype.clear = function () { + this.container.innerHTML = ''; + this.entries = {}; + }; + ComponentCards.prototype.updateItemTitle = function (uniqueIdentifier, newTitle) { + if (this.entries[uniqueIdentifier] == undefined) + return; + var existingHeader = this.entries[uniqueIdentifier].querySelector('.mux_header'); + var container = existingHeader.parentElement; + container.insertBefore(this.highlightText + ? (0, TextHighlighter_1.generateTextHighlights)(newTitle, ['mux_header', 'mux_small']) + : (0, CE_1$8.ce)('div', ['mux_header', 'mux_small'], null, newTitle), existingHeader); + container.removeChild(existingHeader); + }; + ComponentCards.prototype.updateSublines = function (uniqueIdentifier, newSublines) { + var _this = this; + if (this.entries[uniqueIdentifier] == undefined) + return; + var info = this.entries[uniqueIdentifier].querySelector('.mux_cards-item-info'); + info.querySelectorAll('.mux_text.mux_small').forEach(function (existingSubline) { + return existingSubline.parentElement.removeChild(existingSubline); + }); + if (newSublines != undefined && newSublines.length > 0) + newSublines.forEach(function (subline) { + info.appendChild(_this.highlightText + ? (0, TextHighlighter_1.generateTextHighlights)(subline, [ + 'mux_text', + 'mux_small', + ]) + : (0, CE_1$8.ce)('div', ['mux_text', 'mux_small'], null, subline)); + }); + }; + ComponentCards.prototype.updateThumbnail = function (uniqueIdentifier, thumbnailSrc) { + if (this.entries[uniqueIdentifier] == undefined) + return; + var thumbnail = this.entries[uniqueIdentifier].querySelector('.mux_cards-item-thumbnail'); + thumbnail.src = thumbnailSrc; + }; + ComponentCards.prototype.getOrder = function () { + var order = []; + this.container + .querySelectorAll('.mux_cards-item') + .forEach(function (item) { return order.push(item.getAttribute('uid')); }); + return order; + }; + return ComponentCards; + }(baseComponent_1$8.MUXComponent)); + Component_Cards.ComponentCards = ComponentCards; + + var Component_ContextMenu = {}; + + var Morph_Keys = {}; + + var KeyBinderBase$1 = {}; + + var KeyBinderOverwrite$1 = {}; + + var __spreadArray$1 = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); + }; + Object.defineProperty(KeyBinderOverwrite$1, "__esModule", { value: true }); + KeyBinderOverwrite$1.KeyBinderOverwrite = void 0; + var KeyBinderOverwrite = /** @class */ (function () { + function KeyBinderOverwrite(id, KeyBinder) { + this.binds = {}; + this.id = id; + this._KeyBinder = KeyBinder; + } + KeyBinderOverwrite.prototype.log = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (window.location.search.includes('debug')) + console.log.apply(console, __spreadArray$1(['[KeyBinder]'], args, false)); + }; + KeyBinderOverwrite.prototype.close = function () { + this._KeyBinder.closeOverwrite(this.id); + }; + KeyBinderOverwrite.prototype.bind = function (key, callback, settings) { + if (settings == undefined) + settings = {}; + var query = this._KeyBinder.createKeyQuery(key, settings.controlKey, settings.shiftKey, settings.altKey); + if (this.binds[query] != undefined) + return this.log("Unable to bind key query '".concat(query, "' in overwrite because it already has a bind")); + if ((settings === null || settings === void 0 ? void 0 : settings.disableInElementsWithTags) != undefined) + settings.disableInElementsWithTags = + settings.disableInElementsWithTags.map(function (tagname) { + return tagname.toUpperCase(); + }); + this.binds[query] = { callback: callback, settings: settings }; + }; + return KeyBinderOverwrite; + }()); + KeyBinderOverwrite$1.KeyBinderOverwrite = KeyBinderOverwrite; + + var __spreadArray = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); + }; + Object.defineProperty(KeyBinderBase$1, "__esModule", { value: true }); + KeyBinderBase$1.KeyBinderBase = void 0; + var KeyBinderOverwrite_1 = KeyBinderOverwrite$1; + var KeyBinderBase = /** @class */ (function () { + function KeyBinderBase() { + this.binds = {}; + this.overwrites = []; + this.log('Preparing KeyBinder'); + this.registerListeners(); + } + KeyBinderBase.prototype.log = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + if (window.location.search.includes('debug')) + console.log.apply(console, __spreadArray(['[KeyBinder]'], args, false)); + }; + KeyBinderBase.prototype.multiBind = function (keys, callback, settings) { + for (var i = 0; i < keys.length; i++) + this.bind(keys[i], callback, settings); + }; + KeyBinderBase.prototype.bind = function (key, callback, settings) { + if (settings == undefined) + settings = {}; + var query = this.createKeyQuery(key, settings.controlKey, settings.shiftKey, settings.altKey); + if (this.binds[query] != undefined) + return this.log("Unable to bind key query '".concat(query, "' because it already has a bind")); + if ((settings === null || settings === void 0 ? void 0 : settings.disableInElementsWithTags) != undefined) + settings.disableInElementsWithTags = + settings.disableInElementsWithTags.map(function (tagname) { + return tagname.toUpperCase(); + }); + this.binds[query] = { callback: callback, settings: settings }; + }; + KeyBinderBase.prototype.unbind = function (key, settings) { + if (settings == undefined) + settings = {}; + var query = this.createKeyQuery(key, settings.controlKey, settings.shiftKey, settings.altKey); + if (this.binds[query] == undefined) + return this.log("Unable to unbind key query '".concat(query, "' because it has no bind")); + }; + KeyBinderBase.prototype.createOverwrite = function () { + var id = this.generateOverwriteId(); + var overwrite = new KeyBinderOverwrite_1.KeyBinderOverwrite(id, this); + this.overwrites.push(overwrite); + this.log("Overwrite with id '".concat(id, "' was created")); + return overwrite; + }; + KeyBinderBase.prototype.closeOverwrite = function (id) { + for (var i = 0; i < this.overwrites.length; i++) + if (this.overwrites[i].id == id) { + this.overwrites.splice(i, 1); + this.log("Overwrite with id '".concat(id, "' was closed")); + return; + } + }; + KeyBinderBase.prototype.createKeyQuery = function (key, ctrlKey, shiftKey, altKey) { + if (ctrlKey === void 0) { ctrlKey = false; } + if (shiftKey === void 0) { shiftKey = false; } + if (altKey === void 0) { altKey = false; } + var queryParts = [key.toLowerCase()]; + if (ctrlKey) + queryParts.push('ctrl'); + if (shiftKey) + queryParts.push('shft'); + if (altKey) + queryParts.push('alt'); + return queryParts.join(':'); + }; + KeyBinderBase.prototype.getAllBinds = function () { + return Array.from(new Set(this.overwrites + .map(function (overwrite) { return Object.keys(overwrite.binds); }) + .concat(Object.keys(this.binds)) + .flat())); + }; + KeyBinderBase.prototype.generateOverwriteId = function () { + while (true) { + var id = (Math.random() + 1).toString(36).substring(7); + if (!this.overwriteIdExists(id)) + return id; + } + }; + KeyBinderBase.prototype.overwriteIdExists = function (id) { + for (var i = 0; i < this.overwrites.length; i++) + if (this.overwrites[i].id == id) + return true; + return false; + }; + KeyBinderBase.prototype.registerListeners = function () { + var _this = this; + window.addEventListener('keydown', function (e) { + var _a; + var query = _this.createKeyQuery(e.key, e.ctrlKey || e.metaKey, e.shiftKey, e.altKey); + if (window.location.search.includes('keydebug')) + _this.log("Got keypress: ".concat(query)); + var binds = _this.binds; + if (_this.overwrites.length > 0) { + binds = _this.overwrites[_this.overwrites.length - 1].binds; + } + if (binds[query] == undefined) + return; + var bind = binds[query]; + if (((_a = bind === null || bind === void 0 ? void 0 : bind.settings) === null || _a === void 0 ? void 0 : _a.disableInElementsWithTags) != undefined && + bind.settings.disableInElementsWithTags.includes(document.activeElement.tagName)) + return; + e.preventDefault(); + bind.callback(); + }); + }; + return KeyBinderBase; + }()); + KeyBinderBase$1.KeyBinderBase = KeyBinderBase; + + Object.defineProperty(Morph_Keys, "__esModule", { value: true }); + Morph_Keys.MorphKey = void 0; + var KeyBinderBase_1 = KeyBinderBase$1; + Morph_Keys.MorphKey = new KeyBinderBase_1.KeyBinderBase(); + + var __extends$7 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_ContextMenu, "__esModule", { value: true }); + Component_ContextMenu.ComponentContextMenu = void 0; + var Morph_Keys_1 = Morph_Keys; + var CE_1$7 = CE; + var baseComponent_1$7 = baseComponent; + var ComponentContextMenu = /** @class */ (function (_super) { + __extends$7(ComponentContextMenu, _super); + function ComponentContextMenu(options) { + var _a, _b; + var _this = _super.call(this) || this; + _this.open = true; + _this.container = (0, CE_1$7.ce)('div', 'mux_contextmenu'); + var align = (_a = options === null || options === void 0 ? void 0 : options.align) !== null && _a !== void 0 ? _a : 'center'; + if ((options === null || options === void 0 ? void 0 : options.materialIconColor) != undefined) + _this.container.style.setProperty('--mux-contextmenu-iconcolor', options.materialIconColor); + _this.setItems((_b = options === null || options === void 0 ? void 0 : options.items) !== null && _b !== void 0 ? _b : [], options === null || options === void 0 ? void 0 : options.selected); + var parentContainer = document.body; + parentContainer.appendChild(_this.container); + _this.container.style.top = "".concat(options.y - parentContainer.getBoundingClientRect().top, "px"); + var left = options.x; + var maxLeft = document.body.clientWidth - _this.container.clientWidth - 20; + var minLeft = 10; + if (align == 'center') { + left -= _this.container.clientWidth / 2; + _this.container.style.transformOrigin = 'top center'; + } + else if (align == 'left') { + _this.container.style.transformOrigin = 'top left'; + } + else if (align == 'right') { + left -= _this.container.clientWidth; + _this.container.style.transformOrigin = 'top right'; + } + left = Math.min(left, maxLeft); + left = Math.max(left, minLeft); + var maxHeight = document.body.clientHeight - options.y - 20; + _this.container.style.left = "".concat(left, "px"); + _this.container.style.transitionDuration = '.2s'; + _this.container.style.transform = 'scale(1)'; + _this.container.style.opacity = '1'; + _this.container.style.maxHeight = "".concat(maxHeight, "px"); + if ((options === null || options === void 0 ? void 0 : options.highlightedItem) != undefined && + _this.container.querySelector("[uid=\"".concat(options.highlightedItem, "\"]")) != null) { + var selected = _this.container.querySelector("[uid=\"".concat(options.highlightedItem, "\"]")); + selected.classList.add('mux_contextmenu-item-selected'); + setTimeout(function () { + selected.scrollIntoView(); + }, 100); + } + if ((options === null || options === void 0 ? void 0 : options.selected) != undefined && + _this.container.querySelector("[uid=\"".concat(options.selected, "\"]")) != null) { + var selected = _this.container.querySelector("[uid=\"".concat(options.selected, "\"]")); + setTimeout(function () { + selected.scrollIntoView({ + block: 'center', + inline: 'center', + }); + }, 100); + } + var delay = function (duration, callback) { + setTimeout(function () { + callback(); + }, duration); + }; + _this.handleClick = function (e) { + var _a, _b; + if (e.target == undefined) + return delay(100, function () { return _this.close('outside'); }); + var target = e.target; + if (target.classList.length == 0) + return delay(100, function () { return _this.close('outsideclick'); }); + if (!target.classList[0].startsWith('mux_contextmenu') && + !((_b = (_a = target.parentElement) === null || _a === void 0 ? void 0 : _a.classList[0]) === null || _b === void 0 ? void 0 : _b.startsWith('mux_contextmenu'))) + return delay(100, function () { return _this.close('outsideparentclick'); }); + }; + setTimeout(function () { + window.addEventListener('click', _this.handleClick); + window.addEventListener('mousedown', _this.handleClick); + window.addEventListener('touchstart', _this.handleClick); + }, 100); + _this.overwrite = Morph_Keys_1.MorphKey.createOverwrite(); + if ((options === null || options === void 0 ? void 0 : options.highlightedItem) == undefined) { + _this.overwrite.bind('ArrowUp', function () { + var selected = _this.container.querySelector('.mux_contextmenu-item-selected'); + if (selected == null) { + var elements = _this.container.querySelectorAll('.mux_contextmenu-item'); + if (elements.length > 0) { + var first = elements[elements.length - 1]; + first.classList.add('mux_contextmenu-item-selected'); + first.scrollIntoView(); + } + } + else { + var previous = selected.previousElementSibling; + if (previous != null) { + selected.classList.remove('mux_contextmenu-item-selected'); + previous.classList.add('mux_contextmenu-item-selected'); + previous.scrollIntoView(); + } + } + }); + _this.overwrite.bind('ArrowDown', function () { + var selected = _this.container.querySelector('.mux_contextmenu-item-selected'); + if (selected == null) { + var elements = _this.container.querySelectorAll('.mux_contextmenu-item'); + if (elements.length > 0) { + var first = elements[0]; + first.classList.add('mux_contextmenu-item-selected'); + first.scrollIntoView(); + } + } + else { + var next = selected.nextElementSibling; + if (next != null) { + selected.classList.remove('mux_contextmenu-item-selected'); + next.classList.add('mux_contextmenu-item-selected'); + next.scrollIntoView(); + } + } + }); + } + _this.overwrite.bind('Enter', function () { + var selected = _this.container.querySelector('.mux_contextmenu-item-selected'); + if (selected != null) { + selected.click(); + } + }); + _this.overwrite.bind('Escape', function () { + _this.close('escape'); + }); + return _this; + } + ComponentContextMenu.prototype.close = function (origin, byClick) { + var _this = this; + if (origin === void 0) { origin = 'integrator?'; } + if (byClick === void 0) { byClick = false; } + this.overwrite.close(); + this.open = false; + this.killSubContexts(); + window.removeEventListener('click', this.handleClick); + window.removeEventListener('mousedown', this.handleClick); + window.removeEventListener('touchstart', this.handleClick); + this.callEvent('close', byClick, origin); + this.container.style.transform = 'scale(0)'; + this.container.style.opacity = '0'; + setTimeout(function () { + _this.destroy(); + }, 200); + }; + ComponentContextMenu.prototype.enable = function (uniqueIdentifier) { + if (this.container.querySelector("[uid=\"".concat(uniqueIdentifier, "\"]"))) { + var element = this.container.querySelector("[uid=\"".concat(uniqueIdentifier, "\"]")); + element.classList.remove('mux_contextmenu-item-disabled'); + } + }; + ComponentContextMenu.prototype.disable = function (uniqueIdentifier) { + if (this.container.querySelector("[uid=\"".concat(uniqueIdentifier, "\"]"))) { + var element = this.container.querySelector("[uid=\"".concat(uniqueIdentifier, "\"]")); + element.classList.add('mux_contextmenu-item-disabled'); + } + }; + ComponentContextMenu.prototype.isOpen = function () { + return this.open; + }; + ComponentContextMenu.prototype.setItems = function (items, selectedId) { + var _this = this; + this.container.innerHTML = ''; + items.forEach(function (item) { + return _this.addItem(item, selectedId != null && selectedId == item.uniqueIdentifier); + }); + }; + ComponentContextMenu.prototype.addItem = function (item, selected) { + var _this = this; + var _a, _b, _c; + if (selected === void 0) { selected = false; } + switch (item.type) { + case 'separator': + var separator = (0, CE_1$7.ce)('div', 'mux_contextmenu-separator'); + if (item.text != undefined && item.text.trim().length > 0) + separator.appendChild((0, CE_1$7.ce)('span', null, null, item.text)); + this.container.appendChild(separator); + break; + case 'normal': + var element = (0, CE_1$7.ce)(item.href != undefined ? 'a' : 'div', 'mux_contextmenu-item'); + if (selected) + element.classList.add('mux_contextmenu-item-selected'); + var itemId = (_a = item.uniqueIdentifier) !== null && _a !== void 0 ? _a : (Math.random() + 1).toString(36).substring(7); + if (item.href != undefined) + element.setAttribute('href', item.href); + if (item.tooltip != undefined) + element.title = item.tooltip; + if (item.materialIcon != undefined) { + var materialIcon = (0, CE_1$7.ce)('span', [ + 'mux_contextmenu-item-materialicon', + 'material-symbols-outlined', + ], null, item.materialIcon); + if (item.materialIconTransform != undefined) + materialIcon.style.transform = + item.materialIconTransform; + element.appendChild(materialIcon); + } + else if (item.icon != undefined) + element.appendChild((0, CE_1$7.ce)('img', 'mux_contextmenu-item-icon', { + src: item.icon, + })); + if (item.uniqueIdentifier != undefined) { + element.setAttribute('uid', item.uniqueIdentifier); + } + if (item.enabled == false) + element.classList.add('mux_contextmenu-item-disabled'); + var itemContent = (0, CE_1$7.ce)('div', ['mux_text', 'mux_small'], null, (_b = item.text) !== null && _b !== void 0 ? _b : ''); + if (item.customFontSize != undefined) + itemContent.style.fontSize = "".concat(item.customFontSize, "px"); + element.appendChild(itemContent); + if (item.children == undefined && item.shortcut != undefined) + element.appendChild((0, CE_1$7.ce)('div', [ + 'mux_contextmenu-shortcut', + 'mux_text', + 'mux_tiny', + ], null, (_c = item.shortcut) !== null && _c !== void 0 ? _c : '')); + if (item.children != undefined && item.children.length > 0) { + element.appendChild((0, CE_1$7.ce)('span', [ + 'material-symbols-outlined', + 'mux_contextmenu-item-arrow', + ], null, 'keyboard_arrow_right')); + } + element.onmousemove = function () { + if (_this.subContextParent == itemId) + return; + _this.killSubContexts(); + if (item.children != undefined && + item.children.length > 0) { + var bounds = element.getBoundingClientRect(); + _this.subContextParent = itemId; + _this.subContext = new ComponentContextMenu({ + items: item.children, + x: bounds.x + bounds.width + 1, + y: bounds.y, + align: 'left', + }); + _this.subContext.on('close', function (byClick) { + if (byClick) + _this.close('parentkillchildhover', true); + }); + } + }; + if (item.click != undefined && item.href == undefined) { + element.onclick = function () { + if (item.stayOpenOnClick != true) { + _this.close('itemclick', true); + _this.killSubContexts(); + } + item.click(); + }; + } + this.container.appendChild(element); + break; + } + }; + ComponentContextMenu.prototype.killSubContexts = function () { + if (this.subContext != null) { + this.subContext.close('parentkillchild'); + this.subContext = null; + } + this.subContextParent = null; + }; + return ComponentContextMenu; + }(baseComponent_1$7.MUXComponent)); + Component_ContextMenu.ComponentContextMenu = ComponentContextMenu; + + var Component_Dialog = {}; + + var hasRequiredComponent_Dialog; + + function requireComponent_Dialog () { + if (hasRequiredComponent_Dialog) return Component_Dialog; + hasRequiredComponent_Dialog = 1; + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Dialog, "__esModule", { value: true }); + Component_Dialog.ComponentDialog = void 0; + var Index_1 = requireIndex(); + var CE_1 = CE; + var baseComponent_1 = baseComponent; + var ComponentDialog = /** @class */ (function (_super) { + __extends(ComponentDialog, _super); + function ComponentDialog(options) { + var _a, _b, _c, _d, _e, _f, _g, _h; + var _this = _super.call(this) || this; + var width = (_a = options === null || options === void 0 ? void 0 : options.width) !== null && _a !== void 0 ? _a : 'small'; + var height = (_b = options === null || options === void 0 ? void 0 : options.height) !== null && _b !== void 0 ? _b : 'auto'; + _this.container = (0, CE_1.ce)('div', 'mux_dialogcontainer'); + _this.dialog = (0, CE_1.ce)('div', 'mux_dialog'); + _this.dialog.classList.add("mux_w-".concat(width), "mux_h-".concat(height)); + var openDialogs = document.querySelectorAll(".mux_dialog.mux_w-".concat(width, ".mux_h-").concat(height)).length; + _this.dialog.style.marginLeft = "".concat(openDialogs * 30, "px"); + _this.dialog.style.marginTop = "".concat(openDialogs * 30, "px"); + _this.container.append(_this.dialog); + var titlebar = (0, CE_1.ce)('div', 'mux_dialog-titlebar'); + titlebar.appendChild((0, CE_1.ce)('div', ['mux_dialog-title', 'mux_header'], null, options.title)); + var titlesettings = (0, CE_1.ce)('div', 'mux_dialog-titlesettings'); + titlebar.appendChild(titlesettings); + _this.titlebar = titlesettings; + if ((options === null || options === void 0 ? void 0 : options.closeable) !== false) { + var close = (0, CE_1.ce)('div', 'mux_dialog-close'); + close.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'close')); + close.onclick = function () { + _this.callEvent('close', new CloseEvent(_this)); + }; + titlebar.appendChild(close); + } + _this.dialog.appendChild(titlebar); + _this.content = (0, CE_1.ce)('div', 'mux_dialog-content'); + _this.dialog.appendChild(_this.content); + var okButtonVisible = (_c = options === null || options === void 0 ? void 0 : options.okButtonVisible) !== null && _c !== void 0 ? _c : true; + var cancelButtonVisible = (_d = options === null || options === void 0 ? void 0 : options.cancelButtonVisible) !== null && _d !== void 0 ? _d : true; + if (okButtonVisible || cancelButtonVisible) { + var actionbar = (0, CE_1.ce)('div', 'mux_dialog-actionbar'); + var buttons = (0, CE_1.ce)('div', 'mux_dialog-buttons'); + if (cancelButtonVisible) { + var cancelButtonEnabled = (_e = options === null || options === void 0 ? void 0 : options.cancelButtonEnabled) !== null && _e !== void 0 ? _e : true; + _this.cancelButton = new Index_1.MorphComponent.Button({ + content: (_f = options === null || options === void 0 ? void 0 : options.cancelButtonText) !== null && _f !== void 0 ? _f : 'Cancel', + mode: cancelButtonEnabled ? 'normal' : 'disabled', + target: function () { + _this.callEvent('cancel', new CloseEvent(_this)); + }, + }); + buttons.appendChild(_this.cancelButton.container); + } + if (okButtonVisible) { + var okButtonEnabled = (_g = options === null || options === void 0 ? void 0 : options.okButtonEnabled) !== null && _g !== void 0 ? _g : true; + _this.okButton = new Index_1.MorphComponent.Button({ + content: (_h = options === null || options === void 0 ? void 0 : options.okButtonText) !== null && _h !== void 0 ? _h : 'OK', + mode: okButtonEnabled ? 'highlight' : 'disabled', + target: function () { + _this.callEvent('ok', new CloseEvent(_this)); + }, + }); + buttons.appendChild(_this.okButton.container); + } + actionbar.appendChild(buttons); + _this.dialog.appendChild(actionbar); + } + else + _this.content.classList.add('mux_dialog-content-nobuttons'); + document.body.appendChild(_this.container); + setTimeout(function () { + _this.container.style.opacity = '1'; + _this.dialog.style.opacity = '1'; + _this.dialog.style.transform = 'scale(1)'; + }, 20); + _this.keyOverwrite = Index_1.MorphKey.createOverwrite(); + _this.keyOverwrite.bind('Escape', function () { + _this.callEvent('cancel', new CloseEvent(_this)); + }); + _this.keyOverwrite.bind('Enter', function () { + _this.callEvent('ok', new CloseEvent(_this)); + }); + return _this; + } + ComponentDialog.prototype.close = function () { + var _this = this; + this.dialog.style.transitionTimingFunction = 'ease-out'; + this.dialog.style.transform = 'scale(0.8)'; + this.dialog.style.opacity = '0'; + this.container.style.opacity = '0'; + this.container.style.pointerEvents = 'none'; + this.keyOverwrite.close(); + setTimeout(function () { + _this.destroy(); + }, 200); + }; + ComponentDialog.prototype.setOkButtonMode = function (mode) { + this.okButton.updateMode(mode); + }; + ComponentDialog.prototype.setCancelButtonMode = function (mode) { + this.cancelButton.updateMode(mode); + }; + return ComponentDialog; + }(baseComponent_1.MUXComponent)); + Component_Dialog.ComponentDialog = ComponentDialog; + var CloseEvent = /** @class */ (function () { + function DialogCloseEvent(origin) { + var _this = this; + this.origin = origin; + this.autoCloseInterval = setTimeout(function () { + _this.close(); + }, 50); + } + DialogCloseEvent.prototype.preventClose = function () { + clearInterval(this.autoCloseInterval); + }; + DialogCloseEvent.prototype.close = function () { + clearInterval(this.autoCloseInterval); + this.origin.close(); + }; + return DialogCloseEvent; + }()); + + return Component_Dialog; + } + + var Component_Group = {}; + + var __extends$6 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Group, "__esModule", { value: true }); + Component_Group.ComponentGroup = void 0; + var CE_1$6 = CE; + var baseComponent_1$6 = baseComponent; + var ComponentGroup = /** @class */ (function (_super) { + __extends$6(ComponentGroup, _super); + function ComponentGroup(options) { + var _a, _b, _c; + var _this = _super.call(this) || this; + _this.container = (0, CE_1$6.ce)('div', ['mux_group', 'mux_group-open']); + var closeable = (_a = options === null || options === void 0 ? void 0 : options.closeable) !== null && _a !== void 0 ? _a : false; + if ((options === null || options === void 0 ? void 0 : options.open) == false && closeable) { + _this.container.classList.remove('mux_group-open'); + } + var header = (0, CE_1$6.ce)('div', 'mux_group-header'); + if ((options === null || options === void 0 ? void 0 : options.materialIcon) != undefined) + header.appendChild((0, CE_1$6.ce)('span', 'material-symbols-outlined', null, options.materialIcon)); + _this.title = (0, CE_1$6.ce)('div', ['mux_header', 'mux_small'], null, (_b = options === null || options === void 0 ? void 0 : options.title) !== null && _b !== void 0 ? _b : ''); + _this.subTitle = (0, CE_1$6.ce)('div', ['mux_text', 'mux_small'], null, (_c = options === null || options === void 0 ? void 0 : options.subTitle) !== null && _c !== void 0 ? _c : ''); + header.append(_this.title, _this.subTitle); + if ((options === null || options === void 0 ? void 0 : options.actions) != undefined && options.actions.length > 0) { + var actions = (0, CE_1$6.ce)('div', 'mux_group-actions'); + options.actions.forEach(function (action) { + var element = (0, CE_1$6.ce)('div', 'mux_group-iconbutton'); + element.appendChild((0, CE_1$6.ce)('span', 'material-symbols-outlined', null, action.materialIcon)); + element.onclick = function (e) { + e.stopPropagation(); + action.click(); + }; + actions.appendChild(element); + }); + header.appendChild(actions); + } + if (closeable) { + var foldIcon = (0, CE_1$6.ce)('span', ['material-symbols-outlined', 'mux_group-fold'], null, 'keyboard_arrow_right'); + header.appendChild(foldIcon); + header.onclick = function () { + if (_this.container.classList.contains('mux_group-open')) + _this.container.classList.remove('mux_group-open'); + else + _this.container.classList.add('mux_group-open'); + _this.callEvent('openState', _this.container.classList.contains('mux_group-open')); + }; + } + _this.container.appendChild(header); + _this.content = (0, CE_1$6.ce)('div', 'mux_group-content'); + var contentwrapper = (0, CE_1$6.ce)('div', 'mux_group-contentwrapper'); + contentwrapper.appendChild(_this.content); + _this.container.appendChild(contentwrapper); + return _this; + } + ComponentGroup.prototype.setTitle = function (title) { + this.title.innerText = title !== null && title !== void 0 ? title : ''; + }; + ComponentGroup.prototype.setSubTitle = function (subTitle) { + this.subTitle.innerText = subTitle !== null && subTitle !== void 0 ? subTitle : ''; + }; + return ComponentGroup; + }(baseComponent_1$6.MUXComponent)); + Component_Group.ComponentGroup = ComponentGroup; + + var Component_Header = {}; + + var __extends$5 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Header, "__esModule", { value: true }); + Component_Header.ComponentHeader = void 0; + var CE_1$5 = CE; + var baseComponent_1$5 = baseComponent; + var ComponentHeader = /** @class */ (function (_super) { + __extends$5(ComponentHeader, _super); + function ComponentHeader(options) { + var _a; + var _this = _super.call(this) || this; + var size = (_a = options === null || options === void 0 ? void 0 : options.size) !== null && _a !== void 0 ? _a : 'normal'; + _this.container = (0, CE_1$5.ce)('div', ['mux_header', "mux_".concat(size)], null, options === null || options === void 0 ? void 0 : options.content); + return _this; + } + ComponentHeader.prototype.update = function (content) { + this.container.innerHTML = content; + }; + return ComponentHeader; + }(baseComponent_1$5.MUXComponent)); + Component_Header.ComponentHeader = ComponentHeader; + + var Component_IconGrid = {}; + + var __extends$4 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_IconGrid, "__esModule", { value: true }); + Component_IconGrid.ComponentIconGrid = void 0; + var CE_1$4 = CE; + var baseComponent_1$4 = baseComponent; + var Sortable = SortableExports; + var ComponentIconGrid = /** @class */ (function (_super) { + __extends$4(ComponentIconGrid, _super); + function ComponentIconGrid(options) { + var _a; + var _this = _super.call(this) || this; + _this.container = (0, CE_1$4.ce)('div', 'mux_icongrid'); + if ((options === null || options === void 0 ? void 0 : options.sortable) === true) { + _this.sortable = new Sortable(_this.container, { + ghostClass: 'mux_icongrid-item-dragging', + onStart: function () { + _this.container.classList.add('mux_icongrid-dragging'); + }, + onEnd: function (evt) { + _this.container.classList.remove('mux_icongrid-dragging'); + _this.callEvent('orderUpdated', _this.getOrder()); + }, + }); + } + _this.setItems((_a = options === null || options === void 0 ? void 0 : options.items) !== null && _a !== void 0 ? _a : []); + return _this; + } + ComponentIconGrid.prototype.setItems = function (items) { + var _this = this; + this.container.innerHTML = ''; + items.forEach(function (item) { return _this.addItem(item); }); + }; + ComponentIconGrid.prototype.addItem = function (item) { + var element = (0, CE_1$4.ce)('div', 'mux_icongrid-item'); + if (item.uniqueIdentifier != undefined) + element.setAttribute('uid', item.uniqueIdentifier); + if (!item.enabled) + element.classList.add('mux_icongrid-item-disabled'); + if (item.click != undefined) + element.onclick = item.click; + if (item.materialIcon != undefined) + element.appendChild((0, CE_1$4.ce)('span', ['mux_icongrid-item-icon', 'material-symbols-outline'], null, item.materialIcon)); + else if (item.icon != undefined) + element.appendChild((0, CE_1$4.ce)('img', 'mux_icongrid-item-icon', { src: item.icon })); + element.appendChild((0, CE_1$4.ce)('div', ['mux_text', 'mux_small'], null, item.text)); + this.container.appendChild(element); + }; + ComponentIconGrid.prototype.getOrder = function () { + return Array.from(this.container.querySelectorAll('.mux_icongrid-item')).map(function (item) { return item.getAttribute('uid'); }); + }; + ComponentIconGrid.prototype.enable = function (uniqueIdentifier) { + var item = this.container.querySelector("[uid=\"".concat(uniqueIdentifier, "\"]")); + if (item != undefined) + item.classList.remove('mux_icongrid-item-disabled'); + }; + ComponentIconGrid.prototype.disable = function (uniqueIdentifier) { + var item = this.container.querySelector("[uid=\"".concat(uniqueIdentifier, "\"]")); + if (item != undefined) + item.classList.add('mux_icongrid-item-disabled'); + }; + return ComponentIconGrid; + }(baseComponent_1$4.MUXComponent)); + Component_IconGrid.ComponentIconGrid = ComponentIconGrid; + + var Component_ImageViewer = {}; + + /*! Hammer.JS - v2.0.17-rc - 2019-12-16 + * http://naver.github.io/egjs + * + * Forked By Naver egjs + * Copyright (c) hammerjs + * Licensed under the MIT license */ + function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); + } + + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + + function _assertThisInitialized(self) { + if (self === void 0) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return self; + } + + /** + * @private + * extend object. + * means that properties in dest will be overwritten by the ones in src. + * @param {Object} target + * @param {...Object} objects_to_assign + * @returns {Object} target + */ + var assign; + + if (typeof Object.assign !== 'function') { + assign = function assign(target) { + if (target === undefined || target === null) { + throw new TypeError('Cannot convert undefined or null to object'); + } + + var output = Object(target); + + for (var index = 1; index < arguments.length; index++) { + var source = arguments[index]; + + if (source !== undefined && source !== null) { + for (var nextKey in source) { + if (source.hasOwnProperty(nextKey)) { + output[nextKey] = source[nextKey]; + } + } + } + } + + return output; + }; + } else { + assign = Object.assign; + } + + var assign$1 = assign; + + var VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o']; + var TEST_ELEMENT = typeof document === "undefined" ? { + style: {} + } : document.createElement('div'); + var TYPE_FUNCTION = 'function'; + var round = Math.round, + abs = Math.abs; + var now = Date.now; + + /** + * @private + * get the prefixed property + * @param {Object} obj + * @param {String} property + * @returns {String|Undefined} prefixed + */ + + function prefixed(obj, property) { + var prefix; + var prop; + var camelProp = property[0].toUpperCase() + property.slice(1); + var i = 0; + + while (i < VENDOR_PREFIXES.length) { + prefix = VENDOR_PREFIXES[i]; + prop = prefix ? prefix + camelProp : property; + + if (prop in obj) { + return prop; + } + + i++; + } + + return undefined; + } + + /* eslint-disable no-new-func, no-nested-ternary */ + var win; + + if (typeof window === "undefined") { + // window is undefined in node.js + win = {}; + } else { + win = window; + } + + var PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction'); + var NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined; + function getTouchActionProps() { + if (!NATIVE_TOUCH_ACTION) { + return false; + } + + var touchMap = {}; + var cssSupports = win.CSS && win.CSS.supports; + ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function (val) { + // If css.supports is not supported but there is native touch-action assume it supports + // all values. This is the case for IE 10 and 11. + return touchMap[val] = cssSupports ? win.CSS.supports('touch-action', val) : true; + }); + return touchMap; + } + + var TOUCH_ACTION_COMPUTE = 'compute'; + var TOUCH_ACTION_AUTO = 'auto'; + var TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented + + var TOUCH_ACTION_NONE = 'none'; + var TOUCH_ACTION_PAN_X = 'pan-x'; + var TOUCH_ACTION_PAN_Y = 'pan-y'; + var TOUCH_ACTION_MAP = getTouchActionProps(); + + var MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i; + var SUPPORT_TOUCH = 'ontouchstart' in win; + var SUPPORT_POINTER_EVENTS = prefixed(win, 'PointerEvent') !== undefined; + var SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent); + var INPUT_TYPE_TOUCH = 'touch'; + var INPUT_TYPE_PEN = 'pen'; + var INPUT_TYPE_MOUSE = 'mouse'; + var INPUT_TYPE_KINECT = 'kinect'; + var COMPUTE_INTERVAL = 25; + var INPUT_START = 1; + var INPUT_MOVE = 2; + var INPUT_END = 4; + var INPUT_CANCEL = 8; + var DIRECTION_NONE = 1; + var DIRECTION_LEFT = 2; + var DIRECTION_RIGHT = 4; + var DIRECTION_UP = 8; + var DIRECTION_DOWN = 16; + var DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT; + var DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN; + var DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL; + var PROPS_XY = ['x', 'y']; + var PROPS_CLIENT_XY = ['clientX', 'clientY']; + + /** + * @private + * walk objects and arrays + * @param {Object} obj + * @param {Function} iterator + * @param {Object} context + */ + function each(obj, iterator, context) { + var i; + + if (!obj) { + return; + } + + if (obj.forEach) { + obj.forEach(iterator, context); + } else if (obj.length !== undefined) { + i = 0; + + while (i < obj.length) { + iterator.call(context, obj[i], i, obj); + i++; + } + } else { + for (i in obj) { + obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj); + } + } + } + + /** + * @private + * let a boolean value also be a function that must return a boolean + * this first item in args will be used as the context + * @param {Boolean|Function} val + * @param {Array} [args] + * @returns {Boolean} + */ + + function boolOrFn(val, args) { + if (typeof val === TYPE_FUNCTION) { + return val.apply(args ? args[0] || undefined : undefined, args); + } + + return val; + } + + /** + * @private + * small indexOf wrapper + * @param {String} str + * @param {String} find + * @returns {Boolean} found + */ + function inStr(str, find) { + return str.indexOf(find) > -1; + } + + /** + * @private + * when the touchActions are collected they are not a valid value, so we need to clean things up. * + * @param {String} actions + * @returns {*} + */ + + function cleanTouchActions(actions) { + // none + if (inStr(actions, TOUCH_ACTION_NONE)) { + return TOUCH_ACTION_NONE; + } + + var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X); + var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); // if both pan-x and pan-y are set (different recognizers + // for different directions, e.g. horizontal pan but vertical swipe?) + // we need none (as otherwise with pan-x pan-y combined none of these + // recognizers will work, since the browser would handle all panning + + if (hasPanX && hasPanY) { + return TOUCH_ACTION_NONE; + } // pan-x OR pan-y + + + if (hasPanX || hasPanY) { + return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y; + } // manipulation + + + if (inStr(actions, TOUCH_ACTION_MANIPULATION)) { + return TOUCH_ACTION_MANIPULATION; + } + + return TOUCH_ACTION_AUTO; + } + + /** + * @private + * Touch Action + * sets the touchAction property or uses the js alternative + * @param {Manager} manager + * @param {String} value + * @constructor + */ + + var TouchAction = + /*#__PURE__*/ + function () { + function TouchAction(manager, value) { + this.manager = manager; + this.set(value); + } + /** + * @private + * set the touchAction value on the element or enable the polyfill + * @param {String} value + */ + + + var _proto = TouchAction.prototype; + + _proto.set = function set(value) { + // find out the touch-action by the event handlers + if (value === TOUCH_ACTION_COMPUTE) { + value = this.compute(); + } + + if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) { + this.manager.element.style[PREFIXED_TOUCH_ACTION] = value; + } + + this.actions = value.toLowerCase().trim(); + }; + /** + * @private + * just re-set the touchAction value + */ + + + _proto.update = function update() { + this.set(this.manager.options.touchAction); + }; + /** + * @private + * compute the value for the touchAction property based on the recognizer's settings + * @returns {String} value + */ + + + _proto.compute = function compute() { + var actions = []; + each(this.manager.recognizers, function (recognizer) { + if (boolOrFn(recognizer.options.enable, [recognizer])) { + actions = actions.concat(recognizer.getTouchAction()); + } + }); + return cleanTouchActions(actions.join(' ')); + }; + /** + * @private + * this method is called on each input cycle and provides the preventing of the browser behavior + * @param {Object} input + */ + + + _proto.preventDefaults = function preventDefaults(input) { + var srcEvent = input.srcEvent; + var direction = input.offsetDirection; // if the touch action did prevented once this session + + if (this.manager.session.prevented) { + srcEvent.preventDefault(); + return; + } + + var actions = this.actions; + var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE]; + var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y]; + var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X]; + + if (hasNone) { + // do not prevent defaults if this is a tap gesture + var isTapPointer = input.pointers.length === 1; + var isTapMovement = input.distance < 2; + var isTapTouchTime = input.deltaTime < 250; + + if (isTapPointer && isTapMovement && isTapTouchTime) { + return; + } + } + + if (hasPanX && hasPanY) { + // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent + return; + } + + if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) { + return this.preventSrc(srcEvent); + } + }; + /** + * @private + * call preventDefault to prevent the browser's default behavior (scrolling in most cases) + * @param {Object} srcEvent + */ + + + _proto.preventSrc = function preventSrc(srcEvent) { + this.manager.session.prevented = true; + srcEvent.preventDefault(); + }; + + return TouchAction; + }(); + + /** + * @private + * find if a node is in the given parent + * @method hasParent + * @param {HTMLElement} node + * @param {HTMLElement} parent + * @return {Boolean} found + */ + function hasParent(node, parent) { + while (node) { + if (node === parent) { + return true; + } + + node = node.parentNode; + } + + return false; + } + + /** + * @private + * get the center of all the pointers + * @param {Array} pointers + * @return {Object} center contains `x` and `y` properties + */ + + function getCenter(pointers) { + var pointersLength = pointers.length; // no need to loop when only one touch + + if (pointersLength === 1) { + return { + x: round(pointers[0].clientX), + y: round(pointers[0].clientY) + }; + } + + var x = 0; + var y = 0; + var i = 0; + + while (i < pointersLength) { + x += pointers[i].clientX; + y += pointers[i].clientY; + i++; + } + + return { + x: round(x / pointersLength), + y: round(y / pointersLength) + }; + } + + /** + * @private + * create a simple clone from the input used for storage of firstInput and firstMultiple + * @param {Object} input + * @returns {Object} clonedInputData + */ + + function simpleCloneInputData(input) { + // make a simple copy of the pointers because we will get a reference if we don't + // we only need clientXY for the calculations + var pointers = []; + var i = 0; + + while (i < input.pointers.length) { + pointers[i] = { + clientX: round(input.pointers[i].clientX), + clientY: round(input.pointers[i].clientY) + }; + i++; + } + + return { + timeStamp: now(), + pointers: pointers, + center: getCenter(pointers), + deltaX: input.deltaX, + deltaY: input.deltaY + }; + } + + /** + * @private + * calculate the absolute distance between two points + * @param {Object} p1 {x, y} + * @param {Object} p2 {x, y} + * @param {Array} [props] containing x and y keys + * @return {Number} distance + */ + + function getDistance(p1, p2, props) { + if (!props) { + props = PROPS_XY; + } + + var x = p2[props[0]] - p1[props[0]]; + var y = p2[props[1]] - p1[props[1]]; + return Math.sqrt(x * x + y * y); + } + + /** + * @private + * calculate the angle between two coordinates + * @param {Object} p1 + * @param {Object} p2 + * @param {Array} [props] containing x and y keys + * @return {Number} angle + */ + + function getAngle(p1, p2, props) { + if (!props) { + props = PROPS_XY; + } + + var x = p2[props[0]] - p1[props[0]]; + var y = p2[props[1]] - p1[props[1]]; + return Math.atan2(y, x) * 180 / Math.PI; + } + + /** + * @private + * get the direction between two points + * @param {Number} x + * @param {Number} y + * @return {Number} direction + */ + + function getDirection(x, y) { + if (x === y) { + return DIRECTION_NONE; + } + + if (abs(x) >= abs(y)) { + return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; + } + + return y < 0 ? DIRECTION_UP : DIRECTION_DOWN; + } + + function computeDeltaXY(session, input) { + var center = input.center; // let { offsetDelta:offset = {}, prevDelta = {}, prevInput = {} } = session; + // jscs throwing error on defalut destructured values and without defaults tests fail + + var offset = session.offsetDelta || {}; + var prevDelta = session.prevDelta || {}; + var prevInput = session.prevInput || {}; + + if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) { + prevDelta = session.prevDelta = { + x: prevInput.deltaX || 0, + y: prevInput.deltaY || 0 + }; + offset = session.offsetDelta = { + x: center.x, + y: center.y + }; + } + + input.deltaX = prevDelta.x + (center.x - offset.x); + input.deltaY = prevDelta.y + (center.y - offset.y); + } + + /** + * @private + * calculate the velocity between two points. unit is in px per ms. + * @param {Number} deltaTime + * @param {Number} x + * @param {Number} y + * @return {Object} velocity `x` and `y` + */ + function getVelocity(deltaTime, x, y) { + return { + x: x / deltaTime || 0, + y: y / deltaTime || 0 + }; + } + + /** + * @private + * calculate the scale factor between two pointersets + * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out + * @param {Array} start array of pointers + * @param {Array} end array of pointers + * @return {Number} scale + */ + + function getScale(start, end) { + return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY); + } + + /** + * @private + * calculate the rotation degrees between two pointersets + * @param {Array} start array of pointers + * @param {Array} end array of pointers + * @return {Number} rotation + */ + + function getRotation(start, end) { + return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY); + } + + /** + * @private + * velocity is calculated every x ms + * @param {Object} session + * @param {Object} input + */ + + function computeIntervalInputData(session, input) { + var last = session.lastInterval || input; + var deltaTime = input.timeStamp - last.timeStamp; + var velocity; + var velocityX; + var velocityY; + var direction; + + if (input.eventType !== INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) { + var deltaX = input.deltaX - last.deltaX; + var deltaY = input.deltaY - last.deltaY; + var v = getVelocity(deltaTime, deltaX, deltaY); + velocityX = v.x; + velocityY = v.y; + velocity = abs(v.x) > abs(v.y) ? v.x : v.y; + direction = getDirection(deltaX, deltaY); + session.lastInterval = input; + } else { + // use latest velocity info if it doesn't overtake a minimum period + velocity = last.velocity; + velocityX = last.velocityX; + velocityY = last.velocityY; + direction = last.direction; + } + + input.velocity = velocity; + input.velocityX = velocityX; + input.velocityY = velocityY; + input.direction = direction; + } + + /** + * @private + * extend the data with some usable properties like scale, rotate, velocity etc + * @param {Object} manager + * @param {Object} input + */ + + function computeInputData(manager, input) { + var session = manager.session; + var pointers = input.pointers; + var pointersLength = pointers.length; // store the first input to calculate the distance and direction + + if (!session.firstInput) { + session.firstInput = simpleCloneInputData(input); + } // to compute scale and rotation we need to store the multiple touches + + + if (pointersLength > 1 && !session.firstMultiple) { + session.firstMultiple = simpleCloneInputData(input); + } else if (pointersLength === 1) { + session.firstMultiple = false; + } + + var firstInput = session.firstInput, + firstMultiple = session.firstMultiple; + var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center; + var center = input.center = getCenter(pointers); + input.timeStamp = now(); + input.deltaTime = input.timeStamp - firstInput.timeStamp; + input.angle = getAngle(offsetCenter, center); + input.distance = getDistance(offsetCenter, center); + computeDeltaXY(session, input); + input.offsetDirection = getDirection(input.deltaX, input.deltaY); + var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY); + input.overallVelocityX = overallVelocity.x; + input.overallVelocityY = overallVelocity.y; + input.overallVelocity = abs(overallVelocity.x) > abs(overallVelocity.y) ? overallVelocity.x : overallVelocity.y; + input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1; + input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0; + input.maxPointers = !session.prevInput ? input.pointers.length : input.pointers.length > session.prevInput.maxPointers ? input.pointers.length : session.prevInput.maxPointers; + computeIntervalInputData(session, input); // find the correct target + + var target = manager.element; + var srcEvent = input.srcEvent; + var srcEventTarget; + + if (srcEvent.composedPath) { + srcEventTarget = srcEvent.composedPath()[0]; + } else if (srcEvent.path) { + srcEventTarget = srcEvent.path[0]; + } else { + srcEventTarget = srcEvent.target; + } + + if (hasParent(srcEventTarget, target)) { + target = srcEventTarget; + } + + input.target = target; + } + + /** + * @private + * handle input events + * @param {Manager} manager + * @param {String} eventType + * @param {Object} input + */ + + function inputHandler(manager, eventType, input) { + var pointersLen = input.pointers.length; + var changedPointersLen = input.changedPointers.length; + var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0; + var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0; + input.isFirst = !!isFirst; + input.isFinal = !!isFinal; + + if (isFirst) { + manager.session = {}; + } // source event is the normalized value of the domEvents + // like 'touchstart, mouseup, pointerdown' + + + input.eventType = eventType; // compute scale, rotation etc + + computeInputData(manager, input); // emit secret event + + manager.emit('hammer.input', input); + manager.recognize(input); + manager.session.prevInput = input; + } + + /** + * @private + * split string on whitespace + * @param {String} str + * @returns {Array} words + */ + function splitStr(str) { + return str.trim().split(/\s+/g); + } + + /** + * @private + * addEventListener with multiple events at once + * @param {EventTarget} target + * @param {String} types + * @param {Function} handler + */ + + function addEventListeners(target, types, handler) { + each(splitStr(types), function (type) { + target.addEventListener(type, handler, false); + }); + } + + /** + * @private + * removeEventListener with multiple events at once + * @param {EventTarget} target + * @param {String} types + * @param {Function} handler + */ + + function removeEventListeners(target, types, handler) { + each(splitStr(types), function (type) { + target.removeEventListener(type, handler, false); + }); + } + + /** + * @private + * get the window object of an element + * @param {HTMLElement} element + * @returns {DocumentView|Window} + */ + function getWindowForElement(element) { + var doc = element.ownerDocument || element; + return doc.defaultView || doc.parentWindow || window; + } + + /** + * @private + * create new input type manager + * @param {Manager} manager + * @param {Function} callback + * @returns {Input} + * @constructor + */ + + var Input = + /*#__PURE__*/ + function () { + function Input(manager, callback) { + var self = this; + this.manager = manager; + this.callback = callback; + this.element = manager.element; + this.target = manager.options.inputTarget; // smaller wrapper around the handler, for the scope and the enabled state of the manager, + // so when disabled the input events are completely bypassed. + + this.domHandler = function (ev) { + if (boolOrFn(manager.options.enable, [manager])) { + self.handler(ev); + } + }; + + this.init(); + } + /** + * @private + * should handle the inputEvent data and trigger the callback + * @virtual + */ + + + var _proto = Input.prototype; + + _proto.handler = function handler() {}; + /** + * @private + * bind the events + */ + + + _proto.init = function init() { + this.evEl && addEventListeners(this.element, this.evEl, this.domHandler); + this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler); + this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler); + }; + /** + * @private + * unbind the events + */ + + + _proto.destroy = function destroy() { + this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler); + this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler); + this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler); + }; + + return Input; + }(); + + /** + * @private + * find if a array contains the object using indexOf or a simple polyFill + * @param {Array} src + * @param {String} find + * @param {String} [findByKey] + * @return {Boolean|Number} false when not found, or the index + */ + function inArray(src, find, findByKey) { + if (src.indexOf && !findByKey) { + return src.indexOf(find); + } else { + var i = 0; + + while (i < src.length) { + if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) { + // do not use === here, test fails + return i; + } + + i++; + } + + return -1; + } + } + + var POINTER_INPUT_MAP = { + pointerdown: INPUT_START, + pointermove: INPUT_MOVE, + pointerup: INPUT_END, + pointercancel: INPUT_CANCEL, + pointerout: INPUT_CANCEL + }; // in IE10 the pointer types is defined as an enum + + var IE10_POINTER_TYPE_ENUM = { + 2: INPUT_TYPE_TOUCH, + 3: INPUT_TYPE_PEN, + 4: INPUT_TYPE_MOUSE, + 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816 + + }; + var POINTER_ELEMENT_EVENTS = 'pointerdown'; + var POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; // IE10 has prefixed support, and case-sensitive + + if (win.MSPointerEvent && !win.PointerEvent) { + POINTER_ELEMENT_EVENTS = 'MSPointerDown'; + POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel'; + } + /** + * @private + * Pointer events input + * @constructor + * @extends Input + */ + + + var PointerEventInput = + /*#__PURE__*/ + function (_Input) { + _inheritsLoose(PointerEventInput, _Input); + + function PointerEventInput() { + var _this; + + var proto = PointerEventInput.prototype; + proto.evEl = POINTER_ELEMENT_EVENTS; + proto.evWin = POINTER_WINDOW_EVENTS; + _this = _Input.apply(this, arguments) || this; + _this.store = _this.manager.session.pointerEvents = []; + return _this; + } + /** + * @private + * handle mouse events + * @param {Object} ev + */ + + + var _proto = PointerEventInput.prototype; + + _proto.handler = function handler(ev) { + var store = this.store; + var removePointer = false; + var eventTypeNormalized = ev.type.toLowerCase().replace('ms', ''); + var eventType = POINTER_INPUT_MAP[eventTypeNormalized]; + var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType; + var isTouch = pointerType === INPUT_TYPE_TOUCH; // get index of the event in the store + + var storeIndex = inArray(store, ev.pointerId, 'pointerId'); // start and mouse must be down + + if (eventType & INPUT_START && (ev.button === 0 || isTouch)) { + if (storeIndex < 0) { + store.push(ev); + storeIndex = store.length - 1; + } + } else if (eventType & (INPUT_END | INPUT_CANCEL)) { + removePointer = true; + } // it not found, so the pointer hasn't been down (so it's probably a hover) + + + if (storeIndex < 0) { + return; + } // update the event in the store + + + store[storeIndex] = ev; + this.callback(this.manager, eventType, { + pointers: store, + changedPointers: [ev], + pointerType: pointerType, + srcEvent: ev + }); + + if (removePointer) { + // remove from the store + store.splice(storeIndex, 1); + } + }; + + return PointerEventInput; + }(Input); + + /** + * @private + * convert array-like objects to real arrays + * @param {Object} obj + * @returns {Array} + */ + function toArray(obj) { + return Array.prototype.slice.call(obj, 0); + } + + /** + * @private + * unique array with objects based on a key (like 'id') or just by the array's value + * @param {Array} src [{id:1},{id:2},{id:1}] + * @param {String} [key] + * @param {Boolean} [sort=False] + * @returns {Array} [{id:1},{id:2}] + */ + + function uniqueArray(src, key, sort) { + var results = []; + var values = []; + var i = 0; + + while (i < src.length) { + var val = key ? src[i][key] : src[i]; + + if (inArray(values, val) < 0) { + results.push(src[i]); + } + + values[i] = val; + i++; + } + + if (sort) { + if (!key) { + results = results.sort(); + } else { + results = results.sort(function (a, b) { + return a[key] > b[key]; + }); + } + } + + return results; + } + + var TOUCH_INPUT_MAP = { + touchstart: INPUT_START, + touchmove: INPUT_MOVE, + touchend: INPUT_END, + touchcancel: INPUT_CANCEL + }; + var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel'; + /** + * @private + * Multi-user touch events input + * @constructor + * @extends Input + */ + + var TouchInput = + /*#__PURE__*/ + function (_Input) { + _inheritsLoose(TouchInput, _Input); + + function TouchInput() { + var _this; + + TouchInput.prototype.evTarget = TOUCH_TARGET_EVENTS; + _this = _Input.apply(this, arguments) || this; + _this.targetIds = {}; // this.evTarget = TOUCH_TARGET_EVENTS; + + return _this; + } + + var _proto = TouchInput.prototype; + + _proto.handler = function handler(ev) { + var type = TOUCH_INPUT_MAP[ev.type]; + var touches = getTouches.call(this, ev, type); + + if (!touches) { + return; + } + + this.callback(this.manager, type, { + pointers: touches[0], + changedPointers: touches[1], + pointerType: INPUT_TYPE_TOUCH, + srcEvent: ev + }); + }; + + return TouchInput; + }(Input); + + function getTouches(ev, type) { + var allTouches = toArray(ev.touches); + var targetIds = this.targetIds; // when there is only one touch, the process can be simplified + + if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) { + targetIds[allTouches[0].identifier] = true; + return [allTouches, allTouches]; + } + + var i; + var targetTouches; + var changedTouches = toArray(ev.changedTouches); + var changedTargetTouches = []; + var target = this.target; // get target touches from touches + + targetTouches = allTouches.filter(function (touch) { + return hasParent(touch.target, target); + }); // collect touches + + if (type === INPUT_START) { + i = 0; + + while (i < targetTouches.length) { + targetIds[targetTouches[i].identifier] = true; + i++; + } + } // filter changed touches to only contain touches that exist in the collected target ids + + + i = 0; + + while (i < changedTouches.length) { + if (targetIds[changedTouches[i].identifier]) { + changedTargetTouches.push(changedTouches[i]); + } // cleanup removed touches + + + if (type & (INPUT_END | INPUT_CANCEL)) { + delete targetIds[changedTouches[i].identifier]; + } + + i++; + } + + if (!changedTargetTouches.length) { + return; + } + + return [// merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel' + uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches]; + } + + var MOUSE_INPUT_MAP = { + mousedown: INPUT_START, + mousemove: INPUT_MOVE, + mouseup: INPUT_END + }; + var MOUSE_ELEMENT_EVENTS = 'mousedown'; + var MOUSE_WINDOW_EVENTS = 'mousemove mouseup'; + /** + * @private + * Mouse events input + * @constructor + * @extends Input + */ + + var MouseInput = + /*#__PURE__*/ + function (_Input) { + _inheritsLoose(MouseInput, _Input); + + function MouseInput() { + var _this; + + var proto = MouseInput.prototype; + proto.evEl = MOUSE_ELEMENT_EVENTS; + proto.evWin = MOUSE_WINDOW_EVENTS; + _this = _Input.apply(this, arguments) || this; + _this.pressed = false; // mousedown state + + return _this; + } + /** + * @private + * handle mouse events + * @param {Object} ev + */ + + + var _proto = MouseInput.prototype; + + _proto.handler = function handler(ev) { + var eventType = MOUSE_INPUT_MAP[ev.type]; // on start we want to have the left mouse button down + + if (eventType & INPUT_START && ev.button === 0) { + this.pressed = true; + } + + if (eventType & INPUT_MOVE && ev.which !== 1) { + eventType = INPUT_END; + } // mouse must be down + + + if (!this.pressed) { + return; + } + + if (eventType & INPUT_END) { + this.pressed = false; + } + + this.callback(this.manager, eventType, { + pointers: [ev], + changedPointers: [ev], + pointerType: INPUT_TYPE_MOUSE, + srcEvent: ev + }); + }; + + return MouseInput; + }(Input); + + /** + * @private + * Combined touch and mouse input + * + * Touch has a higher priority then mouse, and while touching no mouse events are allowed. + * This because touch devices also emit mouse events while doing a touch. + * + * @constructor + * @extends Input + */ + + var DEDUP_TIMEOUT = 2500; + var DEDUP_DISTANCE = 25; + + function setLastTouch(eventData) { + var _eventData$changedPoi = eventData.changedPointers, + touch = _eventData$changedPoi[0]; + + if (touch.identifier === this.primaryTouch) { + var lastTouch = { + x: touch.clientX, + y: touch.clientY + }; + var lts = this.lastTouches; + this.lastTouches.push(lastTouch); + + var removeLastTouch = function removeLastTouch() { + var i = lts.indexOf(lastTouch); + + if (i > -1) { + lts.splice(i, 1); + } + }; + + setTimeout(removeLastTouch, DEDUP_TIMEOUT); + } + } + + function recordTouches(eventType, eventData) { + if (eventType & INPUT_START) { + this.primaryTouch = eventData.changedPointers[0].identifier; + setLastTouch.call(this, eventData); + } else if (eventType & (INPUT_END | INPUT_CANCEL)) { + setLastTouch.call(this, eventData); + } + } + + function isSyntheticEvent(eventData) { + var x = eventData.srcEvent.clientX; + var y = eventData.srcEvent.clientY; + + for (var i = 0; i < this.lastTouches.length; i++) { + var t = this.lastTouches[i]; + var dx = Math.abs(x - t.x); + var dy = Math.abs(y - t.y); + + if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) { + return true; + } + } + + return false; + } + + var TouchMouseInput = + /*#__PURE__*/ + function () { + var TouchMouseInput = + /*#__PURE__*/ + function (_Input) { + _inheritsLoose(TouchMouseInput, _Input); + + function TouchMouseInput(_manager, callback) { + var _this; + + _this = _Input.call(this, _manager, callback) || this; + + _this.handler = function (manager, inputEvent, inputData) { + var isTouch = inputData.pointerType === INPUT_TYPE_TOUCH; + var isMouse = inputData.pointerType === INPUT_TYPE_MOUSE; + + if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) { + return; + } // when we're in a touch event, record touches to de-dupe synthetic mouse event + + + if (isTouch) { + recordTouches.call(_assertThisInitialized(_assertThisInitialized(_this)), inputEvent, inputData); + } else if (isMouse && isSyntheticEvent.call(_assertThisInitialized(_assertThisInitialized(_this)), inputData)) { + return; + } + + _this.callback(manager, inputEvent, inputData); + }; + + _this.touch = new TouchInput(_this.manager, _this.handler); + _this.mouse = new MouseInput(_this.manager, _this.handler); + _this.primaryTouch = null; + _this.lastTouches = []; + return _this; + } + /** + * @private + * handle mouse and touch events + * @param {Hammer} manager + * @param {String} inputEvent + * @param {Object} inputData + */ + + + var _proto = TouchMouseInput.prototype; + + /** + * @private + * remove the event listeners + */ + _proto.destroy = function destroy() { + this.touch.destroy(); + this.mouse.destroy(); + }; + + return TouchMouseInput; + }(Input); + + return TouchMouseInput; + }(); + + /** + * @private + * create new input type manager + * called by the Manager constructor + * @param {Hammer} manager + * @returns {Input} + */ + + function createInputInstance(manager) { + var Type; // let inputClass = manager.options.inputClass; + + var inputClass = manager.options.inputClass; + + if (inputClass) { + Type = inputClass; + } else if (SUPPORT_POINTER_EVENTS) { + Type = PointerEventInput; + } else if (SUPPORT_ONLY_TOUCH) { + Type = TouchInput; + } else if (!SUPPORT_TOUCH) { + Type = MouseInput; + } else { + Type = TouchMouseInput; + } + + return new Type(manager, inputHandler); + } + + /** + * @private + * if the argument is an array, we want to execute the fn on each entry + * if it aint an array we don't want to do a thing. + * this is used by all the methods that accept a single and array argument. + * @param {*|Array} arg + * @param {String} fn + * @param {Object} [context] + * @returns {Boolean} + */ + + function invokeArrayArg(arg, fn, context) { + if (Array.isArray(arg)) { + each(arg, context[fn], context); + return true; + } + + return false; + } + + var STATE_POSSIBLE = 1; + var STATE_BEGAN = 2; + var STATE_CHANGED = 4; + var STATE_ENDED = 8; + var STATE_RECOGNIZED = STATE_ENDED; + var STATE_CANCELLED = 16; + var STATE_FAILED = 32; + + /** + * @private + * get a unique id + * @returns {number} uniqueId + */ + var _uniqueId = 1; + function uniqueId() { + return _uniqueId++; + } + + /** + * @private + * get a recognizer by name if it is bound to a manager + * @param {Recognizer|String} otherRecognizer + * @param {Recognizer} recognizer + * @returns {Recognizer} + */ + function getRecognizerByNameIfManager(otherRecognizer, recognizer) { + var manager = recognizer.manager; + + if (manager) { + return manager.get(otherRecognizer); + } + + return otherRecognizer; + } + + /** + * @private + * get a usable string, used as event postfix + * @param {constant} state + * @returns {String} state + */ + + function stateStr(state) { + if (state & STATE_CANCELLED) { + return 'cancel'; + } else if (state & STATE_ENDED) { + return 'end'; + } else if (state & STATE_CHANGED) { + return 'move'; + } else if (state & STATE_BEGAN) { + return 'start'; + } + + return ''; + } + + /** + * @private + * Recognizer flow explained; * + * All recognizers have the initial state of POSSIBLE when a input session starts. + * The definition of a input session is from the first input until the last input, with all it's movement in it. * + * Example session for mouse-input: mousedown -> mousemove -> mouseup + * + * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed + * which determines with state it should be. + * + * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to + * POSSIBLE to give it another change on the next cycle. + * + * Possible + * | + * +-----+---------------+ + * | | + * +-----+-----+ | + * | | | + * Failed Cancelled | + * +-------+------+ + * | | + * Recognized Began + * | + * Changed + * | + * Ended/Recognized + */ + + /** + * @private + * Recognizer + * Every recognizer needs to extend from this class. + * @constructor + * @param {Object} options + */ + + var Recognizer = + /*#__PURE__*/ + function () { + function Recognizer(options) { + if (options === void 0) { + options = {}; + } + + this.options = _extends({ + enable: true + }, options); + this.id = uniqueId(); + this.manager = null; // default is enable true + + this.state = STATE_POSSIBLE; + this.simultaneous = {}; + this.requireFail = []; + } + /** + * @private + * set options + * @param {Object} options + * @return {Recognizer} + */ + + + var _proto = Recognizer.prototype; + + _proto.set = function set(options) { + assign$1(this.options, options); // also update the touchAction, in case something changed about the directions/enabled state + + this.manager && this.manager.touchAction.update(); + return this; + }; + /** + * @private + * recognize simultaneous with an other recognizer. + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this + */ + + + _proto.recognizeWith = function recognizeWith(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) { + return this; + } + + var simultaneous = this.simultaneous; + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + + if (!simultaneous[otherRecognizer.id]) { + simultaneous[otherRecognizer.id] = otherRecognizer; + otherRecognizer.recognizeWith(this); + } + + return this; + }; + /** + * @private + * drop the simultaneous link. it doesnt remove the link on the other recognizer. + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this + */ + + + _proto.dropRecognizeWith = function dropRecognizeWith(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) { + return this; + } + + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + delete this.simultaneous[otherRecognizer.id]; + return this; + }; + /** + * @private + * recognizer can only run when an other is failing + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this + */ + + + _proto.requireFailure = function requireFailure(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) { + return this; + } + + var requireFail = this.requireFail; + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + + if (inArray(requireFail, otherRecognizer) === -1) { + requireFail.push(otherRecognizer); + otherRecognizer.requireFailure(this); + } + + return this; + }; + /** + * @private + * drop the requireFailure link. it does not remove the link on the other recognizer. + * @param {Recognizer} otherRecognizer + * @returns {Recognizer} this + */ + + + _proto.dropRequireFailure = function dropRequireFailure(otherRecognizer) { + if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) { + return this; + } + + otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this); + var index = inArray(this.requireFail, otherRecognizer); + + if (index > -1) { + this.requireFail.splice(index, 1); + } + + return this; + }; + /** + * @private + * has require failures boolean + * @returns {boolean} + */ + + + _proto.hasRequireFailures = function hasRequireFailures() { + return this.requireFail.length > 0; + }; + /** + * @private + * if the recognizer can recognize simultaneous with an other recognizer + * @param {Recognizer} otherRecognizer + * @returns {Boolean} + */ + + + _proto.canRecognizeWith = function canRecognizeWith(otherRecognizer) { + return !!this.simultaneous[otherRecognizer.id]; + }; + /** + * @private + * You should use `tryEmit` instead of `emit` directly to check + * that all the needed recognizers has failed before emitting. + * @param {Object} input + */ + + + _proto.emit = function emit(input) { + var self = this; + var state = this.state; + + function emit(event) { + self.manager.emit(event, input); + } // 'panstart' and 'panmove' + + + if (state < STATE_ENDED) { + emit(self.options.event + stateStr(state)); + } + + emit(self.options.event); // simple 'eventName' events + + if (input.additionalEvent) { + // additional event(panleft, panright, pinchin, pinchout...) + emit(input.additionalEvent); + } // panend and pancancel + + + if (state >= STATE_ENDED) { + emit(self.options.event + stateStr(state)); + } + }; + /** + * @private + * Check that all the require failure recognizers has failed, + * if true, it emits a gesture event, + * otherwise, setup the state to FAILED. + * @param {Object} input + */ + + + _proto.tryEmit = function tryEmit(input) { + if (this.canEmit()) { + return this.emit(input); + } // it's failing anyway + + + this.state = STATE_FAILED; + }; + /** + * @private + * can we emit? + * @returns {boolean} + */ + + + _proto.canEmit = function canEmit() { + var i = 0; + + while (i < this.requireFail.length) { + if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) { + return false; + } + + i++; + } + + return true; + }; + /** + * @private + * update the recognizer + * @param {Object} inputData + */ + + + _proto.recognize = function recognize(inputData) { + // make a new copy of the inputData + // so we can change the inputData without messing up the other recognizers + var inputDataClone = assign$1({}, inputData); // is is enabled and allow recognizing? + + if (!boolOrFn(this.options.enable, [this, inputDataClone])) { + this.reset(); + this.state = STATE_FAILED; + return; + } // reset when we've reached the end + + + if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) { + this.state = STATE_POSSIBLE; + } + + this.state = this.process(inputDataClone); // the recognizer has recognized a gesture + // so trigger an event + + if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) { + this.tryEmit(inputDataClone); + } + }; + /** + * @private + * return the state of the recognizer + * the actual recognizing happens in this method + * @virtual + * @param {Object} inputData + * @returns {constant} STATE + */ + + /* jshint ignore:start */ + + + _proto.process = function process(inputData) {}; + /* jshint ignore:end */ + + /** + * @private + * return the preferred touch-action + * @virtual + * @returns {Array} + */ + + + _proto.getTouchAction = function getTouchAction() {}; + /** + * @private + * called when the gesture isn't allowed to recognize + * like when another is being recognized or it is disabled + * @virtual + */ + + + _proto.reset = function reset() {}; + + return Recognizer; + }(); + + /** + * @private + * A tap is recognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur + * between the given interval and position. The delay option can be used to recognize multi-taps without firing + * a single tap. + * + * The eventData from the emitted event contains the property `tapCount`, which contains the amount of + * multi-taps being recognized. + * @constructor + * @extends Recognizer + */ + + var TapRecognizer = + /*#__PURE__*/ + function (_Recognizer) { + _inheritsLoose(TapRecognizer, _Recognizer); + + function TapRecognizer(options) { + var _this; + + if (options === void 0) { + options = {}; + } + + _this = _Recognizer.call(this, _extends({ + event: 'tap', + pointers: 1, + taps: 1, + interval: 300, + // max time between the multi-tap taps + time: 250, + // max time of the pointer to be down (like finger on the screen) + threshold: 9, + // a minimal movement is ok, but keep it low + posThreshold: 10 + }, options)) || this; // previous time and center, + // used for tap counting + + _this.pTime = false; + _this.pCenter = false; + _this._timer = null; + _this._input = null; + _this.count = 0; + return _this; + } + + var _proto = TapRecognizer.prototype; + + _proto.getTouchAction = function getTouchAction() { + return [TOUCH_ACTION_MANIPULATION]; + }; + + _proto.process = function process(input) { + var _this2 = this; + + var options = this.options; + var validPointers = input.pointers.length === options.pointers; + var validMovement = input.distance < options.threshold; + var validTouchTime = input.deltaTime < options.time; + this.reset(); + + if (input.eventType & INPUT_START && this.count === 0) { + return this.failTimeout(); + } // we only allow little movement + // and we've reached an end event, so a tap is possible + + + if (validMovement && validTouchTime && validPointers) { + if (input.eventType !== INPUT_END) { + return this.failTimeout(); + } + + var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true; + var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold; + this.pTime = input.timeStamp; + this.pCenter = input.center; + + if (!validMultiTap || !validInterval) { + this.count = 1; + } else { + this.count += 1; + } + + this._input = input; // if tap count matches we have recognized it, + // else it has began recognizing... + + var tapCount = this.count % options.taps; + + if (tapCount === 0) { + // no failing requirements, immediately trigger the tap event + // or wait as long as the multitap interval to trigger + if (!this.hasRequireFailures()) { + return STATE_RECOGNIZED; + } else { + this._timer = setTimeout(function () { + _this2.state = STATE_RECOGNIZED; + + _this2.tryEmit(); + }, options.interval); + return STATE_BEGAN; + } + } + } + + return STATE_FAILED; + }; + + _proto.failTimeout = function failTimeout() { + var _this3 = this; + + this._timer = setTimeout(function () { + _this3.state = STATE_FAILED; + }, this.options.interval); + return STATE_FAILED; + }; + + _proto.reset = function reset() { + clearTimeout(this._timer); + }; + + _proto.emit = function emit() { + if (this.state === STATE_RECOGNIZED) { + this._input.tapCount = this.count; + this.manager.emit(this.options.event, this._input); + } + }; + + return TapRecognizer; + }(Recognizer); + + /** + * @private + * This recognizer is just used as a base for the simple attribute recognizers. + * @constructor + * @extends Recognizer + */ + + var AttrRecognizer = + /*#__PURE__*/ + function (_Recognizer) { + _inheritsLoose(AttrRecognizer, _Recognizer); + + function AttrRecognizer(options) { + if (options === void 0) { + options = {}; + } + + return _Recognizer.call(this, _extends({ + pointers: 1 + }, options)) || this; + } + /** + * @private + * Used to check if it the recognizer receives valid input, like input.distance > 10. + * @memberof AttrRecognizer + * @param {Object} input + * @returns {Boolean} recognized + */ + + + var _proto = AttrRecognizer.prototype; + + _proto.attrTest = function attrTest(input) { + var optionPointers = this.options.pointers; + return optionPointers === 0 || input.pointers.length === optionPointers; + }; + /** + * @private + * Process the input and return the state for the recognizer + * @memberof AttrRecognizer + * @param {Object} input + * @returns {*} State + */ + + + _proto.process = function process(input) { + var state = this.state; + var eventType = input.eventType; + var isRecognized = state & (STATE_BEGAN | STATE_CHANGED); + var isValid = this.attrTest(input); // on cancel input and we've recognized before, return STATE_CANCELLED + + if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) { + return state | STATE_CANCELLED; + } else if (isRecognized || isValid) { + if (eventType & INPUT_END) { + return state | STATE_ENDED; + } else if (!(state & STATE_BEGAN)) { + return STATE_BEGAN; + } + + return state | STATE_CHANGED; + } + + return STATE_FAILED; + }; + + return AttrRecognizer; + }(Recognizer); + + /** + * @private + * direction cons to string + * @param {constant} direction + * @returns {String} + */ + + function directionStr(direction) { + if (direction === DIRECTION_DOWN) { + return 'down'; + } else if (direction === DIRECTION_UP) { + return 'up'; + } else if (direction === DIRECTION_LEFT) { + return 'left'; + } else if (direction === DIRECTION_RIGHT) { + return 'right'; + } + + return ''; + } + + /** + * @private + * Pan + * Recognized when the pointer is down and moved in the allowed direction. + * @constructor + * @extends AttrRecognizer + */ + + var PanRecognizer = + /*#__PURE__*/ + function (_AttrRecognizer) { + _inheritsLoose(PanRecognizer, _AttrRecognizer); + + function PanRecognizer(options) { + var _this; + + if (options === void 0) { + options = {}; + } + + _this = _AttrRecognizer.call(this, _extends({ + event: 'pan', + threshold: 10, + pointers: 1, + direction: DIRECTION_ALL + }, options)) || this; + _this.pX = null; + _this.pY = null; + return _this; + } + + var _proto = PanRecognizer.prototype; + + _proto.getTouchAction = function getTouchAction() { + var direction = this.options.direction; + var actions = []; + + if (direction & DIRECTION_HORIZONTAL) { + actions.push(TOUCH_ACTION_PAN_Y); + } + + if (direction & DIRECTION_VERTICAL) { + actions.push(TOUCH_ACTION_PAN_X); + } + + return actions; + }; + + _proto.directionTest = function directionTest(input) { + var options = this.options; + var hasMoved = true; + var distance = input.distance; + var direction = input.direction; + var x = input.deltaX; + var y = input.deltaY; // lock to axis? + + if (!(direction & options.direction)) { + if (options.direction & DIRECTION_HORIZONTAL) { + direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT; + hasMoved = x !== this.pX; + distance = Math.abs(input.deltaX); + } else { + direction = y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN; + hasMoved = y !== this.pY; + distance = Math.abs(input.deltaY); + } + } + + input.direction = direction; + return hasMoved && distance > options.threshold && direction & options.direction; + }; + + _proto.attrTest = function attrTest(input) { + return AttrRecognizer.prototype.attrTest.call(this, input) && ( // replace with a super call + this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input)); + }; + + _proto.emit = function emit(input) { + this.pX = input.deltaX; + this.pY = input.deltaY; + var direction = directionStr(input.direction); + + if (direction) { + input.additionalEvent = this.options.event + direction; + } + + _AttrRecognizer.prototype.emit.call(this, input); + }; + + return PanRecognizer; + }(AttrRecognizer); + + /** + * @private + * Swipe + * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction. + * @constructor + * @extends AttrRecognizer + */ + + var SwipeRecognizer = + /*#__PURE__*/ + function (_AttrRecognizer) { + _inheritsLoose(SwipeRecognizer, _AttrRecognizer); + + function SwipeRecognizer(options) { + if (options === void 0) { + options = {}; + } + + return _AttrRecognizer.call(this, _extends({ + event: 'swipe', + threshold: 10, + velocity: 0.3, + direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL, + pointers: 1 + }, options)) || this; + } + + var _proto = SwipeRecognizer.prototype; + + _proto.getTouchAction = function getTouchAction() { + return PanRecognizer.prototype.getTouchAction.call(this); + }; + + _proto.attrTest = function attrTest(input) { + var direction = this.options.direction; + var velocity; + + if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) { + velocity = input.overallVelocity; + } else if (direction & DIRECTION_HORIZONTAL) { + velocity = input.overallVelocityX; + } else if (direction & DIRECTION_VERTICAL) { + velocity = input.overallVelocityY; + } + + return _AttrRecognizer.prototype.attrTest.call(this, input) && direction & input.offsetDirection && input.distance > this.options.threshold && input.maxPointers === this.options.pointers && abs(velocity) > this.options.velocity && input.eventType & INPUT_END; + }; + + _proto.emit = function emit(input) { + var direction = directionStr(input.offsetDirection); + + if (direction) { + this.manager.emit(this.options.event + direction, input); + } + + this.manager.emit(this.options.event, input); + }; + + return SwipeRecognizer; + }(AttrRecognizer); + + /** + * @private + * Pinch + * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out). + * @constructor + * @extends AttrRecognizer + */ + + var PinchRecognizer = + /*#__PURE__*/ + function (_AttrRecognizer) { + _inheritsLoose(PinchRecognizer, _AttrRecognizer); + + function PinchRecognizer(options) { + if (options === void 0) { + options = {}; + } + + return _AttrRecognizer.call(this, _extends({ + event: 'pinch', + threshold: 0, + pointers: 2 + }, options)) || this; + } + + var _proto = PinchRecognizer.prototype; + + _proto.getTouchAction = function getTouchAction() { + return [TOUCH_ACTION_NONE]; + }; + + _proto.attrTest = function attrTest(input) { + return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN); + }; + + _proto.emit = function emit(input) { + if (input.scale !== 1) { + var inOut = input.scale < 1 ? 'in' : 'out'; + input.additionalEvent = this.options.event + inOut; + } + + _AttrRecognizer.prototype.emit.call(this, input); + }; + + return PinchRecognizer; + }(AttrRecognizer); + + /** + * @private + * Rotate + * Recognized when two or more pointer are moving in a circular motion. + * @constructor + * @extends AttrRecognizer + */ + + var RotateRecognizer = + /*#__PURE__*/ + function (_AttrRecognizer) { + _inheritsLoose(RotateRecognizer, _AttrRecognizer); + + function RotateRecognizer(options) { + if (options === void 0) { + options = {}; + } + + return _AttrRecognizer.call(this, _extends({ + event: 'rotate', + threshold: 0, + pointers: 2 + }, options)) || this; + } + + var _proto = RotateRecognizer.prototype; + + _proto.getTouchAction = function getTouchAction() { + return [TOUCH_ACTION_NONE]; + }; + + _proto.attrTest = function attrTest(input) { + return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN); + }; + + return RotateRecognizer; + }(AttrRecognizer); + + /** + * @private + * Press + * Recognized when the pointer is down for x ms without any movement. + * @constructor + * @extends Recognizer + */ + + var PressRecognizer = + /*#__PURE__*/ + function (_Recognizer) { + _inheritsLoose(PressRecognizer, _Recognizer); + + function PressRecognizer(options) { + var _this; + + if (options === void 0) { + options = {}; + } + + _this = _Recognizer.call(this, _extends({ + event: 'press', + pointers: 1, + time: 251, + // minimal time of the pointer to be pressed + threshold: 9 + }, options)) || this; + _this._timer = null; + _this._input = null; + return _this; + } + + var _proto = PressRecognizer.prototype; + + _proto.getTouchAction = function getTouchAction() { + return [TOUCH_ACTION_AUTO]; + }; + + _proto.process = function process(input) { + var _this2 = this; + + var options = this.options; + var validPointers = input.pointers.length === options.pointers; + var validMovement = input.distance < options.threshold; + var validTime = input.deltaTime > options.time; + this._input = input; // we only allow little movement + // and we've reached an end event, so a tap is possible + + if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) { + this.reset(); + } else if (input.eventType & INPUT_START) { + this.reset(); + this._timer = setTimeout(function () { + _this2.state = STATE_RECOGNIZED; + + _this2.tryEmit(); + }, options.time); + } else if (input.eventType & INPUT_END) { + return STATE_RECOGNIZED; + } + + return STATE_FAILED; + }; + + _proto.reset = function reset() { + clearTimeout(this._timer); + }; + + _proto.emit = function emit(input) { + if (this.state !== STATE_RECOGNIZED) { + return; + } + + if (input && input.eventType & INPUT_END) { + this.manager.emit(this.options.event + "up", input); + } else { + this._input.timeStamp = now(); + this.manager.emit(this.options.event, this._input); + } + }; + + return PressRecognizer; + }(Recognizer); + + var defaults = { + /** + * @private + * set if DOM events are being triggered. + * But this is slower and unused by simple implementations, so disabled by default. + * @type {Boolean} + * @default false + */ + domEvents: false, + + /** + * @private + * The value for the touchAction property/fallback. + * When set to `compute` it will magically set the correct value based on the added recognizers. + * @type {String} + * @default compute + */ + touchAction: TOUCH_ACTION_COMPUTE, + + /** + * @private + * @type {Boolean} + * @default true + */ + enable: true, + + /** + * @private + * EXPERIMENTAL FEATURE -- can be removed/changed + * Change the parent input target element. + * If Null, then it is being set the to main element. + * @type {Null|EventTarget} + * @default null + */ + inputTarget: null, + + /** + * @private + * force an input class + * @type {Null|Function} + * @default null + */ + inputClass: null, + + /** + * @private + * Some CSS properties can be used to improve the working of Hammer. + * Add them to this method and they will be set when creating a new Manager. + * @namespace + */ + cssProps: { + /** + * @private + * Disables text selection to improve the dragging gesture. Mainly for desktop browsers. + * @type {String} + * @default 'none' + */ + userSelect: "none", + + /** + * @private + * Disable the Windows Phone grippers when pressing an element. + * @type {String} + * @default 'none' + */ + touchSelect: "none", + + /** + * @private + * Disables the default callout shown when you touch and hold a touch target. + * On iOS, when you touch and hold a touch target such as a link, Safari displays + * a callout containing information about the link. This property allows you to disable that callout. + * @type {String} + * @default 'none' + */ + touchCallout: "none", + + /** + * @private + * Specifies whether zooming is enabled. Used by IE10> + * @type {String} + * @default 'none' + */ + contentZooming: "none", + + /** + * @private + * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers. + * @type {String} + * @default 'none' + */ + userDrag: "none", + + /** + * @private + * Overrides the highlight color shown when the user taps a link or a JavaScript + * clickable element in iOS. This property obeys the alpha value, if specified. + * @type {String} + * @default 'rgba(0,0,0,0)' + */ + tapHighlightColor: "rgba(0,0,0,0)" + } + }; + /** + * @private + * Default recognizer setup when calling `Hammer()` + * When creating a new Manager these will be skipped. + * This is separated with other defaults because of tree-shaking. + * @type {Array} + */ + + var preset = [[RotateRecognizer, { + enable: false + }], [PinchRecognizer, { + enable: false + }, ['rotate']], [SwipeRecognizer, { + direction: DIRECTION_HORIZONTAL + }], [PanRecognizer, { + direction: DIRECTION_HORIZONTAL + }, ['swipe']], [TapRecognizer], [TapRecognizer, { + event: 'doubletap', + taps: 2 + }, ['tap']], [PressRecognizer]]; + + var STOP = 1; + var FORCED_STOP = 2; + /** + * @private + * add/remove the css properties as defined in manager.options.cssProps + * @param {Manager} manager + * @param {Boolean} add + */ + + function toggleCssProps(manager, add) { + var element = manager.element; + + if (!element.style) { + return; + } + + var prop; + each(manager.options.cssProps, function (value, name) { + prop = prefixed(element.style, name); + + if (add) { + manager.oldCssProps[prop] = element.style[prop]; + element.style[prop] = value; + } else { + element.style[prop] = manager.oldCssProps[prop] || ""; + } + }); + + if (!add) { + manager.oldCssProps = {}; + } + } + /** + * @private + * trigger dom event + * @param {String} event + * @param {Object} data + */ + + + function triggerDomEvent(event, data) { + var gestureEvent = document.createEvent("Event"); + gestureEvent.initEvent(event, true, true); + gestureEvent.gesture = data; + data.target.dispatchEvent(gestureEvent); + } + /** + * @private + * Manager + * @param {HTMLElement} element + * @param {Object} [options] + * @constructor + */ + + + var Manager = + /*#__PURE__*/ + function () { + function Manager(element, options) { + var _this = this; + + this.options = assign$1({}, defaults, options || {}); + this.options.inputTarget = this.options.inputTarget || element; + this.handlers = {}; + this.session = {}; + this.recognizers = []; + this.oldCssProps = {}; + this.element = element; + this.input = createInputInstance(this); + this.touchAction = new TouchAction(this, this.options.touchAction); + toggleCssProps(this, true); + each(this.options.recognizers, function (item) { + var recognizer = _this.add(new item[0](item[1])); + + item[2] && recognizer.recognizeWith(item[2]); + item[3] && recognizer.requireFailure(item[3]); + }, this); + } + /** + * @private + * set options + * @param {Object} options + * @returns {Manager} + */ + + + var _proto = Manager.prototype; + + _proto.set = function set(options) { + assign$1(this.options, options); // Options that need a little more setup + + if (options.touchAction) { + this.touchAction.update(); + } + + if (options.inputTarget) { + // Clean up existing event listeners and reinitialize + this.input.destroy(); + this.input.target = options.inputTarget; + this.input.init(); + } + + return this; + }; + /** + * @private + * stop recognizing for this session. + * This session will be discarded, when a new [input]start event is fired. + * When forced, the recognizer cycle is stopped immediately. + * @param {Boolean} [force] + */ + + + _proto.stop = function stop(force) { + this.session.stopped = force ? FORCED_STOP : STOP; + }; + /** + * @private + * run the recognizers! + * called by the inputHandler function on every movement of the pointers (touches) + * it walks through all the recognizers and tries to detect the gesture that is being made + * @param {Object} inputData + */ + + + _proto.recognize = function recognize(inputData) { + var session = this.session; + + if (session.stopped) { + return; + } // run the touch-action polyfill + + + this.touchAction.preventDefaults(inputData); + var recognizer; + var recognizers = this.recognizers; // this holds the recognizer that is being recognized. + // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED + // if no recognizer is detecting a thing, it is set to `null` + + var curRecognizer = session.curRecognizer; // reset when the last recognizer is recognized + // or when we're in a new session + + if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) { + session.curRecognizer = null; + curRecognizer = null; + } + + var i = 0; + + while (i < recognizers.length) { + recognizer = recognizers[i]; // find out if we are allowed try to recognize the input for this one. + // 1. allow if the session is NOT forced stopped (see the .stop() method) + // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one + // that is being recognized. + // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer. + // this can be setup with the `recognizeWith()` method on the recognizer. + + if (session.stopped !== FORCED_STOP && ( // 1 + !curRecognizer || recognizer === curRecognizer || // 2 + recognizer.canRecognizeWith(curRecognizer))) { + // 3 + recognizer.recognize(inputData); + } else { + recognizer.reset(); + } // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the + // current active recognizer. but only if we don't already have an active recognizer + + + if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) { + session.curRecognizer = recognizer; + curRecognizer = recognizer; + } + + i++; + } + }; + /** + * @private + * get a recognizer by its event name. + * @param {Recognizer|String} recognizer + * @returns {Recognizer|Null} + */ + + + _proto.get = function get(recognizer) { + if (recognizer instanceof Recognizer) { + return recognizer; + } + + var recognizers = this.recognizers; + + for (var i = 0; i < recognizers.length; i++) { + if (recognizers[i].options.event === recognizer) { + return recognizers[i]; + } + } + + return null; + }; + /** + * @private add a recognizer to the manager + * existing recognizers with the same event name will be removed + * @param {Recognizer} recognizer + * @returns {Recognizer|Manager} + */ + + + _proto.add = function add(recognizer) { + if (invokeArrayArg(recognizer, "add", this)) { + return this; + } // remove existing + + + var existing = this.get(recognizer.options.event); + + if (existing) { + this.remove(existing); + } + + this.recognizers.push(recognizer); + recognizer.manager = this; + this.touchAction.update(); + return recognizer; + }; + /** + * @private + * remove a recognizer by name or instance + * @param {Recognizer|String} recognizer + * @returns {Manager} + */ + + + _proto.remove = function remove(recognizer) { + if (invokeArrayArg(recognizer, "remove", this)) { + return this; + } + + var targetRecognizer = this.get(recognizer); // let's make sure this recognizer exists + + if (recognizer) { + var recognizers = this.recognizers; + var index = inArray(recognizers, targetRecognizer); + + if (index !== -1) { + recognizers.splice(index, 1); + this.touchAction.update(); + } + } + + return this; + }; + /** + * @private + * bind event + * @param {String} events + * @param {Function} handler + * @returns {EventEmitter} this + */ + + + _proto.on = function on(events, handler) { + if (events === undefined || handler === undefined) { + return this; + } + + var handlers = this.handlers; + each(splitStr(events), function (event) { + handlers[event] = handlers[event] || []; + handlers[event].push(handler); + }); + return this; + }; + /** + * @private unbind event, leave emit blank to remove all handlers + * @param {String} events + * @param {Function} [handler] + * @returns {EventEmitter} this + */ + + + _proto.off = function off(events, handler) { + if (events === undefined) { + return this; + } + + var handlers = this.handlers; + each(splitStr(events), function (event) { + if (!handler) { + delete handlers[event]; + } else { + handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1); + } + }); + return this; + }; + /** + * @private emit event to the listeners + * @param {String} event + * @param {Object} data + */ + + + _proto.emit = function emit(event, data) { + // we also want to trigger dom events + if (this.options.domEvents) { + triggerDomEvent(event, data); + } // no handlers, so skip it all + + + var handlers = this.handlers[event] && this.handlers[event].slice(); + + if (!handlers || !handlers.length) { + return; + } + + data.type = event; + + data.preventDefault = function () { + data.srcEvent.preventDefault(); + }; + + var i = 0; + + while (i < handlers.length) { + handlers[i](data); + i++; + } + }; + /** + * @private + * destroy the manager and unbinds all events + * it doesn't unbind dom events, that is the user own responsibility + */ + + + _proto.destroy = function destroy() { + this.element && toggleCssProps(this, false); + this.handlers = {}; + this.session = {}; + this.input.destroy(); + this.element = null; + }; + + return Manager; + }(); + + var SINGLE_TOUCH_INPUT_MAP = { + touchstart: INPUT_START, + touchmove: INPUT_MOVE, + touchend: INPUT_END, + touchcancel: INPUT_CANCEL + }; + var SINGLE_TOUCH_TARGET_EVENTS = 'touchstart'; + var SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel'; + /** + * @private + * Touch events input + * @constructor + * @extends Input + */ + + var SingleTouchInput = + /*#__PURE__*/ + function (_Input) { + _inheritsLoose(SingleTouchInput, _Input); + + function SingleTouchInput() { + var _this; + + var proto = SingleTouchInput.prototype; + proto.evTarget = SINGLE_TOUCH_TARGET_EVENTS; + proto.evWin = SINGLE_TOUCH_WINDOW_EVENTS; + _this = _Input.apply(this, arguments) || this; + _this.started = false; + return _this; + } + + var _proto = SingleTouchInput.prototype; + + _proto.handler = function handler(ev) { + var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; // should we handle the touch events? + + if (type === INPUT_START) { + this.started = true; + } + + if (!this.started) { + return; + } + + var touches = normalizeSingleTouches.call(this, ev, type); // when done, reset the started state + + if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) { + this.started = false; + } + + this.callback(this.manager, type, { + pointers: touches[0], + changedPointers: touches[1], + pointerType: INPUT_TYPE_TOUCH, + srcEvent: ev + }); + }; + + return SingleTouchInput; + }(Input); + + function normalizeSingleTouches(ev, type) { + var all = toArray(ev.touches); + var changed = toArray(ev.changedTouches); + + if (type & (INPUT_END | INPUT_CANCEL)) { + all = uniqueArray(all.concat(changed), 'identifier', true); + } + + return [all, changed]; + } + + /** + * @private + * wrap a method with a deprecation warning and stack trace + * @param {Function} method + * @param {String} name + * @param {String} message + * @returns {Function} A new function wrapping the supplied method. + */ + function deprecate(method, name, message) { + var deprecationMessage = "DEPRECATED METHOD: " + name + "\n" + message + " AT \n"; + return function () { + var e = new Error('get-stack-trace'); + var stack = e && e.stack ? e.stack.replace(/^[^\(]+?[\n$]/gm, '').replace(/^\s+at\s+/gm, '').replace(/^Object.\s*\(/gm, '{anonymous}()@') : 'Unknown Stack Trace'; + var log = window.console && (window.console.warn || window.console.log); + + if (log) { + log.call(window.console, deprecationMessage, stack); + } + + return method.apply(this, arguments); + }; + } + + /** + * @private + * extend object. + * means that properties in dest will be overwritten by the ones in src. + * @param {Object} dest + * @param {Object} src + * @param {Boolean} [merge=false] + * @returns {Object} dest + */ + + var extend = deprecate(function (dest, src, merge) { + var keys = Object.keys(src); + var i = 0; + + while (i < keys.length) { + if (!merge || merge && dest[keys[i]] === undefined) { + dest[keys[i]] = src[keys[i]]; + } + + i++; + } + + return dest; + }, 'extend', 'Use `assign`.'); + + /** + * @private + * merge the values from src in the dest. + * means that properties that exist in dest will not be overwritten by src + * @param {Object} dest + * @param {Object} src + * @returns {Object} dest + */ + + var merge = deprecate(function (dest, src) { + return extend(dest, src, true); + }, 'merge', 'Use `assign`.'); + + /** + * @private + * simple class inheritance + * @param {Function} child + * @param {Function} base + * @param {Object} [properties] + */ + + function inherit(child, base, properties) { + var baseP = base.prototype; + var childP; + childP = child.prototype = Object.create(baseP); + childP.constructor = child; + childP._super = baseP; + + if (properties) { + assign$1(childP, properties); + } + } + + /** + * @private + * simple function bind + * @param {Function} fn + * @param {Object} context + * @returns {Function} + */ + function bindFn(fn, context) { + return function boundFn() { + return fn.apply(context, arguments); + }; + } + + /** + * @private + * Simple way to create a manager with a default set of recognizers. + * @param {HTMLElement} element + * @param {Object} [options] + * @constructor + */ + + var Hammer = + /*#__PURE__*/ + function () { + var Hammer = + /** + * @private + * @const {string} + */ + function Hammer(element, options) { + if (options === void 0) { + options = {}; + } + + return new Manager(element, _extends({ + recognizers: preset.concat() + }, options)); + }; + + Hammer.VERSION = "2.0.17-rc"; + Hammer.DIRECTION_ALL = DIRECTION_ALL; + Hammer.DIRECTION_DOWN = DIRECTION_DOWN; + Hammer.DIRECTION_LEFT = DIRECTION_LEFT; + Hammer.DIRECTION_RIGHT = DIRECTION_RIGHT; + Hammer.DIRECTION_UP = DIRECTION_UP; + Hammer.DIRECTION_HORIZONTAL = DIRECTION_HORIZONTAL; + Hammer.DIRECTION_VERTICAL = DIRECTION_VERTICAL; + Hammer.DIRECTION_NONE = DIRECTION_NONE; + Hammer.DIRECTION_DOWN = DIRECTION_DOWN; + Hammer.INPUT_START = INPUT_START; + Hammer.INPUT_MOVE = INPUT_MOVE; + Hammer.INPUT_END = INPUT_END; + Hammer.INPUT_CANCEL = INPUT_CANCEL; + Hammer.STATE_POSSIBLE = STATE_POSSIBLE; + Hammer.STATE_BEGAN = STATE_BEGAN; + Hammer.STATE_CHANGED = STATE_CHANGED; + Hammer.STATE_ENDED = STATE_ENDED; + Hammer.STATE_RECOGNIZED = STATE_RECOGNIZED; + Hammer.STATE_CANCELLED = STATE_CANCELLED; + Hammer.STATE_FAILED = STATE_FAILED; + Hammer.Manager = Manager; + Hammer.Input = Input; + Hammer.TouchAction = TouchAction; + Hammer.TouchInput = TouchInput; + Hammer.MouseInput = MouseInput; + Hammer.PointerEventInput = PointerEventInput; + Hammer.TouchMouseInput = TouchMouseInput; + Hammer.SingleTouchInput = SingleTouchInput; + Hammer.Recognizer = Recognizer; + Hammer.AttrRecognizer = AttrRecognizer; + Hammer.Tap = TapRecognizer; + Hammer.Pan = PanRecognizer; + Hammer.Swipe = SwipeRecognizer; + Hammer.Pinch = PinchRecognizer; + Hammer.Rotate = RotateRecognizer; + Hammer.Press = PressRecognizer; + Hammer.on = addEventListeners; + Hammer.off = removeEventListeners; + Hammer.each = each; + Hammer.merge = merge; + Hammer.extend = extend; + Hammer.bindFn = bindFn; + Hammer.assign = assign$1; + Hammer.inherit = inherit; + Hammer.bindFn = bindFn; + Hammer.prefixed = prefixed; + Hammer.toArray = toArray; + Hammer.inArray = inArray; + Hammer.uniqueArray = uniqueArray; + Hammer.splitStr = splitStr; + Hammer.boolOrFn = boolOrFn; + Hammer.hasParent = hasParent; + Hammer.addEventListeners = addEventListeners; + Hammer.removeEventListeners = removeEventListeners; + Hammer.defaults = assign$1({}, defaults, { + preset: preset + }); + return Hammer; + }(); + + // style loader but by script tag, not by the loader. + + var defaults$1 = Hammer.defaults; + + var hammer_esm = /*#__PURE__*/Object.freeze({ + __proto__: null, + 'default': Hammer, + INPUT_START: INPUT_START, + INPUT_MOVE: INPUT_MOVE, + INPUT_END: INPUT_END, + INPUT_CANCEL: INPUT_CANCEL, + STATE_POSSIBLE: STATE_POSSIBLE, + STATE_BEGAN: STATE_BEGAN, + STATE_CHANGED: STATE_CHANGED, + STATE_ENDED: STATE_ENDED, + STATE_RECOGNIZED: STATE_RECOGNIZED, + STATE_CANCELLED: STATE_CANCELLED, + STATE_FAILED: STATE_FAILED, + DIRECTION_NONE: DIRECTION_NONE, + DIRECTION_LEFT: DIRECTION_LEFT, + DIRECTION_RIGHT: DIRECTION_RIGHT, + DIRECTION_UP: DIRECTION_UP, + DIRECTION_DOWN: DIRECTION_DOWN, + DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL, + DIRECTION_VERTICAL: DIRECTION_VERTICAL, + DIRECTION_ALL: DIRECTION_ALL, + Manager: Manager, + Input: Input, + TouchAction: TouchAction, + TouchInput: TouchInput, + MouseInput: MouseInput, + PointerEventInput: PointerEventInput, + TouchMouseInput: TouchMouseInput, + SingleTouchInput: SingleTouchInput, + Recognizer: Recognizer, + AttrRecognizer: AttrRecognizer, + Tap: TapRecognizer, + Pan: PanRecognizer, + Swipe: SwipeRecognizer, + Pinch: PinchRecognizer, + Rotate: RotateRecognizer, + Press: PressRecognizer, + on: addEventListeners, + off: removeEventListeners, + each: each, + merge: merge, + extend: extend, + assign: assign$1, + inherit: inherit, + bindFn: bindFn, + prefixed: prefixed, + toArray: toArray, + inArray: inArray, + uniqueArray: uniqueArray, + splitStr: splitStr, + boolOrFn: boolOrFn, + hasParent: hasParent, + addEventListeners: addEventListeners, + removeEventListeners: removeEventListeners, + defaults: defaults$1 + }); + + var require$$0 = /*@__PURE__*/getAugmentedNamespace(hammer_esm); + + var Utils = {}; + + Object.defineProperty(Utils, "__esModule", { value: true }); + Utils.blackPixel = void 0; + Utils.isMobile = isMobile; + Utils.delay = delay; + function isMobile() { + return /Android|iPhone|iPad|iPod|Opera Mini|IEMobile|WPDesktop/i.test(navigator.userAgent); + } + Utils.blackPixel = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='; + function delay(duration) { + return new Promise(function (resolve) { return setTimeout(resolve, duration); }); + } + + var hasRequiredComponent_ImageViewer; + + function requireComponent_ImageViewer () { + if (hasRequiredComponent_ImageViewer) return Component_ImageViewer; + hasRequiredComponent_ImageViewer = 1; + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + var __generator = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + }; + Object.defineProperty(Component_ImageViewer, "__esModule", { value: true }); + Component_ImageViewer.ComponentImageViewer = void 0; + var hammerjs_1 = require$$0; + var CE_1 = CE; + var baseComponent_1 = baseComponent; + var Utils_1 = Utils; + var Morph_Components_1 = requireMorph_Components(); + var ComponentImageViewer = /** @class */ (function (_super) { + __extends(ComponentImageViewer, _super); + function ComponentImageViewer(options) { + var _a, _b, _c, _d, _e; + var _this = _super.call(this) || this; + _this._rawScale = 1; + _this._relativeScale = 1; + _this._relativeScaleBase = 1; + _this._left = 0; + _this._top = 0; + _this._firstLoad = true; + _this._dragging = false; + _this._dragStart = { originX: 0, originY: 0, startX: 0, startY: 0 }; + window.viewer = _this; + _this.background = (_a = options === null || options === void 0 ? void 0 : options.background) !== null && _a !== void 0 ? _a : true; + _this.container = (0, CE_1.ce)('div', 'mux_imageviewer'); + if (options.background != false) + _this.container.style.background = 'var(--mux-panel-sub-color)'; + _this._wrapper = (0, CE_1.ce)('div', 'mux_imageviewer-wrapper'); + _this._image = (0, CE_1.ce)('img', 'mux_imageviewer-image'); + _this._image.style.display = 'none'; + _this._image.addEventListener('load', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this._stopLoader(); + return [4 /*yield*/, (0, Utils_1.delay)(10)]; + case 1: + _a.sent(); + this._image.style.display = 'block'; + return [2 /*return*/]; + } + }); + }); }); + _this._unsupported = (0, CE_1.ce)('div', 'mux_imageviewer-unsupported'); + _this._unsupportedIcon = (0, CE_1.ce)('span', [ + 'material-symbols-outlined', + 'mux_imageviewer-unsupported-icon', + ]); + _this._unsupportedText = (0, CE_1.ce)('div', 'mux_text'); + _this._unsupportedButton = new Morph_Components_1.MorphComponent.Button({ + mode: 'normal', + content: 'Open externally', + materialIcon: 'open_in_new', + target: function () { + window.open(_this._unsupportedTarget, '_blank'); + }, + }).container; + _this._unsupported.append(_this._unsupportedIcon, _this._unsupportedText, _this._unsupportedButton); + _this._wrapper.appendChild(_this._unsupported); + _this._wrapper.appendChild(_this._image); + _this._loader = (0, CE_1.ce)('div', 'mux_imageviewer-loader'); + _this._loader.append((0, CE_1.ce)('div', 'mux_imageviewer-loader-dot'), (0, CE_1.ce)('div', 'mux_imageviewer-loader-dot'), (0, CE_1.ce)('div', 'mux_imageviewer-loader-dot'), (0, CE_1.ce)('div', 'mux_imageviewer-loader-dot')); + _this._wrapper.appendChild(_this._loader); + var controlscontainer = (0, CE_1.ce)('div', 'mux_imageviewer-controlscontainer'); + var controls = (0, CE_1.ce)('div', 'mux_imageviewer-controls'); + controlscontainer.appendChild(controls); + if ((options === null || options === void 0 ? void 0 : options.controls) != false) { + var srcCount = (_c = (_b = options === null || options === void 0 ? void 0 : options.src) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0; + if (srcCount > 1) { + _this._thumbnails = (0, CE_1.ce)('div', [ + 'mux_imageviewer-control', + 'mux_active', + ]); + _this._thumbnails.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'photo_library')); + _this._thumbnails.appendChild((0, CE_1.ce)('span', [ + 'mux_imageviewer-control-badge', + 'mux_text', + 'mux_tiny', + ], null, String(srcCount))); + controls.appendChild(_this._thumbnails); + } + _this._zoomIn = (0, CE_1.ce)('div', 'mux_imageviewer-control'); + _this._zoomIn.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'zoom_in')); + _this._zoomOut = (0, CE_1.ce)('div', 'mux_imageviewer-control'); + _this._zoomOut.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'zoom_out')); + _this._fit = (0, CE_1.ce)('div', 'mux_imageviewer-control'); + _this._fit.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'fit_screen')); + _this._highRes = (0, CE_1.ce)('div', 'mux_imageviewer-control'); + _this._highRes.style.display = 'none'; + _this._highRes.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'high_res')); + controls.append(_this._zoomIn, _this._zoomOut, _this._fit, _this._highRes); + } + if ((options === null || options === void 0 ? void 0 : options.downloadable) == true) { + var download = (0, CE_1.ce)('div', 'mux_imageviewer-control'); + download.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'download')); + download.addEventListener('click', function () { + var a = document.createElement('a'); + a.href = _this._image.src; + a.download = 'image'; + a.click(); + }); + controls.appendChild(download); + } + if (controls.childNodes.length > 0) + _this._wrapper.appendChild(controlscontainer); + _this.container.appendChild(_this._wrapper); + if ((options === null || options === void 0 ? void 0 : options.src) instanceof Array) { + var sources = options.src; + if (sources.length == 0) + return _this; + if (sources.length == 1) { + _this.setImage(sources[0]); + } + else { + _this._sources = sources; + _this._drawThumbnails(sources, (_d = options === null || options === void 0 ? void 0 : options.thumbnailsOpen) !== null && _d !== void 0 ? _d : ((0, Utils_1.isMobile)() ? false : true)); + _this._drawNavigationControls(); + _this._imageCount = sources.length; + var startIndex = (_e = options === null || options === void 0 ? void 0 : options.startSrc) !== null && _e !== void 0 ? _e : 0; + _this.setImage(sources[startIndex], startIndex); + } + } + else { + var source = options.src; + _this.setImage(source); + } + _this.registerListeners(); + return _this; + } + ComponentImageViewer.prototype.setImage = function (source, index) { + return __awaiter(this, void 0, void 0, function () { + var extention; + var _this = this; + var _a, _b, _c; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + this._startLoader(); + return [4 /*yield*/, (0, Utils_1.delay)(10)]; + case 1: + _d.sent(); + this._updateUI(index); + if (source.normal.split('/').pop().split('.').length > 1) { + extention = (_b = (_a = source.normal.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== null && _b !== void 0 ? _b : ''; + if (!['jpg', 'jpeg', 'png', 'gif', 'webp'].includes(extention)) { + this._unsupportedTarget = (_c = source.full) !== null && _c !== void 0 ? _c : source.normal; + if (['mp4', 'webm'].includes(extention)) { + return [2 /*return*/, this._showUnsupported('play_arrow', "Videos are not supported yet. Please open the file in a new tab.")]; + } + return [2 /*return*/, this._showUnsupported('error_outline', "File extention ".concat(extention, " is not supported!"))]; + } + } + else + this._image.onerror = function () { + _this._showUnsupported('error_outline', "File extention ".concat(extention, " is not supported!")); + }; + this._image.src = source.normal; + if (source.full != undefined) { + this._fullSrc = source.full; + this._highRes.style.display = 'flex'; + } + return [2 /*return*/]; + } + }); + }); + }; + ComponentImageViewer.prototype.next = function () { + return __awaiter(this, void 0, void 0, function () { + var current, next; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + current = this.container.querySelector('.mux_imageviewer-gallery-thumb.active'); + if (current == null) + return [2 /*return*/]; + next = current.nextElementSibling; + if (next == null) + return [2 /*return*/]; + this._startLoader(); + return [4 /*yield*/, (0, Utils_1.delay)(10)]; + case 1: + _a.sent(); + next.click(); + return [2 /*return*/]; + } + }); + }); + }; + ComponentImageViewer.prototype.previous = function () { + return __awaiter(this, void 0, void 0, function () { + var current, prev; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + current = this.container.querySelector('.mux_imageviewer-gallery-thumb.active'); + if (current == null) + return [2 /*return*/]; + prev = current.previousElementSibling; + if (prev == null) + return [2 /*return*/]; + this._startLoader(); + return [4 /*yield*/, (0, Utils_1.delay)(10)]; + case 1: + _a.sent(); + prev.click(); + return [2 /*return*/]; + } + }); + }); + }; + ComponentImageViewer.prototype._updateUI = function (index) { + if (index != undefined) { + this.callEvent('imageIndexChanged', index); + var previousThumb = this.container.querySelector('.mux_imageviewer-gallery-thumb.active'); + if (previousThumb != null) + previousThumb.classList.remove('active'); + var thumb = this.container.querySelector(".mux_imageviewer-gallery-thumb[index=\"".concat(index, "\"]")); + if (thumb != null) { + thumb.classList.add('active'); + thumb.scrollIntoView({ + behavior: 'smooth', + inline: 'center', + }); + if (this._firstLoad) { + this._firstLoad = false; + setTimeout(function () { + thumb.scrollIntoView({ + behavior: 'smooth', + inline: 'center', + }); + }, 500); + } + } + } + if (this._prev != undefined) + if (index == 0) + this._prev.classList.add('disabled'); + else + this._prev.classList.remove('disabled'); + if (this._next != undefined) + if (index == this._imageCount - 1) + this._next.classList.add('disabled'); + else + this._next.classList.remove('disabled'); + }; + ComponentImageViewer.prototype._showUnsupported = function (icon, text) { + this._unsupportedIcon.innerText = icon; + this._unsupportedText.innerText = text; + this._stopLoader(); + this._unsupported.style.display = 'flex'; + }; + ComponentImageViewer.prototype._startLoader = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this._loader.style.display = 'flex'; + this._unsupported.style.display = 'none'; + this._image.style.display = 'none'; + return [4 /*yield*/, (0, Utils_1.delay)(10)]; + case 1: + _a.sent(); + return [2 /*return*/]; + } + }); + }); + }; + ComponentImageViewer.prototype._stopLoader = function () { + return __awaiter(this, void 0, void 0, function () { + return __generator(this, function (_a) { + this._loader.style.display = 'none'; + this._restartScaling(); + return [2 /*return*/]; + }); + }); + }; + ComponentImageViewer.prototype._handleStart = function (originX, originY) { + this._dragging = true; + this._dragStart = { + originX: originX, + originY: originY, + startX: this._image.offsetLeft, + startY: this._image.offsetTop, + }; + }; + ComponentImageViewer.prototype._handleMove = function (x, y) { + var newX = this._validateX(this._dragStart.startX + x - this._dragStart.originX); + var newY = this._validateY(this._dragStart.startY + y - this._dragStart.originY); + this._left = newX; + this._top = newY; + this._image.style.left = "".concat(newX, "px"); + this._image.style.top = "".concat(newY, "px"); + }; + ComponentImageViewer.prototype.registerListeners = function () { + var _this = this; + //Start + this.container.addEventListener('mousedown', function (e) { + _this._handleStart(e.clientX, e.clientY); + }); + this.container.addEventListener('touchstart', function (e) { + _this._handleStart(e.touches[0].clientX, e.touches[0].clientY); + }); + //Move + this.container.addEventListener('mousemove', function (e) { + if (!_this._dragging) + return; + if (e.buttons != 1) { + _this._dragging = false; + return; + } + _this._handleMove(e.clientX, e.clientY); + }); + this.container.addEventListener('touchmove', function (e) { + if (!_this._dragging) + return; + _this._handleMove(e.touches[0].clientX, e.touches[0].clientY); + }); + //End + this.container.addEventListener('mouseup', function (e) { + _this._dragging = false; + }); + this.container.addEventListener('touchend', function (e) { + _this._dragging = false; + }); + //Zoom + this.container.addEventListener('wheel', function (e) { + e.preventDefault(); + _this._setScale(_this._relativeScale + e.deltaY * -0.003); + }); + var mc = new hammerjs_1.default(this._wrapper); + mc.add(new hammerjs_1.default.Pinch()); + var beforeScale = this._relativeScale; + mc.on('pinchstart', function (e) { + beforeScale = _this._relativeScale; + }); + mc.on('pinch', function (e) { + _this._setScale(beforeScale * e.scale); + }); + //Controls + if (this._thumbnails != undefined) + this._thumbnails.addEventListener('click', function () { + if (_this.container.classList.contains('mux_imageviewer-galleryopen')) { + _this.container.classList.remove('mux_imageviewer-galleryopen'); + _this._thumbnails.classList.remove('mux_active'); + _this.callEvent('thumbnailsOpen', false); + } + else { + _this.container.classList.add('mux_imageviewer-galleryopen'); + _this._thumbnails.classList.add('mux_active'); + _this.callEvent('thumbnailsOpen', true); + } + }); + if (this._zoomIn != undefined) + this._zoomIn.addEventListener('click', function () { return _this.zoomIn(); }); + if (this._zoomOut != undefined) + this._zoomOut.addEventListener('click', function () { return _this.zoomOut(); }); + if (this._fit != undefined) + this._fit.addEventListener('click', function () { return _this.fitToContainer(); }); + if (this._highRes != undefined) + this._highRes.addEventListener('click', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + this._startLoader(); + this._image.style.display = 'none'; + return [4 /*yield*/, (0, Utils_1.delay)(10)]; + case 1: + _a.sent(); + this._image.src = this._fullSrc; + this._highRes.style.display = 'none'; + return [2 /*return*/]; + } + }); + }); }); + }; + ComponentImageViewer.prototype._drawNavigationControls = function () { + var _this = this; + this._next = (0, CE_1.ce)('div', [ + 'mux_imageviewer-navigation', + 'mux_imageviewer-navigation-right', + ]); + this._next.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'navigate_next')); + this._next.addEventListener('click', function () { + if (_this._next.classList.contains('disabled')) + return; + _this.next(); + }); + this._wrapper.appendChild(this._next); + this._prev = (0, CE_1.ce)('div', [ + 'mux_imageviewer-navigation', + 'mux_imageviewer-navigation-left', + ]); + this._prev.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'navigate_before')); + this._prev.addEventListener('click', function () { + if (_this._prev.classList.contains('disabled')) + return; + _this.previous(); + }); + this._wrapper.appendChild(this._prev); + }; + ComponentImageViewer.prototype._drawThumbnails = function (sources, openThumbnails) { + var _this = this; + var gallery = (0, CE_1.ce)('div', 'mux_imageviewer-gallery'); + if (this.background != false) + gallery.style.background = 'var(--mux-panel-color)'; + sources.forEach(function (source, index) { + var _a; + var thumb = (0, CE_1.ce)('img', 'mux_imageviewer-gallery-thumb', { + index: index, + src: (_a = source.thumbnail) !== null && _a !== void 0 ? _a : source.normal, + }); + thumb.addEventListener('click', function () { + _this.setImage(source, index); + }); + gallery.appendChild(thumb); + }); + this.container.appendChild(gallery); + if (openThumbnails) + this.container.classList.add('mux_imageviewer-galleryopen'); + this.fitToContainer(); + }; + ComponentImageViewer.prototype._validateX = function (x) { + var bounds = this._image.getBoundingClientRect(); + var minInlay = this._wrapper.clientWidth - 10; + if (bounds.width < this._wrapper.clientWidth) { + x = (this._wrapper.clientWidth - bounds.width) / 2; + } + else { + x = Math.max(x, (bounds.width - minInlay) * -1); + x = Math.min(x, this._wrapper.clientWidth - minInlay); + } + return x; + }; + ComponentImageViewer.prototype._validateY = function (y) { + var bounds = this._image.getBoundingClientRect(); + var minInlay = this._wrapper.clientHeight - 10; + if (bounds.height < this._wrapper.clientHeight) { + y = (this._wrapper.clientHeight - bounds.height) / 2; + } + else { + y = Math.max(y, (bounds.height - minInlay) * -1); + y = Math.min(y, this._wrapper.clientHeight - minInlay); + } + return y; + }; + ComponentImageViewer.prototype._restartScaling = function () { + var _this = this; + this._calculateRelativeScale(function () { + _this.fitToContainer(); + _this._startScaleClock(); + }); + clearTimeout(this._restartScalingRepeat); + this._restartScalingRepeat = setTimeout(function () { + _this._calculateRelativeScale(function () { + _this.fitToContainer(); + _this._startScaleClock(); + }); + }, 1000); + }; + ComponentImageViewer.prototype._calculateRelativeScale = function (readyCallback) { + var _this = this; + var bounds = this._image.getBoundingClientRect(); + clearTimeout(this._fitToContainerRetry); + if (bounds.width == 0 || + bounds.height == 0 || + this._image.width == 0 || + this._image.height == 0) + return (this._fitToContainerRetry = setTimeout(function () { return _this._calculateRelativeScale(readyCallback); }, 100)); + var maxWidth = this._wrapper.clientWidth - 20; + var maxHeight = this._wrapper.clientHeight - 20; + this._relativeScaleBase = Math.min(maxWidth / this._image.width, maxHeight / this._image.height); + this._setScale(this._relativeScale); + if (typeof readyCallback == 'function') + readyCallback(); + }; + ComponentImageViewer.prototype._setScale = function (factor) { + this._relativeScale = Math.min(Math.max(factor, 1), 10); + this._setRawScale(this._relativeScaleBase * factor); + }; + ComponentImageViewer.prototype._setRawScale = function (scale) { + var bounds = this._image.getBoundingClientRect(); + this._rawScale = Math.max(scale, this._relativeScaleBase); + var widthDiff = bounds.width - this._rawScale * this._image.clientWidth; + var heightDiff = bounds.height - this._rawScale * this._image.clientHeight; + this._image.style.transform = "scale(".concat(this._rawScale, ")"); + this._left = this._validateX(this._left + widthDiff / 2); + this._image.style.left = "".concat(this._left, "px"); + this._top = this._validateY(this._top + heightDiff / 2); + this._image.style.top = "".concat(this._top, "px"); + }; + ComponentImageViewer.prototype._startScaleClock = function () { + var _this = this; + if (this._startScaleClockInt != undefined) + return; + var lastWidth = this._wrapper.clientWidth; + var lastHeight = this._wrapper.clientHeight; + clearInterval(this._startScaleClockInt); + this._startScaleClockInt = setInterval(function () { + if (_this.container.parentElement == null) + return clearInterval(_this._startScaleClockInt); + if (lastWidth != _this._wrapper.clientWidth || + lastHeight != _this._wrapper.clientHeight) { + lastWidth = _this._wrapper.clientWidth; + lastHeight = _this._wrapper.clientHeight; + _this._calculateRelativeScale(); + } + }, 100); + }; + ComponentImageViewer.prototype.setImageIndex = function (index) { + if (this._sources == undefined) + return; + if (this._sources[index] == undefined) + return; + this.setImage(this._sources[index], index); + }; + ComponentImageViewer.prototype.fitToContainer = function () { + this._setScale(1); + this._left = this._validateX((this._wrapper.clientWidth - this._image.width * this._rawScale) / 2); + this._top = this._validateY((this._wrapper.clientHeight - this._image.height * this._rawScale) / + 2); + this._image.style.left = "".concat(this._left, "px"); + this._image.style.top = "".concat(this._top, "px"); + this._image.style.opacity = '1'; + }; + ComponentImageViewer.prototype.zoomIn = function () { + this._setScale(this._relativeScale + 0.3); + }; + ComponentImageViewer.prototype.zoomOut = function () { + this._setScale(this._relativeScale - 0.3); + }; + return ComponentImageViewer; + }(baseComponent_1.MUXComponent)); + Component_ImageViewer.ComponentImageViewer = ComponentImageViewer; + + return Component_ImageViewer; + } + + var Component_Input = {}; + + var __extends$3 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Input, "__esModule", { value: true }); + Component_Input.ComponentInput = void 0; + var CE_1$3 = CE; + var baseComponent_1$3 = baseComponent; + var ComponentInput = /** @class */ (function (_super) { + __extends$3(ComponentInput, _super); + function ComponentInput(options) { + var _a; + var _this = _super.call(this) || this; + _this.container = (0, CE_1$3.ce)('input', 'mux_input', { + type: options.type, + }); + var border = (_a = options.border) !== null && _a !== void 0 ? _a : 'hover'; + if (border == 'always') + _this.container.classList.add('mux_input-alwaysborder'); + else if (border == 'never') + _this.container.classList.add('mux_input-noborder'); + if ((options === null || options === void 0 ? void 0 : options.min) != undefined) + _this.container.min = String(options.min); + if ((options === null || options === void 0 ? void 0 : options.max) != undefined) + _this.container.max = String(options.max); + if ((options === null || options === void 0 ? void 0 : options.step) != undefined) + _this.container.step = String(options.step); + if ((options === null || options === void 0 ? void 0 : options.maxLength) != undefined) + _this.container.maxLength = options.maxLength; + if ((options === null || options === void 0 ? void 0 : options.readOnly) != undefined) + _this.container.readOnly = options.readOnly; + if ((options === null || options === void 0 ? void 0 : options.placeholder) != undefined) + _this.container.placeholder = options.placeholder; + if ((options === null || options === void 0 ? void 0 : options.value) != undefined) + _this.container.value = options.value; + if ((options === null || options === void 0 ? void 0 : options.valueAsNumber) != undefined) + _this.container.valueAsNumber = options.valueAsNumber; + if (options.enabled == false) + _this.container.setAttribute('disabled', ''); + _this.container.oninput = function () { + return _this.callEvent('input', _this.container.value); + }; + _this.container.onfocus = function () { return _this.callEvent('focus'); }; + _this.container.onblur = function () { return _this.callEvent('blur'); }; + return _this; + } + ComponentInput.prototype.getValue = function () { + return this.container.value; + }; + ComponentInput.prototype.getValueAsNumber = function () { + return this.container.valueAsNumber; + }; + ComponentInput.prototype.setValue = function (value) { + this.container.value = value; + }; + ComponentInput.prototype.setValueAsNumber = function (value) { + this.container.valueAsNumber = value; + }; + return ComponentInput; + }(baseComponent_1$3.MUXComponent)); + Component_Input.ComponentInput = ComponentInput; + + var Component_List = {}; + + var hasRequiredComponent_List; + + function requireComponent_List () { + if (hasRequiredComponent_List) return Component_List; + hasRequiredComponent_List = 1; + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_List, "__esModule", { value: true }); + Component_List.ComponentList = void 0; + var Index_1 = requireIndex(); + var CE_1 = CE; + var baseComponent_1 = baseComponent; + var Sortable = SortableExports; + var ComponentList = /** @class */ (function (_super) { + __extends(ComponentList, _super); + function ComponentList(options) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j; + var _this = _super.call(this) || this; + _this.openGroups = []; + _this.groupComponents = new Map(); + _this.options = options; + _this.dragable = (_a = options === null || options === void 0 ? void 0 : options.dragable) !== null && _a !== void 0 ? _a : false; + _this.hover = (_b = options === null || options === void 0 ? void 0 : options.hover) !== null && _b !== void 0 ? _b : false; + _this.grouped = (_c = options === null || options === void 0 ? void 0 : options.grouped) !== null && _c !== void 0 ? _c : false; + _this.groupsCloseable = (_d = options === null || options === void 0 ? void 0 : options.groupsCloseable) !== null && _d !== void 0 ? _d : false; + _this.sortGroupsAlphabetically = + (_e = options === null || options === void 0 ? void 0 : options.sortGroupsAlphabetically) !== null && _e !== void 0 ? _e : false; + _this.openGroups = (_f = options === null || options === void 0 ? void 0 : options.groupsOpen) !== null && _f !== void 0 ? _f : []; + _this.allowSingleItemGroups = (_g = options === null || options === void 0 ? void 0 : options.allowSingleItemGroups) !== null && _g !== void 0 ? _g : false; + _this.highlighted = (_h = options === null || options === void 0 ? void 0 : options.highlightedItem) !== null && _h !== void 0 ? _h : null; + if (_this.dragable == true && _this.grouped == true) + throw new Error("Unable to use 'grouped' for list component when 'canReorderByDrag' is also enabled. "); + _this.container = (0, CE_1.ce)('div', 'mux_list'); + _this.updateItems((_j = options === null || options === void 0 ? void 0 : options.items) !== null && _j !== void 0 ? _j : []); + if (_this.dragable == true) { + _this.sortable = new Sortable(_this.container, { + ghostClass: 'mux_list-item-dragging', + onStart: function () { + _this.container.classList.add('mux_list-dragging'); + }, + onEnd: function (evt) { + _this.container.classList.remove('mux_list-dragging'); + _this.callEvent('orderUpdated', _this.getCurrentOrder()); + }, + }); + } + return _this; + } + ComponentList.prototype.updateItems = function (items) { + var _this = this; + var _a; + this.container.innerHTML = ''; + this.groupComponents.clear(); + if (items == undefined || items.length == 0) + return; + if (this.grouped) { + var groups = []; + for (var i = 0; i < items.length; i++) { + var group = (_a = items[i].group) !== null && _a !== void 0 ? _a : 'Ungrouped'; + if (!groups.includes(group)) { + groups.push(group); + } + } + if (this.sortGroupsAlphabetically == true) + groups.sort(); + for (var i = 0; i < groups.length; i++) { + this.ensureGroup(groups[i]); + } + } + items.forEach(function (item) { return _this.addItem(item); }); + this.groupComponents.forEach(function (_a, group) { + var container = _a.container, content = _a.content; + if (content.children.length == 0) { + container.parentElement.removeChild(container); + _this.groupComponents.delete(group); + } + else { + if (content.children.length == 1 && + _this.allowSingleItemGroups == false) { + container.classList.add('mux_group-singular'); + } + else + container.classList.remove('mux_group-singular'); + } + }); + }; + ComponentList.prototype.getCurrentOrder = function () { + return Array.from(this.container.querySelectorAll('.mux_list-item')).map(function (item) { + return item.getAttribute('uid'); + }); + }; + ComponentList.prototype.removeItem = function (uniqueIdentifier) { + var match = this.container.querySelector(".mux_list-item[uid=\"".concat(uniqueIdentifier, "\"]")); + if (match != null) + match.remove(); + this.callEvent('orderUpdated', this.getCurrentOrder()); + }; + ComponentList.prototype.addItem = function (item) { + var _this = this; + var _a, _b; + var element = (0, CE_1.ce)('div', 'mux_list-item', { + uid: item.uniqueIdentifier, + }); + if (this.hover) + element.classList.add('mux_list-item-hover'); + // if (showSeperator) element.classList.add('mux_list-item-separator'); + if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.overwriteCursor) != null) + element.style.cursor = this.options.overwriteCursor; + if (this.highlighted != null && + this.highlighted == item.uniqueIdentifier) + element.classList.add('mux_list-item-selected'); + if (item.tooltip != undefined) + element.title = item.tooltip; + if (item.enabled == false) + element.classList.add('mux_list-item-disabled'); + var content = (0, CE_1.ce)('div', 'mux_list-item-content'); + element.appendChild(content); + element.onclick = function (e) { + var _a; + if (((_a = _this.options) === null || _a === void 0 ? void 0 : _a.highlightOnClick) == true) + _this.highlight(item.uniqueIdentifier); + if (item.click != undefined) + item.click(); + }; + if (item.materialIcon != undefined) { + var mi = (0, CE_1.ce)('span', ['mux_list-item-icon', 'material-symbols-outlined'], null, item.materialIcon); + content.appendChild(mi); + if (item.materialIconColor != undefined) + mi.style.color = item.materialIconColor; + } + else if (item.icon != undefined) + content.appendChild((0, CE_1.ce)('img', 'mux_list-item-icon', { src: item.icon })); + var text = (0, CE_1.ce)('div', 'mux_list-item-text'); + if (item.text != undefined) + text.appendChild((0, CE_1.ce)('div', ['mux_text', 'mux_normal'], null, item.text)); + if (item.subText != undefined) + text.appendChild((0, CE_1.ce)('div', ['mux_text', 'mux_small'], null, item.subText)); + content.appendChild(text); + if (item.actions != undefined && item.actions.length > 0) { + var actions = (0, CE_1.ce)('div', 'mux_list-item-actions'); + var _loop_1 = function (i) { + action = (0, CE_1.ce)('div', 'mux_list-item-action'); + if (item.actions[i].tooltip != undefined) + action.title = item.actions[i].tooltip; + if (item.actions[i].materialIcon != undefined) + action.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, item.actions[i].materialIcon)); + else if (item.actions[i].icon != undefined) + action.appendChild((0, CE_1.ce)('img', null, { src: item.actions[i].icon })); + action.onclick = function (e) { + e.stopPropagation(); + e.stopImmediatePropagation(); + item.actions[i].click(); + }; + actions.appendChild(action); + }; + var action; + for (var i = 0; i < item.actions.length; i++) { + _loop_1(i); + } + content.appendChild(actions); + } + if (this.grouped == true) { + var group = (_b = item.group) !== null && _b !== void 0 ? _b : 'Ungrouped'; + var content = this.ensureGroup(group).content; + content.appendChild(element); + } + else + this.container.appendChild(element); + this.size = this.container.querySelectorAll('.mux_list-item').length; + }; + ComponentList.prototype.highlight = function (uniqueIdentifier) { + this.highlighted = uniqueIdentifier; + this.container + .querySelectorAll('.mux_list-item') + .forEach(function (item) { + var uid = item.getAttribute('uid'); + if (uid == uniqueIdentifier) { + item.classList.add('mux_list-item-selected'); + item.scrollIntoView({ + behavior: 'smooth', + block: 'center', + }); + } + else + item.classList.remove('mux_list-item-selected'); + }); + }; + ComponentList.prototype.ensureGroup = function (group) { + var _this = this; + if (this.groupComponents.has(group)) + return this.groupComponents.get(group); + var groupComponent = new Index_1.MorphComponent.Group({ + title: group, + open: this.openGroups.includes(group) || + this.openGroups.includes('*') || + this.groupsCloseable == false, + closeable: this.groupsCloseable, + }); + groupComponent.on('openState', function (state) { + if (state) { + if (!_this.openGroups.includes(group)) + _this.openGroups.push(group); + } + else { + if (_this.openGroups.includes(group)) + _this.openGroups.splice(_this.openGroups.indexOf(group), 1); + } + _this.callEvent('openGroupsUpdated', _this.openGroups); + }); + this.container.appendChild(groupComponent.container); + this.groupComponents.set(group, groupComponent); + return this.groupComponents.get(group); + }; + return ComponentList; + }(baseComponent_1.MUXComponent)); + Component_List.ComponentList = ComponentList; + + return Component_List; + } + + var Component_MenuBar = {}; + + var hasRequiredComponent_MenuBar; + + function requireComponent_MenuBar () { + if (hasRequiredComponent_MenuBar) return Component_MenuBar; + hasRequiredComponent_MenuBar = 1; + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_MenuBar, "__esModule", { value: true }); + Component_MenuBar.ComponentMenuBar = void 0; + var Index_1 = requireIndex(); + var CE_1 = CE; + var baseComponent_1 = baseComponent; + var ComponentMenuBar = /** @class */ (function (_super) { + __extends(ComponentMenuBar, _super); + function ComponentMenuBar(options) { + var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o; + var _this = _super.call(this) || this; + _this.enabledStates = {}; + _this._leftItems = []; + _this._rightItems = []; + _this.mobileIgnoreItems = []; + _this._leftItems = (_a = options.left) !== null && _a !== void 0 ? _a : []; + _this._rightItems = (_b = options.right) !== null && _b !== void 0 ? _b : []; + _this.contextMaterialIconColor = + (_c = options.contextMaterialIconColor) !== null && _c !== void 0 ? _c : 'var(--mux-primary-color)'; + _this.contextMenuAlign = (_d = options.contextMenuAlign) !== null && _d !== void 0 ? _d : 'below'; + _this.contextAlignSide = { + below: 'center', + left: 'right', + right: 'left', + }[_this.contextMenuAlign]; + _this.container = (0, CE_1.ce)('div', 'mux_menubar'); + _this.size = (_e = options.size) !== null && _e !== void 0 ? _e : 'normal'; + _this.container.classList.add("mux_menubar-".concat(_this.size)); + _this.direction = (_f = options === null || options === void 0 ? void 0 : options.direction) !== null && _f !== void 0 ? _f : 'horizontal'; + _this.container.classList.add("mux_menubar-direction-".concat(_this.direction)); + _this.leftContainer = (0, CE_1.ce)('div', ['mux_menubar-locater', 'mux_left']); + _this.rightContainer = (0, CE_1.ce)('div', ['mux_menubar-locater', 'mux_right']); + _this.mobileContainer = (0, CE_1.ce)('div', 'mux_menubar-mobile'); + var mobileRightItems = (0, CE_1.ce)('div', [ + 'mux_menubar-mobile-items', + 'mux_right', + ]); + ((_h = (_g = options === null || options === void 0 ? void 0 : options.mobile) === null || _g === void 0 ? void 0 : _g.right) !== null && _h !== void 0 ? _h : []).forEach(function (item) { + return _this.addItem(item, mobileRightItems); + }); + var mobileLeftItems = (0, CE_1.ce)('div', [ + 'mux_menubar-mobile-items', + 'mux_left', + ]); + ((_k = (_j = options === null || options === void 0 ? void 0 : options.mobile) === null || _j === void 0 ? void 0 : _j.left) !== null && _k !== void 0 ? _k : []).forEach(function (item) { + return _this.addItem(item, mobileLeftItems); + }); + if (((_l = options === null || options === void 0 ? void 0 : options.mobile) === null || _l === void 0 ? void 0 : _l.logo) != undefined) { + mobileLeftItems.style.left = '50px'; + var logo = (0, CE_1.ce)('a', 'mux_menubar-mobile-logo', { + href: options.mobile.logo.href, + }); + logo.appendChild((0, CE_1.ce)('img', null, { src: options.mobile.logo.src })); + _this.mobileContainer.appendChild(logo); + } + _this.mobileIgnoreItems = (_o = (_m = options === null || options === void 0 ? void 0 : options.mobile) === null || _m === void 0 ? void 0 : _m.ignoreItems) !== null && _o !== void 0 ? _o : []; + _this.addItem({ + type: 'icon', + materialIcon: 'menu', + click: function () { + _this.openMobileMenu(); + // this.rightContainer.classList.toggle('mux_menubar-visible'); + }, + }, mobileRightItems); + _this.mobileContainer.append(mobileLeftItems, mobileRightItems); + _this.container.append(_this.leftContainer, _this.rightContainer, _this.mobileContainer); + if ((options === null || options === void 0 ? void 0 : options.left) != undefined) + options.left.forEach(function (item) { + return _this.addItem(item, _this.leftContainer); + }); + if ((options === null || options === void 0 ? void 0 : options.right) != undefined) + options.right.forEach(function (item) { + return _this.addItem(item, _this.rightContainer); + }); + if (_this.direction == 'horizontal') { + _this.calculateSizing(); + window.addEventListener('resize', function () { + _this.calculateSizing(); + }); + var c = 0; + _this.sizeClock = setInterval(function () { + if (c++ > 200) + clearInterval(_this.sizeClock); + if (_this.container.parentElement != null) { + clearInterval(_this.sizeClock); + _this.calculateSizing(); + } + }, 10); + } + else { + _this.leftContainer.classList.add('mux_menubar-visible'); + _this.rightContainer.classList.add('mux_menubar-visible'); + } + return _this; + } + ComponentMenuBar.prototype.calculateSizing = function () { + var menuSize = this.leftContainer.clientWidth + this.rightContainer.clientWidth; + var containerWidth = this.container.clientWidth; + if (menuSize != 0 && containerWidth != 0) + clearInterval(this.sizeClock); + if (menuSize > containerWidth) { + this.leftContainer.classList.remove('mux_menubar-visible'); + this.rightContainer.classList.remove('mux_menubar-visible'); + this.mobileContainer.classList.add('mux_menubar-visible'); + } + else { + this.leftContainer.classList.add('mux_menubar-visible'); + this.rightContainer.classList.add('mux_menubar-visible'); + this.mobileContainer.classList.remove('mux_menubar-visible'); + } + }; + ComponentMenuBar.prototype.addItem = function (item, target) { + var _this = this; + if (item.type != 'image') { + var element = (0, CE_1.ce)(item.href != undefined ? 'a' : 'div', 'mux_menubar-item'); + if (item.uniqueIdentifier != undefined) + element.setAttribute('uid', item.uniqueIdentifier); + if (item.enabled != undefined && item.enabled == false) + element.classList.add('mux_menubar-item-disabled'); + if (item.href != undefined) + element.setAttribute('href', item.href); + if (item.tooltip != undefined) + element.title = item.tooltip; + if (item.selected == true) + element.classList.add('mux_menubar-item-selected'); + if (item.materialIcon != undefined) { + var materialIcon = (0, CE_1.ce)('span', [ + 'mux_menubar-item-materialicon', + 'material-symbols-outlined', + ], null, item.materialIcon); + if (item.materialIconTransform != undefined) + materialIcon.style.transform = item.materialIconTransform; + element.appendChild(materialIcon); + } + switch (item.type) { + case 'icon': + element.classList.add('mux_menubar-item-icon'); + element.onclick = item.click; + break; + case 'normal': + element.classList.add('mux_menubar-item-normal'); + element.appendChild((0, CE_1.ce)('p', ['mux_text', "mux_".concat(this.size)], null, item.text)); + break; + } + if (item.children == undefined || item.children.length == 0) { + if (item.click != undefined && item.href == undefined) + element.onclick = item.click; + } + else { + // if (item.type == 'normal') + element.appendChild((0, CE_1.ce)('span', ['material-symbols-outlined', 'mux_menubar-item-arrow'], null, "keyboard_arrow_".concat({ below: 'down', left: 'left', right: 'right' }[this.contextMenuAlign]))); + element.onclick = function () { + var _a; + if (element.classList.contains('mux_menubar-item-disabled')) + return; + var bounds = element.getBoundingClientRect(); + element.classList.add('mux_menubar-item-selected'); + for (var i = 0; i < item.children.length; i++) + if (((_a = item.children[i]) === null || _a === void 0 ? void 0 : _a.uniqueIdentifier) != undefined) { + if (_this.enabledStates[item.children[i].uniqueIdentifier] != undefined) + item.children[i].enabled = + _this.enabledStates[item.children[i].uniqueIdentifier]; + } + var x; + var y; + if (_this.contextMenuAlign == 'below') { + x = bounds.x + bounds.width / 2; + y = bounds.y + bounds.height; + } + else if (_this.contextMenuAlign == 'left') { + x = bounds.x; + y = bounds.y; + } + else if (_this.contextMenuAlign == 'right') { + x = bounds.x + bounds.width; + y = bounds.y; + } + _this.dropdown = new Index_1.MorphComponent.ContextMenu({ + x: x, + y: y, + align: _this.contextAlignSide, + items: item.children, + materialIconColor: _this.contextMaterialIconColor, + }); + _this.dropdown.on('close', function () { + element.classList.remove('mux_menubar-item-selected'); + }); + }; + } + target.appendChild(element); + } + else { + var icon = (0, CE_1.ce)(item.href != undefined ? 'a' : 'div', 'mux_menubar-image'); + if (item.href != undefined) + icon.href = item.href; + icon.appendChild((0, CE_1.ce)('img', null, { src: item.url })); + target.appendChild(icon); + } + }; + ComponentMenuBar.prototype.setSelected = function (uniqueIdentifier) { + this.selected = uniqueIdentifier; + this.container + .querySelectorAll('.mux_menubar-item') + .forEach(function (item) { + if (item.getAttribute('uid') == uniqueIdentifier) + item.classList.add('mux_menubar-item-selected'); + else + item.classList.remove('mux_menubar-item-selected'); + }); + if (this.mobileMenu != null) + this.mobileMenu.setSelected(uniqueIdentifier); + }; + ComponentMenuBar.prototype.setEnabled = function (uniqueIdentifier, enabled) { + var item = this.container.querySelector(".mux_menubar-item[uid=\"".concat(uniqueIdentifier, "\"]")); + if (item == null) + return; + if (enabled) + item.classList.remove('mux_menubar-item-disabled'); + else + item.classList.add('mux_menubar-item-disabled'); + }; + ComponentMenuBar.prototype.openMobileMenu = function () { + var _this = this; + var container = (0, CE_1.ce)('div', 'mux_mobilemenu'); + var inner = (0, CE_1.ce)('div', 'mux_mobilemenu-inner'); + this.mobileMenu = new ComponentMenuBar({ + direction: 'vertical', + left: this._leftItems.filter(function (item) { + if (item.uniqueIdentifier == undefined) + return true; + return !_this.mobileIgnoreItems.includes(item.uniqueIdentifier); + }), + right: this._rightItems.filter(function (item) { + if (item.uniqueIdentifier == undefined) + return true; + return !_this.mobileIgnoreItems.includes(item.uniqueIdentifier); + }), + }); + this.mobileMenu.setSelected(this.selected); + inner.appendChild(this.mobileMenu.container); + container.appendChild(inner); + document.body.appendChild(container); + container.animate({ opacity: '1' }, { duration: 200 }).onfinish = + function () { + container.style.opacity = '1'; + }; + inner.animate({ transform: 'translateX(0%)' }, { duration: 200, easing: 'ease-out' }).onfinish = function () { + inner.style.transform = 'translateX(0%)'; + }; + container.onclick = function () { + container.animate({ opacity: '0' }, { duration: 200 }).onfinish = + function () { + container.style.opacity = '0'; + }; + inner.animate({ transform: 'translateX(100%)' }, { duration: 200, easing: 'ease-in' }).onfinish = function () { + inner.style.transform = 'translateX(100%)'; + _this.mobileMenu = null; + container.remove(); + }; + }; + inner.onclick = function (e) { + e.stopPropagation(); + }; + }; + return ComponentMenuBar; + }(baseComponent_1.MUXComponent)); + Component_MenuBar.ComponentMenuBar = ComponentMenuBar; + + return Component_MenuBar; + } + + var Component_PaletteCheckbox = {}; + + var hasRequiredComponent_PaletteCheckbox; + + function requireComponent_PaletteCheckbox () { + if (hasRequiredComponent_PaletteCheckbox) return Component_PaletteCheckbox; + hasRequiredComponent_PaletteCheckbox = 1; + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_PaletteCheckbox, "__esModule", { value: true }); + Component_PaletteCheckbox.ComponentPaletteCheckbox = void 0; + var Index_1 = requireIndex(); + var CE_1 = CE; + var baseComponent_1 = baseComponent; + var ComponentPaletteCheckbox = /** @class */ (function (_super) { + __extends(ComponentPaletteCheckbox, _super); + function ComponentPaletteCheckbox(options) { + var _a; + var _this = _super.call(this) || this; + _this.defaultView = 'recent_and_rest'; + _this.lastChecked = []; + _this.recents = []; + _this.pid = options === null || options === void 0 ? void 0 : options.paletteUniqueIdentifier; + // if (pid != undefined && pid.length > 0) + // lastChecked = Validator.array( + // FieldStorage.getChannelValue('palette_checkbox', pid), + // [] + // ); + _this.container = (0, CE_1.ce)('div', ['mux_palette', 'mux_palette-checkboxes']); + _this.container.onclick = function () { return _this.close(); }; + _this.inner = (0, CE_1.ce)('div', 'mux_palette-inner'); + _this.inner.onclick = function (e) { return e.stopPropagation(); }; + _this.results = (0, CE_1.ce)('div', ['mux_palette-results']); + _this.inner.appendChild(_this.results); + _this.container.appendChild(_this.inner); + if ((options === null || options === void 0 ? void 0 : options.title) != undefined && options.title.trim().length > 0) { + _this.showResultLabel(options.title); + } + ((_a = options === null || options === void 0 ? void 0 : options.items) !== null && _a !== void 0 ? _a : []).forEach(function (item, i) { + return _this.renderSearchResult(item, i); + }); + document.body.appendChild(_this.container); + setTimeout(function () { + _this.container.style.opacity = '1'; + _this.inner.style.opacity = '1'; + _this.inner.style.transform = 'scale(1)'; + }, 20); + _this.registerKeyListener(); + return _this; + } + ComponentPaletteCheckbox.prototype.close = function () { + var _this = this; + this.overwrite.close(); + this.container.style.pointerEvents = 'none'; + this.container.style.opacity = '0'; + this.inner.style.opacity = '0'; + this.inner.style.transform = 'scale(0.8)'; + setTimeout(function () { return _this.destroy(); }, 400); + this.callEvent('close'); + }; + ComponentPaletteCheckbox.prototype.getChecked = function () { + var selected = Array.from(this.results.querySelectorAll('.mux_palette-results-item-checked')).map(function (item) { + return item.getAttribute('uid'); + }); + this.lastChecked = selected; + // FieldStorage.setChannelValue('palette_checkbox', this.pid, selected); + return selected; + }; + ComponentPaletteCheckbox.prototype.renderSearchResult = function (result, index) { + var _this = this; + if (result.uniqueIdentifier == undefined) + throw new Error("Missing property 'uniqueIdentifier' inside one or more items of component 'PaletteCheckbox'"); + var item = (0, CE_1.ce)('div', 'mux_palette-results-item', { + uid: result.uniqueIdentifier, + }); + if (this.lastChecked.length == 0 && result.defaultValue == true) + item.classList.add('mux_palette-results-item-checked'); + if (this.lastChecked.includes(result.uniqueIdentifier)) + item.classList.add('mux_palette-results-item-checked'); + if (index == 0) + item.classList.add('mux_palette-results-item-selected'); + item.addEventListener('click', function () { + if (item.classList.contains('mux_palette-results-item-checked')) + item.classList.remove('mux_palette-results-item-checked'); + else + item.classList.add('mux_palette-results-item-checked'); + _this.getChecked(); + }); + var checkbox = (0, CE_1.ce)('div', 'mux_palette-results-item-checkbox'); + checkbox.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'done')); + item.appendChild(checkbox); + if (result.materialIcon != undefined) { + var icon = (0, CE_1.ce)('div', 'material-symbols-outlined', null, result.materialIcon); + if (result.materialIconTransform != undefined) + icon.style.transform = result.materialIconTransform; + item.appendChild(icon); + } + else if (result.iconSrc != undefined) + item.appendChild((0, CE_1.ce)('img', 'mux_palette-results-item-icon', { + src: result.iconSrc, + })); + var text = (0, CE_1.ce)('div', [ + 'mux_palette-results-item-text', + 'mux_text', + 'mux_small', + ]); + if (result.prefix != undefined) + text.appendChild((0, CE_1.ce)('span', 'mux_palette-results-item-text-sub', null, result.prefix.trim())); + text.appendChild((0, CE_1.ce)('span', 'mux_palette-results-item-text-main', null, result.name.trim())); + if (result.suffix != undefined) + text.appendChild((0, CE_1.ce)('span', 'mux_palette-results-item-text-sub', null, result.suffix.trim())); + item.appendChild(text); + item.appendChild((0, CE_1.ce)('div', [ + 'mux_palette-results-item-selectedtext', + 'mux_text', + 'mux_tiny', + ], null, ' to toggle')); + this.results.appendChild(item); + return item; + }; + ComponentPaletteCheckbox.prototype.registerKeyListener = function () { + var _this = this; + this.overwrite = Index_1.MorphKey.createOverwrite(); + this.overwrite.bind('Escape', function () { return _this.close(); }); + this.overwrite.bind('Enter', function () { + var checked = _this.getChecked(); + _this.callEvent('selected', checked); + _this.close(); + }); + this.overwrite.bind(' ', function () { + var selected = _this.getSelectedResult(); + if (selected != null) + selected.click(); + }); + this.overwrite.bind('ArrowUp', function () { + var selected = _this.getSelectedResult(); + if (selected != null && + selected.previousElementSibling != null && + selected.previousElementSibling.classList.contains('mux_palette-results-item')) { + selected.classList.remove('mux_palette-results-item-selected'); + selected.previousElementSibling.classList.add('mux_palette-results-item-selected'); + setTimeout(function () { + if ((selected === null || selected === void 0 ? void 0 : selected.previousElementSibling) != null) + selected.previousElementSibling.scrollIntoView({ + behavior: 'auto', + block: 'center', + inline: 'center', + }); + }, 50); + } + }); + this.overwrite.bind('ArrowDown', function () { + var selected = _this.getSelectedResult(); + if (selected != null && + selected.nextElementSibling != null && + selected.nextElementSibling.classList.contains('mux_palette-results-item')) { + selected.classList.remove('mux_palette-results-item-selected'); + selected.nextElementSibling.classList.add('mux_palette-results-item-selected'); + setTimeout(function () { + if ((selected === null || selected === void 0 ? void 0 : selected.previousElementSibling) != null) + selected.previousElementSibling.scrollIntoView({ + behavior: 'auto', + block: 'center', + inline: 'center', + }); + }, 50); + } + }); + }; + ComponentPaletteCheckbox.prototype.showResultLabel = function (text, materialIcon) { + var label = (0, CE_1.ce)('div', 'mux_palette-results-header'); + if (materialIcon != undefined) + label.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, materialIcon)); + label.appendChild((0, CE_1.ce)('span', null, null, text)); + this.results.appendChild(label); + }; + ComponentPaletteCheckbox.prototype.getSelectedResult = function () { + if (this.results == null) + return null; + return this.results.querySelector('.mux_palette-results-item-selected'); + }; + return ComponentPaletteCheckbox; + }(baseComponent_1.MUXComponent)); + Component_PaletteCheckbox.ComponentPaletteCheckbox = ComponentPaletteCheckbox; + + return Component_PaletteCheckbox; + } + + var Component_PaletteSearch = {}; + + var hasRequiredComponent_PaletteSearch; + + function requireComponent_PaletteSearch () { + if (hasRequiredComponent_PaletteSearch) return Component_PaletteSearch; + hasRequiredComponent_PaletteSearch = 1; + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign = (commonjsGlobal && commonjsGlobal.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + var __spreadArray = (commonjsGlobal && commonjsGlobal.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); + }; + Object.defineProperty(Component_PaletteSearch, "__esModule", { value: true }); + Component_PaletteSearch.ComponentPaletteSearch = void 0; + var Index_1 = requireIndex(); + var CE_1 = CE; + var baseComponent_1 = baseComponent; + var ComponentPaletteSearch = /** @class */ (function (_super) { + __extends(ComponentPaletteSearch, _super); + function ComponentPaletteSearch(options) { + var _a, _b, _c; + var _this = _super.call(this) || this; + _this.defaultView = 'recent_and_rest'; + _this.recents = []; + _this.pid = options === null || options === void 0 ? void 0 : options.paletteUniqueIdentifier; + _this.defaultView = (_a = options === null || options === void 0 ? void 0 : options.defaultView) !== null && _a !== void 0 ? _a : 'recent_and_rest'; + if ((_this.defaultView == 'recent' || + _this.defaultView == 'recent_and_rest') && + (_this.pid == undefined || _this.pid.trim().length == 0)) + throw new Error("Property 'paletteUniqueIdentifier' is required in component 'PaletteSearch' to use recents."); + // if (pid != undefined && pid.length > 0) + // recents = Validator.array( + // FieldStorage.getChannelValue('palette_search', pid), + // [] + // ); + _this.container = (0, CE_1.ce)('div', 'mux_palette'); + _this.container.onclick = function () { return _this.close(); }; + _this.inner = (0, CE_1.ce)('div', 'mux_palette-inner'); + _this.inner.onclick = function (e) { return e.stopPropagation(); }; + var input = (0, CE_1.ce)('input', 'mux_palette-input', { + type: 'text', + placeholder: (_b = options === null || options === void 0 ? void 0 : options.placeholder) !== null && _b !== void 0 ? _b : 'Starting typing to search...', + }); + input.oninput = function () { return _this.handleInputUpdate(input.value); }; + _this.inner.appendChild(input); + _this.results = (0, CE_1.ce)('div', ['mux_palette-results']); + _this.inner.appendChild(_this.results); + _this.container.appendChild(_this.inner); + document.body.appendChild(_this.container); + _this.items = (_c = options === null || options === void 0 ? void 0 : options.items) !== null && _c !== void 0 ? _c : []; + _this.registerKeyListener(); + _this.showDefaultView(); + setTimeout(function () { + _this.container.style.opacity = '1'; + _this.inner.style.opacity = '1'; + _this.inner.style.transform = 'scale(1)'; + input.focus(); + }, 20); + return _this; + } + ComponentPaletteSearch.prototype.close = function () { + var _this = this; + this.overwrite.close(); + this.container.style.pointerEvents = 'none'; + this.container.style.opacity = '0'; + this.inner.style.opacity = '0'; + this.inner.style.transform = 'scale(0.8)'; + setTimeout(function () { return _this.destroy(); }, 400); + this.callEvent('close'); + }; + ComponentPaletteSearch.prototype.registerKeyListener = function () { + var _this = this; + this.overwrite = Index_1.MorphKey.createOverwrite(); + this.overwrite.bind('Escape', function () { return _this.close(); }); + this.overwrite.bind('Enter', function () { + var selected = _this.getSelectedResult(); + if (selected != null) + selected.click(); + }); + this.overwrite.bind('ArrowUp', function () { + var selected = _this.getSelectedResult(); + if (selected != null && + selected.previousElementSibling != null && + selected.previousElementSibling.classList.contains('mux_palette-results-item')) { + selected.classList.remove('mux_palette-results-item-selected'); + selected.previousElementSibling.classList.add('mux_palette-results-item-selected'); + setTimeout(function () { + if ((selected === null || selected === void 0 ? void 0 : selected.previousElementSibling) != null) + selected.previousElementSibling.scrollIntoView({ + behavior: 'auto', + block: 'center', + inline: 'center', + }); + }, 50); + } + }); + this.overwrite.bind('ArrowDown', function () { + var selected = _this.getSelectedResult(); + if (selected != null && + selected.nextElementSibling != null && + selected.nextElementSibling.classList.contains('mux_palette-results-item')) { + selected.classList.remove('mux_palette-results-item-selected'); + selected.nextElementSibling.classList.add('mux_palette-results-item-selected'); + setTimeout(function () { + if ((selected === null || selected === void 0 ? void 0 : selected.previousElementSibling) != null) + selected.previousElementSibling.scrollIntoView({ + behavior: 'auto', + block: 'center', + inline: 'center', + }); + }, 50); + } + }); + }; + ComponentPaletteSearch.prototype.search = function (query) { + var tagwords = this.getTags(query); + var results = []; + for (var i = 0; i < this.items.length; i++) { + var item = this.items[i]; + var score = this.getScore(tagwords, item.tags != undefined ? item.tags : this.getTags(item.name)) * + (item.scoreWeight != undefined && !isNaN(item.scoreWeight) + ? item.scoreWeight + : 1); + if (score > 0) + results.push(__assign({ score: score }, item)); + } + return results; + }; + ComponentPaletteSearch.prototype.addToRecents = function (recentId) { + var newRecents = []; + __spreadArray([recentId], this.recents, true).forEach(function (id) { + if (!newRecents.includes(id)) + newRecents.push(id); + }); + if (newRecents.length > 5) + newRecents.splice(5, newRecents.length - 5); + this.recents = newRecents; + // FieldStorage.setChannelValue('palette_search', pid, this.recents); + }; + ComponentPaletteSearch.prototype.renderSearchResult = function (result, index) { + var _this = this; + var item = (0, CE_1.ce)(result.href != undefined ? 'a' : 'div', 'mux_palette-results-item'); + if (result.href != undefined) + item.href = result.href; + else if (result.click != undefined) + item.addEventListener('click', function () { + result.click(); + _this.close(); + }); + if (this.pid != undefined && + this.pid.length > 0 && + (result.uniqueIdentifier != undefined || result.href != undefined)) { + item.addEventListener('click', function () { + var _a; + return _this.addToRecents((_a = result.uniqueIdentifier) !== null && _a !== void 0 ? _a : "address:".concat(result.href)); + }); + } + if (index == 0) + item.classList.add('mux_palette-results-item-selected'); + if (result.materialIcon != undefined) { + var icon = (0, CE_1.ce)('span', 'material-symbols-outlined', null, result.materialIcon); + if (result.materialIconTransform != undefined) + icon.style.transform = result.materialIconTransform; + item.appendChild(icon); + } + else if (result.iconSrc != undefined) + item.appendChild((0, CE_1.ce)('img', 'mux_palette-results-item-icon', { + src: result.iconSrc, + })); + var text = (0, CE_1.ce)('div', [ + 'mux_palette-results-item-text', + 'mux_text', + 'mux_small', + ]); + if (result.prefix != undefined) + text.appendChild((0, CE_1.ce)('span', 'mux_palette-results-item-text-sub', null, result.prefix.trim())); + text.appendChild((0, CE_1.ce)('span', 'mux_palette-results-item-text-main', null, result.name.trim())); + if (result.suffix != undefined) + text.appendChild((0, CE_1.ce)('span', 'mux_palette-results-item-text-sub', null, result.suffix.trim())); + item.appendChild(text); + // if (result.selectedText != undefined) { + // item.appendChild( + // ce( + // 'div', + // ['mux_palette-results-item-selectedtext', 'mux_text', 'mux_tiny'], + // null, + // result.selectedText + // ) + // ); + // } + this.results.appendChild(item); + return item; + }; + ComponentPaletteSearch.prototype.showDefaultView = function () { + var _this = this; + this.results.innerHTML = ''; + switch (this.defaultView) { + case 'all': + this.items.forEach(function (item, i) { + return _this.renderSearchResult(item, i); + }); + break; + case 'none': + return; + case 'recent_and_rest': + var recentItems = this.getRecentItems(); + if (recentItems.length > 0) + this.showResultLabel('Recent actions', 'schedule'); + recentItems.forEach(function (item, i) { + return _this.renderSearchResult(item, i); + }); + var otherItems = this.items.filter(function (item) { + var _a; + if (item.uniqueIdentifier == undefined && item.href == null) + return true; + return !_this.recents.includes((_a = item.uniqueIdentifier) !== null && _a !== void 0 ? _a : "address:".concat(item.href)); + }); + if (otherItems.length > 0) { + otherItems.forEach(function (item, i) { + var itemElement = _this.renderSearchResult(item, i + recentItems.length); + if (i == 0 && recentItems.length > 0) + itemElement.classList.add('mux_palette-results-item-separator'); + }); + } + break; + case 'recent': + default: + this.showResultLabel('Recent actions', 'schedule'); + this.getRecentItems().forEach(function (item, i) { + return _this.renderSearchResult(item, i); + }); + break; + } + }; + ComponentPaletteSearch.prototype.getRecentItems = function () { + if (this.recents == undefined || this.recents.length == 0) + return []; + var addressMap = new Map(); + var uidMap = new Map(); + this.items.forEach(function (item) { + if (item.uniqueIdentifier != undefined && + item.uniqueIdentifier.trim().length > 0) + uidMap.set(item.uniqueIdentifier.trim(), item); + if (item.href != undefined && item.href.trim().length > 0) + addressMap.set(item.href.trim(), item); + }); + var recentItems = []; + this.recents.forEach(function (recentId) { + if (recentId.startsWith('address:')) { + if (addressMap.has(recentId.replace('address:', ''))) + recentItems.push(addressMap.get(recentId.replace('address:', ''))); + } + else { + if (uidMap.has(recentId)) + recentItems.push(uidMap.get(recentId)); + } + }); + return recentItems; + }; + ComponentPaletteSearch.prototype.handleInputUpdate = function (value) { + var _this = this; + if (value.trim().length < 1) + return this.showDefaultView(); + this.results.innerHTML = ''; + var searchresults = this.search(value.trim()); + if (searchresults.length == 0) + return this.showResultLabel('No results based on your search query.', 'warning'); + searchresults + .sort(function (a, b) { + return b.score - a.score; + }) + .forEach(function (result, index) { return _this.renderSearchResult(result, index); }); + }; + ComponentPaletteSearch.prototype.showResultLabel = function (text, materialIcon) { + var label = (0, CE_1.ce)('div', 'mux_palette-results-label'); + if (materialIcon != undefined) + label.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, materialIcon)); + label.appendChild((0, CE_1.ce)('span', null, null, text)); + this.results.appendChild(label); + }; + ComponentPaletteSearch.prototype.getSelectedResult = function () { + if (this.results == null) + return null; + return this.results.querySelector('.mux_palette-results-item-selected'); + }; + ComponentPaletteSearch.prototype.getScore = function (queryWords, tagWords) { + var score = 0; + var _loop_1 = function (i) { + tagWords.forEach(function (tagWord) { + if (tagWord.includes(queryWords[i])) { + score += tagWord.startsWith(queryWords[i]) ? 2 : 1; + } + }); + }; + for (var i = 0; i < queryWords.length; i++) { + _loop_1(i); + } + return score; + }; + ComponentPaletteSearch.prototype.getTags = function (query) { + var tags = []; + query + .toLowerCase() + .split(' ') + .map(function (word) { + return word.trim(); + }) + .filter(function (word) { + return word.length > 0; + }) + .forEach(function (tag) { + if (!tags.includes(tag)) + tags.push(tag); + }); + return tags; + }; + return ComponentPaletteSearch; + }(baseComponent_1.MUXComponent)); + Component_PaletteSearch.ComponentPaletteSearch = ComponentPaletteSearch; + + return Component_PaletteSearch; + } + + var Component_Resizer = {}; + + var __extends$2 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Resizer, "__esModule", { value: true }); + Component_Resizer.ComponentResizer = void 0; + var CE_1$2 = CE; + var baseComponent_1$2 = baseComponent; + var ComponentResizer = /** @class */ (function (_super) { + __extends$2(ComponentResizer, _super); + function ComponentResizer(options) { + var _a, _b, _c; + var _this = _super.call(this) || this; + _this.startPoint = null; + _this.startSize = null; + _this.preMove = true; + _this.moveEvent = function (e) { + _this.handleMove(e); + }; + _this.touchEndEvent = function (e) { + _this.stopResize(); + }; + _this.direction = (_a = options === null || options === void 0 ? void 0 : options.direction) !== null && _a !== void 0 ? _a : 'right'; + _this.closeable = (_b = options === null || options === void 0 ? void 0 : options.closeable) !== null && _b !== void 0 ? _b : false; + _this.min = options === null || options === void 0 ? void 0 : options.min; + _this.max = options === null || options === void 0 ? void 0 : options.max; + _this.relative = (_c = options === null || options === void 0 ? void 0 : options.relative) !== null && _c !== void 0 ? _c : false; + _this.container = (0, CE_1$2.ce)('div', 'mux_resizer'); + var area = (0, CE_1$2.ce)('div', 'mux_resizer-area'); + var grab = (0, CE_1$2.ce)('div', 'mux_resizer-grab'); + var grabHandle = (0, CE_1$2.ce)('span', ['material-symbols-outlined', 'mux_resizer-grab-handle'], null, 'drag_handle'); + if (options.direction == 'left' || options.direction == 'right') + grabHandle.style.transform = 'rotate(90deg)'; + grab.appendChild(grabHandle); + var grabOpen = (0, CE_1$2.ce)('span', ['material-symbols-outlined', 'mux_resizer-grab-open'], null, { + left: 'arrow_left', + right: 'arrow_right', + up: 'arrow_drop_up', + down: 'arrow_drop_down', + }[_this.direction]); + grab.appendChild(grabOpen); + area.appendChild(grab); + if ((options === null || options === void 0 ? void 0 : options.existingContainer) != undefined) { + if (!options.existingContainer.classList.contains('mux_resizer')) + throw new Error('Container of registered resizer does not contain mux_resizer classname'); + _this.container = options.existingContainer; + if (_this.container.querySelector('.mux_resizer-area') != null) { + var existingArea = _this.container.querySelector('.mux_resizer-area'); + _this.container.removeChild(existingArea); + } + } + _this.container.appendChild(area); + _this.container.classList.add("mux_resizer-direction-".concat(_this.direction)); + _this.currentSize = + _this.direction == 'left' || _this.direction == 'right' + ? _this.container.clientWidth + : _this.container.clientHeight; + area.addEventListener('mousedown', function (e) { return _this.startResize(e); }); + area.addEventListener('touchstart', function (e) { return _this.startResize(e); }); + grab.addEventListener('mousedown', function (e) { return _this.startResize(e); }); + area.addEventListener('touchstart', function (e) { return _this.startResize(e); }); + grab.addEventListener('click', function () { + if (!_this.container.classList.contains('mux_resizer-closed')) + return; + var size = typeof _this.min === 'function' ? _this.min() : _this.min; + if (_this.direction == 'left' || _this.direction == 'right') + _this.container.style.width = _this.toSize(size); + else if (_this.direction == 'up' || _this.direction == 'down') + _this.container.style.height = _this.toSize(size); + _this.currentSize = size; + _this.callEvent('resized', size); + _this.container.classList.remove('mux_resizer-closed'); + }); + if (!_this.relative) + window.addEventListener('resize', function () { + _this.setSize(_this.currentSize); + }); + return _this; + } + ComponentResizer.prototype.toSize = function (value) { + if (!this.relative) + return "".concat(value, "px"); + var parentSize = this.direction == 'left' || this.direction == 'right' + ? this.container.parentElement.clientWidth + : this.container.parentElement.clientHeight; + var percent = (value / parentSize) * 100; + return "".concat(percent, "%"); + }; + ComponentResizer.prototype.setSize = function (size) { + var value = this.parseNewValue(size); + if (this.direction == 'left' || this.direction == 'right') + this.container.style.width = this.toSize(value); + else if (this.direction == 'up' || this.direction == 'down') + this.container.style.height = this.toSize(value); + this.currentSize = value; + this.callEvent('resized', value); + }; + ComponentResizer.prototype.getSize = function () { + return this.currentSize; + }; + ComponentResizer.prototype.parseNewValue = function (value) { + var _min = typeof this.min === 'function' ? this.min() : this.min; + var _max = typeof this.max === 'function' ? this.max() : this.max; + value >= _min + ? this.container.classList.remove('mux_resizer-block') + : this.container.classList.add('mux_resizer-block'); + if (_min >= 0) { + if (this.closeable == true && value < _min * 0.5) { + this.container.classList.add('mux_resizer-closed'); + this.callEvent('resized', 0); + return 0; + } + else + value = Math.max(_min, value); + } + if (_max > 0) + value = Math.min(_max, value); + this.container.classList.remove('mux_resizer-closed'); + return value; + }; + ComponentResizer.prototype.startResize = function (e) { + var _a = this.pageCoords(e), x = _a.x, y = _a.y; + var bounds = this.container.getBoundingClientRect(); + if (this.direction == 'left' || this.direction == 'right') { + this.startPoint = x; + this.startSize = bounds.width; + } + else if (this.direction == 'up' || this.direction == 'down') { + this.startPoint = y; + this.startSize = bounds.height; + } + window.addEventListener('mousemove', this.moveEvent); + window.addEventListener('touchmove', this.moveEvent); + window.addEventListener('touchend', this.touchEndEvent); + }; + ComponentResizer.prototype.stopResize = function () { + this.startPoint = null; + this.startSize = null; + this.preMove = true; + this.container.classList.remove('mux_resizer-moving'); + window.removeEventListener('mousemove', this.moveEvent); + window.removeEventListener('touchmove', this.moveEvent); + window.removeEventListener('touchend', this.touchEndEvent); + }; + ComponentResizer.prototype.handleMove = function (e) { + var _a, _b, _c; + if (((_a = e === null || e === void 0 ? void 0 : e.buttons) !== null && _a !== void 0 ? _a : 1) != 1 || + ((_c = (_b = e === null || e === void 0 ? void 0 : e.touches) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 1) == 0 || + this.startPoint == null || + this.startSize == null) { + this.stopResize(); + return; + } + var _d = this.pageCoords(e), x = _d.x, y = _d.y; + if (this.preMove) { + var startSpan = Math.abs(this.startPoint - + (this.direction == 'left' || this.direction == 'right' + ? x + : y)); + if (startSpan >= 10) { + this.preMove = false; + this.container.classList.add('mux_resizer-moving'); + } + else + return; + } + var value = null; + if (this.direction == 'left' || this.direction == 'right') { + value = this.parseNewValue(this.startSize + + (this.direction == 'left' + ? this.startPoint - x + : x - this.startPoint)); + this.container.style.width = this.toSize(value); + } + else if (this.direction == 'up' || this.direction == 'down') { + value = this.parseNewValue(this.startSize + + (this.direction == 'up' + ? this.startPoint - y + : y - this.startPoint)); + this.container.style.height = this.toSize(value); + } + this.currentSize = value; + this.callEvent('resized', value); + }; + ComponentResizer.prototype.pageCoords = function (e) { + var _a, _b, _c, _d; + return { + x: (_a = e.pageX) !== null && _a !== void 0 ? _a : (_b = e.touches[0]) === null || _b === void 0 ? void 0 : _b.pageX, + y: (_c = e.pageY) !== null && _c !== void 0 ? _c : (_d = e.touches[0]) === null || _d === void 0 ? void 0 : _d.pageY, + }; + }; + return ComponentResizer; + }(baseComponent_1$2.MUXComponent)); + Component_Resizer.ComponentResizer = ComponentResizer; + + var Component_Row = {}; + + var __extends$1 = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Row, "__esModule", { value: true }); + Component_Row.ComponentRow = void 0; + var CE_1$1 = CE; + var baseComponent_1$1 = baseComponent; + var ComponentRow = /** @class */ (function (_super) { + __extends$1(ComponentRow, _super); + function ComponentRow(options) { + var _this = _super.call(this) || this; + _this.container = (0, CE_1$1.ce)('div', 'mux_row'); + if ((options === null || options === void 0 ? void 0 : options.spreadEven) == true) + _this.container.classList.add('mux_spread'); + if ((options === null || options === void 0 ? void 0 : options.indent) == true) + _this.container.classList.add('mux_indent'); + if ((options === null || options === void 0 ? void 0 : options.disabled) == true) + _this.container.classList.add('mux_disabled'); + if ((options === null || options === void 0 ? void 0 : options.tooltip) != undefined) + _this.container.title = options.tooltip; + _this.content = (0, CE_1$1.ce)('div', 'mux_row-content'); + var label = (0, CE_1$1.ce)('div', ['mux_row-label', 'mux_text'], null, options.label); + if ((options === null || options === void 0 ? void 0 : options.layout) != undefined && options.layout == 'valueFirst') { + _this.container.appendChild(_this.content); + _this.container.appendChild(label); + } + else { + _this.container.appendChild(label); + _this.container.appendChild(_this.content); + } + if (options.content != undefined) + _this.content.appendChild(options.content); + return _this; + } + ComponentRow.prototype.setEnabled = function (state) { + if (state) + this.container.classList.remove('mux_disabled'); + else + this.container.classList.add('mux_disabled'); + }; + ComponentRow.prototype.setTooltip = function (tooltip) { + if (tooltip == null) + this.container.removeAttribute('title'); + else + this.container.title = tooltip; + }; + return ComponentRow; + }(baseComponent_1$1.MUXComponent)); + Component_Row.ComponentRow = ComponentRow; + + var Component_Select = {}; + + var hasRequiredComponent_Select; + + function requireComponent_Select () { + if (hasRequiredComponent_Select) return Component_Select; + hasRequiredComponent_Select = 1; + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Select, "__esModule", { value: true }); + Component_Select.ComponentSelect = void 0; + var Index_1 = requireIndex(); + var CE_1 = CE; + var baseComponent_1 = baseComponent; + var ComponentSelect = /** @class */ (function (_super) { + __extends(ComponentSelect, _super); + function ComponentSelect(options) { + var _a, _b, _c; + var _this = _super.call(this) || this; + _this.show = 'name'; + _this.show = (_a = options.show) !== null && _a !== void 0 ? _a : 'name'; + _this.container = (0, CE_1.ce)('div', 'mux_select'); + var border = (_b = options.border) !== null && _b !== void 0 ? _b : 'hover'; + if (border == 'always') + _this.container.classList.add('mux_select-alwaysborder'); + else if (border == 'never') + _this.container.classList.add('mux_select-noborder'); + _this.input = new Index_1.MorphComponent.Input({ + type: 'text', + border: 'never', + }); + _this.input.container.onkeydown = function (e) { + e.preventDefault(); + }; + _this.container.appendChild(_this.input.container); + _this.content = (0, CE_1.ce)('div', 'mux_select-content'); + _this.container.appendChild(_this.content); + _this.container.appendChild((0, CE_1.ce)('span', ['material-symbols-outlined', 'mux_select-arrow'], null, 'keyboard_arrow_down')); + _this.input.container.onfocus = function () { + _this.input.container.blur(); + _this.toggleContext(); + }; + _this.input.container.onblur = function () { + _this.context.close('selectblur'); + }; + _this.container.onclick = function () { return _this.toggleContext(); }; + _this.items = (_c = options === null || options === void 0 ? void 0 : options.items) !== null && _c !== void 0 ? _c : []; + _this.select(options.selectedId, false); + return _this; + } + ComponentSelect.prototype.setItems = function (items) { + this.items = items; + }; + ComponentSelect.prototype.select = function (id, dispatchEvent) { + var _a; + if (dispatchEvent === void 0) { dispatchEvent = true; } + var item = this.items.find(function (i) { + if (i.type == 'separator') + return false; + return i.id == id; + }); + this.selectedId = id; + this.content.innerHTML = ''; + if (item == null) { + this.content.appendChild((0, CE_1.ce)('div', ['mux_text', 'mux_small', 'mux_select-none'], null, 'None selected')); + return; + } + if (item.materialIcon != undefined) { + var materialIcon = (0, CE_1.ce)('span', 'material-symbols-outlined', null, item.materialIcon); + if (item.materialIconTransform != undefined) + materialIcon.style.transform = item.materialIconTransform; + this.content.appendChild(materialIcon); + } + else if (item.icon != undefined) { + this.content.appendChild((0, CE_1.ce)('img', 'mux_select-content-icon', { src: item.icon })); + } + this.content.appendChild((0, CE_1.ce)('div', ['mux_text', 'mux_small'], null, (_a = item.text) !== null && _a !== void 0 ? _a : item.id)); + if (dispatchEvent) + this.callEvent('input', id); + }; + ComponentSelect.prototype.setSelected = function (id) { + this.select(id, false); + }; + ComponentSelect.prototype.getSelected = function () { + return this.selectedId; + }; + ComponentSelect.prototype.toggleContext = function () { + var _this = this; + if (this.context != null) { + return this.context.close('selecttoggle'); + } + var bounds = this.container.getBoundingClientRect(); + this.context = new Index_1.MorphComponent.ContextMenu({ + x: bounds.x + bounds.width / 2, + y: bounds.y + bounds.height, + align: 'center', + selected: this.selectedId, + items: this.items.map(function (item) { + var _a, _b; + if (item.type == 'separator') { + return { type: 'separator' }; + } + return { + type: (_a = item.type) !== null && _a !== void 0 ? _a : 'normal', + uniqueIdentifier: item.id, + text: (_b = item.text) !== null && _b !== void 0 ? _b : item.id, + materialIcon: item.materialIcon, + materialIconTransform: item.materialIconTransform, + icon: item.icon, + click: function () { + _this.select(item.id, true); + }, + }; + }), + }); + this.container.classList.add('mux_select-open'); + this.context.on('close', function () { + _this.container.classList.remove('mux_select-open'); + _this.context = null; + }); + }; + return ComponentSelect; + }(baseComponent_1.MUXComponent)); + Component_Select.ComponentSelect = ComponentSelect; + + return Component_Select; + } + + var Component_Table = {}; + + var Component_Table_Button = {}; + + var Component_Table__base = {}; + + Object.defineProperty(Component_Table__base, "__esModule", { value: true }); + Component_Table__base.ComponentTable_Base = void 0; + var ComponentTable_Base = /** @class */ (function () { + function ComponentTable_Base() { + } + ComponentTable_Base.prototype.createElement = function (cell, rowId, column, component, asNumber) { + return null; + }; + return ComponentTable_Base; + }()); + Component_Table__base.ComponentTable_Base = ComponentTable_Base; + + var hasRequiredComponent_Table_Button; + + function requireComponent_Table_Button () { + if (hasRequiredComponent_Table_Button) return Component_Table_Button; + hasRequiredComponent_Table_Button = 1; + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Table_Button, "__esModule", { value: true }); + Component_Table_Button.ComponentTable_Button = void 0; + var Index_1 = requireIndex(); + var Component_Table__base_1 = Component_Table__base; + var ComponentTable_Button = /** @class */ (function (_super) { + __extends(ComponentTable_Button, _super); + function ComponentTable_Button() { + return _super.call(this) || this; + } + ComponentTable_Button.prototype.createElement = function (cell, rowId, column, component, asNumber) { + var container = (0, Index_1.ce)('div', ['mux_table-button']); + var btn = (0, Index_1.ce)('div', [ + 'mux_table-button-btn', + 'mux_text', + 'mux_small', + "mux_table-button-btn-".concat(encodeURI(cell.text)), + ], { title: cell.tooltip }, cell.text); + btn.onclick = function (e) { + e.stopPropagation(); + component.callEvent('buttonClick', rowId, column.uniqueIdentifier); + }; + container.appendChild(btn); + return container; + }; + return ComponentTable_Button; + }(Component_Table__base_1.ComponentTable_Base)); + Component_Table_Button.ComponentTable_Button = ComponentTable_Button; + + return Component_Table_Button; + } + + var Component_Table_Duration = {}; + + var Component_Table_Text = {}; + + var hasRequiredComponent_Table_Text; + + function requireComponent_Table_Text () { + if (hasRequiredComponent_Table_Text) return Component_Table_Text; + hasRequiredComponent_Table_Text = 1; + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Table_Text, "__esModule", { value: true }); + Component_Table_Text.ComponentTable_Text = void 0; + var Index_1 = requireIndex(); + var TextHighlighter_1 = TextHighlighter; + var Component_Table__base_1 = Component_Table__base; + var ComponentTable_Text = /** @class */ (function (_super) { + __extends(ComponentTable_Text, _super); + function ComponentTable_Text(allowHighlighting) { + var _this = _super.call(this) || this; + _this.allowHighlighting = allowHighlighting; + return _this; + } + ComponentTable_Text.prototype.createElement = function (cell, rowId, column, component, asNumber) { + var _a, _b, _c, _d, _e, _f; + if (asNumber === void 0) { asNumber = false; } + var wrapper = (0, Index_1.ce)('div', 'mux_table-wrapper'); + var container = (0, Index_1.ce)('div', 'mux_table-text', { + title: (_a = cell === null || cell === void 0 ? void 0 : cell.tooltip) !== null && _a !== void 0 ? _a : '', + }); + var text = this.allowHighlighting + ? (0, TextHighlighter_1.generateTextHighlights)(String(cell.value).trim()) + : (0, Index_1.ce)('div', ['mux_text', 'mux_small'], null, "".concat((_b = cell.prefix) !== null && _b !== void 0 ? _b : '', " ").concat(cell.value).trim()); + text.prepend((0, Index_1.ce)('span', null, null, cell.prefix)); + text.style.justifyContent = { + left: 'flex-Start', + right: 'flex-end', + center: 'center', + }[(_c = cell.align) !== null && _c !== void 0 ? _c : 'left']; + var editonly = column.editonly; + container.appendChild(text); + if (column.editable) { + var inputContainer = (0, Index_1.ce)('div', 'mux_table-edit-input'); + var inputPrefix = (0, Index_1.ce)('div', ['mux_text', 'mux_small', 'mux_table-edit-input-prefix'], null, (_d = cell.prefix) !== null && _d !== void 0 ? _d : ''); + var input = new Index_1.MorphComponent.Input({ + type: 'text', + value: String((_e = cell === null || cell === void 0 ? void 0 : cell.value) !== null && _e !== void 0 ? _e : '').trim(), + border: 'always', + }); + if (editonly) + input.on('input', function () { + component.callEvent('valueUpdated', rowId, column.uniqueIdentifier, !asNumber + ? input.container.value + : parseFloat(input.container.value)); + }); + input.container.style.textAlign = (_f = cell.align) !== null && _f !== void 0 ? _f : 'left'; + inputContainer.appendChild(inputPrefix); + inputContainer.appendChild(input.container); + container.appendChild(inputContainer); + container.style.cursor = 'pointer'; + var hasFirst = false; + var clickTimeout; + container.onclick = function () { + clearTimeout(clickTimeout); + if (hasFirst == false) { + hasFirst = true; + clickTimeout = setTimeout(function () { + hasFirst = false; + }, 1000); + } + else { + openEdit(); + hasFirst = false; + } + }; + var openEdit = function () { + text.style.display = 'none'; + inputContainer.style.display = 'flex'; + input.container.focus(); + input.container.setSelectionRange(input.container.value.length, input.container.value.length); + var initValue = input.container.value; + var close = function () { + if (editonly) + return; + window.removeEventListener('click', onclick); + component.callEvent('valueUpdated', rowId, column.uniqueIdentifier, !asNumber + ? input.container.value + : parseFloat(input.container.value)); + text.innerText = input.container.value; + text.style.display = 'flex'; + inputContainer.style.display = 'none'; + }; + input.container.onkeydown = function (e) { + if (editonly) + return; + if (e.key == 'Enter') + close(); + else if (e.key == 'Escape') { + input.container.value = initValue; + text.innerText = input.container.value; + close(); + } + }; + if (!editonly) { + var onclick = function (e) { + if (e.target == undefined || + e.target != input.container) + close(); + }; + setTimeout(function () { return window.addEventListener('click', onclick); }, 100); + } + }; + if (editonly) + openEdit(); + } + wrapper.appendChild(container); + if (cell.subText != undefined) { + wrapper.appendChild((0, Index_1.ce)('div', ['mux_text', 'mux_tiny', 'mux_table-subtext'], null, cell.subText.trim())); + } + return wrapper; + }; + return ComponentTable_Text; + }(Component_Table__base_1.ComponentTable_Base)); + Component_Table_Text.ComponentTable_Text = ComponentTable_Text; + + return Component_Table_Text; + } + + var hasRequiredComponent_Table_Duration; + + function requireComponent_Table_Duration () { + if (hasRequiredComponent_Table_Duration) return Component_Table_Duration; + hasRequiredComponent_Table_Duration = 1; + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Table_Duration, "__esModule", { value: true }); + Component_Table_Duration.ComponentTable_Duration = void 0; + var Component_Table_Text_1 = requireComponent_Table_Text(); + var Component_Table__base_1 = Component_Table__base; + var ComponentTable_Duration = /** @class */ (function (_super) { + __extends(ComponentTable_Duration, _super); + function ComponentTable_Duration() { + var _this = _super.call(this) || this; + _this._text = new Component_Table_Text_1.ComponentTable_Text(false); + return _this; + } + ComponentTable_Duration.prototype.createElement = function (cell, rowId, column, component, asNumber) { + var element = this._text.createElement(cell, rowId, column, component, true); + var elementText = element.querySelector('.mux_text'); + if (elementText != null) + elementText.style.justifyContent = 'center'; + element.classList.add('mux_table-duration'); + var input = element.querySelector('input'); + var regex = /^[0-9.]+$/; + element.addEventListener('input', function () { + var currentValue = input.value; + if (!regex.test(currentValue)) { + input.value = currentValue.slice(0, -1); + } + }); + return element; + }; + return ComponentTable_Duration; + }(Component_Table__base_1.ComponentTable_Base)); + Component_Table_Duration.ComponentTable_Duration = ComponentTable_Duration; + + return Component_Table_Duration; + } + + var Component_Table_Icons = {}; + + var hasRequiredComponent_Table_Icons; + + function requireComponent_Table_Icons () { + if (hasRequiredComponent_Table_Icons) return Component_Table_Icons; + hasRequiredComponent_Table_Icons = 1; + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Table_Icons, "__esModule", { value: true }); + Component_Table_Icons.ComponentTable_Icons = void 0; + var Index_1 = requireIndex(); + var Component_Table__base_1 = Component_Table__base; + var ComponentTable_Icons = /** @class */ (function (_super) { + __extends(ComponentTable_Icons, _super); + function ComponentTable_Icons() { + return _super.call(this) || this; + } + ComponentTable_Icons.prototype.createElement = function (cell, rowId, column, component, asNumber) { + var _a; + var container = (0, Index_1.ce)('div', ['mux_table-icons']); + ((_a = cell === null || cell === void 0 ? void 0 : cell.items) !== null && _a !== void 0 ? _a : []).forEach(function (item) { + var itemElement = (0, Index_1.ce)('div', 'mux_table-icon'); + itemElement.appendChild((0, Index_1.ce)('span', 'material-symbols-outlined', null, item.materialIcon)); + if (item.color != undefined) + itemElement.style.color = item.color; + itemElement.onclick = function (e) { + e.stopPropagation(); + item.click(); + }; + container.appendChild(itemElement); + }); + return container; + }; + return ComponentTable_Icons; + }(Component_Table__base_1.ComponentTable_Base)); + Component_Table_Icons.ComponentTable_Icons = ComponentTable_Icons; + + return Component_Table_Icons; + } + + var Component_Table_MaterialSymbol = {}; + + var hasRequiredComponent_Table_MaterialSymbol; + + function requireComponent_Table_MaterialSymbol () { + if (hasRequiredComponent_Table_MaterialSymbol) return Component_Table_MaterialSymbol; + hasRequiredComponent_Table_MaterialSymbol = 1; + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Table_MaterialSymbol, "__esModule", { value: true }); + Component_Table_MaterialSymbol.ComponentTable_MaterialSymbol = void 0; + var Index_1 = requireIndex(); + var TextHighlighter_1 = TextHighlighter; + var Component_Table__base_1 = Component_Table__base; + var ComponentTable_MaterialSymbol = /** @class */ (function (_super) { + __extends(ComponentTable_MaterialSymbol, _super); + function ComponentTable_MaterialSymbol() { + return _super.call(this) || this; + } + ComponentTable_MaterialSymbol.prototype.createElement = function (cell, rowId, column, component, asNumber) { + var _a, _b, _c, _d; + if (asNumber === void 0) { asNumber = false; } + var wrapper = (0, Index_1.ce)('div', 'mux_table-wrapper'); + var container = (0, Index_1.ce)('div', 'mux_table-text', { + title: (_a = cell === null || cell === void 0 ? void 0 : cell.tooltip) !== null && _a !== void 0 ? _a : '', + }); + var text = this.allowHighlighting + ? (0, TextHighlighter_1.generateTextHighlights)(String(cell.materialIcon).trim()) + : (0, Index_1.ce)('span', ['material-symbols-outlined', 'g_text'], null, cell.materialIcon); + text.style.justifyContent = { + left: 'flex-Start', + right: 'flex-end', + center: 'center', + }[(_b = cell.align) !== null && _b !== void 0 ? _b : 'left']; + container.appendChild(text); + if (column.editable) { + var inputContainer = (0, Index_1.ce)('div', 'mux_table-edit-input'); + var input = (0, Index_1.ce)('input', null, { + type: 'text', + value: String((_c = cell === null || cell === void 0 ? void 0 : cell.materialIcon) !== null && _c !== void 0 ? _c : '').trim(), + }); + input.style.textAlign = (_d = cell.align) !== null && _d !== void 0 ? _d : 'left'; + inputContainer.appendChild(input); + container.appendChild(inputContainer); + container.style.cursor = 'pointer'; + var hasFirst = false; + var clickTimeout; + container.onclick = function () { + clearTimeout(clickTimeout); + if (hasFirst == false) { + hasFirst = true; + clickTimeout = setTimeout(function () { + hasFirst = false; + }, 1000); + } + else { + openEdit(); + hasFirst = false; + } + }; + var openEdit = function () { + text.style.display = 'none'; + inputContainer.style.display = 'flex'; + input.focus(); + input.setSelectionRange(input.value.length, input.value.length); + var initValue = input.value; + var close = function () { + window.removeEventListener('click', onclick); + component.callEvent('valueUpdated', rowId, column.uniqueIdentifier, !asNumber ? input.value : parseFloat(input.value)); + text.innerText = input.value; + text.style.display = 'flex'; + inputContainer.style.display = 'none'; + }; + input.onkeydown = function (e) { + if (e.key == 'Enter') + close(); + else if (e.key == 'Escape') { + input.value = initValue; + text.innerText = input.value; + close(); + } + }; + var onclick = function (e) { + if (e.target == undefined || e.target != input) + close(); + }; + setTimeout(function () { return window.addEventListener('click', onclick); }, 100); + }; + } + wrapper.appendChild(container); + // if (cell.materialIcon != undefined) { + // wrapper.appendChild( + // ce( + // 'div', + // ['mux_text', 'mux_tiny', 'mux_table-subtext'], + // null, + // cell.subMaterialSymbol.trim() + // ) + // ); + // } + return wrapper; + }; + return ComponentTable_MaterialSymbol; + }(Component_Table__base_1.ComponentTable_Base)); + Component_Table_MaterialSymbol.ComponentTable_MaterialSymbol = ComponentTable_MaterialSymbol; + + return Component_Table_MaterialSymbol; + } + + var Component_Table_Number = {}; + + var hasRequiredComponent_Table_Number; + + function requireComponent_Table_Number () { + if (hasRequiredComponent_Table_Number) return Component_Table_Number; + hasRequiredComponent_Table_Number = 1; + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Table_Number, "__esModule", { value: true }); + Component_Table_Number.ComponentTable_Number = void 0; + var Component_Table_Text_1 = requireComponent_Table_Text(); + var Component_Table__base_1 = Component_Table__base; + var ComponentTable_Number = /** @class */ (function (_super) { + __extends(ComponentTable_Number, _super); + function ComponentTable_Number() { + var _this = _super.call(this) || this; + _this._text = new Component_Table_Text_1.ComponentTable_Text(false); + return _this; + } + ComponentTable_Number.prototype.createElement = function (cell, rowId, column, component, asNumber) { + var element = this._text.createElement(cell, rowId, column, component); + element.classList.add('mux_table-number'); + var input = element.querySelector('input'); + var regex = /^[0-9.]+$/; + element.addEventListener('input', function () { + var currentValue = input.value; + if (!regex.test(currentValue)) { + input.value = currentValue.slice(0, -1); + component.callEvent('valueUpdated', rowId, column.uniqueIdentifier, input.value); + } + }); + return element; + }; + return ComponentTable_Number; + }(Component_Table__base_1.ComponentTable_Base)); + Component_Table_Number.ComponentTable_Number = ComponentTable_Number; + + return Component_Table_Number; + } + + var Component_Table_Select = {}; + + var hasRequiredComponent_Table_Select; + + function requireComponent_Table_Select () { + if (hasRequiredComponent_Table_Select) return Component_Table_Select; + hasRequiredComponent_Table_Select = 1; + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign = (commonjsGlobal && commonjsGlobal.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + Object.defineProperty(Component_Table_Select, "__esModule", { value: true }); + Component_Table_Select.ComponentTable_Select = void 0; + var Index_1 = requireIndex(); + var Component_Table__base_1 = Component_Table__base; + var ComponentTable_Select = /** @class */ (function (_super) { + __extends(ComponentTable_Select, _super); + function ComponentTable_Select() { + return _super.call(this) || this; + } + ComponentTable_Select.prototype.createElement = function (cell, rowId, column, component, asNumber) { + var container = (0, Index_1.ce)('div', 'mux_table-select', { title: cell.tooltip }); + var options = {}; + for (var i = 0; i < column.options.length; i++) + options[column.options[i].uniqueIdentifier] = column.options[i]; + var setSelected = function (uniqueIdentifier) { + var _a, _b, _c, _d, _e, _f; + var selected = (options === null || options === void 0 ? void 0 : options[uniqueIdentifier]) != undefined + ? uniqueIdentifier + : column.options[0].uniqueIdentifier; + var selectedTransform = (_a = options === null || options === void 0 ? void 0 : options[selected].materialIconTransform) !== null && _a !== void 0 ? _a : 'unset'; + var option = options === null || options === void 0 ? void 0 : options[selected]; + textSpan.innerText = (_b = option === null || option === void 0 ? void 0 : option.text) !== null && _b !== void 0 ? _b : ''; + iconSpan.innerText = (_d = (_c = options === null || options === void 0 ? void 0 : options[selected]) === null || _c === void 0 ? void 0 : _c.materialIcon) !== null && _d !== void 0 ? _d : ''; + iconSpan.style.transform = selectedTransform !== null && selectedTransform !== void 0 ? selectedTransform : ''; + container.title = "".concat((_f = (_e = options === null || options === void 0 ? void 0 : options[selected]) === null || _e === void 0 ? void 0 : _e.text) !== null && _f !== void 0 ? _f : '', " | Click to change"); + }; + var iconSpan = (0, Index_1.ce)('span', 'material-symbols-outlined', null); + var textSpan = (0, Index_1.ce)('span', ['mux_text', 'mux_small'], null); + var arrow = (0, Index_1.ce)('span', ['mux_table-select-arrow', 'material-symbols-outlined'], null, 'keyboard_arrow_down'); + container.append(iconSpan, textSpan); + container.appendChild(arrow); + setSelected(cell.value); + container.onclick = function () { + var bounds = container.getBoundingClientRect(); + var items = column.options.map(function (item) { + return __assign({ click: function () { + component.callEvent('valueUpdated', rowId, column.uniqueIdentifier, item.uniqueIdentifier); + setSelected(item.uniqueIdentifier); + } }, item); + }); + new Index_1.MorphComponent.ContextMenu({ + x: bounds.x + bounds.width / 2, + y: bounds.y + bounds.height, + items: items, + }); + }; + return container; + }; + return ComponentTable_Select; + }(Component_Table__base_1.ComponentTable_Base)); + Component_Table_Select.ComponentTable_Select = ComponentTable_Select; + + return Component_Table_Select; + } + + var Component_Table_TextSuggestions = {}; + + var hasRequiredComponent_Table_TextSuggestions; + + function requireComponent_Table_TextSuggestions () { + if (hasRequiredComponent_Table_TextSuggestions) return Component_Table_TextSuggestions; + hasRequiredComponent_Table_TextSuggestions = 1; + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var __assign = (commonjsGlobal && commonjsGlobal.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + var __generator = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + }; + Object.defineProperty(Component_Table_TextSuggestions, "__esModule", { value: true }); + Component_Table_TextSuggestions.ComponentTable_TextSuggestions = void 0; + var Index_1 = requireIndex(); + var Component_ContextMenu_1 = Component_ContextMenu; + var Component_Table__base_1 = Component_Table__base; + var ComponentTable_TextSuggestions = /** @class */ (function (_super) { + __extends(ComponentTable_TextSuggestions, _super); + function ComponentTable_TextSuggestions() { + return _super.call(this) || this; + } + ComponentTable_TextSuggestions.prototype.createElement = function (cell, rowId, column, component, asNumber) { + var _a, _b, _c, _d; + var wrapper = (0, Index_1.ce)('div', 'mux_table-wrapper'); + var container = (0, Index_1.ce)('div', 'mux_table-textsuggestions'); + var optionTitles = {}; + var optionIds = column.options.map(function (option) { + optionTitles[option.uniqueIdentifier] = option.text; + return option.uniqueIdentifier; + }); + var input = new Index_1.MorphComponent.Input({ + type: 'text', + value: (_b = optionTitles[String((_a = cell === null || cell === void 0 ? void 0 : cell.value) !== null && _a !== void 0 ? _a : '').trim()]) !== null && _b !== void 0 ? _b : String((_c = cell === null || cell === void 0 ? void 0 : cell.value) !== null && _c !== void 0 ? _c : '').trim(), + border: 'always', + }); + input.container.setAttribute('valueId', String((_d = cell === null || cell === void 0 ? void 0 : cell.value) !== null && _d !== void 0 ? _d : '').trim()); + var arrow = (0, Index_1.ce)('span', 'material-symbols-outlined', null, 'arrow_drop_down'); + arrow.onclick = function () { + input.container.focus(); + showContext(); + }; + input.container.addEventListener('focus', function () { + var _a; + input.setValue((_a = input.container.getAttribute('valueId')) !== null && _a !== void 0 ? _a : ''); + }); + input.on('blur', function () { + var optionTitle = optionTitles[input.container.getAttribute('valueId')]; + if (optionTitle == null) { + if (input.getValue().length > 0) + component.callEvent('textSuggestionFailed', rowId, column.uniqueIdentifier); + input.setValue(''); + input.container.removeAttribute('valueId'); + } + else { + input.setValue(optionTitle); + } + component.callEvent('valueUpdated', rowId, column.uniqueIdentifier, input.container.getAttribute('valueId')); + setTimeout(function () { + context === null || context === void 0 ? void 0 : context.destroy(); + }, 250); + }); + input.container.addEventListener('keydown', function (e) { + if (e.key != ' ' || !e.ctrlKey) + return; + e.preventDefault(); + showContext(); + }); + input.on('input', function () { return showContext(); }); + var context; + var showContextTimeout; + function showContext() { + return __awaiter(this, arguments, void 0, function (instant) { + if (instant === void 0) { instant = false; } + return __generator(this, function (_a) { + context === null || context === void 0 ? void 0 : context.close('blur'); + if (optionIds.includes(input.getValue())) { + input.container.setAttribute('valueId', input.getValue()); + return [2 /*return*/]; + } + input.container.removeAttribute('valueId'); + clearTimeout(showContextTimeout); + showContextTimeout = setTimeout(function () { + var _a; + var firstId; + var value = ((_a = input.getValue()) !== null && _a !== void 0 ? _a : '').toLowerCase(); + var options = value.length == 0 + ? [] + : column.options + .map(function (option) { + var _a, _b; + var text = ((_a = option === null || option === void 0 ? void 0 : option.text) !== null && _a !== void 0 ? _a : '').toLowerCase(); + var id = ((_b = option === null || option === void 0 ? void 0 : option.uniqueIdentifier) !== null && _b !== void 0 ? _b : '').toLowerCase(); + return { text: text, id: id, option: option }; + }) + .filter(function (_a) { + var text = _a.text, id = _a.id; _a.option; + return (text.includes(value) || + id.includes(value)); + }) + .map(function (_a) { + var text = _a.text, id = _a.id, option = _a.option; + var score = 1; + if (text.startsWith(value) || + id.startsWith(value)) + score += 1; + if (text.includes(value) || + id.includes(value)) + score += 1; + if (text == value || id == value) + score += 1; + return { score: score, option: option }; + }) + .sort(function (a, b) { return b.score - a.score; }) + .map(function (_a, index) { + _a.score; var option = _a.option; + if (index == 0) + firstId = option.uniqueIdentifier; + return __assign(__assign({}, option), { click: function () { + input.setValue(option.text); + input.container.setAttribute('valueId', option.uniqueIdentifier); + component.callEvent('valueUpdated', rowId, column.uniqueIdentifier, input.getValue()); + component.callEvent('textSuggestionCompleted'); + } }); + }); + if (options.length == 0) + return; + var bounds = input.container.getBoundingClientRect(); + context = new Component_ContextMenu_1.ComponentContextMenu({ + items: options, + selected: firstId, + x: bounds.x + bounds.width / 2, + y: bounds.y + bounds.height, + }); + }, instant ? 0 : 200); + return [2 /*return*/]; + }); + }); + } + container.appendChild(input.container); + container.appendChild(arrow); + wrapper.appendChild(container); + return wrapper; + }; + return ComponentTable_TextSuggestions; + }(Component_Table__base_1.ComponentTable_Base)); + Component_Table_TextSuggestions.ComponentTable_TextSuggestions = ComponentTable_TextSuggestions; + + return Component_Table_TextSuggestions; + } + + var hasRequiredComponent_Table; + + function requireComponent_Table () { + if (hasRequiredComponent_Table) return Component_Table; + hasRequiredComponent_Table = 1; + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Table, "__esModule", { value: true }); + Component_Table.ComponentTable = void 0; + var CE_1 = CE; + var baseComponent_1 = baseComponent; + var Component_Table_Button_1 = requireComponent_Table_Button(); + var Component_Table_Duration_1 = requireComponent_Table_Duration(); + var Component_Table_Icons_1 = requireComponent_Table_Icons(); + var Component_Table_MaterialSymbol_1 = requireComponent_Table_MaterialSymbol(); + var Component_Table_Number_1 = requireComponent_Table_Number(); + var Component_Table_Select_1 = requireComponent_Table_Select(); + var Component_Table_Text_1 = requireComponent_Table_Text(); + var Component_Table_TextSuggestions_1 = requireComponent_Table_TextSuggestions(); + var Sortable = SortableExports; + var ComponentTable = /** @class */ (function (_super) { + __extends(ComponentTable, _super); + function ComponentTable(options) { + var _a, _b; + var _this_1 = _super.call(this) || this; + _this_1.columns = []; + _this_1.rows = []; + _this_1.hiddenRows = []; + _this_1.columnMap = {}; + _this_1.highlight = function (uniqueIdentifier, style, scrollIntoView, deselectOther) { + var _a, _b, _c; + if (scrollIntoView === void 0) { scrollIntoView = false; } + if (deselectOther === void 0) { deselectOther = true; } + var rows = _this_1.table.querySelectorAll('tr'); + var styles = typeof style == 'string' ? [style] : style; + for (var i = 0; i < rows.length; i++) { + if (uniqueIdentifier != null && + rows[i].getAttribute('uid') == uniqueIdentifier) { + (_a = rows[i].classList).remove.apply(_a, ['selected', 'active', 'outline'].map(function (st) { + return "mux_table-row-".concat(st); + })); + if (style != 'none') { + (_b = rows[i].classList).add.apply(_b, styles.map(function (st) { + return "mux_table-row-".concat(st); + })); + if (scrollIntoView) + rows[i].scrollIntoView({ + block: 'center', + behavior: 'smooth', + }); + } + } + else if (deselectOther) + (_c = rows[i].classList).remove.apply(_c, ['selected', 'active', 'outline'].map(function (st) { + return "mux_table-row-".concat(st); + })); + } + }; + _this_1.container = (0, CE_1.ce)('div', 'mux_table'); + _this_1.columns = (_a = options === null || options === void 0 ? void 0 : options.columns) !== null && _a !== void 0 ? _a : []; + _this_1.table = (0, CE_1.ce)('table'); + var headerRow = (0, CE_1.ce)('tr'); + _this_1.columns.forEach(function (column) { + var cell = (0, CE_1.ce)('th', null, { uid: column.uniqueIdentifier }); + _this_1.columnMap[column.uniqueIdentifier] = column; + if (column.width != undefined) + cell.style.width = column.width; + if (column.noLeftBorder == true) + cell.classList.add('mux_table-noborder'); + if (column.title != undefined) { + var title = (0, CE_1.ce)('div', ['mux_table-text', 'mux_header', 'mux_small'], null, column.title); + cell.appendChild(title); + if (column.headerAlign != undefined) + title.style.textAlign = column.headerAlign; + } + headerRow.appendChild(cell); + }); + _this_1.table.appendChild(headerRow); + _this_1.container.appendChild(_this_1.table); + var _this = _this_1; + var sortable = new Sortable(_this_1.table, { + filter: ((_b = options === null || options === void 0 ? void 0 : options.dragableIgnore) !== null && _b !== void 0 ? _b : []).join(', '), + preventOnFilter: false, + handle: options === null || options === void 0 ? void 0 : options.dragableHandle, + ghostClass: 'mux_table-row-dragging', + onStart: function () { + _this.table.classList.add('mux_table-dragging'); + _this.callEvent('dragStart'); + }, + onEnd: function (evt) { + _this.callEvent('dragEnd'); + _this.table.classList.remove('mux_table-dragging'); + _this.callEvent('orderUpdated', _this.getOrder()); + _this.updateRowBackgrounds(); + }, + }); + if (options.dragable != true) { + sortable.option('disabled', true); + } + if (options.rows != undefined) { + options.rows.forEach(function (row) { return _this_1.addRow(row, true); }); + _this_1.updateRowBackgrounds(); + } + return _this_1; + } + ComponentTable.prototype.getOrder = function () { + var order = []; + var rows = this.table.querySelectorAll('tr'); + for (var i = 1; i < rows.length; i++) + order.push(rows[i].getAttribute('uid')); + return order; + }; + ComponentTable.prototype.clear = function () { + this.rows = []; + var rows = this.table.querySelectorAll('tr'); + if (rows.length > 1) + for (var i = 1; i < rows.length; i++) + rows[i].parentElement.removeChild(rows[i]); + }; + ComponentTable.prototype.addRows = function (rows) { + var _this_1 = this; + rows.forEach(function (row) { return _this_1.addRow(row, true); }); + this.updateRowBackgrounds(); + }; + ComponentTable.prototype.addRow = function (row, silent) { + if (silent === void 0) { silent = false; } + return this._createRow(row, null, silent); + }; + ComponentTable.prototype.insertRow = function (index, row, silent) { + if (silent === void 0) { silent = false; } + if (index < 0 || index > this.rows.length) + return; + return this._createRow(row, index + 1, silent); + }; + ComponentTable.prototype._createRow = function (row, insertIndex, silent) { + var _this_1 = this; + this.rows.push(row.uniqueIdentifier); + var rowElement = (0, CE_1.ce)('tr', 'mux_table-row', { + uid: row.uniqueIdentifier, + }); + if (!this.hiddenRows.includes(row.uniqueIdentifier)) + rowElement.classList.add('mux_table-row-visible'); + rowElement.onclick = function (e) { + _this_1.callEvent('click', row.uniqueIdentifier, e); + }; + if (row.child) + rowElement.classList.add('mux_table-row-child'); + if (row.highlight != undefined) + rowElement.classList.add("mux_table-row-".concat(row.highlight)); + this.columns.forEach(function (columnSettings) { + var cellElement = (0, CE_1.ce)('td', null, { + uid: columnSettings.uniqueIdentifier, + }); + if (columnSettings.width != undefined) + cellElement.style.width = columnSettings.width; + var handler = columnTypes[columnSettings.type]; + var cell = row.cells[columnSettings.uniqueIdentifier]; + if (cell == undefined) + return; + cellElement.appendChild(handler.createElement(cell, row.uniqueIdentifier, columnSettings, _this_1)); + rowElement.appendChild(cellElement); + }); + if (insertIndex != null) { + var rows = this.table.querySelectorAll('tr'); + if (insertIndex >= rows.length) + this.table.appendChild(rowElement); + else + this.table.insertBefore(rowElement, rows[insertIndex]); + } + else + this.table.appendChild(rowElement); + if (!silent) + this.updateRowBackgrounds(); + }; + ComponentTable.prototype.updateCell = function (rowId, columnId, value) { + var row = this.table.querySelector("tr[uid=\"".concat(rowId, "\"]")); + if (row == null) + return; + var cell = row.querySelector("td[uid=\"".concat(columnId, "\"")); + if (cell == null) + return; + var columnSettings = this.columnMap[columnId]; + var handler = columnTypes[columnSettings.type]; + cell.innerHTML = ''; + cell.appendChild(handler.createElement(value, rowId, columnSettings, this)); + }; + ComponentTable.prototype.setDragable = function (dragable) { + this.Sortable.option('disabled', !dragable); + }; + ComponentTable.prototype.updateRowBackgrounds = function () { + var rows = this.table.querySelectorAll('.mux_table-row-visible'); + var counter = 0; + var insideChild = false; + for (var i = 0; i < rows.length; i++) { + var isChild = rows[i].classList.contains('mux_table-row-child'); + if (insideChild != isChild) { + insideChild = isChild; + counter = 0; + } + var odd = (counter + 1) % 2 == 0; + counter++; + if (odd) + rows[i].classList.add('mux_table-row-odd'); + else + rows[i].classList.remove('mux_table-row-odd'); + } + }; + ComponentTable.extendTypes = function (type, handler) { + columnTypes[type] = handler; + }; + return ComponentTable; + }(baseComponent_1.MUXComponent)); + Component_Table.ComponentTable = ComponentTable; + var columnTypes = { + text: new Component_Table_Text_1.ComponentTable_Text(true), + textsuggestions: new Component_Table_TextSuggestions_1.ComponentTable_TextSuggestions(), + number: new Component_Table_Number_1.ComponentTable_Number(), + button: new Component_Table_Button_1.ComponentTable_Button(), + duration: new Component_Table_Duration_1.ComponentTable_Duration(), + icons: new Component_Table_Icons_1.ComponentTable_Icons(), + select: new Component_Table_Select_1.ComponentTable_Select(), + materialSymbol: new Component_Table_MaterialSymbol_1.ComponentTable_MaterialSymbol(), + }; + + return Component_Table; + } + + var Component_Text = {}; + + var __extends = (commonjsGlobal && commonjsGlobal.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(Component_Text, "__esModule", { value: true }); + Component_Text.ComponentText = void 0; + var CE_1 = CE; + var baseComponent_1 = baseComponent; + var ComponentText = /** @class */ (function (_super) { + __extends(ComponentText, _super); + function ComponentText(options) { + var _a; + var _this = _super.call(this) || this; + var size = (_a = options === null || options === void 0 ? void 0 : options.size) !== null && _a !== void 0 ? _a : 'normal'; + _this.container = (0, CE_1.ce)('div', ['mux_text', "mux_".concat(size)], null, options === null || options === void 0 ? void 0 : options.content); + return _this; + } + ComponentText.prototype.update = function (content) { + this.container.innerHTML = content; + }; + return ComponentText; + }(baseComponent_1.MUXComponent)); + Component_Text.ComponentText = ComponentText; + + var hasRequiredMorph_Components; + + function requireMorph_Components () { + if (hasRequiredMorph_Components) return Morph_Components; + hasRequiredMorph_Components = 1; + Object.defineProperty(Morph_Components, "__esModule", { value: true }); + Morph_Components.MorphComponent = void 0; + var Component_Button_1 = Component_Button; + var Component_Cards_1 = Component_Cards; + var Component_ContextMenu_1 = Component_ContextMenu; + var Component_Dialog_1 = requireComponent_Dialog(); + var Component_Group_1 = Component_Group; + var Component_Header_1 = Component_Header; + var Component_IconGrid_1 = Component_IconGrid; + var Component_ImageViewer_1 = requireComponent_ImageViewer(); + var Component_Input_1 = Component_Input; + var Component_List_1 = requireComponent_List(); + var Component_MenuBar_1 = requireComponent_MenuBar(); + var Component_PaletteCheckbox_1 = requireComponent_PaletteCheckbox(); + var Component_PaletteSearch_1 = requireComponent_PaletteSearch(); + var Component_Resizer_1 = Component_Resizer; + var Component_Row_1 = Component_Row; + var Component_Select_1 = requireComponent_Select(); + var Component_Table_1 = requireComponent_Table(); + var Component_Text_1 = Component_Text; + Morph_Components.MorphComponent = { + Header: Component_Header_1.ComponentHeader, + Text: Component_Text_1.ComponentText, + Button: Component_Button_1.ComponentButton, + Input: Component_Input_1.ComponentInput, + Select: Component_Select_1.ComponentSelect, + Group: Component_Group_1.ComponentGroup, + List: Component_List_1.ComponentList, + Cards: Component_Cards_1.ComponentCards, + IconGrid: Component_IconGrid_1.ComponentIconGrid, + Table: Component_Table_1.ComponentTable, + Row: Component_Row_1.ComponentRow, + Dialog: Component_Dialog_1.ComponentDialog, + PaletteSearch: Component_PaletteSearch_1.ComponentPaletteSearch, + PaletteCheckbox: Component_PaletteCheckbox_1.ComponentPaletteCheckbox, + ImageViewer: Component_ImageViewer_1.ComponentImageViewer, + MenuBar: Component_MenuBar_1.ComponentMenuBar, + ContextMenu: Component_ContextMenu_1.ComponentContextMenu, + Resizer: Component_Resizer_1.ComponentResizer, + extend: function (name, component) { + this[name] = component; + }, + }; + + return Morph_Components; + } + + var Morph_Features = {}; + + var Feature_Alert = {}; + + var hasRequiredFeature_Alert; + + function requireFeature_Alert () { + if (hasRequiredFeature_Alert) return Feature_Alert; + hasRequiredFeature_Alert = 1; + Object.defineProperty(Feature_Alert, "__esModule", { value: true }); + Feature_Alert.FeatureAlert = FeatureAlert; + var Index_1 = requireIndex(); + function FeatureAlert(options, callback) { + return new Promise(function (resolve) { + var _a; + var dialog = new Index_1.MorphComponent.Dialog({ + title: (_a = options === null || options === void 0 ? void 0 : options.title) !== null && _a !== void 0 ? _a : 'Alert', + width: 'small', + height: 'auto', + cancelButtonVisible: false, + }); + dialog.content.appendChild((0, Index_1.ce)('div', 'mux_text', null, options.message)); + var res = function () { + if (typeof callback == 'function') + callback(); + resolve(); + }; + dialog.on('close', function () { return res(); }); + dialog.on('ok', function () { return res(); }); + }); + } + + return Feature_Alert; + } + + var Feature_Confirm = {}; + + var hasRequiredFeature_Confirm; + + function requireFeature_Confirm () { + if (hasRequiredFeature_Confirm) return Feature_Confirm; + hasRequiredFeature_Confirm = 1; + Object.defineProperty(Feature_Confirm, "__esModule", { value: true }); + Feature_Confirm.FeatureConfirm = FeatureConfirm; + var Index_1 = requireIndex(); + function FeatureConfirm(options, callback) { + return new Promise(function (resolve) { + var _a; + var dialog = new Index_1.MorphComponent.Dialog({ + title: (_a = options === null || options === void 0 ? void 0 : options.title) !== null && _a !== void 0 ? _a : 'Confirm', + width: 'small', + height: 'auto', + }); + dialog.content.appendChild((0, Index_1.ce)('div', 'mux_text', null, options.message)); + var res = function (state) { + if (typeof callback == 'function') + callback(state); + resolve(state); + }; + dialog.on('close', function () { return res(null); }); + dialog.on('cancel', function () { return res(false); }); + dialog.on('ok', function () { return res(true); }); + }); + } + + return Feature_Confirm; + } + + var Feature_Loader = {}; + + var hasRequiredFeature_Loader; + + function requireFeature_Loader () { + if (hasRequiredFeature_Loader) return Feature_Loader; + hasRequiredFeature_Loader = 1; + Object.defineProperty(Feature_Loader, "__esModule", { value: true }); + Feature_Loader.FeatureLoader = FeatureLoader; + var Index_1 = requireIndex(); + function FeatureLoader(options) { + var _a, _b; + var active = (_a = options === null || options === void 0 ? void 0 : options.active) !== null && _a !== void 0 ? _a : false; + var message = (_b = options === null || options === void 0 ? void 0 : options.message) !== null && _b !== void 0 ? _b : ''; + var progress = options === null || options === void 0 ? void 0 : options.progress; + if (active == true) + showLoader(message, progress); + else + removeExisting(); + } + function showLoader(message, progress) { + var loader = document.querySelector('.mux_loader'); + if (loader == null) { + loader = (0, Index_1.ce)('div', 'mux_loader'); + loader.appendChild((0, Index_1.ce)('span', 'material-symbols-outlined', null, 'circle')); + document.body.appendChild(loader); + } + var existingProgress = loader.querySelector('.mux_loader-progress'); + if (progress == null) { + if (existingProgress != null) + existingProgress.remove(); + } + else { + if (existingProgress != null) { + existingProgress.style.setProperty('--progress', "".concat(progress, "%")); + existingProgress.querySelector('.mux_loader-progress-label').innerText = "".concat(Math.round(progress), "%"); + } + else { + var progressBar = (0, Index_1.ce)('div', 'mux_loader-progress'); + progressBar.style.setProperty('--progress', "".concat(progress, "%")); + var value = (0, Index_1.ce)('div', 'mux_loader-progress-value'); + value.appendChild((0, Index_1.ce)('div', 'mux_loader-progress-label', null, "".concat(Math.round(progress), "%"))); + progressBar.appendChild(value); + loader.appendChild(progressBar); + } + } + var existingText = loader.querySelector('.mux_loader-message'); + if (message.trim().length == 0) { + if (existingText != null) + existingText.remove(); + } + else { + if (existingText != null) + existingText.innerText = message; + else { + if (loader.querySelector('.mux_loader-progress') != null) + loader.insertBefore((0, Index_1.ce)('div', ['mux_text', 'mux_loader-message'], null, message), loader.querySelector('.mux_loader-progress')); + else + loader.appendChild((0, Index_1.ce)('div', ['mux_text', 'mux_loader-message'], null, message)); + } + } + } + function removeExisting() { + var existing = document.querySelector('.mux_loader'); + if (existing != null) + existing.remove(); + } + + return Feature_Loader; + } + + var Feature_Notification = {}; + + var hasRequiredFeature_Notification; + + function requireFeature_Notification () { + if (hasRequiredFeature_Notification) return Feature_Notification; + hasRequiredFeature_Notification = 1; + Object.defineProperty(Feature_Notification, "__esModule", { value: true }); + Feature_Notification.FeatureNotification = FeatureNotification; + var Index_1 = requireIndex(); + var NotificationHandler = new (/** @class */ (function () { + function class_1() { + var _this = this; + window.addEventListener('DOMContentLoaded', function () { return _this.prepare(); }); + } + class_1.prototype.prepare = function () { + this.container = (0, Index_1.ce)('div', 'mux_notifications'); + document.body.appendChild(this.container); + }; + class_1.prototype.append = function (notification) { + var _a, _b, _c; + var element = (0, Index_1.ce)('div', 'mux_notification'); + element.classList.add('mux_notification-' + notification.level); + var icon = (0, Index_1.ce)('span', ['material-symbols-outlined', 'mux_notification-icon'], null, { + info: 'exclamation', + warning: 'exclamation', + error: 'close', + success: 'check', + }[(_a = notification.level) !== null && _a !== void 0 ? _a : 'info']); + if (notification.level == 'info') + icon.style.transform = 'rotate(180deg)'; + element.appendChild(icon); + element.appendChild((0, Index_1.ce)('div', 'mux_text', null, notification.message)); + if ((notification === null || notification === void 0 ? void 0 : notification.action) != null) { + var action = (0, Index_1.ce)('span', ['material-symbols-outlined', 'mux_notification-action'], null, notification.action.materialIcon); + action.onclick = function () { + notification.action.click(); + clearTimeout(hideTimeout); + closeNotification(); + }; + element.appendChild(action); + } + if ((_b = notification === null || notification === void 0 ? void 0 : notification.closeable) !== null && _b !== void 0 ? _b : true) { + element.onclick = function () { + closeNotification(); + }; + } + this.container.prepend(element); + var openNotification = function () { + element.style.opacity = '1'; + element.style.transform = 'translateX(0px)'; + }; + var closeNotification = function () { + clearTimeout(hideTimeout); + element.style.marginTop = "-".concat(element.clientHeight + 6, "px"); + element.style.opacity = '0'; + element.style.transform = 'translateX(100%)'; + element.style.pointerEvents = 'none'; + element.ontransitionend = function () { return element.remove(); }; + }; + setTimeout(function () { return openNotification(); }, 100); + var hideTimeout = setTimeout(function () { return closeNotification(); }, ((_c = notification === null || notification === void 0 ? void 0 : notification.seconds) !== null && _c !== void 0 ? _c : 10) * 1000); + return new NotificationInstance(closeNotification); + }; + return class_1; + }()))(); + var NotificationInstance = /** @class */ (function () { + function NotificationInstance(close) { + this._close = close; + } + NotificationInstance.prototype.close = function () { + this._close(); + }; + return NotificationInstance; + }()); + function FeatureNotification(notification) { + var _a; + if (((_a = notification === null || notification === void 0 ? void 0 : notification.message) !== null && _a !== void 0 ? _a : '').trim().length == 0) + return; + return NotificationHandler.append(notification); + } + + return Feature_Notification; + } + + var Feature_Prompt = {}; + + var hasRequiredFeature_Prompt; + + function requireFeature_Prompt () { + if (hasRequiredFeature_Prompt) return Feature_Prompt; + hasRequiredFeature_Prompt = 1; + Object.defineProperty(Feature_Prompt, "__esModule", { value: true }); + Feature_Prompt.FeaturePrompt = FeaturePrompt; + var Index_1 = requireIndex(); + function FeaturePrompt(options, callback) { + return new Promise(function (resolve) { + var _a, _b, _c, _d; + var dialog = new Index_1.MorphComponent.Dialog({ + title: (_a = options === null || options === void 0 ? void 0 : options.title) !== null && _a !== void 0 ? _a : 'Prompt', + width: 'small', + height: 'auto', + }); + dialog.content.appendChild((0, Index_1.ce)('div', 'mux_text', null, options.message)); + var input = new Index_1.MorphComponent.Input({ + type: (_b = options.type) !== null && _b !== void 0 ? _b : 'text', + value: (_c = options.default) !== null && _c !== void 0 ? _c : '', + placeholder: (_d = options.placeholder) !== null && _d !== void 0 ? _d : '', + border: 'always', + }); + input.container.style.margin = 'var(--mux-edge-offset-tiny) 0px'; + input.container.onfocus = function () { + errorMessage.style.height = '0px'; + }; + dialog.content.appendChild(input.container); + var errorMessage = (0, Index_1.ce)('div', ['mux_text', 'mux_small'], null, 'Value can not be empty!'); + errorMessage.style.height = '0px'; + errorMessage.style.transitionDuration = + 'var(--mux-transition-animation)'; + errorMessage.style.overflow = 'hidden'; + errorMessage.style.color = 'var(--mux-color-red)'; + dialog.content.appendChild(errorMessage); + var res = function (value) { + if (typeof callback == 'function') + callback(value); + resolve(value); + }; + dialog.on('close', function () { return res(null); }); + dialog.on('cancel', function () { return res(null); }); + dialog.on('ok', function (closeEvent) { + if (!options.canBeEmpty && input.getValue().trim() == '') { + errorMessage.style.height = '14px'; + return closeEvent.preventClose(); + } + res(input.getValue()); + }); + input.container.focus(); + }); + } + + return Feature_Prompt; + } + + var hasRequiredMorph_Features; + + function requireMorph_Features () { + if (hasRequiredMorph_Features) return Morph_Features; + hasRequiredMorph_Features = 1; + Object.defineProperty(Morph_Features, "__esModule", { value: true }); + Morph_Features.MorphFeature = void 0; + var Feature_Alert_1 = requireFeature_Alert(); + var Feature_Confirm_1 = requireFeature_Confirm(); + var Feature_Loader_1 = requireFeature_Loader(); + var Feature_Notification_1 = requireFeature_Notification(); + var Feature_Prompt_1 = requireFeature_Prompt(); + Morph_Features.MorphFeature = { + Confirm: Feature_Confirm_1.FeatureConfirm, + Alert: Feature_Alert_1.FeatureAlert, + Prompt: Feature_Prompt_1.FeaturePrompt, + Notification: Feature_Notification_1.FeatureNotification, + Loader: Feature_Loader_1.FeatureLoader, + extend: function (name, component) { + this[name] = component; + }, + }; + + return Morph_Features; + } + + var Morph_Utils = {}; + + var clone$1 = {}; + + Object.defineProperty(clone$1, "__esModule", { value: true }); + clone$1.clone = clone; + function clone(object) { + if (typeof object !== 'object') + return object; + return JSON.parse(JSON.stringify(object !== null && object !== void 0 ? object : {})); + } + + (function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.ce = exports.clone = void 0; + var clone_1 = clone$1; + Object.defineProperty(exports, "clone", { enumerable: true, get: function () { return clone_1.clone; } }); + var CE_1 = CE; + Object.defineProperty(exports, "ce", { enumerable: true, get: function () { return CE_1.ce; } }); + + } (Morph_Utils)); + + var hasRequiredIndex; + + function requireIndex () { + if (hasRequiredIndex) return Index; + hasRequiredIndex = 1; + (function (exports) { + var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); + }) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; + })); + var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); + }; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.MUXComponent = void 0; + var version = require$$0$1.version; + if (window._MorphUXInitialized === undefined) { + console.log('MorphUX Loaded'); + console.log("Version ".concat(version)); + window._MorphUXInitialized = true; + } + __exportStar(requireMorph_Components(), exports); + __exportStar(requireMorph_Features(), exports); + __exportStar(Morph_Keys, exports); + __exportStar(Morph_Utils, exports); + var baseComponent_1 = baseComponent; + Object.defineProperty(exports, "MUXComponent", { enumerable: true, get: function () { return baseComponent_1.MUXComponent; } }); + + } (Index)); + return Index; + } + + var __awaiter$4 = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + var __generator$4 = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + }; + Object.defineProperty(menuBar, "__esModule", { value: true }); + menuBar.MenuBar = void 0; + var morphux_1$5 = requireIndex(); + var Component_MenuBar_1 = requireComponent_MenuBar(); + var MenuBar = /** @class */ (function () { + function MenuBar(main) { + var _this = this; + this.container = document.querySelector('.ntsh_menubar'); + this._Main = main; + this.build(); + setTimeout(function () { + if ((localStorage === null || localStorage === void 0 ? void 0 : localStorage.getItem('serviceMode')) === 'true') + _this.toggleServiceMode(true, true); + }, 10); + } + MenuBar.prototype.build = function () { + var _this = this; + this.menubar = new Component_MenuBar_1.ComponentMenuBar({ + left: [ + { + type: 'image', + url: '/img/morphix_logo_white.png', + }, + { + type: 'normal', + text: 'Dashboard', + materialIcon: 'dashboard', + uniqueIdentifier: 'dashboard', + selected: true, + click: function () { return _this._Main.TabController.showTab('dashboard'); }, + }, + { + type: 'normal', + text: 'Calibration', + uniqueIdentifier: 'calibration', + materialIcon: 'crop_free', + click: function () { + return _this._Main.TabController.showTab('calibration'); + }, + }, + { + type: 'normal', + text: 'Unity Logs', + uniqueIdentifier: 'unitylogs', + materialIcon: 'deployed_code', + click: function () { return _this._Main.TabController.showTab('unitylogs'); }, + }, + { + type: 'normal', + text: 'Camera Logs', + uniqueIdentifier: 'cameralogs', + materialIcon: 'photo_camera', + click: function () { return _this._Main.TabController.showTab('cameralogs'); }, + }, + ], + right: [ + { + type: 'normal', + text: document.body.classList.contains('ntsh_service') + ? 'Exit Service' + : 'Service Mode', + uniqueIdentifier: 'serviceMode', + materialIcon: document.body.classList.contains('ntsh_service') + ? 'logout' + : 'engineering', + click: function () { return __awaiter$4(_this, void 0, void 0, function () { + var mobileMenu; + return __generator$4(this, function (_a) { + mobileMenu = document.querySelector('.mux_mobilemenu'); + mobileMenu === null || mobileMenu === void 0 ? void 0 : mobileMenu.click(); + this.toggleServiceMode(); + return [2 /*return*/]; + }); + }); }, + }, + ], + }); + this.container.innerHTML = ''; + this.container.appendChild(this.menubar.container); + }; + MenuBar.prototype.toggleServiceMode = function (mode, skipPin) { + return __awaiter$4(this, void 0, void 0, function () { + var newMode, servicePin; + return __generator$4(this, function (_a) { + switch (_a.label) { + case 0: + newMode = mode !== null && mode !== void 0 ? mode : !document.body.classList.contains('ntsh_service'); + if (!newMode) return [3 /*break*/, 3]; + if (!(skipPin !== true)) return [3 /*break*/, 2]; + return [4 /*yield*/, morphux_1$5.MorphFeature.Prompt({ + title: 'Service Mode', + message: 'Enter the service PIN:', + type: 'number', + canBeEmpty: false, + placeholder: '****', + })]; + case 1: + servicePin = _a.sent(); + if (servicePin !== '4252') { + morphux_1$5.MorphFeature.Alert({ + title: 'Error', + message: 'Incorrect PIN provided.', + }); + return [2 /*return*/, false]; + } + _a.label = 2; + case 2: + document.body.classList.add('ntsh_service'); + localStorage.setItem('serviceMode', 'true'); + morphux_1$5.MorphFeature.Notification({ + level: 'success', + message: 'Service mode activated.', + }); + return [3 /*break*/, 4]; + case 3: + document.body.classList.remove('ntsh_service'); + this._Main.TabController.showTab('dashboard'); + localStorage.setItem('serviceMode', 'false'); + morphux_1$5.MorphFeature.Notification({ + level: 'success', + message: 'Service mode deactivated.', + }); + _a.label = 4; + case 4: + this.build(); + return [2 /*return*/, true]; + } + }); + }); + }; + return MenuBar; + }()); + menuBar.MenuBar = MenuBar; + + var tabController = {}; + + var __awaiter$3 = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + var __generator$3 = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + }; + Object.defineProperty(tabController, "__esModule", { value: true }); + tabController.TabController = void 0; + var morphux_1$4 = requireIndex(); + var TabController = /** @class */ (function () { + function TabController(main) { + this.container = document.querySelector('.ntsh_tabs'); + this.tabListeners = new Map(); + this._Main = main; + this.registerNavigationListener(); + } + TabController.prototype.registerListener = function (tabId, callback) { + if (this.tabListeners.has(tabId)) + throw new Error("Listener for tab id ".concat(tabId, " has already been registered!")); + this.tabListeners.set(tabId, callback); + callback(this.currentTabId == tabId); + }; + TabController.prototype.showTab = function (tabId) { + return __awaiter$3(this, void 0, void 0, function () { + var confirmed, succeed, tabName; + return __generator$3(this, function (_a) { + switch (_a.label) { + case 0: + if (this.currentTabId == tabId) + return [2 /*return*/]; + if (!(tabId !== 'dashboard' && + !document.body.classList.contains('ntsh_service'))) return [3 /*break*/, 3]; + return [4 /*yield*/, morphux_1$4.MorphFeature.Confirm({ + title: 'Service Mode Required', + message: "You need to be in service mode to access tab ".concat(tabId, ", switch to Service Mode now?"), + })]; + case 1: + confirmed = _a.sent(); + if (!confirmed) + return [2 /*return*/, this.showTab('dashboard')]; + return [4 /*yield*/, this._Main.MenuBar.toggleServiceMode(true)]; + case 2: + succeed = _a.sent(); + if (!succeed) + return [2 /*return*/, this.showTab('dashboard')]; + _a.label = 3; + case 3: + this._Main.MenuBar.menubar.setSelected(tabId); + if (this.tabListeners.has(this.currentTabId)) + this.tabListeners.get(this.currentTabId)(false); + if (this.tabListeners.has(tabId)) + this.tabListeners.get(tabId)(true); + this.currentTabId = tabId; + this.container + .querySelectorAll('.ntsh_tab') + .forEach(function (tab) { return tab.classList.remove('ntsh_tab-visible'); }); + this.container + .querySelector(".ntsh_tab[tabid=\"".concat(tabId, "\"]")) + .classList.add('ntsh_tab-visible'); + window.history.pushState({ tab: tabId }, '', "/".concat(tabId).concat(window.location.search)); + tabName = { + dashboard: 'Dashboard', + calibration: 'Calibration', + cameralogs: 'Camera Logs', + unitylogs: 'Unity Logs', + }[tabId]; + document.title = "NTSH Control - ".concat(tabName); + return [2 /*return*/]; + } + }); + }); + }; + TabController.prototype.registerNavigationListener = function () { + var _this = this; + window.addEventListener('popstate', function (event) { + var state = event.state; + if (state && state.tab) + _this.showTab(state.tab); + }); + var startTab = window.location.pathname + .replace('/', '') + .split('/') + .shift(); + this.showTab(startTab.length > 0 ? startTab : 'dashboard'); + }; + return TabController; + }()); + tabController.TabController = TabController; + + var dashboard_camerarunner = {}; + + var utils = {}; + + (function (exports) { + Object.defineProperty(exports, "__esModule", { value: true }); + exports.createProgress = exports.setProgressState = exports.setStatusState = exports.lerp = void 0; + exports.capitalizeFirstLetter = capitalizeFirstLetter; + exports.formatUptime = formatUptime; + exports.delay = delay; + var morphux_1 = requireIndex(); + /** + * A linear interpolation helper function. + * @param a The start value. + * @param b The end value. + * @param t The interpolation factor (0 to 1). + * @returns The interpolated value. + */ + var lerp = function (a, b, t) { + return a + (b - a) * t; + }; + exports.lerp = lerp; + var setStatusState = function (statusElement, state) { + statusElement.classList.remove('ntsh_status-green', 'ntsh_status-yellow', 'ntsh_status-red', 'ntsh_status-gray'); + statusElement.classList.add("ntsh_status-".concat(state)); + }; + exports.setStatusState = setStatusState; + var setProgressState = function (progressElement, percentage) { + var value = progressElement.querySelector('.ntsh_progress-value'); + value.style.width = "".concat(percentage * 100, "%"); + var label = progressElement.querySelector('.ntsh_progress-label'); + label.innerText = "".concat(Math.round(percentage * 100), "%"); + }; + exports.setProgressState = setProgressState; + var createProgress = function (value) { + var progress = (0, morphux_1.ce)('div', 'ntsh_progress'); + progress.appendChild((0, morphux_1.ce)('div', 'ntsh_progress-value')); + progress.appendChild((0, morphux_1.ce)('div', 'ntsh_progress-label')); + (0, exports.setProgressState)(progress, value); + return progress; + }; + exports.createProgress = createProgress; + function capitalizeFirstLetter(string) { + return string.charAt(0).toUpperCase() + string.slice(1); + } + function formatUptime(seconds) { + if (seconds < 0) + return ''; + var days = Math.floor(seconds / 86400); + seconds %= 86400; + var hours = Math.floor(seconds / 3600); + seconds %= 3600; + var minutes = Math.floor(seconds / 60); + seconds = Math.floor(seconds % 60); + var parts = []; + if (days > 0) + parts.push("".concat(days, "d")); + parts.push("".concat(hours.toString().padStart(2, '0'), ":").concat(minutes + .toString() + .padStart(2, '0'), ":").concat(seconds.toString().padStart(2, '0'))); + return parts.join(' '); + } + function delay(duration) { + return new Promise(function (resolve) { return setTimeout(resolve, duration); }); + } + + } (utils)); + + var __awaiter$2 = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + var __generator$2 = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + }; + Object.defineProperty(dashboard_camerarunner, "__esModule", { value: true }); + dashboard_camerarunner.DashboardCameraRunner = void 0; + var morphux_1$3 = requireIndex(); + var utils_1$1 = utils; + var DashboardCameraRunner = /** @class */ (function () { + function DashboardCameraRunner(Main) { + this.container = document.querySelector('.ntsh_dashboard-camerarunner'); + this.connectionStatus = this.container.querySelector('.ntsh_dashboard-camerarunner-connectionstatus'); + this.connectionInfo = this.container.querySelector('.ntsh_dashboard-camerarunner-connectioninfo'); + this.rebootButton = this.container.querySelector('.ntsh_dashboard-camerarunner-reboot'); + this.processStatus = this.container.querySelector('.ntsh_dashboard-camerarunner-processstatus'); + this.processInfo = this.container.querySelector('.ntsh_dashboard-camerarunner-processinfo'); + this.restartButton = this.container.querySelector('.ntsh_dashboard-camerarunner-restart'); + this.uptimeInfo = this.container.querySelector('.ntsh_dashboard-camerarunner-uptime'); + this.errorContainer = this.container.querySelector('.ntsh_dashboard-camerarunner-error'); + this.errorText = this.container.querySelector('.ntsh_dashboard-camerarunner-errortext'); + this._Main = Main; + this.registerListeners(); + } + DashboardCameraRunner.prototype.updateState = function (state) { + var _a, _b, _c, _d, _e; + // ----------- Connection ----------- + (0, utils_1$1.setStatusState)(this.connectionStatus, { + CONNECTING: 'yellow', + CONNECTED: 'green', + DISCONNECTED: 'red', + FAILED: 'red', + }[state.state]); + this.connectionInfo.innerText = (_a = state.message) !== null && _a !== void 0 ? _a : ''; + // ----------- Process ----------- + if (state.state != 'CONNECTED') { + state.processStatus.state = 'STOPPED'; + state.processStatus.message = 'Not connected'; + state.processStatus.startTime = -1; + this.restartButton.style.display = 'none'; + this.rebootButton.style.display = 'none'; + } + else { + this.rebootButton.style.display = 'flex'; + if (state.processStatus.state == 'RUNNING') + this.restartButton.style.display = 'flex'; + else + this.restartButton.style.display = 'none'; + } + (0, utils_1$1.setStatusState)(this.processStatus, { + RUNNING: 'green', + STOPPED: 'gray', + STARTING: 'yellow', + PROBLEM: 'red', + }[state.processStatus.state]); + this.processInfo.innerText = (_b = state.processStatus.message) !== null && _b !== void 0 ? _b : ''; + // ----------- Uptime ----------- + var uptimeSeconds = state.processStatus.startTime == -1 + ? -1 + : (Date.now() - state.processStatus.startTime) / 1000; + this.uptimeInfo.innerText = (0, utils_1$1.formatUptime)(uptimeSeconds); + // ----------- Error ----------- + var errors = []; + if (((_c = state === null || state === void 0 ? void 0 : state.error) !== null && _c !== void 0 ? _c : '').trim().length > 0) + errors.push(state.error); + if (((_e = (_d = state === null || state === void 0 ? void 0 : state.processStatus) === null || _d === void 0 ? void 0 : _d.error) !== null && _e !== void 0 ? _e : '').trim().length > 0) + errors.push(state.processStatus.error); + if (errors.length > 0) { + this.errorText.innerText = errors.join('\n'); + this.errorContainer.style.display = 'block'; + } + else { + this.errorContainer.style.display = 'none'; + this.errorText.innerText = ''; + } + this._Main.Logs.setCameraLogs(state.processStatus.output.current); + }; + DashboardCameraRunner.prototype.registerListeners = function () { + var _this = this; + this._Main.socket.on('cameraRunnerState', function (state) { + _this.updateState(state); + }); + this.restartButton.addEventListener('click', function () { return __awaiter$2(_this, void 0, void 0, function () { + return __generator$2(this, function (_a) { + this.executeCommand('restart', 'Are you sure you want to restart the Camera Runner process?'); + return [2 /*return*/]; + }); + }); }); + this.rebootButton.addEventListener('click', function () { return __awaiter$2(_this, void 0, void 0, function () { + return __generator$2(this, function (_a) { + this.executeCommand('reboot', 'Are you sure you want to reboot the Camera Runner machine?'); + return [2 /*return*/]; + }); + }); }); + }; + DashboardCameraRunner.prototype.executeCommand = function (command, message) { + return __awaiter$2(this, void 0, void 0, function () { + var confirmed; + return __generator$2(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, morphux_1$3.MorphFeature.Confirm({ + title: 'Are you sure?', + message: message, + })]; + case 1: + confirmed = _a.sent(); + if (!confirmed) + return [2 /*return*/]; + morphux_1$3.MorphFeature.Loader({ + active: true, + message: "Requesting Camera Runner ".concat(command, "..."), + }); + this._Main.socket.emit('cameraRunner', command, function (response) { + morphux_1$3.MorphFeature.Loader({ active: false }); + if (!response.succeed) + return morphux_1$3.MorphFeature.Alert({ + title: 'Error', + message: response.message, + }); + morphux_1$3.MorphFeature.Notification({ + level: 'success', + message: "Camera Runner is ".concat(command, "ing..."), + }); + }); + return [2 /*return*/]; + } + }); + }); + }; + return DashboardCameraRunner; + }()); + dashboard_camerarunner.DashboardCameraRunner = DashboardCameraRunner; + + var logsHandler = {}; + + var __makeTemplateObject = (undefined && undefined.__makeTemplateObject) || function (cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; + }; + var PacketKind; + (function (PacketKind) { + PacketKind[PacketKind["EOS"] = 0] = "EOS"; + PacketKind[PacketKind["Text"] = 1] = "Text"; + PacketKind[PacketKind["Incomplete"] = 2] = "Incomplete"; + PacketKind[PacketKind["ESC"] = 3] = "ESC"; + PacketKind[PacketKind["Unknown"] = 4] = "Unknown"; + PacketKind[PacketKind["SGR"] = 5] = "SGR"; + PacketKind[PacketKind["OSCURL"] = 6] = "OSCURL"; + })(PacketKind || (PacketKind = {})); + class AnsiUp { + constructor() { + this.VERSION = "6.0.6"; + this.setup_palettes(); + this._use_classes = false; + this.bold = false; + this.faint = false; + this.italic = false; + this.underline = false; + this.fg = this.bg = null; + this._buffer = ''; + this._url_allowlist = { 'http': 1, 'https': 1 }; + this._escape_html = true; + this.boldStyle = 'font-weight:bold'; + this.faintStyle = 'opacity:0.7'; + this.italicStyle = 'font-style:italic'; + this.underlineStyle = 'text-decoration:underline'; + } + set use_classes(arg) { + this._use_classes = arg; + } + get use_classes() { + return this._use_classes; + } + set url_allowlist(arg) { + this._url_allowlist = arg; + } + get url_allowlist() { + return this._url_allowlist; + } + set escape_html(arg) { + this._escape_html = arg; + } + get escape_html() { + return this._escape_html; + } + set boldStyle(arg) { this._boldStyle = arg; } + get boldStyle() { return this._boldStyle; } + set faintStyle(arg) { this._faintStyle = arg; } + get faintStyle() { return this._faintStyle; } + set italicStyle(arg) { this._italicStyle = arg; } + get italicStyle() { return this._italicStyle; } + set underlineStyle(arg) { this._underlineStyle = arg; } + get underlineStyle() { return this._underlineStyle; } + setup_palettes() { + this.ansi_colors = + [ + [ + { rgb: [0, 0, 0], class_name: "ansi-black" }, + { rgb: [187, 0, 0], class_name: "ansi-red" }, + { rgb: [0, 187, 0], class_name: "ansi-green" }, + { rgb: [187, 187, 0], class_name: "ansi-yellow" }, + { rgb: [0, 0, 187], class_name: "ansi-blue" }, + { rgb: [187, 0, 187], class_name: "ansi-magenta" }, + { rgb: [0, 187, 187], class_name: "ansi-cyan" }, + { rgb: [255, 255, 255], class_name: "ansi-white" } + ], + [ + { rgb: [85, 85, 85], class_name: "ansi-bright-black" }, + { rgb: [255, 85, 85], class_name: "ansi-bright-red" }, + { rgb: [0, 255, 0], class_name: "ansi-bright-green" }, + { rgb: [255, 255, 85], class_name: "ansi-bright-yellow" }, + { rgb: [85, 85, 255], class_name: "ansi-bright-blue" }, + { rgb: [255, 85, 255], class_name: "ansi-bright-magenta" }, + { rgb: [85, 255, 255], class_name: "ansi-bright-cyan" }, + { rgb: [255, 255, 255], class_name: "ansi-bright-white" } + ] + ]; + this.palette_256 = []; + this.ansi_colors.forEach(palette => { + palette.forEach(rec => { + this.palette_256.push(rec); + }); + }); + let levels = [0, 95, 135, 175, 215, 255]; + for (let r = 0; r < 6; ++r) { + for (let g = 0; g < 6; ++g) { + for (let b = 0; b < 6; ++b) { + let col = { rgb: [levels[r], levels[g], levels[b]], class_name: 'truecolor' }; + this.palette_256.push(col); + } + } + } + let grey_level = 8; + for (let i = 0; i < 24; ++i, grey_level += 10) { + let gry = { rgb: [grey_level, grey_level, grey_level], class_name: 'truecolor' }; + this.palette_256.push(gry); + } + } + escape_txt_for_html(txt) { + if (!this._escape_html) + return txt; + return txt.replace(/[&<>"']/gm, (str) => { + if (str === "&") + return "&"; + if (str === "<") + return "<"; + if (str === ">") + return ">"; + if (str === "\"") + return """; + if (str === "'") + return "'"; + }); + } + append_buffer(txt) { + var str = this._buffer + txt; + this._buffer = str; + } + get_next_packet() { + var pkt = { + kind: PacketKind.EOS, + text: '', + url: '' + }; + var len = this._buffer.length; + if (len == 0) + return pkt; + var pos = this._buffer.indexOf("\x1B"); + if (pos == -1) { + pkt.kind = PacketKind.Text; + pkt.text = this._buffer; + this._buffer = ''; + return pkt; + } + if (pos > 0) { + pkt.kind = PacketKind.Text; + pkt.text = this._buffer.slice(0, pos); + this._buffer = this._buffer.slice(pos); + return pkt; + } + if (pos == 0) { + if (len < 3) { + pkt.kind = PacketKind.Incomplete; + return pkt; + } + var next_char = this._buffer.charAt(1); + if ((next_char != '[') && (next_char != ']') && (next_char != '(')) { + pkt.kind = PacketKind.ESC; + pkt.text = this._buffer.slice(0, 1); + this._buffer = this._buffer.slice(1); + return pkt; + } + if (next_char == '[') { + if (!this._csi_regex) { + this._csi_regex = rgx(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n ^ # beginning of line\n #\n # First attempt\n (?: # legal sequence\n \u001B[ # CSI\n ([<-?]?) # private-mode char\n ([d;]*) # any digits or semicolons\n ([ -/]? # an intermediate modifier\n [@-~]) # the command\n )\n | # alternate (second attempt)\n (?: # illegal sequence\n \u001B[ # CSI\n [ -~]* # anything legal\n ([\0-\u001F:]) # anything illegal\n )\n "], ["\n ^ # beginning of line\n #\n # First attempt\n (?: # legal sequence\n \\x1b\\[ # CSI\n ([\\x3c-\\x3f]?) # private-mode char\n ([\\d;]*) # any digits or semicolons\n ([\\x20-\\x2f]? # an intermediate modifier\n [\\x40-\\x7e]) # the command\n )\n | # alternate (second attempt)\n (?: # illegal sequence\n \\x1b\\[ # CSI\n [\\x20-\\x7e]* # anything legal\n ([\\x00-\\x1f:]) # anything illegal\n )\n "]))); + } + let match = this._buffer.match(this._csi_regex); + if (match === null) { + pkt.kind = PacketKind.Incomplete; + return pkt; + } + if (match[4]) { + pkt.kind = PacketKind.ESC; + pkt.text = this._buffer.slice(0, 1); + this._buffer = this._buffer.slice(1); + return pkt; + } + if ((match[1] != '') || (match[3] != 'm')) + pkt.kind = PacketKind.Unknown; + else + pkt.kind = PacketKind.SGR; + pkt.text = match[2]; + var rpos = match[0].length; + this._buffer = this._buffer.slice(rpos); + return pkt; + } + else if (next_char == ']') { + if (len < 4) { + pkt.kind = PacketKind.Incomplete; + return pkt; + } + if ((this._buffer.charAt(2) != '8') + || (this._buffer.charAt(3) != ';')) { + pkt.kind = PacketKind.ESC; + pkt.text = this._buffer.slice(0, 1); + this._buffer = this._buffer.slice(1); + return pkt; + } + if (!this._osc_st) { + this._osc_st = rgxG(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n (?: # legal sequence\n (\u001B\\) # ESC | # alternate\n (\u0007) # BEL (what xterm did)\n )\n | # alternate (second attempt)\n ( # illegal sequence\n [\0-\u0006] # anything illegal\n | # alternate\n [\b-\u001A] # anything illegal\n | # alternate\n [\u001C-\u001F] # anything illegal\n )\n "], ["\n (?: # legal sequence\n (\\x1b\\\\) # ESC \\\n | # alternate\n (\\x07) # BEL (what xterm did)\n )\n | # alternate (second attempt)\n ( # illegal sequence\n [\\x00-\\x06] # anything illegal\n | # alternate\n [\\x08-\\x1a] # anything illegal\n | # alternate\n [\\x1c-\\x1f] # anything illegal\n )\n "]))); + } + this._osc_st.lastIndex = 0; + { + let match = this._osc_st.exec(this._buffer); + if (match === null) { + pkt.kind = PacketKind.Incomplete; + return pkt; + } + if (match[3]) { + pkt.kind = PacketKind.ESC; + pkt.text = this._buffer.slice(0, 1); + this._buffer = this._buffer.slice(1); + return pkt; + } + } + { + let match = this._osc_st.exec(this._buffer); + if (match === null) { + pkt.kind = PacketKind.Incomplete; + return pkt; + } + if (match[3]) { + pkt.kind = PacketKind.ESC; + pkt.text = this._buffer.slice(0, 1); + this._buffer = this._buffer.slice(1); + return pkt; + } + } + if (!this._osc_regex) { + this._osc_regex = rgx(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n ^ # beginning of line\n #\n \u001B]8; # OSC Hyperlink\n [ -:<-~]* # params (excluding ;)\n ; # end of params\n ([!-~]{0,512}) # URL capture\n (?: # ST\n (?:\u001B\\) # ESC | # alternate\n (?:\u0007) # BEL (what xterm did)\n )\n ([ -~]+) # TEXT capture\n \u001B]8;; # OSC Hyperlink End\n (?: # ST\n (?:\u001B\\) # ESC | # alternate\n (?:\u0007) # BEL (what xterm did)\n )\n "], ["\n ^ # beginning of line\n #\n \\x1b\\]8; # OSC Hyperlink\n [\\x20-\\x3a\\x3c-\\x7e]* # params (excluding ;)\n ; # end of params\n ([\\x21-\\x7e]{0,512}) # URL capture\n (?: # ST\n (?:\\x1b\\\\) # ESC \\\n | # alternate\n (?:\\x07) # BEL (what xterm did)\n )\n ([\\x20-\\x7e]+) # TEXT capture\n \\x1b\\]8;; # OSC Hyperlink End\n (?: # ST\n (?:\\x1b\\\\) # ESC \\\n | # alternate\n (?:\\x07) # BEL (what xterm did)\n )\n "]))); + } + let match = this._buffer.match(this._osc_regex); + if (match === null) { + pkt.kind = PacketKind.ESC; + pkt.text = this._buffer.slice(0, 1); + this._buffer = this._buffer.slice(1); + return pkt; + } + pkt.kind = PacketKind.OSCURL; + pkt.url = match[1]; + pkt.text = match[2]; + var rpos = match[0].length; + this._buffer = this._buffer.slice(rpos); + return pkt; + } + else if (next_char == '(') { + pkt.kind = PacketKind.Unknown; + this._buffer = this._buffer.slice(3); + return pkt; + } + } + } + ansi_to_html(txt) { + this.append_buffer(txt); + var blocks = []; + while (true) { + var packet = this.get_next_packet(); + if ((packet.kind == PacketKind.EOS) + || (packet.kind == PacketKind.Incomplete)) + break; + if ((packet.kind == PacketKind.ESC) + || (packet.kind == PacketKind.Unknown)) + continue; + if (packet.kind == PacketKind.Text) + blocks.push(this.transform_to_html(this.with_state(packet))); + else if (packet.kind == PacketKind.SGR) + this.process_ansi(packet); + else if (packet.kind == PacketKind.OSCURL) + blocks.push(this.process_hyperlink(packet)); + } + return blocks.join(""); + } + with_state(pkt) { + return { bold: this.bold, faint: this.faint, italic: this.italic, underline: this.underline, fg: this.fg, bg: this.bg, text: pkt.text }; + } + process_ansi(pkt) { + let sgr_cmds = pkt.text.split(';'); + while (sgr_cmds.length > 0) { + let sgr_cmd_str = sgr_cmds.shift(); + let num = parseInt(sgr_cmd_str, 10); + if (isNaN(num) || num === 0) { + this.fg = null; + this.bg = null; + this.bold = false; + this.faint = false; + this.italic = false; + this.underline = false; + } + else if (num === 1) { + this.bold = true; + } + else if (num === 2) { + this.faint = true; + } + else if (num === 3) { + this.italic = true; + } + else if (num === 4) { + this.underline = true; + } + else if (num === 21) { + this.bold = false; + } + else if (num === 22) { + this.faint = false; + this.bold = false; + } + else if (num === 23) { + this.italic = false; + } + else if (num === 24) { + this.underline = false; + } + else if (num === 39) { + this.fg = null; + } + else if (num === 49) { + this.bg = null; + } + else if ((num >= 30) && (num < 38)) { + this.fg = this.ansi_colors[0][(num - 30)]; + } + else if ((num >= 40) && (num < 48)) { + this.bg = this.ansi_colors[0][(num - 40)]; + } + else if ((num >= 90) && (num < 98)) { + this.fg = this.ansi_colors[1][(num - 90)]; + } + else if ((num >= 100) && (num < 108)) { + this.bg = this.ansi_colors[1][(num - 100)]; + } + else if (num === 38 || num === 48) { + if (sgr_cmds.length > 0) { + let is_foreground = (num === 38); + let mode_cmd = sgr_cmds.shift(); + if (mode_cmd === '5' && sgr_cmds.length > 0) { + let palette_index = parseInt(sgr_cmds.shift(), 10); + if (palette_index >= 0 && palette_index <= 255) { + if (is_foreground) + this.fg = this.palette_256[palette_index]; + else + this.bg = this.palette_256[palette_index]; + } + } + if (mode_cmd === '2' && sgr_cmds.length > 2) { + let r = parseInt(sgr_cmds.shift(), 10); + let g = parseInt(sgr_cmds.shift(), 10); + let b = parseInt(sgr_cmds.shift(), 10); + if ((r >= 0 && r <= 255) && (g >= 0 && g <= 255) && (b >= 0 && b <= 255)) { + let c = { rgb: [r, g, b], class_name: 'truecolor' }; + if (is_foreground) + this.fg = c; + else + this.bg = c; + } + } + } + } + } + } + transform_to_html(fragment) { + let txt = fragment.text; + if (txt.length === 0) + return txt; + txt = this.escape_txt_for_html(txt); + if (!fragment.bold && !fragment.italic && !fragment.faint && !fragment.underline && fragment.fg === null && fragment.bg === null) + return txt; + let styles = []; + let classes = []; + let fg = fragment.fg; + let bg = fragment.bg; + if (fragment.bold) + styles.push(this._boldStyle); + if (fragment.faint) + styles.push(this._faintStyle); + if (fragment.italic) + styles.push(this._italicStyle); + if (fragment.underline) + styles.push(this._underlineStyle); + if (!this._use_classes) { + if (fg) + styles.push(`color:rgb(${fg.rgb.join(',')})`); + if (bg) + styles.push(`background-color:rgb(${bg.rgb})`); + } + else { + if (fg) { + if (fg.class_name !== 'truecolor') { + classes.push(`${fg.class_name}-fg`); + } + else { + styles.push(`color:rgb(${fg.rgb.join(',')})`); + } + } + if (bg) { + if (bg.class_name !== 'truecolor') { + classes.push(`${bg.class_name}-bg`); + } + else { + styles.push(`background-color:rgb(${bg.rgb.join(',')})`); + } + } + } + let class_string = ''; + let style_string = ''; + if (classes.length) + class_string = ` class="${classes.join(' ')}"`; + if (styles.length) + style_string = ` style="${styles.join(';')}"`; + return `${txt}`; + } + ; + process_hyperlink(pkt) { + let parts = pkt.url.split(':'); + if (parts.length < 1) + return ''; + if (!this._url_allowlist[parts[0]]) + return ''; + let result = `${this.escape_txt_for_html(pkt.text)}`; + return result; + } + } + function rgx(tmplObj, ...subst) { + let regexText = tmplObj.raw[0]; + let wsrgx = /^\s+|\s+\n|\s*#[\s\S]*?\n|\n/gm; + let txt2 = regexText.replace(wsrgx, ''); + return new RegExp(txt2); + } + function rgxG(tmplObj, ...subst) { + let regexText = tmplObj.raw[0]; + let wsrgx = /^\s+|\s+\n|\s*#[\s\S]*?\n|\n/gm; + let txt2 = regexText.replace(wsrgx, ''); + return new RegExp(txt2, 'g'); + } + var templateObject_1, templateObject_2, templateObject_3; + + var ansi_up = /*#__PURE__*/Object.freeze({ + __proto__: null, + AnsiUp: AnsiUp + }); + + var require$$1 = /*@__PURE__*/getAugmentedNamespace(ansi_up); + + var __awaiter$1 = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + var __generator$1 = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + }; + Object.defineProperty(logsHandler, "__esModule", { value: true }); + logsHandler.LogsHandler = void 0; + var morphux_1$2 = requireIndex(); + var ansi_up_1 = require$$1; + var LogsHandler = /** @class */ (function () { + function LogsHandler(Main) { + this.ansiUp = new ansi_up_1.AnsiUp(); + this.cameraLogsContainer = document.querySelector('.ntsh_tab[tabid="cameralogs"] .ntsh_logs'); + this.unityLogsContainer = document.querySelector('.ntsh_tab[tabid="unitylogs"] .ntsh_logs'); + this.firstTime = new Set(); + this._Main = Main; + this.registerListeners(); + } + LogsHandler.prototype.setCameraLogs = function (logs) { + this.applyLogs(this.cameraLogsContainer, logs); + }; + LogsHandler.prototype.setUnityLogs = function (logs) { + this.applyLogs(this.unityLogsContainer, logs); + }; + LogsHandler.prototype.applyLogs = function (container, logs) { + return __awaiter$1(this, void 0, void 0, function () { + var logCount, isAtBottom; + var _this = this; + return __generator$1(this, function (_a) { + logCount = container.querySelectorAll('.ntsh_log.ntsh_log-normal').length; + if (logCount === logs.length) + return [2 /*return*/]; + if (logCount > logs.length) + logCount = 0; + isAtBottom = !this.firstTime.has(container) || + container.scrollTop + container.clientHeight >= + container.scrollHeight; + container.innerHTML = ''; + logs.forEach(function (log, i) { + var element = (0, morphux_1$2.ce)('div', ['ntsh_log', 'ntsh_log-normal'], null, null, _this.ansiUp.ansi_to_html(log)); + if (_this.firstTime.has(container) && i > logCount - 1) { + element.style.display = 'none'; + var spawnDelay = (i - logCount) * 10; + setTimeout(function () { + element.style.display = 'block'; + if (isAtBottom) + container.scrollTop = container.scrollHeight; + }, spawnDelay); + } + container.appendChild(element); + if (isAtBottom) + container.scrollTop = container.scrollHeight; + }); + if (!this.firstTime.has(container)) { + container.scrollTop = container.scrollHeight; + this.firstTime.add(container); + } + return [2 /*return*/]; + }); + }); + }; + LogsHandler.prototype.registerListeners = function () { + var _this = this; + this._Main.TabController.registerListener('cameralogs', function (visible) { + if (!visible) + return; + setTimeout(function () { + _this.cameraLogsContainer.scrollTop = + _this.cameraLogsContainer.scrollHeight; + }, 10); + }); + this._Main.TabController.registerListener('unitylogs', function (visible) { + if (!visible) + return; + setTimeout(function () { + _this.unityLogsContainer.scrollTop = + _this.unityLogsContainer.scrollHeight; + }, 10); + }); + }; + return LogsHandler; + }()); + logsHandler.LogsHandler = LogsHandler; + + var calibration = {}; + + Object.defineProperty(calibration, "__esModule", { value: true }); + calibration.Calibration = void 0; + var Calibration = /** @class */ (function () { + function Calibration(Main) { + this.container = document.querySelector('.ntsh_calibration'); + this.image = this.container.querySelector('img'); + this.fullscreenButton = this.container.querySelector('.ntsh_calibration-fullscreen'); + this._Main = Main; + this.registerListeners(); + } + Calibration.prototype.startFetchClock = function () { + var _this = this; + this.image.src = "/calibrationImage?t=".concat(Date.now()); + this.fetchClock = setInterval(function () { + _this.image.src = "/calibrationImage?t=".concat(Date.now()); + }, 1000); + }; + Calibration.prototype.stopFetchClock = function () { + clearInterval(this.fetchClock); + }; + Calibration.prototype.registerListeners = function () { + var _this = this; + this._Main.TabController.registerListener('calibration', function (visible) { + if (visible) + _this.startFetchClock(); + else + _this.stopFetchClock(); + }); + this.fullscreenButton.addEventListener('click', function () { + _this.image.requestFullscreen(); + }); + }; + return Calibration; + }()); + calibration.Calibration = Calibration; + + var dashboard_unity = {}; + + var __awaiter = (commonjsGlobal && commonjsGlobal.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + }; + var __generator = (commonjsGlobal && commonjsGlobal.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + }; + Object.defineProperty(dashboard_unity, "__esModule", { value: true }); + dashboard_unity.DashboardUnity = void 0; + var morphux_1$1 = requireIndex(); + var utils_1 = utils; + var DashboardUnity = /** @class */ (function () { + function DashboardUnity(Main) { + this.container = document.querySelector('.ntsh_dashboard-unity'); + this.processStatus = document.querySelector('.ntsh_dashboard-unity-processstatus'); + this.processInfo = document.querySelector('.ntsh_dashboard-unity-processinfo'); + this.restartButton = document.querySelector('.ntsh_dashboard-unity-restart'); + this.uptimeInfo = document.querySelector('.ntsh_dashboard-unity-uptime'); + this.webSocketStatus = document.querySelector('.ntsh_dashboard-unity-websocketstatus'); + this.webSocketInfo = document.querySelector('.ntsh_dashboard-unity-websocketinfo'); + this.zedStreamStatus = document.querySelector('.ntsh_dashboard-unity-zedstreamstatus'); + this.zedStreamInfo = document.querySelector('.ntsh_dashboard-unity-zedstreaminfo'); + this.zedStreamFps = document.querySelector('.ntsh_dashboard-unity-zedstreamfps'); + this.zedStreamPath = document.querySelector('.ntsh_dashboard-unity-zedstreampath'); + this.timelineWatching = document.querySelector('.ntsh_dashboard-unity-timeline-watching'); + this.timelineStanding = document.querySelector('.ntsh_dashboard-unity-timeline-standing'); + this.timelineProgress = document.querySelector('.ntsh_dashboard-unity-timeline-progress'); + this.parametersTable = document.querySelector('.ntsh_dashboard-unity-parameters'); + this.errorContainer = document.querySelector('.ntsh_dashboard-unity-error'); + this.errorText = document.querySelector('.ntsh_dashboard-unity-errortext'); + this._Main = Main; + this.registerListeners(); + } + DashboardUnity.prototype.updateRunnerState = function (state) { + var _a, _b; + // ----------- Process ----------- + if (state.state != 'RUNNING') { + state.startTime = -1; + this.restartButton.style.display = 'none'; + } + else { + this.restartButton.style.display = 'flex'; + } + (0, utils_1.setStatusState)(this.processStatus, { + RUNNING: 'green', + STOPPED: 'red', + STARTING: 'yellow', + PROBLEM: 'red', + }[state.state]); + this.processInfo.innerText = (_a = state.message) !== null && _a !== void 0 ? _a : ''; + // ----------- Uptime ----------- + var uptimeSeconds = state.startTime == -1 ? -1 : (Date.now() - state.startTime) / 1000; + this.uptimeInfo.innerText = (0, utils_1.formatUptime)(uptimeSeconds); + // ----------- Error ----------- + if (((_b = state === null || state === void 0 ? void 0 : state.error) !== null && _b !== void 0 ? _b : '').trim().length > 0) + this.runnerError = state.error; + else + this.runnerError = null; + this.updateError(); + this._Main.Logs.setUnityLogs(state.output.current); + }; + DashboardUnity.prototype.updateWebSocketState = function (state) { + var _a, _b; + // ----------- WebSocket ----------- + (0, utils_1.setStatusState)(this.webSocketStatus, { + CONNECTING: 'yellow', + CONNECTED: 'green', + DISCONNECTED: 'gray', + FAILED: 'red', + }[state.state]); + this.webSocketInfo.innerText = (_a = state.message) !== null && _a !== void 0 ? _a : ''; + // ----------- ZED Stream ----------- + (0, utils_1.setStatusState)(this.zedStreamStatus, state.parameters.zedReady ? 'green' : 'red'); + this.zedStreamInfo.innerText = state.parameters.zedReady + ? "Connected to ".concat(state.parameters.zedPath) + : 'Not ready'; + this.zedStreamFps.innerText = + state.parameters.zedFPS == '-' ? '' : state.parameters.zedFPS; + // ----------- Timeline ----------- + this.timelineWatching.innerText = state.parameters.timelineWatching + ? 'Yes' + : 'No'; + this.timelineStanding.innerText = state.parameters.timelineStanding + ? 'Yes' + : 'No'; + (0, utils_1.setProgressState)(this.timelineProgress, state.parameters.timelineProgress); + // ----------- Parameters ----------- + this.renderParameterSliders(state.parameters.parameters); + // ----------- Error ----------- + if (((_b = state === null || state === void 0 ? void 0 : state.error) !== null && _b !== void 0 ? _b : '').trim().length > 0) + this.webSocketError = state.error; + else + this.webSocketError = null; + this.updateError(); + }; + DashboardUnity.prototype.renderParameterSliders = function (parameters) { + var _this = this; + if (parameters.length === 0) + return; + var existingSliders = this.parametersTable.querySelectorAll('.ntsh_dashboard-unity-parameter-row'); + if (existingSliders.length !== parameters.length) { + this.parametersTable.innerHTML = ''; + parameters.forEach(function (param) { + var row = (0, morphux_1$1.ce)('tr', 'ntsh_dashboard-unity-parameter-row'); + var nameCell = (0, morphux_1$1.ce)('td'); + nameCell.appendChild((0, morphux_1$1.ce)('div', 'mux_text', null, param.sliderName)); + row.appendChild(nameCell); + var progressCell = (0, morphux_1$1.ce)('td', 'no-service'); + progressCell.appendChild((0, utils_1.createProgress)(param.outputValue)); + row.appendChild(progressCell); + var sliderCell = (0, morphux_1$1.ce)('td', 'only-service'); + var sliderProgress = (0, utils_1.createProgress)(param.outputValue); + var sliderValue = sliderProgress.querySelector('.ntsh_progress-value'); + sliderValue.classList.add('mux_resizer'); + sliderCell.appendChild(sliderProgress); + var resizer = new morphux_1$1.MorphComponent.Resizer({ + existingContainer: sliderValue, + direction: 'right', + relative: true, + min: 0, + max: function () { return sliderProgress.clientWidth; }, + }); + var lastPercentage = -1; + resizer.on('resized', function (size) { + var percentage = Math.round((size / sliderProgress.clientWidth) * 100) / + 100; + if (percentage === lastPercentage) + return; + lastPercentage = percentage; + _this._Main.socket.emit('unityWebSocket', 'parameterValue', param.sliderIndex, percentage); + (0, utils_1.setProgressState)(sliderProgress, percentage); + }); + row.appendChild(sliderCell); + _this.parametersTable.appendChild(row); + }); + } + else { + existingSliders.forEach(function (row, index) { + var value = parameters[index].outputValue; + var progressElement = row.querySelector('.no-service .ntsh_progress'); + (0, utils_1.setProgressState)(progressElement, value); + var sliderElement = row.querySelector('.only-service .ntsh_progress'); + if (sliderElement.querySelector('.mux_resizer-moving') == null) + (0, utils_1.setProgressState)(sliderElement, value); + }); + } + }; + DashboardUnity.prototype.updateError = function () { + var errors = []; + if (this.runnerError != null) + errors.push(this.runnerError); + if (this.webSocketError != null) + errors.push(this.webSocketError); + if (errors.length > 0) { + this.errorText.innerText = errors.join('\n'); + this.errorContainer.style.display = 'block'; + } + else { + this.errorContainer.style.display = 'none'; + this.errorText.innerText = ''; + } + }; + DashboardUnity.prototype.registerListeners = function () { + var _this = this; + this._Main.socket.on('unityRunnerState', function (state) { + return _this.updateRunnerState(state); + }); + this._Main.socket.on('unityWebSocketState', function (state) { return _this.updateWebSocketState(state); }); + this.restartButton.addEventListener('click', function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + this.executeCommand('restart', 'Are you sure you want to restart the Unity Runner process?'); + return [2 /*return*/]; + }); + }); }); + }; + DashboardUnity.prototype.executeCommand = function (command, message) { + return __awaiter(this, void 0, void 0, function () { + var confirmed; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, morphux_1$1.MorphFeature.Confirm({ + title: 'Are you sure?', + message: message, + })]; + case 1: + confirmed = _a.sent(); + if (!confirmed) + return [2 /*return*/]; + morphux_1$1.MorphFeature.Loader({ + active: true, + message: "Requesting Unity Runner ".concat(command, "..."), + }); + this._Main.socket.emit('unityRunner', command, function (response) { + morphux_1$1.MorphFeature.Loader({ active: false }); + if (!response.succeed) + return morphux_1$1.MorphFeature.Alert({ + title: 'Error', + message: response.message, + }); + morphux_1$1.MorphFeature.Notification({ + level: 'success', + message: "Unity Runner is ".concat(command, "ing..."), + }); + }); + return [2 /*return*/]; + } + }); + }); + }; + return DashboardUnity; + }()); + dashboard_unity.DashboardUnity = DashboardUnity; + + Object.defineProperty(main$1, "__esModule", { value: true }); + exports.Main = main$1.Main = void 0; + var socket_io_client_1 = cjsExports; + var menuBar_1 = menuBar; + var tabController_1 = tabController; + var morphux_1 = requireIndex(); + var dashboard_camerarunner_1 = dashboard_camerarunner; + var logsHandler_1 = logsHandler; + var calibration_1 = calibration; + var dashboard_unity_1 = dashboard_unity; + var socket = (0, socket_io_client_1.io)('/'); + var Main = /** @class */ (function () { + function Main() { + this.socket = socket; + this.MenuBar = new menuBar_1.MenuBar(this); + this.TabController = new tabController_1.TabController(this); + this.Logs = new logsHandler_1.LogsHandler(this); + this.Calibration = new calibration_1.Calibration(this); + this.DashboardCameraRunner = new dashboard_camerarunner_1.DashboardCameraRunner(this); + this.DashboardUnityRunner = new dashboard_unity_1.DashboardUnity(this); + if (window.location.search.includes('debug')) { + window.SN = this; + console.log('Debug mode enabled'); + } + } + return Main; + }()); + exports.Main = main$1.Main = Main; + morphux_1.MorphFeature.Loader({ active: true, message: 'Connecting to server...' }); + socket.on('connect', function () { + console.log('Connected to server'); + morphux_1.MorphFeature.Loader({ active: false }); + }); + new Main(); + + exports["default"] = main$1; + + Object.defineProperty(exports, '__esModule', { value: true }); + + return exports; + +})({}); +//# sourceMappingURL=script.js.map diff --git a/frontend/views/dashboard/script.js.map b/frontend/views/dashboard/script.js.map new file mode 100644 index 0000000..beb72de --- /dev/null +++ b/frontend/views/dashboard/script.js.map @@ -0,0 +1 @@ +{"version":3,"file":"script.js","sources":["node_modules/engine.io-parser/build/cjs/commons.js","node_modules/engine.io-parser/build/cjs/encodePacket.browser.js","node_modules/engine.io-parser/build/cjs/contrib/base64-arraybuffer.js","node_modules/engine.io-parser/build/cjs/decodePacket.browser.js","node_modules/engine.io-parser/build/cjs/index.js","node_modules/@socket.io/component-emitter/lib/esm/index.js","node_modules/engine.io-client/build/cjs/globals.js","node_modules/engine.io-client/build/cjs/util.js","node_modules/engine.io-client/build/cjs/contrib/parseqs.js","node_modules/ms/index.js","node_modules/debug/src/common.js","node_modules/debug/src/browser.js","node_modules/engine.io-client/build/cjs/transport.js","node_modules/engine.io-client/build/cjs/transports/polling.js","node_modules/engine.io-client/build/cjs/contrib/has-cors.js","node_modules/engine.io-client/build/cjs/transports/polling-xhr.js","node_modules/engine.io-client/build/cjs/transports/websocket.js","node_modules/engine.io-client/build/cjs/transports/webtransport.js","node_modules/engine.io-client/build/cjs/transports/index.js","node_modules/engine.io-client/build/cjs/contrib/parseuri.js","node_modules/engine.io-client/build/cjs/socket.js","node_modules/engine.io-client/build/cjs/transports/polling-fetch.js","node_modules/engine.io-client/build/cjs/index.js","node_modules/socket.io-client/build/cjs/url.js","node_modules/socket.io-parser/build/cjs/is-binary.js","node_modules/socket.io-parser/build/cjs/binary.js","node_modules/socket.io-parser/build/cjs/index.js","node_modules/socket.io-client/build/cjs/on.js","node_modules/socket.io-client/build/cjs/socket.js","node_modules/socket.io-client/build/cjs/contrib/backo2.js","node_modules/socket.io-client/build/cjs/manager.js","node_modules/socket.io-client/build/cjs/index.js","../../../../MorphUX/dist/Utils/CE.js","../../../../MorphUX/dist/Components/baseComponent.js","../../../../MorphUX/dist/Components/Button/Component.Button.js","../../../../MorphUX/dist/Utils/TextHighlighter.js","../../../../MorphUX/node_modules/sortablejs/Sortable.js","../../../../MorphUX/dist/Components/Cards/Component.Cards.js","../../../../MorphUX/dist/Keys/KeyBinderOverwrite.js","../../../../MorphUX/dist/Keys/KeyBinderBase.js","../../../../MorphUX/dist/Morph.Keys.js","../../../../MorphUX/dist/Components/ContextMenu/Component.ContextMenu.js","../../../../MorphUX/dist/Components/Dialog/Component.Dialog.js","../../../../MorphUX/dist/Components/Group/Component.Group.js","../../../../MorphUX/dist/Components/Header/Component.Header.js","../../../../MorphUX/dist/Components/IconGrid/Component.IconGrid.js","../../../../MorphUX/node_modules/@egjs/hammerjs/dist/hammer.esm.js","../../../../MorphUX/dist/Utils/Utils.js","../../../../MorphUX/dist/Components/ImageViewer/Component.ImageViewer.js","../../../../MorphUX/dist/Components/Input/Component.Input.js","../../../../MorphUX/dist/Components/List/Component.List.js","../../../../MorphUX/dist/Components/MenuBar/Component.MenuBar.js","../../../../MorphUX/dist/Components/PaletteCheckbox/Component.PaletteCheckbox.js","../../../../MorphUX/dist/Components/PaletteSearch/Component.PaletteSearch.js","../../../../MorphUX/dist/Components/Resizer/Component.Resizer.js","../../../../MorphUX/dist/Components/Row/Component.Row.js","../../../../MorphUX/dist/Components/Select/Component.Select.js","../../../../MorphUX/dist/Components/Table/Component.Table._base.js","../../../../MorphUX/dist/Components/Table/Component.Table.Button.js","../../../../MorphUX/dist/Components/Table/Component.Table.Text.js","../../../../MorphUX/dist/Components/Table/Component.Table.Duration.js","../../../../MorphUX/dist/Components/Table/Component.Table.Icons.js","../../../../MorphUX/dist/Components/Table/Component.Table.MaterialSymbol.js","../../../../MorphUX/dist/Components/Table/Component.Table.Number.js","../../../../MorphUX/dist/Components/Table/Component.Table.Select.js","../../../../MorphUX/dist/Components/Table/Component.Table.TextSuggestions.js","../../../../MorphUX/dist/Components/Table/Component.Table.js","../../../../MorphUX/dist/Components/Text/Component.Text.js","../../../../MorphUX/dist/Morph.Components.js","../../../../MorphUX/dist/Features/Alert/Feature.Alert.js","../../../../MorphUX/dist/Features/Confirm/Feature.Confirm.js","../../../../MorphUX/dist/Features/Loader/Feature.Loader.js","../../../../MorphUX/dist/Features/Notification/Feature.Notification.js","../../../../MorphUX/dist/Features/Prompt/Feature.Prompt.js","../../../../MorphUX/dist/Morph.Features.js","../../../../MorphUX/dist/Utils/clone.js","../../../../MorphUX/dist/Morph.Utils.js","../../../../MorphUX/dist/Index.js","dist/menuBar.js","dist/tabController.js","dist/utils.js","dist/dashboard.camerarunner.js","node_modules/ansi_up/ansi_up.js","dist/logsHandler.js","dist/calibration.js","dist/dashboard.unity.js","dist/main.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ERROR_PACKET = exports.PACKET_TYPES_REVERSE = exports.PACKET_TYPES = void 0;\nconst PACKET_TYPES = Object.create(null); // no Map = no polyfill\nexports.PACKET_TYPES = PACKET_TYPES;\nPACKET_TYPES[\"open\"] = \"0\";\nPACKET_TYPES[\"close\"] = \"1\";\nPACKET_TYPES[\"ping\"] = \"2\";\nPACKET_TYPES[\"pong\"] = \"3\";\nPACKET_TYPES[\"message\"] = \"4\";\nPACKET_TYPES[\"upgrade\"] = \"5\";\nPACKET_TYPES[\"noop\"] = \"6\";\nconst PACKET_TYPES_REVERSE = Object.create(null);\nexports.PACKET_TYPES_REVERSE = PACKET_TYPES_REVERSE;\nObject.keys(PACKET_TYPES).forEach((key) => {\n PACKET_TYPES_REVERSE[PACKET_TYPES[key]] = key;\n});\nconst ERROR_PACKET = { type: \"error\", data: \"parser error\" };\nexports.ERROR_PACKET = ERROR_PACKET;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.encodePacket = void 0;\nexports.encodePacketToBinary = encodePacketToBinary;\nconst commons_js_1 = require(\"./commons.js\");\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n Object.prototype.toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\n// ArrayBuffer.isView method is not defined in IE10\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj && obj.buffer instanceof ArrayBuffer;\n};\nconst encodePacket = ({ type, data }, supportsBinary, callback) => {\n if (withNativeBlob && data instanceof Blob) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(data, callback);\n }\n }\n else if (withNativeArrayBuffer &&\n (data instanceof ArrayBuffer || isView(data))) {\n if (supportsBinary) {\n return callback(data);\n }\n else {\n return encodeBlobAsBase64(new Blob([data]), callback);\n }\n }\n // plain string\n return callback(commons_js_1.PACKET_TYPES[type] + (data || \"\"));\n};\nexports.encodePacket = encodePacket;\nconst encodeBlobAsBase64 = (data, callback) => {\n const fileReader = new FileReader();\n fileReader.onload = function () {\n const content = fileReader.result.split(\",\")[1];\n callback(\"b\" + (content || \"\"));\n };\n return fileReader.readAsDataURL(data);\n};\nfunction toArray(data) {\n if (data instanceof Uint8Array) {\n return data;\n }\n else if (data instanceof ArrayBuffer) {\n return new Uint8Array(data);\n }\n else {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);\n }\n}\nlet TEXT_ENCODER;\nfunction encodePacketToBinary(packet, callback) {\n if (withNativeBlob && packet.data instanceof Blob) {\n return packet.data.arrayBuffer().then(toArray).then(callback);\n }\n else if (withNativeArrayBuffer &&\n (packet.data instanceof ArrayBuffer || isView(packet.data))) {\n return callback(toArray(packet.data));\n }\n encodePacket(packet, false, (encoded) => {\n if (!TEXT_ENCODER) {\n TEXT_ENCODER = new TextEncoder();\n }\n callback(TEXT_ENCODER.encode(encoded));\n });\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decode = exports.encode = void 0;\n// imported from https://github.com/socketio/base64-arraybuffer\nconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nconst lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (let i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nconst encode = (arraybuffer) => {\n let bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nexports.encode = encode;\nconst decode = (base64) => {\n let bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n const arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\nexports.decode = decode;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodePacket = void 0;\nconst commons_js_1 = require(\"./commons.js\");\nconst base64_arraybuffer_js_1 = require(\"./contrib/base64-arraybuffer.js\");\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst decodePacket = (encodedPacket, binaryType) => {\n if (typeof encodedPacket !== \"string\") {\n return {\n type: \"message\",\n data: mapBinary(encodedPacket, binaryType),\n };\n }\n const type = encodedPacket.charAt(0);\n if (type === \"b\") {\n return {\n type: \"message\",\n data: decodeBase64Packet(encodedPacket.substring(1), binaryType),\n };\n }\n const packetType = commons_js_1.PACKET_TYPES_REVERSE[type];\n if (!packetType) {\n return commons_js_1.ERROR_PACKET;\n }\n return encodedPacket.length > 1\n ? {\n type: commons_js_1.PACKET_TYPES_REVERSE[type],\n data: encodedPacket.substring(1),\n }\n : {\n type: commons_js_1.PACKET_TYPES_REVERSE[type],\n };\n};\nexports.decodePacket = decodePacket;\nconst decodeBase64Packet = (data, binaryType) => {\n if (withNativeArrayBuffer) {\n const decoded = (0, base64_arraybuffer_js_1.decode)(data);\n return mapBinary(decoded, binaryType);\n }\n else {\n return { base64: true, data }; // fallback for old browsers\n }\n};\nconst mapBinary = (data, binaryType) => {\n switch (binaryType) {\n case \"blob\":\n if (data instanceof Blob) {\n // from WebSocket + binaryType \"blob\"\n return data;\n }\n else {\n // from HTTP long-polling or WebTransport\n return new Blob([data]);\n }\n case \"arraybuffer\":\n default:\n if (data instanceof ArrayBuffer) {\n // from HTTP long-polling (base64) or WebSocket + binaryType \"arraybuffer\"\n return data;\n }\n else {\n // from WebTransport (Uint8Array)\n return data.buffer;\n }\n }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodePayload = exports.decodePacket = exports.encodePayload = exports.encodePacket = exports.protocol = void 0;\nexports.createPacketEncoderStream = createPacketEncoderStream;\nexports.createPacketDecoderStream = createPacketDecoderStream;\nconst encodePacket_js_1 = require(\"./encodePacket.js\");\nObject.defineProperty(exports, \"encodePacket\", { enumerable: true, get: function () { return encodePacket_js_1.encodePacket; } });\nconst decodePacket_js_1 = require(\"./decodePacket.js\");\nObject.defineProperty(exports, \"decodePacket\", { enumerable: true, get: function () { return decodePacket_js_1.decodePacket; } });\nconst commons_js_1 = require(\"./commons.js\");\nconst SEPARATOR = String.fromCharCode(30); // see https://en.wikipedia.org/wiki/Delimiter#ASCII_delimited_text\nconst encodePayload = (packets, callback) => {\n // some packets may be added to the array while encoding, so the initial length must be saved\n const length = packets.length;\n const encodedPackets = new Array(length);\n let count = 0;\n packets.forEach((packet, i) => {\n // force base64 encoding for binary packets\n (0, encodePacket_js_1.encodePacket)(packet, false, (encodedPacket) => {\n encodedPackets[i] = encodedPacket;\n if (++count === length) {\n callback(encodedPackets.join(SEPARATOR));\n }\n });\n });\n};\nexports.encodePayload = encodePayload;\nconst decodePayload = (encodedPayload, binaryType) => {\n const encodedPackets = encodedPayload.split(SEPARATOR);\n const packets = [];\n for (let i = 0; i < encodedPackets.length; i++) {\n const decodedPacket = (0, decodePacket_js_1.decodePacket)(encodedPackets[i], binaryType);\n packets.push(decodedPacket);\n if (decodedPacket.type === \"error\") {\n break;\n }\n }\n return packets;\n};\nexports.decodePayload = decodePayload;\nfunction createPacketEncoderStream() {\n return new TransformStream({\n transform(packet, controller) {\n (0, encodePacket_js_1.encodePacketToBinary)(packet, (encodedPacket) => {\n const payloadLength = encodedPacket.length;\n let header;\n // inspired by the WebSocket format: https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#decoding_payload_length\n if (payloadLength < 126) {\n header = new Uint8Array(1);\n new DataView(header.buffer).setUint8(0, payloadLength);\n }\n else if (payloadLength < 65536) {\n header = new Uint8Array(3);\n const view = new DataView(header.buffer);\n view.setUint8(0, 126);\n view.setUint16(1, payloadLength);\n }\n else {\n header = new Uint8Array(9);\n const view = new DataView(header.buffer);\n view.setUint8(0, 127);\n view.setBigUint64(1, BigInt(payloadLength));\n }\n // first bit indicates whether the payload is plain text (0) or binary (1)\n if (packet.data && typeof packet.data !== \"string\") {\n header[0] |= 0x80;\n }\n controller.enqueue(header);\n controller.enqueue(encodedPacket);\n });\n },\n });\n}\nlet TEXT_DECODER;\nfunction totalLength(chunks) {\n return chunks.reduce((acc, chunk) => acc + chunk.length, 0);\n}\nfunction concatChunks(chunks, size) {\n if (chunks[0].length === size) {\n return chunks.shift();\n }\n const buffer = new Uint8Array(size);\n let j = 0;\n for (let i = 0; i < size; i++) {\n buffer[i] = chunks[0][j++];\n if (j === chunks[0].length) {\n chunks.shift();\n j = 0;\n }\n }\n if (chunks.length && j < chunks[0].length) {\n chunks[0] = chunks[0].slice(j);\n }\n return buffer;\n}\nfunction createPacketDecoderStream(maxPayload, binaryType) {\n if (!TEXT_DECODER) {\n TEXT_DECODER = new TextDecoder();\n }\n const chunks = [];\n let state = 0 /* State.READ_HEADER */;\n let expectedLength = -1;\n let isBinary = false;\n return new TransformStream({\n transform(chunk, controller) {\n chunks.push(chunk);\n while (true) {\n if (state === 0 /* State.READ_HEADER */) {\n if (totalLength(chunks) < 1) {\n break;\n }\n const header = concatChunks(chunks, 1);\n isBinary = (header[0] & 0x80) === 0x80;\n expectedLength = header[0] & 0x7f;\n if (expectedLength < 126) {\n state = 3 /* State.READ_PAYLOAD */;\n }\n else if (expectedLength === 126) {\n state = 1 /* State.READ_EXTENDED_LENGTH_16 */;\n }\n else {\n state = 2 /* State.READ_EXTENDED_LENGTH_64 */;\n }\n }\n else if (state === 1 /* State.READ_EXTENDED_LENGTH_16 */) {\n if (totalLength(chunks) < 2) {\n break;\n }\n const headerArray = concatChunks(chunks, 2);\n expectedLength = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length).getUint16(0);\n state = 3 /* State.READ_PAYLOAD */;\n }\n else if (state === 2 /* State.READ_EXTENDED_LENGTH_64 */) {\n if (totalLength(chunks) < 8) {\n break;\n }\n const headerArray = concatChunks(chunks, 8);\n const view = new DataView(headerArray.buffer, headerArray.byteOffset, headerArray.length);\n const n = view.getUint32(0);\n if (n > Math.pow(2, 53 - 32) - 1) {\n // the maximum safe integer in JavaScript is 2^53 - 1\n controller.enqueue(commons_js_1.ERROR_PACKET);\n break;\n }\n expectedLength = n * Math.pow(2, 32) + view.getUint32(4);\n state = 3 /* State.READ_PAYLOAD */;\n }\n else {\n if (totalLength(chunks) < expectedLength) {\n break;\n }\n const data = concatChunks(chunks, expectedLength);\n controller.enqueue((0, decodePacket_js_1.decodePacket)(isBinary ? data : TEXT_DECODER.decode(data), binaryType));\n state = 0 /* State.READ_HEADER */;\n }\n if (expectedLength === 0 || expectedLength > maxPayload) {\n controller.enqueue(commons_js_1.ERROR_PACKET);\n break;\n }\n }\n },\n });\n}\nexports.protocol = 4;\n","/**\n * Initialize a new `Emitter`.\n *\n * @api public\n */\n\nexport function Emitter(obj) {\n if (obj) return mixin(obj);\n}\n\n/**\n * Mixin the emitter properties.\n *\n * @param {Object} obj\n * @return {Object}\n * @api private\n */\n\nfunction mixin(obj) {\n for (var key in Emitter.prototype) {\n obj[key] = Emitter.prototype[key];\n }\n return obj;\n}\n\n/**\n * Listen on the given `event` with `fn`.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.on =\nEmitter.prototype.addEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n (this._callbacks['$' + event] = this._callbacks['$' + event] || [])\n .push(fn);\n return this;\n};\n\n/**\n * Adds an `event` listener that will be invoked a single\n * time then automatically removed.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.once = function(event, fn){\n function on() {\n this.off(event, on);\n fn.apply(this, arguments);\n }\n\n on.fn = fn;\n this.on(event, on);\n return this;\n};\n\n/**\n * Remove the given callback for `event` or all\n * registered callbacks.\n *\n * @param {String} event\n * @param {Function} fn\n * @return {Emitter}\n * @api public\n */\n\nEmitter.prototype.off =\nEmitter.prototype.removeListener =\nEmitter.prototype.removeAllListeners =\nEmitter.prototype.removeEventListener = function(event, fn){\n this._callbacks = this._callbacks || {};\n\n // all\n if (0 == arguments.length) {\n this._callbacks = {};\n return this;\n }\n\n // specific event\n var callbacks = this._callbacks['$' + event];\n if (!callbacks) return this;\n\n // remove all handlers\n if (1 == arguments.length) {\n delete this._callbacks['$' + event];\n return this;\n }\n\n // remove specific handler\n var cb;\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1);\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this._callbacks['$' + event];\n }\n\n return this;\n};\n\n/**\n * Emit `event` with the given args.\n *\n * @param {String} event\n * @param {Mixed} ...\n * @return {Emitter}\n */\n\nEmitter.prototype.emit = function(event){\n this._callbacks = this._callbacks || {};\n\n var args = new Array(arguments.length - 1)\n , callbacks = this._callbacks['$' + event];\n\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n\n if (callbacks) {\n callbacks = callbacks.slice(0);\n for (var i = 0, len = callbacks.length; i < len; ++i) {\n callbacks[i].apply(this, args);\n }\n }\n\n return this;\n};\n\n// alias used for reserved events (protected method)\nEmitter.prototype.emitReserved = Emitter.prototype.emit;\n\n/**\n * Return array of callbacks for `event`.\n *\n * @param {String} event\n * @return {Array}\n * @api public\n */\n\nEmitter.prototype.listeners = function(event){\n this._callbacks = this._callbacks || {};\n return this._callbacks['$' + event] || [];\n};\n\n/**\n * Check if this emitter has `event` handlers.\n *\n * @param {String} event\n * @return {Boolean}\n * @api public\n */\n\nEmitter.prototype.hasListeners = function(event){\n return !! this.listeners(event).length;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.defaultBinaryType = exports.globalThisShim = exports.nextTick = void 0;\nexports.createCookieJar = createCookieJar;\nexports.nextTick = (() => {\n const isPromiseAvailable = typeof Promise === \"function\" && typeof Promise.resolve === \"function\";\n if (isPromiseAvailable) {\n return (cb) => Promise.resolve().then(cb);\n }\n else {\n return (cb, setTimeoutFn) => setTimeoutFn(cb, 0);\n }\n})();\nexports.globalThisShim = (() => {\n if (typeof self !== \"undefined\") {\n return self;\n }\n else if (typeof window !== \"undefined\") {\n return window;\n }\n else {\n return Function(\"return this\")();\n }\n})();\nexports.defaultBinaryType = \"arraybuffer\";\nfunction createCookieJar() { }\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.pick = pick;\nexports.installTimerFunctions = installTimerFunctions;\nexports.byteLength = byteLength;\nexports.randomString = randomString;\nconst globals_node_js_1 = require(\"./globals.node.js\");\nfunction pick(obj, ...attr) {\n return attr.reduce((acc, k) => {\n if (obj.hasOwnProperty(k)) {\n acc[k] = obj[k];\n }\n return acc;\n }, {});\n}\n// Keep a reference to the real timeout functions so they can be used when overridden\nconst NATIVE_SET_TIMEOUT = globals_node_js_1.globalThisShim.setTimeout;\nconst NATIVE_CLEAR_TIMEOUT = globals_node_js_1.globalThisShim.clearTimeout;\nfunction installTimerFunctions(obj, opts) {\n if (opts.useNativeTimers) {\n obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globals_node_js_1.globalThisShim);\n obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globals_node_js_1.globalThisShim);\n }\n else {\n obj.setTimeoutFn = globals_node_js_1.globalThisShim.setTimeout.bind(globals_node_js_1.globalThisShim);\n obj.clearTimeoutFn = globals_node_js_1.globalThisShim.clearTimeout.bind(globals_node_js_1.globalThisShim);\n }\n}\n// base64 encoded buffers are about 33% bigger (https://en.wikipedia.org/wiki/Base64)\nconst BASE64_OVERHEAD = 1.33;\n// we could also have used `new Blob([obj]).size`, but it isn't supported in IE9\nfunction byteLength(obj) {\n if (typeof obj === \"string\") {\n return utf8Length(obj);\n }\n // arraybuffer or blob\n return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD);\n}\nfunction utf8Length(str) {\n let c = 0, length = 0;\n for (let i = 0, l = str.length; i < l; i++) {\n c = str.charCodeAt(i);\n if (c < 0x80) {\n length += 1;\n }\n else if (c < 0x800) {\n length += 2;\n }\n else if (c < 0xd800 || c >= 0xe000) {\n length += 3;\n }\n else {\n i++;\n length += 4;\n }\n }\n return length;\n}\n/**\n * Generates a random 8-characters string.\n */\nfunction randomString() {\n return (Date.now().toString(36).substring(3) +\n Math.random().toString(36).substring(2, 5));\n}\n","\"use strict\";\n// imported from https://github.com/galkn/querystring\n/**\n * Compiles a querystring\n * Returns string representation of the object\n *\n * @param {Object}\n * @api private\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.encode = encode;\nexports.decode = decode;\nfunction encode(obj) {\n let str = '';\n for (let i in obj) {\n if (obj.hasOwnProperty(i)) {\n if (str.length)\n str += '&';\n str += encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);\n }\n }\n return str;\n}\n/**\n * Parses a simple querystring into an object\n *\n * @param {String} qs\n * @api private\n */\nfunction decode(qs) {\n let qry = {};\n let pairs = qs.split('&');\n for (let i = 0, l = pairs.length; i < l; i++) {\n let pair = pairs[i].split('=');\n qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);\n }\n return qry;\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Transport = exports.TransportError = void 0;\nconst engine_io_parser_1 = require(\"engine.io-parser\");\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst util_js_1 = require(\"./util.js\");\nconst parseqs_js_1 = require(\"./contrib/parseqs.js\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:transport\"); // debug()\nclass TransportError extends Error {\n constructor(reason, description, context) {\n super(reason);\n this.description = description;\n this.context = context;\n this.type = \"TransportError\";\n }\n}\nexports.TransportError = TransportError;\nclass Transport extends component_emitter_1.Emitter {\n /**\n * Transport abstract constructor.\n *\n * @param {Object} opts - options\n * @protected\n */\n constructor(opts) {\n super();\n this.writable = false;\n (0, util_js_1.installTimerFunctions)(this, opts);\n this.opts = opts;\n this.query = opts.query;\n this.socket = opts.socket;\n this.supportsBinary = !opts.forceBase64;\n }\n /**\n * Emits an error.\n *\n * @param {String} reason\n * @param description\n * @param context - the error context\n * @return {Transport} for chaining\n * @protected\n */\n onError(reason, description, context) {\n super.emitReserved(\"error\", new TransportError(reason, description, context));\n return this;\n }\n /**\n * Opens the transport.\n */\n open() {\n this.readyState = \"opening\";\n this.doOpen();\n return this;\n }\n /**\n * Closes the transport.\n */\n close() {\n if (this.readyState === \"opening\" || this.readyState === \"open\") {\n this.doClose();\n this.onClose();\n }\n return this;\n }\n /**\n * Sends multiple packets.\n *\n * @param {Array} packets\n */\n send(packets) {\n if (this.readyState === \"open\") {\n this.write(packets);\n }\n else {\n // this might happen if the transport was silently closed in the beforeunload event handler\n debug(\"transport is not open, discarding packets\");\n }\n }\n /**\n * Called upon open\n *\n * @protected\n */\n onOpen() {\n this.readyState = \"open\";\n this.writable = true;\n super.emitReserved(\"open\");\n }\n /**\n * Called with data.\n *\n * @param {String} data\n * @protected\n */\n onData(data) {\n const packet = (0, engine_io_parser_1.decodePacket)(data, this.socket.binaryType);\n this.onPacket(packet);\n }\n /**\n * Called with a decoded packet.\n *\n * @protected\n */\n onPacket(packet) {\n super.emitReserved(\"packet\", packet);\n }\n /**\n * Called upon close.\n *\n * @protected\n */\n onClose(details) {\n this.readyState = \"closed\";\n super.emitReserved(\"close\", details);\n }\n /**\n * Pauses the transport, in order not to lose packets during an upgrade.\n *\n * @param onPause\n */\n pause(onPause) { }\n createUri(schema, query = {}) {\n return (schema +\n \"://\" +\n this._hostname() +\n this._port() +\n this.opts.path +\n this._query(query));\n }\n _hostname() {\n const hostname = this.opts.hostname;\n return hostname.indexOf(\":\") === -1 ? hostname : \"[\" + hostname + \"]\";\n }\n _port() {\n if (this.opts.port &&\n ((this.opts.secure && Number(this.opts.port !== 443)) ||\n (!this.opts.secure && Number(this.opts.port) !== 80))) {\n return \":\" + this.opts.port;\n }\n else {\n return \"\";\n }\n }\n _query(query) {\n const encodedQuery = (0, parseqs_js_1.encode)(query);\n return encodedQuery.length ? \"?\" + encodedQuery : \"\";\n }\n}\nexports.Transport = Transport;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Polling = void 0;\nconst transport_js_1 = require(\"../transport.js\");\nconst util_js_1 = require(\"../util.js\");\nconst engine_io_parser_1 = require(\"engine.io-parser\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:polling\"); // debug()\nclass Polling extends transport_js_1.Transport {\n constructor() {\n super(...arguments);\n this._polling = false;\n }\n get name() {\n return \"polling\";\n }\n /**\n * Opens the socket (triggers polling). We write a PING message to determine\n * when the transport is open.\n *\n * @protected\n */\n doOpen() {\n this._poll();\n }\n /**\n * Pauses polling.\n *\n * @param {Function} onPause - callback upon buffers are flushed and transport is paused\n * @package\n */\n pause(onPause) {\n this.readyState = \"pausing\";\n const pause = () => {\n debug(\"paused\");\n this.readyState = \"paused\";\n onPause();\n };\n if (this._polling || !this.writable) {\n let total = 0;\n if (this._polling) {\n debug(\"we are currently polling - waiting to pause\");\n total++;\n this.once(\"pollComplete\", function () {\n debug(\"pre-pause polling complete\");\n --total || pause();\n });\n }\n if (!this.writable) {\n debug(\"we are currently writing - waiting to pause\");\n total++;\n this.once(\"drain\", function () {\n debug(\"pre-pause writing complete\");\n --total || pause();\n });\n }\n }\n else {\n pause();\n }\n }\n /**\n * Starts polling cycle.\n *\n * @private\n */\n _poll() {\n debug(\"polling\");\n this._polling = true;\n this.doPoll();\n this.emitReserved(\"poll\");\n }\n /**\n * Overloads onData to detect payloads.\n *\n * @protected\n */\n onData(data) {\n debug(\"polling got data %s\", data);\n const callback = (packet) => {\n // if its the first message we consider the transport open\n if (\"opening\" === this.readyState && packet.type === \"open\") {\n this.onOpen();\n }\n // if its a close packet, we close the ongoing requests\n if (\"close\" === packet.type) {\n this.onClose({ description: \"transport closed by the server\" });\n return false;\n }\n // otherwise bypass onData and handle the message\n this.onPacket(packet);\n };\n // decode payload\n (0, engine_io_parser_1.decodePayload)(data, this.socket.binaryType).forEach(callback);\n // if an event did not trigger closing\n if (\"closed\" !== this.readyState) {\n // if we got data we're not polling\n this._polling = false;\n this.emitReserved(\"pollComplete\");\n if (\"open\" === this.readyState) {\n this._poll();\n }\n else {\n debug('ignoring poll - transport state \"%s\"', this.readyState);\n }\n }\n }\n /**\n * For polling, send a close packet.\n *\n * @protected\n */\n doClose() {\n const close = () => {\n debug(\"writing close packet\");\n this.write([{ type: \"close\" }]);\n };\n if (\"open\" === this.readyState) {\n debug(\"transport open - closing\");\n close();\n }\n else {\n // in case we're trying to close while\n // handshaking is in progress (GH-164)\n debug(\"transport not open - deferring close\");\n this.once(\"open\", close);\n }\n }\n /**\n * Writes a packets payload.\n *\n * @param {Array} packets - data packets\n * @protected\n */\n write(packets) {\n this.writable = false;\n (0, engine_io_parser_1.encodePayload)(packets, (data) => {\n this.doWrite(data, () => {\n this.writable = true;\n this.emitReserved(\"drain\");\n });\n });\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"https\" : \"http\";\n const query = this.query || {};\n // cache busting is forced\n if (false !== this.opts.timestampRequests) {\n query[this.opts.timestampParam] = (0, util_js_1.randomString)();\n }\n if (!this.supportsBinary && !query.sid) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n}\nexports.Polling = Polling;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasCORS = void 0;\n// imported from https://github.com/component/has-cors\nlet value = false;\ntry {\n value = typeof XMLHttpRequest !== 'undefined' &&\n 'withCredentials' in new XMLHttpRequest();\n}\ncatch (err) {\n // if XMLHttp support is disabled in IE then it will throw\n // when trying to create\n}\nexports.hasCORS = value;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.XHR = exports.Request = exports.BaseXHR = void 0;\nconst polling_js_1 = require(\"./polling.js\");\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst util_js_1 = require(\"../util.js\");\nconst globals_node_js_1 = require(\"../globals.node.js\");\nconst has_cors_js_1 = require(\"../contrib/has-cors.js\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:polling\"); // debug()\nfunction empty() { }\nclass BaseXHR extends polling_js_1.Polling {\n /**\n * XHR Polling constructor.\n *\n * @param {Object} opts\n * @package\n */\n constructor(opts) {\n super(opts);\n if (typeof location !== \"undefined\") {\n const isSSL = \"https:\" === location.protocol;\n let port = location.port;\n // some user agents have empty `location.port`\n if (!port) {\n port = isSSL ? \"443\" : \"80\";\n }\n this.xd =\n (typeof location !== \"undefined\" &&\n opts.hostname !== location.hostname) ||\n port !== opts.port;\n }\n }\n /**\n * Sends data.\n *\n * @param {String} data to send.\n * @param {Function} called upon flush.\n * @private\n */\n doWrite(data, fn) {\n const req = this.request({\n method: \"POST\",\n data: data,\n });\n req.on(\"success\", fn);\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr post error\", xhrStatus, context);\n });\n }\n /**\n * Starts a poll cycle.\n *\n * @private\n */\n doPoll() {\n debug(\"xhr poll\");\n const req = this.request();\n req.on(\"data\", this.onData.bind(this));\n req.on(\"error\", (xhrStatus, context) => {\n this.onError(\"xhr poll error\", xhrStatus, context);\n });\n this.pollXhr = req;\n }\n}\nexports.BaseXHR = BaseXHR;\nclass Request extends component_emitter_1.Emitter {\n /**\n * Request constructor\n *\n * @param {Object} options\n * @package\n */\n constructor(createRequest, uri, opts) {\n super();\n this.createRequest = createRequest;\n (0, util_js_1.installTimerFunctions)(this, opts);\n this._opts = opts;\n this._method = opts.method || \"GET\";\n this._uri = uri;\n this._data = undefined !== opts.data ? opts.data : null;\n this._create();\n }\n /**\n * Creates the XHR object and sends the request.\n *\n * @private\n */\n _create() {\n var _a;\n const opts = (0, util_js_1.pick)(this._opts, \"agent\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"autoUnref\");\n opts.xdomain = !!this._opts.xd;\n const xhr = (this._xhr = this.createRequest(opts));\n try {\n debug(\"xhr open %s: %s\", this._method, this._uri);\n xhr.open(this._method, this._uri, true);\n try {\n if (this._opts.extraHeaders) {\n // @ts-ignore\n xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true);\n for (let i in this._opts.extraHeaders) {\n if (this._opts.extraHeaders.hasOwnProperty(i)) {\n xhr.setRequestHeader(i, this._opts.extraHeaders[i]);\n }\n }\n }\n }\n catch (e) { }\n if (\"POST\" === this._method) {\n try {\n xhr.setRequestHeader(\"Content-type\", \"text/plain;charset=UTF-8\");\n }\n catch (e) { }\n }\n try {\n xhr.setRequestHeader(\"Accept\", \"*/*\");\n }\n catch (e) { }\n (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.addCookies(xhr);\n // ie6 check\n if (\"withCredentials\" in xhr) {\n xhr.withCredentials = this._opts.withCredentials;\n }\n if (this._opts.requestTimeout) {\n xhr.timeout = this._opts.requestTimeout;\n }\n xhr.onreadystatechange = () => {\n var _a;\n if (xhr.readyState === 3) {\n (_a = this._opts.cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(\n // @ts-ignore\n xhr.getResponseHeader(\"set-cookie\"));\n }\n if (4 !== xhr.readyState)\n return;\n if (200 === xhr.status || 1223 === xhr.status) {\n this._onLoad();\n }\n else {\n // make sure the `error` event handler that's user-set\n // does not throw in the same tick and gets caught here\n this.setTimeoutFn(() => {\n this._onError(typeof xhr.status === \"number\" ? xhr.status : 0);\n }, 0);\n }\n };\n debug(\"xhr data %s\", this._data);\n xhr.send(this._data);\n }\n catch (e) {\n // Need to defer since .create() is called directly from the constructor\n // and thus the 'error' event can only be only bound *after* this exception\n // occurs. Therefore, also, we cannot throw here at all.\n this.setTimeoutFn(() => {\n this._onError(e);\n }, 0);\n return;\n }\n if (typeof document !== \"undefined\") {\n this._index = Request.requestsCount++;\n Request.requests[this._index] = this;\n }\n }\n /**\n * Called upon error.\n *\n * @private\n */\n _onError(err) {\n this.emitReserved(\"error\", err, this._xhr);\n this._cleanup(true);\n }\n /**\n * Cleans up house.\n *\n * @private\n */\n _cleanup(fromError) {\n if (\"undefined\" === typeof this._xhr || null === this._xhr) {\n return;\n }\n this._xhr.onreadystatechange = empty;\n if (fromError) {\n try {\n this._xhr.abort();\n }\n catch (e) { }\n }\n if (typeof document !== \"undefined\") {\n delete Request.requests[this._index];\n }\n this._xhr = null;\n }\n /**\n * Called upon load.\n *\n * @private\n */\n _onLoad() {\n const data = this._xhr.responseText;\n if (data !== null) {\n this.emitReserved(\"data\", data);\n this.emitReserved(\"success\");\n this._cleanup();\n }\n }\n /**\n * Aborts the request.\n *\n * @package\n */\n abort() {\n this._cleanup();\n }\n}\nexports.Request = Request;\nRequest.requestsCount = 0;\nRequest.requests = {};\n/**\n * Aborts pending requests when unloading the window. This is needed to prevent\n * memory leaks (e.g. when using IE) and to ensure that no spurious error is\n * emitted.\n */\nif (typeof document !== \"undefined\") {\n // @ts-ignore\n if (typeof attachEvent === \"function\") {\n // @ts-ignore\n attachEvent(\"onunload\", unloadHandler);\n }\n else if (typeof addEventListener === \"function\") {\n const terminationEvent = \"onpagehide\" in globals_node_js_1.globalThisShim ? \"pagehide\" : \"unload\";\n addEventListener(terminationEvent, unloadHandler, false);\n }\n}\nfunction unloadHandler() {\n for (let i in Request.requests) {\n if (Request.requests.hasOwnProperty(i)) {\n Request.requests[i].abort();\n }\n }\n}\nconst hasXHR2 = (function () {\n const xhr = newRequest({\n xdomain: false,\n });\n return xhr && xhr.responseType !== null;\n})();\n/**\n * HTTP long-polling based on the built-in `XMLHttpRequest` object.\n *\n * Usage: browser\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest\n */\nclass XHR extends BaseXHR {\n constructor(opts) {\n super(opts);\n const forceBase64 = opts && opts.forceBase64;\n this.supportsBinary = hasXHR2 && !forceBase64;\n }\n request(opts = {}) {\n Object.assign(opts, { xd: this.xd }, this.opts);\n return new Request(newRequest, this.uri(), opts);\n }\n}\nexports.XHR = XHR;\nfunction newRequest(opts) {\n const xdomain = opts.xdomain;\n // XMLHttpRequest can be disabled on IE\n try {\n if (\"undefined\" !== typeof XMLHttpRequest && (!xdomain || has_cors_js_1.hasCORS)) {\n return new XMLHttpRequest();\n }\n }\n catch (e) { }\n if (!xdomain) {\n try {\n return new globals_node_js_1.globalThisShim[[\"Active\"].concat(\"Object\").join(\"X\")](\"Microsoft.XMLHTTP\");\n }\n catch (e) { }\n }\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WS = exports.BaseWS = void 0;\nconst transport_js_1 = require(\"../transport.js\");\nconst util_js_1 = require(\"../util.js\");\nconst engine_io_parser_1 = require(\"engine.io-parser\");\nconst globals_node_js_1 = require(\"../globals.node.js\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:websocket\"); // debug()\n// detect ReactNative environment\nconst isReactNative = typeof navigator !== \"undefined\" &&\n typeof navigator.product === \"string\" &&\n navigator.product.toLowerCase() === \"reactnative\";\nclass BaseWS extends transport_js_1.Transport {\n get name() {\n return \"websocket\";\n }\n doOpen() {\n const uri = this.uri();\n const protocols = this.opts.protocols;\n // React Native only supports the 'headers' option, and will print a warning if anything else is passed\n const opts = isReactNative\n ? {}\n : (0, util_js_1.pick)(this.opts, \"agent\", \"perMessageDeflate\", \"pfx\", \"key\", \"passphrase\", \"cert\", \"ca\", \"ciphers\", \"rejectUnauthorized\", \"localAddress\", \"protocolVersion\", \"origin\", \"maxPayload\", \"family\", \"checkServerIdentity\");\n if (this.opts.extraHeaders) {\n opts.headers = this.opts.extraHeaders;\n }\n try {\n this.ws = this.createSocket(uri, protocols, opts);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this.ws.binaryType = this.socket.binaryType;\n this.addEventListeners();\n }\n /**\n * Adds event listeners to the socket\n *\n * @private\n */\n addEventListeners() {\n this.ws.onopen = () => {\n if (this.opts.autoUnref) {\n this.ws._socket.unref();\n }\n this.onOpen();\n };\n this.ws.onclose = (closeEvent) => this.onClose({\n description: \"websocket connection closed\",\n context: closeEvent,\n });\n this.ws.onmessage = (ev) => this.onData(ev.data);\n this.ws.onerror = (e) => this.onError(\"websocket error\", e);\n }\n write(packets) {\n this.writable = false;\n // encodePacket efficient as it uses WS framing\n // no need for encodePayload\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n (0, engine_io_parser_1.encodePacket)(packet, this.supportsBinary, (data) => {\n // Sometimes the websocket has already been closed but the browser didn't\n // have a chance of informing us about it yet, in that case send will\n // throw an error\n try {\n this.doWrite(packet, data);\n }\n catch (e) {\n debug(\"websocket closed before onclose event\");\n }\n if (lastPacket) {\n // fake drain\n // defer to next tick to allow Socket to clear writeBuffer\n (0, globals_node_js_1.nextTick)(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n if (typeof this.ws !== \"undefined\") {\n this.ws.onerror = () => { };\n this.ws.close();\n this.ws = null;\n }\n }\n /**\n * Generates uri for connection.\n *\n * @private\n */\n uri() {\n const schema = this.opts.secure ? \"wss\" : \"ws\";\n const query = this.query || {};\n // append timestamp to URI\n if (this.opts.timestampRequests) {\n query[this.opts.timestampParam] = (0, util_js_1.randomString)();\n }\n // communicate binary support capabilities\n if (!this.supportsBinary) {\n query.b64 = 1;\n }\n return this.createUri(schema, query);\n }\n}\nexports.BaseWS = BaseWS;\nconst WebSocketCtor = globals_node_js_1.globalThisShim.WebSocket || globals_node_js_1.globalThisShim.MozWebSocket;\n/**\n * WebSocket transport based on the built-in `WebSocket` object.\n *\n * Usage: browser, Node.js (since v21), Deno, Bun\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket\n * @see https://caniuse.com/mdn-api_websocket\n * @see https://nodejs.org/api/globals.html#websocket\n */\nclass WS extends BaseWS {\n createSocket(uri, protocols, opts) {\n return !isReactNative\n ? protocols\n ? new WebSocketCtor(uri, protocols)\n : new WebSocketCtor(uri)\n : new WebSocketCtor(uri, protocols, opts);\n }\n doWrite(_packet, data) {\n this.ws.send(data);\n }\n}\nexports.WS = WS;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WT = void 0;\nconst transport_js_1 = require(\"../transport.js\");\nconst globals_node_js_1 = require(\"../globals.node.js\");\nconst engine_io_parser_1 = require(\"engine.io-parser\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:webtransport\"); // debug()\n/**\n * WebTransport transport based on the built-in `WebTransport` object.\n *\n * Usage: browser, Node.js (with the `@fails-components/webtransport` package)\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebTransport\n * @see https://caniuse.com/webtransport\n */\nclass WT extends transport_js_1.Transport {\n get name() {\n return \"webtransport\";\n }\n doOpen() {\n try {\n // @ts-ignore\n this._transport = new WebTransport(this.createUri(\"https\"), this.opts.transportOptions[this.name]);\n }\n catch (err) {\n return this.emitReserved(\"error\", err);\n }\n this._transport.closed\n .then(() => {\n debug(\"transport closed gracefully\");\n this.onClose();\n })\n .catch((err) => {\n debug(\"transport closed due to %s\", err);\n this.onError(\"webtransport error\", err);\n });\n // note: we could have used async/await, but that would require some additional polyfills\n this._transport.ready.then(() => {\n this._transport.createBidirectionalStream().then((stream) => {\n const decoderStream = (0, engine_io_parser_1.createPacketDecoderStream)(Number.MAX_SAFE_INTEGER, this.socket.binaryType);\n const reader = stream.readable.pipeThrough(decoderStream).getReader();\n const encoderStream = (0, engine_io_parser_1.createPacketEncoderStream)();\n encoderStream.readable.pipeTo(stream.writable);\n this._writer = encoderStream.writable.getWriter();\n const read = () => {\n reader\n .read()\n .then(({ done, value }) => {\n if (done) {\n debug(\"session is closed\");\n return;\n }\n debug(\"received chunk: %o\", value);\n this.onPacket(value);\n read();\n })\n .catch((err) => {\n debug(\"an error occurred while reading: %s\", err);\n });\n };\n read();\n const packet = { type: \"open\" };\n if (this.query.sid) {\n packet.data = `{\"sid\":\"${this.query.sid}\"}`;\n }\n this._writer.write(packet).then(() => this.onOpen());\n });\n });\n }\n write(packets) {\n this.writable = false;\n for (let i = 0; i < packets.length; i++) {\n const packet = packets[i];\n const lastPacket = i === packets.length - 1;\n this._writer.write(packet).then(() => {\n if (lastPacket) {\n (0, globals_node_js_1.nextTick)(() => {\n this.writable = true;\n this.emitReserved(\"drain\");\n }, this.setTimeoutFn);\n }\n });\n }\n }\n doClose() {\n var _a;\n (_a = this._transport) === null || _a === void 0 ? void 0 : _a.close();\n }\n}\nexports.WT = WT;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.transports = void 0;\nconst polling_xhr_node_js_1 = require(\"./polling-xhr.node.js\");\nconst websocket_node_js_1 = require(\"./websocket.node.js\");\nconst webtransport_js_1 = require(\"./webtransport.js\");\nexports.transports = {\n websocket: websocket_node_js_1.WS,\n webtransport: webtransport_js_1.WT,\n polling: polling_xhr_node_js_1.XHR,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parse = parse;\n// imported from https://github.com/galkn/parseuri\n/**\n * Parses a URI\n *\n * Note: we could also have used the built-in URL object, but it isn't supported on all platforms.\n *\n * See:\n * - https://developer.mozilla.org/en-US/docs/Web/API/URL\n * - https://caniuse.com/url\n * - https://www.rfc-editor.org/rfc/rfc3986#appendix-B\n *\n * History of the parse() method:\n * - first commit: https://github.com/socketio/socket.io-client/commit/4ee1d5d94b3906a9c052b459f1a818b15f38f91c\n * - export into its own module: https://github.com/socketio/engine.io-client/commit/de2c561e4564efeb78f1bdb1ba39ef81b2822cb3\n * - reimport: https://github.com/socketio/engine.io-client/commit/df32277c3f6d622eec5ed09f493cae3f3391d242\n *\n * @author Steven Levithan (MIT license)\n * @api private\n */\nconst re = /^(?:(?![^:@\\/?#]+:[^:@\\/]*@)(http|https|ws|wss):\\/\\/)?((?:(([^:@\\/?#]*)(?::([^:@\\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\nconst parts = [\n 'source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'\n];\nfunction parse(str) {\n if (str.length > 8000) {\n throw \"URI too long\";\n }\n const src = str, b = str.indexOf('['), e = str.indexOf(']');\n if (b != -1 && e != -1) {\n str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ';') + str.substring(e, str.length);\n }\n let m = re.exec(str || ''), uri = {}, i = 14;\n while (i--) {\n uri[parts[i]] = m[i] || '';\n }\n if (b != -1 && e != -1) {\n uri.source = src;\n uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ':');\n uri.authority = uri.authority.replace('[', '').replace(']', '').replace(/;/g, ':');\n uri.ipv6uri = true;\n }\n uri.pathNames = pathNames(uri, uri['path']);\n uri.queryKey = queryKey(uri, uri['query']);\n return uri;\n}\nfunction pathNames(obj, path) {\n const regx = /\\/{2,9}/g, names = path.replace(regx, \"/\").split(\"/\");\n if (path.slice(0, 1) == '/' || path.length === 0) {\n names.splice(0, 1);\n }\n if (path.slice(-1) == '/') {\n names.splice(names.length - 1, 1);\n }\n return names;\n}\nfunction queryKey(uri, query) {\n const data = {};\n query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, $1, $2) {\n if ($1) {\n data[$1] = $2;\n }\n });\n return data;\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Socket = exports.SocketWithUpgrade = exports.SocketWithoutUpgrade = void 0;\nconst index_js_1 = require(\"./transports/index.js\");\nconst util_js_1 = require(\"./util.js\");\nconst parseqs_js_1 = require(\"./contrib/parseqs.js\");\nconst parseuri_js_1 = require(\"./contrib/parseuri.js\");\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst engine_io_parser_1 = require(\"engine.io-parser\");\nconst globals_node_js_1 = require(\"./globals.node.js\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"engine.io-client:socket\"); // debug()\nconst withEventListeners = typeof addEventListener === \"function\" &&\n typeof removeEventListener === \"function\";\nconst OFFLINE_EVENT_LISTENERS = [];\nif (withEventListeners) {\n // within a ServiceWorker, any event handler for the 'offline' event must be added on the initial evaluation of the\n // script, so we create one single event listener here which will forward the event to the socket instances\n addEventListener(\"offline\", () => {\n debug(\"closing %d connection(s) because the network was lost\", OFFLINE_EVENT_LISTENERS.length);\n OFFLINE_EVENT_LISTENERS.forEach((listener) => listener());\n }, false);\n}\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes without upgrade mechanism, which means that it will keep the first low-level transport that\n * successfully establishes the connection.\n *\n * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory.\n *\n * @example\n * import { SocketWithoutUpgrade, WebSocket } from \"engine.io-client\";\n *\n * const socket = new SocketWithoutUpgrade({\n * transports: [WebSocket]\n * });\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithUpgrade\n * @see Socket\n */\nclass SocketWithoutUpgrade extends component_emitter_1.Emitter {\n /**\n * Socket constructor.\n *\n * @param {String|Object} uri - uri or options\n * @param {Object} opts - options\n */\n constructor(uri, opts) {\n super();\n this.binaryType = globals_node_js_1.defaultBinaryType;\n this.writeBuffer = [];\n this._prevBufferLen = 0;\n this._pingInterval = -1;\n this._pingTimeout = -1;\n this._maxPayload = -1;\n /**\n * The expiration timestamp of the {@link _pingTimeoutTimer} object is tracked, in case the timer is throttled and the\n * callback is not fired on time. This can happen for example when a laptop is suspended or when a phone is locked.\n */\n this._pingTimeoutTime = Infinity;\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = null;\n }\n if (uri) {\n const parsedUri = (0, parseuri_js_1.parse)(uri);\n opts.hostname = parsedUri.host;\n opts.secure =\n parsedUri.protocol === \"https\" || parsedUri.protocol === \"wss\";\n opts.port = parsedUri.port;\n if (parsedUri.query)\n opts.query = parsedUri.query;\n }\n else if (opts.host) {\n opts.hostname = (0, parseuri_js_1.parse)(opts.host).host;\n }\n (0, util_js_1.installTimerFunctions)(this, opts);\n this.secure =\n null != opts.secure\n ? opts.secure\n : typeof location !== \"undefined\" && \"https:\" === location.protocol;\n if (opts.hostname && !opts.port) {\n // if no port is specified manually, use the protocol default\n opts.port = this.secure ? \"443\" : \"80\";\n }\n this.hostname =\n opts.hostname ||\n (typeof location !== \"undefined\" ? location.hostname : \"localhost\");\n this.port =\n opts.port ||\n (typeof location !== \"undefined\" && location.port\n ? location.port\n : this.secure\n ? \"443\"\n : \"80\");\n this.transports = [];\n this._transportsByName = {};\n opts.transports.forEach((t) => {\n const transportName = t.prototype.name;\n this.transports.push(transportName);\n this._transportsByName[transportName] = t;\n });\n this.opts = Object.assign({\n path: \"/engine.io\",\n agent: false,\n withCredentials: false,\n upgrade: true,\n timestampParam: \"t\",\n rememberUpgrade: false,\n addTrailingSlash: true,\n rejectUnauthorized: true,\n perMessageDeflate: {\n threshold: 1024,\n },\n transportOptions: {},\n closeOnBeforeunload: false,\n }, opts);\n this.opts.path =\n this.opts.path.replace(/\\/$/, \"\") +\n (this.opts.addTrailingSlash ? \"/\" : \"\");\n if (typeof this.opts.query === \"string\") {\n this.opts.query = (0, parseqs_js_1.decode)(this.opts.query);\n }\n if (withEventListeners) {\n if (this.opts.closeOnBeforeunload) {\n // Firefox closes the connection when the \"beforeunload\" event is emitted but not Chrome. This event listener\n // ensures every browser behaves the same (no \"disconnect\" event at the Socket.IO level when the page is\n // closed/reloaded)\n this._beforeunloadEventListener = () => {\n if (this.transport) {\n // silently close the transport\n this.transport.removeAllListeners();\n this.transport.close();\n }\n };\n addEventListener(\"beforeunload\", this._beforeunloadEventListener, false);\n }\n if (this.hostname !== \"localhost\") {\n debug(\"adding listener for the 'offline' event\");\n this._offlineEventListener = () => {\n this._onClose(\"transport close\", {\n description: \"network connection lost\",\n });\n };\n OFFLINE_EVENT_LISTENERS.push(this._offlineEventListener);\n }\n }\n if (this.opts.withCredentials) {\n this._cookieJar = (0, globals_node_js_1.createCookieJar)();\n }\n this._open();\n }\n /**\n * Creates transport of the given type.\n *\n * @param {String} name - transport name\n * @return {Transport}\n * @private\n */\n createTransport(name) {\n debug('creating transport \"%s\"', name);\n const query = Object.assign({}, this.opts.query);\n // append engine.io protocol identifier\n query.EIO = engine_io_parser_1.protocol;\n // transport name\n query.transport = name;\n // session id if we already have one\n if (this.id)\n query.sid = this.id;\n const opts = Object.assign({}, this.opts, {\n query,\n socket: this,\n hostname: this.hostname,\n secure: this.secure,\n port: this.port,\n }, this.opts.transportOptions[name]);\n debug(\"options: %j\", opts);\n return new this._transportsByName[name](opts);\n }\n /**\n * Initializes transport to use and starts probe.\n *\n * @private\n */\n _open() {\n if (this.transports.length === 0) {\n // Emit error on next tick so it can be listened to\n this.setTimeoutFn(() => {\n this.emitReserved(\"error\", \"No transports available\");\n }, 0);\n return;\n }\n const transportName = this.opts.rememberUpgrade &&\n SocketWithoutUpgrade.priorWebsocketSuccess &&\n this.transports.indexOf(\"websocket\") !== -1\n ? \"websocket\"\n : this.transports[0];\n this.readyState = \"opening\";\n const transport = this.createTransport(transportName);\n transport.open();\n this.setTransport(transport);\n }\n /**\n * Sets the current transport. Disables the existing one (if any).\n *\n * @private\n */\n setTransport(transport) {\n debug(\"setting transport %s\", transport.name);\n if (this.transport) {\n debug(\"clearing existing transport %s\", this.transport.name);\n this.transport.removeAllListeners();\n }\n // set up transport\n this.transport = transport;\n // set up transport listeners\n transport\n .on(\"drain\", this._onDrain.bind(this))\n .on(\"packet\", this._onPacket.bind(this))\n .on(\"error\", this._onError.bind(this))\n .on(\"close\", (reason) => this._onClose(\"transport close\", reason));\n }\n /**\n * Called when connection is deemed open.\n *\n * @private\n */\n onOpen() {\n debug(\"socket open\");\n this.readyState = \"open\";\n SocketWithoutUpgrade.priorWebsocketSuccess =\n \"websocket\" === this.transport.name;\n this.emitReserved(\"open\");\n this.flush();\n }\n /**\n * Handles a packet.\n *\n * @private\n */\n _onPacket(packet) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n debug('socket receive: type \"%s\", data \"%s\"', packet.type, packet.data);\n this.emitReserved(\"packet\", packet);\n // Socket is live - any packet counts\n this.emitReserved(\"heartbeat\");\n switch (packet.type) {\n case \"open\":\n this.onHandshake(JSON.parse(packet.data));\n break;\n case \"ping\":\n this._sendPacket(\"pong\");\n this.emitReserved(\"ping\");\n this.emitReserved(\"pong\");\n this._resetPingTimeout();\n break;\n case \"error\":\n const err = new Error(\"server error\");\n // @ts-ignore\n err.code = packet.data;\n this._onError(err);\n break;\n case \"message\":\n this.emitReserved(\"data\", packet.data);\n this.emitReserved(\"message\", packet.data);\n break;\n }\n }\n else {\n debug('packet received with socket readyState \"%s\"', this.readyState);\n }\n }\n /**\n * Called upon handshake completion.\n *\n * @param {Object} data - handshake obj\n * @private\n */\n onHandshake(data) {\n this.emitReserved(\"handshake\", data);\n this.id = data.sid;\n this.transport.query.sid = data.sid;\n this._pingInterval = data.pingInterval;\n this._pingTimeout = data.pingTimeout;\n this._maxPayload = data.maxPayload;\n this.onOpen();\n // In case open handler closes socket\n if (\"closed\" === this.readyState)\n return;\n this._resetPingTimeout();\n }\n /**\n * Sets and resets ping timeout timer based on server pings.\n *\n * @private\n */\n _resetPingTimeout() {\n this.clearTimeoutFn(this._pingTimeoutTimer);\n const delay = this._pingInterval + this._pingTimeout;\n this._pingTimeoutTime = Date.now() + delay;\n this._pingTimeoutTimer = this.setTimeoutFn(() => {\n this._onClose(\"ping timeout\");\n }, delay);\n if (this.opts.autoUnref) {\n this._pingTimeoutTimer.unref();\n }\n }\n /**\n * Called on `drain` event\n *\n * @private\n */\n _onDrain() {\n this.writeBuffer.splice(0, this._prevBufferLen);\n // setting prevBufferLen = 0 is very important\n // for example, when upgrading, upgrade packet is sent over,\n // and a nonzero prevBufferLen could cause problems on `drain`\n this._prevBufferLen = 0;\n if (0 === this.writeBuffer.length) {\n this.emitReserved(\"drain\");\n }\n else {\n this.flush();\n }\n }\n /**\n * Flush write buffers.\n *\n * @private\n */\n flush() {\n if (\"closed\" !== this.readyState &&\n this.transport.writable &&\n !this.upgrading &&\n this.writeBuffer.length) {\n const packets = this._getWritablePackets();\n debug(\"flushing %d packets in socket\", packets.length);\n this.transport.send(packets);\n // keep track of current length of writeBuffer\n // splice writeBuffer and callbackBuffer on `drain`\n this._prevBufferLen = packets.length;\n this.emitReserved(\"flush\");\n }\n }\n /**\n * Ensure the encoded size of the writeBuffer is below the maxPayload value sent by the server (only for HTTP\n * long-polling)\n *\n * @private\n */\n _getWritablePackets() {\n const shouldCheckPayloadSize = this._maxPayload &&\n this.transport.name === \"polling\" &&\n this.writeBuffer.length > 1;\n if (!shouldCheckPayloadSize) {\n return this.writeBuffer;\n }\n let payloadSize = 1; // first packet type\n for (let i = 0; i < this.writeBuffer.length; i++) {\n const data = this.writeBuffer[i].data;\n if (data) {\n payloadSize += (0, util_js_1.byteLength)(data);\n }\n if (i > 0 && payloadSize > this._maxPayload) {\n debug(\"only send %d out of %d packets\", i, this.writeBuffer.length);\n return this.writeBuffer.slice(0, i);\n }\n payloadSize += 2; // separator + packet type\n }\n debug(\"payload size is %d (max: %d)\", payloadSize, this._maxPayload);\n return this.writeBuffer;\n }\n /**\n * Checks whether the heartbeat timer has expired but the socket has not yet been notified.\n *\n * Note: this method is private for now because it does not really fit the WebSocket API, but if we put it in the\n * `write()` method then the message would not be buffered by the Socket.IO client.\n *\n * @return {boolean}\n * @private\n */\n /* private */ _hasPingExpired() {\n if (!this._pingTimeoutTime)\n return true;\n const hasExpired = Date.now() > this._pingTimeoutTime;\n if (hasExpired) {\n debug(\"throttled timer detected, scheduling connection close\");\n this._pingTimeoutTime = 0;\n (0, globals_node_js_1.nextTick)(() => {\n this._onClose(\"ping timeout\");\n }, this.setTimeoutFn);\n }\n return hasExpired;\n }\n /**\n * Sends a message.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @return {Socket} for chaining.\n */\n write(msg, options, fn) {\n this._sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a message. Alias of {@link Socket#write}.\n *\n * @param {String} msg - message.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @return {Socket} for chaining.\n */\n send(msg, options, fn) {\n this._sendPacket(\"message\", msg, options, fn);\n return this;\n }\n /**\n * Sends a packet.\n *\n * @param {String} type: packet type.\n * @param {String} data.\n * @param {Object} options.\n * @param {Function} fn - callback function.\n * @private\n */\n _sendPacket(type, data, options, fn) {\n if (\"function\" === typeof data) {\n fn = data;\n data = undefined;\n }\n if (\"function\" === typeof options) {\n fn = options;\n options = null;\n }\n if (\"closing\" === this.readyState || \"closed\" === this.readyState) {\n return;\n }\n options = options || {};\n options.compress = false !== options.compress;\n const packet = {\n type: type,\n data: data,\n options: options,\n };\n this.emitReserved(\"packetCreate\", packet);\n this.writeBuffer.push(packet);\n if (fn)\n this.once(\"flush\", fn);\n this.flush();\n }\n /**\n * Closes the connection.\n */\n close() {\n const close = () => {\n this._onClose(\"forced close\");\n debug(\"socket closing - telling transport to close\");\n this.transport.close();\n };\n const cleanupAndClose = () => {\n this.off(\"upgrade\", cleanupAndClose);\n this.off(\"upgradeError\", cleanupAndClose);\n close();\n };\n const waitForUpgrade = () => {\n // wait for upgrade to finish since we can't send packets while pausing a transport\n this.once(\"upgrade\", cleanupAndClose);\n this.once(\"upgradeError\", cleanupAndClose);\n };\n if (\"opening\" === this.readyState || \"open\" === this.readyState) {\n this.readyState = \"closing\";\n if (this.writeBuffer.length) {\n this.once(\"drain\", () => {\n if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n });\n }\n else if (this.upgrading) {\n waitForUpgrade();\n }\n else {\n close();\n }\n }\n return this;\n }\n /**\n * Called upon transport error\n *\n * @private\n */\n _onError(err) {\n debug(\"socket error %j\", err);\n SocketWithoutUpgrade.priorWebsocketSuccess = false;\n if (this.opts.tryAllTransports &&\n this.transports.length > 1 &&\n this.readyState === \"opening\") {\n debug(\"trying next transport\");\n this.transports.shift();\n return this._open();\n }\n this.emitReserved(\"error\", err);\n this._onClose(\"transport error\", err);\n }\n /**\n * Called upon transport close.\n *\n * @private\n */\n _onClose(reason, description) {\n if (\"opening\" === this.readyState ||\n \"open\" === this.readyState ||\n \"closing\" === this.readyState) {\n debug('socket close with reason: \"%s\"', reason);\n // clear timers\n this.clearTimeoutFn(this._pingTimeoutTimer);\n // stop event from firing again for transport\n this.transport.removeAllListeners(\"close\");\n // ensure transport won't stay open\n this.transport.close();\n // ignore further transport communication\n this.transport.removeAllListeners();\n if (withEventListeners) {\n if (this._beforeunloadEventListener) {\n removeEventListener(\"beforeunload\", this._beforeunloadEventListener, false);\n }\n if (this._offlineEventListener) {\n const i = OFFLINE_EVENT_LISTENERS.indexOf(this._offlineEventListener);\n if (i !== -1) {\n debug(\"removing listener for the 'offline' event\");\n OFFLINE_EVENT_LISTENERS.splice(i, 1);\n }\n }\n }\n // set ready state\n this.readyState = \"closed\";\n // clear session id\n this.id = null;\n // emit close event\n this.emitReserved(\"close\", reason, description);\n // clean buffers after, so users can still\n // grab the buffers on `close` event\n this.writeBuffer = [];\n this._prevBufferLen = 0;\n }\n }\n}\nexports.SocketWithoutUpgrade = SocketWithoutUpgrade;\nSocketWithoutUpgrade.protocol = engine_io_parser_1.protocol;\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes with an upgrade mechanism, which means that once the connection is established with the first\n * low-level transport, it will try to upgrade to a better transport.\n *\n * In order to allow tree-shaking, there are no transports included, that's why the `transports` option is mandatory.\n *\n * @example\n * import { SocketWithUpgrade, WebSocket } from \"engine.io-client\";\n *\n * const socket = new SocketWithUpgrade({\n * transports: [WebSocket]\n * });\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithoutUpgrade\n * @see Socket\n */\nclass SocketWithUpgrade extends SocketWithoutUpgrade {\n constructor() {\n super(...arguments);\n this._upgrades = [];\n }\n onOpen() {\n super.onOpen();\n if (\"open\" === this.readyState && this.opts.upgrade) {\n debug(\"starting upgrade probes\");\n for (let i = 0; i < this._upgrades.length; i++) {\n this._probe(this._upgrades[i]);\n }\n }\n }\n /**\n * Probes a transport.\n *\n * @param {String} name - transport name\n * @private\n */\n _probe(name) {\n debug('probing transport \"%s\"', name);\n let transport = this.createTransport(name);\n let failed = false;\n SocketWithoutUpgrade.priorWebsocketSuccess = false;\n const onTransportOpen = () => {\n if (failed)\n return;\n debug('probe transport \"%s\" opened', name);\n transport.send([{ type: \"ping\", data: \"probe\" }]);\n transport.once(\"packet\", (msg) => {\n if (failed)\n return;\n if (\"pong\" === msg.type && \"probe\" === msg.data) {\n debug('probe transport \"%s\" pong', name);\n this.upgrading = true;\n this.emitReserved(\"upgrading\", transport);\n if (!transport)\n return;\n SocketWithoutUpgrade.priorWebsocketSuccess =\n \"websocket\" === transport.name;\n debug('pausing current transport \"%s\"', this.transport.name);\n this.transport.pause(() => {\n if (failed)\n return;\n if (\"closed\" === this.readyState)\n return;\n debug(\"changing transport and sending upgrade packet\");\n cleanup();\n this.setTransport(transport);\n transport.send([{ type: \"upgrade\" }]);\n this.emitReserved(\"upgrade\", transport);\n transport = null;\n this.upgrading = false;\n this.flush();\n });\n }\n else {\n debug('probe transport \"%s\" failed', name);\n const err = new Error(\"probe error\");\n // @ts-ignore\n err.transport = transport.name;\n this.emitReserved(\"upgradeError\", err);\n }\n });\n };\n function freezeTransport() {\n if (failed)\n return;\n // Any callback called by transport should be ignored since now\n failed = true;\n cleanup();\n transport.close();\n transport = null;\n }\n // Handle any error that happens while probing\n const onerror = (err) => {\n const error = new Error(\"probe error: \" + err);\n // @ts-ignore\n error.transport = transport.name;\n freezeTransport();\n debug('probe transport \"%s\" failed because of error: %s', name, err);\n this.emitReserved(\"upgradeError\", error);\n };\n function onTransportClose() {\n onerror(\"transport closed\");\n }\n // When the socket is closed while we're probing\n function onclose() {\n onerror(\"socket closed\");\n }\n // When the socket is upgraded while we're probing\n function onupgrade(to) {\n if (transport && to.name !== transport.name) {\n debug('\"%s\" works - aborting \"%s\"', to.name, transport.name);\n freezeTransport();\n }\n }\n // Remove all listeners on the transport and on self\n const cleanup = () => {\n transport.removeListener(\"open\", onTransportOpen);\n transport.removeListener(\"error\", onerror);\n transport.removeListener(\"close\", onTransportClose);\n this.off(\"close\", onclose);\n this.off(\"upgrading\", onupgrade);\n };\n transport.once(\"open\", onTransportOpen);\n transport.once(\"error\", onerror);\n transport.once(\"close\", onTransportClose);\n this.once(\"close\", onclose);\n this.once(\"upgrading\", onupgrade);\n if (this._upgrades.indexOf(\"webtransport\") !== -1 &&\n name !== \"webtransport\") {\n // favor WebTransport\n this.setTimeoutFn(() => {\n if (!failed) {\n transport.open();\n }\n }, 200);\n }\n else {\n transport.open();\n }\n }\n onHandshake(data) {\n this._upgrades = this._filterUpgrades(data.upgrades);\n super.onHandshake(data);\n }\n /**\n * Filters upgrades, returning only those matching client transports.\n *\n * @param {Array} upgrades - server upgrades\n * @private\n */\n _filterUpgrades(upgrades) {\n const filteredUpgrades = [];\n for (let i = 0; i < upgrades.length; i++) {\n if (~this.transports.indexOf(upgrades[i]))\n filteredUpgrades.push(upgrades[i]);\n }\n return filteredUpgrades;\n }\n}\nexports.SocketWithUpgrade = SocketWithUpgrade;\n/**\n * This class provides a WebSocket-like interface to connect to an Engine.IO server. The connection will be established\n * with one of the available low-level transports, like HTTP long-polling, WebSocket or WebTransport.\n *\n * This class comes with an upgrade mechanism, which means that once the connection is established with the first\n * low-level transport, it will try to upgrade to a better transport.\n *\n * @example\n * import { Socket } from \"engine.io-client\";\n *\n * const socket = new Socket();\n *\n * socket.on(\"open\", () => {\n * socket.send(\"hello\");\n * });\n *\n * @see SocketWithoutUpgrade\n * @see SocketWithUpgrade\n */\nclass Socket extends SocketWithUpgrade {\n constructor(uri, opts = {}) {\n const o = typeof uri === \"object\" ? uri : opts;\n if (!o.transports ||\n (o.transports && typeof o.transports[0] === \"string\")) {\n o.transports = (o.transports || [\"polling\", \"websocket\", \"webtransport\"])\n .map((transportName) => index_js_1.transports[transportName])\n .filter((t) => !!t);\n }\n super(uri, o);\n }\n}\nexports.Socket = Socket;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Fetch = void 0;\nconst polling_js_1 = require(\"./polling.js\");\n/**\n * HTTP long-polling based on the built-in `fetch()` method.\n *\n * Usage: browser, Node.js (since v18), Deno, Bun\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/fetch\n * @see https://caniuse.com/fetch\n * @see https://nodejs.org/api/globals.html#fetch\n */\nclass Fetch extends polling_js_1.Polling {\n doPoll() {\n this._fetch()\n .then((res) => {\n if (!res.ok) {\n return this.onError(\"fetch read error\", res.status, res);\n }\n res.text().then((data) => this.onData(data));\n })\n .catch((err) => {\n this.onError(\"fetch read error\", err);\n });\n }\n doWrite(data, callback) {\n this._fetch(data)\n .then((res) => {\n if (!res.ok) {\n return this.onError(\"fetch write error\", res.status, res);\n }\n callback();\n })\n .catch((err) => {\n this.onError(\"fetch write error\", err);\n });\n }\n _fetch(data) {\n var _a;\n const isPost = data !== undefined;\n const headers = new Headers(this.opts.extraHeaders);\n if (isPost) {\n headers.set(\"content-type\", \"text/plain;charset=UTF-8\");\n }\n (_a = this.socket._cookieJar) === null || _a === void 0 ? void 0 : _a.appendCookies(headers);\n return fetch(this.uri(), {\n method: isPost ? \"POST\" : \"GET\",\n body: isPost ? data : null,\n headers,\n credentials: this.opts.withCredentials ? \"include\" : \"omit\",\n }).then((res) => {\n var _a;\n // @ts-ignore getSetCookie() was added in Node.js v19.7.0\n (_a = this.socket._cookieJar) === null || _a === void 0 ? void 0 : _a.parseCookies(res.headers.getSetCookie());\n return res;\n });\n }\n}\nexports.Fetch = Fetch;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WebTransport = exports.WebSocket = exports.NodeWebSocket = exports.XHR = exports.NodeXHR = exports.Fetch = exports.nextTick = exports.parse = exports.installTimerFunctions = exports.transports = exports.TransportError = exports.Transport = exports.protocol = exports.SocketWithUpgrade = exports.SocketWithoutUpgrade = exports.Socket = void 0;\nconst socket_js_1 = require(\"./socket.js\");\nObject.defineProperty(exports, \"Socket\", { enumerable: true, get: function () { return socket_js_1.Socket; } });\nvar socket_js_2 = require(\"./socket.js\");\nObject.defineProperty(exports, \"SocketWithoutUpgrade\", { enumerable: true, get: function () { return socket_js_2.SocketWithoutUpgrade; } });\nObject.defineProperty(exports, \"SocketWithUpgrade\", { enumerable: true, get: function () { return socket_js_2.SocketWithUpgrade; } });\nexports.protocol = socket_js_1.Socket.protocol;\nvar transport_js_1 = require(\"./transport.js\");\nObject.defineProperty(exports, \"Transport\", { enumerable: true, get: function () { return transport_js_1.Transport; } });\nObject.defineProperty(exports, \"TransportError\", { enumerable: true, get: function () { return transport_js_1.TransportError; } });\nvar index_js_1 = require(\"./transports/index.js\");\nObject.defineProperty(exports, \"transports\", { enumerable: true, get: function () { return index_js_1.transports; } });\nvar util_js_1 = require(\"./util.js\");\nObject.defineProperty(exports, \"installTimerFunctions\", { enumerable: true, get: function () { return util_js_1.installTimerFunctions; } });\nvar parseuri_js_1 = require(\"./contrib/parseuri.js\");\nObject.defineProperty(exports, \"parse\", { enumerable: true, get: function () { return parseuri_js_1.parse; } });\nvar globals_node_js_1 = require(\"./globals.node.js\");\nObject.defineProperty(exports, \"nextTick\", { enumerable: true, get: function () { return globals_node_js_1.nextTick; } });\nvar polling_fetch_js_1 = require(\"./transports/polling-fetch.js\");\nObject.defineProperty(exports, \"Fetch\", { enumerable: true, get: function () { return polling_fetch_js_1.Fetch; } });\nvar polling_xhr_node_js_1 = require(\"./transports/polling-xhr.node.js\");\nObject.defineProperty(exports, \"NodeXHR\", { enumerable: true, get: function () { return polling_xhr_node_js_1.XHR; } });\nvar polling_xhr_js_1 = require(\"./transports/polling-xhr.js\");\nObject.defineProperty(exports, \"XHR\", { enumerable: true, get: function () { return polling_xhr_js_1.XHR; } });\nvar websocket_node_js_1 = require(\"./transports/websocket.node.js\");\nObject.defineProperty(exports, \"NodeWebSocket\", { enumerable: true, get: function () { return websocket_node_js_1.WS; } });\nvar websocket_js_1 = require(\"./transports/websocket.js\");\nObject.defineProperty(exports, \"WebSocket\", { enumerable: true, get: function () { return websocket_js_1.WS; } });\nvar webtransport_js_1 = require(\"./transports/webtransport.js\");\nObject.defineProperty(exports, \"WebTransport\", { enumerable: true, get: function () { return webtransport_js_1.WT; } });\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.url = url;\nconst engine_io_client_1 = require(\"engine.io-client\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"socket.io-client:url\"); // debug()\n/**\n * URL parser.\n *\n * @param uri - url\n * @param path - the request path of the connection\n * @param loc - An object meant to mimic window.location.\n * Defaults to window.location.\n * @public\n */\nfunction url(uri, path = \"\", loc) {\n let obj = uri;\n // default to window.location\n loc = loc || (typeof location !== \"undefined\" && location);\n if (null == uri)\n uri = loc.protocol + \"//\" + loc.host;\n // relative path support\n if (typeof uri === \"string\") {\n if (\"/\" === uri.charAt(0)) {\n if (\"/\" === uri.charAt(1)) {\n uri = loc.protocol + uri;\n }\n else {\n uri = loc.host + uri;\n }\n }\n if (!/^(https?|wss?):\\/\\//.test(uri)) {\n debug(\"protocol-less url %s\", uri);\n if (\"undefined\" !== typeof loc) {\n uri = loc.protocol + \"//\" + uri;\n }\n else {\n uri = \"https://\" + uri;\n }\n }\n // parse\n debug(\"parse %s\", uri);\n obj = (0, engine_io_client_1.parse)(uri);\n }\n // make sure we treat `localhost:80` and `localhost` equally\n if (!obj.port) {\n if (/^(http|ws)$/.test(obj.protocol)) {\n obj.port = \"80\";\n }\n else if (/^(http|ws)s$/.test(obj.protocol)) {\n obj.port = \"443\";\n }\n }\n obj.path = obj.path || \"/\";\n const ipv6 = obj.host.indexOf(\":\") !== -1;\n const host = ipv6 ? \"[\" + obj.host + \"]\" : obj.host;\n // define unique id\n obj.id = obj.protocol + \"://\" + host + \":\" + obj.port + path;\n // define href\n obj.href =\n obj.protocol +\n \"://\" +\n host +\n (loc && loc.port === obj.port ? \"\" : \":\" + obj.port);\n return obj;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasBinary = exports.isBinary = void 0;\nconst withNativeArrayBuffer = typeof ArrayBuffer === \"function\";\nconst isView = (obj) => {\n return typeof ArrayBuffer.isView === \"function\"\n ? ArrayBuffer.isView(obj)\n : obj.buffer instanceof ArrayBuffer;\n};\nconst toString = Object.prototype.toString;\nconst withNativeBlob = typeof Blob === \"function\" ||\n (typeof Blob !== \"undefined\" &&\n toString.call(Blob) === \"[object BlobConstructor]\");\nconst withNativeFile = typeof File === \"function\" ||\n (typeof File !== \"undefined\" &&\n toString.call(File) === \"[object FileConstructor]\");\n/**\n * Returns true if obj is a Buffer, an ArrayBuffer, a Blob or a File.\n *\n * @private\n */\nfunction isBinary(obj) {\n return ((withNativeArrayBuffer && (obj instanceof ArrayBuffer || isView(obj))) ||\n (withNativeBlob && obj instanceof Blob) ||\n (withNativeFile && obj instanceof File));\n}\nexports.isBinary = isBinary;\nfunction hasBinary(obj, toJSON) {\n if (!obj || typeof obj !== \"object\") {\n return false;\n }\n if (Array.isArray(obj)) {\n for (let i = 0, l = obj.length; i < l; i++) {\n if (hasBinary(obj[i])) {\n return true;\n }\n }\n return false;\n }\n if (isBinary(obj)) {\n return true;\n }\n if (obj.toJSON &&\n typeof obj.toJSON === \"function\" &&\n arguments.length === 1) {\n return hasBinary(obj.toJSON(), true);\n }\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) {\n return true;\n }\n }\n return false;\n}\nexports.hasBinary = hasBinary;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.reconstructPacket = exports.deconstructPacket = void 0;\nconst is_binary_js_1 = require(\"./is-binary.js\");\n/**\n * Replaces every Buffer | ArrayBuffer | Blob | File in packet with a numbered placeholder.\n *\n * @param {Object} packet - socket.io event packet\n * @return {Object} with deconstructed packet and list of buffers\n * @public\n */\nfunction deconstructPacket(packet) {\n const buffers = [];\n const packetData = packet.data;\n const pack = packet;\n pack.data = _deconstructPacket(packetData, buffers);\n pack.attachments = buffers.length; // number of binary 'attachments'\n return { packet: pack, buffers: buffers };\n}\nexports.deconstructPacket = deconstructPacket;\nfunction _deconstructPacket(data, buffers) {\n if (!data)\n return data;\n if ((0, is_binary_js_1.isBinary)(data)) {\n const placeholder = { _placeholder: true, num: buffers.length };\n buffers.push(data);\n return placeholder;\n }\n else if (Array.isArray(data)) {\n const newData = new Array(data.length);\n for (let i = 0; i < data.length; i++) {\n newData[i] = _deconstructPacket(data[i], buffers);\n }\n return newData;\n }\n else if (typeof data === \"object\" && !(data instanceof Date)) {\n const newData = {};\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n newData[key] = _deconstructPacket(data[key], buffers);\n }\n }\n return newData;\n }\n return data;\n}\n/**\n * Reconstructs a binary packet from its placeholder packet and buffers\n *\n * @param {Object} packet - event packet with placeholders\n * @param {Array} buffers - binary buffers to put in placeholder positions\n * @return {Object} reconstructed packet\n * @public\n */\nfunction reconstructPacket(packet, buffers) {\n packet.data = _reconstructPacket(packet.data, buffers);\n delete packet.attachments; // no longer useful\n return packet;\n}\nexports.reconstructPacket = reconstructPacket;\nfunction _reconstructPacket(data, buffers) {\n if (!data)\n return data;\n if (data && data._placeholder === true) {\n const isIndexValid = typeof data.num === \"number\" &&\n data.num >= 0 &&\n data.num < buffers.length;\n if (isIndexValid) {\n return buffers[data.num]; // appropriate buffer (should be natural order anyway)\n }\n else {\n throw new Error(\"illegal attachments\");\n }\n }\n else if (Array.isArray(data)) {\n for (let i = 0; i < data.length; i++) {\n data[i] = _reconstructPacket(data[i], buffers);\n }\n }\n else if (typeof data === \"object\") {\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n data[key] = _reconstructPacket(data[key], buffers);\n }\n }\n }\n return data;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Decoder = exports.Encoder = exports.PacketType = exports.protocol = void 0;\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst binary_js_1 = require(\"./binary.js\");\nconst is_binary_js_1 = require(\"./is-binary.js\");\nconst debug_1 = require(\"debug\"); // debug()\nconst debug = (0, debug_1.default)(\"socket.io-parser\"); // debug()\n/**\n * These strings must not be used as event names, as they have a special meaning.\n */\nconst RESERVED_EVENTS = [\n \"connect\",\n \"connect_error\",\n \"disconnect\",\n \"disconnecting\",\n \"newListener\",\n \"removeListener\", // used by the Node.js EventEmitter\n];\n/**\n * Protocol version.\n *\n * @public\n */\nexports.protocol = 5;\nvar PacketType;\n(function (PacketType) {\n PacketType[PacketType[\"CONNECT\"] = 0] = \"CONNECT\";\n PacketType[PacketType[\"DISCONNECT\"] = 1] = \"DISCONNECT\";\n PacketType[PacketType[\"EVENT\"] = 2] = \"EVENT\";\n PacketType[PacketType[\"ACK\"] = 3] = \"ACK\";\n PacketType[PacketType[\"CONNECT_ERROR\"] = 4] = \"CONNECT_ERROR\";\n PacketType[PacketType[\"BINARY_EVENT\"] = 5] = \"BINARY_EVENT\";\n PacketType[PacketType[\"BINARY_ACK\"] = 6] = \"BINARY_ACK\";\n})(PacketType = exports.PacketType || (exports.PacketType = {}));\n/**\n * A socket.io Encoder instance\n */\nclass Encoder {\n /**\n * Encoder constructor\n *\n * @param {function} replacer - custom replacer to pass down to JSON.parse\n */\n constructor(replacer) {\n this.replacer = replacer;\n }\n /**\n * Encode a packet as a single string if non-binary, or as a\n * buffer sequence, depending on packet type.\n *\n * @param {Object} obj - packet object\n */\n encode(obj) {\n debug(\"encoding packet %j\", obj);\n if (obj.type === PacketType.EVENT || obj.type === PacketType.ACK) {\n if ((0, is_binary_js_1.hasBinary)(obj)) {\n return this.encodeAsBinary({\n type: obj.type === PacketType.EVENT\n ? PacketType.BINARY_EVENT\n : PacketType.BINARY_ACK,\n nsp: obj.nsp,\n data: obj.data,\n id: obj.id,\n });\n }\n }\n return [this.encodeAsString(obj)];\n }\n /**\n * Encode packet as string.\n */\n encodeAsString(obj) {\n // first is type\n let str = \"\" + obj.type;\n // attachments if we have them\n if (obj.type === PacketType.BINARY_EVENT ||\n obj.type === PacketType.BINARY_ACK) {\n str += obj.attachments + \"-\";\n }\n // if we have a namespace other than `/`\n // we append it followed by a comma `,`\n if (obj.nsp && \"/\" !== obj.nsp) {\n str += obj.nsp + \",\";\n }\n // immediately followed by the id\n if (null != obj.id) {\n str += obj.id;\n }\n // json data\n if (null != obj.data) {\n str += JSON.stringify(obj.data, this.replacer);\n }\n debug(\"encoded %j as %s\", obj, str);\n return str;\n }\n /**\n * Encode packet as 'buffer sequence' by removing blobs, and\n * deconstructing packet into object with placeholders and\n * a list of buffers.\n */\n encodeAsBinary(obj) {\n const deconstruction = (0, binary_js_1.deconstructPacket)(obj);\n const pack = this.encodeAsString(deconstruction.packet);\n const buffers = deconstruction.buffers;\n buffers.unshift(pack); // add packet info to beginning of data list\n return buffers; // write all the buffers\n }\n}\nexports.Encoder = Encoder;\n// see https://stackoverflow.com/questions/8511281/check-if-a-value-is-an-object-in-javascript\nfunction isObject(value) {\n return Object.prototype.toString.call(value) === \"[object Object]\";\n}\n/**\n * A socket.io Decoder instance\n *\n * @return {Object} decoder\n */\nclass Decoder extends component_emitter_1.Emitter {\n /**\n * Decoder constructor\n *\n * @param {function} reviver - custom reviver to pass down to JSON.stringify\n */\n constructor(reviver) {\n super();\n this.reviver = reviver;\n }\n /**\n * Decodes an encoded packet string into packet JSON.\n *\n * @param {String} obj - encoded packet\n */\n add(obj) {\n let packet;\n if (typeof obj === \"string\") {\n if (this.reconstructor) {\n throw new Error(\"got plaintext data when reconstructing a packet\");\n }\n packet = this.decodeString(obj);\n const isBinaryEvent = packet.type === PacketType.BINARY_EVENT;\n if (isBinaryEvent || packet.type === PacketType.BINARY_ACK) {\n packet.type = isBinaryEvent ? PacketType.EVENT : PacketType.ACK;\n // binary packet's json\n this.reconstructor = new BinaryReconstructor(packet);\n // no attachments, labeled binary but no binary data to follow\n if (packet.attachments === 0) {\n super.emitReserved(\"decoded\", packet);\n }\n }\n else {\n // non-binary full packet\n super.emitReserved(\"decoded\", packet);\n }\n }\n else if ((0, is_binary_js_1.isBinary)(obj) || obj.base64) {\n // raw binary data\n if (!this.reconstructor) {\n throw new Error(\"got binary data when not reconstructing a packet\");\n }\n else {\n packet = this.reconstructor.takeBinaryData(obj);\n if (packet) {\n // received final buffer\n this.reconstructor = null;\n super.emitReserved(\"decoded\", packet);\n }\n }\n }\n else {\n throw new Error(\"Unknown type: \" + obj);\n }\n }\n /**\n * Decode a packet String (JSON data)\n *\n * @param {String} str\n * @return {Object} packet\n */\n decodeString(str) {\n let i = 0;\n // look up type\n const p = {\n type: Number(str.charAt(0)),\n };\n if (PacketType[p.type] === undefined) {\n throw new Error(\"unknown packet type \" + p.type);\n }\n // look up attachments if type binary\n if (p.type === PacketType.BINARY_EVENT ||\n p.type === PacketType.BINARY_ACK) {\n const start = i + 1;\n while (str.charAt(++i) !== \"-\" && i != str.length) { }\n const buf = str.substring(start, i);\n if (buf != Number(buf) || str.charAt(i) !== \"-\") {\n throw new Error(\"Illegal attachments\");\n }\n p.attachments = Number(buf);\n }\n // look up namespace (if any)\n if (\"/\" === str.charAt(i + 1)) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (\",\" === c)\n break;\n if (i === str.length)\n break;\n }\n p.nsp = str.substring(start, i);\n }\n else {\n p.nsp = \"/\";\n }\n // look up id\n const next = str.charAt(i + 1);\n if (\"\" !== next && Number(next) == next) {\n const start = i + 1;\n while (++i) {\n const c = str.charAt(i);\n if (null == c || Number(c) != c) {\n --i;\n break;\n }\n if (i === str.length)\n break;\n }\n p.id = Number(str.substring(start, i + 1));\n }\n // look up json data\n if (str.charAt(++i)) {\n const payload = this.tryParse(str.substr(i));\n if (Decoder.isPayloadValid(p.type, payload)) {\n p.data = payload;\n }\n else {\n throw new Error(\"invalid payload\");\n }\n }\n debug(\"decoded %s as %j\", str, p);\n return p;\n }\n tryParse(str) {\n try {\n return JSON.parse(str, this.reviver);\n }\n catch (e) {\n return false;\n }\n }\n static isPayloadValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return isObject(payload);\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || isObject(payload);\n case PacketType.EVENT:\n case PacketType.BINARY_EVENT:\n return (Array.isArray(payload) &&\n (typeof payload[0] === \"number\" ||\n (typeof payload[0] === \"string\" &&\n RESERVED_EVENTS.indexOf(payload[0]) === -1)));\n case PacketType.ACK:\n case PacketType.BINARY_ACK:\n return Array.isArray(payload);\n }\n }\n /**\n * Deallocates a parser's resources\n */\n destroy() {\n if (this.reconstructor) {\n this.reconstructor.finishedReconstruction();\n this.reconstructor = null;\n }\n }\n}\nexports.Decoder = Decoder;\n/**\n * A manager of a binary event's 'buffer sequence'. Should\n * be constructed whenever a packet of type BINARY_EVENT is\n * decoded.\n *\n * @param {Object} packet\n * @return {BinaryReconstructor} initialized reconstructor\n */\nclass BinaryReconstructor {\n constructor(packet) {\n this.packet = packet;\n this.buffers = [];\n this.reconPack = packet;\n }\n /**\n * Method to be called when binary data received from connection\n * after a BINARY_EVENT packet.\n *\n * @param {Buffer | ArrayBuffer} binData - the raw binary data received\n * @return {null | Object} returns null if more binary data is expected or\n * a reconstructed packet object if all buffers have been received.\n */\n takeBinaryData(binData) {\n this.buffers.push(binData);\n if (this.buffers.length === this.reconPack.attachments) {\n // done with buffer list\n const packet = (0, binary_js_1.reconstructPacket)(this.reconPack, this.buffers);\n this.finishedReconstruction();\n return packet;\n }\n return null;\n }\n /**\n * Cleans up binary packet reconstruction variables.\n */\n finishedReconstruction() {\n this.reconPack = null;\n this.buffers = [];\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.on = on;\nfunction on(obj, ev, fn) {\n obj.on(ev, fn);\n return function subDestroy() {\n obj.off(ev, fn);\n };\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Socket = void 0;\nconst socket_io_parser_1 = require(\"socket.io-parser\");\nconst on_js_1 = require(\"./on.js\");\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"socket.io-client:socket\"); // debug()\n/**\n * Internal events.\n * These events can't be emitted by the user.\n */\nconst RESERVED_EVENTS = Object.freeze({\n connect: 1,\n connect_error: 1,\n disconnect: 1,\n disconnecting: 1,\n // EventEmitter reserved events: https://nodejs.org/api/events.html#events_event_newlistener\n newListener: 1,\n removeListener: 1,\n});\n/**\n * A Socket is the fundamental class for interacting with the server.\n *\n * A Socket belongs to a certain Namespace (by default /) and uses an underlying {@link Manager} to communicate.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(\"connected\");\n * });\n *\n * // send an event to the server\n * socket.emit(\"foo\", \"bar\");\n *\n * socket.on(\"foobar\", () => {\n * // an event was received from the server\n * });\n *\n * // upon disconnection\n * socket.on(\"disconnect\", (reason) => {\n * console.log(`disconnected due to ${reason}`);\n * });\n */\nclass Socket extends component_emitter_1.Emitter {\n /**\n * `Socket` constructor.\n */\n constructor(io, nsp, opts) {\n super();\n /**\n * Whether the socket is currently connected to the server.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.connected); // true\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.connected); // false\n * });\n */\n this.connected = false;\n /**\n * Whether the connection state was recovered after a temporary disconnection. In that case, any missed packets will\n * be transmitted by the server.\n */\n this.recovered = false;\n /**\n * Buffer for packets received before the CONNECT packet\n */\n this.receiveBuffer = [];\n /**\n * Buffer for packets that will be sent once the socket is connected\n */\n this.sendBuffer = [];\n /**\n * The queue of packets to be sent with retry in case of failure.\n *\n * Packets are sent one by one, each waiting for the server acknowledgement, in order to guarantee the delivery order.\n * @private\n */\n this._queue = [];\n /**\n * A sequence to generate the ID of the {@link QueuedPacket}.\n * @private\n */\n this._queueSeq = 0;\n this.ids = 0;\n /**\n * A map containing acknowledgement handlers.\n *\n * The `withError` attribute is used to differentiate handlers that accept an error as first argument:\n *\n * - `socket.emit(\"test\", (err, value) => { ... })` with `ackTimeout` option\n * - `socket.timeout(5000).emit(\"test\", (err, value) => { ... })`\n * - `const value = await socket.emitWithAck(\"test\")`\n *\n * From those that don't:\n *\n * - `socket.emit(\"test\", (value) => { ... });`\n *\n * In the first case, the handlers will be called with an error when:\n *\n * - the timeout is reached\n * - the socket gets disconnected\n *\n * In the second case, the handlers will be simply discarded upon disconnection, since the client will never receive\n * an acknowledgement from the server.\n *\n * @private\n */\n this.acks = {};\n this.flags = {};\n this.io = io;\n this.nsp = nsp;\n if (opts && opts.auth) {\n this.auth = opts.auth;\n }\n this._opts = Object.assign({}, opts);\n if (this.io._autoConnect)\n this.open();\n }\n /**\n * Whether the socket is currently disconnected\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"connect\", () => {\n * console.log(socket.disconnected); // false\n * });\n *\n * socket.on(\"disconnect\", () => {\n * console.log(socket.disconnected); // true\n * });\n */\n get disconnected() {\n return !this.connected;\n }\n /**\n * Subscribe to open, close and packet events\n *\n * @private\n */\n subEvents() {\n if (this.subs)\n return;\n const io = this.io;\n this.subs = [\n (0, on_js_1.on)(io, \"open\", this.onopen.bind(this)),\n (0, on_js_1.on)(io, \"packet\", this.onpacket.bind(this)),\n (0, on_js_1.on)(io, \"error\", this.onerror.bind(this)),\n (0, on_js_1.on)(io, \"close\", this.onclose.bind(this)),\n ];\n }\n /**\n * Whether the Socket will try to reconnect when its Manager connects or reconnects.\n *\n * @example\n * const socket = io();\n *\n * console.log(socket.active); // true\n *\n * socket.on(\"disconnect\", (reason) => {\n * if (reason === \"io server disconnect\") {\n * // the disconnection was initiated by the server, you need to manually reconnect\n * console.log(socket.active); // false\n * }\n * // else the socket will automatically try to reconnect\n * console.log(socket.active); // true\n * });\n */\n get active() {\n return !!this.subs;\n }\n /**\n * \"Opens\" the socket.\n *\n * @example\n * const socket = io({\n * autoConnect: false\n * });\n *\n * socket.connect();\n */\n connect() {\n if (this.connected)\n return this;\n this.subEvents();\n if (!this.io[\"_reconnecting\"])\n this.io.open(); // ensure open\n if (\"open\" === this.io._readyState)\n this.onopen();\n return this;\n }\n /**\n * Alias for {@link connect()}.\n */\n open() {\n return this.connect();\n }\n /**\n * Sends a `message` event.\n *\n * This method mimics the WebSocket.send() method.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/send\n *\n * @example\n * socket.send(\"hello\");\n *\n * // this is equivalent to\n * socket.emit(\"message\", \"hello\");\n *\n * @return self\n */\n send(...args) {\n args.unshift(\"message\");\n this.emit.apply(this, args);\n return this;\n }\n /**\n * Override `emit`.\n * If the event is in `events`, it's emitted normally.\n *\n * @example\n * socket.emit(\"hello\", \"world\");\n *\n * // all serializable datastructures are supported (no need to call JSON.stringify)\n * socket.emit(\"hello\", 1, \"2\", { 3: [\"4\"], 5: Uint8Array.from([6]) });\n *\n * // with an acknowledgement from the server\n * socket.emit(\"hello\", \"world\", (val) => {\n * // ...\n * });\n *\n * @return self\n */\n emit(ev, ...args) {\n var _a, _b, _c;\n if (RESERVED_EVENTS.hasOwnProperty(ev)) {\n throw new Error('\"' + ev.toString() + '\" is a reserved event name');\n }\n args.unshift(ev);\n if (this._opts.retries && !this.flags.fromQueue && !this.flags.volatile) {\n this._addToQueue(args);\n return this;\n }\n const packet = {\n type: socket_io_parser_1.PacketType.EVENT,\n data: args,\n };\n packet.options = {};\n packet.options.compress = this.flags.compress !== false;\n // event ack callback\n if (\"function\" === typeof args[args.length - 1]) {\n const id = this.ids++;\n debug(\"emitting packet with ack id %d\", id);\n const ack = args.pop();\n this._registerAckCallback(id, ack);\n packet.id = id;\n }\n const isTransportWritable = (_b = (_a = this.io.engine) === null || _a === void 0 ? void 0 : _a.transport) === null || _b === void 0 ? void 0 : _b.writable;\n const isConnected = this.connected && !((_c = this.io.engine) === null || _c === void 0 ? void 0 : _c._hasPingExpired());\n const discardPacket = this.flags.volatile && !isTransportWritable;\n if (discardPacket) {\n debug(\"discard packet as the transport is not currently writable\");\n }\n else if (isConnected) {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n }\n else {\n this.sendBuffer.push(packet);\n }\n this.flags = {};\n return this;\n }\n /**\n * @private\n */\n _registerAckCallback(id, ack) {\n var _a;\n const timeout = (_a = this.flags.timeout) !== null && _a !== void 0 ? _a : this._opts.ackTimeout;\n if (timeout === undefined) {\n this.acks[id] = ack;\n return;\n }\n // @ts-ignore\n const timer = this.io.setTimeoutFn(() => {\n delete this.acks[id];\n for (let i = 0; i < this.sendBuffer.length; i++) {\n if (this.sendBuffer[i].id === id) {\n debug(\"removing packet with ack id %d from the buffer\", id);\n this.sendBuffer.splice(i, 1);\n }\n }\n debug(\"event with ack id %d has timed out after %d ms\", id, timeout);\n ack.call(this, new Error(\"operation has timed out\"));\n }, timeout);\n const fn = (...args) => {\n // @ts-ignore\n this.io.clearTimeoutFn(timer);\n ack.apply(this, args);\n };\n fn.withError = true;\n this.acks[id] = fn;\n }\n /**\n * Emits an event and waits for an acknowledgement\n *\n * @example\n * // without timeout\n * const response = await socket.emitWithAck(\"hello\", \"world\");\n *\n * // with a specific timeout\n * try {\n * const response = await socket.timeout(1000).emitWithAck(\"hello\", \"world\");\n * } catch (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n *\n * @return a Promise that will be fulfilled when the server acknowledges the event\n */\n emitWithAck(ev, ...args) {\n return new Promise((resolve, reject) => {\n const fn = (arg1, arg2) => {\n return arg1 ? reject(arg1) : resolve(arg2);\n };\n fn.withError = true;\n args.push(fn);\n this.emit(ev, ...args);\n });\n }\n /**\n * Add the packet to the queue.\n * @param args\n * @private\n */\n _addToQueue(args) {\n let ack;\n if (typeof args[args.length - 1] === \"function\") {\n ack = args.pop();\n }\n const packet = {\n id: this._queueSeq++,\n tryCount: 0,\n pending: false,\n args,\n flags: Object.assign({ fromQueue: true }, this.flags),\n };\n args.push((err, ...responseArgs) => {\n if (packet !== this._queue[0]) {\n // the packet has already been acknowledged\n return;\n }\n const hasError = err !== null;\n if (hasError) {\n if (packet.tryCount > this._opts.retries) {\n debug(\"packet [%d] is discarded after %d tries\", packet.id, packet.tryCount);\n this._queue.shift();\n if (ack) {\n ack(err);\n }\n }\n }\n else {\n debug(\"packet [%d] was successfully sent\", packet.id);\n this._queue.shift();\n if (ack) {\n ack(null, ...responseArgs);\n }\n }\n packet.pending = false;\n return this._drainQueue();\n });\n this._queue.push(packet);\n this._drainQueue();\n }\n /**\n * Send the first packet of the queue, and wait for an acknowledgement from the server.\n * @param force - whether to resend a packet that has not been acknowledged yet\n *\n * @private\n */\n _drainQueue(force = false) {\n debug(\"draining queue\");\n if (!this.connected || this._queue.length === 0) {\n return;\n }\n const packet = this._queue[0];\n if (packet.pending && !force) {\n debug(\"packet [%d] has already been sent and is waiting for an ack\", packet.id);\n return;\n }\n packet.pending = true;\n packet.tryCount++;\n debug(\"sending packet [%d] (try n°%d)\", packet.id, packet.tryCount);\n this.flags = packet.flags;\n this.emit.apply(this, packet.args);\n }\n /**\n * Sends a packet.\n *\n * @param packet\n * @private\n */\n packet(packet) {\n packet.nsp = this.nsp;\n this.io._packet(packet);\n }\n /**\n * Called upon engine `open`.\n *\n * @private\n */\n onopen() {\n debug(\"transport is open - connecting\");\n if (typeof this.auth == \"function\") {\n this.auth((data) => {\n this._sendConnectPacket(data);\n });\n }\n else {\n this._sendConnectPacket(this.auth);\n }\n }\n /**\n * Sends a CONNECT packet to initiate the Socket.IO session.\n *\n * @param data\n * @private\n */\n _sendConnectPacket(data) {\n this.packet({\n type: socket_io_parser_1.PacketType.CONNECT,\n data: this._pid\n ? Object.assign({ pid: this._pid, offset: this._lastOffset }, data)\n : data,\n });\n }\n /**\n * Called upon engine or manager `error`.\n *\n * @param err\n * @private\n */\n onerror(err) {\n if (!this.connected) {\n this.emitReserved(\"connect_error\", err);\n }\n }\n /**\n * Called upon engine `close`.\n *\n * @param reason\n * @param description\n * @private\n */\n onclose(reason, description) {\n debug(\"close (%s)\", reason);\n this.connected = false;\n delete this.id;\n this.emitReserved(\"disconnect\", reason, description);\n this._clearAcks();\n }\n /**\n * Clears the acknowledgement handlers upon disconnection, since the client will never receive an acknowledgement from\n * the server.\n *\n * @private\n */\n _clearAcks() {\n Object.keys(this.acks).forEach((id) => {\n const isBuffered = this.sendBuffer.some((packet) => String(packet.id) === id);\n if (!isBuffered) {\n // note: handlers that do not accept an error as first argument are ignored here\n const ack = this.acks[id];\n delete this.acks[id];\n if (ack.withError) {\n ack.call(this, new Error(\"socket has been disconnected\"));\n }\n }\n });\n }\n /**\n * Called with socket packet.\n *\n * @param packet\n * @private\n */\n onpacket(packet) {\n const sameNamespace = packet.nsp === this.nsp;\n if (!sameNamespace)\n return;\n switch (packet.type) {\n case socket_io_parser_1.PacketType.CONNECT:\n if (packet.data && packet.data.sid) {\n this.onconnect(packet.data.sid, packet.data.pid);\n }\n else {\n this.emitReserved(\"connect_error\", new Error(\"It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)\"));\n }\n break;\n case socket_io_parser_1.PacketType.EVENT:\n case socket_io_parser_1.PacketType.BINARY_EVENT:\n this.onevent(packet);\n break;\n case socket_io_parser_1.PacketType.ACK:\n case socket_io_parser_1.PacketType.BINARY_ACK:\n this.onack(packet);\n break;\n case socket_io_parser_1.PacketType.DISCONNECT:\n this.ondisconnect();\n break;\n case socket_io_parser_1.PacketType.CONNECT_ERROR:\n this.destroy();\n const err = new Error(packet.data.message);\n // @ts-ignore\n err.data = packet.data.data;\n this.emitReserved(\"connect_error\", err);\n break;\n }\n }\n /**\n * Called upon a server event.\n *\n * @param packet\n * @private\n */\n onevent(packet) {\n const args = packet.data || [];\n debug(\"emitting event %j\", args);\n if (null != packet.id) {\n debug(\"attaching ack callback to event\");\n args.push(this.ack(packet.id));\n }\n if (this.connected) {\n this.emitEvent(args);\n }\n else {\n this.receiveBuffer.push(Object.freeze(args));\n }\n }\n emitEvent(args) {\n if (this._anyListeners && this._anyListeners.length) {\n const listeners = this._anyListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, args);\n }\n }\n super.emit.apply(this, args);\n if (this._pid && args.length && typeof args[args.length - 1] === \"string\") {\n this._lastOffset = args[args.length - 1];\n }\n }\n /**\n * Produces an ack callback to emit with an event.\n *\n * @private\n */\n ack(id) {\n const self = this;\n let sent = false;\n return function (...args) {\n // prevent double callbacks\n if (sent)\n return;\n sent = true;\n debug(\"sending ack %j\", args);\n self.packet({\n type: socket_io_parser_1.PacketType.ACK,\n id: id,\n data: args,\n });\n };\n }\n /**\n * Called upon a server acknowledgement.\n *\n * @param packet\n * @private\n */\n onack(packet) {\n const ack = this.acks[packet.id];\n if (typeof ack !== \"function\") {\n debug(\"bad ack %s\", packet.id);\n return;\n }\n delete this.acks[packet.id];\n debug(\"calling ack %s with %j\", packet.id, packet.data);\n // @ts-ignore FIXME ack is incorrectly inferred as 'never'\n if (ack.withError) {\n packet.data.unshift(null);\n }\n // @ts-ignore\n ack.apply(this, packet.data);\n }\n /**\n * Called upon server connect.\n *\n * @private\n */\n onconnect(id, pid) {\n debug(\"socket connected with id %s\", id);\n this.id = id;\n this.recovered = pid && this._pid === pid;\n this._pid = pid; // defined only if connection state recovery is enabled\n this.connected = true;\n this.emitBuffered();\n this.emitReserved(\"connect\");\n this._drainQueue(true);\n }\n /**\n * Emit buffered events (received and emitted).\n *\n * @private\n */\n emitBuffered() {\n this.receiveBuffer.forEach((args) => this.emitEvent(args));\n this.receiveBuffer = [];\n this.sendBuffer.forEach((packet) => {\n this.notifyOutgoingListeners(packet);\n this.packet(packet);\n });\n this.sendBuffer = [];\n }\n /**\n * Called upon server disconnect.\n *\n * @private\n */\n ondisconnect() {\n debug(\"server disconnect (%s)\", this.nsp);\n this.destroy();\n this.onclose(\"io server disconnect\");\n }\n /**\n * Called upon forced client/server side disconnections,\n * this method ensures the manager stops tracking us and\n * that reconnections don't get triggered for this.\n *\n * @private\n */\n destroy() {\n if (this.subs) {\n // clean subscriptions to avoid reconnections\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs = undefined;\n }\n this.io[\"_destroy\"](this);\n }\n /**\n * Disconnects the socket manually. In that case, the socket will not try to reconnect.\n *\n * If this is the last active Socket instance of the {@link Manager}, the low-level connection will be closed.\n *\n * @example\n * const socket = io();\n *\n * socket.on(\"disconnect\", (reason) => {\n * // console.log(reason); prints \"io client disconnect\"\n * });\n *\n * socket.disconnect();\n *\n * @return self\n */\n disconnect() {\n if (this.connected) {\n debug(\"performing disconnect (%s)\", this.nsp);\n this.packet({ type: socket_io_parser_1.PacketType.DISCONNECT });\n }\n // remove socket from pool\n this.destroy();\n if (this.connected) {\n // fire events\n this.onclose(\"io client disconnect\");\n }\n return this;\n }\n /**\n * Alias for {@link disconnect()}.\n *\n * @return self\n */\n close() {\n return this.disconnect();\n }\n /**\n * Sets the compress flag.\n *\n * @example\n * socket.compress(false).emit(\"hello\");\n *\n * @param compress - if `true`, compresses the sending data\n * @return self\n */\n compress(compress) {\n this.flags.compress = compress;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the event message will be dropped when this socket is not\n * ready to send messages.\n *\n * @example\n * socket.volatile.emit(\"hello\"); // the server may or may not receive it\n *\n * @returns self\n */\n get volatile() {\n this.flags.volatile = true;\n return this;\n }\n /**\n * Sets a modifier for a subsequent event emission that the callback will be called with an error when the\n * given number of milliseconds have elapsed without an acknowledgement from the server:\n *\n * @example\n * socket.timeout(5000).emit(\"my-event\", (err) => {\n * if (err) {\n * // the server did not acknowledge the event in the given delay\n * }\n * });\n *\n * @returns self\n */\n timeout(timeout) {\n this.flags.timeout = timeout;\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * @example\n * socket.onAny((event, ...args) => {\n * console.log(`got ${event}`);\n * });\n *\n * @param listener\n */\n onAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * @example\n * socket.prependAny((event, ...args) => {\n * console.log(`got event ${event}`);\n * });\n *\n * @param listener\n */\n prependAny(listener) {\n this._anyListeners = this._anyListeners || [];\n this._anyListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`got event ${event}`);\n * }\n *\n * socket.onAny(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAny(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAny();\n *\n * @param listener\n */\n offAny(listener) {\n if (!this._anyListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAny() {\n return this._anyListeners || [];\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.onAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n onAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.push(listener);\n return this;\n }\n /**\n * Adds a listener that will be fired when any event is emitted. The event name is passed as the first argument to the\n * callback. The listener is added to the beginning of the listeners array.\n *\n * Note: acknowledgements sent to the server are not included.\n *\n * @example\n * socket.prependAnyOutgoing((event, ...args) => {\n * console.log(`sent event ${event}`);\n * });\n *\n * @param listener\n */\n prependAnyOutgoing(listener) {\n this._anyOutgoingListeners = this._anyOutgoingListeners || [];\n this._anyOutgoingListeners.unshift(listener);\n return this;\n }\n /**\n * Removes the listener that will be fired when any event is emitted.\n *\n * @example\n * const catchAllListener = (event, ...args) => {\n * console.log(`sent event ${event}`);\n * }\n *\n * socket.onAnyOutgoing(catchAllListener);\n *\n * // remove a specific listener\n * socket.offAnyOutgoing(catchAllListener);\n *\n * // or remove all listeners\n * socket.offAnyOutgoing();\n *\n * @param [listener] - the catch-all listener (optional)\n */\n offAnyOutgoing(listener) {\n if (!this._anyOutgoingListeners) {\n return this;\n }\n if (listener) {\n const listeners = this._anyOutgoingListeners;\n for (let i = 0; i < listeners.length; i++) {\n if (listener === listeners[i]) {\n listeners.splice(i, 1);\n return this;\n }\n }\n }\n else {\n this._anyOutgoingListeners = [];\n }\n return this;\n }\n /**\n * Returns an array of listeners that are listening for any event that is specified. This array can be manipulated,\n * e.g. to remove listeners.\n */\n listenersAnyOutgoing() {\n return this._anyOutgoingListeners || [];\n }\n /**\n * Notify the listeners for each packet sent\n *\n * @param packet\n *\n * @private\n */\n notifyOutgoingListeners(packet) {\n if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) {\n const listeners = this._anyOutgoingListeners.slice();\n for (const listener of listeners) {\n listener.apply(this, packet.data);\n }\n }\n }\n}\nexports.Socket = Socket;\n","\"use strict\";\n/**\n * Initialize backoff timer with `opts`.\n *\n * - `min` initial timeout in milliseconds [100]\n * - `max` max timeout [10000]\n * - `jitter` [0]\n * - `factor` [2]\n *\n * @param {Object} opts\n * @api public\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Backoff = Backoff;\nfunction Backoff(opts) {\n opts = opts || {};\n this.ms = opts.min || 100;\n this.max = opts.max || 10000;\n this.factor = opts.factor || 2;\n this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0;\n this.attempts = 0;\n}\n/**\n * Return the backoff duration.\n *\n * @return {Number}\n * @api public\n */\nBackoff.prototype.duration = function () {\n var ms = this.ms * Math.pow(this.factor, this.attempts++);\n if (this.jitter) {\n var rand = Math.random();\n var deviation = Math.floor(rand * this.jitter * ms);\n ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;\n }\n return Math.min(ms, this.max) | 0;\n};\n/**\n * Reset the number of attempts.\n *\n * @api public\n */\nBackoff.prototype.reset = function () {\n this.attempts = 0;\n};\n/**\n * Set the minimum duration\n *\n * @api public\n */\nBackoff.prototype.setMin = function (min) {\n this.ms = min;\n};\n/**\n * Set the maximum duration\n *\n * @api public\n */\nBackoff.prototype.setMax = function (max) {\n this.max = max;\n};\n/**\n * Set the jitter\n *\n * @api public\n */\nBackoff.prototype.setJitter = function (jitter) {\n this.jitter = jitter;\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Manager = void 0;\nconst engine_io_client_1 = require(\"engine.io-client\");\nconst socket_js_1 = require(\"./socket.js\");\nconst parser = __importStar(require(\"socket.io-parser\"));\nconst on_js_1 = require(\"./on.js\");\nconst backo2_js_1 = require(\"./contrib/backo2.js\");\nconst component_emitter_1 = require(\"@socket.io/component-emitter\");\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"socket.io-client:manager\"); // debug()\nclass Manager extends component_emitter_1.Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n (0, engine_io_client_1.installTimerFunctions)(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new backo2_js_1.Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n if (!v) {\n this.skipReconnect = true;\n }\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n debug(\"readyState %s\", this._readyState);\n if (~this._readyState.indexOf(\"open\"))\n return this;\n debug(\"opening %s\", this.uri);\n this.engine = new engine_io_client_1.Socket(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = (0, on_js_1.on)(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n const onError = (err) => {\n debug(\"error\");\n this.cleanup();\n this._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n this.maybeReconnectOnOpen();\n }\n };\n // emit `error`\n const errorSub = (0, on_js_1.on)(socket, \"error\", onError);\n if (false !== this._timeout) {\n const timeout = this._timeout;\n debug(\"connect attempt will timeout after %d\", timeout);\n // set timer\n const timer = this.setTimeoutFn(() => {\n debug(\"connect attempt timed out after %d\", timeout);\n openSubDestroy();\n onError(new Error(\"timeout\"));\n socket.close();\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n debug(\"open\");\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push((0, on_js_1.on)(socket, \"ping\", this.onping.bind(this)), (0, on_js_1.on)(socket, \"data\", this.ondata.bind(this)), (0, on_js_1.on)(socket, \"error\", this.onerror.bind(this)), (0, on_js_1.on)(socket, \"close\", this.onclose.bind(this)), \n // @ts-ignore\n (0, on_js_1.on)(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n try {\n this.decoder.add(data);\n }\n catch (e) {\n this.onclose(\"parse error\", e);\n }\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n (0, engine_io_client_1.nextTick)(() => {\n this.emitReserved(\"packet\", packet);\n }, this.setTimeoutFn);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n debug(\"error\", err);\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new socket_js_1.Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n else if (this._autoConnect && !socket.active) {\n socket.connect();\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n debug(\"socket %s is still active, skipping close\", nsp);\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n debug(\"writing packet %j\", packet);\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n debug(\"cleanup\");\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n debug(\"disconnect\");\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called when:\n *\n * - the low-level engine is closed\n * - the parser encountered a badly formatted packet\n * - all sockets are disconnected\n *\n * @private\n */\n onclose(reason, description) {\n var _a;\n debug(\"closed due to %s\", reason);\n this.cleanup();\n (_a = this.engine) === null || _a === void 0 ? void 0 : _a.close();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n debug(\"reconnect failed\");\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n debug(\"will wait %dms before reconnect attempt\", delay);\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect)\n return;\n debug(\"attempting reconnect\");\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n debug(\"reconnect attempt error\");\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n debug(\"reconnect success\");\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(() => {\n this.clearTimeoutFn(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\nexports.Manager = Manager;\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.WebTransport = exports.WebSocket = exports.NodeWebSocket = exports.XHR = exports.NodeXHR = exports.Fetch = exports.Socket = exports.Manager = exports.protocol = void 0;\nexports.io = lookup;\nexports.connect = lookup;\nexports.default = lookup;\nconst url_js_1 = require(\"./url.js\");\nconst manager_js_1 = require(\"./manager.js\");\nObject.defineProperty(exports, \"Manager\", { enumerable: true, get: function () { return manager_js_1.Manager; } });\nconst socket_js_1 = require(\"./socket.js\");\nObject.defineProperty(exports, \"Socket\", { enumerable: true, get: function () { return socket_js_1.Socket; } });\nconst debug_1 = __importDefault(require(\"debug\")); // debug()\nconst debug = (0, debug_1.default)(\"socket.io-client\"); // debug()\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = (0, url_js_1.url)(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n debug(\"ignoring socket cache for %s\", source);\n io = new manager_js_1.Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n debug(\"new io instance for %s\", source);\n cache[id] = new manager_js_1.Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager: manager_js_1.Manager,\n Socket: socket_js_1.Socket,\n io: lookup,\n connect: lookup,\n});\n/**\n * Protocol version.\n *\n * @public\n */\nvar socket_io_parser_1 = require(\"socket.io-parser\");\nObject.defineProperty(exports, \"protocol\", { enumerable: true, get: function () { return socket_io_parser_1.protocol; } });\nvar engine_io_client_1 = require(\"engine.io-client\");\nObject.defineProperty(exports, \"Fetch\", { enumerable: true, get: function () { return engine_io_client_1.Fetch; } });\nObject.defineProperty(exports, \"NodeXHR\", { enumerable: true, get: function () { return engine_io_client_1.NodeXHR; } });\nObject.defineProperty(exports, \"XHR\", { enumerable: true, get: function () { return engine_io_client_1.XHR; } });\nObject.defineProperty(exports, \"NodeWebSocket\", { enumerable: true, get: function () { return engine_io_client_1.NodeWebSocket; } });\nObject.defineProperty(exports, \"WebSocket\", { enumerable: true, get: function () { return engine_io_client_1.WebSocket; } });\nObject.defineProperty(exports, \"WebTransport\", { enumerable: true, get: function () { return engine_io_client_1.WebTransport; } });\n\nmodule.exports = lookup;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ce = ce;\nfunction ce(tagName, classList, attributes, innerText, innerHTML, style) {\n var _a;\n var element = document.createElement(tagName);\n if (classList)\n if (typeof classList == 'string')\n element.classList.add(classList);\n else\n (_a = element.classList).add.apply(_a, classList);\n if (attributes)\n for (var key in attributes)\n if (element[key] != undefined)\n element[key] = attributes[key];\n else\n element.setAttribute(key, String(attributes[key]));\n if (innerText)\n element.innerText = innerText;\n if (innerHTML)\n element.innerHTML = innerHTML;\n if (style != undefined)\n for (var key in style)\n element.style[key] = style[key];\n return element;\n}\n//# sourceMappingURL=CE.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MUXComponent = void 0;\nvar MUXComponent = /** @class */ (function () {\n function MUXComponent() {\n this._events = {};\n }\n MUXComponent.prototype.callEvent = function (event) {\n var _a;\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (this._events[event] != undefined) {\n (_a = this._events)[event].apply(_a, args);\n }\n };\n MUXComponent.prototype.on = function (event, callback) {\n this._events[event] = callback;\n };\n MUXComponent.prototype.destroy = function () {\n this.container.remove();\n };\n return MUXComponent;\n}());\nexports.MUXComponent = MUXComponent;\n//# sourceMappingURL=baseComponent.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentButton = void 0;\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar ComponentButton = /** @class */ (function (_super) {\n __extends(ComponentButton, _super);\n function ComponentButton(options) {\n var _a, _b;\n var _this = _super.call(this) || this;\n _this.mode = 'normal';\n _this.mode = (_a = options === null || options === void 0 ? void 0 : options.mode) !== null && _a !== void 0 ? _a : 'normal';\n var target = (_b = options === null || options === void 0 ? void 0 : options.target) !== null && _b !== void 0 ? _b : '';\n _this.container = (0, CE_1.ce)(typeof target === 'string' ? 'a' : 'div', [\n 'mux_button',\n \"mux_\".concat(_this.mode),\n ]);\n if ((options === null || options === void 0 ? void 0 : options.materialIcon) != undefined)\n _this.container.append((0, CE_1.ce)('span', 'material-symbols-outlined', null, options.materialIcon));\n _this.container.appendChild((0, CE_1.ce)('span', ['mux_text', 'mux_normal'], null, options.content));\n _this.container.onclick = function (e) {\n e.preventDefault();\n if (_this.mode == 'disabled')\n return;\n if (typeof target === 'function')\n target();\n else {\n if ((options === null || options === void 0 ? void 0 : options.openInNewTab) == true)\n window.open(target, '_blank');\n else\n window.location.href = target;\n }\n };\n if (typeof target === 'string')\n _this.container.setAttribute('href', target);\n return _this;\n }\n ComponentButton.prototype.updateContent = function (content) {\n this.container.innerHTML = content;\n };\n ComponentButton.prototype.updateMode = function (mode) {\n this.mode = mode;\n this.container.classList.remove('mux_normal');\n this.container.classList.remove('mux_highlight');\n this.container.classList.remove('mux_secondary');\n this.container.classList.remove('mux_disabled');\n this.container.classList.add(\"mux_\".concat(mode));\n };\n return ComponentButton;\n}(baseComponent_1.MUXComponent));\nexports.ComponentButton = ComponentButton;\n//# sourceMappingURL=Component.Button.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.generateTextHighlights = generateTextHighlights;\nfunction generateTextHighlights(originalText, additionalClassnames) {\n var _a;\n if (additionalClassnames === void 0) { additionalClassnames = []; }\n var div = document.createElement('div');\n (_a = div.classList).add.apply(_a, additionalClassnames);\n var remainingStr = originalText;\n var regex = /\\<(.*?)\\>/;\n while (remainingStr.length) {\n var match = regex.exec(remainingStr);\n if (match) {\n var normalText = remainingStr.substring(0, match.index);\n if (normalText) {\n var normalSpan = document.createElement('span');\n normalSpan.className = 'normal';\n normalSpan.textContent = normalText;\n div.appendChild(normalSpan);\n }\n var highlightSpan = document.createElement('span');\n highlightSpan.className = 'highlight';\n highlightSpan.textContent = match[1];\n div.appendChild(highlightSpan);\n remainingStr = remainingStr.substring(match.index + match[0].length);\n }\n else {\n var normalSpan = document.createElement('span');\n normalSpan.className = 'normal';\n normalSpan.textContent = remainingStr;\n div.appendChild(normalSpan);\n break;\n }\n }\n return div;\n}\n//# sourceMappingURL=TextHighlighter.js.map","/**!\n * Sortable\n * @author\tRubaXa \n * @license MIT\n */\n\n\n(function (factory) {\n\t\"use strict\";\n\n\tif (typeof define === \"function\" && define.amd) {\n\t\tdefine(factory);\n\t}\n\telse if (typeof module != \"undefined\" && typeof module.exports != \"undefined\") {\n\t\tmodule.exports = factory();\n\t}\n\telse if (typeof Package !== \"undefined\") {\n\t\tSortable = factory(); // export for Meteor.js\n\t}\n\telse {\n\t\t/* jshint sub:true */\n\t\twindow[\"Sortable\"] = factory();\n\t}\n})(function () {\n\t\"use strict\";\n\n\tvar dragEl,\n\t\tghostEl,\n\t\tcloneEl,\n\t\trootEl,\n\t\tnextEl,\n\n\t\tscrollEl,\n\t\tscrollParentEl,\n\n\t\tlastEl,\n\t\tlastCSS,\n\n\t\toldIndex,\n\t\tnewIndex,\n\n\t\tactiveGroup,\n\t\tautoScroll = {},\n\n\t\ttapEvt,\n\t\ttouchEvt,\n\n\t\t/** @const */\n\t\tRSPACE = /\\s+/g,\n\n\t\texpando = 'Sortable' + (new Date).getTime(),\n\n\t\twin = window,\n\t\tdocument = win.document,\n\t\tparseInt = win.parseInt,\n\n\t\tsupportDraggable = !!('draggable' in document.createElement('div')),\n\n\t\t_silent = false,\n\n\t\tabs = Math.abs,\n\t\tslice = [].slice,\n\n\t\ttouchDragOverListeners = [],\n\n\t\t_autoScroll = _throttle(function (/**Event*/evt, /**Object*/options, /**HTMLElement*/rootEl) {\n\t\t\t// Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n\t\t\tif (rootEl && options.scroll) {\n\t\t\t\tvar el,\n\t\t\t\t\trect,\n\t\t\t\t\tsens = options.scrollSensitivity,\n\t\t\t\t\tspeed = options.scrollSpeed,\n\n\t\t\t\t\tx = evt.clientX,\n\t\t\t\t\ty = evt.clientY,\n\n\t\t\t\t\twinWidth = window.innerWidth,\n\t\t\t\t\twinHeight = window.innerHeight,\n\n\t\t\t\t\tvx,\n\t\t\t\t\tvy\n\t\t\t\t;\n\n\t\t\t\t// Delect scrollEl\n\t\t\t\tif (scrollParentEl !== rootEl) {\n\t\t\t\t\tscrollEl = options.scroll;\n\t\t\t\t\tscrollParentEl = rootEl;\n\n\t\t\t\t\tif (scrollEl === true) {\n\t\t\t\t\t\tscrollEl = rootEl;\n\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\tif ((scrollEl.offsetWidth < scrollEl.scrollWidth) ||\n\t\t\t\t\t\t\t\t(scrollEl.offsetHeight < scrollEl.scrollHeight)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/* jshint boss:true */\n\t\t\t\t\t\t} while (scrollEl = scrollEl.parentNode);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (scrollEl) {\n\t\t\t\t\tel = scrollEl;\n\t\t\t\t\trect = scrollEl.getBoundingClientRect();\n\t\t\t\t\tvx = (abs(rect.right - x) <= sens) - (abs(rect.left - x) <= sens);\n\t\t\t\t\tvy = (abs(rect.bottom - y) <= sens) - (abs(rect.top - y) <= sens);\n\t\t\t\t}\n\n\n\t\t\t\tif (!(vx || vy)) {\n\t\t\t\t\tvx = (winWidth - x <= sens) - (x <= sens);\n\t\t\t\t\tvy = (winHeight - y <= sens) - (y <= sens);\n\n\t\t\t\t\t/* jshint expr:true */\n\t\t\t\t\t(vx || vy) && (el = win);\n\t\t\t\t}\n\n\n\t\t\t\tif (autoScroll.vx !== vx || autoScroll.vy !== vy || autoScroll.el !== el) {\n\t\t\t\t\tautoScroll.el = el;\n\t\t\t\t\tautoScroll.vx = vx;\n\t\t\t\t\tautoScroll.vy = vy;\n\n\t\t\t\t\tclearInterval(autoScroll.pid);\n\n\t\t\t\t\tif (el) {\n\t\t\t\t\t\tautoScroll.pid = setInterval(function () {\n\t\t\t\t\t\t\tif (el === win) {\n\t\t\t\t\t\t\t\twin.scrollTo(win.pageXOffset + vx * speed, win.pageYOffset + vy * speed);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tvy && (el.scrollTop += vy * speed);\n\t\t\t\t\t\t\t\tvx && (el.scrollLeft += vx * speed);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 24);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 30)\n\t;\n\n\n\n\t/**\n\t * @class Sortable\n\t * @param {HTMLElement} el\n\t * @param {Object} [options]\n\t */\n\tfunction Sortable(el, options) {\n\t\tthis.el = el; // root element\n\t\tthis.options = options = _extend({}, options);\n\n\n\t\t// Export instance\n\t\tel[expando] = this;\n\n\n\t\t// Default options\n\t\tvar defaults = {\n\t\t\tgroup: Math.random(),\n\t\t\tsort: true,\n\t\t\tdisabled: false,\n\t\t\tstore: null,\n\t\t\thandle: null,\n\t\t\tscroll: true,\n\t\t\tscrollSensitivity: 30,\n\t\t\tscrollSpeed: 10,\n\t\t\tdraggable: /[uo]l/i.test(el.nodeName) ? 'li' : '>*',\n\t\t\tghostClass: 'sortable-ghost',\n\t\t\tignore: 'a, img',\n\t\t\tfilter: null,\n\t\t\tanimation: 0,\n\t\t\tsetData: function (dataTransfer, dragEl) {\n\t\t\t\tdataTransfer.setData('Text', dragEl.textContent);\n\t\t\t},\n\t\t\tdropBubble: false,\n\t\t\tdragoverBubble: false,\n\t\t\tdataIdAttr: 'data-id',\n\t\t\tdelay: 0\n\t\t};\n\n\n\t\t// Set default options\n\t\tfor (var name in defaults) {\n\t\t\t!(name in options) && (options[name] = defaults[name]);\n\t\t}\n\n\n\t\tvar group = options.group;\n\n\t\tif (!group || typeof group != 'object') {\n\t\t\tgroup = options.group = { name: group };\n\t\t}\n\n\n\t\t['pull', 'put'].forEach(function (key) {\n\t\t\tif (!(key in group)) {\n\t\t\t\tgroup[key] = true;\n\t\t\t}\n\t\t});\n\n\n\t\toptions.groups = ' ' + group.name + (group.put.join ? ' ' + group.put.join(' ') : '') + ' ';\n\n\n\t\t// Bind all private methods\n\t\tfor (var fn in this) {\n\t\t\tif (fn.charAt(0) === '_') {\n\t\t\t\tthis[fn] = _bind(this, this[fn]);\n\t\t\t}\n\t\t}\n\n\n\t\t// Bind events\n\t\t_on(el, 'mousedown', this._onTapStart);\n\t\t_on(el, 'touchstart', this._onTapStart);\n\n\t\t_on(el, 'dragover', this);\n\t\t_on(el, 'dragenter', this);\n\n\t\ttouchDragOverListeners.push(this._onDragOver);\n\n\t\t// Restore sorting\n\t\toptions.store && this.sort(options.store.get(this));\n\t}\n\n\n\tSortable.prototype = /** @lends Sortable.prototype */ {\n\t\tconstructor: Sortable,\n\n\t\t_onTapStart: function (/** Event|TouchEvent */evt) {\n\t\t\tvar _this = this,\n\t\t\t\tel = this.el,\n\t\t\t\toptions = this.options,\n\t\t\t\ttype = evt.type,\n\t\t\t\ttouch = evt.touches && evt.touches[0],\n\t\t\t\ttarget = (touch || evt).target,\n\t\t\t\toriginalTarget = target,\n\t\t\t\tfilter = options.filter;\n\n\n\t\t\tif (type === 'mousedown' && evt.button !== 0 || options.disabled) {\n\t\t\t\treturn; // only left button or enabled\n\t\t\t}\n\n\t\t\ttarget = _closest(target, options.draggable, el);\n\n\t\t\tif (!target) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// get the index of the dragged element within its parent\n\t\t\toldIndex = _index(target);\n\n\t\t\t// Check filter\n\t\t\tif (typeof filter === 'function') {\n\t\t\t\tif (filter.call(this, evt, target, this)) {\n\t\t\t\t\t_dispatchEvent(_this, originalTarget, 'filter', target, el, oldIndex);\n\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\treturn; // cancel dnd\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (filter) {\n\t\t\t\tfilter = filter.split(',').some(function (criteria) {\n\t\t\t\t\tcriteria = _closest(originalTarget, criteria.trim(), el);\n\n\t\t\t\t\tif (criteria) {\n\t\t\t\t\t\t_dispatchEvent(_this, criteria, 'filter', target, el, oldIndex);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (filter) {\n\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\treturn; // cancel dnd\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\tif (options.handle && !_closest(originalTarget, options.handle, el)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\t// Prepare `dragstart`\n\t\t\tthis._prepareDragStart(evt, touch, target);\n\t\t},\n\n\t\t_prepareDragStart: function (/** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n\t\t\tvar _this = this,\n\t\t\t\tel = _this.el,\n\t\t\t\toptions = _this.options,\n\t\t\t\townerDocument = el.ownerDocument,\n\t\t\t\tdragStartFn;\n\n\t\t\tif (target && !dragEl && (target.parentNode === el)) {\n\t\t\t\ttapEvt = evt;\n\n\t\t\t\trootEl = el;\n\t\t\t\tdragEl = target;\n\t\t\t\tnextEl = dragEl.nextSibling;\n\t\t\t\tactiveGroup = options.group;\n\n\t\t\t\tdragStartFn = function () {\n\t\t\t\t\t// Delayed drag has been triggered\n\t\t\t\t\t// we can re-enable the events: touchmove/mousemove\n\t\t\t\t\t_this._disableDelayedDrag();\n\n\t\t\t\t\t// Make the element draggable\n\t\t\t\t\tdragEl.draggable = true;\n\n\t\t\t\t\t// Disable \"draggable\"\n\t\t\t\t\toptions.ignore.split(',').forEach(function (criteria) {\n\t\t\t\t\t\t_find(dragEl, criteria.trim(), _disableDraggable);\n\t\t\t\t\t});\n\n\t\t\t\t\t// Bind the events: dragstart/dragend\n\t\t\t\t\t_this._triggerDragStart(touch);\n\t\t\t\t};\n\n\t\t\t\t_on(ownerDocument, 'mouseup', _this._onDrop);\n\t\t\t\t_on(ownerDocument, 'touchend', _this._onDrop);\n\t\t\t\t_on(ownerDocument, 'touchcancel', _this._onDrop);\n\n\t\t\t\tif (options.delay) {\n\t\t\t\t\t// If the user moves the pointer before the delay has been reached:\n\t\t\t\t\t// disable the delayed drag\n\t\t\t\t\t_on(ownerDocument, 'mousemove', _this._disableDelayedDrag);\n\t\t\t\t\t_on(ownerDocument, 'touchmove', _this._disableDelayedDrag);\n\n\t\t\t\t\t_this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n\t\t\t\t} else {\n\t\t\t\t\tdragStartFn();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_disableDelayedDrag: function () {\n\t\t\tvar ownerDocument = this.el.ownerDocument;\n\n\t\t\tclearTimeout(this._dragStartTimer);\n\n\t\t\t_off(ownerDocument, 'mousemove', this._disableDelayedDrag);\n\t\t\t_off(ownerDocument, 'touchmove', this._disableDelayedDrag);\n\t\t},\n\n\t\t_triggerDragStart: function (/** Touch */touch) {\n\t\t\tif (touch) {\n\t\t\t\t// Touch device support\n\t\t\t\ttapEvt = {\n\t\t\t\t\ttarget: dragEl,\n\t\t\t\t\tclientX: touch.clientX,\n\t\t\t\t\tclientY: touch.clientY\n\t\t\t\t};\n\n\t\t\t\tthis._onDragStart(tapEvt, 'touch');\n\t\t\t}\n\t\t\telse if (!supportDraggable) {\n\t\t\t\tthis._onDragStart(tapEvt, true);\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_on(dragEl, 'dragend', this);\n\t\t\t\t_on(rootEl, 'dragstart', this._onDragStart);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tif (document.selection) {\n\t\t\t\t\tdocument.selection.empty();\n\t\t\t\t} else {\n\t\t\t\t\twindow.getSelection().removeAllRanges();\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t}\n\t\t},\n\n\t\t_dragStarted: function () {\n\t\t\tif (rootEl && dragEl) {\n\t\t\t\t// Apply effect\n\t\t\t\t_toggleClass(dragEl, this.options.ghostClass, true);\n\n\t\t\t\tSortable.active = this;\n\n\t\t\t\t// Drag start event\n\t\t\t\t_dispatchEvent(this, rootEl, 'start', dragEl, rootEl, oldIndex);\n\t\t\t}\n\t\t},\n\n\t\t_emulateDragOver: function () {\n\t\t\tif (touchEvt) {\n\t\t\t\t_css(ghostEl, 'display', 'none');\n\n\t\t\t\tvar target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY),\n\t\t\t\t\tparent = target,\n\t\t\t\t\tgroupName = ' ' + this.options.group.name + '',\n\t\t\t\t\ti = touchDragOverListeners.length;\n\n\t\t\t\tif (parent) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif (parent[expando] && parent[expando].options.groups.indexOf(groupName) > -1) {\n\t\t\t\t\t\t\twhile (i--) {\n\t\t\t\t\t\t\t\ttouchDragOverListeners[i]({\n\t\t\t\t\t\t\t\t\tclientX: touchEvt.clientX,\n\t\t\t\t\t\t\t\t\tclientY: touchEvt.clientY,\n\t\t\t\t\t\t\t\t\ttarget: target,\n\t\t\t\t\t\t\t\t\trootEl: parent\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttarget = parent; // store last element\n\t\t\t\t\t}\n\t\t\t\t\t/* jshint boss:true */\n\t\t\t\t\twhile (parent = parent.parentNode);\n\t\t\t\t}\n\n\t\t\t\t_css(ghostEl, 'display', '');\n\t\t\t}\n\t\t},\n\n\n\t\t_onTouchMove: function (/**TouchEvent*/evt) {\n\t\t\tif (tapEvt) {\n\t\t\t\tvar touch = evt.touches ? evt.touches[0] : evt,\n\t\t\t\t\tdx = touch.clientX - tapEvt.clientX,\n\t\t\t\t\tdy = touch.clientY - tapEvt.clientY,\n\t\t\t\t\ttranslate3d = evt.touches ? 'translate3d(' + dx + 'px,' + dy + 'px,0)' : 'translate(' + dx + 'px,' + dy + 'px)';\n\n\t\t\t\ttouchEvt = touch;\n\n\t\t\t\t_css(ghostEl, 'webkitTransform', translate3d);\n\t\t\t\t_css(ghostEl, 'mozTransform', translate3d);\n\t\t\t\t_css(ghostEl, 'msTransform', translate3d);\n\t\t\t\t_css(ghostEl, 'transform', translate3d);\n\n\t\t\t\tevt.preventDefault();\n\t\t\t}\n\t\t},\n\n\n\t\t_onDragStart: function (/**Event*/evt, /**boolean*/useFallback) {\n\t\t\tvar dataTransfer = evt.dataTransfer,\n\t\t\t\toptions = this.options;\n\n\t\t\tthis._offUpEvents();\n\n\t\t\tif (activeGroup.pull == 'clone') {\n\t\t\t\tcloneEl = dragEl.cloneNode(true);\n\t\t\t\t_css(cloneEl, 'display', 'none');\n\t\t\t\trootEl.insertBefore(cloneEl, dragEl);\n\t\t\t}\n\n\t\t\tif (useFallback) {\n\t\t\t\tvar rect = dragEl.getBoundingClientRect(),\n\t\t\t\t\tcss = _css(dragEl),\n\t\t\t\t\tghostRect;\n\n\t\t\t\tghostEl = dragEl.cloneNode(true);\n\n\t\t\t\t_css(ghostEl, 'top', rect.top - parseInt(css.marginTop, 10));\n\t\t\t\t_css(ghostEl, 'left', rect.left - parseInt(css.marginLeft, 10));\n\t\t\t\t_css(ghostEl, 'width', rect.width);\n\t\t\t\t_css(ghostEl, 'height', rect.height);\n\t\t\t\t_css(ghostEl, 'opacity', '0.8');\n\t\t\t\t_css(ghostEl, 'position', 'fixed');\n\t\t\t\t_css(ghostEl, 'zIndex', '100000');\n\n\t\t\t\trootEl.appendChild(ghostEl);\n\n\t\t\t\t// Fixing dimensions.\n\t\t\t\tghostRect = ghostEl.getBoundingClientRect();\n\t\t\t\t_css(ghostEl, 'width', rect.width * 2 - ghostRect.width);\n\t\t\t\t_css(ghostEl, 'height', rect.height * 2 - ghostRect.height);\n\n\t\t\t\tif (useFallback === 'touch') {\n\t\t\t\t\t// Bind touch events\n\t\t\t\t\t_on(document, 'touchmove', this._onTouchMove);\n\t\t\t\t\t_on(document, 'touchend', this._onDrop);\n\t\t\t\t\t_on(document, 'touchcancel', this._onDrop);\n\t\t\t\t} else {\n\t\t\t\t\t// Old brwoser\n\t\t\t\t\t_on(document, 'mousemove', this._onTouchMove);\n\t\t\t\t\t_on(document, 'mouseup', this._onDrop);\n\t\t\t\t}\n\n\t\t\t\tthis._loopId = setInterval(this._emulateDragOver, 150);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (dataTransfer) {\n\t\t\t\t\tdataTransfer.effectAllowed = 'move';\n\t\t\t\t\toptions.setData && options.setData.call(this, dataTransfer, dragEl);\n\t\t\t\t}\n\n\t\t\t\t_on(document, 'drop', this);\n\t\t\t}\n\n\t\t\tsetTimeout(this._dragStarted, 0);\n\t\t},\n\n\t\t_onDragOver: function (/**Event*/evt) {\n\t\t\tvar el = this.el,\n\t\t\t\ttarget,\n\t\t\t\tdragRect,\n\t\t\t\trevert,\n\t\t\t\toptions = this.options,\n\t\t\t\tgroup = options.group,\n\t\t\t\tgroupPut = group.put,\n\t\t\t\tisOwner = (activeGroup === group),\n\t\t\t\tcanSort = options.sort;\n\n\t\t\tif (evt.preventDefault !== void 0) {\n\t\t\t\tevt.preventDefault();\n\t\t\t\t!options.dragoverBubble && evt.stopPropagation();\n\t\t\t}\n\n\t\t\tif (activeGroup && !options.disabled &&\n\t\t\t\t(isOwner\n\t\t\t\t\t? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list\n\t\t\t\t\t: activeGroup.pull && groupPut && (\n\t\t\t\t\t\t(activeGroup.name === group.name) || // by Name\n\t\t\t\t\t\t(groupPut.indexOf && ~groupPut.indexOf(activeGroup.name)) // by Array\n\t\t\t\t\t)\n\t\t\t\t) &&\n\t\t\t\t(evt.rootEl === void 0 || evt.rootEl === this.el) // touch fallback\n\t\t\t) {\n\t\t\t\t// Smart auto-scrolling\n\t\t\t\t_autoScroll(evt, options, this.el);\n\n\t\t\t\tif (_silent) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\ttarget = _closest(evt.target, options.draggable, el);\n\t\t\t\tdragRect = dragEl.getBoundingClientRect();\n\n\n\t\t\t\tif (revert) {\n\t\t\t\t\t_cloneHide(true);\n\n\t\t\t\t\tif (cloneEl || nextEl) {\n\t\t\t\t\t\trootEl.insertBefore(dragEl, cloneEl || nextEl);\n\t\t\t\t\t}\n\t\t\t\t\telse if (!canSort) {\n\t\t\t\t\t\trootEl.appendChild(dragEl);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\n\t\t\t\tif ((el.children.length === 0) || (el.children[0] === ghostEl) ||\n\t\t\t\t\t(el === evt.target) && (target = _ghostInBottom(el, evt))\n\t\t\t\t) {\n\t\t\t\t\tif (target) {\n\t\t\t\t\t\tif (target.animated) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttargetRect = target.getBoundingClientRect();\n\t\t\t\t\t}\n\n\t\t\t\t\t_cloneHide(isOwner);\n\n\t\t\t\t\tif (_onMove(rootEl, el, dragEl, dragRect, target, targetRect) !== false) {\n\t\t\t\t\t\tel.appendChild(dragEl);\n\t\t\t\t\t\tthis._animate(dragRect, dragEl);\n\t\t\t\t\t\ttarget && this._animate(targetRect, target);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if (target && !target.animated && target !== dragEl && (target.parentNode[expando] !== void 0)) {\n\t\t\t\t\tif (lastEl !== target) {\n\t\t\t\t\t\tlastEl = target;\n\t\t\t\t\t\tlastCSS = _css(target);\n\t\t\t\t\t}\n\n\n\t\t\t\t\tvar targetRect = target.getBoundingClientRect(),\n\t\t\t\t\t\twidth = targetRect.right - targetRect.left,\n\t\t\t\t\t\theight = targetRect.bottom - targetRect.top,\n\t\t\t\t\t\tfloating = /left|right|inline/.test(lastCSS.cssFloat + lastCSS.display),\n\t\t\t\t\t\tisWide = (target.offsetWidth > dragEl.offsetWidth),\n\t\t\t\t\t\tisLong = (target.offsetHeight > dragEl.offsetHeight),\n\t\t\t\t\t\thalfway = (floating ? (evt.clientX - targetRect.left) / width : (evt.clientY - targetRect.top) / height) > 0.5,\n\t\t\t\t\t\tnextSibling = target.nextElementSibling,\n\t\t\t\t\t\tmoveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect),\n\t\t\t\t\t\tafter\n\t\t\t\t\t;\n\n\t\t\t\t\tif (moveVector !== false) {\n\t\t\t\t\t\t_silent = true;\n\t\t\t\t\t\tsetTimeout(_unsilent, 30);\n\n\t\t\t\t\t\t_cloneHide(isOwner);\n\n\t\t\t\t\t\tif (moveVector === 1 || moveVector === -1) {\n\t\t\t\t\t\t\tafter = (moveVector === 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (floating) {\n\t\t\t\t\t\t\tafter = (target.previousElementSibling === dragEl) && !isWide || halfway && isWide;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tafter = (nextSibling !== dragEl) && !isLong || halfway && isLong;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (after && !nextSibling) {\n\t\t\t\t\t\t\tel.appendChild(dragEl);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttarget.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._animate(dragRect, dragEl);\n\t\t\t\t\t\tthis._animate(targetRect, target);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_animate: function (prevRect, target) {\n\t\t\tvar ms = this.options.animation;\n\n\t\t\tif (ms) {\n\t\t\t\tvar currentRect = target.getBoundingClientRect();\n\n\t\t\t\t_css(target, 'transition', 'none');\n\t\t\t\t_css(target, 'transform', 'translate3d('\n\t\t\t\t\t+ (prevRect.left - currentRect.left) + 'px,'\n\t\t\t\t\t+ (prevRect.top - currentRect.top) + 'px,0)'\n\t\t\t\t);\n\n\t\t\t\ttarget.offsetWidth; // repaint\n\n\t\t\t\t_css(target, 'transition', 'all ' + ms + 'ms');\n\t\t\t\t_css(target, 'transform', 'translate3d(0,0,0)');\n\n\t\t\t\tclearTimeout(target.animated);\n\t\t\t\ttarget.animated = setTimeout(function () {\n\t\t\t\t\t_css(target, 'transition', '');\n\t\t\t\t\t_css(target, 'transform', '');\n\t\t\t\t\ttarget.animated = false;\n\t\t\t\t}, ms);\n\t\t\t}\n\t\t},\n\n\t\t_offUpEvents: function () {\n\t\t\tvar ownerDocument = this.el.ownerDocument;\n\n\t\t\t_off(document, 'touchmove', this._onTouchMove);\n\t\t\t_off(ownerDocument, 'mouseup', this._onDrop);\n\t\t\t_off(ownerDocument, 'touchend', this._onDrop);\n\t\t\t_off(ownerDocument, 'touchcancel', this._onDrop);\n\t\t},\n\n\t\t_onDrop: function (/**Event*/evt) {\n\t\t\tvar el = this.el,\n\t\t\t\toptions = this.options;\n\n\t\t\tclearInterval(this._loopId);\n\t\t\tclearInterval(autoScroll.pid);\n\t\t\tclearTimeout(this._dragStartTimer);\n\n\t\t\t// Unbind events\n\t\t\t_off(document, 'drop', this);\n\t\t\t_off(document, 'mousemove', this._onTouchMove);\n\t\t\t_off(el, 'dragstart', this._onDragStart);\n\n\t\t\tthis._offUpEvents();\n\n\t\t\tif (evt) {\n\t\t\t\tevt.preventDefault();\n\t\t\t\t!options.dropBubble && evt.stopPropagation();\n\n\t\t\t\tghostEl && ghostEl.parentNode.removeChild(ghostEl);\n\n\t\t\t\tif (dragEl) {\n\t\t\t\t\t_off(dragEl, 'dragend', this);\n\n\t\t\t\t\t_disableDraggable(dragEl);\n\t\t\t\t\t_toggleClass(dragEl, this.options.ghostClass, false);\n\n\t\t\t\t\tif (rootEl !== dragEl.parentNode) {\n\t\t\t\t\t\tnewIndex = _index(dragEl);\n\n\t\t\t\t\t\t// drag from one list and drop into another\n\t\t\t\t\t\t_dispatchEvent(null, dragEl.parentNode, 'sort', dragEl, rootEl, oldIndex, newIndex);\n\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex);\n\n\t\t\t\t\t\t// Add event\n\t\t\t\t\t\t_dispatchEvent(null, dragEl.parentNode, 'add', dragEl, rootEl, oldIndex, newIndex);\n\n\t\t\t\t\t\t// Remove event\n\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'remove', dragEl, rootEl, oldIndex, newIndex);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Remove clone\n\t\t\t\t\t\tcloneEl && cloneEl.parentNode.removeChild(cloneEl);\n\n\t\t\t\t\t\tif (dragEl.nextSibling !== nextEl) {\n\t\t\t\t\t\t\t// Get the index of the dragged element within its parent\n\t\t\t\t\t\t\tnewIndex = _index(dragEl);\n\n\t\t\t\t\t\t\t// drag & drop within the same list\n\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'update', dragEl, rootEl, oldIndex, newIndex);\n\t\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (Sortable.active) {\n\t\t\t\t\t\t// Drag end event\n\t\t\t\t\t\t_dispatchEvent(this, rootEl, 'end', dragEl, rootEl, oldIndex, newIndex);\n\n\t\t\t\t\t\t// Save sorting\n\t\t\t\t\t\tthis.save();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Nulling\n\t\t\t\trootEl =\n\t\t\t\tdragEl =\n\t\t\t\tghostEl =\n\t\t\t\tnextEl =\n\t\t\t\tcloneEl =\n\n\t\t\t\tscrollEl =\n\t\t\t\tscrollParentEl =\n\n\t\t\t\ttapEvt =\n\t\t\t\ttouchEvt =\n\n\t\t\t\tlastEl =\n\t\t\t\tlastCSS =\n\n\t\t\t\tactiveGroup =\n\t\t\t\tSortable.active = null;\n\t\t\t}\n\t\t},\n\n\n\t\thandleEvent: function (/**Event*/evt) {\n\t\t\tvar type = evt.type;\n\n\t\t\tif (type === 'dragover' || type === 'dragenter') {\n\t\t\t\tif (dragEl) {\n\t\t\t\t\tthis._onDragOver(evt);\n\t\t\t\t\t_globalDragOver(evt);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (type === 'drop' || type === 'dragend') {\n\t\t\t\tthis._onDrop(evt);\n\t\t\t}\n\t\t},\n\n\n\t\t/**\n\t\t * Serializes the item into an array of string.\n\t\t * @returns {String[]}\n\t\t */\n\t\ttoArray: function () {\n\t\t\tvar order = [],\n\t\t\t\tel,\n\t\t\t\tchildren = this.el.children,\n\t\t\t\ti = 0,\n\t\t\t\tn = children.length,\n\t\t\t\toptions = this.options;\n\n\t\t\tfor (; i < n; i++) {\n\t\t\t\tel = children[i];\n\t\t\t\tif (_closest(el, options.draggable, this.el)) {\n\t\t\t\t\torder.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn order;\n\t\t},\n\n\n\t\t/**\n\t\t * Sorts the elements according to the array.\n\t\t * @param {String[]} order order of the items\n\t\t */\n\t\tsort: function (order) {\n\t\t\tvar items = {}, rootEl = this.el;\n\n\t\t\tthis.toArray().forEach(function (id, i) {\n\t\t\t\tvar el = rootEl.children[i];\n\n\t\t\t\tif (_closest(el, this.options.draggable, rootEl)) {\n\t\t\t\t\titems[id] = el;\n\t\t\t\t}\n\t\t\t}, this);\n\n\t\t\torder.forEach(function (id) {\n\t\t\t\tif (items[id]) {\n\t\t\t\t\trootEl.removeChild(items[id]);\n\t\t\t\t\trootEl.appendChild(items[id]);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\n\t\t/**\n\t\t * Save the current sorting\n\t\t */\n\t\tsave: function () {\n\t\t\tvar store = this.options.store;\n\t\t\tstore && store.set(this);\n\t\t},\n\n\n\t\t/**\n\t\t * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\n\t\t * @param {HTMLElement} el\n\t\t * @param {String} [selector] default: `options.draggable`\n\t\t * @returns {HTMLElement|null}\n\t\t */\n\t\tclosest: function (el, selector) {\n\t\t\treturn _closest(el, selector || this.options.draggable, this.el);\n\t\t},\n\n\n\t\t/**\n\t\t * Set/get option\n\t\t * @param {string} name\n\t\t * @param {*} [value]\n\t\t * @returns {*}\n\t\t */\n\t\toption: function (name, value) {\n\t\t\tvar options = this.options;\n\n\t\t\tif (value === void 0) {\n\t\t\t\treturn options[name];\n\t\t\t} else {\n\t\t\t\toptions[name] = value;\n\t\t\t}\n\t\t},\n\n\n\t\t/**\n\t\t * Destroy\n\t\t */\n\t\tdestroy: function () {\n\t\t\tvar el = this.el;\n\n\t\t\tel[expando] = null;\n\n\t\t\t_off(el, 'mousedown', this._onTapStart);\n\t\t\t_off(el, 'touchstart', this._onTapStart);\n\n\t\t\t_off(el, 'dragover', this);\n\t\t\t_off(el, 'dragenter', this);\n\n\t\t\t// Remove draggable attributes\n\t\t\tArray.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n\t\t\t\tel.removeAttribute('draggable');\n\t\t\t});\n\n\t\t\ttouchDragOverListeners.splice(touchDragOverListeners.indexOf(this._onDragOver), 1);\n\n\t\t\tthis._onDrop();\n\n\t\t\tthis.el = el = null;\n\t\t}\n\t};\n\n\n\tfunction _cloneHide(state) {\n\t\tif (cloneEl && (cloneEl.state !== state)) {\n\t\t\t_css(cloneEl, 'display', state ? 'none' : '');\n\t\t\t!state && cloneEl.state && rootEl.insertBefore(cloneEl, dragEl);\n\t\t\tcloneEl.state = state;\n\t\t}\n\t}\n\n\n\tfunction _bind(ctx, fn) {\n\t\tvar args = slice.call(arguments, 2);\n\t\treturn\tfn.bind ? fn.bind.apply(fn, [ctx].concat(args)) : function () {\n\t\t\treturn fn.apply(ctx, args.concat(slice.call(arguments)));\n\t\t};\n\t}\n\n\n\tfunction _closest(/**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx) {\n\t\tif (el) {\n\t\t\tctx = ctx || document;\n\t\t\tselector = selector.split('.');\n\n\t\t\tvar tag = selector.shift().toUpperCase(),\n\t\t\t\tre = new RegExp('\\\\s(' + selector.join('|') + ')(?=\\\\s)', 'g');\n\n\t\t\tdo {\n\t\t\t\tif (\n\t\t\t\t\t(tag === '>*' && el.parentNode === ctx) || (\n\t\t\t\t\t\t(tag === '' || el.nodeName.toUpperCase() == tag) &&\n\t\t\t\t\t\t(!selector.length || ((' ' + el.className + ' ').match(re) || []).length == selector.length)\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\treturn el;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (el !== ctx && (el = el.parentNode));\n\t\t}\n\n\t\treturn null;\n\t}\n\n\n\tfunction _globalDragOver(/**Event*/evt) {\n\t\tevt.dataTransfer.dropEffect = 'move';\n\t\tevt.preventDefault();\n\t}\n\n\n\tfunction _on(el, event, fn) {\n\t\tel.addEventListener(event, fn, false);\n\t}\n\n\n\tfunction _off(el, event, fn) {\n\t\tel.removeEventListener(event, fn, false);\n\t}\n\n\n\tfunction _toggleClass(el, name, state) {\n\t\tif (el) {\n\t\t\tif (el.classList) {\n\t\t\t\tel.classList[state ? 'add' : 'remove'](name);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar className = (' ' + el.className + ' ').replace(RSPACE, ' ').replace(' ' + name + ' ', ' ');\n\t\t\t\tel.className = (className + (state ? ' ' + name : '')).replace(RSPACE, ' ');\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfunction _css(el, prop, val) {\n\t\tvar style = el && el.style;\n\n\t\tif (style) {\n\t\t\tif (val === void 0) {\n\t\t\t\tif (document.defaultView && document.defaultView.getComputedStyle) {\n\t\t\t\t\tval = document.defaultView.getComputedStyle(el, '');\n\t\t\t\t}\n\t\t\t\telse if (el.currentStyle) {\n\t\t\t\t\tval = el.currentStyle;\n\t\t\t\t}\n\n\t\t\t\treturn prop === void 0 ? val : val[prop];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (!(prop in style)) {\n\t\t\t\t\tprop = '-webkit-' + prop;\n\t\t\t\t}\n\n\t\t\t\tstyle[prop] = val + (typeof val === 'string' ? '' : 'px');\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfunction _find(ctx, tagName, iterator) {\n\t\tif (ctx) {\n\t\t\tvar list = ctx.getElementsByTagName(tagName), i = 0, n = list.length;\n\n\t\t\tif (iterator) {\n\t\t\t\tfor (; i < n; i++) {\n\t\t\t\t\titerator(list[i], i);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn list;\n\t\t}\n\n\t\treturn [];\n\t}\n\n\n\n\tfunction _dispatchEvent(sortable, rootEl, name, targetEl, fromEl, startIndex, newIndex) {\n\t\tvar evt = document.createEvent('Event'),\n\t\t\toptions = (sortable || rootEl[expando]).options,\n\t\t\tonName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n\n\t\tevt.initEvent(name, true, true);\n\n\t\tevt.to = rootEl;\n\t\tevt.from = fromEl || rootEl;\n\t\tevt.item = targetEl || rootEl;\n\t\tevt.clone = cloneEl;\n\n\t\tevt.oldIndex = startIndex;\n\t\tevt.newIndex = newIndex;\n\n\t\trootEl.dispatchEvent(evt);\n\n\t\tif (options[onName]) {\n\t\t\toptions[onName].call(sortable, evt);\n\t\t}\n\t}\n\n\n\tfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect) {\n\t\tvar evt,\n\t\t\tsortable = fromEl[expando],\n\t\t\tonMoveFn = sortable.options.onMove,\n\t\t\tretVal;\n\n\t\tif (onMoveFn) {\n\t\t\tevt = document.createEvent('Event');\n\t\t\tevt.initEvent('move', true, true);\n\n\t\t\tevt.to = toEl;\n\t\t\tevt.from = fromEl;\n\t\t\tevt.dragged = dragEl;\n\t\t\tevt.draggedRect = dragRect;\n\t\t\tevt.related = targetEl || toEl;\n\t\t\tevt.relatedRect = targetRect || toEl.getBoundingClientRect();\n\n\t\t\tretVal = onMoveFn.call(sortable, evt);\n\t\t}\n\n\t\treturn retVal;\n\t}\n\n\n\tfunction _disableDraggable(el) {\n\t\tel.draggable = false;\n\t}\n\n\n\tfunction _unsilent() {\n\t\t_silent = false;\n\t}\n\n\n\t/** @returns {HTMLElement|false} */\n\tfunction _ghostInBottom(el, evt) {\n\t\tvar lastEl = el.lastElementChild,\n\t\t\trect = lastEl.getBoundingClientRect();\n\n\t\treturn (evt.clientY - (rect.top + rect.height) > 5) && lastEl; // min delta\n\t}\n\n\n\t/**\n\t * Generate id\n\t * @param {HTMLElement} el\n\t * @returns {String}\n\t * @private\n\t */\n\tfunction _generateId(el) {\n\t\tvar str = el.tagName + el.className + el.src + el.href + el.textContent,\n\t\t\ti = str.length,\n\t\t\tsum = 0;\n\n\t\twhile (i--) {\n\t\t\tsum += str.charCodeAt(i);\n\t\t}\n\n\t\treturn sum.toString(36);\n\t}\n\n\t/**\n\t * Returns the index of an element within its parent\n\t * @param el\n\t * @returns {number}\n\t * @private\n\t */\n\tfunction _index(/**HTMLElement*/el) {\n\t\tvar index = 0;\n\t\twhile (el && (el = el.previousElementSibling)) {\n\t\t\tif (el.nodeName.toUpperCase() !== 'TEMPLATE') {\n\t\t\t\tindex++;\n\t\t\t}\n\t\t}\n\t\treturn index;\n\t}\n\n\tfunction _throttle(callback, ms) {\n\t\tvar args, _this;\n\n\t\treturn function () {\n\t\t\tif (args === void 0) {\n\t\t\t\targs = arguments;\n\t\t\t\t_this = this;\n\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tif (args.length === 1) {\n\t\t\t\t\t\tcallback.call(_this, args[0]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcallback.apply(_this, args);\n\t\t\t\t\t}\n\n\t\t\t\t\targs = void 0;\n\t\t\t\t}, ms);\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction _extend(dst, src) {\n\t\tif (dst && src) {\n\t\t\tfor (var key in src) {\n\t\t\t\tif (src.hasOwnProperty(key)) {\n\t\t\t\t\tdst[key] = src[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn dst;\n\t}\n\n\n\t// Export utils\n\tSortable.utils = {\n\t\ton: _on,\n\t\toff: _off,\n\t\tcss: _css,\n\t\tfind: _find,\n\t\tbind: _bind,\n\t\tis: function (el, selector) {\n\t\t\treturn !!_closest(el, selector, el);\n\t\t},\n\t\textend: _extend,\n\t\tthrottle: _throttle,\n\t\tclosest: _closest,\n\t\ttoggleClass: _toggleClass,\n\t\tindex: _index\n\t};\n\n\n\tSortable.version = '1.2.1';\n\n\n\t/**\n\t * Create sortable instance\n\t * @param {HTMLElement} el\n\t * @param {Object} [options]\n\t */\n\tSortable.create = function (el, options) {\n\t\treturn new Sortable(el, options);\n\t};\n\n\t// Export\n\treturn Sortable;\n});\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentCards = void 0;\nvar CE_1 = require(\"../../Utils/CE\");\nvar TextHighlighter_1 = require(\"../../Utils/TextHighlighter\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar Sortable = require(\"sortablejs\");\nvar ComponentCards = /** @class */ (function (_super) {\n __extends(ComponentCards, _super);\n function ComponentCards(options) {\n var _a, _b;\n var _this = _super.call(this) || this;\n _this.entries = {};\n _this.container = (0, CE_1.ce)('div', 'mux_cards');\n if (options.onePerRow === true)\n _this.container.classList.add('mux_cards-oneperrow');\n if (options.dragable !== false)\n _this.sortable = new Sortable(_this.container, {\n ghostClass: 'mux_cards-item-dragging',\n onStart: function () {\n _this.container.classList.add('mux_cards-dragging');\n },\n onEnd: function (evt) {\n _this.container.classList.remove('mux_cards-dragging');\n _this.callEvent('orderUpdated', _this.getOrder());\n },\n });\n _this.highlightText = (_a = options === null || options === void 0 ? void 0 : options.highlightText) !== null && _a !== void 0 ? _a : false;\n _this.setItems((_b = options === null || options === void 0 ? void 0 : options.items) !== null && _b !== void 0 ? _b : []);\n return _this;\n }\n ComponentCards.prototype.setItems = function (items) {\n var _this = this;\n this.container.innerHTML = '';\n this.entries = {};\n items.forEach(function (item) { return _this.addItem(item); });\n };\n ComponentCards.prototype.addItem = function (item) {\n var _this = this;\n var _a, _b;\n var element = (0, CE_1.ce)(item.href != undefined ? 'a' : 'div', 'mux_cards-item', {\n uid: item.uniqueIdentifier,\n });\n if (item.href != undefined)\n element.href = item.href;\n if (item.click != undefined)\n element.onclick = function () { return item.click(); };\n if (item.tooltip != undefined)\n element.title = item.title;\n if (item.enabled == false)\n element.classList.add('mux_cards-item-disabled');\n if (item.uniqueIdentifier != undefined)\n this.entries[item.uniqueIdentifier] = element;\n if (item.thumbnail != null) {\n var thumbnailType = (_a = item.thumbnailType) !== null && _a !== void 0 ? _a : 'image';\n if (thumbnailType == 'image') {\n element.appendChild((0, CE_1.ce)('img', 'mux_cards-item-thumbnail', {\n src: item.thumbnail,\n }));\n }\n else if (thumbnailType == 'frame') {\n var ratio = (_b = item.thumbnailWidthRatio) !== null && _b !== void 0 ? _b : 1;\n var frame = (0, CE_1.ce)('iframe', 'mux_cards-item-thumbnail', {\n scrolling: 'no',\n src: item.thumbnail,\n });\n element.appendChild(frame);\n var scaleClock = setInterval(function () {\n if (element == null ||\n element.parentElement == null ||\n frame == null)\n return clearInterval(scaleClock);\n frame.style.width = \"\".concat(frame.clientHeight * ratio, \"px\");\n }, 100);\n }\n }\n var info = (0, CE_1.ce)('div', 'mux_cards-item-info');\n info.appendChild(this.highlightText\n ? (0, TextHighlighter_1.generateTextHighlights)(item.title, [\n 'mux_header',\n 'mux_small',\n ])\n : (0, CE_1.ce)('div', ['mux_header', 'mux_small'], null, item.title));\n if (item.sublines != undefined && item.sublines.length > 0)\n item.sublines.forEach(function (subline) {\n if (subline != null)\n info.appendChild(_this.highlightText\n ? (0, TextHighlighter_1.generateTextHighlights)(subline, [\n 'mux_text',\n 'mux_small',\n ])\n : (0, CE_1.ce)('div', ['mux_text', 'mux_small'], null, subline));\n });\n element.appendChild(info);\n if (item.actions != undefined && item.actions.length > 0) {\n var buttons = (0, CE_1.ce)('div', 'mux_cards-item-buttons');\n item.actions.forEach(function (action) {\n var buttonelem = (0, CE_1.ce)(action.href != undefined ? 'a' : 'div', 'mux_cards-item-button');\n if (action.href != undefined)\n buttonelem.href = action.href;\n if (action.click != undefined)\n buttonelem.onclick = function (e) {\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n action.click();\n };\n if (action.tooltip != undefined)\n buttonelem.title = action.tooltip;\n buttonelem.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, action.materialIcon));\n buttons.appendChild(buttonelem);\n });\n element.appendChild(buttons);\n }\n this.container.appendChild(element);\n };\n ComponentCards.prototype.removeItem = function (uniqueIdentifier) {\n if (this.entries[uniqueIdentifier] != undefined) {\n this.entries[uniqueIdentifier].parentElement.removeChild(this.entries[uniqueIdentifier]);\n delete this.entries[uniqueIdentifier];\n }\n };\n ComponentCards.prototype.hasItem = function (uniqueIdentifier) {\n return this.entries[uniqueIdentifier] != undefined;\n };\n ComponentCards.prototype.clear = function () {\n this.container.innerHTML = '';\n this.entries = {};\n };\n ComponentCards.prototype.updateItemTitle = function (uniqueIdentifier, newTitle) {\n if (this.entries[uniqueIdentifier] == undefined)\n return;\n var existingHeader = this.entries[uniqueIdentifier].querySelector('.mux_header');\n var container = existingHeader.parentElement;\n container.insertBefore(this.highlightText\n ? (0, TextHighlighter_1.generateTextHighlights)(newTitle, ['mux_header', 'mux_small'])\n : (0, CE_1.ce)('div', ['mux_header', 'mux_small'], null, newTitle), existingHeader);\n container.removeChild(existingHeader);\n };\n ComponentCards.prototype.updateSublines = function (uniqueIdentifier, newSublines) {\n var _this = this;\n if (this.entries[uniqueIdentifier] == undefined)\n return;\n var info = this.entries[uniqueIdentifier].querySelector('.mux_cards-item-info');\n info.querySelectorAll('.mux_text.mux_small').forEach(function (existingSubline) {\n return existingSubline.parentElement.removeChild(existingSubline);\n });\n if (newSublines != undefined && newSublines.length > 0)\n newSublines.forEach(function (subline) {\n info.appendChild(_this.highlightText\n ? (0, TextHighlighter_1.generateTextHighlights)(subline, [\n 'mux_text',\n 'mux_small',\n ])\n : (0, CE_1.ce)('div', ['mux_text', 'mux_small'], null, subline));\n });\n };\n ComponentCards.prototype.updateThumbnail = function (uniqueIdentifier, thumbnailSrc) {\n if (this.entries[uniqueIdentifier] == undefined)\n return;\n var thumbnail = this.entries[uniqueIdentifier].querySelector('.mux_cards-item-thumbnail');\n thumbnail.src = thumbnailSrc;\n };\n ComponentCards.prototype.getOrder = function () {\n var order = [];\n this.container\n .querySelectorAll('.mux_cards-item')\n .forEach(function (item) { return order.push(item.getAttribute('uid')); });\n return order;\n };\n return ComponentCards;\n}(baseComponent_1.MUXComponent));\nexports.ComponentCards = ComponentCards;\n//# sourceMappingURL=Component.Cards.js.map","\"use strict\";\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KeyBinderOverwrite = void 0;\nvar KeyBinderOverwrite = /** @class */ (function () {\n function KeyBinderOverwrite(id, KeyBinder) {\n this.binds = {};\n this.id = id;\n this._KeyBinder = KeyBinder;\n }\n KeyBinderOverwrite.prototype.log = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (window.location.search.includes('debug'))\n console.log.apply(console, __spreadArray(['[KeyBinder]'], args, false));\n };\n KeyBinderOverwrite.prototype.close = function () {\n this._KeyBinder.closeOverwrite(this.id);\n };\n KeyBinderOverwrite.prototype.bind = function (key, callback, settings) {\n if (settings == undefined)\n settings = {};\n var query = this._KeyBinder.createKeyQuery(key, settings.controlKey, settings.shiftKey, settings.altKey);\n if (this.binds[query] != undefined)\n return this.log(\"Unable to bind key query '\".concat(query, \"' in overwrite because it already has a bind\"));\n if ((settings === null || settings === void 0 ? void 0 : settings.disableInElementsWithTags) != undefined)\n settings.disableInElementsWithTags =\n settings.disableInElementsWithTags.map(function (tagname) {\n return tagname.toUpperCase();\n });\n this.binds[query] = { callback: callback, settings: settings };\n };\n return KeyBinderOverwrite;\n}());\nexports.KeyBinderOverwrite = KeyBinderOverwrite;\n//# sourceMappingURL=KeyBinderOverwrite.js.map","\"use strict\";\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KeyBinderBase = void 0;\nvar KeyBinderOverwrite_1 = require(\"./KeyBinderOverwrite\");\nvar KeyBinderBase = /** @class */ (function () {\n function KeyBinderBase() {\n this.binds = {};\n this.overwrites = [];\n this.log('Preparing KeyBinder');\n this.registerListeners();\n }\n KeyBinderBase.prototype.log = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (window.location.search.includes('debug'))\n console.log.apply(console, __spreadArray(['[KeyBinder]'], args, false));\n };\n KeyBinderBase.prototype.multiBind = function (keys, callback, settings) {\n for (var i = 0; i < keys.length; i++)\n this.bind(keys[i], callback, settings);\n };\n KeyBinderBase.prototype.bind = function (key, callback, settings) {\n if (settings == undefined)\n settings = {};\n var query = this.createKeyQuery(key, settings.controlKey, settings.shiftKey, settings.altKey);\n if (this.binds[query] != undefined)\n return this.log(\"Unable to bind key query '\".concat(query, \"' because it already has a bind\"));\n if ((settings === null || settings === void 0 ? void 0 : settings.disableInElementsWithTags) != undefined)\n settings.disableInElementsWithTags =\n settings.disableInElementsWithTags.map(function (tagname) {\n return tagname.toUpperCase();\n });\n this.binds[query] = { callback: callback, settings: settings };\n };\n KeyBinderBase.prototype.unbind = function (key, settings) {\n if (settings == undefined)\n settings = {};\n var query = this.createKeyQuery(key, settings.controlKey, settings.shiftKey, settings.altKey);\n if (this.binds[query] == undefined)\n return this.log(\"Unable to unbind key query '\".concat(query, \"' because it has no bind\"));\n };\n KeyBinderBase.prototype.createOverwrite = function () {\n var id = this.generateOverwriteId();\n var overwrite = new KeyBinderOverwrite_1.KeyBinderOverwrite(id, this);\n this.overwrites.push(overwrite);\n this.log(\"Overwrite with id '\".concat(id, \"' was created\"));\n return overwrite;\n };\n KeyBinderBase.prototype.closeOverwrite = function (id) {\n for (var i = 0; i < this.overwrites.length; i++)\n if (this.overwrites[i].id == id) {\n this.overwrites.splice(i, 1);\n this.log(\"Overwrite with id '\".concat(id, \"' was closed\"));\n return;\n }\n };\n KeyBinderBase.prototype.createKeyQuery = function (key, ctrlKey, shiftKey, altKey) {\n if (ctrlKey === void 0) { ctrlKey = false; }\n if (shiftKey === void 0) { shiftKey = false; }\n if (altKey === void 0) { altKey = false; }\n var queryParts = [key.toLowerCase()];\n if (ctrlKey)\n queryParts.push('ctrl');\n if (shiftKey)\n queryParts.push('shft');\n if (altKey)\n queryParts.push('alt');\n return queryParts.join(':');\n };\n KeyBinderBase.prototype.getAllBinds = function () {\n return Array.from(new Set(this.overwrites\n .map(function (overwrite) { return Object.keys(overwrite.binds); })\n .concat(Object.keys(this.binds))\n .flat()));\n };\n KeyBinderBase.prototype.generateOverwriteId = function () {\n while (true) {\n var id = (Math.random() + 1).toString(36).substring(7);\n if (!this.overwriteIdExists(id))\n return id;\n }\n };\n KeyBinderBase.prototype.overwriteIdExists = function (id) {\n for (var i = 0; i < this.overwrites.length; i++)\n if (this.overwrites[i].id == id)\n return true;\n return false;\n };\n KeyBinderBase.prototype.registerListeners = function () {\n var _this = this;\n window.addEventListener('keydown', function (e) {\n var _a;\n var query = _this.createKeyQuery(e.key, e.ctrlKey || e.metaKey, e.shiftKey, e.altKey);\n if (window.location.search.includes('keydebug'))\n _this.log(\"Got keypress: \".concat(query));\n var binds = _this.binds;\n if (_this.overwrites.length > 0) {\n binds = _this.overwrites[_this.overwrites.length - 1].binds;\n }\n if (binds[query] == undefined)\n return;\n var bind = binds[query];\n if (((_a = bind === null || bind === void 0 ? void 0 : bind.settings) === null || _a === void 0 ? void 0 : _a.disableInElementsWithTags) != undefined &&\n bind.settings.disableInElementsWithTags.includes(document.activeElement.tagName))\n return;\n e.preventDefault();\n bind.callback();\n });\n };\n return KeyBinderBase;\n}());\nexports.KeyBinderBase = KeyBinderBase;\n//# sourceMappingURL=KeyBinderBase.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MorphKey = void 0;\nvar KeyBinderBase_1 = require(\"./Keys/KeyBinderBase\");\nexports.MorphKey = new KeyBinderBase_1.KeyBinderBase();\n//# sourceMappingURL=Morph.Keys.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentContextMenu = void 0;\nvar Morph_Keys_1 = require(\"../../Morph.Keys\");\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar ComponentContextMenu = /** @class */ (function (_super) {\n __extends(ComponentContextMenu, _super);\n function ComponentContextMenu(options) {\n var _a, _b;\n var _this = _super.call(this) || this;\n _this.open = true;\n _this.container = (0, CE_1.ce)('div', 'mux_contextmenu');\n var align = (_a = options === null || options === void 0 ? void 0 : options.align) !== null && _a !== void 0 ? _a : 'center';\n if ((options === null || options === void 0 ? void 0 : options.materialIconColor) != undefined)\n _this.container.style.setProperty('--mux-contextmenu-iconcolor', options.materialIconColor);\n _this.setItems((_b = options === null || options === void 0 ? void 0 : options.items) !== null && _b !== void 0 ? _b : [], options === null || options === void 0 ? void 0 : options.selected);\n var parentContainer = document.body;\n parentContainer.appendChild(_this.container);\n _this.container.style.top = \"\".concat(options.y - parentContainer.getBoundingClientRect().top, \"px\");\n var left = options.x;\n var maxLeft = document.body.clientWidth - _this.container.clientWidth - 20;\n var minLeft = 10;\n if (align == 'center') {\n left -= _this.container.clientWidth / 2;\n _this.container.style.transformOrigin = 'top center';\n }\n else if (align == 'left') {\n _this.container.style.transformOrigin = 'top left';\n }\n else if (align == 'right') {\n left -= _this.container.clientWidth;\n _this.container.style.transformOrigin = 'top right';\n }\n left = Math.min(left, maxLeft);\n left = Math.max(left, minLeft);\n var maxHeight = document.body.clientHeight - options.y - 20;\n _this.container.style.left = \"\".concat(left, \"px\");\n _this.container.style.transitionDuration = '.2s';\n _this.container.style.transform = 'scale(1)';\n _this.container.style.opacity = '1';\n _this.container.style.maxHeight = \"\".concat(maxHeight, \"px\");\n if ((options === null || options === void 0 ? void 0 : options.highlightedItem) != undefined &&\n _this.container.querySelector(\"[uid=\\\"\".concat(options.highlightedItem, \"\\\"]\")) != null) {\n var selected = _this.container.querySelector(\"[uid=\\\"\".concat(options.highlightedItem, \"\\\"]\"));\n selected.classList.add('mux_contextmenu-item-selected');\n setTimeout(function () {\n selected.scrollIntoView();\n }, 100);\n }\n if ((options === null || options === void 0 ? void 0 : options.selected) != undefined &&\n _this.container.querySelector(\"[uid=\\\"\".concat(options.selected, \"\\\"]\")) != null) {\n var selected = _this.container.querySelector(\"[uid=\\\"\".concat(options.selected, \"\\\"]\"));\n setTimeout(function () {\n selected.scrollIntoView({\n block: 'center',\n inline: 'center',\n });\n }, 100);\n }\n var delay = function (duration, callback) {\n setTimeout(function () {\n callback();\n }, duration);\n };\n _this.handleClick = function (e) {\n var _a, _b;\n if (e.target == undefined)\n return delay(100, function () { return _this.close('outside'); });\n var target = e.target;\n if (target.classList.length == 0)\n return delay(100, function () { return _this.close('outsideclick'); });\n if (!target.classList[0].startsWith('mux_contextmenu') &&\n !((_b = (_a = target.parentElement) === null || _a === void 0 ? void 0 : _a.classList[0]) === null || _b === void 0 ? void 0 : _b.startsWith('mux_contextmenu')))\n return delay(100, function () { return _this.close('outsideparentclick'); });\n };\n setTimeout(function () {\n window.addEventListener('click', _this.handleClick);\n window.addEventListener('mousedown', _this.handleClick);\n window.addEventListener('touchstart', _this.handleClick);\n }, 100);\n _this.overwrite = Morph_Keys_1.MorphKey.createOverwrite();\n if ((options === null || options === void 0 ? void 0 : options.highlightedItem) == undefined) {\n _this.overwrite.bind('ArrowUp', function () {\n var selected = _this.container.querySelector('.mux_contextmenu-item-selected');\n if (selected == null) {\n var elements = _this.container.querySelectorAll('.mux_contextmenu-item');\n if (elements.length > 0) {\n var first = elements[elements.length - 1];\n first.classList.add('mux_contextmenu-item-selected');\n first.scrollIntoView();\n }\n }\n else {\n var previous = selected.previousElementSibling;\n if (previous != null) {\n selected.classList.remove('mux_contextmenu-item-selected');\n previous.classList.add('mux_contextmenu-item-selected');\n previous.scrollIntoView();\n }\n }\n });\n _this.overwrite.bind('ArrowDown', function () {\n var selected = _this.container.querySelector('.mux_contextmenu-item-selected');\n if (selected == null) {\n var elements = _this.container.querySelectorAll('.mux_contextmenu-item');\n if (elements.length > 0) {\n var first = elements[0];\n first.classList.add('mux_contextmenu-item-selected');\n first.scrollIntoView();\n }\n }\n else {\n var next = selected.nextElementSibling;\n if (next != null) {\n selected.classList.remove('mux_contextmenu-item-selected');\n next.classList.add('mux_contextmenu-item-selected');\n next.scrollIntoView();\n }\n }\n });\n }\n _this.overwrite.bind('Enter', function () {\n var selected = _this.container.querySelector('.mux_contextmenu-item-selected');\n if (selected != null) {\n selected.click();\n }\n });\n _this.overwrite.bind('Escape', function () {\n _this.close('escape');\n });\n return _this;\n }\n ComponentContextMenu.prototype.close = function (origin, byClick) {\n var _this = this;\n if (origin === void 0) { origin = 'integrator?'; }\n if (byClick === void 0) { byClick = false; }\n this.overwrite.close();\n this.open = false;\n this.killSubContexts();\n window.removeEventListener('click', this.handleClick);\n window.removeEventListener('mousedown', this.handleClick);\n window.removeEventListener('touchstart', this.handleClick);\n this.callEvent('close', byClick, origin);\n this.container.style.transform = 'scale(0)';\n this.container.style.opacity = '0';\n setTimeout(function () {\n _this.destroy();\n }, 200);\n };\n ComponentContextMenu.prototype.enable = function (uniqueIdentifier) {\n if (this.container.querySelector(\"[uid=\\\"\".concat(uniqueIdentifier, \"\\\"]\"))) {\n var element = this.container.querySelector(\"[uid=\\\"\".concat(uniqueIdentifier, \"\\\"]\"));\n element.classList.remove('mux_contextmenu-item-disabled');\n }\n };\n ComponentContextMenu.prototype.disable = function (uniqueIdentifier) {\n if (this.container.querySelector(\"[uid=\\\"\".concat(uniqueIdentifier, \"\\\"]\"))) {\n var element = this.container.querySelector(\"[uid=\\\"\".concat(uniqueIdentifier, \"\\\"]\"));\n element.classList.add('mux_contextmenu-item-disabled');\n }\n };\n ComponentContextMenu.prototype.isOpen = function () {\n return this.open;\n };\n ComponentContextMenu.prototype.setItems = function (items, selectedId) {\n var _this = this;\n this.container.innerHTML = '';\n items.forEach(function (item) {\n return _this.addItem(item, selectedId != null && selectedId == item.uniqueIdentifier);\n });\n };\n ComponentContextMenu.prototype.addItem = function (item, selected) {\n var _this = this;\n var _a, _b, _c;\n if (selected === void 0) { selected = false; }\n switch (item.type) {\n case 'separator':\n var separator = (0, CE_1.ce)('div', 'mux_contextmenu-separator');\n if (item.text != undefined && item.text.trim().length > 0)\n separator.appendChild((0, CE_1.ce)('span', null, null, item.text));\n this.container.appendChild(separator);\n break;\n case 'normal':\n var element = (0, CE_1.ce)(item.href != undefined ? 'a' : 'div', 'mux_contextmenu-item');\n if (selected)\n element.classList.add('mux_contextmenu-item-selected');\n var itemId = (_a = item.uniqueIdentifier) !== null && _a !== void 0 ? _a : (Math.random() + 1).toString(36).substring(7);\n if (item.href != undefined)\n element.setAttribute('href', item.href);\n if (item.tooltip != undefined)\n element.title = item.tooltip;\n if (item.materialIcon != undefined) {\n var materialIcon = (0, CE_1.ce)('span', [\n 'mux_contextmenu-item-materialicon',\n 'material-symbols-outlined',\n ], null, item.materialIcon);\n if (item.materialIconTransform != undefined)\n materialIcon.style.transform =\n item.materialIconTransform;\n element.appendChild(materialIcon);\n }\n else if (item.icon != undefined)\n element.appendChild((0, CE_1.ce)('img', 'mux_contextmenu-item-icon', {\n src: item.icon,\n }));\n if (item.uniqueIdentifier != undefined) {\n element.setAttribute('uid', item.uniqueIdentifier);\n }\n if (item.enabled == false)\n element.classList.add('mux_contextmenu-item-disabled');\n var itemContent = (0, CE_1.ce)('div', ['mux_text', 'mux_small'], null, (_b = item.text) !== null && _b !== void 0 ? _b : '');\n if (item.customFontSize != undefined)\n itemContent.style.fontSize = \"\".concat(item.customFontSize, \"px\");\n element.appendChild(itemContent);\n if (item.children == undefined && item.shortcut != undefined)\n element.appendChild((0, CE_1.ce)('div', [\n 'mux_contextmenu-shortcut',\n 'mux_text',\n 'mux_tiny',\n ], null, (_c = item.shortcut) !== null && _c !== void 0 ? _c : ''));\n if (item.children != undefined && item.children.length > 0) {\n element.appendChild((0, CE_1.ce)('span', [\n 'material-symbols-outlined',\n 'mux_contextmenu-item-arrow',\n ], null, 'keyboard_arrow_right'));\n }\n element.onmousemove = function () {\n if (_this.subContextParent == itemId)\n return;\n _this.killSubContexts();\n if (item.children != undefined &&\n item.children.length > 0) {\n var bounds = element.getBoundingClientRect();\n _this.subContextParent = itemId;\n _this.subContext = new ComponentContextMenu({\n items: item.children,\n x: bounds.x + bounds.width + 1,\n y: bounds.y,\n align: 'left',\n });\n _this.subContext.on('close', function (byClick) {\n if (byClick)\n _this.close('parentkillchildhover', true);\n });\n }\n };\n if (item.click != undefined && item.href == undefined) {\n element.onclick = function () {\n if (item.stayOpenOnClick != true) {\n _this.close('itemclick', true);\n _this.killSubContexts();\n }\n item.click();\n };\n }\n this.container.appendChild(element);\n break;\n }\n };\n ComponentContextMenu.prototype.killSubContexts = function () {\n if (this.subContext != null) {\n this.subContext.close('parentkillchild');\n this.subContext = null;\n }\n this.subContextParent = null;\n };\n return ComponentContextMenu;\n}(baseComponent_1.MUXComponent));\nexports.ComponentContextMenu = ComponentContextMenu;\n//# sourceMappingURL=Component.ContextMenu.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentDialog = void 0;\nvar Index_1 = require(\"../../Index\");\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar ComponentDialog = /** @class */ (function (_super) {\n __extends(ComponentDialog, _super);\n function ComponentDialog(options) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n var _this = _super.call(this) || this;\n var width = (_a = options === null || options === void 0 ? void 0 : options.width) !== null && _a !== void 0 ? _a : 'small';\n var height = (_b = options === null || options === void 0 ? void 0 : options.height) !== null && _b !== void 0 ? _b : 'auto';\n _this.container = (0, CE_1.ce)('div', 'mux_dialogcontainer');\n _this.dialog = (0, CE_1.ce)('div', 'mux_dialog');\n _this.dialog.classList.add(\"mux_w-\".concat(width), \"mux_h-\".concat(height));\n var openDialogs = document.querySelectorAll(\".mux_dialog.mux_w-\".concat(width, \".mux_h-\").concat(height)).length;\n _this.dialog.style.marginLeft = \"\".concat(openDialogs * 30, \"px\");\n _this.dialog.style.marginTop = \"\".concat(openDialogs * 30, \"px\");\n _this.container.append(_this.dialog);\n var titlebar = (0, CE_1.ce)('div', 'mux_dialog-titlebar');\n titlebar.appendChild((0, CE_1.ce)('div', ['mux_dialog-title', 'mux_header'], null, options.title));\n var titlesettings = (0, CE_1.ce)('div', 'mux_dialog-titlesettings');\n titlebar.appendChild(titlesettings);\n _this.titlebar = titlesettings;\n if ((options === null || options === void 0 ? void 0 : options.closeable) !== false) {\n var close = (0, CE_1.ce)('div', 'mux_dialog-close');\n close.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'close'));\n close.onclick = function () {\n _this.callEvent('close', new CloseEvent(_this));\n };\n titlebar.appendChild(close);\n }\n _this.dialog.appendChild(titlebar);\n _this.content = (0, CE_1.ce)('div', 'mux_dialog-content');\n _this.dialog.appendChild(_this.content);\n var okButtonVisible = (_c = options === null || options === void 0 ? void 0 : options.okButtonVisible) !== null && _c !== void 0 ? _c : true;\n var cancelButtonVisible = (_d = options === null || options === void 0 ? void 0 : options.cancelButtonVisible) !== null && _d !== void 0 ? _d : true;\n if (okButtonVisible || cancelButtonVisible) {\n var actionbar = (0, CE_1.ce)('div', 'mux_dialog-actionbar');\n var buttons = (0, CE_1.ce)('div', 'mux_dialog-buttons');\n if (cancelButtonVisible) {\n var cancelButtonEnabled = (_e = options === null || options === void 0 ? void 0 : options.cancelButtonEnabled) !== null && _e !== void 0 ? _e : true;\n _this.cancelButton = new Index_1.MorphComponent.Button({\n content: (_f = options === null || options === void 0 ? void 0 : options.cancelButtonText) !== null && _f !== void 0 ? _f : 'Cancel',\n mode: cancelButtonEnabled ? 'normal' : 'disabled',\n target: function () {\n _this.callEvent('cancel', new CloseEvent(_this));\n },\n });\n buttons.appendChild(_this.cancelButton.container);\n }\n if (okButtonVisible) {\n var okButtonEnabled = (_g = options === null || options === void 0 ? void 0 : options.okButtonEnabled) !== null && _g !== void 0 ? _g : true;\n _this.okButton = new Index_1.MorphComponent.Button({\n content: (_h = options === null || options === void 0 ? void 0 : options.okButtonText) !== null && _h !== void 0 ? _h : 'OK',\n mode: okButtonEnabled ? 'highlight' : 'disabled',\n target: function () {\n _this.callEvent('ok', new CloseEvent(_this));\n },\n });\n buttons.appendChild(_this.okButton.container);\n }\n actionbar.appendChild(buttons);\n _this.dialog.appendChild(actionbar);\n }\n else\n _this.content.classList.add('mux_dialog-content-nobuttons');\n document.body.appendChild(_this.container);\n setTimeout(function () {\n _this.container.style.opacity = '1';\n _this.dialog.style.opacity = '1';\n _this.dialog.style.transform = 'scale(1)';\n }, 20);\n _this.keyOverwrite = Index_1.MorphKey.createOverwrite();\n _this.keyOverwrite.bind('Escape', function () {\n _this.callEvent('cancel', new CloseEvent(_this));\n });\n _this.keyOverwrite.bind('Enter', function () {\n _this.callEvent('ok', new CloseEvent(_this));\n });\n return _this;\n }\n ComponentDialog.prototype.close = function () {\n var _this = this;\n this.dialog.style.transitionTimingFunction = 'ease-out';\n this.dialog.style.transform = 'scale(0.8)';\n this.dialog.style.opacity = '0';\n this.container.style.opacity = '0';\n this.container.style.pointerEvents = 'none';\n this.keyOverwrite.close();\n setTimeout(function () {\n _this.destroy();\n }, 200);\n };\n ComponentDialog.prototype.setOkButtonMode = function (mode) {\n this.okButton.updateMode(mode);\n };\n ComponentDialog.prototype.setCancelButtonMode = function (mode) {\n this.cancelButton.updateMode(mode);\n };\n return ComponentDialog;\n}(baseComponent_1.MUXComponent));\nexports.ComponentDialog = ComponentDialog;\nvar CloseEvent = /** @class */ (function () {\n function DialogCloseEvent(origin) {\n var _this = this;\n this.origin = origin;\n this.autoCloseInterval = setTimeout(function () {\n _this.close();\n }, 50);\n }\n DialogCloseEvent.prototype.preventClose = function () {\n clearInterval(this.autoCloseInterval);\n };\n DialogCloseEvent.prototype.close = function () {\n clearInterval(this.autoCloseInterval);\n this.origin.close();\n };\n return DialogCloseEvent;\n}());\n//# sourceMappingURL=Component.Dialog.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentGroup = void 0;\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar ComponentGroup = /** @class */ (function (_super) {\n __extends(ComponentGroup, _super);\n function ComponentGroup(options) {\n var _a, _b, _c;\n var _this = _super.call(this) || this;\n _this.container = (0, CE_1.ce)('div', ['mux_group', 'mux_group-open']);\n var closeable = (_a = options === null || options === void 0 ? void 0 : options.closeable) !== null && _a !== void 0 ? _a : false;\n if ((options === null || options === void 0 ? void 0 : options.open) == false && closeable) {\n _this.container.classList.remove('mux_group-open');\n }\n var header = (0, CE_1.ce)('div', 'mux_group-header');\n if ((options === null || options === void 0 ? void 0 : options.materialIcon) != undefined)\n header.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, options.materialIcon));\n _this.title = (0, CE_1.ce)('div', ['mux_header', 'mux_small'], null, (_b = options === null || options === void 0 ? void 0 : options.title) !== null && _b !== void 0 ? _b : '');\n _this.subTitle = (0, CE_1.ce)('div', ['mux_text', 'mux_small'], null, (_c = options === null || options === void 0 ? void 0 : options.subTitle) !== null && _c !== void 0 ? _c : '');\n header.append(_this.title, _this.subTitle);\n if ((options === null || options === void 0 ? void 0 : options.actions) != undefined && options.actions.length > 0) {\n var actions = (0, CE_1.ce)('div', 'mux_group-actions');\n options.actions.forEach(function (action) {\n var element = (0, CE_1.ce)('div', 'mux_group-iconbutton');\n element.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, action.materialIcon));\n element.onclick = function (e) {\n e.stopPropagation();\n action.click();\n };\n actions.appendChild(element);\n });\n header.appendChild(actions);\n }\n if (closeable) {\n var foldIcon = (0, CE_1.ce)('span', ['material-symbols-outlined', 'mux_group-fold'], null, 'keyboard_arrow_right');\n header.appendChild(foldIcon);\n header.onclick = function () {\n if (_this.container.classList.contains('mux_group-open'))\n _this.container.classList.remove('mux_group-open');\n else\n _this.container.classList.add('mux_group-open');\n _this.callEvent('openState', _this.container.classList.contains('mux_group-open'));\n };\n }\n _this.container.appendChild(header);\n _this.content = (0, CE_1.ce)('div', 'mux_group-content');\n var contentwrapper = (0, CE_1.ce)('div', 'mux_group-contentwrapper');\n contentwrapper.appendChild(_this.content);\n _this.container.appendChild(contentwrapper);\n return _this;\n }\n ComponentGroup.prototype.setTitle = function (title) {\n this.title.innerText = title !== null && title !== void 0 ? title : '';\n };\n ComponentGroup.prototype.setSubTitle = function (subTitle) {\n this.subTitle.innerText = subTitle !== null && subTitle !== void 0 ? subTitle : '';\n };\n return ComponentGroup;\n}(baseComponent_1.MUXComponent));\nexports.ComponentGroup = ComponentGroup;\n//# sourceMappingURL=Component.Group.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentHeader = void 0;\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar ComponentHeader = /** @class */ (function (_super) {\n __extends(ComponentHeader, _super);\n function ComponentHeader(options) {\n var _a;\n var _this = _super.call(this) || this;\n var size = (_a = options === null || options === void 0 ? void 0 : options.size) !== null && _a !== void 0 ? _a : 'normal';\n _this.container = (0, CE_1.ce)('div', ['mux_header', \"mux_\".concat(size)], null, options === null || options === void 0 ? void 0 : options.content);\n return _this;\n }\n ComponentHeader.prototype.update = function (content) {\n this.container.innerHTML = content;\n };\n return ComponentHeader;\n}(baseComponent_1.MUXComponent));\nexports.ComponentHeader = ComponentHeader;\n//# sourceMappingURL=Component.Header.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentIconGrid = void 0;\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar Sortable = require(\"sortablejs\");\nvar ComponentIconGrid = /** @class */ (function (_super) {\n __extends(ComponentIconGrid, _super);\n function ComponentIconGrid(options) {\n var _a;\n var _this = _super.call(this) || this;\n _this.container = (0, CE_1.ce)('div', 'mux_icongrid');\n if ((options === null || options === void 0 ? void 0 : options.sortable) === true) {\n _this.sortable = new Sortable(_this.container, {\n ghostClass: 'mux_icongrid-item-dragging',\n onStart: function () {\n _this.container.classList.add('mux_icongrid-dragging');\n },\n onEnd: function (evt) {\n _this.container.classList.remove('mux_icongrid-dragging');\n _this.callEvent('orderUpdated', _this.getOrder());\n },\n });\n }\n _this.setItems((_a = options === null || options === void 0 ? void 0 : options.items) !== null && _a !== void 0 ? _a : []);\n return _this;\n }\n ComponentIconGrid.prototype.setItems = function (items) {\n var _this = this;\n this.container.innerHTML = '';\n items.forEach(function (item) { return _this.addItem(item); });\n };\n ComponentIconGrid.prototype.addItem = function (item) {\n var element = (0, CE_1.ce)('div', 'mux_icongrid-item');\n if (item.uniqueIdentifier != undefined)\n element.setAttribute('uid', item.uniqueIdentifier);\n if (!item.enabled)\n element.classList.add('mux_icongrid-item-disabled');\n if (item.click != undefined)\n element.onclick = item.click;\n if (item.materialIcon != undefined)\n element.appendChild((0, CE_1.ce)('span', ['mux_icongrid-item-icon', 'material-symbols-outline'], null, item.materialIcon));\n else if (item.icon != undefined)\n element.appendChild((0, CE_1.ce)('img', 'mux_icongrid-item-icon', { src: item.icon }));\n element.appendChild((0, CE_1.ce)('div', ['mux_text', 'mux_small'], null, item.text));\n this.container.appendChild(element);\n };\n ComponentIconGrid.prototype.getOrder = function () {\n return Array.from(this.container.querySelectorAll('.mux_icongrid-item')).map(function (item) { return item.getAttribute('uid'); });\n };\n ComponentIconGrid.prototype.enable = function (uniqueIdentifier) {\n var item = this.container.querySelector(\"[uid=\\\"\".concat(uniqueIdentifier, \"\\\"]\"));\n if (item != undefined)\n item.classList.remove('mux_icongrid-item-disabled');\n };\n ComponentIconGrid.prototype.disable = function (uniqueIdentifier) {\n var item = this.container.querySelector(\"[uid=\\\"\".concat(uniqueIdentifier, \"\\\"]\"));\n if (item != undefined)\n item.classList.add('mux_icongrid-item-disabled');\n };\n return ComponentIconGrid;\n}(baseComponent_1.MUXComponent));\nexports.ComponentIconGrid = ComponentIconGrid;\n//# sourceMappingURL=Component.IconGrid.js.map","/*! Hammer.JS - v2.0.17-rc - 2019-12-16\n * http://naver.github.io/egjs\n *\n * Forked By Naver egjs\n * Copyright (c) hammerjs\n * Licensed under the MIT license */\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\n\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\nvar assign$1 = assign;\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = typeof document === \"undefined\" ? {\n style: {}\n} : document.createElement('div');\nvar TYPE_FUNCTION = 'function';\nvar round = Math.round,\n abs = Math.abs;\nvar now = Date.now;\n\n/**\n * @private\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\n\nfunction prefixed(obj, property) {\n var prefix;\n var prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n var i = 0;\n\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = prefix ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n\n i++;\n }\n\n return undefined;\n}\n\n/* eslint-disable no-new-func, no-nested-ternary */\nvar win;\n\nif (typeof window === \"undefined\") {\n // window is undefined in node.js\n win = {};\n} else {\n win = window;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n\n var touchMap = {};\n var cssSupports = win.CSS && win.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function (val) {\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n return touchMap[val] = cssSupports ? win.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\n\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\nvar SUPPORT_TOUCH = 'ontouchstart' in win;\nvar SUPPORT_POINTER_EVENTS = prefixed(win, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\nvar COMPUTE_INTERVAL = 25;\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * @private\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * @private\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\n\nfunction boolOrFn(val, args) {\n if (typeof val === TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n\n return val;\n}\n\n/**\n * @private\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * @private\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\n\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y); // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n } // pan-x OR pan-y\n\n\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n } // manipulation\n\n\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\n/**\n * @private\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\n\nvar TouchAction =\n/*#__PURE__*/\nfunction () {\n function TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n }\n /**\n * @private\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n\n\n var _proto = TouchAction.prototype;\n\n _proto.set = function set(value) {\n // find out the touch-action by the event handlers\n if (value === TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n\n this.actions = value.toLowerCase().trim();\n };\n /**\n * @private\n * just re-set the touchAction value\n */\n\n\n _proto.update = function update() {\n this.set(this.manager.options.touchAction);\n };\n /**\n * @private\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n\n\n _proto.compute = function compute() {\n var actions = [];\n each(this.manager.recognizers, function (recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n };\n /**\n * @private\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n\n\n _proto.preventDefaults = function preventDefaults(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection; // if the touch action did prevented once this session\n\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n // do not prevent defaults if this is a tap gesture\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone || hasPanY && direction & DIRECTION_HORIZONTAL || hasPanX && direction & DIRECTION_VERTICAL) {\n return this.preventSrc(srcEvent);\n }\n };\n /**\n * @private\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n\n\n _proto.preventSrc = function preventSrc(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n };\n\n return TouchAction;\n}();\n\n/**\n * @private\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node === parent) {\n return true;\n }\n\n node = node.parentNode;\n }\n\n return false;\n}\n\n/**\n * @private\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\n\nfunction getCenter(pointers) {\n var pointersLength = pointers.length; // no need to loop when only one touch\n\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0;\n var y = 0;\n var i = 0;\n\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * @private\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\n\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * @private\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\n\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]];\n var y = p2[props[1]] - p1[props[1]];\n return Math.sqrt(x * x + y * y);\n}\n\n/**\n * @private\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\n\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n\n var x = p2[props[0]] - p1[props[0]];\n var y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * @private\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\n\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center; // let { offsetDelta:offset = {}, prevDelta = {}, prevInput = {} } = session;\n // jscs throwing error on defalut destructured values and without defaults tests fail\n\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * @private\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * @private\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\n\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\n/**\n * @private\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\n\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * @private\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\n\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input;\n var deltaTime = input.timeStamp - last.timeStamp;\n var velocity;\n var velocityX;\n var velocityY;\n var direction;\n\n if (input.eventType !== INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = abs(v.x) > abs(v.y) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n* @private\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\n\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length; // store the first input to calculate the distance and direction\n\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n } // to compute scale and rotation we need to store the multiple touches\n\n\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput,\n firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = abs(overallVelocity.x) > abs(overallVelocity.y) ? overallVelocity.x : overallVelocity.y;\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n input.maxPointers = !session.prevInput ? input.pointers.length : input.pointers.length > session.prevInput.maxPointers ? input.pointers.length : session.prevInput.maxPointers;\n computeIntervalInputData(session, input); // find the correct target\n\n var target = manager.element;\n var srcEvent = input.srcEvent;\n var srcEventTarget;\n\n if (srcEvent.composedPath) {\n srcEventTarget = srcEvent.composedPath()[0];\n } else if (srcEvent.path) {\n srcEventTarget = srcEvent.path[0];\n } else {\n srcEventTarget = srcEvent.target;\n }\n\n if (hasParent(srcEventTarget, target)) {\n target = srcEventTarget;\n }\n\n input.target = target;\n}\n\n/**\n * @private\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\n\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = eventType & INPUT_START && pointersLen - changedPointersLen === 0;\n var isFinal = eventType & (INPUT_END | INPUT_CANCEL) && pointersLen - changedPointersLen === 0;\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n } // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n\n\n input.eventType = eventType; // compute scale, rotation etc\n\n computeInputData(manager, input); // emit secret event\n\n manager.emit('hammer.input', input);\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * @private\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * @private\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * @private\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\n\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function (type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * @private\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return doc.defaultView || doc.parentWindow || window;\n}\n\n/**\n * @private\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\n\nvar Input =\n/*#__PURE__*/\nfunction () {\n function Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget; // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n\n this.domHandler = function (ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n }\n /**\n * @private\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n\n\n var _proto = Input.prototype;\n\n _proto.handler = function handler() {};\n /**\n * @private\n * bind the events\n */\n\n\n _proto.init = function init() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n };\n /**\n * @private\n * unbind the events\n */\n\n\n _proto.destroy = function destroy() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n };\n\n return Input;\n}();\n\n/**\n * @private\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n\n while (i < src.length) {\n if (findByKey && src[i][findByKey] == find || !findByKey && src[i] === find) {\n // do not use === here, test fails\n return i;\n }\n\n i++;\n }\n\n return -1;\n }\n}\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n}; // in IE10 the pointer types is defined as an enum\n\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n\n};\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel'; // IE10 has prefixed support, and case-sensitive\n\nif (win.MSPointerEvent && !win.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n/**\n * @private\n * Pointer events input\n * @constructor\n * @extends Input\n */\n\n\nvar PointerEventInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(PointerEventInput, _Input);\n\n function PointerEventInput() {\n var _this;\n\n var proto = PointerEventInput.prototype;\n proto.evEl = POINTER_ELEMENT_EVENTS;\n proto.evWin = POINTER_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.store = _this.manager.session.pointerEvents = [];\n return _this;\n }\n /**\n * @private\n * handle mouse events\n * @param {Object} ev\n */\n\n\n var _proto = PointerEventInput.prototype;\n\n _proto.handler = function handler(ev) {\n var store = this.store;\n var removePointer = false;\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n var isTouch = pointerType === INPUT_TYPE_TOUCH; // get index of the event in the store\n\n var storeIndex = inArray(store, ev.pointerId, 'pointerId'); // start and mouse must be down\n\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n } // it not found, so the pointer hasn't been down (so it's probably a hover)\n\n\n if (storeIndex < 0) {\n return;\n } // update the event in the store\n\n\n store[storeIndex] = ev;\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n };\n\n return PointerEventInput;\n}(Input);\n\n/**\n * @private\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * @private\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\n\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function (a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\n\nvar TouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(TouchInput, _Input);\n\n function TouchInput() {\n var _this;\n\n TouchInput.prototype.evTarget = TOUCH_TARGET_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.targetIds = {}; // this.evTarget = TOUCH_TARGET_EVENTS;\n\n return _this;\n }\n\n var _proto = TouchInput.prototype;\n\n _proto.handler = function handler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n };\n\n return TouchInput;\n}(Input);\n\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds; // when there is only one touch, the process can be simplified\n\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i;\n var targetTouches;\n var changedTouches = toArray(ev.changedTouches);\n var changedTargetTouches = [];\n var target = this.target; // get target touches from touches\n\n targetTouches = allTouches.filter(function (touch) {\n return hasParent(touch.target, target);\n }); // collect touches\n\n if (type === INPUT_START) {\n i = 0;\n\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n } // filter changed touches to only contain touches that exist in the collected target ids\n\n\n i = 0;\n\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n } // cleanup removed touches\n\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [// merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true), changedTargetTouches];\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n/**\n * @private\n * Mouse events input\n * @constructor\n * @extends Input\n */\n\nvar MouseInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(MouseInput, _Input);\n\n function MouseInput() {\n var _this;\n\n var proto = MouseInput.prototype;\n proto.evEl = MOUSE_ELEMENT_EVENTS;\n proto.evWin = MOUSE_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.pressed = false; // mousedown state\n\n return _this;\n }\n /**\n * @private\n * handle mouse events\n * @param {Object} ev\n */\n\n\n var _proto = MouseInput.prototype;\n\n _proto.handler = function handler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type]; // on start we want to have the left mouse button down\n\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n } // mouse must be down\n\n\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n };\n\n return MouseInput;\n}(Input);\n\n/**\n * @private\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction setLastTouch(eventData) {\n var _eventData$changedPoi = eventData.changedPointers,\n touch = _eventData$changedPoi[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {\n x: touch.clientX,\n y: touch.clientY\n };\n var lts = this.lastTouches;\n this.lastTouches.push(lastTouch);\n\n var removeLastTouch = function removeLastTouch() {\n var i = lts.indexOf(lastTouch);\n\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX;\n var y = eventData.srcEvent.clientY;\n\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x);\n var dy = Math.abs(y - t.y);\n\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n\n return false;\n}\n\nvar TouchMouseInput =\n/*#__PURE__*/\nfunction () {\n var TouchMouseInput =\n /*#__PURE__*/\n function (_Input) {\n _inheritsLoose(TouchMouseInput, _Input);\n\n function TouchMouseInput(_manager, callback) {\n var _this;\n\n _this = _Input.call(this, _manager, callback) || this;\n\n _this.handler = function (manager, inputEvent, inputData) {\n var isTouch = inputData.pointerType === INPUT_TYPE_TOUCH;\n var isMouse = inputData.pointerType === INPUT_TYPE_MOUSE;\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n } // when we're in a touch event, record touches to de-dupe synthetic mouse event\n\n\n if (isTouch) {\n recordTouches.call(_assertThisInitialized(_assertThisInitialized(_this)), inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(_assertThisInitialized(_assertThisInitialized(_this)), inputData)) {\n return;\n }\n\n _this.callback(manager, inputEvent, inputData);\n };\n\n _this.touch = new TouchInput(_this.manager, _this.handler);\n _this.mouse = new MouseInput(_this.manager, _this.handler);\n _this.primaryTouch = null;\n _this.lastTouches = [];\n return _this;\n }\n /**\n * @private\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n\n\n var _proto = TouchMouseInput.prototype;\n\n /**\n * @private\n * remove the event listeners\n */\n _proto.destroy = function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n };\n\n return TouchMouseInput;\n }(Input);\n\n return TouchMouseInput;\n}();\n\n/**\n * @private\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\n\nfunction createInputInstance(manager) {\n var Type; // let inputClass = manager.options.inputClass;\n\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n\n return new Type(manager, inputHandler);\n}\n\n/**\n * @private\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\n\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n\n return false;\n}\n\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * @private\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * @private\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n\n if (manager) {\n return manager.get(otherRecognizer);\n }\n\n return otherRecognizer;\n}\n\n/**\n * @private\n * get a usable string, used as event postfix\n * @param {constant} state\n * @returns {String} state\n */\n\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n\n return '';\n}\n\n/**\n * @private\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\n\n/**\n * @private\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\n\nvar Recognizer =\n/*#__PURE__*/\nfunction () {\n function Recognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n this.options = _extends({\n enable: true\n }, options);\n this.id = uniqueId();\n this.manager = null; // default is enable true\n\n this.state = STATE_POSSIBLE;\n this.simultaneous = {};\n this.requireFail = [];\n }\n /**\n * @private\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n\n\n var _proto = Recognizer.prototype;\n\n _proto.set = function set(options) {\n assign$1(this.options, options); // also update the touchAction, in case something changed about the directions/enabled state\n\n this.manager && this.manager.touchAction.update();\n return this;\n };\n /**\n * @private\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.recognizeWith = function recognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n\n return this;\n };\n /**\n * @private\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.dropRecognizeWith = function dropRecognizeWith(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n };\n /**\n * @private\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.requireFailure = function requireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n\n return this;\n };\n /**\n * @private\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n\n\n _proto.dropRequireFailure = function dropRequireFailure(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n\n return this;\n };\n /**\n * @private\n * has require failures boolean\n * @returns {boolean}\n */\n\n\n _proto.hasRequireFailures = function hasRequireFailures() {\n return this.requireFail.length > 0;\n };\n /**\n * @private\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n\n\n _proto.canRecognizeWith = function canRecognizeWith(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n };\n /**\n * @private\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n\n\n _proto.emit = function emit(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n } // 'panstart' and 'panmove'\n\n\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) {\n // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n } // panend and pancancel\n\n\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n };\n /**\n * @private\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n\n\n _proto.tryEmit = function tryEmit(input) {\n if (this.canEmit()) {\n return this.emit(input);\n } // it's failing anyway\n\n\n this.state = STATE_FAILED;\n };\n /**\n * @private\n * can we emit?\n * @returns {boolean}\n */\n\n\n _proto.canEmit = function canEmit() {\n var i = 0;\n\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n\n i++;\n }\n\n return true;\n };\n /**\n * @private\n * update the recognizer\n * @param {Object} inputData\n */\n\n\n _proto.recognize = function recognize(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign$1({}, inputData); // is is enabled and allow recognizing?\n\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n } // reset when we've reached the end\n\n\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone); // the recognizer has recognized a gesture\n // so trigger an event\n\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n };\n /**\n * @private\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {constant} STATE\n */\n\n /* jshint ignore:start */\n\n\n _proto.process = function process(inputData) {};\n /* jshint ignore:end */\n\n /**\n * @private\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n\n\n _proto.getTouchAction = function getTouchAction() {};\n /**\n * @private\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n\n\n _proto.reset = function reset() {};\n\n return Recognizer;\n}();\n\n/**\n * @private\n * A tap is recognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\n\nvar TapRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(TapRecognizer, _Recognizer);\n\n function TapRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _Recognizer.call(this, _extends({\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300,\n // max time between the multi-tap taps\n time: 250,\n // max time of the pointer to be down (like finger on the screen)\n threshold: 9,\n // a minimal movement is ok, but keep it low\n posThreshold: 10\n }, options)) || this; // previous time and center,\n // used for tap counting\n\n _this.pTime = false;\n _this.pCenter = false;\n _this._timer = null;\n _this._input = null;\n _this.count = 0;\n return _this;\n }\n\n var _proto = TapRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_MANIPULATION];\n };\n\n _proto.process = function process(input) {\n var _this2 = this;\n\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n this.reset();\n\n if (input.eventType & INPUT_START && this.count === 0) {\n return this.failTimeout();\n } // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType !== INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? input.timeStamp - this.pTime < options.interval : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input; // if tap count matches we have recognized it,\n // else it has began recognizing...\n\n var tapCount = this.count % options.taps;\n\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeout(function () {\n _this2.state = STATE_RECOGNIZED;\n\n _this2.tryEmit();\n }, options.interval);\n return STATE_BEGAN;\n }\n }\n }\n\n return STATE_FAILED;\n };\n\n _proto.failTimeout = function failTimeout() {\n var _this3 = this;\n\n this._timer = setTimeout(function () {\n _this3.state = STATE_FAILED;\n }, this.options.interval);\n return STATE_FAILED;\n };\n\n _proto.reset = function reset() {\n clearTimeout(this._timer);\n };\n\n _proto.emit = function emit() {\n if (this.state === STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n };\n\n return TapRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\n\nvar AttrRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(AttrRecognizer, _Recognizer);\n\n function AttrRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _Recognizer.call(this, _extends({\n pointers: 1\n }, options)) || this;\n }\n /**\n * @private\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n\n\n var _proto = AttrRecognizer.prototype;\n\n _proto.attrTest = function attrTest(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n };\n /**\n * @private\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n\n\n _proto.process = function process(input) {\n var state = this.state;\n var eventType = input.eventType;\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input); // on cancel input and we've recognized before, return STATE_CANCELLED\n\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n\n return state | STATE_CHANGED;\n }\n\n return STATE_FAILED;\n };\n\n return AttrRecognizer;\n}(Recognizer);\n\n/**\n * @private\n * direction cons to string\n * @param {constant} direction\n * @returns {String}\n */\n\nfunction directionStr(direction) {\n if (direction === DIRECTION_DOWN) {\n return 'down';\n } else if (direction === DIRECTION_UP) {\n return 'up';\n } else if (direction === DIRECTION_LEFT) {\n return 'left';\n } else if (direction === DIRECTION_RIGHT) {\n return 'right';\n }\n\n return '';\n}\n\n/**\n * @private\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PanRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(PanRecognizer, _AttrRecognizer);\n\n function PanRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _AttrRecognizer.call(this, _extends({\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n }, options)) || this;\n _this.pX = null;\n _this.pY = null;\n return _this;\n }\n\n var _proto = PanRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n var direction = this.options.direction;\n var actions = [];\n\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n\n return actions;\n };\n\n _proto.directionTest = function directionTest(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY; // lock to axis?\n\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = x === 0 ? DIRECTION_NONE : x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x !== this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = y === 0 ? DIRECTION_NONE : y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y !== this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n };\n\n _proto.attrTest = function attrTest(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) && ( // replace with a super call\n this.state & STATE_BEGAN || !(this.state & STATE_BEGAN) && this.directionTest(input));\n };\n\n _proto.emit = function emit(input) {\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n\n _AttrRecognizer.prototype.emit.call(this, input);\n };\n\n return PanRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar SwipeRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(SwipeRecognizer, _AttrRecognizer);\n\n function SwipeRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n }, options)) || this;\n }\n\n var _proto = SwipeRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n };\n\n _proto.attrTest = function attrTest(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return _AttrRecognizer.prototype.attrTest.call(this, input) && direction & input.offsetDirection && input.distance > this.options.threshold && input.maxPointers === this.options.pointers && abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n };\n\n _proto.emit = function emit(input) {\n var direction = directionStr(input.offsetDirection);\n\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n };\n\n return SwipeRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar PinchRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(PinchRecognizer, _AttrRecognizer);\n\n function PinchRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'pinch',\n threshold: 0,\n pointers: 2\n }, options)) || this;\n }\n\n var _proto = PinchRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n };\n\n _proto.attrTest = function attrTest(input) {\n return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n };\n\n _proto.emit = function emit(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n\n _AttrRecognizer.prototype.emit.call(this, input);\n };\n\n return PinchRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\n\nvar RotateRecognizer =\n/*#__PURE__*/\nfunction (_AttrRecognizer) {\n _inheritsLoose(RotateRecognizer, _AttrRecognizer);\n\n function RotateRecognizer(options) {\n if (options === void 0) {\n options = {};\n }\n\n return _AttrRecognizer.call(this, _extends({\n event: 'rotate',\n threshold: 0,\n pointers: 2\n }, options)) || this;\n }\n\n var _proto = RotateRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_NONE];\n };\n\n _proto.attrTest = function attrTest(input) {\n return _AttrRecognizer.prototype.attrTest.call(this, input) && (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n };\n\n return RotateRecognizer;\n}(AttrRecognizer);\n\n/**\n * @private\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\n\nvar PressRecognizer =\n/*#__PURE__*/\nfunction (_Recognizer) {\n _inheritsLoose(PressRecognizer, _Recognizer);\n\n function PressRecognizer(options) {\n var _this;\n\n if (options === void 0) {\n options = {};\n }\n\n _this = _Recognizer.call(this, _extends({\n event: 'press',\n pointers: 1,\n time: 251,\n // minimal time of the pointer to be pressed\n threshold: 9\n }, options)) || this;\n _this._timer = null;\n _this._input = null;\n return _this;\n }\n\n var _proto = PressRecognizer.prototype;\n\n _proto.getTouchAction = function getTouchAction() {\n return [TOUCH_ACTION_AUTO];\n };\n\n _proto.process = function process(input) {\n var _this2 = this;\n\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n this._input = input; // we only allow little movement\n // and we've reached an end event, so a tap is possible\n\n if (!validMovement || !validPointers || input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeout(function () {\n _this2.state = STATE_RECOGNIZED;\n\n _this2.tryEmit();\n }, options.time);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n\n return STATE_FAILED;\n };\n\n _proto.reset = function reset() {\n clearTimeout(this._timer);\n };\n\n _proto.emit = function emit(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && input.eventType & INPUT_END) {\n this.manager.emit(this.options.event + \"up\", input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n };\n\n return PressRecognizer;\n}(Recognizer);\n\nvar defaults = {\n /**\n * @private\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * @private\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @private\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * @private\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * @private\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * @private\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * @private\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: \"none\",\n\n /**\n * @private\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: \"none\",\n\n /**\n * @private\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: \"none\",\n\n /**\n * @private\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: \"none\",\n\n /**\n * @private\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: \"none\",\n\n /**\n * @private\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: \"rgba(0,0,0,0)\"\n }\n};\n/**\n * @private\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * This is separated with other defaults because of tree-shaking.\n * @type {Array}\n */\n\nvar preset = [[RotateRecognizer, {\n enable: false\n}], [PinchRecognizer, {\n enable: false\n}, ['rotate']], [SwipeRecognizer, {\n direction: DIRECTION_HORIZONTAL\n}], [PanRecognizer, {\n direction: DIRECTION_HORIZONTAL\n}, ['swipe']], [TapRecognizer], [TapRecognizer, {\n event: 'doubletap',\n taps: 2\n}, ['tap']], [PressRecognizer]];\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n/**\n * @private\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\n\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n\n if (!element.style) {\n return;\n }\n\n var prop;\n each(manager.options.cssProps, function (value, name) {\n prop = prefixed(element.style, name);\n\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || \"\";\n }\n });\n\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n/**\n * @private\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\n\n\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent(\"Event\");\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n/**\n* @private\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\n\nvar Manager =\n/*#__PURE__*/\nfunction () {\n function Manager(element, options) {\n var _this = this;\n\n this.options = assign$1({}, defaults, options || {});\n this.options.inputTarget = this.options.inputTarget || element;\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n toggleCssProps(this, true);\n each(this.options.recognizers, function (item) {\n var recognizer = _this.add(new item[0](item[1]));\n\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n }\n /**\n * @private\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n\n\n var _proto = Manager.prototype;\n\n _proto.set = function set(options) {\n assign$1(this.options, options); // Options that need a little more setup\n\n if (options.touchAction) {\n this.touchAction.update();\n }\n\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n\n return this;\n };\n /**\n * @private\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n\n\n _proto.stop = function stop(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n };\n /**\n * @private\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n\n\n _proto.recognize = function recognize(inputData) {\n var session = this.session;\n\n if (session.stopped) {\n return;\n } // run the touch-action polyfill\n\n\n this.touchAction.preventDefaults(inputData);\n var recognizer;\n var recognizers = this.recognizers; // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n\n var curRecognizer = session.curRecognizer; // reset when the last recognizer is recognized\n // or when we're in a new session\n\n if (!curRecognizer || curRecognizer && curRecognizer.state & STATE_RECOGNIZED) {\n session.curRecognizer = null;\n curRecognizer = null;\n }\n\n var i = 0;\n\n while (i < recognizers.length) {\n recognizer = recognizers[i]; // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer === curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) {\n // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n } // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n\n\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n session.curRecognizer = recognizer;\n curRecognizer = recognizer;\n }\n\n i++;\n }\n };\n /**\n * @private\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n\n\n _proto.get = function get(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event === recognizer) {\n return recognizers[i];\n }\n }\n\n return null;\n };\n /**\n * @private add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n\n\n _proto.add = function add(recognizer) {\n if (invokeArrayArg(recognizer, \"add\", this)) {\n return this;\n } // remove existing\n\n\n var existing = this.get(recognizer.options.event);\n\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n this.touchAction.update();\n return recognizer;\n };\n /**\n * @private\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n\n\n _proto.remove = function remove(recognizer) {\n if (invokeArrayArg(recognizer, \"remove\", this)) {\n return this;\n }\n\n var targetRecognizer = this.get(recognizer); // let's make sure this recognizer exists\n\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, targetRecognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n };\n /**\n * @private\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n\n\n _proto.on = function on(events, handler) {\n if (events === undefined || handler === undefined) {\n return this;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n };\n /**\n * @private unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n\n\n _proto.off = function off(events, handler) {\n if (events === undefined) {\n return this;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function (event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n };\n /**\n * @private emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n\n\n _proto.emit = function emit(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n } // no handlers, so skip it all\n\n\n var handlers = this.handlers[event] && this.handlers[event].slice();\n\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n\n data.preventDefault = function () {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n };\n /**\n * @private\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n\n\n _proto.destroy = function destroy() {\n this.element && toggleCssProps(this, false);\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n };\n\n return Manager;\n}();\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n/**\n * @private\n * Touch events input\n * @constructor\n * @extends Input\n */\n\nvar SingleTouchInput =\n/*#__PURE__*/\nfunction (_Input) {\n _inheritsLoose(SingleTouchInput, _Input);\n\n function SingleTouchInput() {\n var _this;\n\n var proto = SingleTouchInput.prototype;\n proto.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n proto.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n _this = _Input.apply(this, arguments) || this;\n _this.started = false;\n return _this;\n }\n\n var _proto = SingleTouchInput.prototype;\n\n _proto.handler = function handler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type]; // should we handle the touch events?\n\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type); // when done, reset the started state\n\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n };\n\n return SingleTouchInput;\n}(Input);\n\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\n/**\n * @private\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = \"DEPRECATED METHOD: \" + name + \"\\n\" + message + \" AT \\n\";\n return function () {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '').replace(/^\\s+at\\s+/gm, '').replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n var log = window.console && (window.console.warn || window.console.log);\n\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n\n return method.apply(this, arguments);\n };\n}\n\n/**\n * @private\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\n\nvar extend = deprecate(function (dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n\n while (i < keys.length) {\n if (!merge || merge && dest[keys[i]] === undefined) {\n dest[keys[i]] = src[keys[i]];\n }\n\n i++;\n }\n\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * @private\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\n\nvar merge = deprecate(function (dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * @private\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\n\nfunction inherit(child, base, properties) {\n var baseP = base.prototype;\n var childP;\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign$1(childP, properties);\n }\n}\n\n/**\n * @private\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * @private\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\n\nvar Hammer =\n/*#__PURE__*/\nfunction () {\n var Hammer =\n /**\n * @private\n * @const {string}\n */\n function Hammer(element, options) {\n if (options === void 0) {\n options = {};\n }\n\n return new Manager(element, _extends({\n recognizers: preset.concat()\n }, options));\n };\n\n Hammer.VERSION = \"2.0.17-rc\";\n Hammer.DIRECTION_ALL = DIRECTION_ALL;\n Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n Hammer.DIRECTION_LEFT = DIRECTION_LEFT;\n Hammer.DIRECTION_RIGHT = DIRECTION_RIGHT;\n Hammer.DIRECTION_UP = DIRECTION_UP;\n Hammer.DIRECTION_HORIZONTAL = DIRECTION_HORIZONTAL;\n Hammer.DIRECTION_VERTICAL = DIRECTION_VERTICAL;\n Hammer.DIRECTION_NONE = DIRECTION_NONE;\n Hammer.DIRECTION_DOWN = DIRECTION_DOWN;\n Hammer.INPUT_START = INPUT_START;\n Hammer.INPUT_MOVE = INPUT_MOVE;\n Hammer.INPUT_END = INPUT_END;\n Hammer.INPUT_CANCEL = INPUT_CANCEL;\n Hammer.STATE_POSSIBLE = STATE_POSSIBLE;\n Hammer.STATE_BEGAN = STATE_BEGAN;\n Hammer.STATE_CHANGED = STATE_CHANGED;\n Hammer.STATE_ENDED = STATE_ENDED;\n Hammer.STATE_RECOGNIZED = STATE_RECOGNIZED;\n Hammer.STATE_CANCELLED = STATE_CANCELLED;\n Hammer.STATE_FAILED = STATE_FAILED;\n Hammer.Manager = Manager;\n Hammer.Input = Input;\n Hammer.TouchAction = TouchAction;\n Hammer.TouchInput = TouchInput;\n Hammer.MouseInput = MouseInput;\n Hammer.PointerEventInput = PointerEventInput;\n Hammer.TouchMouseInput = TouchMouseInput;\n Hammer.SingleTouchInput = SingleTouchInput;\n Hammer.Recognizer = Recognizer;\n Hammer.AttrRecognizer = AttrRecognizer;\n Hammer.Tap = TapRecognizer;\n Hammer.Pan = PanRecognizer;\n Hammer.Swipe = SwipeRecognizer;\n Hammer.Pinch = PinchRecognizer;\n Hammer.Rotate = RotateRecognizer;\n Hammer.Press = PressRecognizer;\n Hammer.on = addEventListeners;\n Hammer.off = removeEventListeners;\n Hammer.each = each;\n Hammer.merge = merge;\n Hammer.extend = extend;\n Hammer.bindFn = bindFn;\n Hammer.assign = assign$1;\n Hammer.inherit = inherit;\n Hammer.bindFn = bindFn;\n Hammer.prefixed = prefixed;\n Hammer.toArray = toArray;\n Hammer.inArray = inArray;\n Hammer.uniqueArray = uniqueArray;\n Hammer.splitStr = splitStr;\n Hammer.boolOrFn = boolOrFn;\n Hammer.hasParent = hasParent;\n Hammer.addEventListeners = addEventListeners;\n Hammer.removeEventListeners = removeEventListeners;\n Hammer.defaults = assign$1({}, defaults, {\n preset: preset\n });\n return Hammer;\n}();\n\n// style loader but by script tag, not by the loader.\n\nvar defaults$1 = Hammer.defaults;\n\nexport default Hammer;\nexport { INPUT_START, INPUT_MOVE, INPUT_END, INPUT_CANCEL, STATE_POSSIBLE, STATE_BEGAN, STATE_CHANGED, STATE_ENDED, STATE_RECOGNIZED, STATE_CANCELLED, STATE_FAILED, DIRECTION_NONE, DIRECTION_LEFT, DIRECTION_RIGHT, DIRECTION_UP, DIRECTION_DOWN, DIRECTION_HORIZONTAL, DIRECTION_VERTICAL, DIRECTION_ALL, Manager, Input, TouchAction, TouchInput, MouseInput, PointerEventInput, TouchMouseInput, SingleTouchInput, Recognizer, AttrRecognizer, TapRecognizer as Tap, PanRecognizer as Pan, SwipeRecognizer as Swipe, PinchRecognizer as Pinch, RotateRecognizer as Rotate, PressRecognizer as Press, addEventListeners as on, removeEventListeners as off, each, merge, extend, assign$1 as assign, inherit, bindFn, prefixed, toArray, inArray, uniqueArray, splitStr, boolOrFn, hasParent, addEventListeners, removeEventListeners, defaults$1 as defaults };\n//# sourceMappingURL=hammer.esm.js.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.blackPixel = void 0;\nexports.isMobile = isMobile;\nexports.delay = delay;\nfunction isMobile() {\n return /Android|iPhone|iPad|iPod|Opera Mini|IEMobile|WPDesktop/i.test(navigator.userAgent);\n}\nexports.blackPixel = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';\nfunction delay(duration) {\n return new Promise(function (resolve) { return setTimeout(resolve, duration); });\n}\n//# sourceMappingURL=Utils.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentImageViewer = void 0;\nvar hammerjs_1 = require(\"@egjs/hammerjs\");\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar Utils_1 = require(\"../../Utils/Utils\");\nvar Morph_Components_1 = require(\"../../Morph.Components\");\nvar ComponentImageViewer = /** @class */ (function (_super) {\n __extends(ComponentImageViewer, _super);\n function ComponentImageViewer(options) {\n var _a, _b, _c, _d, _e;\n var _this = _super.call(this) || this;\n _this._rawScale = 1;\n _this._relativeScale = 1;\n _this._relativeScaleBase = 1;\n _this._left = 0;\n _this._top = 0;\n _this._firstLoad = true;\n _this._dragging = false;\n _this._dragStart = { originX: 0, originY: 0, startX: 0, startY: 0 };\n window.viewer = _this;\n _this.background = (_a = options === null || options === void 0 ? void 0 : options.background) !== null && _a !== void 0 ? _a : true;\n _this.container = (0, CE_1.ce)('div', 'mux_imageviewer');\n if (options.background != false)\n _this.container.style.background = 'var(--mux-panel-sub-color)';\n _this._wrapper = (0, CE_1.ce)('div', 'mux_imageviewer-wrapper');\n _this._image = (0, CE_1.ce)('img', 'mux_imageviewer-image');\n _this._image.style.display = 'none';\n _this._image.addEventListener('load', function () { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this._stopLoader();\n return [4 /*yield*/, (0, Utils_1.delay)(10)];\n case 1:\n _a.sent();\n this._image.style.display = 'block';\n return [2 /*return*/];\n }\n });\n }); });\n _this._unsupported = (0, CE_1.ce)('div', 'mux_imageviewer-unsupported');\n _this._unsupportedIcon = (0, CE_1.ce)('span', [\n 'material-symbols-outlined',\n 'mux_imageviewer-unsupported-icon',\n ]);\n _this._unsupportedText = (0, CE_1.ce)('div', 'mux_text');\n _this._unsupportedButton = new Morph_Components_1.MorphComponent.Button({\n mode: 'normal',\n content: 'Open externally',\n materialIcon: 'open_in_new',\n target: function () {\n window.open(_this._unsupportedTarget, '_blank');\n },\n }).container;\n _this._unsupported.append(_this._unsupportedIcon, _this._unsupportedText, _this._unsupportedButton);\n _this._wrapper.appendChild(_this._unsupported);\n _this._wrapper.appendChild(_this._image);\n _this._loader = (0, CE_1.ce)('div', 'mux_imageviewer-loader');\n _this._loader.append((0, CE_1.ce)('div', 'mux_imageviewer-loader-dot'), (0, CE_1.ce)('div', 'mux_imageviewer-loader-dot'), (0, CE_1.ce)('div', 'mux_imageviewer-loader-dot'), (0, CE_1.ce)('div', 'mux_imageviewer-loader-dot'));\n _this._wrapper.appendChild(_this._loader);\n var controlscontainer = (0, CE_1.ce)('div', 'mux_imageviewer-controlscontainer');\n var controls = (0, CE_1.ce)('div', 'mux_imageviewer-controls');\n controlscontainer.appendChild(controls);\n if ((options === null || options === void 0 ? void 0 : options.controls) != false) {\n var srcCount = (_c = (_b = options === null || options === void 0 ? void 0 : options.src) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0;\n if (srcCount > 1) {\n _this._thumbnails = (0, CE_1.ce)('div', [\n 'mux_imageviewer-control',\n 'mux_active',\n ]);\n _this._thumbnails.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'photo_library'));\n _this._thumbnails.appendChild((0, CE_1.ce)('span', [\n 'mux_imageviewer-control-badge',\n 'mux_text',\n 'mux_tiny',\n ], null, String(srcCount)));\n controls.appendChild(_this._thumbnails);\n }\n _this._zoomIn = (0, CE_1.ce)('div', 'mux_imageviewer-control');\n _this._zoomIn.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'zoom_in'));\n _this._zoomOut = (0, CE_1.ce)('div', 'mux_imageviewer-control');\n _this._zoomOut.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'zoom_out'));\n _this._fit = (0, CE_1.ce)('div', 'mux_imageviewer-control');\n _this._fit.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'fit_screen'));\n _this._highRes = (0, CE_1.ce)('div', 'mux_imageviewer-control');\n _this._highRes.style.display = 'none';\n _this._highRes.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'high_res'));\n controls.append(_this._zoomIn, _this._zoomOut, _this._fit, _this._highRes);\n }\n if ((options === null || options === void 0 ? void 0 : options.downloadable) == true) {\n var download = (0, CE_1.ce)('div', 'mux_imageviewer-control');\n download.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'download'));\n download.addEventListener('click', function () {\n var a = document.createElement('a');\n a.href = _this._image.src;\n a.download = 'image';\n a.click();\n });\n controls.appendChild(download);\n }\n if (controls.childNodes.length > 0)\n _this._wrapper.appendChild(controlscontainer);\n _this.container.appendChild(_this._wrapper);\n if ((options === null || options === void 0 ? void 0 : options.src) instanceof Array) {\n var sources = options.src;\n if (sources.length == 0)\n return _this;\n if (sources.length == 1) {\n _this.setImage(sources[0]);\n }\n else {\n _this._sources = sources;\n _this._drawThumbnails(sources, (_d = options === null || options === void 0 ? void 0 : options.thumbnailsOpen) !== null && _d !== void 0 ? _d : ((0, Utils_1.isMobile)() ? false : true));\n _this._drawNavigationControls();\n _this._imageCount = sources.length;\n var startIndex = (_e = options === null || options === void 0 ? void 0 : options.startSrc) !== null && _e !== void 0 ? _e : 0;\n _this.setImage(sources[startIndex], startIndex);\n }\n }\n else {\n var source = options.src;\n _this.setImage(source);\n }\n _this.registerListeners();\n return _this;\n }\n ComponentImageViewer.prototype.setImage = function (source, index) {\n return __awaiter(this, void 0, void 0, function () {\n var extention;\n var _this = this;\n var _a, _b, _c;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n this._startLoader();\n return [4 /*yield*/, (0, Utils_1.delay)(10)];\n case 1:\n _d.sent();\n this._updateUI(index);\n if (source.normal.split('/').pop().split('.').length > 1) {\n extention = (_b = (_a = source.normal.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== null && _b !== void 0 ? _b : '';\n if (!['jpg', 'jpeg', 'png', 'gif', 'webp'].includes(extention)) {\n this._unsupportedTarget = (_c = source.full) !== null && _c !== void 0 ? _c : source.normal;\n if (['mp4', 'webm'].includes(extention)) {\n return [2 /*return*/, this._showUnsupported('play_arrow', \"Videos are not supported yet. Please open the file in a new tab.\")];\n }\n return [2 /*return*/, this._showUnsupported('error_outline', \"File extention \".concat(extention, \" is not supported!\"))];\n }\n }\n else\n this._image.onerror = function () {\n _this._showUnsupported('error_outline', \"File extention \".concat(extention, \" is not supported!\"));\n };\n this._image.src = source.normal;\n if (source.full != undefined) {\n this._fullSrc = source.full;\n this._highRes.style.display = 'flex';\n }\n return [2 /*return*/];\n }\n });\n });\n };\n ComponentImageViewer.prototype.next = function () {\n return __awaiter(this, void 0, void 0, function () {\n var current, next;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n current = this.container.querySelector('.mux_imageviewer-gallery-thumb.active');\n if (current == null)\n return [2 /*return*/];\n next = current.nextElementSibling;\n if (next == null)\n return [2 /*return*/];\n this._startLoader();\n return [4 /*yield*/, (0, Utils_1.delay)(10)];\n case 1:\n _a.sent();\n next.click();\n return [2 /*return*/];\n }\n });\n });\n };\n ComponentImageViewer.prototype.previous = function () {\n return __awaiter(this, void 0, void 0, function () {\n var current, prev;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n current = this.container.querySelector('.mux_imageviewer-gallery-thumb.active');\n if (current == null)\n return [2 /*return*/];\n prev = current.previousElementSibling;\n if (prev == null)\n return [2 /*return*/];\n this._startLoader();\n return [4 /*yield*/, (0, Utils_1.delay)(10)];\n case 1:\n _a.sent();\n prev.click();\n return [2 /*return*/];\n }\n });\n });\n };\n ComponentImageViewer.prototype._updateUI = function (index) {\n if (index != undefined) {\n this.callEvent('imageIndexChanged', index);\n var previousThumb = this.container.querySelector('.mux_imageviewer-gallery-thumb.active');\n if (previousThumb != null)\n previousThumb.classList.remove('active');\n var thumb = this.container.querySelector(\".mux_imageviewer-gallery-thumb[index=\\\"\".concat(index, \"\\\"]\"));\n if (thumb != null) {\n thumb.classList.add('active');\n thumb.scrollIntoView({\n behavior: 'smooth',\n inline: 'center',\n });\n if (this._firstLoad) {\n this._firstLoad = false;\n setTimeout(function () {\n thumb.scrollIntoView({\n behavior: 'smooth',\n inline: 'center',\n });\n }, 500);\n }\n }\n }\n if (this._prev != undefined)\n if (index == 0)\n this._prev.classList.add('disabled');\n else\n this._prev.classList.remove('disabled');\n if (this._next != undefined)\n if (index == this._imageCount - 1)\n this._next.classList.add('disabled');\n else\n this._next.classList.remove('disabled');\n };\n ComponentImageViewer.prototype._showUnsupported = function (icon, text) {\n this._unsupportedIcon.innerText = icon;\n this._unsupportedText.innerText = text;\n this._stopLoader();\n this._unsupported.style.display = 'flex';\n };\n ComponentImageViewer.prototype._startLoader = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this._loader.style.display = 'flex';\n this._unsupported.style.display = 'none';\n this._image.style.display = 'none';\n return [4 /*yield*/, (0, Utils_1.delay)(10)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n ComponentImageViewer.prototype._stopLoader = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this._loader.style.display = 'none';\n this._restartScaling();\n return [2 /*return*/];\n });\n });\n };\n ComponentImageViewer.prototype._handleStart = function (originX, originY) {\n this._dragging = true;\n this._dragStart = {\n originX: originX,\n originY: originY,\n startX: this._image.offsetLeft,\n startY: this._image.offsetTop,\n };\n };\n ComponentImageViewer.prototype._handleMove = function (x, y) {\n var newX = this._validateX(this._dragStart.startX + x - this._dragStart.originX);\n var newY = this._validateY(this._dragStart.startY + y - this._dragStart.originY);\n this._left = newX;\n this._top = newY;\n this._image.style.left = \"\".concat(newX, \"px\");\n this._image.style.top = \"\".concat(newY, \"px\");\n };\n ComponentImageViewer.prototype.registerListeners = function () {\n var _this = this;\n //Start\n this.container.addEventListener('mousedown', function (e) {\n _this._handleStart(e.clientX, e.clientY);\n });\n this.container.addEventListener('touchstart', function (e) {\n _this._handleStart(e.touches[0].clientX, e.touches[0].clientY);\n });\n //Move\n this.container.addEventListener('mousemove', function (e) {\n if (!_this._dragging)\n return;\n if (e.buttons != 1) {\n _this._dragging = false;\n return;\n }\n _this._handleMove(e.clientX, e.clientY);\n });\n this.container.addEventListener('touchmove', function (e) {\n if (!_this._dragging)\n return;\n _this._handleMove(e.touches[0].clientX, e.touches[0].clientY);\n });\n //End\n this.container.addEventListener('mouseup', function (e) {\n _this._dragging = false;\n });\n this.container.addEventListener('touchend', function (e) {\n _this._dragging = false;\n });\n //Zoom\n this.container.addEventListener('wheel', function (e) {\n e.preventDefault();\n _this._setScale(_this._relativeScale + e.deltaY * -0.003);\n });\n var mc = new hammerjs_1.default(this._wrapper);\n mc.add(new hammerjs_1.default.Pinch());\n var beforeScale = this._relativeScale;\n mc.on('pinchstart', function (e) {\n beforeScale = _this._relativeScale;\n });\n mc.on('pinch', function (e) {\n _this._setScale(beforeScale * e.scale);\n });\n //Controls\n if (this._thumbnails != undefined)\n this._thumbnails.addEventListener('click', function () {\n if (_this.container.classList.contains('mux_imageviewer-galleryopen')) {\n _this.container.classList.remove('mux_imageviewer-galleryopen');\n _this._thumbnails.classList.remove('mux_active');\n _this.callEvent('thumbnailsOpen', false);\n }\n else {\n _this.container.classList.add('mux_imageviewer-galleryopen');\n _this._thumbnails.classList.add('mux_active');\n _this.callEvent('thumbnailsOpen', true);\n }\n });\n if (this._zoomIn != undefined)\n this._zoomIn.addEventListener('click', function () { return _this.zoomIn(); });\n if (this._zoomOut != undefined)\n this._zoomOut.addEventListener('click', function () { return _this.zoomOut(); });\n if (this._fit != undefined)\n this._fit.addEventListener('click', function () { return _this.fitToContainer(); });\n if (this._highRes != undefined)\n this._highRes.addEventListener('click', function () { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n this._startLoader();\n this._image.style.display = 'none';\n return [4 /*yield*/, (0, Utils_1.delay)(10)];\n case 1:\n _a.sent();\n this._image.src = this._fullSrc;\n this._highRes.style.display = 'none';\n return [2 /*return*/];\n }\n });\n }); });\n };\n ComponentImageViewer.prototype._drawNavigationControls = function () {\n var _this = this;\n this._next = (0, CE_1.ce)('div', [\n 'mux_imageviewer-navigation',\n 'mux_imageviewer-navigation-right',\n ]);\n this._next.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'navigate_next'));\n this._next.addEventListener('click', function () {\n if (_this._next.classList.contains('disabled'))\n return;\n _this.next();\n });\n this._wrapper.appendChild(this._next);\n this._prev = (0, CE_1.ce)('div', [\n 'mux_imageviewer-navigation',\n 'mux_imageviewer-navigation-left',\n ]);\n this._prev.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'navigate_before'));\n this._prev.addEventListener('click', function () {\n if (_this._prev.classList.contains('disabled'))\n return;\n _this.previous();\n });\n this._wrapper.appendChild(this._prev);\n };\n ComponentImageViewer.prototype._drawThumbnails = function (sources, openThumbnails) {\n var _this = this;\n var gallery = (0, CE_1.ce)('div', 'mux_imageviewer-gallery');\n if (this.background != false)\n gallery.style.background = 'var(--mux-panel-color)';\n sources.forEach(function (source, index) {\n var _a;\n var thumb = (0, CE_1.ce)('img', 'mux_imageviewer-gallery-thumb', {\n index: index,\n src: (_a = source.thumbnail) !== null && _a !== void 0 ? _a : source.normal,\n });\n thumb.addEventListener('click', function () {\n _this.setImage(source, index);\n });\n gallery.appendChild(thumb);\n });\n this.container.appendChild(gallery);\n if (openThumbnails)\n this.container.classList.add('mux_imageviewer-galleryopen');\n this.fitToContainer();\n };\n ComponentImageViewer.prototype._validateX = function (x) {\n var bounds = this._image.getBoundingClientRect();\n var minInlay = this._wrapper.clientWidth - 10;\n if (bounds.width < this._wrapper.clientWidth) {\n x = (this._wrapper.clientWidth - bounds.width) / 2;\n }\n else {\n x = Math.max(x, (bounds.width - minInlay) * -1);\n x = Math.min(x, this._wrapper.clientWidth - minInlay);\n }\n return x;\n };\n ComponentImageViewer.prototype._validateY = function (y) {\n var bounds = this._image.getBoundingClientRect();\n var minInlay = this._wrapper.clientHeight - 10;\n if (bounds.height < this._wrapper.clientHeight) {\n y = (this._wrapper.clientHeight - bounds.height) / 2;\n }\n else {\n y = Math.max(y, (bounds.height - minInlay) * -1);\n y = Math.min(y, this._wrapper.clientHeight - minInlay);\n }\n return y;\n };\n ComponentImageViewer.prototype._restartScaling = function () {\n var _this = this;\n this._calculateRelativeScale(function () {\n _this.fitToContainer();\n _this._startScaleClock();\n });\n clearTimeout(this._restartScalingRepeat);\n this._restartScalingRepeat = setTimeout(function () {\n _this._calculateRelativeScale(function () {\n _this.fitToContainer();\n _this._startScaleClock();\n });\n }, 1000);\n };\n ComponentImageViewer.prototype._calculateRelativeScale = function (readyCallback) {\n var _this = this;\n var bounds = this._image.getBoundingClientRect();\n clearTimeout(this._fitToContainerRetry);\n if (bounds.width == 0 ||\n bounds.height == 0 ||\n this._image.width == 0 ||\n this._image.height == 0)\n return (this._fitToContainerRetry = setTimeout(function () { return _this._calculateRelativeScale(readyCallback); }, 100));\n var maxWidth = this._wrapper.clientWidth - 20;\n var maxHeight = this._wrapper.clientHeight - 20;\n this._relativeScaleBase = Math.min(maxWidth / this._image.width, maxHeight / this._image.height);\n this._setScale(this._relativeScale);\n if (typeof readyCallback == 'function')\n readyCallback();\n };\n ComponentImageViewer.prototype._setScale = function (factor) {\n this._relativeScale = Math.min(Math.max(factor, 1), 10);\n this._setRawScale(this._relativeScaleBase * factor);\n };\n ComponentImageViewer.prototype._setRawScale = function (scale) {\n var bounds = this._image.getBoundingClientRect();\n this._rawScale = Math.max(scale, this._relativeScaleBase);\n var widthDiff = bounds.width - this._rawScale * this._image.clientWidth;\n var heightDiff = bounds.height - this._rawScale * this._image.clientHeight;\n this._image.style.transform = \"scale(\".concat(this._rawScale, \")\");\n this._left = this._validateX(this._left + widthDiff / 2);\n this._image.style.left = \"\".concat(this._left, \"px\");\n this._top = this._validateY(this._top + heightDiff / 2);\n this._image.style.top = \"\".concat(this._top, \"px\");\n };\n ComponentImageViewer.prototype._startScaleClock = function () {\n var _this = this;\n if (this._startScaleClockInt != undefined)\n return;\n var lastWidth = this._wrapper.clientWidth;\n var lastHeight = this._wrapper.clientHeight;\n clearInterval(this._startScaleClockInt);\n this._startScaleClockInt = setInterval(function () {\n if (_this.container.parentElement == null)\n return clearInterval(_this._startScaleClockInt);\n if (lastWidth != _this._wrapper.clientWidth ||\n lastHeight != _this._wrapper.clientHeight) {\n lastWidth = _this._wrapper.clientWidth;\n lastHeight = _this._wrapper.clientHeight;\n _this._calculateRelativeScale();\n }\n }, 100);\n };\n ComponentImageViewer.prototype.setImageIndex = function (index) {\n if (this._sources == undefined)\n return;\n if (this._sources[index] == undefined)\n return;\n this.setImage(this._sources[index], index);\n };\n ComponentImageViewer.prototype.fitToContainer = function () {\n this._setScale(1);\n this._left = this._validateX((this._wrapper.clientWidth - this._image.width * this._rawScale) / 2);\n this._top = this._validateY((this._wrapper.clientHeight - this._image.height * this._rawScale) /\n 2);\n this._image.style.left = \"\".concat(this._left, \"px\");\n this._image.style.top = \"\".concat(this._top, \"px\");\n this._image.style.opacity = '1';\n };\n ComponentImageViewer.prototype.zoomIn = function () {\n this._setScale(this._relativeScale + 0.3);\n };\n ComponentImageViewer.prototype.zoomOut = function () {\n this._setScale(this._relativeScale - 0.3);\n };\n return ComponentImageViewer;\n}(baseComponent_1.MUXComponent));\nexports.ComponentImageViewer = ComponentImageViewer;\n//# sourceMappingURL=Component.ImageViewer.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentInput = void 0;\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar ComponentInput = /** @class */ (function (_super) {\n __extends(ComponentInput, _super);\n function ComponentInput(options) {\n var _a;\n var _this = _super.call(this) || this;\n _this.container = (0, CE_1.ce)('input', 'mux_input', {\n type: options.type,\n });\n var border = (_a = options.border) !== null && _a !== void 0 ? _a : 'hover';\n if (border == 'always')\n _this.container.classList.add('mux_input-alwaysborder');\n else if (border == 'never')\n _this.container.classList.add('mux_input-noborder');\n if ((options === null || options === void 0 ? void 0 : options.min) != undefined)\n _this.container.min = String(options.min);\n if ((options === null || options === void 0 ? void 0 : options.max) != undefined)\n _this.container.max = String(options.max);\n if ((options === null || options === void 0 ? void 0 : options.step) != undefined)\n _this.container.step = String(options.step);\n if ((options === null || options === void 0 ? void 0 : options.maxLength) != undefined)\n _this.container.maxLength = options.maxLength;\n if ((options === null || options === void 0 ? void 0 : options.readOnly) != undefined)\n _this.container.readOnly = options.readOnly;\n if ((options === null || options === void 0 ? void 0 : options.placeholder) != undefined)\n _this.container.placeholder = options.placeholder;\n if ((options === null || options === void 0 ? void 0 : options.value) != undefined)\n _this.container.value = options.value;\n if ((options === null || options === void 0 ? void 0 : options.valueAsNumber) != undefined)\n _this.container.valueAsNumber = options.valueAsNumber;\n if (options.enabled == false)\n _this.container.setAttribute('disabled', '');\n _this.container.oninput = function () {\n return _this.callEvent('input', _this.container.value);\n };\n _this.container.onfocus = function () { return _this.callEvent('focus'); };\n _this.container.onblur = function () { return _this.callEvent('blur'); };\n return _this;\n }\n ComponentInput.prototype.getValue = function () {\n return this.container.value;\n };\n ComponentInput.prototype.getValueAsNumber = function () {\n return this.container.valueAsNumber;\n };\n ComponentInput.prototype.setValue = function (value) {\n this.container.value = value;\n };\n ComponentInput.prototype.setValueAsNumber = function (value) {\n this.container.valueAsNumber = value;\n };\n return ComponentInput;\n}(baseComponent_1.MUXComponent));\nexports.ComponentInput = ComponentInput;\n//# sourceMappingURL=Component.Input.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentList = void 0;\nvar Index_1 = require(\"../../Index\");\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar Sortable = require(\"sortablejs\");\nvar ComponentList = /** @class */ (function (_super) {\n __extends(ComponentList, _super);\n function ComponentList(options) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n var _this = _super.call(this) || this;\n _this.openGroups = [];\n _this.groupComponents = new Map();\n _this.options = options;\n _this.dragable = (_a = options === null || options === void 0 ? void 0 : options.dragable) !== null && _a !== void 0 ? _a : false;\n _this.hover = (_b = options === null || options === void 0 ? void 0 : options.hover) !== null && _b !== void 0 ? _b : false;\n _this.grouped = (_c = options === null || options === void 0 ? void 0 : options.grouped) !== null && _c !== void 0 ? _c : false;\n _this.groupsCloseable = (_d = options === null || options === void 0 ? void 0 : options.groupsCloseable) !== null && _d !== void 0 ? _d : false;\n _this.sortGroupsAlphabetically =\n (_e = options === null || options === void 0 ? void 0 : options.sortGroupsAlphabetically) !== null && _e !== void 0 ? _e : false;\n _this.openGroups = (_f = options === null || options === void 0 ? void 0 : options.groupsOpen) !== null && _f !== void 0 ? _f : [];\n _this.allowSingleItemGroups = (_g = options === null || options === void 0 ? void 0 : options.allowSingleItemGroups) !== null && _g !== void 0 ? _g : false;\n _this.highlighted = (_h = options === null || options === void 0 ? void 0 : options.highlightedItem) !== null && _h !== void 0 ? _h : null;\n if (_this.dragable == true && _this.grouped == true)\n throw new Error(\"Unable to use 'grouped' for list component when 'canReorderByDrag' is also enabled. \");\n _this.container = (0, CE_1.ce)('div', 'mux_list');\n _this.updateItems((_j = options === null || options === void 0 ? void 0 : options.items) !== null && _j !== void 0 ? _j : []);\n if (_this.dragable == true) {\n _this.sortable = new Sortable(_this.container, {\n ghostClass: 'mux_list-item-dragging',\n onStart: function () {\n _this.container.classList.add('mux_list-dragging');\n },\n onEnd: function (evt) {\n _this.container.classList.remove('mux_list-dragging');\n _this.callEvent('orderUpdated', _this.getCurrentOrder());\n },\n });\n }\n return _this;\n }\n ComponentList.prototype.updateItems = function (items) {\n var _this = this;\n var _a;\n this.container.innerHTML = '';\n this.groupComponents.clear();\n if (items == undefined || items.length == 0)\n return;\n if (this.grouped) {\n var groups = [];\n for (var i = 0; i < items.length; i++) {\n var group = (_a = items[i].group) !== null && _a !== void 0 ? _a : 'Ungrouped';\n if (!groups.includes(group)) {\n groups.push(group);\n }\n }\n if (this.sortGroupsAlphabetically == true)\n groups.sort();\n for (var i = 0; i < groups.length; i++) {\n this.ensureGroup(groups[i]);\n }\n }\n items.forEach(function (item) { return _this.addItem(item); });\n this.groupComponents.forEach(function (_a, group) {\n var container = _a.container, content = _a.content;\n if (content.children.length == 0) {\n container.parentElement.removeChild(container);\n _this.groupComponents.delete(group);\n }\n else {\n if (content.children.length == 1 &&\n _this.allowSingleItemGroups == false) {\n container.classList.add('mux_group-singular');\n }\n else\n container.classList.remove('mux_group-singular');\n }\n });\n };\n ComponentList.prototype.getCurrentOrder = function () {\n return Array.from(this.container.querySelectorAll('.mux_list-item')).map(function (item) {\n return item.getAttribute('uid');\n });\n };\n ComponentList.prototype.removeItem = function (uniqueIdentifier) {\n var match = this.container.querySelector(\".mux_list-item[uid=\\\"\".concat(uniqueIdentifier, \"\\\"]\"));\n if (match != null)\n match.remove();\n this.callEvent('orderUpdated', this.getCurrentOrder());\n };\n ComponentList.prototype.addItem = function (item) {\n var _this = this;\n var _a, _b;\n var element = (0, CE_1.ce)('div', 'mux_list-item', {\n uid: item.uniqueIdentifier,\n });\n if (this.hover)\n element.classList.add('mux_list-item-hover');\n // if (showSeperator) element.classList.add('mux_list-item-separator');\n if (((_a = this.options) === null || _a === void 0 ? void 0 : _a.overwriteCursor) != null)\n element.style.cursor = this.options.overwriteCursor;\n if (this.highlighted != null &&\n this.highlighted == item.uniqueIdentifier)\n element.classList.add('mux_list-item-selected');\n if (item.tooltip != undefined)\n element.title = item.tooltip;\n if (item.enabled == false)\n element.classList.add('mux_list-item-disabled');\n var content = (0, CE_1.ce)('div', 'mux_list-item-content');\n element.appendChild(content);\n element.onclick = function (e) {\n var _a;\n if (((_a = _this.options) === null || _a === void 0 ? void 0 : _a.highlightOnClick) == true)\n _this.highlight(item.uniqueIdentifier);\n if (item.click != undefined)\n item.click();\n };\n if (item.materialIcon != undefined) {\n var mi = (0, CE_1.ce)('span', ['mux_list-item-icon', 'material-symbols-outlined'], null, item.materialIcon);\n content.appendChild(mi);\n if (item.materialIconColor != undefined)\n mi.style.color = item.materialIconColor;\n }\n else if (item.icon != undefined)\n content.appendChild((0, CE_1.ce)('img', 'mux_list-item-icon', { src: item.icon }));\n var text = (0, CE_1.ce)('div', 'mux_list-item-text');\n if (item.text != undefined)\n text.appendChild((0, CE_1.ce)('div', ['mux_text', 'mux_normal'], null, item.text));\n if (item.subText != undefined)\n text.appendChild((0, CE_1.ce)('div', ['mux_text', 'mux_small'], null, item.subText));\n content.appendChild(text);\n if (item.actions != undefined && item.actions.length > 0) {\n var actions = (0, CE_1.ce)('div', 'mux_list-item-actions');\n var _loop_1 = function (i) {\n action = (0, CE_1.ce)('div', 'mux_list-item-action');\n if (item.actions[i].tooltip != undefined)\n action.title = item.actions[i].tooltip;\n if (item.actions[i].materialIcon != undefined)\n action.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, item.actions[i].materialIcon));\n else if (item.actions[i].icon != undefined)\n action.appendChild((0, CE_1.ce)('img', null, { src: item.actions[i].icon }));\n action.onclick = function (e) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n item.actions[i].click();\n };\n actions.appendChild(action);\n };\n var action;\n for (var i = 0; i < item.actions.length; i++) {\n _loop_1(i);\n }\n content.appendChild(actions);\n }\n if (this.grouped == true) {\n var group = (_b = item.group) !== null && _b !== void 0 ? _b : 'Ungrouped';\n var content = this.ensureGroup(group).content;\n content.appendChild(element);\n }\n else\n this.container.appendChild(element);\n this.size = this.container.querySelectorAll('.mux_list-item').length;\n };\n ComponentList.prototype.highlight = function (uniqueIdentifier) {\n this.highlighted = uniqueIdentifier;\n this.container\n .querySelectorAll('.mux_list-item')\n .forEach(function (item) {\n var uid = item.getAttribute('uid');\n if (uid == uniqueIdentifier) {\n item.classList.add('mux_list-item-selected');\n item.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n }\n else\n item.classList.remove('mux_list-item-selected');\n });\n };\n ComponentList.prototype.ensureGroup = function (group) {\n var _this = this;\n if (this.groupComponents.has(group))\n return this.groupComponents.get(group);\n var groupComponent = new Index_1.MorphComponent.Group({\n title: group,\n open: this.openGroups.includes(group) ||\n this.openGroups.includes('*') ||\n this.groupsCloseable == false,\n closeable: this.groupsCloseable,\n });\n groupComponent.on('openState', function (state) {\n if (state) {\n if (!_this.openGroups.includes(group))\n _this.openGroups.push(group);\n }\n else {\n if (_this.openGroups.includes(group))\n _this.openGroups.splice(_this.openGroups.indexOf(group), 1);\n }\n _this.callEvent('openGroupsUpdated', _this.openGroups);\n });\n this.container.appendChild(groupComponent.container);\n this.groupComponents.set(group, groupComponent);\n return this.groupComponents.get(group);\n };\n return ComponentList;\n}(baseComponent_1.MUXComponent));\nexports.ComponentList = ComponentList;\n//# sourceMappingURL=Component.List.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentMenuBar = void 0;\nvar Index_1 = require(\"../../Index\");\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar ComponentMenuBar = /** @class */ (function (_super) {\n __extends(ComponentMenuBar, _super);\n function ComponentMenuBar(options) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;\n var _this = _super.call(this) || this;\n _this.enabledStates = {};\n _this._leftItems = [];\n _this._rightItems = [];\n _this.mobileIgnoreItems = [];\n _this._leftItems = (_a = options.left) !== null && _a !== void 0 ? _a : [];\n _this._rightItems = (_b = options.right) !== null && _b !== void 0 ? _b : [];\n _this.contextMaterialIconColor =\n (_c = options.contextMaterialIconColor) !== null && _c !== void 0 ? _c : 'var(--mux-primary-color)';\n _this.contextMenuAlign = (_d = options.contextMenuAlign) !== null && _d !== void 0 ? _d : 'below';\n _this.contextAlignSide = {\n below: 'center',\n left: 'right',\n right: 'left',\n }[_this.contextMenuAlign];\n _this.container = (0, CE_1.ce)('div', 'mux_menubar');\n _this.size = (_e = options.size) !== null && _e !== void 0 ? _e : 'normal';\n _this.container.classList.add(\"mux_menubar-\".concat(_this.size));\n _this.direction = (_f = options === null || options === void 0 ? void 0 : options.direction) !== null && _f !== void 0 ? _f : 'horizontal';\n _this.container.classList.add(\"mux_menubar-direction-\".concat(_this.direction));\n _this.leftContainer = (0, CE_1.ce)('div', ['mux_menubar-locater', 'mux_left']);\n _this.rightContainer = (0, CE_1.ce)('div', ['mux_menubar-locater', 'mux_right']);\n _this.mobileContainer = (0, CE_1.ce)('div', 'mux_menubar-mobile');\n var mobileRightItems = (0, CE_1.ce)('div', [\n 'mux_menubar-mobile-items',\n 'mux_right',\n ]);\n ((_h = (_g = options === null || options === void 0 ? void 0 : options.mobile) === null || _g === void 0 ? void 0 : _g.right) !== null && _h !== void 0 ? _h : []).forEach(function (item) {\n return _this.addItem(item, mobileRightItems);\n });\n var mobileLeftItems = (0, CE_1.ce)('div', [\n 'mux_menubar-mobile-items',\n 'mux_left',\n ]);\n ((_k = (_j = options === null || options === void 0 ? void 0 : options.mobile) === null || _j === void 0 ? void 0 : _j.left) !== null && _k !== void 0 ? _k : []).forEach(function (item) {\n return _this.addItem(item, mobileLeftItems);\n });\n if (((_l = options === null || options === void 0 ? void 0 : options.mobile) === null || _l === void 0 ? void 0 : _l.logo) != undefined) {\n mobileLeftItems.style.left = '50px';\n var logo = (0, CE_1.ce)('a', 'mux_menubar-mobile-logo', {\n href: options.mobile.logo.href,\n });\n logo.appendChild((0, CE_1.ce)('img', null, { src: options.mobile.logo.src }));\n _this.mobileContainer.appendChild(logo);\n }\n _this.mobileIgnoreItems = (_o = (_m = options === null || options === void 0 ? void 0 : options.mobile) === null || _m === void 0 ? void 0 : _m.ignoreItems) !== null && _o !== void 0 ? _o : [];\n _this.addItem({\n type: 'icon',\n materialIcon: 'menu',\n click: function () {\n _this.openMobileMenu();\n // this.rightContainer.classList.toggle('mux_menubar-visible');\n },\n }, mobileRightItems);\n _this.mobileContainer.append(mobileLeftItems, mobileRightItems);\n _this.container.append(_this.leftContainer, _this.rightContainer, _this.mobileContainer);\n if ((options === null || options === void 0 ? void 0 : options.left) != undefined)\n options.left.forEach(function (item) {\n return _this.addItem(item, _this.leftContainer);\n });\n if ((options === null || options === void 0 ? void 0 : options.right) != undefined)\n options.right.forEach(function (item) {\n return _this.addItem(item, _this.rightContainer);\n });\n if (_this.direction == 'horizontal') {\n _this.calculateSizing();\n window.addEventListener('resize', function () {\n _this.calculateSizing();\n });\n var c = 0;\n _this.sizeClock = setInterval(function () {\n if (c++ > 200)\n clearInterval(_this.sizeClock);\n if (_this.container.parentElement != null) {\n clearInterval(_this.sizeClock);\n _this.calculateSizing();\n }\n }, 10);\n }\n else {\n _this.leftContainer.classList.add('mux_menubar-visible');\n _this.rightContainer.classList.add('mux_menubar-visible');\n }\n return _this;\n }\n ComponentMenuBar.prototype.calculateSizing = function () {\n var menuSize = this.leftContainer.clientWidth + this.rightContainer.clientWidth;\n var containerWidth = this.container.clientWidth;\n if (menuSize != 0 && containerWidth != 0)\n clearInterval(this.sizeClock);\n if (menuSize > containerWidth) {\n this.leftContainer.classList.remove('mux_menubar-visible');\n this.rightContainer.classList.remove('mux_menubar-visible');\n this.mobileContainer.classList.add('mux_menubar-visible');\n }\n else {\n this.leftContainer.classList.add('mux_menubar-visible');\n this.rightContainer.classList.add('mux_menubar-visible');\n this.mobileContainer.classList.remove('mux_menubar-visible');\n }\n };\n ComponentMenuBar.prototype.addItem = function (item, target) {\n var _this = this;\n if (item.type != 'image') {\n var element = (0, CE_1.ce)(item.href != undefined ? 'a' : 'div', 'mux_menubar-item');\n if (item.uniqueIdentifier != undefined)\n element.setAttribute('uid', item.uniqueIdentifier);\n if (item.enabled != undefined && item.enabled == false)\n element.classList.add('mux_menubar-item-disabled');\n if (item.href != undefined)\n element.setAttribute('href', item.href);\n if (item.tooltip != undefined)\n element.title = item.tooltip;\n if (item.selected == true)\n element.classList.add('mux_menubar-item-selected');\n if (item.materialIcon != undefined) {\n var materialIcon = (0, CE_1.ce)('span', [\n 'mux_menubar-item-materialicon',\n 'material-symbols-outlined',\n ], null, item.materialIcon);\n if (item.materialIconTransform != undefined)\n materialIcon.style.transform = item.materialIconTransform;\n element.appendChild(materialIcon);\n }\n switch (item.type) {\n case 'icon':\n element.classList.add('mux_menubar-item-icon');\n element.onclick = item.click;\n break;\n case 'normal':\n element.classList.add('mux_menubar-item-normal');\n element.appendChild((0, CE_1.ce)('p', ['mux_text', \"mux_\".concat(this.size)], null, item.text));\n break;\n }\n if (item.children == undefined || item.children.length == 0) {\n if (item.click != undefined && item.href == undefined)\n element.onclick = item.click;\n }\n else {\n // if (item.type == 'normal')\n element.appendChild((0, CE_1.ce)('span', ['material-symbols-outlined', 'mux_menubar-item-arrow'], null, \"keyboard_arrow_\".concat({ below: 'down', left: 'left', right: 'right' }[this.contextMenuAlign])));\n element.onclick = function () {\n var _a;\n if (element.classList.contains('mux_menubar-item-disabled'))\n return;\n var bounds = element.getBoundingClientRect();\n element.classList.add('mux_menubar-item-selected');\n for (var i = 0; i < item.children.length; i++)\n if (((_a = item.children[i]) === null || _a === void 0 ? void 0 : _a.uniqueIdentifier) != undefined) {\n if (_this.enabledStates[item.children[i].uniqueIdentifier] != undefined)\n item.children[i].enabled =\n _this.enabledStates[item.children[i].uniqueIdentifier];\n }\n var x;\n var y;\n if (_this.contextMenuAlign == 'below') {\n x = bounds.x + bounds.width / 2;\n y = bounds.y + bounds.height;\n }\n else if (_this.contextMenuAlign == 'left') {\n x = bounds.x;\n y = bounds.y;\n }\n else if (_this.contextMenuAlign == 'right') {\n x = bounds.x + bounds.width;\n y = bounds.y;\n }\n _this.dropdown = new Index_1.MorphComponent.ContextMenu({\n x: x,\n y: y,\n align: _this.contextAlignSide,\n items: item.children,\n materialIconColor: _this.contextMaterialIconColor,\n });\n _this.dropdown.on('close', function () {\n element.classList.remove('mux_menubar-item-selected');\n });\n };\n }\n target.appendChild(element);\n }\n else {\n var icon = (0, CE_1.ce)(item.href != undefined ? 'a' : 'div', 'mux_menubar-image');\n if (item.href != undefined)\n icon.href = item.href;\n icon.appendChild((0, CE_1.ce)('img', null, { src: item.url }));\n target.appendChild(icon);\n }\n };\n ComponentMenuBar.prototype.setSelected = function (uniqueIdentifier) {\n this.selected = uniqueIdentifier;\n this.container\n .querySelectorAll('.mux_menubar-item')\n .forEach(function (item) {\n if (item.getAttribute('uid') == uniqueIdentifier)\n item.classList.add('mux_menubar-item-selected');\n else\n item.classList.remove('mux_menubar-item-selected');\n });\n if (this.mobileMenu != null)\n this.mobileMenu.setSelected(uniqueIdentifier);\n };\n ComponentMenuBar.prototype.setEnabled = function (uniqueIdentifier, enabled) {\n var item = this.container.querySelector(\".mux_menubar-item[uid=\\\"\".concat(uniqueIdentifier, \"\\\"]\"));\n if (item == null)\n return;\n if (enabled)\n item.classList.remove('mux_menubar-item-disabled');\n else\n item.classList.add('mux_menubar-item-disabled');\n };\n ComponentMenuBar.prototype.openMobileMenu = function () {\n var _this = this;\n var container = (0, CE_1.ce)('div', 'mux_mobilemenu');\n var inner = (0, CE_1.ce)('div', 'mux_mobilemenu-inner');\n this.mobileMenu = new ComponentMenuBar({\n direction: 'vertical',\n left: this._leftItems.filter(function (item) {\n if (item.uniqueIdentifier == undefined)\n return true;\n return !_this.mobileIgnoreItems.includes(item.uniqueIdentifier);\n }),\n right: this._rightItems.filter(function (item) {\n if (item.uniqueIdentifier == undefined)\n return true;\n return !_this.mobileIgnoreItems.includes(item.uniqueIdentifier);\n }),\n });\n this.mobileMenu.setSelected(this.selected);\n inner.appendChild(this.mobileMenu.container);\n container.appendChild(inner);\n document.body.appendChild(container);\n container.animate({ opacity: '1' }, { duration: 200 }).onfinish =\n function () {\n container.style.opacity = '1';\n };\n inner.animate({ transform: 'translateX(0%)' }, { duration: 200, easing: 'ease-out' }).onfinish = function () {\n inner.style.transform = 'translateX(0%)';\n };\n container.onclick = function () {\n container.animate({ opacity: '0' }, { duration: 200 }).onfinish =\n function () {\n container.style.opacity = '0';\n };\n inner.animate({ transform: 'translateX(100%)' }, { duration: 200, easing: 'ease-in' }).onfinish = function () {\n inner.style.transform = 'translateX(100%)';\n _this.mobileMenu = null;\n container.remove();\n };\n };\n inner.onclick = function (e) {\n e.stopPropagation();\n };\n };\n return ComponentMenuBar;\n}(baseComponent_1.MUXComponent));\nexports.ComponentMenuBar = ComponentMenuBar;\n//# sourceMappingURL=Component.MenuBar.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentPaletteCheckbox = void 0;\nvar Index_1 = require(\"../../Index\");\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar ComponentPaletteCheckbox = /** @class */ (function (_super) {\n __extends(ComponentPaletteCheckbox, _super);\n function ComponentPaletteCheckbox(options) {\n var _a;\n var _this = _super.call(this) || this;\n _this.defaultView = 'recent_and_rest';\n _this.lastChecked = [];\n _this.recents = [];\n _this.pid = options === null || options === void 0 ? void 0 : options.paletteUniqueIdentifier;\n // if (pid != undefined && pid.length > 0)\n // \tlastChecked = Validator.array(\n // \t\tFieldStorage.getChannelValue('palette_checkbox', pid),\n // \t\t[]\n // \t);\n _this.container = (0, CE_1.ce)('div', ['mux_palette', 'mux_palette-checkboxes']);\n _this.container.onclick = function () { return _this.close(); };\n _this.inner = (0, CE_1.ce)('div', 'mux_palette-inner');\n _this.inner.onclick = function (e) { return e.stopPropagation(); };\n _this.results = (0, CE_1.ce)('div', ['mux_palette-results']);\n _this.inner.appendChild(_this.results);\n _this.container.appendChild(_this.inner);\n if ((options === null || options === void 0 ? void 0 : options.title) != undefined && options.title.trim().length > 0) {\n _this.showResultLabel(options.title);\n }\n ((_a = options === null || options === void 0 ? void 0 : options.items) !== null && _a !== void 0 ? _a : []).forEach(function (item, i) {\n return _this.renderSearchResult(item, i);\n });\n document.body.appendChild(_this.container);\n setTimeout(function () {\n _this.container.style.opacity = '1';\n _this.inner.style.opacity = '1';\n _this.inner.style.transform = 'scale(1)';\n }, 20);\n _this.registerKeyListener();\n return _this;\n }\n ComponentPaletteCheckbox.prototype.close = function () {\n var _this = this;\n this.overwrite.close();\n this.container.style.pointerEvents = 'none';\n this.container.style.opacity = '0';\n this.inner.style.opacity = '0';\n this.inner.style.transform = 'scale(0.8)';\n setTimeout(function () { return _this.destroy(); }, 400);\n this.callEvent('close');\n };\n ComponentPaletteCheckbox.prototype.getChecked = function () {\n var selected = Array.from(this.results.querySelectorAll('.mux_palette-results-item-checked')).map(function (item) {\n return item.getAttribute('uid');\n });\n this.lastChecked = selected;\n // FieldStorage.setChannelValue('palette_checkbox', this.pid, selected);\n return selected;\n };\n ComponentPaletteCheckbox.prototype.renderSearchResult = function (result, index) {\n var _this = this;\n if (result.uniqueIdentifier == undefined)\n throw new Error(\"Missing property 'uniqueIdentifier' inside one or more items of component 'PaletteCheckbox'\");\n var item = (0, CE_1.ce)('div', 'mux_palette-results-item', {\n uid: result.uniqueIdentifier,\n });\n if (this.lastChecked.length == 0 && result.defaultValue == true)\n item.classList.add('mux_palette-results-item-checked');\n if (this.lastChecked.includes(result.uniqueIdentifier))\n item.classList.add('mux_palette-results-item-checked');\n if (index == 0)\n item.classList.add('mux_palette-results-item-selected');\n item.addEventListener('click', function () {\n if (item.classList.contains('mux_palette-results-item-checked'))\n item.classList.remove('mux_palette-results-item-checked');\n else\n item.classList.add('mux_palette-results-item-checked');\n _this.getChecked();\n });\n var checkbox = (0, CE_1.ce)('div', 'mux_palette-results-item-checkbox');\n checkbox.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, 'done'));\n item.appendChild(checkbox);\n if (result.materialIcon != undefined) {\n var icon = (0, CE_1.ce)('div', 'material-symbols-outlined', null, result.materialIcon);\n if (result.materialIconTransform != undefined)\n icon.style.transform = result.materialIconTransform;\n item.appendChild(icon);\n }\n else if (result.iconSrc != undefined)\n item.appendChild((0, CE_1.ce)('img', 'mux_palette-results-item-icon', {\n src: result.iconSrc,\n }));\n var text = (0, CE_1.ce)('div', [\n 'mux_palette-results-item-text',\n 'mux_text',\n 'mux_small',\n ]);\n if (result.prefix != undefined)\n text.appendChild((0, CE_1.ce)('span', 'mux_palette-results-item-text-sub', null, result.prefix.trim()));\n text.appendChild((0, CE_1.ce)('span', 'mux_palette-results-item-text-main', null, result.name.trim()));\n if (result.suffix != undefined)\n text.appendChild((0, CE_1.ce)('span', 'mux_palette-results-item-text-sub', null, result.suffix.trim()));\n item.appendChild(text);\n item.appendChild((0, CE_1.ce)('div', [\n 'mux_palette-results-item-selectedtext',\n 'mux_text',\n 'mux_tiny',\n ], null, ' to toggle'));\n this.results.appendChild(item);\n return item;\n };\n ComponentPaletteCheckbox.prototype.registerKeyListener = function () {\n var _this = this;\n this.overwrite = Index_1.MorphKey.createOverwrite();\n this.overwrite.bind('Escape', function () { return _this.close(); });\n this.overwrite.bind('Enter', function () {\n var checked = _this.getChecked();\n _this.callEvent('selected', checked);\n _this.close();\n });\n this.overwrite.bind(' ', function () {\n var selected = _this.getSelectedResult();\n if (selected != null)\n selected.click();\n });\n this.overwrite.bind('ArrowUp', function () {\n var selected = _this.getSelectedResult();\n if (selected != null &&\n selected.previousElementSibling != null &&\n selected.previousElementSibling.classList.contains('mux_palette-results-item')) {\n selected.classList.remove('mux_palette-results-item-selected');\n selected.previousElementSibling.classList.add('mux_palette-results-item-selected');\n setTimeout(function () {\n if ((selected === null || selected === void 0 ? void 0 : selected.previousElementSibling) != null)\n selected.previousElementSibling.scrollIntoView({\n behavior: 'auto',\n block: 'center',\n inline: 'center',\n });\n }, 50);\n }\n });\n this.overwrite.bind('ArrowDown', function () {\n var selected = _this.getSelectedResult();\n if (selected != null &&\n selected.nextElementSibling != null &&\n selected.nextElementSibling.classList.contains('mux_palette-results-item')) {\n selected.classList.remove('mux_palette-results-item-selected');\n selected.nextElementSibling.classList.add('mux_palette-results-item-selected');\n setTimeout(function () {\n if ((selected === null || selected === void 0 ? void 0 : selected.previousElementSibling) != null)\n selected.previousElementSibling.scrollIntoView({\n behavior: 'auto',\n block: 'center',\n inline: 'center',\n });\n }, 50);\n }\n });\n };\n ComponentPaletteCheckbox.prototype.showResultLabel = function (text, materialIcon) {\n var label = (0, CE_1.ce)('div', 'mux_palette-results-header');\n if (materialIcon != undefined)\n label.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, materialIcon));\n label.appendChild((0, CE_1.ce)('span', null, null, text));\n this.results.appendChild(label);\n };\n ComponentPaletteCheckbox.prototype.getSelectedResult = function () {\n if (this.results == null)\n return null;\n return this.results.querySelector('.mux_palette-results-item-selected');\n };\n return ComponentPaletteCheckbox;\n}(baseComponent_1.MUXComponent));\nexports.ComponentPaletteCheckbox = ComponentPaletteCheckbox;\n//# sourceMappingURL=Component.PaletteCheckbox.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentPaletteSearch = void 0;\nvar Index_1 = require(\"../../Index\");\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar ComponentPaletteSearch = /** @class */ (function (_super) {\n __extends(ComponentPaletteSearch, _super);\n function ComponentPaletteSearch(options) {\n var _a, _b, _c;\n var _this = _super.call(this) || this;\n _this.defaultView = 'recent_and_rest';\n _this.recents = [];\n _this.pid = options === null || options === void 0 ? void 0 : options.paletteUniqueIdentifier;\n _this.defaultView = (_a = options === null || options === void 0 ? void 0 : options.defaultView) !== null && _a !== void 0 ? _a : 'recent_and_rest';\n if ((_this.defaultView == 'recent' ||\n _this.defaultView == 'recent_and_rest') &&\n (_this.pid == undefined || _this.pid.trim().length == 0))\n throw new Error(\"Property 'paletteUniqueIdentifier' is required in component 'PaletteSearch' to use recents.\");\n // if (pid != undefined && pid.length > 0)\n // \trecents = Validator.array(\n // \t\tFieldStorage.getChannelValue('palette_search', pid),\n // \t\t[]\n // \t);\n _this.container = (0, CE_1.ce)('div', 'mux_palette');\n _this.container.onclick = function () { return _this.close(); };\n _this.inner = (0, CE_1.ce)('div', 'mux_palette-inner');\n _this.inner.onclick = function (e) { return e.stopPropagation(); };\n var input = (0, CE_1.ce)('input', 'mux_palette-input', {\n type: 'text',\n placeholder: (_b = options === null || options === void 0 ? void 0 : options.placeholder) !== null && _b !== void 0 ? _b : 'Starting typing to search...',\n });\n input.oninput = function () { return _this.handleInputUpdate(input.value); };\n _this.inner.appendChild(input);\n _this.results = (0, CE_1.ce)('div', ['mux_palette-results']);\n _this.inner.appendChild(_this.results);\n _this.container.appendChild(_this.inner);\n document.body.appendChild(_this.container);\n _this.items = (_c = options === null || options === void 0 ? void 0 : options.items) !== null && _c !== void 0 ? _c : [];\n _this.registerKeyListener();\n _this.showDefaultView();\n setTimeout(function () {\n _this.container.style.opacity = '1';\n _this.inner.style.opacity = '1';\n _this.inner.style.transform = 'scale(1)';\n input.focus();\n }, 20);\n return _this;\n }\n ComponentPaletteSearch.prototype.close = function () {\n var _this = this;\n this.overwrite.close();\n this.container.style.pointerEvents = 'none';\n this.container.style.opacity = '0';\n this.inner.style.opacity = '0';\n this.inner.style.transform = 'scale(0.8)';\n setTimeout(function () { return _this.destroy(); }, 400);\n this.callEvent('close');\n };\n ComponentPaletteSearch.prototype.registerKeyListener = function () {\n var _this = this;\n this.overwrite = Index_1.MorphKey.createOverwrite();\n this.overwrite.bind('Escape', function () { return _this.close(); });\n this.overwrite.bind('Enter', function () {\n var selected = _this.getSelectedResult();\n if (selected != null)\n selected.click();\n });\n this.overwrite.bind('ArrowUp', function () {\n var selected = _this.getSelectedResult();\n if (selected != null &&\n selected.previousElementSibling != null &&\n selected.previousElementSibling.classList.contains('mux_palette-results-item')) {\n selected.classList.remove('mux_palette-results-item-selected');\n selected.previousElementSibling.classList.add('mux_palette-results-item-selected');\n setTimeout(function () {\n if ((selected === null || selected === void 0 ? void 0 : selected.previousElementSibling) != null)\n selected.previousElementSibling.scrollIntoView({\n behavior: 'auto',\n block: 'center',\n inline: 'center',\n });\n }, 50);\n }\n });\n this.overwrite.bind('ArrowDown', function () {\n var selected = _this.getSelectedResult();\n if (selected != null &&\n selected.nextElementSibling != null &&\n selected.nextElementSibling.classList.contains('mux_palette-results-item')) {\n selected.classList.remove('mux_palette-results-item-selected');\n selected.nextElementSibling.classList.add('mux_palette-results-item-selected');\n setTimeout(function () {\n if ((selected === null || selected === void 0 ? void 0 : selected.previousElementSibling) != null)\n selected.previousElementSibling.scrollIntoView({\n behavior: 'auto',\n block: 'center',\n inline: 'center',\n });\n }, 50);\n }\n });\n };\n ComponentPaletteSearch.prototype.search = function (query) {\n var tagwords = this.getTags(query);\n var results = [];\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n var score = this.getScore(tagwords, item.tags != undefined ? item.tags : this.getTags(item.name)) *\n (item.scoreWeight != undefined && !isNaN(item.scoreWeight)\n ? item.scoreWeight\n : 1);\n if (score > 0)\n results.push(__assign({ score: score }, item));\n }\n return results;\n };\n ComponentPaletteSearch.prototype.addToRecents = function (recentId) {\n var newRecents = [];\n __spreadArray([recentId], this.recents, true).forEach(function (id) {\n if (!newRecents.includes(id))\n newRecents.push(id);\n });\n if (newRecents.length > 5)\n newRecents.splice(5, newRecents.length - 5);\n this.recents = newRecents;\n // FieldStorage.setChannelValue('palette_search', pid, this.recents);\n };\n ComponentPaletteSearch.prototype.renderSearchResult = function (result, index) {\n var _this = this;\n var item = (0, CE_1.ce)(result.href != undefined ? 'a' : 'div', 'mux_palette-results-item');\n if (result.href != undefined)\n item.href = result.href;\n else if (result.click != undefined)\n item.addEventListener('click', function () {\n result.click();\n _this.close();\n });\n if (this.pid != undefined &&\n this.pid.length > 0 &&\n (result.uniqueIdentifier != undefined || result.href != undefined)) {\n item.addEventListener('click', function () {\n var _a;\n return _this.addToRecents((_a = result.uniqueIdentifier) !== null && _a !== void 0 ? _a : \"address:\".concat(result.href));\n });\n }\n if (index == 0)\n item.classList.add('mux_palette-results-item-selected');\n if (result.materialIcon != undefined) {\n var icon = (0, CE_1.ce)('span', 'material-symbols-outlined', null, result.materialIcon);\n if (result.materialIconTransform != undefined)\n icon.style.transform = result.materialIconTransform;\n item.appendChild(icon);\n }\n else if (result.iconSrc != undefined)\n item.appendChild((0, CE_1.ce)('img', 'mux_palette-results-item-icon', {\n src: result.iconSrc,\n }));\n var text = (0, CE_1.ce)('div', [\n 'mux_palette-results-item-text',\n 'mux_text',\n 'mux_small',\n ]);\n if (result.prefix != undefined)\n text.appendChild((0, CE_1.ce)('span', 'mux_palette-results-item-text-sub', null, result.prefix.trim()));\n text.appendChild((0, CE_1.ce)('span', 'mux_palette-results-item-text-main', null, result.name.trim()));\n if (result.suffix != undefined)\n text.appendChild((0, CE_1.ce)('span', 'mux_palette-results-item-text-sub', null, result.suffix.trim()));\n item.appendChild(text);\n // if (result.selectedText != undefined) {\n // \titem.appendChild(\n // \t\tce(\n // \t\t\t'div',\n // \t\t\t['mux_palette-results-item-selectedtext', 'mux_text', 'mux_tiny'],\n // \t\t\tnull,\n // \t\t\tresult.selectedText\n // \t\t)\n // \t);\n // }\n this.results.appendChild(item);\n return item;\n };\n ComponentPaletteSearch.prototype.showDefaultView = function () {\n var _this = this;\n this.results.innerHTML = '';\n switch (this.defaultView) {\n case 'all':\n this.items.forEach(function (item, i) {\n return _this.renderSearchResult(item, i);\n });\n break;\n case 'none':\n return;\n case 'recent_and_rest':\n var recentItems = this.getRecentItems();\n if (recentItems.length > 0)\n this.showResultLabel('Recent actions', 'schedule');\n recentItems.forEach(function (item, i) {\n return _this.renderSearchResult(item, i);\n });\n var otherItems = this.items.filter(function (item) {\n var _a;\n if (item.uniqueIdentifier == undefined && item.href == null)\n return true;\n return !_this.recents.includes((_a = item.uniqueIdentifier) !== null && _a !== void 0 ? _a : \"address:\".concat(item.href));\n });\n if (otherItems.length > 0) {\n otherItems.forEach(function (item, i) {\n var itemElement = _this.renderSearchResult(item, i + recentItems.length);\n if (i == 0 && recentItems.length > 0)\n itemElement.classList.add('mux_palette-results-item-separator');\n });\n }\n break;\n case 'recent':\n default:\n this.showResultLabel('Recent actions', 'schedule');\n this.getRecentItems().forEach(function (item, i) {\n return _this.renderSearchResult(item, i);\n });\n break;\n }\n };\n ComponentPaletteSearch.prototype.getRecentItems = function () {\n if (this.recents == undefined || this.recents.length == 0)\n return [];\n var addressMap = new Map();\n var uidMap = new Map();\n this.items.forEach(function (item) {\n if (item.uniqueIdentifier != undefined &&\n item.uniqueIdentifier.trim().length > 0)\n uidMap.set(item.uniqueIdentifier.trim(), item);\n if (item.href != undefined && item.href.trim().length > 0)\n addressMap.set(item.href.trim(), item);\n });\n var recentItems = [];\n this.recents.forEach(function (recentId) {\n if (recentId.startsWith('address:')) {\n if (addressMap.has(recentId.replace('address:', '')))\n recentItems.push(addressMap.get(recentId.replace('address:', '')));\n }\n else {\n if (uidMap.has(recentId))\n recentItems.push(uidMap.get(recentId));\n }\n });\n return recentItems;\n };\n ComponentPaletteSearch.prototype.handleInputUpdate = function (value) {\n var _this = this;\n if (value.trim().length < 1)\n return this.showDefaultView();\n this.results.innerHTML = '';\n var searchresults = this.search(value.trim());\n if (searchresults.length == 0)\n return this.showResultLabel('No results based on your search query.', 'warning');\n searchresults\n .sort(function (a, b) {\n return b.score - a.score;\n })\n .forEach(function (result, index) { return _this.renderSearchResult(result, index); });\n };\n ComponentPaletteSearch.prototype.showResultLabel = function (text, materialIcon) {\n var label = (0, CE_1.ce)('div', 'mux_palette-results-label');\n if (materialIcon != undefined)\n label.appendChild((0, CE_1.ce)('span', 'material-symbols-outlined', null, materialIcon));\n label.appendChild((0, CE_1.ce)('span', null, null, text));\n this.results.appendChild(label);\n };\n ComponentPaletteSearch.prototype.getSelectedResult = function () {\n if (this.results == null)\n return null;\n return this.results.querySelector('.mux_palette-results-item-selected');\n };\n ComponentPaletteSearch.prototype.getScore = function (queryWords, tagWords) {\n var score = 0;\n var _loop_1 = function (i) {\n tagWords.forEach(function (tagWord) {\n if (tagWord.includes(queryWords[i])) {\n score += tagWord.startsWith(queryWords[i]) ? 2 : 1;\n }\n });\n };\n for (var i = 0; i < queryWords.length; i++) {\n _loop_1(i);\n }\n return score;\n };\n ComponentPaletteSearch.prototype.getTags = function (query) {\n var tags = [];\n query\n .toLowerCase()\n .split(' ')\n .map(function (word) {\n return word.trim();\n })\n .filter(function (word) {\n return word.length > 0;\n })\n .forEach(function (tag) {\n if (!tags.includes(tag))\n tags.push(tag);\n });\n return tags;\n };\n return ComponentPaletteSearch;\n}(baseComponent_1.MUXComponent));\nexports.ComponentPaletteSearch = ComponentPaletteSearch;\n//# sourceMappingURL=Component.PaletteSearch.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentResizer = void 0;\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar ComponentResizer = /** @class */ (function (_super) {\n __extends(ComponentResizer, _super);\n function ComponentResizer(options) {\n var _a, _b, _c;\n var _this = _super.call(this) || this;\n _this.startPoint = null;\n _this.startSize = null;\n _this.preMove = true;\n _this.moveEvent = function (e) {\n _this.handleMove(e);\n };\n _this.touchEndEvent = function (e) {\n _this.stopResize();\n };\n _this.direction = (_a = options === null || options === void 0 ? void 0 : options.direction) !== null && _a !== void 0 ? _a : 'right';\n _this.closeable = (_b = options === null || options === void 0 ? void 0 : options.closeable) !== null && _b !== void 0 ? _b : false;\n _this.min = options === null || options === void 0 ? void 0 : options.min;\n _this.max = options === null || options === void 0 ? void 0 : options.max;\n _this.relative = (_c = options === null || options === void 0 ? void 0 : options.relative) !== null && _c !== void 0 ? _c : false;\n _this.container = (0, CE_1.ce)('div', 'mux_resizer');\n var area = (0, CE_1.ce)('div', 'mux_resizer-area');\n var grab = (0, CE_1.ce)('div', 'mux_resizer-grab');\n var grabHandle = (0, CE_1.ce)('span', ['material-symbols-outlined', 'mux_resizer-grab-handle'], null, 'drag_handle');\n if (options.direction == 'left' || options.direction == 'right')\n grabHandle.style.transform = 'rotate(90deg)';\n grab.appendChild(grabHandle);\n var grabOpen = (0, CE_1.ce)('span', ['material-symbols-outlined', 'mux_resizer-grab-open'], null, {\n left: 'arrow_left',\n right: 'arrow_right',\n up: 'arrow_drop_up',\n down: 'arrow_drop_down',\n }[_this.direction]);\n grab.appendChild(grabOpen);\n area.appendChild(grab);\n if ((options === null || options === void 0 ? void 0 : options.existingContainer) != undefined) {\n if (!options.existingContainer.classList.contains('mux_resizer'))\n throw new Error('Container of registered resizer does not contain mux_resizer classname');\n _this.container = options.existingContainer;\n if (_this.container.querySelector('.mux_resizer-area') != null) {\n var existingArea = _this.container.querySelector('.mux_resizer-area');\n _this.container.removeChild(existingArea);\n }\n }\n _this.container.appendChild(area);\n _this.container.classList.add(\"mux_resizer-direction-\".concat(_this.direction));\n _this.currentSize =\n _this.direction == 'left' || _this.direction == 'right'\n ? _this.container.clientWidth\n : _this.container.clientHeight;\n area.addEventListener('mousedown', function (e) { return _this.startResize(e); });\n area.addEventListener('touchstart', function (e) { return _this.startResize(e); });\n grab.addEventListener('mousedown', function (e) { return _this.startResize(e); });\n area.addEventListener('touchstart', function (e) { return _this.startResize(e); });\n grab.addEventListener('click', function () {\n if (!_this.container.classList.contains('mux_resizer-closed'))\n return;\n var size = typeof _this.min === 'function' ? _this.min() : _this.min;\n if (_this.direction == 'left' || _this.direction == 'right')\n _this.container.style.width = _this.toSize(size);\n else if (_this.direction == 'up' || _this.direction == 'down')\n _this.container.style.height = _this.toSize(size);\n _this.currentSize = size;\n _this.callEvent('resized', size);\n _this.container.classList.remove('mux_resizer-closed');\n });\n if (!_this.relative)\n window.addEventListener('resize', function () {\n _this.setSize(_this.currentSize);\n });\n return _this;\n }\n ComponentResizer.prototype.toSize = function (value) {\n if (!this.relative)\n return \"\".concat(value, \"px\");\n var parentSize = this.direction == 'left' || this.direction == 'right'\n ? this.container.parentElement.clientWidth\n : this.container.parentElement.clientHeight;\n var percent = (value / parentSize) * 100;\n return \"\".concat(percent, \"%\");\n };\n ComponentResizer.prototype.setSize = function (size) {\n var value = this.parseNewValue(size);\n if (this.direction == 'left' || this.direction == 'right')\n this.container.style.width = this.toSize(value);\n else if (this.direction == 'up' || this.direction == 'down')\n this.container.style.height = this.toSize(value);\n this.currentSize = value;\n this.callEvent('resized', value);\n };\n ComponentResizer.prototype.getSize = function () {\n return this.currentSize;\n };\n ComponentResizer.prototype.parseNewValue = function (value) {\n var _min = typeof this.min === 'function' ? this.min() : this.min;\n var _max = typeof this.max === 'function' ? this.max() : this.max;\n value >= _min\n ? this.container.classList.remove('mux_resizer-block')\n : this.container.classList.add('mux_resizer-block');\n if (_min >= 0) {\n if (this.closeable == true && value < _min * 0.5) {\n this.container.classList.add('mux_resizer-closed');\n this.callEvent('resized', 0);\n return 0;\n }\n else\n value = Math.max(_min, value);\n }\n if (_max > 0)\n value = Math.min(_max, value);\n this.container.classList.remove('mux_resizer-closed');\n return value;\n };\n ComponentResizer.prototype.startResize = function (e) {\n var _a = this.pageCoords(e), x = _a.x, y = _a.y;\n var bounds = this.container.getBoundingClientRect();\n if (this.direction == 'left' || this.direction == 'right') {\n this.startPoint = x;\n this.startSize = bounds.width;\n }\n else if (this.direction == 'up' || this.direction == 'down') {\n this.startPoint = y;\n this.startSize = bounds.height;\n }\n window.addEventListener('mousemove', this.moveEvent);\n window.addEventListener('touchmove', this.moveEvent);\n window.addEventListener('touchend', this.touchEndEvent);\n };\n ComponentResizer.prototype.stopResize = function () {\n this.startPoint = null;\n this.startSize = null;\n this.preMove = true;\n this.container.classList.remove('mux_resizer-moving');\n window.removeEventListener('mousemove', this.moveEvent);\n window.removeEventListener('touchmove', this.moveEvent);\n window.removeEventListener('touchend', this.touchEndEvent);\n };\n ComponentResizer.prototype.handleMove = function (e) {\n var _a, _b, _c;\n if (((_a = e === null || e === void 0 ? void 0 : e.buttons) !== null && _a !== void 0 ? _a : 1) != 1 ||\n ((_c = (_b = e === null || e === void 0 ? void 0 : e.touches) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 1) == 0 ||\n this.startPoint == null ||\n this.startSize == null) {\n this.stopResize();\n return;\n }\n var _d = this.pageCoords(e), x = _d.x, y = _d.y;\n if (this.preMove) {\n var startSpan = Math.abs(this.startPoint -\n (this.direction == 'left' || this.direction == 'right'\n ? x\n : y));\n if (startSpan >= 10) {\n this.preMove = false;\n this.container.classList.add('mux_resizer-moving');\n }\n else\n return;\n }\n var value = null;\n if (this.direction == 'left' || this.direction == 'right') {\n value = this.parseNewValue(this.startSize +\n (this.direction == 'left'\n ? this.startPoint - x\n : x - this.startPoint));\n this.container.style.width = this.toSize(value);\n }\n else if (this.direction == 'up' || this.direction == 'down') {\n value = this.parseNewValue(this.startSize +\n (this.direction == 'up'\n ? this.startPoint - y\n : y - this.startPoint));\n this.container.style.height = this.toSize(value);\n }\n this.currentSize = value;\n this.callEvent('resized', value);\n };\n ComponentResizer.prototype.pageCoords = function (e) {\n var _a, _b, _c, _d;\n return {\n x: (_a = e.pageX) !== null && _a !== void 0 ? _a : (_b = e.touches[0]) === null || _b === void 0 ? void 0 : _b.pageX,\n y: (_c = e.pageY) !== null && _c !== void 0 ? _c : (_d = e.touches[0]) === null || _d === void 0 ? void 0 : _d.pageY,\n };\n };\n return ComponentResizer;\n}(baseComponent_1.MUXComponent));\nexports.ComponentResizer = ComponentResizer;\n//# sourceMappingURL=Component.Resizer.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentRow = void 0;\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar ComponentRow = /** @class */ (function (_super) {\n __extends(ComponentRow, _super);\n function ComponentRow(options) {\n var _this = _super.call(this) || this;\n _this.container = (0, CE_1.ce)('div', 'mux_row');\n if ((options === null || options === void 0 ? void 0 : options.spreadEven) == true)\n _this.container.classList.add('mux_spread');\n if ((options === null || options === void 0 ? void 0 : options.indent) == true)\n _this.container.classList.add('mux_indent');\n if ((options === null || options === void 0 ? void 0 : options.disabled) == true)\n _this.container.classList.add('mux_disabled');\n if ((options === null || options === void 0 ? void 0 : options.tooltip) != undefined)\n _this.container.title = options.tooltip;\n _this.content = (0, CE_1.ce)('div', 'mux_row-content');\n var label = (0, CE_1.ce)('div', ['mux_row-label', 'mux_text'], null, options.label);\n if ((options === null || options === void 0 ? void 0 : options.layout) != undefined && options.layout == 'valueFirst') {\n _this.container.appendChild(_this.content);\n _this.container.appendChild(label);\n }\n else {\n _this.container.appendChild(label);\n _this.container.appendChild(_this.content);\n }\n if (options.content != undefined)\n _this.content.appendChild(options.content);\n return _this;\n }\n ComponentRow.prototype.setEnabled = function (state) {\n if (state)\n this.container.classList.remove('mux_disabled');\n else\n this.container.classList.add('mux_disabled');\n };\n ComponentRow.prototype.setTooltip = function (tooltip) {\n if (tooltip == null)\n this.container.removeAttribute('title');\n else\n this.container.title = tooltip;\n };\n return ComponentRow;\n}(baseComponent_1.MUXComponent));\nexports.ComponentRow = ComponentRow;\n//# sourceMappingURL=Component.Row.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentSelect = void 0;\nvar Index_1 = require(\"../../Index\");\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar ComponentSelect = /** @class */ (function (_super) {\n __extends(ComponentSelect, _super);\n function ComponentSelect(options) {\n var _a, _b, _c;\n var _this = _super.call(this) || this;\n _this.show = 'name';\n _this.show = (_a = options.show) !== null && _a !== void 0 ? _a : 'name';\n _this.container = (0, CE_1.ce)('div', 'mux_select');\n var border = (_b = options.border) !== null && _b !== void 0 ? _b : 'hover';\n if (border == 'always')\n _this.container.classList.add('mux_select-alwaysborder');\n else if (border == 'never')\n _this.container.classList.add('mux_select-noborder');\n _this.input = new Index_1.MorphComponent.Input({\n type: 'text',\n border: 'never',\n });\n _this.input.container.onkeydown = function (e) {\n e.preventDefault();\n };\n _this.container.appendChild(_this.input.container);\n _this.content = (0, CE_1.ce)('div', 'mux_select-content');\n _this.container.appendChild(_this.content);\n _this.container.appendChild((0, CE_1.ce)('span', ['material-symbols-outlined', 'mux_select-arrow'], null, 'keyboard_arrow_down'));\n _this.input.container.onfocus = function () {\n _this.input.container.blur();\n _this.toggleContext();\n };\n _this.input.container.onblur = function () {\n _this.context.close('selectblur');\n };\n _this.container.onclick = function () { return _this.toggleContext(); };\n _this.items = (_c = options === null || options === void 0 ? void 0 : options.items) !== null && _c !== void 0 ? _c : [];\n _this.select(options.selectedId, false);\n return _this;\n }\n ComponentSelect.prototype.setItems = function (items) {\n this.items = items;\n };\n ComponentSelect.prototype.select = function (id, dispatchEvent) {\n var _a;\n if (dispatchEvent === void 0) { dispatchEvent = true; }\n var item = this.items.find(function (i) {\n if (i.type == 'separator')\n return false;\n return i.id == id;\n });\n this.selectedId = id;\n this.content.innerHTML = '';\n if (item == null) {\n this.content.appendChild((0, CE_1.ce)('div', ['mux_text', 'mux_small', 'mux_select-none'], null, 'None selected'));\n return;\n }\n if (item.materialIcon != undefined) {\n var materialIcon = (0, CE_1.ce)('span', 'material-symbols-outlined', null, item.materialIcon);\n if (item.materialIconTransform != undefined)\n materialIcon.style.transform = item.materialIconTransform;\n this.content.appendChild(materialIcon);\n }\n else if (item.icon != undefined) {\n this.content.appendChild((0, CE_1.ce)('img', 'mux_select-content-icon', { src: item.icon }));\n }\n this.content.appendChild((0, CE_1.ce)('div', ['mux_text', 'mux_small'], null, (_a = item.text) !== null && _a !== void 0 ? _a : item.id));\n if (dispatchEvent)\n this.callEvent('input', id);\n };\n ComponentSelect.prototype.setSelected = function (id) {\n this.select(id, false);\n };\n ComponentSelect.prototype.getSelected = function () {\n return this.selectedId;\n };\n ComponentSelect.prototype.toggleContext = function () {\n var _this = this;\n if (this.context != null) {\n return this.context.close('selecttoggle');\n }\n var bounds = this.container.getBoundingClientRect();\n this.context = new Index_1.MorphComponent.ContextMenu({\n x: bounds.x + bounds.width / 2,\n y: bounds.y + bounds.height,\n align: 'center',\n selected: this.selectedId,\n items: this.items.map(function (item) {\n var _a, _b;\n if (item.type == 'separator') {\n return { type: 'separator' };\n }\n return {\n type: (_a = item.type) !== null && _a !== void 0 ? _a : 'normal',\n uniqueIdentifier: item.id,\n text: (_b = item.text) !== null && _b !== void 0 ? _b : item.id,\n materialIcon: item.materialIcon,\n materialIconTransform: item.materialIconTransform,\n icon: item.icon,\n click: function () {\n _this.select(item.id, true);\n },\n };\n }),\n });\n this.container.classList.add('mux_select-open');\n this.context.on('close', function () {\n _this.container.classList.remove('mux_select-open');\n _this.context = null;\n });\n };\n return ComponentSelect;\n}(baseComponent_1.MUXComponent));\nexports.ComponentSelect = ComponentSelect;\n//# sourceMappingURL=Component.Select.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentTable_Base = void 0;\nvar ComponentTable_Base = /** @class */ (function () {\n function ComponentTable_Base() {\n }\n ComponentTable_Base.prototype.createElement = function (cell, rowId, column, component, asNumber) {\n if (asNumber === void 0) { asNumber = false; }\n return null;\n };\n return ComponentTable_Base;\n}());\nexports.ComponentTable_Base = ComponentTable_Base;\n//# sourceMappingURL=Component.Table._base.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentTable_Button = void 0;\nvar Index_1 = require(\"../../Index\");\nvar Component_Table__base_1 = require(\"./Component.Table._base\");\nvar ComponentTable_Button = /** @class */ (function (_super) {\n __extends(ComponentTable_Button, _super);\n function ComponentTable_Button() {\n return _super.call(this) || this;\n }\n ComponentTable_Button.prototype.createElement = function (cell, rowId, column, component, asNumber) {\n if (asNumber === void 0) { asNumber = false; }\n var container = (0, Index_1.ce)('div', ['mux_table-button']);\n var btn = (0, Index_1.ce)('div', [\n 'mux_table-button-btn',\n 'mux_text',\n 'mux_small',\n \"mux_table-button-btn-\".concat(encodeURI(cell.text)),\n ], { title: cell.tooltip }, cell.text);\n btn.onclick = function (e) {\n e.stopPropagation();\n component.callEvent('buttonClick', rowId, column.uniqueIdentifier);\n };\n container.appendChild(btn);\n return container;\n };\n return ComponentTable_Button;\n}(Component_Table__base_1.ComponentTable_Base));\nexports.ComponentTable_Button = ComponentTable_Button;\n//# sourceMappingURL=Component.Table.Button.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentTable_Text = void 0;\nvar Index_1 = require(\"../../Index\");\nvar TextHighlighter_1 = require(\"../../Utils/TextHighlighter\");\nvar Component_Table__base_1 = require(\"./Component.Table._base\");\nvar ComponentTable_Text = /** @class */ (function (_super) {\n __extends(ComponentTable_Text, _super);\n function ComponentTable_Text(allowHighlighting) {\n var _this = _super.call(this) || this;\n _this.allowHighlighting = allowHighlighting;\n return _this;\n }\n ComponentTable_Text.prototype.createElement = function (cell, rowId, column, component, asNumber) {\n var _a, _b, _c, _d, _e, _f;\n if (asNumber === void 0) { asNumber = false; }\n var wrapper = (0, Index_1.ce)('div', 'mux_table-wrapper');\n var container = (0, Index_1.ce)('div', 'mux_table-text', {\n title: (_a = cell === null || cell === void 0 ? void 0 : cell.tooltip) !== null && _a !== void 0 ? _a : '',\n });\n var text = this.allowHighlighting\n ? (0, TextHighlighter_1.generateTextHighlights)(String(cell.value).trim())\n : (0, Index_1.ce)('div', ['mux_text', 'mux_small'], null, \"\".concat((_b = cell.prefix) !== null && _b !== void 0 ? _b : '', \" \").concat(cell.value).trim());\n text.prepend((0, Index_1.ce)('span', null, null, cell.prefix));\n text.style.justifyContent = {\n left: 'flex-Start',\n right: 'flex-end',\n center: 'center',\n }[(_c = cell.align) !== null && _c !== void 0 ? _c : 'left'];\n var editonly = column.editonly;\n container.appendChild(text);\n if (column.editable) {\n var inputContainer = (0, Index_1.ce)('div', 'mux_table-edit-input');\n var inputPrefix = (0, Index_1.ce)('div', ['mux_text', 'mux_small', 'mux_table-edit-input-prefix'], null, (_d = cell.prefix) !== null && _d !== void 0 ? _d : '');\n var input = new Index_1.MorphComponent.Input({\n type: 'text',\n value: String((_e = cell === null || cell === void 0 ? void 0 : cell.value) !== null && _e !== void 0 ? _e : '').trim(),\n border: 'always',\n });\n if (editonly)\n input.on('input', function () {\n component.callEvent('valueUpdated', rowId, column.uniqueIdentifier, !asNumber\n ? input.container.value\n : parseFloat(input.container.value));\n });\n input.container.style.textAlign = (_f = cell.align) !== null && _f !== void 0 ? _f : 'left';\n inputContainer.appendChild(inputPrefix);\n inputContainer.appendChild(input.container);\n container.appendChild(inputContainer);\n container.style.cursor = 'pointer';\n var hasFirst = false;\n var clickTimeout;\n container.onclick = function () {\n clearTimeout(clickTimeout);\n if (hasFirst == false) {\n hasFirst = true;\n clickTimeout = setTimeout(function () {\n hasFirst = false;\n }, 1000);\n }\n else {\n openEdit();\n hasFirst = false;\n }\n };\n var openEdit = function () {\n text.style.display = 'none';\n inputContainer.style.display = 'flex';\n input.container.focus();\n input.container.setSelectionRange(input.container.value.length, input.container.value.length);\n var initValue = input.container.value;\n var close = function () {\n if (editonly)\n return;\n window.removeEventListener('click', onclick);\n component.callEvent('valueUpdated', rowId, column.uniqueIdentifier, !asNumber\n ? input.container.value\n : parseFloat(input.container.value));\n text.innerText = input.container.value;\n text.style.display = 'flex';\n inputContainer.style.display = 'none';\n };\n input.container.onkeydown = function (e) {\n if (editonly)\n return;\n if (e.key == 'Enter')\n close();\n else if (e.key == 'Escape') {\n input.container.value = initValue;\n text.innerText = input.container.value;\n close();\n }\n };\n if (!editonly) {\n var onclick = function (e) {\n if (e.target == undefined ||\n e.target != input.container)\n close();\n };\n setTimeout(function () { return window.addEventListener('click', onclick); }, 100);\n }\n };\n if (editonly)\n openEdit();\n }\n wrapper.appendChild(container);\n if (cell.subText != undefined) {\n wrapper.appendChild((0, Index_1.ce)('div', ['mux_text', 'mux_tiny', 'mux_table-subtext'], null, cell.subText.trim()));\n }\n return wrapper;\n };\n return ComponentTable_Text;\n}(Component_Table__base_1.ComponentTable_Base));\nexports.ComponentTable_Text = ComponentTable_Text;\n//# sourceMappingURL=Component.Table.Text.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentTable_Duration = void 0;\nvar Component_Table_Text_1 = require(\"./Component.Table.Text\");\nvar Component_Table__base_1 = require(\"./Component.Table._base\");\nvar ComponentTable_Duration = /** @class */ (function (_super) {\n __extends(ComponentTable_Duration, _super);\n function ComponentTable_Duration() {\n var _this = _super.call(this) || this;\n _this._text = new Component_Table_Text_1.ComponentTable_Text(false);\n return _this;\n }\n ComponentTable_Duration.prototype.createElement = function (cell, rowId, column, component, asNumber) {\n if (asNumber === void 0) { asNumber = false; }\n var element = this._text.createElement(cell, rowId, column, component, true);\n var elementText = element.querySelector('.mux_text');\n if (elementText != null)\n elementText.style.justifyContent = 'center';\n element.classList.add('mux_table-duration');\n var input = element.querySelector('input');\n var regex = /^[0-9.]+$/;\n element.addEventListener('input', function () {\n var currentValue = input.value;\n if (!regex.test(currentValue)) {\n input.value = currentValue.slice(0, -1);\n }\n });\n return element;\n };\n return ComponentTable_Duration;\n}(Component_Table__base_1.ComponentTable_Base));\nexports.ComponentTable_Duration = ComponentTable_Duration;\n//# sourceMappingURL=Component.Table.Duration.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentTable_Icons = void 0;\nvar Index_1 = require(\"../../Index\");\nvar Component_Table__base_1 = require(\"./Component.Table._base\");\nvar ComponentTable_Icons = /** @class */ (function (_super) {\n __extends(ComponentTable_Icons, _super);\n function ComponentTable_Icons() {\n return _super.call(this) || this;\n }\n ComponentTable_Icons.prototype.createElement = function (cell, rowId, column, component, asNumber) {\n var _a;\n if (asNumber === void 0) { asNumber = false; }\n var container = (0, Index_1.ce)('div', ['mux_table-icons']);\n ((_a = cell === null || cell === void 0 ? void 0 : cell.items) !== null && _a !== void 0 ? _a : []).forEach(function (item) {\n var itemElement = (0, Index_1.ce)('div', 'mux_table-icon');\n itemElement.appendChild((0, Index_1.ce)('span', 'material-symbols-outlined', null, item.materialIcon));\n if (item.color != undefined)\n itemElement.style.color = item.color;\n itemElement.onclick = function (e) {\n e.stopPropagation();\n item.click();\n };\n container.appendChild(itemElement);\n });\n return container;\n };\n return ComponentTable_Icons;\n}(Component_Table__base_1.ComponentTable_Base));\nexports.ComponentTable_Icons = ComponentTable_Icons;\n//# sourceMappingURL=Component.Table.Icons.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentTable_MaterialSymbol = void 0;\nvar Index_1 = require(\"../../Index\");\nvar TextHighlighter_1 = require(\"../../Utils/TextHighlighter\");\nvar Component_Table__base_1 = require(\"./Component.Table._base\");\nvar ComponentTable_MaterialSymbol = /** @class */ (function (_super) {\n __extends(ComponentTable_MaterialSymbol, _super);\n function ComponentTable_MaterialSymbol() {\n return _super.call(this) || this;\n }\n ComponentTable_MaterialSymbol.prototype.createElement = function (cell, rowId, column, component, asNumber) {\n var _a, _b, _c, _d;\n if (asNumber === void 0) { asNumber = false; }\n var wrapper = (0, Index_1.ce)('div', 'mux_table-wrapper');\n var container = (0, Index_1.ce)('div', 'mux_table-text', {\n title: (_a = cell === null || cell === void 0 ? void 0 : cell.tooltip) !== null && _a !== void 0 ? _a : '',\n });\n var text = this.allowHighlighting\n ? (0, TextHighlighter_1.generateTextHighlights)(String(cell.materialIcon).trim())\n : (0, Index_1.ce)('span', ['material-symbols-outlined', 'g_text'], null, cell.materialIcon);\n text.style.justifyContent = {\n left: 'flex-Start',\n right: 'flex-end',\n center: 'center',\n }[(_b = cell.align) !== null && _b !== void 0 ? _b : 'left'];\n container.appendChild(text);\n if (column.editable) {\n var inputContainer = (0, Index_1.ce)('div', 'mux_table-edit-input');\n var input = (0, Index_1.ce)('input', null, {\n type: 'text',\n value: String((_c = cell === null || cell === void 0 ? void 0 : cell.materialIcon) !== null && _c !== void 0 ? _c : '').trim(),\n });\n input.style.textAlign = (_d = cell.align) !== null && _d !== void 0 ? _d : 'left';\n inputContainer.appendChild(input);\n container.appendChild(inputContainer);\n container.style.cursor = 'pointer';\n var hasFirst = false;\n var clickTimeout;\n container.onclick = function () {\n clearTimeout(clickTimeout);\n if (hasFirst == false) {\n hasFirst = true;\n clickTimeout = setTimeout(function () {\n hasFirst = false;\n }, 1000);\n }\n else {\n openEdit();\n hasFirst = false;\n }\n };\n var openEdit = function () {\n text.style.display = 'none';\n inputContainer.style.display = 'flex';\n input.focus();\n input.setSelectionRange(input.value.length, input.value.length);\n var initValue = input.value;\n var close = function () {\n window.removeEventListener('click', onclick);\n component.callEvent('valueUpdated', rowId, column.uniqueIdentifier, !asNumber ? input.value : parseFloat(input.value));\n text.innerText = input.value;\n text.style.display = 'flex';\n inputContainer.style.display = 'none';\n };\n input.onkeydown = function (e) {\n if (e.key == 'Enter')\n close();\n else if (e.key == 'Escape') {\n input.value = initValue;\n text.innerText = input.value;\n close();\n }\n };\n var onclick = function (e) {\n if (e.target == undefined || e.target != input)\n close();\n };\n setTimeout(function () { return window.addEventListener('click', onclick); }, 100);\n };\n }\n wrapper.appendChild(container);\n // if (cell.materialIcon != undefined) {\n // \twrapper.appendChild(\n // \t\tce(\n // \t\t\t'div',\n // \t\t\t['mux_text', 'mux_tiny', 'mux_table-subtext'],\n // \t\t\tnull,\n // \t\t\tcell.subMaterialSymbol.trim()\n // \t\t)\n // \t);\n // }\n return wrapper;\n };\n return ComponentTable_MaterialSymbol;\n}(Component_Table__base_1.ComponentTable_Base));\nexports.ComponentTable_MaterialSymbol = ComponentTable_MaterialSymbol;\n//# sourceMappingURL=Component.Table.MaterialSymbol.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentTable_Number = void 0;\nvar Component_Table_Text_1 = require(\"./Component.Table.Text\");\nvar Component_Table__base_1 = require(\"./Component.Table._base\");\nvar ComponentTable_Number = /** @class */ (function (_super) {\n __extends(ComponentTable_Number, _super);\n function ComponentTable_Number() {\n var _this = _super.call(this) || this;\n _this._text = new Component_Table_Text_1.ComponentTable_Text(false);\n return _this;\n }\n ComponentTable_Number.prototype.createElement = function (cell, rowId, column, component, asNumber) {\n if (asNumber === void 0) { asNumber = false; }\n var element = this._text.createElement(cell, rowId, column, component);\n element.classList.add('mux_table-number');\n var input = element.querySelector('input');\n var regex = /^[0-9.]+$/;\n element.addEventListener('input', function () {\n var currentValue = input.value;\n if (!regex.test(currentValue)) {\n input.value = currentValue.slice(0, -1);\n component.callEvent('valueUpdated', rowId, column.uniqueIdentifier, input.value);\n }\n });\n return element;\n };\n return ComponentTable_Number;\n}(Component_Table__base_1.ComponentTable_Base));\nexports.ComponentTable_Number = ComponentTable_Number;\n//# sourceMappingURL=Component.Table.Number.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentTable_Select = void 0;\nvar Index_1 = require(\"../../Index\");\nvar Component_Table__base_1 = require(\"./Component.Table._base\");\nvar ComponentTable_Select = /** @class */ (function (_super) {\n __extends(ComponentTable_Select, _super);\n function ComponentTable_Select() {\n return _super.call(this) || this;\n }\n ComponentTable_Select.prototype.createElement = function (cell, rowId, column, component, asNumber) {\n if (asNumber === void 0) { asNumber = false; }\n var container = (0, Index_1.ce)('div', 'mux_table-select', { title: cell.tooltip });\n var options = {};\n for (var i = 0; i < column.options.length; i++)\n options[column.options[i].uniqueIdentifier] = column.options[i];\n var setSelected = function (uniqueIdentifier) {\n var _a, _b, _c, _d, _e, _f;\n var selected = (options === null || options === void 0 ? void 0 : options[uniqueIdentifier]) != undefined\n ? uniqueIdentifier\n : column.options[0].uniqueIdentifier;\n var selectedTransform = (_a = options === null || options === void 0 ? void 0 : options[selected].materialIconTransform) !== null && _a !== void 0 ? _a : 'unset';\n var option = options === null || options === void 0 ? void 0 : options[selected];\n textSpan.innerText = (_b = option === null || option === void 0 ? void 0 : option.text) !== null && _b !== void 0 ? _b : '';\n iconSpan.innerText = (_d = (_c = options === null || options === void 0 ? void 0 : options[selected]) === null || _c === void 0 ? void 0 : _c.materialIcon) !== null && _d !== void 0 ? _d : '';\n iconSpan.style.transform = selectedTransform !== null && selectedTransform !== void 0 ? selectedTransform : '';\n container.title = \"\".concat((_f = (_e = options === null || options === void 0 ? void 0 : options[selected]) === null || _e === void 0 ? void 0 : _e.text) !== null && _f !== void 0 ? _f : '', \" | Click to change\");\n };\n var iconSpan = (0, Index_1.ce)('span', 'material-symbols-outlined', null);\n var textSpan = (0, Index_1.ce)('span', ['mux_text', 'mux_small'], null);\n var arrow = (0, Index_1.ce)('span', ['mux_table-select-arrow', 'material-symbols-outlined'], null, 'keyboard_arrow_down');\n container.append(iconSpan, textSpan);\n container.appendChild(arrow);\n setSelected(cell.value);\n container.onclick = function () {\n var bounds = container.getBoundingClientRect();\n var items = column.options.map(function (item) {\n return __assign({ click: function () {\n component.callEvent('valueUpdated', rowId, column.uniqueIdentifier, item.uniqueIdentifier);\n setSelected(item.uniqueIdentifier);\n } }, item);\n });\n var context = new Index_1.MorphComponent.ContextMenu({\n x: bounds.x + bounds.width / 2,\n y: bounds.y + bounds.height,\n items: items,\n });\n };\n return container;\n };\n return ComponentTable_Select;\n}(Component_Table__base_1.ComponentTable_Base));\nexports.ComponentTable_Select = ComponentTable_Select;\n//# sourceMappingURL=Component.Table.Select.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentTable_TextSuggestions = void 0;\nvar Index_1 = require(\"../../Index\");\nvar Component_ContextMenu_1 = require(\"../ContextMenu/Component.ContextMenu\");\nvar Component_Table__base_1 = require(\"./Component.Table._base\");\nvar ComponentTable_TextSuggestions = /** @class */ (function (_super) {\n __extends(ComponentTable_TextSuggestions, _super);\n function ComponentTable_TextSuggestions() {\n return _super.call(this) || this;\n }\n ComponentTable_TextSuggestions.prototype.createElement = function (cell, rowId, column, component, asNumber) {\n var _a, _b, _c, _d;\n if (asNumber === void 0) { asNumber = false; }\n var wrapper = (0, Index_1.ce)('div', 'mux_table-wrapper');\n var container = (0, Index_1.ce)('div', 'mux_table-textsuggestions');\n var optionTitles = {};\n var optionIds = column.options.map(function (option) {\n optionTitles[option.uniqueIdentifier] = option.text;\n return option.uniqueIdentifier;\n });\n var input = new Index_1.MorphComponent.Input({\n type: 'text',\n value: (_b = optionTitles[String((_a = cell === null || cell === void 0 ? void 0 : cell.value) !== null && _a !== void 0 ? _a : '').trim()]) !== null && _b !== void 0 ? _b : String((_c = cell === null || cell === void 0 ? void 0 : cell.value) !== null && _c !== void 0 ? _c : '').trim(),\n border: 'always',\n });\n input.container.setAttribute('valueId', String((_d = cell === null || cell === void 0 ? void 0 : cell.value) !== null && _d !== void 0 ? _d : '').trim());\n var arrow = (0, Index_1.ce)('span', 'material-symbols-outlined', null, 'arrow_drop_down');\n arrow.onclick = function () {\n input.container.focus();\n showContext();\n };\n input.container.addEventListener('focus', function () {\n var _a;\n input.setValue((_a = input.container.getAttribute('valueId')) !== null && _a !== void 0 ? _a : '');\n });\n input.on('blur', function () {\n var optionTitle = optionTitles[input.container.getAttribute('valueId')];\n if (optionTitle == null) {\n if (input.getValue().length > 0)\n component.callEvent('textSuggestionFailed', rowId, column.uniqueIdentifier);\n input.setValue('');\n input.container.removeAttribute('valueId');\n }\n else {\n input.setValue(optionTitle);\n }\n component.callEvent('valueUpdated', rowId, column.uniqueIdentifier, input.container.getAttribute('valueId'));\n setTimeout(function () {\n context === null || context === void 0 ? void 0 : context.destroy();\n }, 250);\n });\n input.container.addEventListener('keydown', function (e) {\n if (e.key != ' ' || !e.ctrlKey)\n return;\n e.preventDefault();\n showContext();\n });\n input.on('input', function () { return showContext(); });\n var context;\n var showContextTimeout;\n function showContext() {\n return __awaiter(this, arguments, void 0, function (instant) {\n if (instant === void 0) { instant = false; }\n return __generator(this, function (_a) {\n context === null || context === void 0 ? void 0 : context.close('blur');\n if (optionIds.includes(input.getValue())) {\n input.container.setAttribute('valueId', input.getValue());\n return [2 /*return*/];\n }\n input.container.removeAttribute('valueId');\n clearTimeout(showContextTimeout);\n showContextTimeout = setTimeout(function () {\n var _a;\n var firstId;\n var value = ((_a = input.getValue()) !== null && _a !== void 0 ? _a : '').toLowerCase();\n var options = value.length == 0\n ? []\n : column.options\n .map(function (option) {\n var _a, _b;\n var text = ((_a = option === null || option === void 0 ? void 0 : option.text) !== null && _a !== void 0 ? _a : '').toLowerCase();\n var id = ((_b = option === null || option === void 0 ? void 0 : option.uniqueIdentifier) !== null && _b !== void 0 ? _b : '').toLowerCase();\n return { text: text, id: id, option: option };\n })\n .filter(function (_a) {\n var text = _a.text, id = _a.id, option = _a.option;\n return (text.includes(value) ||\n id.includes(value));\n })\n .map(function (_a) {\n var text = _a.text, id = _a.id, option = _a.option;\n var score = 1;\n if (text.startsWith(value) ||\n id.startsWith(value))\n score += 1;\n if (text.includes(value) ||\n id.includes(value))\n score += 1;\n if (text == value || id == value)\n score += 1;\n return { score: score, option: option };\n })\n .sort(function (a, b) { return b.score - a.score; })\n .map(function (_a, index) {\n var score = _a.score, option = _a.option;\n if (index == 0)\n firstId = option.uniqueIdentifier;\n return __assign(__assign({}, option), { click: function () {\n input.setValue(option.text);\n input.container.setAttribute('valueId', option.uniqueIdentifier);\n component.callEvent('valueUpdated', rowId, column.uniqueIdentifier, input.getValue());\n component.callEvent('textSuggestionCompleted');\n } });\n });\n if (options.length == 0)\n return;\n var bounds = input.container.getBoundingClientRect();\n context = new Component_ContextMenu_1.ComponentContextMenu({\n items: options,\n selected: firstId,\n x: bounds.x + bounds.width / 2,\n y: bounds.y + bounds.height,\n });\n }, instant ? 0 : 200);\n return [2 /*return*/];\n });\n });\n }\n container.appendChild(input.container);\n container.appendChild(arrow);\n wrapper.appendChild(container);\n return wrapper;\n };\n return ComponentTable_TextSuggestions;\n}(Component_Table__base_1.ComponentTable_Base));\nexports.ComponentTable_TextSuggestions = ComponentTable_TextSuggestions;\n//# sourceMappingURL=Component.Table.TextSuggestions.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentTable = void 0;\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar Component_Table_Button_1 = require(\"./Component.Table.Button\");\nvar Component_Table_Duration_1 = require(\"./Component.Table.Duration\");\nvar Component_Table_Icons_1 = require(\"./Component.Table.Icons\");\nvar Component_Table_MaterialSymbol_1 = require(\"./Component.Table.MaterialSymbol\");\nvar Component_Table_Number_1 = require(\"./Component.Table.Number\");\nvar Component_Table_Select_1 = require(\"./Component.Table.Select\");\nvar Component_Table_Text_1 = require(\"./Component.Table.Text\");\nvar Component_Table_TextSuggestions_1 = require(\"./Component.Table.TextSuggestions\");\nvar Sortable = require(\"sortablejs\");\nvar ComponentTable = /** @class */ (function (_super) {\n __extends(ComponentTable, _super);\n function ComponentTable(options) {\n var _a, _b;\n var _this_1 = _super.call(this) || this;\n _this_1.columns = [];\n _this_1.rows = [];\n _this_1.hiddenRows = [];\n _this_1.columnMap = {};\n _this_1.highlight = function (uniqueIdentifier, style, scrollIntoView, deselectOther) {\n var _a, _b, _c;\n if (scrollIntoView === void 0) { scrollIntoView = false; }\n if (deselectOther === void 0) { deselectOther = true; }\n var rows = _this_1.table.querySelectorAll('tr');\n var styles = typeof style == 'string' ? [style] : style;\n for (var i = 0; i < rows.length; i++) {\n if (uniqueIdentifier != null &&\n rows[i].getAttribute('uid') == uniqueIdentifier) {\n (_a = rows[i].classList).remove.apply(_a, ['selected', 'active', 'outline'].map(function (st) {\n return \"mux_table-row-\".concat(st);\n }));\n if (style != 'none') {\n (_b = rows[i].classList).add.apply(_b, styles.map(function (st) {\n return \"mux_table-row-\".concat(st);\n }));\n if (scrollIntoView)\n rows[i].scrollIntoView({\n block: 'center',\n behavior: 'smooth',\n });\n }\n }\n else if (deselectOther)\n (_c = rows[i].classList).remove.apply(_c, ['selected', 'active', 'outline'].map(function (st) {\n return \"mux_table-row-\".concat(st);\n }));\n }\n };\n _this_1.container = (0, CE_1.ce)('div', 'mux_table');\n _this_1.columns = (_a = options === null || options === void 0 ? void 0 : options.columns) !== null && _a !== void 0 ? _a : [];\n _this_1.table = (0, CE_1.ce)('table');\n var headerRow = (0, CE_1.ce)('tr');\n _this_1.columns.forEach(function (column) {\n var cell = (0, CE_1.ce)('th', null, { uid: column.uniqueIdentifier });\n _this_1.columnMap[column.uniqueIdentifier] = column;\n if (column.width != undefined)\n cell.style.width = column.width;\n if (column.noLeftBorder == true)\n cell.classList.add('mux_table-noborder');\n if (column.title != undefined) {\n var title = (0, CE_1.ce)('div', ['mux_table-text', 'mux_header', 'mux_small'], null, column.title);\n cell.appendChild(title);\n if (column.headerAlign != undefined)\n title.style.textAlign = column.headerAlign;\n }\n headerRow.appendChild(cell);\n });\n _this_1.table.appendChild(headerRow);\n _this_1.container.appendChild(_this_1.table);\n var _this = _this_1;\n var sortable = new Sortable(_this_1.table, {\n filter: ((_b = options === null || options === void 0 ? void 0 : options.dragableIgnore) !== null && _b !== void 0 ? _b : []).join(', '),\n preventOnFilter: false,\n handle: options === null || options === void 0 ? void 0 : options.dragableHandle,\n ghostClass: 'mux_table-row-dragging',\n onStart: function () {\n _this.table.classList.add('mux_table-dragging');\n _this.callEvent('dragStart');\n },\n onEnd: function (evt) {\n _this.callEvent('dragEnd');\n _this.table.classList.remove('mux_table-dragging');\n _this.callEvent('orderUpdated', _this.getOrder());\n _this.updateRowBackgrounds();\n },\n });\n if (options.dragable != true) {\n sortable.option('disabled', true);\n }\n if (options.rows != undefined) {\n options.rows.forEach(function (row) { return _this_1.addRow(row, true); });\n _this_1.updateRowBackgrounds();\n }\n return _this_1;\n }\n ComponentTable.prototype.getOrder = function () {\n var order = [];\n var rows = this.table.querySelectorAll('tr');\n for (var i = 1; i < rows.length; i++)\n order.push(rows[i].getAttribute('uid'));\n return order;\n };\n ComponentTable.prototype.clear = function () {\n this.rows = [];\n var rows = this.table.querySelectorAll('tr');\n if (rows.length > 1)\n for (var i = 1; i < rows.length; i++)\n rows[i].parentElement.removeChild(rows[i]);\n };\n ComponentTable.prototype.addRows = function (rows) {\n var _this_1 = this;\n rows.forEach(function (row) { return _this_1.addRow(row, true); });\n this.updateRowBackgrounds();\n };\n ComponentTable.prototype.addRow = function (row, silent) {\n if (silent === void 0) { silent = false; }\n return this._createRow(row, null, silent);\n };\n ComponentTable.prototype.insertRow = function (index, row, silent) {\n if (silent === void 0) { silent = false; }\n if (index < 0 || index > this.rows.length)\n return;\n return this._createRow(row, index + 1, silent);\n };\n ComponentTable.prototype._createRow = function (row, insertIndex, silent) {\n var _this_1 = this;\n this.rows.push(row.uniqueIdentifier);\n var rowElement = (0, CE_1.ce)('tr', 'mux_table-row', {\n uid: row.uniqueIdentifier,\n });\n if (!this.hiddenRows.includes(row.uniqueIdentifier))\n rowElement.classList.add('mux_table-row-visible');\n rowElement.onclick = function (e) {\n _this_1.callEvent('click', row.uniqueIdentifier, e);\n };\n if (row.child)\n rowElement.classList.add('mux_table-row-child');\n if (row.highlight != undefined)\n rowElement.classList.add(\"mux_table-row-\".concat(row.highlight));\n this.columns.forEach(function (columnSettings) {\n var cellElement = (0, CE_1.ce)('td', null, {\n uid: columnSettings.uniqueIdentifier,\n });\n if (columnSettings.width != undefined)\n cellElement.style.width = columnSettings.width;\n var handler = columnTypes[columnSettings.type];\n var cell = row.cells[columnSettings.uniqueIdentifier];\n if (cell == undefined)\n return;\n cellElement.appendChild(handler.createElement(cell, row.uniqueIdentifier, columnSettings, _this_1));\n rowElement.appendChild(cellElement);\n });\n if (insertIndex != null) {\n var rows = this.table.querySelectorAll('tr');\n if (insertIndex >= rows.length)\n this.table.appendChild(rowElement);\n else\n this.table.insertBefore(rowElement, rows[insertIndex]);\n }\n else\n this.table.appendChild(rowElement);\n if (!silent)\n this.updateRowBackgrounds();\n };\n ComponentTable.prototype.updateCell = function (rowId, columnId, value) {\n var row = this.table.querySelector(\"tr[uid=\\\"\".concat(rowId, \"\\\"]\"));\n if (row == null)\n return;\n var cell = row.querySelector(\"td[uid=\\\"\".concat(columnId, \"\\\"\"));\n if (cell == null)\n return;\n var columnSettings = this.columnMap[columnId];\n var handler = columnTypes[columnSettings.type];\n cell.innerHTML = '';\n cell.appendChild(handler.createElement(value, rowId, columnSettings, this));\n };\n ComponentTable.prototype.setDragable = function (dragable) {\n this.Sortable.option('disabled', !dragable);\n };\n ComponentTable.prototype.updateRowBackgrounds = function () {\n var rows = this.table.querySelectorAll('.mux_table-row-visible');\n var counter = 0;\n var insideChild = false;\n for (var i = 0; i < rows.length; i++) {\n var isChild = rows[i].classList.contains('mux_table-row-child');\n if (insideChild != isChild) {\n insideChild = isChild;\n counter = 0;\n }\n var odd = (counter + 1) % 2 == 0;\n counter++;\n if (odd)\n rows[i].classList.add('mux_table-row-odd');\n else\n rows[i].classList.remove('mux_table-row-odd');\n }\n };\n ComponentTable.extendTypes = function (type, handler) {\n columnTypes[type] = handler;\n };\n return ComponentTable;\n}(baseComponent_1.MUXComponent));\nexports.ComponentTable = ComponentTable;\nvar columnTypes = {\n text: new Component_Table_Text_1.ComponentTable_Text(true),\n textsuggestions: new Component_Table_TextSuggestions_1.ComponentTable_TextSuggestions(),\n number: new Component_Table_Number_1.ComponentTable_Number(),\n button: new Component_Table_Button_1.ComponentTable_Button(),\n duration: new Component_Table_Duration_1.ComponentTable_Duration(),\n icons: new Component_Table_Icons_1.ComponentTable_Icons(),\n select: new Component_Table_Select_1.ComponentTable_Select(),\n materialSymbol: new Component_Table_MaterialSymbol_1.ComponentTable_MaterialSymbol(),\n};\n//# sourceMappingURL=Component.Table.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ComponentText = void 0;\nvar CE_1 = require(\"../../Utils/CE\");\nvar baseComponent_1 = require(\"../baseComponent\");\nvar ComponentText = /** @class */ (function (_super) {\n __extends(ComponentText, _super);\n function ComponentText(options) {\n var _a;\n var _this = _super.call(this) || this;\n var size = (_a = options === null || options === void 0 ? void 0 : options.size) !== null && _a !== void 0 ? _a : 'normal';\n _this.container = (0, CE_1.ce)('div', ['mux_text', \"mux_\".concat(size)], null, options === null || options === void 0 ? void 0 : options.content);\n return _this;\n }\n ComponentText.prototype.update = function (content) {\n this.container.innerHTML = content;\n };\n return ComponentText;\n}(baseComponent_1.MUXComponent));\nexports.ComponentText = ComponentText;\n//# sourceMappingURL=Component.Text.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MorphComponent = void 0;\nvar Component_Button_1 = require(\"./Components/Button/Component.Button\");\nvar Component_Cards_1 = require(\"./Components/Cards/Component.Cards\");\nvar Component_ContextMenu_1 = require(\"./Components/ContextMenu/Component.ContextMenu\");\nvar Component_Dialog_1 = require(\"./Components/Dialog/Component.Dialog\");\nvar Component_Group_1 = require(\"./Components/Group/Component.Group\");\nvar Component_Header_1 = require(\"./Components/Header/Component.Header\");\nvar Component_IconGrid_1 = require(\"./Components/IconGrid/Component.IconGrid\");\nvar Component_ImageViewer_1 = require(\"./Components/ImageViewer/Component.ImageViewer\");\nvar Component_Input_1 = require(\"./Components/Input/Component.Input\");\nvar Component_List_1 = require(\"./Components/List/Component.List\");\nvar Component_MenuBar_1 = require(\"./Components/MenuBar/Component.MenuBar\");\nvar Component_PaletteCheckbox_1 = require(\"./Components/PaletteCheckbox/Component.PaletteCheckbox\");\nvar Component_PaletteSearch_1 = require(\"./Components/PaletteSearch/Component.PaletteSearch\");\nvar Component_Resizer_1 = require(\"./Components/Resizer/Component.Resizer\");\nvar Component_Row_1 = require(\"./Components/Row/Component.Row\");\nvar Component_Select_1 = require(\"./Components/Select/Component.Select\");\nvar Component_Table_1 = require(\"./Components/Table/Component.Table\");\nvar Component_Text_1 = require(\"./Components/Text/Component.Text\");\nexports.MorphComponent = {\n Header: Component_Header_1.ComponentHeader,\n Text: Component_Text_1.ComponentText,\n Button: Component_Button_1.ComponentButton,\n Input: Component_Input_1.ComponentInput,\n Select: Component_Select_1.ComponentSelect,\n Group: Component_Group_1.ComponentGroup,\n List: Component_List_1.ComponentList,\n Cards: Component_Cards_1.ComponentCards,\n IconGrid: Component_IconGrid_1.ComponentIconGrid,\n Table: Component_Table_1.ComponentTable,\n Row: Component_Row_1.ComponentRow,\n Dialog: Component_Dialog_1.ComponentDialog,\n PaletteSearch: Component_PaletteSearch_1.ComponentPaletteSearch,\n PaletteCheckbox: Component_PaletteCheckbox_1.ComponentPaletteCheckbox,\n ImageViewer: Component_ImageViewer_1.ComponentImageViewer,\n MenuBar: Component_MenuBar_1.ComponentMenuBar,\n ContextMenu: Component_ContextMenu_1.ComponentContextMenu,\n Resizer: Component_Resizer_1.ComponentResizer,\n extend: function (name, component) {\n this[name] = component;\n },\n};\n//# sourceMappingURL=Morph.Components.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FeatureAlert = FeatureAlert;\nvar Index_1 = require(\"../../Index\");\nfunction FeatureAlert(options, callback) {\n return new Promise(function (resolve) {\n var _a;\n var dialog = new Index_1.MorphComponent.Dialog({\n title: (_a = options === null || options === void 0 ? void 0 : options.title) !== null && _a !== void 0 ? _a : 'Alert',\n width: 'small',\n height: 'auto',\n cancelButtonVisible: false,\n });\n dialog.content.appendChild((0, Index_1.ce)('div', 'mux_text', null, options.message));\n var res = function () {\n if (typeof callback == 'function')\n callback();\n resolve();\n };\n dialog.on('close', function () { return res(); });\n dialog.on('ok', function () { return res(); });\n });\n}\n//# sourceMappingURL=Feature.Alert.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FeatureConfirm = FeatureConfirm;\nvar Index_1 = require(\"../../Index\");\nfunction FeatureConfirm(options, callback) {\n return new Promise(function (resolve) {\n var _a;\n var dialog = new Index_1.MorphComponent.Dialog({\n title: (_a = options === null || options === void 0 ? void 0 : options.title) !== null && _a !== void 0 ? _a : 'Confirm',\n width: 'small',\n height: 'auto',\n });\n dialog.content.appendChild((0, Index_1.ce)('div', 'mux_text', null, options.message));\n var res = function (state) {\n if (typeof callback == 'function')\n callback(state);\n resolve(state);\n };\n dialog.on('close', function () { return res(null); });\n dialog.on('cancel', function () { return res(false); });\n dialog.on('ok', function () { return res(true); });\n });\n}\n//# sourceMappingURL=Feature.Confirm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FeatureLoader = FeatureLoader;\nvar Index_1 = require(\"../../Index\");\nfunction FeatureLoader(options) {\n var _a, _b;\n var active = (_a = options === null || options === void 0 ? void 0 : options.active) !== null && _a !== void 0 ? _a : false;\n var message = (_b = options === null || options === void 0 ? void 0 : options.message) !== null && _b !== void 0 ? _b : '';\n var progress = options === null || options === void 0 ? void 0 : options.progress;\n if (active == true)\n showLoader(message, progress);\n else\n removeExisting();\n}\nfunction showLoader(message, progress) {\n var loader = document.querySelector('.mux_loader');\n if (loader == null) {\n loader = (0, Index_1.ce)('div', 'mux_loader');\n loader.appendChild((0, Index_1.ce)('span', 'material-symbols-outlined', null, 'circle'));\n document.body.appendChild(loader);\n }\n var existingProgress = loader.querySelector('.mux_loader-progress');\n if (progress == null) {\n if (existingProgress != null)\n existingProgress.remove();\n }\n else {\n if (existingProgress != null) {\n existingProgress.style.setProperty('--progress', \"\".concat(progress, \"%\"));\n existingProgress.querySelector('.mux_loader-progress-label').innerText = \"\".concat(Math.round(progress), \"%\");\n }\n else {\n var progressBar = (0, Index_1.ce)('div', 'mux_loader-progress');\n progressBar.style.setProperty('--progress', \"\".concat(progress, \"%\"));\n var value = (0, Index_1.ce)('div', 'mux_loader-progress-value');\n value.appendChild((0, Index_1.ce)('div', 'mux_loader-progress-label', null, \"\".concat(Math.round(progress), \"%\")));\n progressBar.appendChild(value);\n loader.appendChild(progressBar);\n }\n }\n var existingText = loader.querySelector('.mux_loader-message');\n if (message.trim().length == 0) {\n if (existingText != null)\n existingText.remove();\n }\n else {\n if (existingText != null)\n existingText.innerText = message;\n else {\n if (loader.querySelector('.mux_loader-progress') != null)\n loader.insertBefore((0, Index_1.ce)('div', ['mux_text', 'mux_loader-message'], null, message), loader.querySelector('.mux_loader-progress'));\n else\n loader.appendChild((0, Index_1.ce)('div', ['mux_text', 'mux_loader-message'], null, message));\n }\n }\n}\nfunction removeExisting() {\n var existing = document.querySelector('.mux_loader');\n if (existing != null)\n existing.remove();\n}\n//# sourceMappingURL=Feature.Loader.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FeatureNotification = FeatureNotification;\nvar Index_1 = require(\"../../Index\");\nvar NotificationHandler = new (/** @class */ (function () {\n function class_1() {\n var _this = this;\n window.addEventListener('DOMContentLoaded', function () { return _this.prepare(); });\n }\n class_1.prototype.prepare = function () {\n this.container = (0, Index_1.ce)('div', 'mux_notifications');\n document.body.appendChild(this.container);\n };\n class_1.prototype.append = function (notification) {\n var _a, _b, _c;\n var element = (0, Index_1.ce)('div', 'mux_notification');\n element.classList.add('mux_notification-' + notification.level);\n var icon = (0, Index_1.ce)('span', ['material-symbols-outlined', 'mux_notification-icon'], null, {\n info: 'exclamation',\n warning: 'exclamation',\n error: 'close',\n success: 'check',\n }[(_a = notification.level) !== null && _a !== void 0 ? _a : 'info']);\n if (notification.level == 'info')\n icon.style.transform = 'rotate(180deg)';\n element.appendChild(icon);\n element.appendChild((0, Index_1.ce)('div', 'mux_text', null, notification.message));\n if ((notification === null || notification === void 0 ? void 0 : notification.action) != null) {\n var action = (0, Index_1.ce)('span', ['material-symbols-outlined', 'mux_notification-action'], null, notification.action.materialIcon);\n action.onclick = function () {\n notification.action.click();\n clearTimeout(hideTimeout);\n closeNotification();\n };\n element.appendChild(action);\n }\n if ((_b = notification === null || notification === void 0 ? void 0 : notification.closeable) !== null && _b !== void 0 ? _b : true) {\n element.onclick = function () {\n closeNotification();\n };\n }\n this.container.prepend(element);\n var openNotification = function () {\n element.style.opacity = '1';\n element.style.transform = 'translateX(0px)';\n };\n var closeNotification = function () {\n clearTimeout(hideTimeout);\n element.style.marginTop = \"-\".concat(element.clientHeight + 6, \"px\");\n element.style.opacity = '0';\n element.style.transform = 'translateX(100%)';\n element.style.pointerEvents = 'none';\n element.ontransitionend = function () { return element.remove(); };\n };\n setTimeout(function () { return openNotification(); }, 100);\n var hideTimeout = setTimeout(function () { return closeNotification(); }, ((_c = notification === null || notification === void 0 ? void 0 : notification.seconds) !== null && _c !== void 0 ? _c : 10) * 1000);\n return new NotificationInstance(closeNotification);\n };\n return class_1;\n}()))();\nvar NotificationInstance = /** @class */ (function () {\n function NotificationInstance(close) {\n this._close = close;\n }\n NotificationInstance.prototype.close = function () {\n this._close();\n };\n return NotificationInstance;\n}());\nfunction FeatureNotification(notification) {\n var _a;\n if (((_a = notification === null || notification === void 0 ? void 0 : notification.message) !== null && _a !== void 0 ? _a : '').trim().length == 0)\n return;\n return NotificationHandler.append(notification);\n}\n//# sourceMappingURL=Feature.Notification.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FeaturePrompt = FeaturePrompt;\nvar Index_1 = require(\"../../Index\");\nfunction FeaturePrompt(options, callback) {\n return new Promise(function (resolve) {\n var _a, _b, _c, _d;\n var dialog = new Index_1.MorphComponent.Dialog({\n title: (_a = options === null || options === void 0 ? void 0 : options.title) !== null && _a !== void 0 ? _a : 'Prompt',\n width: 'small',\n height: 'auto',\n });\n dialog.content.appendChild((0, Index_1.ce)('div', 'mux_text', null, options.message));\n var input = new Index_1.MorphComponent.Input({\n type: (_b = options.type) !== null && _b !== void 0 ? _b : 'text',\n value: (_c = options.default) !== null && _c !== void 0 ? _c : '',\n placeholder: (_d = options.placeholder) !== null && _d !== void 0 ? _d : '',\n border: 'always',\n });\n input.container.style.margin = 'var(--mux-edge-offset-tiny) 0px';\n input.container.onfocus = function () {\n errorMessage.style.height = '0px';\n };\n dialog.content.appendChild(input.container);\n var errorMessage = (0, Index_1.ce)('div', ['mux_text', 'mux_small'], null, 'Value can not be empty!');\n errorMessage.style.height = '0px';\n errorMessage.style.transitionDuration =\n 'var(--mux-transition-animation)';\n errorMessage.style.overflow = 'hidden';\n errorMessage.style.color = 'var(--mux-color-red)';\n dialog.content.appendChild(errorMessage);\n var res = function (value) {\n if (typeof callback == 'function')\n callback(value);\n resolve(value);\n };\n dialog.on('close', function () { return res(null); });\n dialog.on('cancel', function () { return res(null); });\n dialog.on('ok', function (closeEvent) {\n if (!options.canBeEmpty && input.getValue().trim() == '') {\n errorMessage.style.height = '14px';\n return closeEvent.preventClose();\n }\n res(input.getValue());\n });\n input.container.focus();\n });\n}\n//# sourceMappingURL=Feature.Prompt.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MorphFeature = void 0;\nvar Feature_Alert_1 = require(\"./Features/Alert/Feature.Alert\");\nvar Feature_Confirm_1 = require(\"./Features/Confirm/Feature.Confirm\");\nvar Feature_Loader_1 = require(\"./Features/Loader/Feature.Loader\");\nvar Feature_Notification_1 = require(\"./Features/Notification/Feature.Notification\");\nvar Feature_Prompt_1 = require(\"./Features/Prompt/Feature.Prompt\");\nexports.MorphFeature = {\n Confirm: Feature_Confirm_1.FeatureConfirm,\n Alert: Feature_Alert_1.FeatureAlert,\n Prompt: Feature_Prompt_1.FeaturePrompt,\n Notification: Feature_Notification_1.FeatureNotification,\n Loader: Feature_Loader_1.FeatureLoader,\n extend: function (name, component) {\n this[name] = component;\n },\n};\n//# sourceMappingURL=Morph.Features.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.clone = clone;\nfunction clone(object) {\n if (typeof object !== 'object')\n return object;\n return JSON.parse(JSON.stringify(object !== null && object !== void 0 ? object : {}));\n}\n//# sourceMappingURL=clone.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ce = exports.clone = void 0;\nvar clone_1 = require(\"./Utils/clone\");\nObject.defineProperty(exports, \"clone\", { enumerable: true, get: function () { return clone_1.clone; } });\nvar CE_1 = require(\"./Utils/CE\");\nObject.defineProperty(exports, \"ce\", { enumerable: true, get: function () { return CE_1.ce; } });\n//# sourceMappingURL=Morph.Utils.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MUXComponent = void 0;\nvar version = require('../package.json').version;\nif (window._MorphUXInitialized === undefined) {\n console.log('MorphUX Loaded');\n console.log(\"Version \".concat(version));\n window._MorphUXInitialized = true;\n}\n__exportStar(require(\"./Morph.Components\"), exports);\n__exportStar(require(\"./Morph.Features\"), exports);\n__exportStar(require(\"./Morph.Keys\"), exports);\n__exportStar(require(\"./Morph.Utils\"), exports);\nvar baseComponent_1 = require(\"./Components/baseComponent\");\nObject.defineProperty(exports, \"MUXComponent\", { enumerable: true, get: function () { return baseComponent_1.MUXComponent; } });\n//# sourceMappingURL=Index.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MenuBar = void 0;\nvar morphux_1 = require(\"morphux\");\nvar Component_MenuBar_1 = require(\"morphux/dist/Components/MenuBar/Component.MenuBar\");\nvar MenuBar = /** @class */ (function () {\n function MenuBar(main) {\n var _this = this;\n this.container = document.querySelector('.ntsh_menubar');\n this._Main = main;\n this.build();\n setTimeout(function () {\n if ((localStorage === null || localStorage === void 0 ? void 0 : localStorage.getItem('serviceMode')) === 'true')\n _this.toggleServiceMode(true, true);\n }, 10);\n }\n MenuBar.prototype.build = function () {\n var _this = this;\n this.menubar = new Component_MenuBar_1.ComponentMenuBar({\n left: [\n {\n type: 'image',\n url: '/img/morphix_logo_white.png',\n },\n {\n type: 'normal',\n text: 'Dashboard',\n materialIcon: 'dashboard',\n uniqueIdentifier: 'dashboard',\n selected: true,\n click: function () { return _this._Main.TabController.showTab('dashboard'); },\n },\n {\n type: 'normal',\n text: 'Calibration',\n uniqueIdentifier: 'calibration',\n materialIcon: 'crop_free',\n click: function () {\n return _this._Main.TabController.showTab('calibration');\n },\n },\n {\n type: 'normal',\n text: 'Unity Logs',\n uniqueIdentifier: 'unitylogs',\n materialIcon: 'deployed_code',\n click: function () { return _this._Main.TabController.showTab('unitylogs'); },\n },\n {\n type: 'normal',\n text: 'Camera Logs',\n uniqueIdentifier: 'cameralogs',\n materialIcon: 'photo_camera',\n click: function () { return _this._Main.TabController.showTab('cameralogs'); },\n },\n ],\n right: [\n {\n type: 'normal',\n text: document.body.classList.contains('ntsh_service')\n ? 'Exit Service'\n : 'Service Mode',\n uniqueIdentifier: 'serviceMode',\n materialIcon: document.body.classList.contains('ntsh_service')\n ? 'logout'\n : 'engineering',\n click: function () { return __awaiter(_this, void 0, void 0, function () {\n var mobileMenu;\n return __generator(this, function (_a) {\n mobileMenu = document.querySelector('.mux_mobilemenu');\n mobileMenu === null || mobileMenu === void 0 ? void 0 : mobileMenu.click();\n this.toggleServiceMode();\n return [2 /*return*/];\n });\n }); },\n },\n ],\n });\n this.container.innerHTML = '';\n this.container.appendChild(this.menubar.container);\n };\n MenuBar.prototype.toggleServiceMode = function (mode, skipPin) {\n return __awaiter(this, void 0, void 0, function () {\n var newMode, servicePin;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n newMode = mode !== null && mode !== void 0 ? mode : !document.body.classList.contains('ntsh_service');\n if (!newMode) return [3 /*break*/, 3];\n if (!(skipPin !== true)) return [3 /*break*/, 2];\n return [4 /*yield*/, morphux_1.MorphFeature.Prompt({\n title: 'Service Mode',\n message: 'Enter the service PIN:',\n type: 'number',\n canBeEmpty: false,\n placeholder: '****',\n })];\n case 1:\n servicePin = _a.sent();\n if (servicePin !== '4252') {\n morphux_1.MorphFeature.Alert({\n title: 'Error',\n message: 'Incorrect PIN provided.',\n });\n return [2 /*return*/, false];\n }\n _a.label = 2;\n case 2:\n document.body.classList.add('ntsh_service');\n localStorage.setItem('serviceMode', 'true');\n morphux_1.MorphFeature.Notification({\n level: 'success',\n message: 'Service mode activated.',\n });\n return [3 /*break*/, 4];\n case 3:\n document.body.classList.remove('ntsh_service');\n this._Main.TabController.showTab('dashboard');\n localStorage.setItem('serviceMode', 'false');\n morphux_1.MorphFeature.Notification({\n level: 'success',\n message: 'Service mode deactivated.',\n });\n _a.label = 4;\n case 4:\n this.build();\n return [2 /*return*/, true];\n }\n });\n });\n };\n return MenuBar;\n}());\nexports.MenuBar = MenuBar;\n//# sourceMappingURL=menuBar.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TabController = void 0;\nvar morphux_1 = require(\"morphux\");\nvar TabController = /** @class */ (function () {\n function TabController(main) {\n this.container = document.querySelector('.ntsh_tabs');\n this.tabListeners = new Map();\n this._Main = main;\n this.registerNavigationListener();\n }\n TabController.prototype.registerListener = function (tabId, callback) {\n if (this.tabListeners.has(tabId))\n throw new Error(\"Listener for tab id \".concat(tabId, \" has already been registered!\"));\n this.tabListeners.set(tabId, callback);\n callback(this.currentTabId == tabId);\n };\n TabController.prototype.showTab = function (tabId) {\n return __awaiter(this, void 0, void 0, function () {\n var confirmed, succeed, tabName;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (this.currentTabId == tabId)\n return [2 /*return*/];\n if (!(tabId !== 'dashboard' &&\n !document.body.classList.contains('ntsh_service'))) return [3 /*break*/, 3];\n return [4 /*yield*/, morphux_1.MorphFeature.Confirm({\n title: 'Service Mode Required',\n message: \"You need to be in service mode to access tab \".concat(tabId, \", switch to Service Mode now?\"),\n })];\n case 1:\n confirmed = _a.sent();\n if (!confirmed)\n return [2 /*return*/, this.showTab('dashboard')];\n return [4 /*yield*/, this._Main.MenuBar.toggleServiceMode(true)];\n case 2:\n succeed = _a.sent();\n if (!succeed)\n return [2 /*return*/, this.showTab('dashboard')];\n _a.label = 3;\n case 3:\n this._Main.MenuBar.menubar.setSelected(tabId);\n if (this.tabListeners.has(this.currentTabId))\n this.tabListeners.get(this.currentTabId)(false);\n if (this.tabListeners.has(tabId))\n this.tabListeners.get(tabId)(true);\n this.currentTabId = tabId;\n this.container\n .querySelectorAll('.ntsh_tab')\n .forEach(function (tab) { return tab.classList.remove('ntsh_tab-visible'); });\n this.container\n .querySelector(\".ntsh_tab[tabid=\\\"\".concat(tabId, \"\\\"]\"))\n .classList.add('ntsh_tab-visible');\n window.history.pushState({ tab: tabId }, '', \"/\".concat(tabId).concat(window.location.search));\n tabName = {\n dashboard: 'Dashboard',\n calibration: 'Calibration',\n cameralogs: 'Camera Logs',\n unitylogs: 'Unity Logs',\n }[tabId];\n document.title = \"NTSH Control - \".concat(tabName);\n return [2 /*return*/];\n }\n });\n });\n };\n TabController.prototype.registerNavigationListener = function () {\n var _this = this;\n window.addEventListener('popstate', function (event) {\n var state = event.state;\n if (state && state.tab)\n _this.showTab(state.tab);\n });\n var startTab = window.location.pathname\n .replace('/', '')\n .split('/')\n .shift();\n this.showTab(startTab.length > 0 ? startTab : 'dashboard');\n };\n return TabController;\n}());\nexports.TabController = TabController;\n//# sourceMappingURL=tabController.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createProgress = exports.setProgressState = exports.setStatusState = exports.lerp = void 0;\nexports.capitalizeFirstLetter = capitalizeFirstLetter;\nexports.formatUptime = formatUptime;\nexports.delay = delay;\nvar morphux_1 = require(\"morphux\");\n/**\n * A linear interpolation helper function.\n * @param a The start value.\n * @param b The end value.\n * @param t The interpolation factor (0 to 1).\n * @returns The interpolated value.\n */\nvar lerp = function (a, b, t) {\n return a + (b - a) * t;\n};\nexports.lerp = lerp;\nvar setStatusState = function (statusElement, state) {\n statusElement.classList.remove('ntsh_status-green', 'ntsh_status-yellow', 'ntsh_status-red', 'ntsh_status-gray');\n statusElement.classList.add(\"ntsh_status-\".concat(state));\n};\nexports.setStatusState = setStatusState;\nvar setProgressState = function (progressElement, percentage) {\n var value = progressElement.querySelector('.ntsh_progress-value');\n value.style.width = \"\".concat(percentage * 100, \"%\");\n var label = progressElement.querySelector('.ntsh_progress-label');\n label.innerText = \"\".concat(Math.round(percentage * 100), \"%\");\n};\nexports.setProgressState = setProgressState;\nvar createProgress = function (value) {\n var progress = (0, morphux_1.ce)('div', 'ntsh_progress');\n progress.appendChild((0, morphux_1.ce)('div', 'ntsh_progress-value'));\n progress.appendChild((0, morphux_1.ce)('div', 'ntsh_progress-label'));\n (0, exports.setProgressState)(progress, value);\n return progress;\n};\nexports.createProgress = createProgress;\nfunction capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\nfunction formatUptime(seconds) {\n if (seconds < 0)\n return '';\n var days = Math.floor(seconds / 86400);\n seconds %= 86400;\n var hours = Math.floor(seconds / 3600);\n seconds %= 3600;\n var minutes = Math.floor(seconds / 60);\n seconds = Math.floor(seconds % 60);\n var parts = [];\n if (days > 0)\n parts.push(\"\".concat(days, \"d\"));\n parts.push(\"\".concat(hours.toString().padStart(2, '0'), \":\").concat(minutes\n .toString()\n .padStart(2, '0'), \":\").concat(seconds.toString().padStart(2, '0')));\n return parts.join(' ');\n}\nfunction delay(duration) {\n return new Promise(function (resolve) { return setTimeout(resolve, duration); });\n}\n//# sourceMappingURL=utils.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DashboardCameraRunner = void 0;\nvar morphux_1 = require(\"morphux\");\nvar utils_1 = require(\"./utils\");\nvar CELCIUS = 'ºC';\nvar DashboardCameraRunner = /** @class */ (function () {\n function DashboardCameraRunner(Main) {\n this.container = document.querySelector('.ntsh_dashboard-camerarunner');\n this.connectionStatus = this.container.querySelector('.ntsh_dashboard-camerarunner-connectionstatus');\n this.connectionInfo = this.container.querySelector('.ntsh_dashboard-camerarunner-connectioninfo');\n this.rebootButton = this.container.querySelector('.ntsh_dashboard-camerarunner-reboot');\n this.processStatus = this.container.querySelector('.ntsh_dashboard-camerarunner-processstatus');\n this.processInfo = this.container.querySelector('.ntsh_dashboard-camerarunner-processinfo');\n this.restartButton = this.container.querySelector('.ntsh_dashboard-camerarunner-restart');\n this.uptimeInfo = this.container.querySelector('.ntsh_dashboard-camerarunner-uptime');\n this.errorContainer = this.container.querySelector('.ntsh_dashboard-camerarunner-error');\n this.errorText = this.container.querySelector('.ntsh_dashboard-camerarunner-errortext');\n this._Main = Main;\n this.registerListeners();\n }\n DashboardCameraRunner.prototype.updateState = function (state) {\n var _a, _b, _c, _d, _e;\n // ----------- Connection -----------\n (0, utils_1.setStatusState)(this.connectionStatus, {\n CONNECTING: 'yellow',\n CONNECTED: 'green',\n DISCONNECTED: 'red',\n FAILED: 'red',\n }[state.state]);\n this.connectionInfo.innerText = (_a = state.message) !== null && _a !== void 0 ? _a : '';\n // ----------- Process -----------\n if (state.state != 'CONNECTED') {\n state.processStatus.state = 'STOPPED';\n state.processStatus.message = 'Not connected';\n state.processStatus.startTime = -1;\n this.restartButton.style.display = 'none';\n this.rebootButton.style.display = 'none';\n }\n else {\n this.rebootButton.style.display = 'flex';\n if (state.processStatus.state == 'RUNNING')\n this.restartButton.style.display = 'flex';\n else\n this.restartButton.style.display = 'none';\n }\n (0, utils_1.setStatusState)(this.processStatus, {\n RUNNING: 'green',\n STOPPED: 'gray',\n STARTING: 'yellow',\n PROBLEM: 'red',\n }[state.processStatus.state]);\n this.processInfo.innerText = (_b = state.processStatus.message) !== null && _b !== void 0 ? _b : '';\n // ----------- Uptime -----------\n var uptimeSeconds = state.processStatus.startTime == -1\n ? -1\n : (Date.now() - state.processStatus.startTime) / 1000;\n this.uptimeInfo.innerText = (0, utils_1.formatUptime)(uptimeSeconds);\n // ----------- Error -----------\n var errors = [];\n if (((_c = state === null || state === void 0 ? void 0 : state.error) !== null && _c !== void 0 ? _c : '').trim().length > 0)\n errors.push(state.error);\n if (((_e = (_d = state === null || state === void 0 ? void 0 : state.processStatus) === null || _d === void 0 ? void 0 : _d.error) !== null && _e !== void 0 ? _e : '').trim().length > 0)\n errors.push(state.processStatus.error);\n if (errors.length > 0) {\n this.errorText.innerText = errors.join('\\n');\n this.errorContainer.style.display = 'block';\n }\n else {\n this.errorContainer.style.display = 'none';\n this.errorText.innerText = '';\n }\n this._Main.Logs.setCameraLogs(state.processStatus.output.current);\n };\n DashboardCameraRunner.prototype.registerListeners = function () {\n var _this = this;\n this._Main.socket.on('cameraRunnerState', function (state) {\n _this.updateState(state);\n });\n this.restartButton.addEventListener('click', function () { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.executeCommand('restart', 'Are you sure you want to restart the Camera Runner process?');\n return [2 /*return*/];\n });\n }); });\n this.rebootButton.addEventListener('click', function () { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.executeCommand('reboot', 'Are you sure you want to reboot the Camera Runner machine?');\n return [2 /*return*/];\n });\n }); });\n };\n DashboardCameraRunner.prototype.executeCommand = function (command, message) {\n return __awaiter(this, void 0, void 0, function () {\n var confirmed;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, morphux_1.MorphFeature.Confirm({\n title: 'Are you sure?',\n message: message,\n })];\n case 1:\n confirmed = _a.sent();\n if (!confirmed)\n return [2 /*return*/];\n morphux_1.MorphFeature.Loader({\n active: true,\n message: \"Requesting Camera Runner \".concat(command, \"...\"),\n });\n this._Main.socket.emit('cameraRunner', command, function (response) {\n morphux_1.MorphFeature.Loader({ active: false });\n if (!response.succeed)\n return morphux_1.MorphFeature.Alert({\n title: 'Error',\n message: response.message,\n });\n morphux_1.MorphFeature.Notification({\n level: 'success',\n message: \"Camera Runner is \".concat(command, \"ing...\"),\n });\n });\n return [2 /*return*/];\n }\n });\n });\n };\n return DashboardCameraRunner;\n}());\nexports.DashboardCameraRunner = DashboardCameraRunner;\n//# sourceMappingURL=dashboard.camerarunner.js.map","\"use strict\";\nvar __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\nvar PacketKind;\n(function (PacketKind) {\n PacketKind[PacketKind[\"EOS\"] = 0] = \"EOS\";\n PacketKind[PacketKind[\"Text\"] = 1] = \"Text\";\n PacketKind[PacketKind[\"Incomplete\"] = 2] = \"Incomplete\";\n PacketKind[PacketKind[\"ESC\"] = 3] = \"ESC\";\n PacketKind[PacketKind[\"Unknown\"] = 4] = \"Unknown\";\n PacketKind[PacketKind[\"SGR\"] = 5] = \"SGR\";\n PacketKind[PacketKind[\"OSCURL\"] = 6] = \"OSCURL\";\n})(PacketKind || (PacketKind = {}));\nexport class AnsiUp {\n constructor() {\n this.VERSION = \"6.0.6\";\n this.setup_palettes();\n this._use_classes = false;\n this.bold = false;\n this.faint = false;\n this.italic = false;\n this.underline = false;\n this.fg = this.bg = null;\n this._buffer = '';\n this._url_allowlist = { 'http': 1, 'https': 1 };\n this._escape_html = true;\n this.boldStyle = 'font-weight:bold';\n this.faintStyle = 'opacity:0.7';\n this.italicStyle = 'font-style:italic';\n this.underlineStyle = 'text-decoration:underline';\n }\n set use_classes(arg) {\n this._use_classes = arg;\n }\n get use_classes() {\n return this._use_classes;\n }\n set url_allowlist(arg) {\n this._url_allowlist = arg;\n }\n get url_allowlist() {\n return this._url_allowlist;\n }\n set escape_html(arg) {\n this._escape_html = arg;\n }\n get escape_html() {\n return this._escape_html;\n }\n set boldStyle(arg) { this._boldStyle = arg; }\n get boldStyle() { return this._boldStyle; }\n set faintStyle(arg) { this._faintStyle = arg; }\n get faintStyle() { return this._faintStyle; }\n set italicStyle(arg) { this._italicStyle = arg; }\n get italicStyle() { return this._italicStyle; }\n set underlineStyle(arg) { this._underlineStyle = arg; }\n get underlineStyle() { return this._underlineStyle; }\n setup_palettes() {\n this.ansi_colors =\n [\n [\n { rgb: [0, 0, 0], class_name: \"ansi-black\" },\n { rgb: [187, 0, 0], class_name: \"ansi-red\" },\n { rgb: [0, 187, 0], class_name: \"ansi-green\" },\n { rgb: [187, 187, 0], class_name: \"ansi-yellow\" },\n { rgb: [0, 0, 187], class_name: \"ansi-blue\" },\n { rgb: [187, 0, 187], class_name: \"ansi-magenta\" },\n { rgb: [0, 187, 187], class_name: \"ansi-cyan\" },\n { rgb: [255, 255, 255], class_name: \"ansi-white\" }\n ],\n [\n { rgb: [85, 85, 85], class_name: \"ansi-bright-black\" },\n { rgb: [255, 85, 85], class_name: \"ansi-bright-red\" },\n { rgb: [0, 255, 0], class_name: \"ansi-bright-green\" },\n { rgb: [255, 255, 85], class_name: \"ansi-bright-yellow\" },\n { rgb: [85, 85, 255], class_name: \"ansi-bright-blue\" },\n { rgb: [255, 85, 255], class_name: \"ansi-bright-magenta\" },\n { rgb: [85, 255, 255], class_name: \"ansi-bright-cyan\" },\n { rgb: [255, 255, 255], class_name: \"ansi-bright-white\" }\n ]\n ];\n this.palette_256 = [];\n this.ansi_colors.forEach(palette => {\n palette.forEach(rec => {\n this.palette_256.push(rec);\n });\n });\n let levels = [0, 95, 135, 175, 215, 255];\n for (let r = 0; r < 6; ++r) {\n for (let g = 0; g < 6; ++g) {\n for (let b = 0; b < 6; ++b) {\n let col = { rgb: [levels[r], levels[g], levels[b]], class_name: 'truecolor' };\n this.palette_256.push(col);\n }\n }\n }\n let grey_level = 8;\n for (let i = 0; i < 24; ++i, grey_level += 10) {\n let gry = { rgb: [grey_level, grey_level, grey_level], class_name: 'truecolor' };\n this.palette_256.push(gry);\n }\n }\n escape_txt_for_html(txt) {\n if (!this._escape_html)\n return txt;\n return txt.replace(/[&<>\"']/gm, (str) => {\n if (str === \"&\")\n return \"&\";\n if (str === \"<\")\n return \"<\";\n if (str === \">\")\n return \">\";\n if (str === \"\\\"\")\n return \""\";\n if (str === \"'\")\n return \"'\";\n });\n }\n append_buffer(txt) {\n var str = this._buffer + txt;\n this._buffer = str;\n }\n get_next_packet() {\n var pkt = {\n kind: PacketKind.EOS,\n text: '',\n url: ''\n };\n var len = this._buffer.length;\n if (len == 0)\n return pkt;\n var pos = this._buffer.indexOf(\"\\x1B\");\n if (pos == -1) {\n pkt.kind = PacketKind.Text;\n pkt.text = this._buffer;\n this._buffer = '';\n return pkt;\n }\n if (pos > 0) {\n pkt.kind = PacketKind.Text;\n pkt.text = this._buffer.slice(0, pos);\n this._buffer = this._buffer.slice(pos);\n return pkt;\n }\n if (pos == 0) {\n if (len < 3) {\n pkt.kind = PacketKind.Incomplete;\n return pkt;\n }\n var next_char = this._buffer.charAt(1);\n if ((next_char != '[') && (next_char != ']') && (next_char != '(')) {\n pkt.kind = PacketKind.ESC;\n pkt.text = this._buffer.slice(0, 1);\n this._buffer = this._buffer.slice(1);\n return pkt;\n }\n if (next_char == '[') {\n if (!this._csi_regex) {\n this._csi_regex = rgx(templateObject_1 || (templateObject_1 = __makeTemplateObject([\"\\n ^ # beginning of line\\n #\\n # First attempt\\n (?: # legal sequence\\n \\u001B[ # CSI\\n ([<-?]?) # private-mode char\\n ([d;]*) # any digits or semicolons\\n ([ -/]? # an intermediate modifier\\n [@-~]) # the command\\n )\\n | # alternate (second attempt)\\n (?: # illegal sequence\\n \\u001B[ # CSI\\n [ -~]* # anything legal\\n ([\\0-\\u001F:]) # anything illegal\\n )\\n \"], [\"\\n ^ # beginning of line\\n #\\n # First attempt\\n (?: # legal sequence\\n \\\\x1b\\\\[ # CSI\\n ([\\\\x3c-\\\\x3f]?) # private-mode char\\n ([\\\\d;]*) # any digits or semicolons\\n ([\\\\x20-\\\\x2f]? # an intermediate modifier\\n [\\\\x40-\\\\x7e]) # the command\\n )\\n | # alternate (second attempt)\\n (?: # illegal sequence\\n \\\\x1b\\\\[ # CSI\\n [\\\\x20-\\\\x7e]* # anything legal\\n ([\\\\x00-\\\\x1f:]) # anything illegal\\n )\\n \"])));\n }\n let match = this._buffer.match(this._csi_regex);\n if (match === null) {\n pkt.kind = PacketKind.Incomplete;\n return pkt;\n }\n if (match[4]) {\n pkt.kind = PacketKind.ESC;\n pkt.text = this._buffer.slice(0, 1);\n this._buffer = this._buffer.slice(1);\n return pkt;\n }\n if ((match[1] != '') || (match[3] != 'm'))\n pkt.kind = PacketKind.Unknown;\n else\n pkt.kind = PacketKind.SGR;\n pkt.text = match[2];\n var rpos = match[0].length;\n this._buffer = this._buffer.slice(rpos);\n return pkt;\n }\n else if (next_char == ']') {\n if (len < 4) {\n pkt.kind = PacketKind.Incomplete;\n return pkt;\n }\n if ((this._buffer.charAt(2) != '8')\n || (this._buffer.charAt(3) != ';')) {\n pkt.kind = PacketKind.ESC;\n pkt.text = this._buffer.slice(0, 1);\n this._buffer = this._buffer.slice(1);\n return pkt;\n }\n if (!this._osc_st) {\n this._osc_st = rgxG(templateObject_2 || (templateObject_2 = __makeTemplateObject([\"\\n (?: # legal sequence\\n (\\u001B\\\\) # ESC | # alternate\\n (\\u0007) # BEL (what xterm did)\\n )\\n | # alternate (second attempt)\\n ( # illegal sequence\\n [\\0-\\u0006] # anything illegal\\n | # alternate\\n [\\b-\\u001A] # anything illegal\\n | # alternate\\n [\\u001C-\\u001F] # anything illegal\\n )\\n \"], [\"\\n (?: # legal sequence\\n (\\\\x1b\\\\\\\\) # ESC \\\\\\n | # alternate\\n (\\\\x07) # BEL (what xterm did)\\n )\\n | # alternate (second attempt)\\n ( # illegal sequence\\n [\\\\x00-\\\\x06] # anything illegal\\n | # alternate\\n [\\\\x08-\\\\x1a] # anything illegal\\n | # alternate\\n [\\\\x1c-\\\\x1f] # anything illegal\\n )\\n \"])));\n }\n this._osc_st.lastIndex = 0;\n {\n let match = this._osc_st.exec(this._buffer);\n if (match === null) {\n pkt.kind = PacketKind.Incomplete;\n return pkt;\n }\n if (match[3]) {\n pkt.kind = PacketKind.ESC;\n pkt.text = this._buffer.slice(0, 1);\n this._buffer = this._buffer.slice(1);\n return pkt;\n }\n }\n {\n let match = this._osc_st.exec(this._buffer);\n if (match === null) {\n pkt.kind = PacketKind.Incomplete;\n return pkt;\n }\n if (match[3]) {\n pkt.kind = PacketKind.ESC;\n pkt.text = this._buffer.slice(0, 1);\n this._buffer = this._buffer.slice(1);\n return pkt;\n }\n }\n if (!this._osc_regex) {\n this._osc_regex = rgx(templateObject_3 || (templateObject_3 = __makeTemplateObject([\"\\n ^ # beginning of line\\n #\\n \\u001B]8; # OSC Hyperlink\\n [ -:<-~]* # params (excluding ;)\\n ; # end of params\\n ([!-~]{0,512}) # URL capture\\n (?: # ST\\n (?:\\u001B\\\\) # ESC | # alternate\\n (?:\\u0007) # BEL (what xterm did)\\n )\\n ([ -~]+) # TEXT capture\\n \\u001B]8;; # OSC Hyperlink End\\n (?: # ST\\n (?:\\u001B\\\\) # ESC | # alternate\\n (?:\\u0007) # BEL (what xterm did)\\n )\\n \"], [\"\\n ^ # beginning of line\\n #\\n \\\\x1b\\\\]8; # OSC Hyperlink\\n [\\\\x20-\\\\x3a\\\\x3c-\\\\x7e]* # params (excluding ;)\\n ; # end of params\\n ([\\\\x21-\\\\x7e]{0,512}) # URL capture\\n (?: # ST\\n (?:\\\\x1b\\\\\\\\) # ESC \\\\\\n | # alternate\\n (?:\\\\x07) # BEL (what xterm did)\\n )\\n ([\\\\x20-\\\\x7e]+) # TEXT capture\\n \\\\x1b\\\\]8;; # OSC Hyperlink End\\n (?: # ST\\n (?:\\\\x1b\\\\\\\\) # ESC \\\\\\n | # alternate\\n (?:\\\\x07) # BEL (what xterm did)\\n )\\n \"])));\n }\n let match = this._buffer.match(this._osc_regex);\n if (match === null) {\n pkt.kind = PacketKind.ESC;\n pkt.text = this._buffer.slice(0, 1);\n this._buffer = this._buffer.slice(1);\n return pkt;\n }\n pkt.kind = PacketKind.OSCURL;\n pkt.url = match[1];\n pkt.text = match[2];\n var rpos = match[0].length;\n this._buffer = this._buffer.slice(rpos);\n return pkt;\n }\n else if (next_char == '(') {\n pkt.kind = PacketKind.Unknown;\n this._buffer = this._buffer.slice(3);\n return pkt;\n }\n }\n }\n ansi_to_html(txt) {\n this.append_buffer(txt);\n var blocks = [];\n while (true) {\n var packet = this.get_next_packet();\n if ((packet.kind == PacketKind.EOS)\n || (packet.kind == PacketKind.Incomplete))\n break;\n if ((packet.kind == PacketKind.ESC)\n || (packet.kind == PacketKind.Unknown))\n continue;\n if (packet.kind == PacketKind.Text)\n blocks.push(this.transform_to_html(this.with_state(packet)));\n else if (packet.kind == PacketKind.SGR)\n this.process_ansi(packet);\n else if (packet.kind == PacketKind.OSCURL)\n blocks.push(this.process_hyperlink(packet));\n }\n return blocks.join(\"\");\n }\n with_state(pkt) {\n return { bold: this.bold, faint: this.faint, italic: this.italic, underline: this.underline, fg: this.fg, bg: this.bg, text: pkt.text };\n }\n process_ansi(pkt) {\n let sgr_cmds = pkt.text.split(';');\n while (sgr_cmds.length > 0) {\n let sgr_cmd_str = sgr_cmds.shift();\n let num = parseInt(sgr_cmd_str, 10);\n if (isNaN(num) || num === 0) {\n this.fg = null;\n this.bg = null;\n this.bold = false;\n this.faint = false;\n this.italic = false;\n this.underline = false;\n }\n else if (num === 1) {\n this.bold = true;\n }\n else if (num === 2) {\n this.faint = true;\n }\n else if (num === 3) {\n this.italic = true;\n }\n else if (num === 4) {\n this.underline = true;\n }\n else if (num === 21) {\n this.bold = false;\n }\n else if (num === 22) {\n this.faint = false;\n this.bold = false;\n }\n else if (num === 23) {\n this.italic = false;\n }\n else if (num === 24) {\n this.underline = false;\n }\n else if (num === 39) {\n this.fg = null;\n }\n else if (num === 49) {\n this.bg = null;\n }\n else if ((num >= 30) && (num < 38)) {\n this.fg = this.ansi_colors[0][(num - 30)];\n }\n else if ((num >= 40) && (num < 48)) {\n this.bg = this.ansi_colors[0][(num - 40)];\n }\n else if ((num >= 90) && (num < 98)) {\n this.fg = this.ansi_colors[1][(num - 90)];\n }\n else if ((num >= 100) && (num < 108)) {\n this.bg = this.ansi_colors[1][(num - 100)];\n }\n else if (num === 38 || num === 48) {\n if (sgr_cmds.length > 0) {\n let is_foreground = (num === 38);\n let mode_cmd = sgr_cmds.shift();\n if (mode_cmd === '5' && sgr_cmds.length > 0) {\n let palette_index = parseInt(sgr_cmds.shift(), 10);\n if (palette_index >= 0 && palette_index <= 255) {\n if (is_foreground)\n this.fg = this.palette_256[palette_index];\n else\n this.bg = this.palette_256[palette_index];\n }\n }\n if (mode_cmd === '2' && sgr_cmds.length > 2) {\n let r = parseInt(sgr_cmds.shift(), 10);\n let g = parseInt(sgr_cmds.shift(), 10);\n let b = parseInt(sgr_cmds.shift(), 10);\n if ((r >= 0 && r <= 255) && (g >= 0 && g <= 255) && (b >= 0 && b <= 255)) {\n let c = { rgb: [r, g, b], class_name: 'truecolor' };\n if (is_foreground)\n this.fg = c;\n else\n this.bg = c;\n }\n }\n }\n }\n }\n }\n transform_to_html(fragment) {\n let txt = fragment.text;\n if (txt.length === 0)\n return txt;\n txt = this.escape_txt_for_html(txt);\n if (!fragment.bold && !fragment.italic && !fragment.faint && !fragment.underline && fragment.fg === null && fragment.bg === null)\n return txt;\n let styles = [];\n let classes = [];\n let fg = fragment.fg;\n let bg = fragment.bg;\n if (fragment.bold)\n styles.push(this._boldStyle);\n if (fragment.faint)\n styles.push(this._faintStyle);\n if (fragment.italic)\n styles.push(this._italicStyle);\n if (fragment.underline)\n styles.push(this._underlineStyle);\n if (!this._use_classes) {\n if (fg)\n styles.push(`color:rgb(${fg.rgb.join(',')})`);\n if (bg)\n styles.push(`background-color:rgb(${bg.rgb})`);\n }\n else {\n if (fg) {\n if (fg.class_name !== 'truecolor') {\n classes.push(`${fg.class_name}-fg`);\n }\n else {\n styles.push(`color:rgb(${fg.rgb.join(',')})`);\n }\n }\n if (bg) {\n if (bg.class_name !== 'truecolor') {\n classes.push(`${bg.class_name}-bg`);\n }\n else {\n styles.push(`background-color:rgb(${bg.rgb.join(',')})`);\n }\n }\n }\n let class_string = '';\n let style_string = '';\n if (classes.length)\n class_string = ` class=\"${classes.join(' ')}\"`;\n if (styles.length)\n style_string = ` style=\"${styles.join(';')}\"`;\n return `${txt}`;\n }\n ;\n process_hyperlink(pkt) {\n let parts = pkt.url.split(':');\n if (parts.length < 1)\n return '';\n if (!this._url_allowlist[parts[0]])\n return '';\n let result = `${this.escape_txt_for_html(pkt.text)}`;\n return result;\n }\n}\nfunction rgx(tmplObj, ...subst) {\n let regexText = tmplObj.raw[0];\n let wsrgx = /^\\s+|\\s+\\n|\\s*#[\\s\\S]*?\\n|\\n/gm;\n let txt2 = regexText.replace(wsrgx, '');\n return new RegExp(txt2);\n}\nfunction rgxG(tmplObj, ...subst) {\n let regexText = tmplObj.raw[0];\n let wsrgx = /^\\s+|\\s+\\n|\\s*#[\\s\\S]*?\\n|\\n/gm;\n let txt2 = regexText.replace(wsrgx, '');\n return new RegExp(txt2, 'g');\n}\nvar templateObject_1, templateObject_2, templateObject_3;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LogsHandler = void 0;\nvar morphux_1 = require(\"morphux\");\nvar ansi_up_1 = require(\"ansi_up\");\nvar LogsHandler = /** @class */ (function () {\n function LogsHandler(Main) {\n this.ansiUp = new ansi_up_1.AnsiUp();\n this.cameraLogsContainer = document.querySelector('.ntsh_tab[tabid=\"cameralogs\"] .ntsh_logs');\n this.unityLogsContainer = document.querySelector('.ntsh_tab[tabid=\"unitylogs\"] .ntsh_logs');\n this.firstTime = new Set();\n this._Main = Main;\n this.registerListeners();\n }\n LogsHandler.prototype.setCameraLogs = function (logs) {\n this.applyLogs(this.cameraLogsContainer, logs);\n };\n LogsHandler.prototype.setUnityLogs = function (logs) {\n this.applyLogs(this.unityLogsContainer, logs);\n };\n LogsHandler.prototype.applyLogs = function (container, logs) {\n return __awaiter(this, void 0, void 0, function () {\n var logCount, isAtBottom;\n var _this = this;\n return __generator(this, function (_a) {\n logCount = container.querySelectorAll('.ntsh_log.ntsh_log-normal').length;\n if (logCount === logs.length)\n return [2 /*return*/];\n if (logCount > logs.length)\n logCount = 0;\n isAtBottom = !this.firstTime.has(container) ||\n container.scrollTop + container.clientHeight >=\n container.scrollHeight;\n container.innerHTML = '';\n logs.forEach(function (log, i) {\n var element = (0, morphux_1.ce)('div', ['ntsh_log', 'ntsh_log-normal'], null, null, _this.ansiUp.ansi_to_html(log));\n if (_this.firstTime.has(container) && i > logCount - 1) {\n element.style.display = 'none';\n var spawnDelay = (i - logCount) * 10;\n setTimeout(function () {\n element.style.display = 'block';\n if (isAtBottom)\n container.scrollTop = container.scrollHeight;\n }, spawnDelay);\n }\n container.appendChild(element);\n if (isAtBottom)\n container.scrollTop = container.scrollHeight;\n });\n if (!this.firstTime.has(container)) {\n container.scrollTop = container.scrollHeight;\n this.firstTime.add(container);\n }\n return [2 /*return*/];\n });\n });\n };\n LogsHandler.prototype.registerListeners = function () {\n var _this = this;\n this._Main.TabController.registerListener('cameralogs', function (visible) {\n if (!visible)\n return;\n setTimeout(function () {\n _this.cameraLogsContainer.scrollTop =\n _this.cameraLogsContainer.scrollHeight;\n }, 10);\n });\n this._Main.TabController.registerListener('unitylogs', function (visible) {\n if (!visible)\n return;\n setTimeout(function () {\n _this.unityLogsContainer.scrollTop =\n _this.unityLogsContainer.scrollHeight;\n }, 10);\n });\n };\n return LogsHandler;\n}());\nexports.LogsHandler = LogsHandler;\n//# sourceMappingURL=logsHandler.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Calibration = void 0;\nvar Calibration = /** @class */ (function () {\n function Calibration(Main) {\n this.container = document.querySelector('.ntsh_calibration');\n this.image = this.container.querySelector('img');\n this.fullscreenButton = this.container.querySelector('.ntsh_calibration-fullscreen');\n this._Main = Main;\n this.registerListeners();\n }\n Calibration.prototype.startFetchClock = function () {\n var _this = this;\n this.image.src = \"/calibrationImage?t=\".concat(Date.now());\n this.fetchClock = setInterval(function () {\n _this.image.src = \"/calibrationImage?t=\".concat(Date.now());\n }, 1000);\n };\n Calibration.prototype.stopFetchClock = function () {\n clearInterval(this.fetchClock);\n };\n Calibration.prototype.registerListeners = function () {\n var _this = this;\n this._Main.TabController.registerListener('calibration', function (visible) {\n if (visible)\n _this.startFetchClock();\n else\n _this.stopFetchClock();\n });\n this.fullscreenButton.addEventListener('click', function () {\n _this.image.requestFullscreen();\n });\n };\n return Calibration;\n}());\nexports.Calibration = Calibration;\n//# sourceMappingURL=calibration.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DashboardUnity = void 0;\nvar morphux_1 = require(\"morphux\");\nvar utils_1 = require(\"./utils\");\nvar DashboardUnity = /** @class */ (function () {\n function DashboardUnity(Main) {\n this.container = document.querySelector('.ntsh_dashboard-unity');\n this.processStatus = document.querySelector('.ntsh_dashboard-unity-processstatus');\n this.processInfo = document.querySelector('.ntsh_dashboard-unity-processinfo');\n this.restartButton = document.querySelector('.ntsh_dashboard-unity-restart');\n this.uptimeInfo = document.querySelector('.ntsh_dashboard-unity-uptime');\n this.webSocketStatus = document.querySelector('.ntsh_dashboard-unity-websocketstatus');\n this.webSocketInfo = document.querySelector('.ntsh_dashboard-unity-websocketinfo');\n this.zedStreamStatus = document.querySelector('.ntsh_dashboard-unity-zedstreamstatus');\n this.zedStreamInfo = document.querySelector('.ntsh_dashboard-unity-zedstreaminfo');\n this.zedStreamFps = document.querySelector('.ntsh_dashboard-unity-zedstreamfps');\n this.zedStreamPath = document.querySelector('.ntsh_dashboard-unity-zedstreampath');\n this.timelineWatching = document.querySelector('.ntsh_dashboard-unity-timeline-watching');\n this.timelineStanding = document.querySelector('.ntsh_dashboard-unity-timeline-standing');\n this.timelineProgress = document.querySelector('.ntsh_dashboard-unity-timeline-progress');\n this.parametersTable = document.querySelector('.ntsh_dashboard-unity-parameters');\n this.errorContainer = document.querySelector('.ntsh_dashboard-unity-error');\n this.errorText = document.querySelector('.ntsh_dashboard-unity-errortext');\n this._Main = Main;\n this.registerListeners();\n }\n DashboardUnity.prototype.updateRunnerState = function (state) {\n var _a, _b;\n // ----------- Process -----------\n if (state.state != 'RUNNING') {\n state.startTime = -1;\n this.restartButton.style.display = 'none';\n }\n else {\n this.restartButton.style.display = 'flex';\n }\n (0, utils_1.setStatusState)(this.processStatus, {\n RUNNING: 'green',\n STOPPED: 'red',\n STARTING: 'yellow',\n PROBLEM: 'red',\n }[state.state]);\n this.processInfo.innerText = (_a = state.message) !== null && _a !== void 0 ? _a : '';\n // ----------- Uptime -----------\n var uptimeSeconds = state.startTime == -1 ? -1 : (Date.now() - state.startTime) / 1000;\n this.uptimeInfo.innerText = (0, utils_1.formatUptime)(uptimeSeconds);\n // ----------- Error -----------\n if (((_b = state === null || state === void 0 ? void 0 : state.error) !== null && _b !== void 0 ? _b : '').trim().length > 0)\n this.runnerError = state.error;\n else\n this.runnerError = null;\n this.updateError();\n this._Main.Logs.setUnityLogs(state.output.current);\n };\n DashboardUnity.prototype.updateWebSocketState = function (state) {\n var _a, _b;\n // ----------- WebSocket -----------\n (0, utils_1.setStatusState)(this.webSocketStatus, {\n CONNECTING: 'yellow',\n CONNECTED: 'green',\n DISCONNECTED: 'gray',\n FAILED: 'red',\n }[state.state]);\n this.webSocketInfo.innerText = (_a = state.message) !== null && _a !== void 0 ? _a : '';\n // ----------- ZED Stream -----------\n (0, utils_1.setStatusState)(this.zedStreamStatus, state.parameters.zedReady ? 'green' : 'red');\n this.zedStreamInfo.innerText = state.parameters.zedReady\n ? \"Connected to \".concat(state.parameters.zedPath)\n : 'Not ready';\n this.zedStreamFps.innerText =\n state.parameters.zedFPS == '-' ? '' : state.parameters.zedFPS;\n // ----------- Timeline -----------\n this.timelineWatching.innerText = state.parameters.timelineWatching\n ? 'Yes'\n : 'No';\n this.timelineStanding.innerText = state.parameters.timelineStanding\n ? 'Yes'\n : 'No';\n (0, utils_1.setProgressState)(this.timelineProgress, state.parameters.timelineProgress);\n // ----------- Parameters -----------\n this.renderParameterSliders(state.parameters.parameters);\n // ----------- Error -----------\n if (((_b = state === null || state === void 0 ? void 0 : state.error) !== null && _b !== void 0 ? _b : '').trim().length > 0)\n this.webSocketError = state.error;\n else\n this.webSocketError = null;\n this.updateError();\n };\n DashboardUnity.prototype.renderParameterSliders = function (parameters) {\n var _this = this;\n if (parameters.length === 0)\n return;\n var existingSliders = this.parametersTable.querySelectorAll('.ntsh_dashboard-unity-parameter-row');\n if (existingSliders.length !== parameters.length) {\n this.parametersTable.innerHTML = '';\n parameters.forEach(function (param) {\n var row = (0, morphux_1.ce)('tr', 'ntsh_dashboard-unity-parameter-row');\n var nameCell = (0, morphux_1.ce)('td');\n nameCell.appendChild((0, morphux_1.ce)('div', 'mux_text', null, param.sliderName));\n row.appendChild(nameCell);\n var progressCell = (0, morphux_1.ce)('td', 'no-service');\n progressCell.appendChild((0, utils_1.createProgress)(param.outputValue));\n row.appendChild(progressCell);\n var sliderCell = (0, morphux_1.ce)('td', 'only-service');\n var sliderProgress = (0, utils_1.createProgress)(param.outputValue);\n var sliderValue = sliderProgress.querySelector('.ntsh_progress-value');\n sliderValue.classList.add('mux_resizer');\n sliderCell.appendChild(sliderProgress);\n var resizer = new morphux_1.MorphComponent.Resizer({\n existingContainer: sliderValue,\n direction: 'right',\n relative: true,\n min: 0,\n max: function () { return sliderProgress.clientWidth; },\n });\n var lastPercentage = -1;\n resizer.on('resized', function (size) {\n var percentage = Math.round((size / sliderProgress.clientWidth) * 100) /\n 100;\n if (percentage === lastPercentage)\n return;\n lastPercentage = percentage;\n _this._Main.socket.emit('unityWebSocket', 'parameterValue', param.sliderIndex, percentage);\n (0, utils_1.setProgressState)(sliderProgress, percentage);\n });\n row.appendChild(sliderCell);\n _this.parametersTable.appendChild(row);\n });\n }\n else {\n existingSliders.forEach(function (row, index) {\n var value = parameters[index].outputValue;\n var progressElement = row.querySelector('.no-service .ntsh_progress');\n (0, utils_1.setProgressState)(progressElement, value);\n var sliderElement = row.querySelector('.only-service .ntsh_progress');\n if (sliderElement.querySelector('.mux_resizer-moving') == null)\n (0, utils_1.setProgressState)(sliderElement, value);\n });\n }\n };\n DashboardUnity.prototype.updateError = function () {\n var errors = [];\n if (this.runnerError != null)\n errors.push(this.runnerError);\n if (this.webSocketError != null)\n errors.push(this.webSocketError);\n if (errors.length > 0) {\n this.errorText.innerText = errors.join('\\n');\n this.errorContainer.style.display = 'block';\n }\n else {\n this.errorContainer.style.display = 'none';\n this.errorText.innerText = '';\n }\n };\n DashboardUnity.prototype.registerListeners = function () {\n var _this = this;\n this._Main.socket.on('unityRunnerState', function (state) {\n return _this.updateRunnerState(state);\n });\n this._Main.socket.on('unityWebSocketState', function (state) { return _this.updateWebSocketState(state); });\n this.restartButton.addEventListener('click', function () { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n this.executeCommand('restart', 'Are you sure you want to restart the Unity Runner process?');\n return [2 /*return*/];\n });\n }); });\n };\n DashboardUnity.prototype.executeCommand = function (command, message) {\n return __awaiter(this, void 0, void 0, function () {\n var confirmed;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, morphux_1.MorphFeature.Confirm({\n title: 'Are you sure?',\n message: message,\n })];\n case 1:\n confirmed = _a.sent();\n if (!confirmed)\n return [2 /*return*/];\n morphux_1.MorphFeature.Loader({\n active: true,\n message: \"Requesting Unity Runner \".concat(command, \"...\"),\n });\n this._Main.socket.emit('unityRunner', command, function (response) {\n morphux_1.MorphFeature.Loader({ active: false });\n if (!response.succeed)\n return morphux_1.MorphFeature.Alert({\n title: 'Error',\n message: response.message,\n });\n morphux_1.MorphFeature.Notification({\n level: 'success',\n message: \"Unity Runner is \".concat(command, \"ing...\"),\n });\n });\n return [2 /*return*/];\n }\n });\n });\n };\n return DashboardUnity;\n}());\nexports.DashboardUnity = DashboardUnity;\n//# sourceMappingURL=dashboard.unity.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Main = void 0;\nvar socket_io_client_1 = require(\"socket.io-client\");\nvar menuBar_1 = require(\"./menuBar\");\nvar tabController_1 = require(\"./tabController\");\nvar morphux_1 = require(\"morphux\");\nvar dashboard_camerarunner_1 = require(\"./dashboard.camerarunner\");\nvar logsHandler_1 = require(\"./logsHandler\");\nvar calibration_1 = require(\"./calibration\");\nvar dashboard_unity_1 = require(\"./dashboard.unity\");\nvar socket = (0, socket_io_client_1.io)('/');\nvar Main = /** @class */ (function () {\n function Main() {\n this.socket = socket;\n this.MenuBar = new menuBar_1.MenuBar(this);\n this.TabController = new tabController_1.TabController(this);\n this.Logs = new logsHandler_1.LogsHandler(this);\n this.Calibration = new calibration_1.Calibration(this);\n this.DashboardCameraRunner = new dashboard_camerarunner_1.DashboardCameraRunner(this);\n this.DashboardUnityRunner = new dashboard_unity_1.DashboardUnity(this);\n if (window.location.search.includes('debug')) {\n window.SN = this;\n console.log('Debug mode enabled');\n }\n }\n return Main;\n}());\nexports.Main = Main;\nmorphux_1.MorphFeature.Loader({ active: true, message: 'Connecting to server...' });\nsocket.on('connect', function () {\n console.log('Connected to server');\n morphux_1.MorphFeature.Loader({ active: false });\n});\nvar _Main = new Main();\n//# sourceMappingURL=main.js.map"],"names":["commons_js_1","require$$0","withNativeBlob","withNativeArrayBuffer","isView","toArray","encode","decode","require$$1","require$$2","globals_node_js_1","__importDefault","this","engine_io_parser_1","component_emitter_1","util_js_1","parseqs_js_1","require$$3","debug_1","require$$4","debug","transport_js_1","polling_js_1","require$$5","socket","require$$6","require$$7","Socket","require$$8","require$$9","require$$10","require$$11","url_1","engine_io_client_1","isBinary_1","on_1","on_js_1","Manager","__extends","CE_1","baseComponent_1","Sortable","__spreadArray","KeyBinderOverwrite_1","KeyBinderBase_1","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","clone_1","__awaiter","__generator","morphux_1","utils_1","main","Main_1"],"mappings":"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AAK,CAAC,CAAC;CAC1D,KAAK,MAAM;CACX,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;CACpC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;CACzD,KAAK;CACL,GAAG,CAAC;AACJ;CACA,EAAE,OAAO,eAAe,CAAC;CACzB,CAAC,CAAC,UAAU,CAAC,CAAC;AACd;CACA,IAAI,QAAQ,GAAG;CACf;CACA;CACA;CACA;CACA;CACA;CACA;CACA,EAAE,SAAS,EAAE,KAAK;AAClB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,EAAE,WAAW,EAAE,oBAAoB;AACnC;CACA;CACA;CACA;CACA;CACA;CACA,EAAE,MAAM,EAAE,IAAI;AACd;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,EAAE,WAAW,EAAE,IAAI;AACnB;CACA;CACA;CACA;CACA;CACA;CACA;CACA,EAAE,UAAU,EAAE,IAAI;AAClB;CACA;CACA;CACA;CACA;CACA;CACA;CACA,EAAE,QAAQ,EAAE;CACZ;CACA;CACA;CACA;CACA;CACA;CACA,IAAI,UAAU,EAAE,MAAM;AACtB;CACA;CACA;CACA;CACA;CACA;CACA;CACA,IAAI,WAAW,EAAE,MAAM;AACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,IAAI,YAAY,EAAE,MAAM;AACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA,IAAI,cAAc,EAAE,MAAM;AAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACA,IAAI,QAAQ,EAAE,MAAM;AACpB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,IAAI,iBAAiB,EAAE,eAAe;CACtC,GAAG;CACH,CAAC,CAAC;CACF;CACA;CACA;CACA;CACA;CACA;CACA;AACA;CACA,IAAI,MAAM,GAAG,CAAC,CAAC,gBAAgB,EAAE;CACjC,EAAE,MAAM,EAAE,KAAK;CACf,CAAC,CAAC,EAAE,CAAC,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"} \ No newline at end of file diff --git a/frontend/views/dashboard/scss/calibration.scss b/frontend/views/dashboard/scss/calibration.scss new file mode 100644 index 0000000..18a7a25 --- /dev/null +++ b/frontend/views/dashboard/scss/calibration.scss @@ -0,0 +1,31 @@ +.ntsh_calibration { + position: absolute; + inset: 0px; + display: flex; + justify-content: center; + align-items: center; + box-sizing: border-box; + padding: var(--mux-edge-offset); + + .ntsh_calibration-fullscreen { + position: absolute; + top: var(--mux-edge-offset); + right: var(--mux-edge-offset); + transition-duration: .2s; + cursor: pointer; + + &:hover { + opacity: .7; + } + + span { + font-size: 24px; + } + } + + img { + width: 100%; + height: 100%; + object-fit: contain; + } +} \ No newline at end of file diff --git a/frontend/views/dashboard/scss/dashboard.scss b/frontend/views/dashboard/scss/dashboard.scss new file mode 100644 index 0000000..41e576e --- /dev/null +++ b/frontend/views/dashboard/scss/dashboard.scss @@ -0,0 +1,178 @@ +.ntsh_dashboard { + position: absolute; + inset: 0px; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(600px, 100%), 1fr)); + grid-auto-rows: min-content; + align-items: stretch; + justify-items: stretch; + align-content: start; + overflow-y: auto; + + gap: var(--mux-edge-offset); + box-sizing: border-box; + padding: var(--mux-edge-offset); + + .ntsh_dashboard-box { + background: var(--mux-selected-color); + box-sizing: border-box; + padding: var(--mux-edge-offset); + border-radius: var(--mux-rounding); + + .ntsh_dashboard-box-header { + padding-bottom: var(--mux-edge-offset-tiny); + border-bottom: 1px solid #979797; + margin-bottom: var(--mux-edge-offset-tiny); + font-size: 18px; + } + + .mux_header:not(.ntsh_dashboard-box-header) { + margin-bottom: var(--mux-edge-offset-tiny); + } + } + + .ntsh_dashboard-unity-parameters { + .ntsh_dashboard-unity-parameters-loading { + text-align: center; + color: #9d9d9d; + } + } + + table { + width: 100%; + + &.ntsh_vertical { + tr td { + height: 24px; + + &:first-child { + width: min(150px, 20vw); + } + } + } + + &.ntsh_horizontal {} + + &.ntsh_center { + tr td { + text-align: center; + + .ntsh_status { + margin: 0 auto; + } + } + } + + tr { + td { + &:has(.ntsh_status) { + width: 30px; + } + } + } + } + + .ntsh_dashboard-error { + display: none; + box-sizing: border-box; + padding: var(--mux-edge-offset-tiny); + border-radius: var(--mux-rounding); + margin-top: var(--mux-edge-offset-tiny); + background: #721e1e; + } + + .ntsh_progress { + position: relative; + background: #2f2f2f; + width: 100%; + height: 20px; + border-radius: 4px; + overflow: hidden; + + .ntsh_progress-value { + height: 100%; + background: #777777; + + &.ntsh_progress-smooth { + transition-duration: .3s; + transition-timing-function: ease-in-out; + } + + &.mux_resizer { + transition-duration: 0s; + + .mux_resizer-grab { + background: var(--mux-primary-color); + border-radius: 4px; + height: 100%; + } + } + } + + .ntsh_progress-label { + position: absolute; + z-index: 101; + inset: 0px; + display: flex; + justify-content: center; + align-items: center; + font-size: 12px; + color: #fff; + font-weight: 500; + text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000; + pointer-events: none; + } + } + + .ntsh_status { + width: 24px; + height: 24px; + background: #868686; + border: 4px solid #00000071; + border-radius: 100%; + box-sizing: border-box; + + &.ntsh_status-green { + background: #149214; + } + + &.ntsh_status-yellow { + background: #ffbf00; + } + + &.ntsh_status-red { + background: #ff0000; + } + + &.ntsh_status-gray { + background: #868686; + } + } + + + .ntsh_buttons { + width: 100%; + display: flex; + justify-content: flex-end; + flex-wrap: wrap; + gap: var(--mux-edge-offset-tiny); + + .ntsh_button { + min-width: 30px; + height: 30px; + box-sizing: border-box; + padding: 0px 4px; + display: flex; + justify-content: center; + align-items: center; + background: #787878; + cursor: pointer; + transition: background .2s; + + &:hover { + background: #5a5a5a; + } + + } + } +} \ No newline at end of file diff --git a/frontend/views/dashboard/scss/index.scss b/frontend/views/dashboard/scss/index.scss new file mode 100644 index 0000000..3613cf6 --- /dev/null +++ b/frontend/views/dashboard/scss/index.scss @@ -0,0 +1,79 @@ +@use '../node_modules/morphux/style.css'; + +@use './dashboard.scss'; +@use './tabs.scss'; +@use './calibration.scss'; + +:root { + --mux-primary-color: #247476; + --mux-primary-off-color: #1d5253; + +} + +body { + &:not(.ntsh_service) { + .ntsh_buttons { + display: none; + } + + .mux_menubar-locater.mux_left { + .mux_menubar-item { + display: none; + } + } + + .only-service { + display: none; + } + } + + &.ntsh_service { + .no-service { + display: none; + } + } +} + +.sn { + position: absolute; + inset: 0px; + overflow: hidden; + + .ntsh_menubar { + position: absolute; + top: 0px; + left: 0px; + right: 0px; + height: 100%; + + .mux_menubar { + .mux_menubar-item.mux_menubar-item-selected { + background: var(--mux-primary-off-color); + } + } + } + + .ntsh_logs { + position: absolute; + inset: 0px; + box-sizing: border-box; + padding: var(--mux-edge-offset); + font-family: monospace; + background: black; + overflow-y: auto; + + .ntsh_log { + &.ntsh_log-fill { + height: 100%; + display: flex; + justify-content: center; + align-items: center; + color: #939393; + } + + &.ntsh_log-normal { + color: #c7c7c7; + } + } + } +} \ No newline at end of file diff --git a/frontend/views/dashboard/scss/tabs.scss b/frontend/views/dashboard/scss/tabs.scss new file mode 100644 index 0000000..8f51013 --- /dev/null +++ b/frontend/views/dashboard/scss/tabs.scss @@ -0,0 +1,14 @@ +.ntsh_tabs { + position: absolute; + inset: 50px 0 0 0; + + .ntsh_tab { + position: absolute; + inset: 0px; + display: none; + + &.ntsh_tab-visible { + display: block; + } + } +} \ No newline at end of file diff --git a/frontend/views/dashboard/style.css b/frontend/views/dashboard/style.css new file mode 100644 index 0000000..96bbeef --- /dev/null +++ b/frontend/views/dashboard/style.css @@ -0,0 +1,2603 @@ +@import url("https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap"); +.mux_header { + font-size: var(--mux-header-size-normal); + font-weight: var(--mux-header-weight); + color: var(--mux-header-color); + margin-top: var(--mux-edge-offset); +} + +.mux_header:first-of-type { + margin-top: 0px; +} + +.mux_header.mux_big { + font-size: var(--mux-header-size-big); + font-weight: 400; +} + +.mux_header.mux_normal { + font-size: var(--mux-header-size-normal); +} + +.mux_header.mux_small { + font-size: var(--mux-header-size-small); +} + +.mux_header.mux_tiny { + font-size: var(--mux-header-size-tiny); +} + +.mux_header.mux_header-bm { + margin-bottom: var(--edge-offset-small); +} + +.mux_text { + font-size: var(--mux-text-size-normal); + font-weight: var(--mux-text-weight); + color: var(--mux-text-color); +} + +.mux_text.mux_big { + font-size: var(--mux-text-size-big); + font-weight: 200; +} + +.mux_text.mux_medium { + font-size: var(--mux-text-size-medium); +} + +.mux_text.mux_normal { + font-size: var(--mux-text-size-normal); +} + +.mux_text.mux_small { + font-size: var(--mux-text-size-small); +} + +.mux_text.mux_tiny { + font-size: var(--mux-text-size-tiny); +} + +.mux_button { + text-align: center; + display: flex; + justify-content: center; + align-items: center; + padding: var(--mux-edge-offset); + border: var(--mux-border-transparent); + transition-duration: var(--mux-transition-hover); + cursor: pointer; + border-radius: var(--mux-rounding); + user-select: none; + color: white; + text-decoration: none; +} + +.mux_button:hover { + border: var(--mux-border-hovering); +} + +.mux_button.mux_normal { + border: 1px solid var(--mux-secondary-color); +} + +.mux_button.mux_normal:hover { + background: var(--mux-secondary-color); +} + +.mux_button.mux_highlight { + background: var(--mux-primary-color); +} + +.mux_button.mux_highlight:hover { + filter: brightness(0.7); +} + +.mux_button.mux_secondary { + background: var(--mux-secondary-color); +} + +.mux_button.mux_secondary:hover { + filter: brightness(0.7); +} + +.mux_button.mux_disabled { + background: var(--mux-disabled-color); + cursor: not-allowed; +} + +.mux_button.mux_disabled:hover { + border: var(--mux-border-transparent); +} + +.mux_button.mux_disabled .mux_text { + font-style: italic; + opacity: 0.5; +} + +.mux_group.mux_group-open .mux_group-header .mux_group-fold { + transform: rotate(90deg); +} + +.mux_group.mux_group-open .mux_group-contentwrapper { + grid-template-rows: 1fr; +} + +.mux_group.mux_group-singular .mux_group-header { + display: none; +} + +.mux_group.mux_group-singular .mux_group-contentwrapper { + grid-template-rows: 1fr; +} + +.mux_group.mux_group-singular .mux_group-contentwrapper .mux_list-item-content { + padding-left: var(--mux-edge-offset) !important; +} + +.mux_group .mux_group-header { + position: relative; + width: 100%; + display: flex; + justify-content: flex-start; + align-items: center; + box-sizing: border-box; + user-select: none; + cursor: pointer; + padding: var(--mux-edge-offset) 0px; +} + +.mux_group .mux_group-header .material-symbols-outlined { + font-size: 16px; + margin-right: var(--mux-edge-offset); +} + +.mux_group .mux_group-header .mux_header { + text-transform: capitalize; +} + +.mux_group .mux_group-header .mux_text { + margin-left: calc(var(--mux-edge-offset) / 2); + color: #b0b0b0; + font-style: italic; +} + +.mux_group .mux_group-header .mux_group-fold { + transition-duration: var(--mux-transition-animation); +} + +.mux_group .mux_group-header .mux_group-actions { + position: absolute; + top: 0px; + bottom: 0px; + right: 0px; + display: flex; + justify-content: center; + align-items: center; + gap: var(--mux-edge-offset-tiny); +} + +.mux_group .mux_group-header .mux_group-actions .mux_group-action { + width: 25px; + height: 25px; + transition-duration: var(--mux-transition-hover); + display: flex; + justify-content: center; + align-items: center; + margin: 2px 0px; + border-radius: var(--mux-rounding); + box-sizing: border-box; + border: var(--mux-border-transparent); + transition-duration: 0.1s; + cursor: pointer; + margin-left: var(--mux-edge-offset-tiny); +} + +.mux_group .mux_group-header .mux_group-actions .mux_group-action:hover { + border: var(--mux-border-hovering); +} + +.mux_group .mux_group-header .mux_group-actions .mux_group-action:first-child { + margin-left: var(--mux-edge-offset); +} + +.mux_group .mux_group-header .mux_group-actions .mux_group-action span { + font-size: 20px; +} + +.mux_group .mux_group-contentwrapper { + display: grid; + grid-template-rows: 0fr; + transition-duration: var(--mux-transition-animation); +} + +.mux_group .mux_group-contentwrapper .mux_group-content { + width: 100%; + overflow: hidden; +} + +.mux_list { + width: 100%; + overflow: hidden; +} + +.mux_list.mux_list-dragging .mux_list-item .mux_list-item-content:hover { + border: var(--mux-border-transparent) !important; +} + +.mux_list .mux_list-group.mux_list-group-open .mux_list-group-header span { + transform: rotate(90deg); +} + +.mux_list .mux_list-group.mux_list-group-open .mux_list-group-contentwrapper { + grid-template-rows: 1fr; +} + +.mux_list .mux_list-group.mux_list-group-singular .mux_list-group-header { + display: none; +} + +.mux_list .mux_list-group.mux_list-group-singular .mux_list-group-contentwrapper { + grid-template-rows: 1fr; +} + +.mux_list .mux_list-group.mux_list-group-singular .mux_list-group-contentwrapper .mux_list-item-content { + padding-left: var(--mux-edge-offset) !important; +} + +.mux_list .mux_list-group .mux_list-group-header { + width: 100%; + display: flex; + justify-content: flex-start; + align-items: center; + box-sizing: border-box; + user-select: none; + padding: 0px var(--mux-edge-offset); + border: var(--mux-border-transparent); + transition-duration: var(--mux-transition-hover); + cursor: pointer; +} + +.mux_list .mux_list-group .mux_list-group-header:hover span { + opacity: 0.5; +} + +.mux_list .mux_list-group .mux_list-group-header span { + transition-duration: var(--mux-transition-hover); +} + +.mux_list .mux_list-group .mux_list-group-header .mux_list-group-icon { + width: 16px; + height: 16px; + margin-right: var(--mux-edge-offset); +} + +.mux_list .mux_list-group .mux_list-group-header .mux_header { + text-transform: capitalize; +} + +.mux_list .mux_list-group .mux_list-group-header .mux_list-group-indicator { + margin-left: 5px; + color: #b0b0b0; + font-style: italic; +} + +.mux_list .mux_list-group .mux_list-group-contentwrapper { + display: grid; + grid-template-rows: 0fr; + transition-duration: 0.5s; +} + +.mux_list .mux_list-group .mux_list-group-contentwrapper .mux_list-group-content { + width: 100%; + overflow: hidden; +} + +.mux_list .mux_list-group .mux_list-group-contentwrapper .mux_list-group-content .mux_list-item-content { + padding-left: calc(var(--mux-edge-offset) * 3); +} + +.mux_list .mux_group.mux_list-group-singular .mux_list-item-content { + padding-left: 0px !important; +} + +.mux_list .mux_group .mux_group-header { + box-sizing: border-box; + padding-left: 10px; +} + +.mux_list .mux_group .mux_list-item-content { + padding-left: calc(var(--mux-edge-offset) * 3) !important; +} + +.mux_list .mux_list-item { + width: 100%; + border-radius: var(--mux-rounding); + color: #fff; + display: block; +} + +.mux_list .mux_list-item:hover .mux_list-item-action { + opacity: 1 !important; +} + +.mux_list .mux_list-item.mux_list-item-dragging { + background: var(--mux-disabled-color); +} + +.mux_list .mux_list-item.mux_list-item-hover { + cursor: pointer; + transition-duration: var(--mux-transition-hover); +} + +.mux_list .mux_list-item.mux_list-item-hover:hover .mux_list-item-content { + border: var(--mux-border-hovering); +} + +.mux_list .mux_list-item.mux_list-item-separator { + border-bottom: 1px solid var(--mux-disabled-color); +} + +.mux_list .mux_list-item.mux_list-item-separator:last-child { + border-bottom: 0px; +} + +.mux_list .mux_list-item.mux_list-item-selected { + background: var(--mux-selected-color); + cursor: default !important; +} + +.mux_list .mux_list-item.mux_list-item-selected .mux_list-item-content { + border: var(--mux-border-width) solid var(--mux-selected-color) !important; +} + +.mux_list .mux_list-item.mux_list-item-selected:hover { + background: var(--mux-selected-color); +} + +.mux_list .mux_list-item.mux_list-item-disabled .mux_list-item-text .mux_text { + color: #6e6e6e; + font-style: italic; +} + +.mux_list .mux_list-item .mux_list-item-content { + position: relative; + width: 100%; + display: flex; + justify-content: flex-start; + align-items: center; + box-sizing: border-box; + user-select: none; + padding: var(--mux-edge-offset-tiny) var(--mux-edge-offset); + border: var(--mux-border-transparent); + border-radius: var(--mux-rounding); + transition-duration: var(--mux-transition-hover); +} + +.mux_list .mux_list-item .mux_list-item-content span.mux_list-item-icon { + font-size: 16px; +} + +.mux_list .mux_list-item .mux_list-item-content img.mux_list-item-icon { + width: 16px; + height: 16px; +} + +.mux_list .mux_list-item .mux_list-item-content .mux_header { + margin-bottom: var(--mux-edge-offset); +} + +.mux_list .mux_list-item .mux_list-item-content .mux_list-item-index { + margin-right: var(--mux-edge-offset); + width: 20px; + height: 20px; + display: flex; + justify-content: center; + align-items: center; + box-sizing: border-box; + border: 1px solid var(--mux-disabled-color); + border-radius: var(--mux-rounding); + font-size: 12px; +} + +.mux_list .mux_list-item .mux_list-item-content .mux_list-item-icon { + margin-right: var(--mux-edge-offset); +} + +.mux_list .mux_list-item .mux_list-item-content .mux_list-item-text { + width: 100%; + white-space: normal; +} + +.mux_list .mux_list-item .mux_list-item-content .mux_list-item-text .mux_text.mux_small { + color: #979797; +} + +.mux_list .mux_list-item .mux_list-item-content .mux_list-item-actions { + position: absolute; + right: var(--mux-edge-offset); + display: flex; + align-items: center; +} + +.mux_list .mux_list-item .mux_list-item-content .mux_list-item-actions .mux_list-item-action { + width: 22px; + height: 22px; + transition-duration: var(--mux-transition-hover); + display: flex; + justify-content: center; + align-items: center; + border-radius: var(--mux-rounding); + box-sizing: border-box; + border: var(--mux-border-transparent); + opacity: 0; + transition-duration: 0.1s; + cursor: pointer; +} + +.mux_list .mux_list-item .mux_list-item-content .mux_list-item-actions .mux_list-item-action:hover { + border: var(--mux-border-hovering); +} + +.mux_list .mux_list-item .mux_list-item-content .mux_list-item-actions .mux_list-item-action img { + width: 14px; + height: 14px; + margin: 0px; + pointer-events: none; +} + +.mux_list .mux_list-item .mux_list-item-content .mux_list-item-actions .mux_list-item-action span { + font-size: 18px; + pointer-events: none; +} + +.mux_input { + width: 100%; + border: var(--mux-border-transparent); + background: inherit; + color: var(--mux-text-color); + padding: var(--mux-edge-offset); + font-size: 11px; + border-radius: var(--mux-rounding); + transition-duration: var(--mux-transition-hover); + box-sizing: border-box; + font-family: Montserrat, sans-serif; +} + +.mux_input:hover { + border: var(--mux-border-hovering); +} + +.mux_input:focus { + outline: none; + border: var(--mux-border-active); +} + +.mux_input[disabled] { + opacity: 0.5; + cursor: not-allowed; +} + +.mux_input.mux_input-alwaysborder { + border: var(--mux-border-hovering); +} + +.mux_input.mux_input-alwaysborder:focus { + outline: none; + border: var(--mux-border-active); +} + +.mux_input.mux_input-noborder:hover, .mux_input.mux_input-noborder:focus { + border: var(--mux-border-transparent); +} + +.mux_select { + position: relative; + width: 100%; + cursor: pointer; + border: var(--mux-border-transparent); + transition-duration: var(--mux-transition-hover); + border-radius: var(--mux-rounding); + box-sizing: border-box; +} + +.mux_select:hover { + border: var(--mux-border-hovering); +} + +.mux_select:hover .mux_select-arrow { + margin-top: 1px; +} + +.mux_select.mux_select-alwaysborder { + border: var(--mux-border-hovering); +} + +.mux_select.mux_select-noborder:hover { + border: var(--mux-border-transparent); +} + +.mux_select.mux_select-open { + border: var(--mux-border-active); +} + +.mux_select .mux_input { + box-sizing: border-box; + width: 100%; + pointer-events: none; +} + +.mux_select .mux_select-arrow { + position: absolute; + right: var(--mux-edge-offset-tiny); + font-size: 16px; + padding: var(--mux-edge-offset) 0px; + transition-duration: var(--mux-transition-hover); +} + +.mux_select .mux_select-content { + position: absolute; + inset: 0px; + display: flex; + justify-content: flex-start; + align-items: center; + box-sizing: border-box; + padding: 0px var(--mux-edge-offset); +} + +.mux_select .mux_select-content .mux_select-none { + color: gray; +} + +.mux_select .mux_select-content .material-symbols-outlined { + margin-right: var(--mux-edge-offset-tiny); + font-size: 20px; +} + +.mux_mobilemenu { + position: fixed; + inset: 0px; + background: rgba(0, 0, 0, 0.6); + z-index: 500; + opacity: 0; +} + +.mux_mobilemenu .mux_mobilemenu-inner { + position: absolute; + top: 0px; + bottom: 0px; + right: 0px; + width: min(100% - var(--mux-edge-offset), 200px); + transform: translateX(100%); + background: var(--mux-primary-color); +} + +.mux_mobilemenu .mux_mobilemenu-inner .mux_menubar-image { + display: none; +} + +.mux_menubar { + position: relative; + user-select: none; + background: var(--mux-primary-color); + display: flex; + justify-content: space-between; + align-items: center; + overflow: hidden; +} + +.mux_menubar.mux_menubar-direction-horizontal { + width: 100%; + height: 50px; + flex-direction: row; +} + +.mux_menubar.mux_menubar-direction-horizontal .mux_menubar-locater { + height: 100%; + flex-direction: row; +} + +.mux_menubar.mux_menubar-direction-horizontal .mux_menubar-locater .mux_menubar-item { + justify-content: center; +} + +.mux_menubar.mux_menubar-direction-vertical { + width: 100%; + height: 100%; + flex-direction: column; +} + +.mux_menubar.mux_menubar-direction-vertical .mux_menubar-locater { + width: 100%; + flex-direction: column; +} + +.mux_menubar.mux_menubar-direction-vertical .mux_menubar-locater .mux_menubar-item { + width: 100%; +} + +.mux_menubar .mux_menubar-locater { + display: flex; + align-items: center; +} + +.mux_menubar .mux_menubar-locater:not(.mux_menubar-visible) .mux_menubar-item { + opacity: 0; + pointer-events: none; +} + +.mux_menubar .mux_menubar-locater.mux_left { + justify-content: flex-start; +} + +.mux_menubar .mux_menubar-locater.mux_right { + justify-content: flex-end; +} + +.mux_menubar .mux_menubar-mobile { + position: absolute; + inset: 0px; + display: none; +} + +.mux_menubar .mux_menubar-mobile.mux_menubar-visible { + display: block; +} + +.mux_menubar .mux_menubar-mobile .mux_menubar-mobile-logo { + position: absolute; + top: 0px; + left: 0px; + width: 50px; + height: 50px; + box-sizing: border-box; + padding: var(--mux-edge-offset); +} + +.mux_menubar .mux_menubar-mobile .mux_menubar-mobile-logo img { + width: 100%; + height: 100%; + object-fit: contain; +} + +.mux_menubar .mux_menubar-mobile .mux_menubar-mobile-items { + position: absolute; + top: 0px; + height: 100%; + display: flex; + align-items: center; +} + +.mux_menubar .mux_menubar-mobile .mux_menubar-mobile-items.mux_left { + left: 0px; +} + +.mux_menubar .mux_menubar-mobile .mux_menubar-mobile-items.mux_right { + right: 0px; +} + +.mux_menubar .mux_menubar-mobile .mux_menubar-mobile-items .mux_menubar-item-icon { + justify-content: center; +} + +.mux_menubar .mux_menubar-image { + height: 100%; + box-sizing: border-box; + padding: var(--mux-edge-offset); +} + +.mux_menubar .mux_menubar-image img { + height: 100%; +} + +.mux_menubar .mux_menubar-item { + position: relative; + height: 50px; + display: flex; + align-items: center; + box-sizing: border-box; + transition-duration: var(--mux-transition-hover); + border: var(--mux-border-transparent); + cursor: pointer; + pointer-events: auto; + text-decoration: none; +} + +.mux_menubar .mux_menubar-item:hover { + border: var(--mux-border-hovering); +} + +.mux_menubar .mux_menubar-item:hover .mux_menubar-item-arrow { + margin-top: 5px; +} + +.mux_menubar .mux_menubar-item.mux_menubar-item-selected { + background: var(--mux-primary-off-color); + border: var(--mux-border-width) solid var(--mux-selected-color); +} + +.mux_menubar .mux_menubar-item.mux_menubar-item-selected .mux_menubar-item-arrow { + margin-top: 5px; +} + +.mux_menubar .mux_menubar-item.mux_menubar-item-disabled { + opacity: 0.3; + cursor: not-allowed; +} + +.mux_menubar .mux_menubar-item.mux_menubar-item-disabled:hover { + border: var(--mux-border-transparent); +} + +.mux_menubar .mux_menubar-item.mux_menubar-item-disabled:hover .mux_menubar-item-arrow { + margin-top: 0px; +} + +.mux_menubar .mux_menubar-item.mux_menubar-item-icon { + width: 50px; +} + +.mux_menubar .mux_menubar-item.mux_menubar-item-icon .mux_menubar-item-icon-img { + width: 20px; + height: 20px; +} + +.mux_menubar .mux_menubar-item.mux_menubar-item-icon .mux_menubar-item-materialicon { + font-size: 26px; +} + +.mux_menubar .mux_menubar-item.mux_menubar-item-icon .mux_menubar-item-arrow { + position: absolute; + bottom: 3px; + right: 3px; +} + +.mux_menubar .mux_menubar-item.mux_menubar-item-normal { + padding: 0px 15px; +} + +.mux_menubar .mux_menubar-item.mux_menubar-item-normal .mux_menubar-item-icon-img { + width: 16px; + height: 16px; + margin-right: var(--mux-edge-offset-tiny); +} + +.mux_menubar .mux_menubar-item.mux_menubar-item-normal .mux_menubar-item-materialicon { + font-size: 20px; + color: white; + margin-right: var(--mux-edge-offset-tiny); +} + +.mux_menubar .mux_menubar-item.mux_menubar-item-normal p { + margin: 0px; +} + +.mux_menubar .mux_menubar-item .mux_menubar-item-arrow { + margin-left: var(--mux-edge-offset-tiny); + transition-duration: var(--mux-transition-hover); + font-size: 16px; + color: #fff; +} + +.mux_menubar a.mux_menubar-item .mux_menubar-item-materialicon { + color: #fff; +} + +.mux_menubar.mux_menubar-small { + height: 40px; +} + +.mux_menubar.mux_menubar-small .mux_menubar-item { + height: 40px; +} + +.mux_menubar.mux_menubar-small .mux_menubar-item.mux_menubar-item-icon { + width: 40px; +} + +.mux_menubar.mux_menubar-small .mux_menubar-item.mux_menubar-item-icon .mux_menubar-item-materialicon { + font-size: 21px; +} + +.mux_contextmenu { + position: absolute; + z-index: 1101; + border-radius: var(--mux-rounding); + background: var(--mux-panel-color); + box-shadow: var(--mux-panel-shadow); + border: 1px solid var(--mux-border-color); + overflow-y: auto; + transform-origin: 50% 0%; + transform: scale(0); + user-select: none; + --mux-contextmenu-iconcolor: var(--mux-text-color); +} + +.mux_contextmenu .mux_contextmenu-item { + display: flex; + justify-content: flex-start; + align-items: center; + box-sizing: border-box; + border: var(--mux-border-transparent); + padding: 5px var(--mux-edge-offset); + cursor: pointer; + text-decoration: none; + color: var(--mux-text-color); +} + +.mux_contextmenu .mux_contextmenu-item:hover { + border: var(--mux-border-hovering); +} + +.mux_contextmenu .mux_contextmenu-item.mux_contextmenu-item-selected { + border: var(--mux-border-hovering); + background: var(--mux-selected-color); +} + +.mux_contextmenu .mux_contextmenu-item.mux_contextmenu-item-disabled { + opacity: 0.3; + cursor: not-allowed; + border: var(--mux-border-transparent); +} + +.mux_contextmenu .mux_contextmenu-item.mux_contextmenu-item-disabled:hover { + background: transparent; +} + +.mux_contextmenu .mux_contextmenu-item .mux_contextmenu-item-icon { + margin-right: var(--mux-edge-offset-tiny); + height: 20px; + border-radius: var(--mux-rounding); +} + +.mux_contextmenu .mux_contextmenu-item .mux_contextmenu-item-arrow { + font-size: 16px; + margin-right: -5px; + color: #fff; +} + +.mux_contextmenu .mux_contextmenu-item .mux_contextmenu-item-materialicon { + margin-right: var(--mux-edge-offset); + color: var(--mux-contextmenu-iconcolor); + font-size: 20px; +} + +.mux_contextmenu .mux_contextmenu-item .mux_contextmenu-shortcut { + margin-left: var(--mux-edge-offset); + color: #b3b3b3; +} + +.mux_contextmenu .mux_contextmenu-item .mux_text { + white-space: nowrap; +} + +.mux_contextmenu .mux_contextmenu-separator { + width: 100%; + min-height: 1px; + background: var(--mux-border-color); + display: flex; +} + +.mux_contextmenu .mux_contextmenu-separator span { + font-size: 8px; + font-weight: 500; + padding: 4px 0px 3px 0px; + margin-left: var(--mux-edge-offset-tiny); +} + +.mux_dialogcontainer { + position: fixed; + inset: 0px; + background: rgba(0, 0, 0, 0.3098039216); + z-index: 100; + display: flex; + justify-content: center; + align-items: center; + transition-duration: 0.2s; + opacity: 0; +} + +.mux_dialogcontainer .mux_dialog { + position: relative; + padding: var(--mux-edge-offset); + border-radius: var(--mux-rounding); + background: var(--mux-panel-color); + box-sizing: border-box; + box-shadow: var(--mux-panel-shadow); + border: 1px solid var(--mux-border-color); + max-width: calc(100% - 20px); + max-height: calc(100% - 20px); + transition-timing-function: ease-in; + transition-duration: var(--mux-transition-hover); + opacity: 0; + transform-origin: 50% 50%; + transform: scale(0.8); +} + +.mux_dialogcontainer .mux_dialog.mux_w-big { + width: 900px; +} + +.mux_dialogcontainer .mux_dialog.mux_w-medium { + width: 600px; +} + +.mux_dialogcontainer .mux_dialog.mux_w-small { + width: 300px; +} + +.mux_dialogcontainer .mux_dialog.mux_w-tiny { + width: 150px; +} + +.mux_dialogcontainer .mux_dialog.mux_h-big { + height: 900px; +} + +.mux_dialogcontainer .mux_dialog.mux_h-medium { + height: 600px; +} + +.mux_dialogcontainer .mux_dialog.mux_h-small { + height: 300px; +} + +.mux_dialogcontainer .mux_dialog.mux_h-tiny { + height: 150px; +} + +.mux_dialogcontainer .mux_dialog.mux_h-auto .mux_dialog-content { + position: unset; + width: 100%; + margin: 30px calc(var(--mux-edge-offset) * -1) 45px calc(var(--mux-edge-offset) * -1); +} + +.mux_dialogcontainer .mux_dialog .mux_dialog-titlebar { + position: absolute; + top: 0px; + left: 0px; + right: 0px; + padding: var(--mux-edge-offset); + height: 20px; + border-bottom: 1px solid var(--mux-border-color); + display: flex; + justify-content: flex-start; + align-items: center; +} + +.mux_dialogcontainer .mux_dialog .mux_dialog-titlebar .mux_dialog-title { + position: relative; + z-index: 1; + white-space: nowrap; +} + +.mux_dialogcontainer .mux_dialog .mux_dialog-titlebar .mux_dialog-titlesettings { + width: 100%; + height: 100%; + margin-right: calc(15px + var(--mux-edge-offset)); + margin-left: var(--mux-edge-offset); + display: flex; + justify-content: flex-start; + align-items: center; +} + +.mux_dialogcontainer .mux_dialog .mux_dialog-titlebar .mux_dialog-close { + width: 20px; + height: 20px; + border-radius: var(--mux-rounding); + border: var(--mux-border-transparent); + position: absolute; + right: var(--mux-edge-offset); + top: var(--mux-edge-offset); + z-index: 2; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + transition-duration: var(--mux-transition-hover); +} + +.mux_dialogcontainer .mux_dialog .mux_dialog-titlebar .mux_dialog-close:hover { + border: var(--mux-border-hovering); +} + +.mux_dialogcontainer .mux_dialog .mux_dialog-titlebar .mux_dialog-close span { + font-size: 18px; +} + +.mux_dialogcontainer .mux_dialog .mux_dialog-content { + position: absolute; + top: 41px; + bottom: 56px; + left: 0px; + right: 0px; + padding: var(--mux-edge-offset); + overflow-y: auto; +} + +.mux_dialogcontainer .mux_dialog .mux_dialog-content.mux_dialog-content-nobuttons { + bottom: 0px; + margin-bottom: 0px; +} + +.mux_dialogcontainer .mux_dialog .mux_dialog-content .mux_dialog-searchbar { + width: 100%; + height: 35px; + border-radius: var(--mux-rounding); +} + +.mux_dialogcontainer .mux_dialog .mux_dialog-content .mux_dialog-searchbar .mux_input { + width: 100%; + height: 100%; +} + +.mux_dialogcontainer .mux_dialog .mux_dialog-content .mux_properties { + padding: var(--mux-edge-offset) 0px; +} + +.mux_dialogcontainer .mux_dialog .mux_dialog-actionbar { + position: absolute; + bottom: var(--mux-edge-offset); + left: var(--mux-edge-offset); + right: var(--mux-edge-offset); + border-top: 1px solid var(--mux-border-color); + height: 45px; +} + +.mux_dialogcontainer .mux_dialog .mux_dialog-actionbar .mux_dialog-buttons { + display: flex; + justify-content: flex-end; + position: absolute; + bottom: 0px; + right: 0px; +} + +.mux_dialogcontainer .mux_dialog .mux_dialog-actionbar .mux_dialog-buttons .mux_button { + margin-left: var(--mux-edge-offset); +} + +.mux_dialogcontainer .mux_dialog .mux_row { + box-sizing: border-box; + padding: 0px var(--mux-edge-offset); +} + +.mux_cards { + width: 100%; + box-sizing: border-box; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); +} + +.mux_cards.mux_cards-dragging .mux_cards-item { + border: var(--mux-border-transparent) !important; +} + +.mux_cards.mux_cards-oneperrow { + display: flex; + flex-direction: column; +} + +.mux_cards .mux_cards-item-dragging { + position: relative; + height: 100px; + background: #3d3d3d; +} + +.mux_cards .mux_cards-item { + position: relative; + height: 100px; + user-select: none; + box-sizing: border-box; + padding: var(--mux-edge-offset); + border: var(--mux-border-transparent); + transition-duration: var(--mux-transition-hover); + border-radius: var(--mux-rounding); + cursor: pointer; + display: flex; + justify-content: flex-start; + align-items: flex-start; + gap: var(--mux-edge-offset); + color: white; + text-decoration: none; +} + +.mux_cards .mux_cards-item:hover { + border: var(--mux-border-hovering); +} + +.mux_cards .mux_cards-item:hover .mux_cards-item-buttons { + opacity: 1; +} + +.mux_cards .mux_cards-item.mux_cards-item-disabled { + cursor: default; +} + +.mux_cards .mux_cards-item.mux_cards-item-disabled .mux_cards-item-thumbnail, +.mux_cards .mux_cards-item.mux_cards-item-disabled .mux_cards-item-info { + opacity: 0.7; +} + +.mux_cards .mux_cards-item .mux_cards-item-thumbnail { + height: 100%; + border-radius: var(--mux-rounding); + border: none; + overflow: hidden; + pointer-events: none; + flex-shrink: 0; +} + +.mux_cards .mux_cards-item .mux_cards-item-info { + display: flex; + justify-content: flex-start; + align-items: flex-start; + flex-direction: column; + gap: var(--mux-edge-offset-tiny); +} + +.mux_cards .mux_cards-item .mux_cards-item-info span.highlight { + color: var(--mux-primary-color); +} + +.mux_cards .mux_cards-item .mux_cards-item-buttons { + position: absolute; + right: var(--mux-edge-offset-tiny); + height: calc(100% - 10px); + margin: -5px 0px; + display: flex; + justify-content: space-between; + align-items: flex-start; + flex-direction: column; + transition-duration: var(--mux-transition-hover); + opacity: 0; +} + +.mux_cards .mux_cards-item .mux_cards-item-buttons .mux_cards-item-button { + width: 26px; + height: 26px; + display: flex; + justify-content: center; + align-items: center; + box-sizing: border-box; + border-radius: var(--mux-rounding); + border: var(--mux-border-transparent); + transition-duration: var(--mux-transition-hover); + color: white; + cursor: pointer; +} + +.mux_cards .mux_cards-item .mux_cards-item-buttons .mux_cards-item-button:hover { + border: var(--mux-border-hovering); + opacity: 1; +} + +.mux_cards .mux_cards-item .mux_cards-item-buttons .mux_cards-item-button span { + font-size: 20px; +} + +.mux_icongrid { + width: 100%; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + align-items: flex-start; +} + +.mux_icongrid.mux_icongrid-dragging .mux_icongrid-item:hover { + border: var(--mux-border-transparent) !important; +} + +.mux_icongrid .mux_icongrid-item { + width: 104px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + box-sizing: border-box; + border-radius: var(--mux-rounding); + border: var(--mux-border-transparent); + padding: var(--mux-edge-offset); + transition-duration: 0.1s; + margin: calc(var(--mux-edge-offset) / 2); + user-select: none; +} + +.mux_icongrid .mux_icongrid-item:hover { + border: var(--mux-border-hovering); +} + +.mux_icongrid .mux_icongrid-item.mux_icongrid-item-dragging { + background: var(--mux-disabled-color); + border: var(--mux-border-transparent) !important; +} + +.mux_icongrid .mux_icongrid-item.mux_icongrid-item-dragging:hover { + border: var(--mux-border-transparent) !important; +} + +.mux_icongrid .mux_icongrid-item .mux_icongrid-item-icon { + width: calc(75px - var(--mux-edge-offset)); +} + +.mux_icongrid .mux_icongrid-item .mux_text { + margin-top: var(--mux-edge-offset-tiny); + max-width: 100%; + text-align: center; + word-break: break-all; +} + +.mux_row { + width: 100%; + display: flex; + justify-content: flex-start; + align-items: center; + gap: var(--mux-edge-offset); + margin-bottom: var(--mux-edge-offset); + transition-duration: 0.2s; +} + +.mux_row:last-child { + margin-bottom: 0px; +} + +.mux_row.mux_spread .mux_row-label, +.mux_row.mux_spread .mux_row-content { + width: 50%; +} + +.mux_row.mux_disabled { + opacity: 0.3; + filter: grayscale(0.5); + cursor: not-allowed; +} + +.mux_row.mux_disabled .mux_row-content { + pointer-events: none; +} + +.mux_row.mux_indent { + margin-left: 10px; + width: calc(100% - 10px); +} + +.mux_row .mux_row-content { + width: 100%; +} + +.mux_palette { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.4196078431); + z-index: 100; + display: flex; + justify-content: center; + align-items: flex-start; + transition-duration: var(--mux-transition-hover); + opacity: 0; + box-sizing: border-box; + padding-top: 20px; +} + +.mux_palette .mux_palette-inner { + width: 400px; + max-width: calc(100% - 100px); + max-height: calc(100% - 100px); + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + transition-timing-function: ease-in; + transition-duration: var(--mux-transition-hover); + opacity: 0; + transform-origin: 50% 50%; + transform: scale(0.8); + padding: 10px; + background: var(--mux-panel-color); + box-shadow: 0 0 20px #000; + border-radius: var(--mux-rounding); + overflow: hidden; +} + +.mux_palette .mux_palette-inner .mux_palette-input { + border: 1px solid var(--mux-border-color); + border-radius: var(--mux-rounding); + width: 100%; + box-sizing: border-box; + padding: 10px 10px; + background: var(--mux-panel-sub-color); + color: white; + font-size: 12px; +} + +.mux_palette .mux_palette-inner .mux_palette-input:active, .mux_palette .mux_palette-inner .mux_palette-input:focus { + outline: none; +} + +.mux_palette .mux_palette-inner .mux_palette-results { + width: 100%; + max-height: 420px; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: flex-start; + overflow-y: auto; +} + +.mux_palette .mux_palette-inner .mux_palette-results .mux_palette-results-header, +.mux_palette .mux_palette-inner .mux_palette-results .mux_palette-results-label { + width: 100%; + display: flex; + justify-content: center; + align-items: center; + font-size: 10px; + color: #c7c7c7; + gap: var(--mux-edge-offset-tiny); + text-shadow: 0 0 8px #000; + height: 20px; + margin-top: var(--mux-edge-offset); +} + +.mux_palette .mux_palette-inner .mux_palette-results .mux_palette-results-header span.material-symbols-outlined, +.mux_palette .mux_palette-inner .mux_palette-results .mux_palette-results-label span.material-symbols-outlined { + font-size: 16px; +} + +.mux_palette .mux_palette-inner .mux_palette-results .mux_palette-results-header { + margin-top: 0px; + margin-bottom: var(--mux-edge-offset); +} + +.mux_palette .mux_palette-inner .mux_palette-results .mux_palette-results-item { + position: relative; + width: 100%; + display: flex; + justify-content: flex-start; + align-items: center; + gap: var(--mux-edge-offset); + box-sizing: border-box; + padding: var(--mux-edge-offset); + color: #fff; + border: var(--mux-border-transparent); + cursor: pointer; + transition-duration: var(--mux-transition-hover); + text-decoration: none; + border-radius: var(--mux-rounding); +} + +.mux_palette .mux_palette-inner .mux_palette-results .mux_palette-results-item:hover { + border: var(--mux-border-hovering); +} + +.mux_palette .mux_palette-inner .mux_palette-results .mux_palette-results-item:first-child { + margin-top: var(--mux-edge-offset); +} + +.mux_palette .mux_palette-inner .mux_palette-results .mux_palette-results-item.mux_palette-results-item-selected { + border: var(--mux-border-active); +} + +.mux_palette .mux_palette-inner .mux_palette-results .mux_palette-results-item.mux_palette-results-item-selected .mux_palette-results-item-selectedtext { + opacity: 1; +} + +.mux_palette .mux_palette-inner .mux_palette-results .mux_palette-results-item.mux_palette-results-item-separator { + border-top: 2px solid var(--separator-color) !important; +} + +.mux_palette .mux_palette-inner .mux_palette-results .mux_palette-results-item .mux_palette-results-item-text { + display: flex; + justify-content: flex-start; + align-items: center; + gap: var(--mux-edge-offset-tiny); +} + +.mux_palette .mux_palette-inner .mux_palette-results .mux_palette-results-item .mux_palette-results-item-text .mux_palette-results-item-text-sub { + color: #a5a5a5; +} + +.mux_palette .mux_palette-inner .mux_palette-results .mux_palette-results-item .mux_palette-results-item-selectedtext { + position: absolute; + right: var(--mux-edge-offset); + color: #8b8b8b; + background: var(--background); + padding: 2px 5px; + border-radius: var(--mux-rounding); + transition-duration: var(--mux-transition-hover); + pointer-events: none; + opacity: 0; +} + +.mux_palette .material-symbols-outlined { + font-size: 20px; + margin: -2px 0px; +} + +.mux_palette .mux_palette-results-item-icon { + width: 20px; + height: 20px; + margin: -2px 0px; + object-fit: contain; +} + +.mux_palette.mux_palette-checkboxes .mux_palette-results-item.mux_palette-results-item-checked .mux_palette-results-item-checkbox span { + display: block; +} + +.mux_palette.mux_palette-checkboxes .mux_palette-results-item .mux_palette-results-item-checkbox { + width: 20px; + height: 20px; + margin: -2px 0; + background: var(--mux-selected-color); + border-radius: var(--mux-rounding); +} + +.mux_palette.mux_palette-checkboxes .mux_palette-results-item .mux_palette-results-item-checkbox span { + display: none; +} + +.mux_imageviewer { + position: relative; + width: 100%; + height: 100%; + user-select: none; + overflow: hidden; +} + +.mux_imageviewer.mux_imageviewer-galleryopen .mux_imageviewer-wrapper { + bottom: 100px; +} + +.mux_imageviewer.mux_imageviewer-galleryopen .mux_imageviewer-gallery { + pointer-events: auto; + opacity: 1; +} + +.mux_imageviewer .mux_imageviewer-wrapper { + position: absolute; + inset: 0px; + overflow: hidden; + transition-duration: var(--mux-transition-hover); +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-loader { + position: absolute; + inset: 0px; + display: flex; + justify-content: center; + align-items: center; + gap: var(--mux-edge-offset); +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-loader .mux_imageviewer-loader-dot { + width: 30px; + height: 30px; + border-radius: var(--mux-rounding); +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-loader .mux_imageviewer-loader-dot:nth-child(1) { + animation: MuxImageViewerLoader 1s 0ms linear infinite; +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-loader .mux_imageviewer-loader-dot:nth-child(2) { + animation: MuxImageViewerLoader 1s 250ms linear infinite; +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-loader .mux_imageviewer-loader-dot:nth-child(3) { + animation: MuxImageViewerLoader 1s 500ms linear infinite; +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-loader .mux_imageviewer-loader-dot:nth-child(4) { + animation: MuxImageViewerLoader 1s 750ms linear infinite; +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-image { + position: absolute; + z-index: 1; + object-fit: contain; + pointer-events: none; + transform-origin: top left; + opacity: 0; + transition: opacity 0.3s; +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-unsupported { + position: absolute; + inset: 0px; + display: none; + justify-content: center; + align-items: center; + flex-direction: column; + gap: calc(var(--mux-edge-offset) * 2); +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-unsupported .mux_imageviewer-unsupported-icon { + font-size: 60px; +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-unsupported .mux_button { + gap: var(--mux-edge-offset); +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-unsupported .mux_button span.material-symbols-outlined { + color: #fff; +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-navigation { + position: absolute; + z-index: 2; + top: 0px; + bottom: 0px; + display: flex; + align-items: center; + opacity: 0.7; + padding: 0px var(--mux-edge-offset); + cursor: pointer; + text-shadow: 0px 0px 10px black; + transition-duration: var(--mux-transition-hover); +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-navigation:hover { + opacity: 1; +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-navigation.disabled { + opacity: 0.2; + cursor: unset; +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-navigation.disabled:hover { + opacity: 0.2; +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-navigation.mux_imageviewer-navigation-right { + right: 0px; +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-navigation.mux_imageviewer-navigation-left { + left: 0px; +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-navigation span { + font-size: 50px; +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-controlscontainer { + position: absolute; + z-index: 2; + left: 0px; + right: 0px; + bottom: 0px; + padding: 0px var(--mux-edge-offset) var(--mux-edge-offset) var(--mux-edge-offset); + display: flex; + justify-content: center; + pointer-events: none; +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-controlscontainer .mux_imageviewer-controls { + background: var(--mux-panel-color); + border-radius: var(--mux-rounding); + box-shadow: var(--mux-panel-shadow); + pointer-events: auto; + display: flex; + justify-content: center; + align-items: center; + opacity: 0.6; + transition-duration: var(--mux-transition-hover); +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-controlscontainer .mux_imageviewer-controls:hover { + opacity: 1; +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-controlscontainer .mux_imageviewer-controls .mux_imageviewer-control { + position: relative; + width: 40px; + height: 40px; + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + border: var(--mux-border-transparent); + transition-duration: var(--mux-transition-hover); +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-controlscontainer .mux_imageviewer-controls .mux_imageviewer-control:hover { + border: var(--mux-border-hovering); +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-controlscontainer .mux_imageviewer-controls .mux_imageviewer-control:first-child { + border-top-left-radius: var(--mux-rounding); + border-bottom-left-radius: var(--mux-rounding); +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-controlscontainer .mux_imageviewer-controls .mux_imageviewer-control:last-child { + border-top-right-radius: var(--mux-rounding); + border-bottom-right-radius: var(--mux-rounding); +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-controlscontainer .mux_imageviewer-controls .mux_imageviewer-control.mux_active { + background: rgba(255, 255, 255, 0.0392156863); +} + +.mux_imageviewer .mux_imageviewer-wrapper .mux_imageviewer-controlscontainer .mux_imageviewer-controls .mux_imageviewer-control .mux_imageviewer-control-badge { + position: absolute; + bottom: 3px; + right: 3px; + background: var(--mux-selected-color); + padding: 1px 3px; + border-radius: var(--mux-rounding); +} + +.mux_imageviewer .mux_imageviewer-gallery { + position: absolute; + bottom: 0px; + left: 0px; + right: 0px; + height: 100px; + background: var(--mux-panel-color); + z-index: 1; + white-space: nowrap; + overflow-y: hidden; + overflow-x: auto; + box-sizing: border-box; + padding: var(--mux-edge-offset) 0px; + pointer-events: none; + opacity: 0; + transition-duration: var(--mux-transition-hover); +} + +.mux_imageviewer .mux_imageviewer-gallery .mux_imageviewer-gallery-thumb { + height: 100%; + margin-right: var(--mux-edge-offset); + border-radius: var(--mux-rounding); + box-sizing: border-box; + border: var(--mux-border-transparent); + transition-duration: var(--mux-transition-hover); + cursor: pointer; +} + +.mux_imageviewer .mux_imageviewer-gallery .mux_imageviewer-gallery-thumb:hover { + border: var(--mux-border-hovering); + opacity: 0.7; +} + +.mux_imageviewer .mux_imageviewer-gallery .mux_imageviewer-gallery-thumb:first-child { + margin-left: 40%; +} + +.mux_imageviewer .mux_imageviewer-gallery .mux_imageviewer-gallery-thumb:last-child { + margin-right: 40%; +} + +.mux_imageviewer .mux_imageviewer-gallery .mux_imageviewer-gallery-thumb.active { + border: var(--mux-border-active); + opacity: 0.4; + cursor: unset; +} + +@keyframes MuxImageViewerLoader { + 0% { + background: var(--mux-border-color); + } + 10% { + background: var(--mux-primary-color); + } + 30% { + background: var(--mux-primary-color); + } + 40% { + background: var(--mux-border-color); + } + 100% { + background: var(--mux-border-color); + } +} +.mux_resizer { + position: absolute; +} + +.mux_resizer.mux_resizer-block { + transition-duration: 0.1s; +} + +.mux_resizer.mux_resizer-closed .mux_resizer-grab-handle { + display: none !important; +} + +.mux_resizer.mux_resizer-closed .mux_resizer-grab-open { + display: block !important; +} + +.mux_resizer.mux_resizer-closed .mux_resizer-grab span { + font-size: 34px !important; +} + +.mux_resizer.mux_resizer-closed.mux_resizer-direction-right .mux_resizer-grab { + margin-left: 10px; + border-radius: 0px var(--mux-rounding) var(--mux-rounding) 0px; +} + +.mux_resizer.mux_resizer-closed.mux_resizer-direction-left .mux_resizer-grab { + margin-right: 10px; + border-radius: var(--mux-rounding) 0px 0px var(--mux-rounding); +} + +.mux_resizer.mux_resizer-closed.mux_resizer-direction-up .mux_resizer-grab { + margin-bottom: 22px; + border-radius: 0px 0px var(--mux-rounding) var(--mux-rounding); +} + +.mux_resizer.mux_resizer-closed.mux_resizer-direction-up .mux_resizer-grab { + margin-top: 10px; + border-radius: var(--mux-rounding) var(--mux-rounding) 0px 0px; +} + +.mux_resizer.mux_resizer-moving { + user-select: none; +} + +.mux_resizer.mux_resizer-moving * { + pointer-events: none; +} + +.mux_resizer .mux_resizer-area { + position: absolute; + display: flex; + justify-content: center; + align-items: center; + z-index: 100; + pointer-events: auto; +} + +.mux_resizer .mux_resizer-area .mux_resizer-grab { + background: var(--mux-border-color); + border-radius: var(--mux-rounding); + display: flex; + justify-content: center; + align-items: center; + user-select: none; +} + +.mux_resizer .mux_resizer-area .mux_resizer-grab:hover span { + opacity: 1; +} + +.mux_resizer .mux_resizer-area .mux_resizer-grab span { + opacity: 0.7; + font-size: 18px; + pointer-events: none; +} + +.mux_resizer .mux_resizer-area .mux_resizer-grab .mux_resizer-grab-handle { + display: block; +} + +.mux_resizer .mux_resizer-area .mux_resizer-grab .mux_resizer-grab-open { + display: none; +} + +.mux_resizer.mux_resizer-direction-right .mux_resizer-area, .mux_resizer.mux_resizer-direction-left .mux_resizer-area { + height: 100%; + width: 7px; + top: 0px; + cursor: ew-resize; +} + +.mux_resizer.mux_resizer-direction-right .mux_resizer-area .mux_resizer-grab, .mux_resizer.mux_resizer-direction-left .mux_resizer-area .mux_resizer-grab { + width: 12px; + height: 30px; +} + +.mux_resizer.mux_resizer-direction-up .mux_resizer-area, .mux_resizer.mux_resizer-direction-down .mux_resizer-area { + width: 100%; + height: 7px; + left: 0px; + cursor: ns-resize; +} + +.mux_resizer.mux_resizer-direction-up .mux_resizer-area .mux_resizer-grab, .mux_resizer.mux_resizer-direction-down .mux_resizer-area .mux_resizer-grab { + width: 30px; + height: 12px; +} + +.mux_resizer.mux_resizer-direction-left .mux_resizer-area { + left: -4px; +} + +.mux_resizer.mux_resizer-direction-right .mux_resizer-area { + right: -4px; +} + +.mux_resizer.mux_resizer-direction-up .mux_resizer-area { + top: -4px; +} + +.mux_resizer.mux_resizer-direction-down .mux_resizer-area { + bottom: -4px; +} + +.mux_table { + width: 100%; + height: 100%; + overflow-y: auto; +} + +.mux_table.mux_nopointer { + cursor: ew-resize; +} + +.mux_table.mux_nopointer * { + pointer-events: none !important; +} + +.mux_table table { + padding: 0px; + border-radius: 0px; + border-collapse: collapse; + user-select: none; + --row-even-color: #282828; + --row-odd-color: #222222; + --row-child-even-color: #181818; + --row-child-odd-color:#1c1c1c; +} + +.mux_table table.mux_table-dragging tr { + opacity: 0.4; +} + +.mux_table table.mux_table-dragging tr:first-child { + opacity: 1; +} + +.mux_table table tr { + width: unset; + height: unset; + border: 0px; + background: transparent; + box-sizing: border-box; + border-left: 2px solid transparent; + border-right: 2px solid transparent; + outline: 2px solid transparent; + background: var(--row-even-color); + display: none; +} + +.mux_table table tr:first-child { + display: table-row; + border: 0px; + background: transparent; +} + +.mux_table table tr.mux_table-row-visible { + display: table-row; +} + +.mux_table table tr.mux_table-row-odd { + background: var(--row-odd-color); +} + +.mux_table table tr.mux_table-row-dragging { + opacity: 1; +} + +.mux_table table tr.mux_table-row-selected { + background: #696969 !important; +} + +.mux_table table tr.mux_table-row-selected .mux_text { + font-weight: 700; + font-style: italic; +} + +.mux_table table tr.mux_table-row-active { + background: var(--highlight-border-color) !important; +} + +.mux_table table tr.mux_table-row-active.mux_table-row-child { + background: var(--highlight-offset-color) !important; +} + +.mux_table table tr.mux_table-row-outline { + border-left: 2px solid var(--highlight-color); + border-right: 2px solid var(--highlight-color); + outline: 2px solid var(--highlight-color); +} + +.mux_table table tr.mux_table-row-child { + background: var(--row-child-even-color); +} + +.mux_table table tr.mux_table-row-child.mux_table-row-odd { + background: var(--row-child-odd-color); +} + +.mux_table table tr.mux_table-row-child td { + padding: 0px 5px; +} + +.mux_table table tr.mux_table-row-child .mux_text { + color: #9d9d9d; + font-weight: 400 !important; +} + +.mux_table table tr.mux_table-row-hidden { + display: none; +} + +.mux_table table tr th, +.mux_table table tr td { + padding: 2px 5px; + overflow: hidden; +} + +.mux_table table tr th:first-child, +.mux_table table tr td:first-child { + padding-left: var(--edge-offset); +} + +.mux_table table tr th { + white-space: nowrap; + pointer-events: none; +} + +.mux_table table tr th.mux_table-noborder, .mux_table table tr th:first-child { + border-left: 0px; +} + +.mux_table table tr th .mux_table-center { + justify-content: center; +} + +.mux_table table tr td .mux_table-edit-input { + position: absolute; + inset: 0px; + z-index: 2; + display: none; + justify-content: flex-start; + align-items: center; +} + +.mux_table table tr td .mux_table-edit-input .mux_text { + padding: 0px !important; +} + +.mux_table table tr td .mux_table-edit-input .mux_table-edit-input-prefix { + position: unset !important; + margin-left: 5px; + margin-right: -2px; +} + +.mux_table table tr td .mux_table-edit-input input { + width: 100%; + height: 100%; + box-sizing: border-box; + margin: 0; +} + +.mux_table table tr td .mux_table-image { + display: flex; + justify-content: center; + align-items: center; +} + +.mux_table table tr td .mux_table-image span { + font-size: 20px; +} + +.mux_table table tr td .mux_table-text { + position: relative; + width: calc(100% + 10px); + height: 24px; + margin-left: -5px; + display: flex; + align-items: center; +} + +.mux_table table tr td .mux_table-text.mux_table-center { + text-align: center; +} + +.mux_table table tr td .mux_table-text .mux_text { + position: absolute; + inset: 0px; + z-index: 1; + padding: 0px 5px; + box-sizing: border-box; + display: flex; + align-items: center; + white-space: nowrap; + font-weight: 600; +} + +.mux_table table tr td .mux_table-text .mux_text span { + margin-right: 3px; +} + +.mux_table table tr td .mux_table-text .mux_text span:last-child { + margin-right: 0px; +} + +.mux_table table tr td .mux_table-text .mux_text .highlight { + color: var(--highlight-color); +} + +.mux_table table tr td .mux_table-textsuggestions { + position: relative; +} + +.mux_table table tr td .mux_table-textsuggestions span.material-symbols-outlined { + position: absolute; + right: 3px; +} + +.mux_table table tr td .mux_table-textsuggestions .mux_input { + height: 24px; +} + +.mux_table table tr td .mux_table-subtext { + margin-left: 5px; + color: #c9c9c9; + margin-top: -5px; + margin-bottom: 5px; + font-style: italic; +} + +.mux_table table tr td .mux_table-number .mux_text { + justify-content: center; +} + +.mux_table table tr td .mux_table-number input { + text-align: center; +} + +.mux_table table tr td .mux_table-button { + display: flex; + justify-content: flex-start; + align-items: center; +} + +.mux_table table tr td .mux_table-button .mux_table-button-btn { + font-size: 10px; + border: 1px solid var(--separator-color); + padding: 2px 4px; + border-radius: var(--rounding); + background: var(--panel-color); + cursor: pointer; + transition-duration: 0.2s; +} + +.mux_table table tr td .mux_table-button .mux_table-button-btn:hover { + background: var(--separator-color); +} + +.mux_table table tr td .mux_table-duration .mux_text { + justify-content: center; +} + +.mux_table table tr td .mux_table-duration input { + text-align: center; +} + +.mux_table table tr td .mux_table-select { + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.mux_table table tr td .mux_table-select:hover .mux_table-select-arrow { + margin-top: 3px; +} + +.mux_table table tr td .mux_table-select span { + font-size: 24px; +} + +.mux_table table tr td .mux_table-select .mux_table-select-arrow { + font-size: 16px; + transition-duration: 0.1s; +} + +.mux_table table tr td .mux_table-icons { + display: flex; + justify-content: flex-start; + align-items: center; + cursor: pointer; + gap: 2px; +} + +.mux_table table tr td .mux_table-icons .mux_table-icon { + width: 20px; + height: 20px; + display: flex; + justify-content: center; + align-items: center; + background: rgba(255, 255, 255, 0.0588235294); + border-radius: var(--rounding); + border: var(--clickable-border-transparent); + transition-duration: 0.2s; +} + +.mux_table table tr td .mux_table-icons .mux_table-icon:hover { + border: var(--clickable-border-hovering); +} + +.mux_table table tr td .mux_table-icons .mux_table-icon span { + font-size: 20px; +} + +.mux_table table tr td .mux_table-property .mux_property-value { + height: 35px; +} + +.mux_textarea { + width: 100%; + border: var(--mux-border-transparent); + background: inherit; + color: var(--mux-text-color); + padding: var(--mux-edge-offset); + font-size: 11px; + border-radius: var(--mux-rounding); + transition-duration: var(--mux-transition-hover); + box-sizing: border-box; + font-family: Montserrat, sans-serif; +} + +.mux_textarea:hover { + border: var(--mux-border-hovering); +} + +.mux_textarea:focus { + outline: none; + border: var(--mux-border-active); +} + +.mux_textarea[disabled] { + opacity: 0.5; + cursor: not-allowed; +} + +.mux_textarea.mux_textarea-alwaysborder { + border: var(--mux-border-hovering); +} + +.mux_textarea.mux_textarea-noborder:hover, .mux_textarea.mux_textarea-noborder:focus { + border: var(--mux-border-transparent); +} + +.mux_notifications { + position: fixed; + bottom: var(--mux-edge-offset); + right: var(--mux-edge-offset); + width: 400px; + max-width: calc(100% - var(--mux-edge-offset) * 2); + z-index: 100; + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-end; + gap: var(--mux-edge-offset-tiny); + pointer-events: none; +} + +.mux_notifications .mux_notification { + width: 100%; + box-sizing: border-box; + padding: var(--mux-edge-offset); + background: var(--mux-panel-color); + box-shadow: var(--mux-panel-shadow); + border-radius: var(--mux-rounding); + display: flex; + justify-content: flex-start; + align-items: center; + gap: var(--mux-edge-offset); + opacity: 0; + transform: translateX(100%); + transition-duration: var(--mux-transition-animation); + pointer-events: auto; +} + +.mux_notifications .mux_notification.mux_notification-info .mux_notification-icon { + color: #fff; +} + +.mux_notifications .mux_notification.mux_notification-error .mux_notification-icon { + color: var(--mux-color-red); +} + +.mux_notifications .mux_notification.mux_notification-warning .mux_notification-icon { + color: var(--mux-color-yellow); +} + +.mux_notifications .mux_notification.mux_notification-success .mux_notification-icon { + color: var(--mux-color-green); +} + +.mux_notifications .mux_notification .mux_text { + width: 100%; +} + +.mux_notifications .mux_notification .mux_notification-action { + background: var(--mux-selected-color); + padding: 4px; + font-size: 18px; + border-radius: var(--mux-rounding); + transition-duration: var(--mux-transition-hover); + cursor: pointer; +} + +.mux_notifications .mux_notification .mux_notification-action:hover { + opacity: 0.5; +} + +.mux_loader { + position: fixed; + inset: 0px; + z-index: 101; + background: rgba(0, 0, 0, 0.6196078431); + backdrop-filter: blur(4px); + -webkit-backdrop-filter: blur(4px); + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + gap: calc(var(--mux-edge-offset) * 2); +} + +.mux_loader .material-symbols-outlined { + font-size: 100px; + clip-path: polygon(0px 0px, 100% 0px, 100% 80%, 0px 80%); + animation: MuxLoader 2s linear infinite; + font-weight: 900; +} + +.mux_loader .mux_loader-progress { + width: 150px; + height: 12px; + background: rgba(255, 255, 255, 0.0705882353); + border-radius: var(--mux-rounding); + overflow: hidden; +} + +.mux_loader .mux_loader-progress .mux_loader-progress-value { + position: relative; + width: var(--progress); + height: 100%; + background: #fff; + transition-duration: var(--mux-transition-hover); + transition-timing-function: linear; +} + +.mux_loader .mux_loader-progress .mux_loader-progress-value .mux_loader-progress-label { + position: absolute; + inset: 0px; + display: flex; + justify-content: flex-end; + align-items: center; + color: black; + padding-right: 3px; + font-family: monospace; + font-size: 12px; +} + +@keyframes MuxLoader { + 0% { + transform: rotate(0deg); + clip-path: polygon(0px 0px, 100% 0px, 100% 40%, 0px 40%); + } + 50% { + clip-path: polygon(0px 0px, 100% 0px, 100% 60%, 0px 60%); + } + 100% { + transform: rotate(360deg); + clip-path: polygon(0px 0px, 100% 0px, 100% 40%, 0px 40%); + } +} +/* width */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +/* Track */ +::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.0588235294); +} + +/* Handle */ +::-webkit-scrollbar-thumb { + background: #b8b8b8; +} + +/* Handle on hover */ +::-webkit-scrollbar-thumb:hover { + background: #d6d6d6; +} + +:root { + --mux-bg-color: #1e1e1e; + --mux-primary-color: #d73125; + --mux-primary-off-color: #ad271d; + --mux-secondary-color: #4b4b4b; + --mux-disabled-color: #2d2d2d; + --mux-selected-color: #434343; + --mux-panel-color: #2c2c2c; + --mux-panel-shadow: 0px 0px 4px #121212; + --mux-panel-sub-color: #313131; + --mux-border-width: 1px; + --mux-border-color: #444444; + --mux-border-transparent: var(--mux-border-width) solid transparent; + --mux-border-hovering: var(--mux-border-width) solid var(--mux-border-color); + --mux-border-active: var(--mux-border-width) solid var(--mux-primary-color); + --mux-header-size: 14px; + --mux-text-color: #ececec; + --mux-text-size-tiny: 10px; + --mux-text-size-small: 11px; + --mux-text-size-normal: 12px; + --mux-text-size-medium: 16px; + --mux-text-size-big: 20px; + --mux-text-weight: 400; + --mux-header-color: #ffffff; + --mux-header-size-tiny: 10px; + --mux-header-size-small: 12px; + --mux-header-size-normal: 14px; + --mux-header-size-big: 20px; + --mux-header-weight: 600; + --mux-transition-hover: .2s; + --mux-transition-animation: .4s; + --mux-edge-offset: 10px; + --mux-edge-offset-tiny: 5px; + --mux-rounding: 6px; + --mux-color-red: #d73125; + --mux-color-green: #4caf50; + --mux-color-blue: #2196f3; + --mux-color-yellow: #ffde3b; + --mux-color-orange: #ff9800; + --mux-color-purple: #673ab7; +} + +body { + position: absolute; + inset: 0px; + margin: 0px; + border: 0px; + background: var(--mux-bg-color); + color: #fff; + font-family: "Montserrat", sans-serif; +} + + +.ntsh_dashboard { + position: absolute; + inset: 0px; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(600px, 100%), 1fr)); + grid-auto-rows: min-content; + align-items: stretch; + justify-items: stretch; + align-content: start; + overflow-y: auto; + gap: var(--mux-edge-offset); + box-sizing: border-box; + padding: var(--mux-edge-offset); +} +.ntsh_dashboard .ntsh_dashboard-box { + background: var(--mux-selected-color); + box-sizing: border-box; + padding: var(--mux-edge-offset); + border-radius: var(--mux-rounding); +} +.ntsh_dashboard .ntsh_dashboard-box .ntsh_dashboard-box-header { + padding-bottom: var(--mux-edge-offset-tiny); + border-bottom: 1px solid #979797; + margin-bottom: var(--mux-edge-offset-tiny); + font-size: 18px; +} +.ntsh_dashboard .ntsh_dashboard-box .mux_header:not(.ntsh_dashboard-box-header) { + margin-bottom: var(--mux-edge-offset-tiny); +} +.ntsh_dashboard .ntsh_dashboard-unity-parameters .ntsh_dashboard-unity-parameters-loading { + text-align: center; + color: #9d9d9d; +} +.ntsh_dashboard table { + width: 100%; +} +.ntsh_dashboard table.ntsh_vertical tr td { + height: 24px; +} +.ntsh_dashboard table.ntsh_vertical tr td:first-child { + width: min(150px, 20vw); +} +.ntsh_dashboard table.ntsh_center tr td { + text-align: center; +} +.ntsh_dashboard table.ntsh_center tr td .ntsh_status { + margin: 0 auto; +} +.ntsh_dashboard table tr td:has(.ntsh_status) { + width: 30px; +} +.ntsh_dashboard .ntsh_dashboard-error { + display: none; + box-sizing: border-box; + padding: var(--mux-edge-offset-tiny); + border-radius: var(--mux-rounding); + margin-top: var(--mux-edge-offset-tiny); + background: #721e1e; +} +.ntsh_dashboard .ntsh_progress { + position: relative; + background: #2f2f2f; + width: 100%; + height: 20px; + border-radius: 4px; + overflow: hidden; +} +.ntsh_dashboard .ntsh_progress .ntsh_progress-value { + height: 100%; + background: #777777; +} +.ntsh_dashboard .ntsh_progress .ntsh_progress-value.ntsh_progress-smooth { + transition-duration: 0.3s; + transition-timing-function: ease-in-out; +} +.ntsh_dashboard .ntsh_progress .ntsh_progress-value.mux_resizer { + transition-duration: 0s; +} +.ntsh_dashboard .ntsh_progress .ntsh_progress-value.mux_resizer .mux_resizer-grab { + background: var(--mux-primary-color); + border-radius: 4px; + height: 100%; +} +.ntsh_dashboard .ntsh_progress .ntsh_progress-label { + position: absolute; + z-index: 101; + inset: 0px; + display: flex; + justify-content: center; + align-items: center; + font-size: 12px; + color: #fff; + font-weight: 500; + text-shadow: -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000; + pointer-events: none; +} +.ntsh_dashboard .ntsh_status { + width: 24px; + height: 24px; + background: #868686; + border: 4px solid rgba(0, 0, 0, 0.4431372549); + border-radius: 100%; + box-sizing: border-box; +} +.ntsh_dashboard .ntsh_status.ntsh_status-green { + background: #149214; +} +.ntsh_dashboard .ntsh_status.ntsh_status-yellow { + background: #ffbf00; +} +.ntsh_dashboard .ntsh_status.ntsh_status-red { + background: #ff0000; +} +.ntsh_dashboard .ntsh_status.ntsh_status-gray { + background: #868686; +} +.ntsh_dashboard .ntsh_buttons { + width: 100%; + display: flex; + justify-content: flex-end; + flex-wrap: wrap; + gap: var(--mux-edge-offset-tiny); +} +.ntsh_dashboard .ntsh_buttons .ntsh_button { + min-width: 30px; + height: 30px; + box-sizing: border-box; + padding: 0px 4px; + display: flex; + justify-content: center; + align-items: center; + background: #787878; + cursor: pointer; + transition: background 0.2s; +} +.ntsh_dashboard .ntsh_buttons .ntsh_button:hover { + background: #5a5a5a; +} + +.ntsh_tabs { + position: absolute; + inset: 50px 0 0 0; +} +.ntsh_tabs .ntsh_tab { + position: absolute; + inset: 0px; + display: none; +} +.ntsh_tabs .ntsh_tab.ntsh_tab-visible { + display: block; +} + +.ntsh_calibration { + position: absolute; + inset: 0px; + display: flex; + justify-content: center; + align-items: center; + box-sizing: border-box; + padding: var(--mux-edge-offset); +} +.ntsh_calibration .ntsh_calibration-fullscreen { + position: absolute; + top: var(--mux-edge-offset); + right: var(--mux-edge-offset); + transition-duration: 0.2s; + cursor: pointer; +} +.ntsh_calibration .ntsh_calibration-fullscreen:hover { + opacity: 0.7; +} +.ntsh_calibration .ntsh_calibration-fullscreen span { + font-size: 24px; +} +.ntsh_calibration img { + width: 100%; + height: 100%; + object-fit: contain; +} + +:root { + --mux-primary-color: #247476; + --mux-primary-off-color: #1d5253; +} + +body:not(.ntsh_service) .ntsh_buttons { + display: none; +} +body:not(.ntsh_service) .mux_menubar-locater.mux_left .mux_menubar-item { + display: none; +} +body:not(.ntsh_service) .only-service { + display: none; +} +body.ntsh_service .no-service { + display: none; +} + +.sn { + position: absolute; + inset: 0px; + overflow: hidden; +} +.sn .ntsh_menubar { + position: absolute; + top: 0px; + left: 0px; + right: 0px; + height: 100%; +} +.sn .ntsh_menubar .mux_menubar .mux_menubar-item.mux_menubar-item-selected { + background: var(--mux-primary-off-color); +} +.sn .ntsh_logs { + position: absolute; + inset: 0px; + box-sizing: border-box; + padding: var(--mux-edge-offset); + font-family: monospace; + background: black; + overflow-y: auto; +} +.sn .ntsh_logs .ntsh_log.ntsh_log-fill { + height: 100%; + display: flex; + justify-content: center; + align-items: center; + color: #939393; +} +.sn .ntsh_logs .ntsh_log.ntsh_log-normal { + color: #c7c7c7; +} + +/*# sourceMappingURL=style.css.map */ diff --git a/frontend/views/dashboard/style.css.map b/frontend/views/dashboard/style.css.map new file mode 100644 index 0000000..44683e9 --- /dev/null +++ b/frontend/views/dashboard/style.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["node_modules/morphux/style.css","scss/dashboard.scss","scss/tabs.scss","scss/calibration.scss","scss/index.scss"],"names":[],"mappings":"AAAQ;AACR;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAGF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAGF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;AAAA;EAEE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;AAAA;EAEE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;AAAA;EAEE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAGF;EACE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAGJ;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;AAAA;EAEE;EACA;;;AAEF;AAAA;EAEE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;IACE;IACA;;EAEF;IACE;;EAEF;IACE;IACA;;;AAGJ;AACA;EACE;EACA;;;AAGF;AACA;EACE;;;AAGF;AACA;EACE;;;AAGF;AACA;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;;ACz9DF;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAGJ;EACI;;AAKJ;EACI;EACA;;AAIR;EACI;;AAGI;EACI;;AAEA;EACI;;AAQR;EACI;;AAEA;EACI;;AAOJ;EACI;;AAMhB;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;;AAEA;EACI;EACA;EACA;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAKR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;;AC5KhB;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAEA;EACI;;;ACVZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;;;ACtBR;EACI;EACA;;;AAMI;EACI;;AAIA;EACI;;AAIR;EACI;;AAKJ;EACI;;;AAKZ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAGI;EACI;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAGI;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI","file":"style.css"} \ No newline at end of file diff --git a/frontend/views/dashboard/ts/calibration.ts b/frontend/views/dashboard/ts/calibration.ts new file mode 100644 index 0000000..f580a46 --- /dev/null +++ b/frontend/views/dashboard/ts/calibration.ts @@ -0,0 +1,40 @@ +import { Main } from './main'; + +export class Calibration { + private _Main: Main; + + container: HTMLDivElement = document.querySelector('.ntsh_calibration'); + image: HTMLImageElement = this.container.querySelector('img'); + fullscreenButton: HTMLDivElement = this.container.querySelector( + '.ntsh_calibration-fullscreen' + ); + + constructor(Main: Main) { + this._Main = Main; + + this.registerListeners(); + } + + private fetchClock: NodeJS.Timeout; + startFetchClock() { + this.image.src = `/calibrationImage?t=${Date.now()}`; + this.fetchClock = setInterval(() => { + this.image.src = `/calibrationImage?t=${Date.now()}`; + }, 1000); + } + + stopFetchClock() { + clearInterval(this.fetchClock); + } + + private registerListeners() { + this._Main.TabController.registerListener('calibration', (visible) => { + if (visible) this.startFetchClock(); + else this.stopFetchClock(); + }); + + this.fullscreenButton.addEventListener('click', () => { + this.image.requestFullscreen(); + }); + } +} diff --git a/frontend/views/dashboard/ts/dashboard.camerarunner.ts b/frontend/views/dashboard/ts/dashboard.camerarunner.ts new file mode 100644 index 0000000..46b1f9a --- /dev/null +++ b/frontend/views/dashboard/ts/dashboard.camerarunner.ts @@ -0,0 +1,192 @@ +import { MorphFeature } from 'morphux'; +import { Main } from './main'; +import { + formatUptime, + ServiceState, + setStatusState, + StatusType, +} from './utils'; + +const CELCIUS = 'ºC'; + +export class DashboardCameraRunner { + private _Main: Main; + + container: HTMLDivElement = document.querySelector( + '.ntsh_dashboard-camerarunner' + ); + + connectionStatus: HTMLDivElement = this.container.querySelector( + '.ntsh_dashboard-camerarunner-connectionstatus' + ); + connectionInfo: HTMLDivElement = this.container.querySelector( + '.ntsh_dashboard-camerarunner-connectioninfo' + ); + rebootButton: HTMLDivElement = this.container.querySelector( + '.ntsh_dashboard-camerarunner-reboot' + ); + + processStatus: HTMLDivElement = this.container.querySelector( + '.ntsh_dashboard-camerarunner-processstatus' + ); + processInfo: HTMLDivElement = this.container.querySelector( + '.ntsh_dashboard-camerarunner-processinfo' + ); + restartButton: HTMLDivElement = this.container.querySelector( + '.ntsh_dashboard-camerarunner-restart' + ); + + uptimeInfo: HTMLDivElement = this.container.querySelector( + '.ntsh_dashboard-camerarunner-uptime' + ); + + errorContainer: HTMLDivElement = this.container.querySelector( + '.ntsh_dashboard-camerarunner-error' + ); + errorText: HTMLDivElement = this.container.querySelector( + '.ntsh_dashboard-camerarunner-errortext' + ); + + constructor(Main: Main) { + this._Main = Main; + + this.registerListeners(); + } + + updateState(state: CameraRunnerStatus) { + // ----------- Connection ----------- + setStatusState( + this.connectionStatus, + { + CONNECTING: 'yellow', + CONNECTED: 'green', + DISCONNECTED: 'red', + FAILED: 'red', + }[state.state] as StatusType + ); + this.connectionInfo.innerText = state.message ?? ''; + + // ----------- Process ----------- + if (state.state != 'CONNECTED') { + state.processStatus.state = 'STOPPED'; + state.processStatus.message = 'Not connected'; + state.processStatus.startTime = -1; + + this.restartButton.style.display = 'none'; + this.rebootButton.style.display = 'none'; + } else { + this.rebootButton.style.display = 'flex'; + + if (state.processStatus.state == 'RUNNING') + this.restartButton.style.display = 'flex'; + else this.restartButton.style.display = 'none'; + } + + setStatusState( + this.processStatus, + { + RUNNING: 'green', + STOPPED: 'gray', + STARTING: 'yellow', + PROBLEM: 'red', + }[state.processStatus.state] as StatusType + ); + this.processInfo.innerText = state.processStatus.message ?? ''; + + // ----------- Uptime ----------- + const uptimeSeconds = + state.processStatus.startTime == -1 + ? -1 + : (Date.now() - state.processStatus.startTime) / 1000; + this.uptimeInfo.innerText = formatUptime(uptimeSeconds); + + // ----------- Error ----------- + const errors: string[] = []; + if ((state?.error ?? '').trim().length > 0) errors.push(state.error); + if ((state?.processStatus?.error ?? '').trim().length > 0) + errors.push(state.processStatus.error); + if (errors.length > 0) { + this.errorText.innerText = errors.join('\n'); + this.errorContainer.style.display = 'block'; + } else { + this.errorContainer.style.display = 'none'; + this.errorText.innerText = ''; + } + + this._Main.Logs.setCameraLogs(state.processStatus.output.current); + } + + registerListeners() { + this._Main.socket.on( + 'cameraRunnerState', + (state: CameraRunnerStatus) => { + this.updateState(state); + } + ); + + this.restartButton.addEventListener('click', async () => { + this.executeCommand( + 'restart', + 'Are you sure you want to restart the Camera Runner process?' + ); + }); + + this.rebootButton.addEventListener('click', async () => { + this.executeCommand( + 'reboot', + 'Are you sure you want to reboot the Camera Runner machine?' + ); + }); + } + + private async executeCommand(command: string, message: string) { + const confirmed = await MorphFeature.Confirm({ + title: 'Are you sure?', + message, + }); + if (!confirmed) return; + + MorphFeature.Loader({ + active: true, + message: `Requesting Camera Runner ${command}...`, + }); + this._Main.socket.emit( + 'cameraRunner', + command, + (response: { succeed: boolean; message?: string }) => { + MorphFeature.Loader({ active: false }); + + if (!response.succeed) + return MorphFeature.Alert({ + title: 'Error', + message: response.message, + }); + + MorphFeature.Notification({ + level: 'success', + message: `Camera Runner is ${command}ing...`, + }); + } + ); + } +} + +interface CameraRunnerStatus { + state: ServiceState; + message?: string; + error?: string; + + processStatus: ProcessStatus; +} + +export type ProcessStatusState = 'RUNNING' | 'STOPPED' | 'STARTING' | 'PROBLEM'; + +interface ProcessStatusSimple { + state: ProcessStatusState; + message?: string; + error?: string; +} +interface ProcessStatus extends ProcessStatusSimple { + startTime: number; + output: { current: string[]; last: string[] }; +} diff --git a/frontend/views/dashboard/ts/dashboard.unity.ts b/frontend/views/dashboard/ts/dashboard.unity.ts new file mode 100644 index 0000000..218b020 --- /dev/null +++ b/frontend/views/dashboard/ts/dashboard.unity.ts @@ -0,0 +1,353 @@ +import { ce, MorphComponent, MorphFeature } from 'morphux'; +import { Main } from './main'; +import { + createProgress, + formatUptime, + ServiceState, + setProgressState, + setStatusState, + StatusType, +} from './utils'; + +export class DashboardUnity { + private _Main: Main; + + container: HTMLDivElement = document.querySelector('.ntsh_dashboard-unity'); + + processStatus: HTMLDivElement = document.querySelector( + '.ntsh_dashboard-unity-processstatus' + ); + processInfo: HTMLDivElement = document.querySelector( + '.ntsh_dashboard-unity-processinfo' + ); + restartButton: HTMLDivElement = document.querySelector( + '.ntsh_dashboard-unity-restart' + ); + + uptimeInfo: HTMLDivElement = document.querySelector( + '.ntsh_dashboard-unity-uptime' + ); + + webSocketStatus: HTMLDivElement = document.querySelector( + '.ntsh_dashboard-unity-websocketstatus' + ); + webSocketInfo: HTMLDivElement = document.querySelector( + '.ntsh_dashboard-unity-websocketinfo' + ); + + zedStreamStatus: HTMLDivElement = document.querySelector( + '.ntsh_dashboard-unity-zedstreamstatus' + ); + zedStreamInfo: HTMLDivElement = document.querySelector( + '.ntsh_dashboard-unity-zedstreaminfo' + ); + + zedStreamFps: HTMLDivElement = document.querySelector( + '.ntsh_dashboard-unity-zedstreamfps' + ); + zedStreamPath: HTMLDivElement = document.querySelector( + '.ntsh_dashboard-unity-zedstreampath' + ); + + timelineWatching: HTMLDivElement = document.querySelector( + '.ntsh_dashboard-unity-timeline-watching' + ); + timelineStanding: HTMLDivElement = document.querySelector( + '.ntsh_dashboard-unity-timeline-standing' + ); + timelineProgress: HTMLDivElement = document.querySelector( + '.ntsh_dashboard-unity-timeline-progress' + ); + + parametersTable: HTMLTableElement = document.querySelector( + '.ntsh_dashboard-unity-parameters' + ); + + errorContainer: HTMLDivElement = document.querySelector( + '.ntsh_dashboard-unity-error' + ); + errorText: HTMLDivElement = document.querySelector( + '.ntsh_dashboard-unity-errortext' + ); + + constructor(Main: Main) { + this._Main = Main; + + this.registerListeners(); + } + + private runnerError: string; + updateRunnerState(state: UnityRunnerStatus) { + // ----------- Process ----------- + if (state.state != 'RUNNING') { + state.startTime = -1; + + this.restartButton.style.display = 'none'; + } else { + this.restartButton.style.display = 'flex'; + } + + setStatusState( + this.processStatus, + { + RUNNING: 'green', + STOPPED: 'red', + STARTING: 'yellow', + PROBLEM: 'red', + }[state.state] as StatusType + ); + this.processInfo.innerText = state.message ?? ''; + + // ----------- Uptime ----------- + const uptimeSeconds = + state.startTime == -1 ? -1 : (Date.now() - state.startTime) / 1000; + this.uptimeInfo.innerText = formatUptime(uptimeSeconds); + + // ----------- Error ----------- + if ((state?.error ?? '').trim().length > 0) + this.runnerError = state.error; + else this.runnerError = null; + this.updateError(); + + this._Main.Logs.setUnityLogs(state.output.current); + } + + private webSocketError: string; + updateWebSocketState(state: UnityWebSocketStatus) { + // ----------- WebSocket ----------- + setStatusState( + this.webSocketStatus, + { + CONNECTING: 'yellow', + CONNECTED: 'green', + DISCONNECTED: 'gray', + FAILED: 'red', + }[state.state] as StatusType + ); + this.webSocketInfo.innerText = state.message ?? ''; + + // ----------- ZED Stream ----------- + setStatusState( + this.zedStreamStatus, + state.parameters.zedReady ? 'green' : 'red' + ); + this.zedStreamInfo.innerText = state.parameters.zedReady + ? `Connected to ${state.parameters.zedPath}` + : 'Not ready'; + this.zedStreamFps.innerText = + state.parameters.zedFPS == '-' ? '' : state.parameters.zedFPS; + + // ----------- Timeline ----------- + this.timelineWatching.innerText = state.parameters.timelineWatching + ? 'Yes' + : 'No'; + this.timelineStanding.innerText = state.parameters.timelineStanding + ? 'Yes' + : 'No'; + setProgressState( + this.timelineProgress, + state.parameters.timelineProgress + ); + + // ----------- Parameters ----------- + this.renderParameterSliders(state.parameters.parameters); + + // ----------- Error ----------- + if ((state?.error ?? '').trim().length > 0) + this.webSocketError = state.error; + else this.webSocketError = null; + this.updateError(); + } + + private renderParameterSliders(parameters: UnityParameters['parameters']) { + if (parameters.length === 0) return; + + const existingSliders = this.parametersTable.querySelectorAll( + '.ntsh_dashboard-unity-parameter-row' + ); + + if (existingSliders.length !== parameters.length) { + this.parametersTable.innerHTML = ''; + + parameters.forEach((param) => { + const row = ce('tr', 'ntsh_dashboard-unity-parameter-row'); + + const nameCell = ce('td'); + nameCell.appendChild( + ce('div', 'mux_text', null, param.sliderName) + ); + row.appendChild(nameCell); + + const progressCell = ce('td', 'no-service'); + progressCell.appendChild(createProgress(param.outputValue)); + row.appendChild(progressCell); + + const sliderCell = ce('td', 'only-service'); + const sliderProgress = createProgress(param.outputValue); + const sliderValue: HTMLDivElement = + sliderProgress.querySelector('.ntsh_progress-value'); + sliderValue.classList.add('mux_resizer'); + sliderCell.appendChild(sliderProgress); + + const resizer = new MorphComponent.Resizer({ + existingContainer: sliderValue, + direction: 'right', + relative: true, + min: 0, + max: () => sliderProgress.clientWidth, + }); + let lastPercentage: number = -1; + resizer.on('resized', (size) => { + const percentage = + Math.round((size / sliderProgress.clientWidth) * 100) / + 100; + if (percentage === lastPercentage) return; + lastPercentage = percentage; + + this._Main.socket.emit( + 'unityWebSocket', + 'parameterValue', + param.sliderIndex, + percentage + ); + setProgressState(sliderProgress, percentage); + }); + + row.appendChild(sliderCell); + + this.parametersTable.appendChild(row); + }); + } else { + existingSliders.forEach((row, index) => { + const value = parameters[index].outputValue; + + const progressElement: HTMLDivElement = row.querySelector( + '.no-service .ntsh_progress' + ); + setProgressState(progressElement, value); + + const sliderElement: HTMLDivElement = row.querySelector( + '.only-service .ntsh_progress' + ); + if (sliderElement.querySelector('.mux_resizer-moving') == null) + setProgressState(sliderElement, value); + }); + } + } + + private updateError() { + const errors: string[] = []; + if (this.runnerError != null) errors.push(this.runnerError); + if (this.webSocketError != null) errors.push(this.webSocketError); + + if (errors.length > 0) { + this.errorText.innerText = errors.join('\n'); + this.errorContainer.style.display = 'block'; + } else { + this.errorContainer.style.display = 'none'; + this.errorText.innerText = ''; + } + } + + registerListeners() { + this._Main.socket.on('unityRunnerState', (state: UnityRunnerStatus) => + this.updateRunnerState(state) + ); + this._Main.socket.on( + 'unityWebSocketState', + (state: UnityWebSocketStatus) => this.updateWebSocketState(state) + ); + + this.restartButton.addEventListener('click', async () => { + this.executeCommand( + 'restart', + 'Are you sure you want to restart the Unity Runner process?' + ); + }); + } + + private async executeCommand(command: string, message: string) { + const confirmed = await MorphFeature.Confirm({ + title: 'Are you sure?', + message, + }); + if (!confirmed) return; + + MorphFeature.Loader({ + active: true, + message: `Requesting Unity Runner ${command}...`, + }); + this._Main.socket.emit( + 'unityRunner', + command, + (response: { succeed: boolean; message?: string }) => { + MorphFeature.Loader({ active: false }); + + if (!response.succeed) + return MorphFeature.Alert({ + title: 'Error', + message: response.message, + }); + + MorphFeature.Notification({ + level: 'success', + message: `Unity Runner is ${command}ing...`, + }); + } + ); + } +} + +interface UnityRunnerStatus { + state: 'RUNNING' | 'STOPPED' | 'STARTING' | 'PROBLEM'; + message?: string; + error?: string; + + startTime: number; + output: { current: string[]; last: string[] }; +} + +interface UnityWebSocketStatus { + state: ServiceState; + message?: string; + error?: string; + + parameters: UnityParameters; +} + +interface UnityParameters { + timelineWatching: boolean; + timelineStanding: boolean; + timelineProgress: number; + zedPath: string; + zedReady: boolean; + zedFPS: string; + parameters: UnitySocketMessageHeartbeat['heartbeat']['dataSliders']; +} + +interface UnitySocketMessageBase { + type: string; + timestamp: number; +} +interface UnitySocketMessageHeartbeat extends UnitySocketMessageBase { + type: 'heartbeat_data'; + heartbeat: { + dataSliders: { + sliderIndex: number; + sliderName: string; + outputValue: number; + }[]; + dataTimeline: { + isStanding: boolean; + isWatching: boolean; + timelineProgress: number; + }; + zedCamera: { + cameraFPS: string; + isZedReady: boolean; + streamInputIP: string; + streamInputPort: number; + zedGrabError: number; + }; + }; +} diff --git a/frontend/views/dashboard/ts/logsHandler.ts b/frontend/views/dashboard/ts/logsHandler.ts new file mode 100644 index 0000000..2dda8ee --- /dev/null +++ b/frontend/views/dashboard/ts/logsHandler.ts @@ -0,0 +1,96 @@ +import { ce } from 'morphux'; +import { delay } from './utils'; +import { Main } from './main'; +import { AnsiUp } from 'ansi_up'; + +export class LogsHandler { + private _Main: Main; + + ansiUp = new AnsiUp(); + + cameraLogsContainer: HTMLDivElement = document.querySelector( + '.ntsh_tab[tabid="cameralogs"] .ntsh_logs' + ); + unityLogsContainer: HTMLDivElement = document.querySelector( + '.ntsh_tab[tabid="unitylogs"] .ntsh_logs' + ); + + constructor(Main: Main) { + this._Main = Main; + + this.registerListeners(); + } + + setCameraLogs(logs: string[]) { + this.applyLogs(this.cameraLogsContainer, logs); + } + + setUnityLogs(logs: string[]) { + this.applyLogs(this.unityLogsContainer, logs); + } + + private firstTime: Set = new Set(); + + private async applyLogs(container: HTMLDivElement, logs: string[]) { + let logCount = container.querySelectorAll( + '.ntsh_log.ntsh_log-normal' + ).length; + if (logCount === logs.length) return; + if (logCount > logs.length) logCount = 0; + + const isAtBottom = + !this.firstTime.has(container) || + container.scrollTop + container.clientHeight >= + container.scrollHeight; + + container.innerHTML = ''; + + logs.forEach((log, i) => { + const element = ce( + 'div', + ['ntsh_log', 'ntsh_log-normal'], + null, + null, + this.ansiUp.ansi_to_html(log) + ); + + if (this.firstTime.has(container) && i > logCount - 1) { + element.style.display = 'none'; + const spawnDelay = (i - logCount) * 10; + setTimeout(() => { + element.style.display = 'block'; + if (isAtBottom) + container.scrollTop = container.scrollHeight; + }, spawnDelay); + } + + container.appendChild(element); + if (isAtBottom) container.scrollTop = container.scrollHeight; + }); + + if (!this.firstTime.has(container)) { + container.scrollTop = container.scrollHeight; + this.firstTime.add(container); + } + } + + private registerListeners() { + this._Main.TabController.registerListener('cameralogs', (visible) => { + if (!visible) return; + + setTimeout(() => { + this.cameraLogsContainer.scrollTop = + this.cameraLogsContainer.scrollHeight; + }, 10); + }); + + this._Main.TabController.registerListener('unitylogs', (visible) => { + if (!visible) return; + + setTimeout(() => { + this.unityLogsContainer.scrollTop = + this.unityLogsContainer.scrollHeight; + }, 10); + }); + } +} diff --git a/frontend/views/dashboard/ts/main.ts b/frontend/views/dashboard/ts/main.ts new file mode 100644 index 0000000..6e488b3 --- /dev/null +++ b/frontend/views/dashboard/ts/main.ts @@ -0,0 +1,37 @@ +import { io } from 'socket.io-client'; +import { MenuBar } from './menuBar'; +import { TabController } from './tabController'; +import { MorphFeature } from 'morphux'; +import { DashboardCameraRunner } from './dashboard.camerarunner'; +import { LogsHandler } from './logsHandler'; +import { Calibration } from './calibration'; +import { DashboardUnity } from './dashboard.unity'; + +const socket = io('/'); +export class Main { + socket = socket; + + MenuBar = new MenuBar(this); + TabController = new TabController(this); + + Logs = new LogsHandler(this); + Calibration = new Calibration(this); + + DashboardCameraRunner = new DashboardCameraRunner(this); + DashboardUnityRunner = new DashboardUnity(this); + + constructor() { + if (window.location.search.includes('debug')) { + (window as any).SN = this; + console.log('Debug mode enabled'); + } + } +} + +MorphFeature.Loader({ active: true, message: 'Connecting to server...' }); +socket.on('connect', () => { + console.log('Connected to server'); + MorphFeature.Loader({ active: false }); +}); + +const _Main = new Main(); diff --git a/frontend/views/dashboard/ts/menuBar.ts b/frontend/views/dashboard/ts/menuBar.ts new file mode 100644 index 0000000..7e5af8e --- /dev/null +++ b/frontend/views/dashboard/ts/menuBar.ts @@ -0,0 +1,142 @@ +import { MorphComponent, MorphFeature } from 'morphux'; +import { Main } from './main'; +import { ComponentMenuBar } from 'morphux/dist/Components/MenuBar/Component.MenuBar'; + +export class MenuBar { + private _Main: Main; + + container: HTMLDivElement = document.querySelector('.ntsh_menubar'); + + menubar: ComponentMenuBar; + + constructor(main: Main) { + this._Main = main; + + this.build(); + + setTimeout(() => { + if (localStorage?.getItem('serviceMode') === 'true') + this.toggleServiceMode(true, true); + }, 10); + } + + build() { + this.menubar = new ComponentMenuBar({ + left: [ + { + type: 'image', + url: '/img/morphix_logo_white.png', + }, + { + type: 'normal', + text: 'Dashboard', + materialIcon: 'dashboard', + uniqueIdentifier: 'dashboard', + selected: true, + + click: () => this._Main.TabController.showTab('dashboard'), + }, + { + type: 'normal', + text: 'Calibration', + uniqueIdentifier: 'calibration', + materialIcon: 'crop_free', + + click: () => + this._Main.TabController.showTab('calibration'), + }, + { + type: 'normal', + text: 'Unity Logs', + uniqueIdentifier: 'unitylogs', + materialIcon: 'deployed_code', + + click: () => this._Main.TabController.showTab('unitylogs'), + }, + { + type: 'normal', + text: 'Camera Logs', + uniqueIdentifier: 'cameralogs', + materialIcon: 'photo_camera', + + click: () => this._Main.TabController.showTab('cameralogs'), + }, + ], + + right: [ + { + type: 'normal', + text: document.body.classList.contains('ntsh_service') + ? 'Exit Service' + : 'Service Mode', + uniqueIdentifier: 'serviceMode', + materialIcon: document.body.classList.contains( + 'ntsh_service' + ) + ? 'logout' + : 'engineering', + + click: async () => { + const mobileMenu: HTMLDivElement = + document.querySelector('.mux_mobilemenu'); + mobileMenu?.click(); + + this.toggleServiceMode(); + }, + }, + ], + }); + this.container.innerHTML = ''; + this.container.appendChild(this.menubar.container); + } + + async toggleServiceMode( + mode?: boolean, + skipPin?: boolean + ): Promise { + const newMode = + mode ?? !document.body.classList.contains('ntsh_service'); + + if (newMode) { + if (skipPin !== true) { + const servicePin: string = await MorphFeature.Prompt({ + title: 'Service Mode', + message: 'Enter the service PIN:', + type: 'number', + canBeEmpty: false, + placeholder: '****', + }); + if (servicePin !== '4252') { + MorphFeature.Alert({ + title: 'Error', + message: 'Incorrect PIN provided.', + }); + return false; + } + } + + document.body.classList.add('ntsh_service'); + + localStorage.setItem('serviceMode', 'true'); + + MorphFeature.Notification({ + level: 'success', + message: 'Service mode activated.', + }); + } else { + document.body.classList.remove('ntsh_service'); + + this._Main.TabController.showTab('dashboard'); + + localStorage.setItem('serviceMode', 'false'); + + MorphFeature.Notification({ + level: 'success', + message: 'Service mode deactivated.', + }); + } + + this.build(); + return true; + } +} diff --git a/frontend/views/dashboard/ts/tabController.ts b/frontend/views/dashboard/ts/tabController.ts new file mode 100644 index 0000000..fbeda12 --- /dev/null +++ b/frontend/views/dashboard/ts/tabController.ts @@ -0,0 +1,88 @@ +import { MorphFeature } from 'morphux'; +import { Main } from './main'; + +export type Tabs = 'dashboard' | 'calibration' | 'cameralogs' | 'unitylogs'; +export class TabController { + private _Main: Main; + + container: HTMLDivElement = document.querySelector('.ntsh_tabs'); + + currentTabId: Tabs; + + constructor(main: Main) { + this._Main = main; + + this.registerNavigationListener(); + } + + private tabListeners: Map void> = new Map(); + registerListener(tabId: Tabs, callback: (visible: boolean) => void) { + if (this.tabListeners.has(tabId)) + throw new Error( + `Listener for tab id ${tabId} has already been registered!` + ); + + this.tabListeners.set(tabId, callback); + callback(this.currentTabId == tabId); + } + + async showTab(tabId: Tabs) { + if (this.currentTabId == tabId) return; + + if ( + tabId !== 'dashboard' && + !document.body.classList.contains('ntsh_service') + ) { + const confirmed = await MorphFeature.Confirm({ + title: 'Service Mode Required', + message: `You need to be in service mode to access tab ${tabId}, switch to Service Mode now?`, + }); + if (!confirmed) return this.showTab('dashboard'); + + const succeed = await this._Main.MenuBar.toggleServiceMode(true); + if (!succeed) return this.showTab('dashboard'); + } + + this._Main.MenuBar.menubar.setSelected(tabId); + + if (this.tabListeners.has(this.currentTabId)) + this.tabListeners.get(this.currentTabId)(false); + if (this.tabListeners.has(tabId)) this.tabListeners.get(tabId)(true); + this.currentTabId = tabId; + + this.container + .querySelectorAll('.ntsh_tab') + .forEach((tab) => tab.classList.remove('ntsh_tab-visible')); + + this.container + .querySelector(`.ntsh_tab[tabid="${tabId}"]`) + .classList.add('ntsh_tab-visible'); + + window.history.pushState( + { tab: tabId }, + '', + `/${tabId}${window.location.search}` + ); + + var tabName = { + dashboard: 'Dashboard', + calibration: 'Calibration', + cameralogs: 'Camera Logs', + unitylogs: 'Unity Logs', + }[tabId]; + document.title = `NTSH Control - ${tabName}`; + } + + private registerNavigationListener() { + window.addEventListener('popstate', (event) => { + const state = event.state; + if (state && state.tab) this.showTab(state.tab); + }); + + var startTab = window.location.pathname + .replace('/', '') + .split('/') + .shift() as Tabs; + this.showTab(startTab.length > 0 ? startTab : 'dashboard'); + } +} diff --git a/frontend/views/dashboard/ts/utils.ts b/frontend/views/dashboard/ts/utils.ts new file mode 100644 index 0000000..e8685e0 --- /dev/null +++ b/frontend/views/dashboard/ts/utils.ts @@ -0,0 +1,81 @@ +import { ce } from 'morphux'; + +/** + * A linear interpolation helper function. + * @param a The start value. + * @param b The end value. + * @param t The interpolation factor (0 to 1). + * @returns The interpolated value. + */ +export const lerp = (a: number, b: number, t: number): number => + a + (b - a) * t; + +export const setStatusState = ( + statusElement: HTMLDivElement, + state: StatusType +) => { + statusElement.classList.remove( + 'ntsh_status-green', + 'ntsh_status-yellow', + 'ntsh_status-red', + 'ntsh_status-gray' + ); + statusElement.classList.add(`ntsh_status-${state}`); +}; +export type StatusType = 'green' | 'yellow' | 'red' | 'gray'; + +export const setProgressState = ( + progressElement: HTMLDivElement, + percentage: number +) => { + const value: HTMLDivElement = progressElement.querySelector( + '.ntsh_progress-value' + ); + value.style.width = `${percentage * 100}%`; + + const label: HTMLDivElement = progressElement.querySelector( + '.ntsh_progress-label' + ); + label.innerText = `${Math.round(percentage * 100)}%`; +}; + +export const createProgress = (value: number) => { + const progress = ce('div', 'ntsh_progress'); + progress.appendChild(ce('div', 'ntsh_progress-value')); + progress.appendChild(ce('div', 'ntsh_progress-label')); + setProgressState(progress, value); + return progress; +}; +export function capitalizeFirstLetter(string: string) { + return string.charAt(0).toUpperCase() + string.slice(1); +} + +export type ServiceState = + | 'CONNECTING' + | 'CONNECTED' + | 'DISCONNECTED' + | 'FAILED'; + +export function formatUptime(seconds: number): string { + if (seconds < 0) return ''; + const days = Math.floor(seconds / 86400); + seconds %= 86400; + const hours = Math.floor(seconds / 3600); + seconds %= 3600; + const minutes = Math.floor(seconds / 60); + seconds = Math.floor(seconds % 60); + + const parts = []; + if (days > 0) parts.push(`${days}d`); + + parts.push( + `${hours.toString().padStart(2, '0')}:${minutes + .toString() + .padStart(2, '0')}:${seconds.toString().padStart(2, '0')}` + ); + return parts.join(' '); +} + +export function delay(duration: number) { + return new Promise((resolve) => setTimeout(resolve, duration)); +} diff --git a/frontend/views/dashboard/tsconfig.json b/frontend/views/dashboard/tsconfig.json new file mode 100644 index 0000000..4f1714c --- /dev/null +++ b/frontend/views/dashboard/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "outDir": "dist", + "sourceMap": true + }, + "include": [ + "ts/**/*" + ] +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..c38c3ab --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1454 @@ +{ + "name": "ntshcontrol", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ntshcontrol", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@types/express": "^5.0.3", + "@types/fs-extra": "^11.0.4", + "@types/node": "^24.9.1", + "@types/ws": "^8.18.1", + "express": "^5.1.0", + "fs-extra": "^11.3.2", + "socket.io": "^4.8.1", + "socket.io-client": "^4.8.1", + "ws": "^8.18.3" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.3.tgz", + "integrity": "sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^5.0.0", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz", + "integrity": "sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", + "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", + "license": "MIT", + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT" + }, + "node_modules/@types/jsonfile": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", + "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.1.tgz", + "integrity": "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.0.tgz", + "integrity": "sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.9.tgz", + "integrity": "sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/engine.io": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", + "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", + "license": "MIT", + "dependencies": { + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.7.2", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz", + "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1", + "xmlhttprequest-ssl": "~2.1.1" + } + }, + "node_modules/engine.io-client/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/engine.io/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.1.tgz", + "integrity": "sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.7.0", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/socket.io": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "license": "MIT", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-adapter/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/socket.io-client": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", + "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.6.1", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-client/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/socket.io/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/socket.io/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", + "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", + "engines": { + "node": ">=0.4.0" + } + } + } +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..834dd4f --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "ntshcontrol", + "version": "1.0.0", + "main": "dist/Entry.js", + "scripts": { + "start": "node ." + }, + "author": "Mees van der Wijk - Morphix Productions", + "license": "ISC", + "description": "", + "dependencies": { + "@types/express": "^5.0.3", + "@types/fs-extra": "^11.0.4", + "@types/node": "^24.9.1", + "@types/ws": "^8.18.1", + "express": "^5.1.0", + "fs-extra": "^11.3.2", + "socket.io": "^4.8.1", + "socket.io-client": "^4.8.1", + "ws": "^8.18.3" + } +} \ No newline at end of file diff --git a/src/CameraRunner.ts b/src/CameraRunner.ts new file mode 100644 index 0000000..8461823 --- /dev/null +++ b/src/CameraRunner.ts @@ -0,0 +1,211 @@ +import { io, Socket } from 'socket.io-client'; +import { Main } from './Main'; +import { delay, ServiceState } from './Utils'; + +const PREFIX = `[CameraRunner]`; +export class CameraRunner { + private _Main: Main; + + socket: Socket; + + state: ServiceState = 'DISCONNECTED'; + message?: string; + error?: string; + + processStatus: ProcessStatus = { + state: 'STOPPED', + + startTime: -1, + output: { current: [], last: [] }, + }; + + constructor(Main: Main) { + this._Main = Main; + } + + handle(command: string, ...args: any[]) { + switch (command) { + case 'restart': + case 'reboot': + const callback: (response: { + succeed: boolean; + message?: string; + }) => void = args[0]; + if (typeof callback !== 'function') return; + + this.sendCommand(command, callback); + break; + } + } + + sendCommand( + command: string, + callback: (response: { succeed: boolean; message?: string }) => void + ) { + if (this.socket == null || !this.socket.connected) + return callback({ + succeed: false, + message: 'Not connected to CameraRunner', + }); + + this.socket.emit( + command, + (response: { succeed: boolean; message?: string }) => { + callback(response); + } + ); + } + + broadcastState() { + this._Main.WebServer.socket.emit('cameraRunnerState', this.getState()); + } + + getState(): CameraRunnerStatus { + return { + state: this.state, + message: this.message, + error: this.error, + + processStatus: this.processStatus, + }; + } + + setInfo(message: string, error: string, state: ServiceState = 'FAILED') { + this.message = message; + this.error = error; + this.state = state; + this.broadcastState(); + + if (state == 'FAILED' || state == 'DISCONNECTED') + console.warn(PREFIX, message ?? error); + else console.log(PREFIX, message ?? error); + } + + private pollClock: NodeJS.Timeout; + startPollClock() { + const poll = async () => { + const data: ProcessStatus = await new Promise((resolve) => { + this.socket.emit('getStatus', (response: ProcessStatus) => + resolve(response) + ); + }); + + this.processStatus = data; + this.broadcastState(); + }; + + this.socket.on('simpleStatus', (simpleStatus: ProcessStatusSimple) => { + this.processStatus.state = simpleStatus.state; + this.processStatus.message = simpleStatus.message; + this.processStatus.error = simpleStatus.error; + this.broadcastState(); + }); + + clearInterval(this.pollClock); + this.pollClock = setInterval( + () => poll(), + this._Main.Config.cameraRunner.pollInterval + ); + poll(); + } + + async reconnect() { + clearInterval(this.pollClock); + if (this.socket != null) { + this.socket.disconnect(); + this.socket.close(); + this.socket = null; + } + + await delay(2000); + + this.message = 'Reconnecting in 10 seconds...'; + this.broadcastState(); + + await delay(5000); + await this.connect(); + } + + async connect() { + this.setInfo('Connecting...', null, 'CONNECTING'); + + await delay(1000); + + const ip = this._Main.Config.cameraRunner.webSocket.ip; + const port = this._Main.Config.cameraRunner.webSocket.port; + + if (ip == null || port == null) { + return this.setInfo( + 'Connection problem', + 'Camera Runner WebSocket IP or port is not configured.' + ); + } + + this.socket = io(`ws://${ip}:${port}`, { + reconnectionAttempts: 0, + reconnectionDelay: 2000, + }); + + this.socket.on('connect', () => { + this.setInfo('Connected', null, 'CONNECTED'); + this.startPollClock(); + }); + + this.socket.on('disconnect', () => { + this.setInfo( + 'Disconnected', + 'Camera Runner was disconnected unexpectedly', + 'DISCONNECTED' + ); + this.reconnect(); + }); + + this.socket.on('reconnect', () => { + this.setInfo('Connected (reconnection)', null, 'CONNECTED'); + }); + + this.socket.on('connect_error', (err) => { + this.setInfo('Connection problem', `Connection error: ${err}`); + this.reconnect(); + }); + + this.socket.on('error', (err) => { + this.setInfo('Connection problem', `Socket error: ${err}`); + this.reconnect(); + }); + + this.socket.on('reconnect_attempt', () => { + this.setInfo('Reconnecting', null, 'CONNECTING'); + }); + + this.socket.on('reconnect_failed', () => { + this.setInfo('Connection problem', 'Reconnection failed'); + this.reconnect(); + }); + + this.socket.on('close', () => { + this.setInfo('Disconnected', null, 'DISCONNECTED'); + this.reconnect(); + }); + } +} + +interface CameraRunnerStatus { + state: ServiceState; + message?: string; + error?: string; + + processStatus: ProcessStatus; +} + +export type ProcessStatusState = 'RUNNING' | 'STOPPED' | 'STARTING' | 'PROBLEM'; + +interface ProcessStatusSimple { + state: ProcessStatusState; + message?: string; + error?: string; +} +interface ProcessStatus extends ProcessStatusSimple { + startTime: number; + output: { current: string[]; last: string[] }; +} diff --git a/src/Configuration/ConfigurationManager.ts b/src/Configuration/ConfigurationManager.ts new file mode 100644 index 0000000..d90d3f3 --- /dev/null +++ b/src/Configuration/ConfigurationManager.ts @@ -0,0 +1,134 @@ +import { ensureDir, pathExists, readJSON, writeFile } from 'fs-extra'; +import { Main } from '../Main'; +import { join } from 'path'; +import { DefaultConfiguration } from './DefaultConfiguration'; + +const PREFIX = '[ConfigurationManager]'; +export class ConfigurationManager { + private _Main: Main; + + constructor(Main: Main) { + this._Main = Main; + } + + async load() { + console.log(PREFIX, 'Loading'); + + await ensureDir(join(this._Main.dataPath)); + + let configPath = join(this._Main.dataPath, 'config.json'); + let configExists = await pathExists(configPath); + if (!configExists) { + await writeFile( + configPath, + JSON.stringify(DefaultConfiguration, null, 4) + ); + this._Main.Config = DefaultConfiguration; + console.log(PREFIX, 'Written default configuration'); + } else { + var config: Config = await readJSON(configPath); + + this._Main.Config = await this.validateConfig(config); + console.log(PREFIX, 'Loaded configuration'); + } + } + + async validateConfig(config: Config): Promise { + const normalizedConfig: Config = this.normalizeConfig( + config, + DefaultConfiguration + ); + const hasChanges = + JSON.stringify(config) !== JSON.stringify(normalizedConfig); + + if (hasChanges) { + this._Main.Config = normalizedConfig; + + const configPath = join(this._Main.dataPath, 'config.json'); + await writeFile( + configPath, + JSON.stringify(normalizedConfig, null, 4) + ); + console.log(PREFIX, 'Configuration updated and saved'); + } + + return normalizedConfig; + } + + private normalizeConfig(current: any, template: any): any { + if (template === null || template === undefined) { + return template; + } + + if (typeof template !== 'object' || Array.isArray(template)) { + if ( + current !== null && + current !== undefined && + typeof current === typeof template + ) { + if (Array.isArray(template) && Array.isArray(current)) { + if ( + template.length > 0 && + typeof template[0] === 'object' && + !Array.isArray(template[0]) + ) { + return current.map((item) => + this.normalizeConfig(item, template[0]) + ); + } + return current; + } + return current; + } + return template; + } + + const result: any = {}; + + for (const key in template) { + if (template.hasOwnProperty(key)) { + result[key] = this.normalizeConfig( + current?.[key], + template[key] + ); + } + } + + return result; + } +} + +export interface Config { + webServer: ConfigWebServer; + unity: ConfigUnity; + cameraRunner: ConfigCameraRunner; +} + +export interface ConfigWebServer { + port: number; +} + +export interface ConfigUnity { + executable: { + path: string; + arguments: string[]; + startUpDelay?: number; + }; + + webSocket: { + ip: string; + port: number; + }; + + heartbeatInterval: number; + calibrationImageInterval: number; +} + +export interface ConfigCameraRunner { + webSocket: { + ip: string; + port: number; + }; + + pollInterval: number; +} diff --git a/src/Configuration/DefaultConfiguration.ts b/src/Configuration/DefaultConfiguration.ts new file mode 100644 index 0000000..5fa0720 --- /dev/null +++ b/src/Configuration/DefaultConfiguration.ts @@ -0,0 +1,30 @@ +import { Config } from './ConfigurationManager'; + +export const DefaultConfiguration: Config = { + webServer: { + port: 6300, + }, + unity: { + executable: { + path: '', + arguments: [], + startUpDelay: 5000, + }, + + webSocket: { + ip: '127.0.0.1', + port: 3000, + }, + + heartbeatInterval: 1000, + calibrationImageInterval: 2000, + }, + cameraRunner: { + webSocket: { + ip: '127.0.0.1', + port: 6301, + }, + + pollInterval: 5000, + }, +}; diff --git a/src/Entry.ts b/src/Entry.ts new file mode 100644 index 0000000..9a74b41 --- /dev/null +++ b/src/Entry.ts @@ -0,0 +1,4 @@ +import { Main } from './Main'; + +const _Main = new Main(); +_Main.start(); diff --git a/src/Main.ts b/src/Main.ts new file mode 100644 index 0000000..bf13605 --- /dev/null +++ b/src/Main.ts @@ -0,0 +1,34 @@ +import { join } from 'path'; +import { WebServer } from './WebServer/WebServer'; +import { homedir } from 'os'; +import { + Config, + ConfigurationManager, +} from './Configuration/ConfigurationManager'; +import { CameraRunner } from './CameraRunner'; +import { UnityRunner } from './Unity/UnityRunner'; +import { UnityWebSocket } from './Unity/UnityWebSocket'; + +export class Main { + dataPath = join(homedir(), 'MorphixProductions', 'NTSHControl'); + + ConfigurationManager = new ConfigurationManager(this); + WebServer = new WebServer(this); + + CameraRunner = new CameraRunner(this); + UnityRunner = new UnityRunner(this); + UnityWebSocket = new UnityWebSocket(this); + + Config: Config; + + async start() { + await this.ConfigurationManager.load(); + await this.WebServer.listen(); + + await this.CameraRunner.connect(); + + setTimeout(() => { + this.UnityRunner.start(); + }, this.Config.unity.executable.startUpDelay ?? 0); + } +} diff --git a/src/Unity/UnityRunner.ts b/src/Unity/UnityRunner.ts new file mode 100644 index 0000000..3fb5c2a --- /dev/null +++ b/src/Unity/UnityRunner.ts @@ -0,0 +1,274 @@ +import { pathExistsSync } from 'fs-extra'; +import { ChildProcess, exec, spawn } from 'child_process'; +import { delay } from '../Utils'; +import { Main } from '../Main'; + +const PREFIX = '[UnityRunner]'; + +const LOG_OUTPUT = !process.argv.includes('--no-output-log'); + +export class UnityRunner { + private _Main: Main; + + state: UnityRunnerState; + message?: string = 'Awaiting startup delay...'; + error?: string; + + startTime: number = null; + output: { current: string[]; last: string[] } = { current: [], last: [] }; + + process: ChildProcess; + + constructor(Main: Main) { + this._Main = Main; + } + + handle(command: string, ...args: any[]) { + switch (command) { + case 'restart': + const callback: (response: { + succeed: boolean; + message?: string; + }) => void = args[0]; + if (typeof callback !== 'function') return; + + callback(this.requestRestart()); + break; + } + } + + private statusClock: NodeJS.Timeout; + startStatusClock() { + clearInterval(this.statusClock); + this.statusClock = setInterval(() => { + this.broadcastState(); + }, 3000); + } + + requestRestart(): { succeed: boolean; message?: string } { + if (this.state !== 'RUNNING') + return { + succeed: false, + message: + 'Cannot restart when process is not running. It is probably restarting already.', + }; + + this.restart(true); + return { succeed: true }; + } + + broadcastState() { + this._Main.WebServer.socket.emit('unityRunnerState', this.getStatus()); + } + + setInfo( + message: string, + error: string, + state: UnityRunnerState = 'PROBLEM' + ) { + this.message = message; + this.error = error; + this.state = state; + this.broadcastState(); + + this.output.current.push( + `[${new Date().toLocaleTimeString('nl-NL')}] [System] [${state}] ${ + message ?? error + }` + ); + + if (state == 'PROBLEM' || state == 'STOPPED') + console.warn(PREFIX, message ?? error); + else console.log(PREFIX, message ?? error); + } + + private restartTriggered: boolean = false; + async restart(instant: boolean = false) { + if (this.restartTriggered) return; + clearInterval(this.statusClock); + + this._Main.WebServer.Calibration.hasCalibrationImage = false; + + this._Main.UnityWebSocket.disconnect(); + + this.restartTriggered = true; + this.startTime = -1; + this.broadcastState(); + + await delay(2000); + + if (this.output.current.length > 0) { + this.output.last = [...this.output.current]; + this.output.current = []; + } + + if (instant) + this.setInfo('Process will restart shortly...', null, 'STOPPED'); + + if (this.process != null) { + this.process.kill('SIGTERM'); + + await delay(3000); + + if (!this.process.killed && this.process.exitCode === null) { + this.process.kill('SIGKILL'); + console.log(PREFIX, 'Sent SIGKILL to process.'); + } + } + this.startTime = -1; + + if (!instant) { + this.message = 'Reconnecting in 10 seconds...'; + this.broadcastState(); + + await delay(10000); + } + await this.start(); + } + + async start() { + if (this.output.current.length > 0) { + this.output.last = [...this.output.current]; + this.output.current = []; + } + this.startTime = Date.now(); + this.restartTriggered = false; + this.broadcastState(); + + this._Main.WebServer.Calibration.hasCalibrationImage = false; + + clearInterval(this.statusClock); + + const path = this._Main.Config.unity.executable.path; + if (path == null || !pathExistsSync(path)) { + this.setInfo( + 'Executable problem', + `Executable path is not set or does not exist: ${path}` + ); + return; + } + + if (this._Main.CameraRunner.state !== 'CONNECTED') + await new Promise((resolve) => { + this.setInfo( + 'Waiting for CameraRunner to connect...', + null, + 'STARTING' + ); + var c = setInterval(() => { + if (this._Main.CameraRunner.state !== 'CONNECTED') return; + + clearInterval(c); + resolve(); + }, 1000); + }); + + if (this._Main.CameraRunner.processStatus?.state !== 'RUNNING') + await new Promise((resolve) => { + this.setInfo( + 'Waiting for CameraRunner process to start...', + null, + 'STARTING' + ); + var c = setInterval(() => { + if ( + this._Main.CameraRunner.processStatus?.state !== + 'RUNNING' + ) + return; + + clearInterval(c); + resolve(); + }, 1000); + }); + + const fileName = path.split(/(\/|\\)/).pop(); + + this.setInfo(`Starting executable: ${fileName}`, null, 'STARTING'); + + this.process = spawn( + path, + this._Main.Config.unity.executable.arguments, + { + stdio: 'pipe', + } + ); + + this.process.on('exit', (code, signal) => { + if (this.restartTriggered) return; + this.setInfo( + 'Process exited', + `Process exited with code ${code} and signal ${signal}`, + 'STOPPED' + ); + this.restart(); + }); + this.process.on('error', (err) => { + this.setInfo('Process error', err.message); + this.restart(); + }); + this.process.stdout?.on('data', (data) => { + const lines = data + .toString() + .trim() + .split('\n') + .filter((line) => line.length > 0); + lines.forEach((line) => { + const formattedLine = `[${new Date().toLocaleTimeString( + 'nl-NL' + )}] [${fileName}] ${line}`; + if (LOG_OUTPUT) console.log(PREFIX, formattedLine); + this.output.current.push(formattedLine); + }); + }); + this.process.stderr?.on('data', (data) => { + const lines = data + .toString() + .trim() + .split('\n') + .filter((line) => line.length > 0); + lines.forEach((line) => { + const formattedLine = `[${new Date().toLocaleTimeString( + 'nl-NL' + )}] [${fileName}] [ERROR] ${line}`; + if (LOG_OUTPUT) console.error(PREFIX, formattedLine); + this.output.current.push(formattedLine); + }); + }); + this.startStatusClock(); + setTimeout(() => { + if ( + this.process == null || + this.process?.killed || + this.process?.exitCode != null || + this.restartTriggered + ) + return; + + this.setInfo('Running', '', 'RUNNING'); + this._Main.UnityWebSocket.connect(); + }, 5000); + } + + getStatus(): UnityRunnerStatus { + return { + state: this.state, + message: this.message, + error: this.error, + + startTime: this.startTime, + output: this.output, + }; + } +} + +interface UnityRunnerStatus { + state: 'RUNNING' | 'STOPPED' | 'STARTING' | 'PROBLEM'; + message?: string; + error?: string; + + startTime: number; + output: { current: string[]; last: string[] }; +} + +export type UnityRunnerState = 'RUNNING' | 'STOPPED' | 'STARTING' | 'PROBLEM'; diff --git a/src/Unity/UnityWebSocket.ts b/src/Unity/UnityWebSocket.ts new file mode 100644 index 0000000..3f11f39 --- /dev/null +++ b/src/Unity/UnityWebSocket.ts @@ -0,0 +1,286 @@ +import { RawData, WebSocket } from 'ws'; +import { Main } from '../Main'; +import { delay, ServiceState } from '../Utils'; + +const PREFIX = '[Unity]'; +export class UnityWebSocket { + private _Main: Main; + + state: ServiceState = 'DISCONNECTED'; + message?: string = 'Waiting for process...'; + error?: string; + + parameters: UnityParameters = { + timelineWatching: false, + timelineStanding: false, + timelineProgress: 0, + zedPath: '', + zedReady: false, + zedFPS: '-', + parameters: [], + }; + + socket: WebSocket; + + constructor(Main: Main) { + this._Main = Main; + } + + handle(command: string, ...args: any[]) { + switch (command) { + case 'parameterValue': + const sliderIndex: number = args[0]; + const percentage: number = args[1]; + + if (this.parameters.parameters[sliderIndex] == undefined) + return; + this.parameters.parameters[sliderIndex].outputValue = + percentage; + + if ( + this.socket == null || + this.socket.readyState !== WebSocket.OPEN + ) + return; + + this.socket.send( + JSON.stringify({ + type: 'set_slider_value', + sliderIndex: sliderIndex, + sliderValue: percentage, + }) + ); + + this.broadcastState(); + break; + } + } + + broadcastState() { + this._Main.WebServer.socket.emit( + 'unityWebSocketState', + this.getState() + ); + } + + setInfo(message: string, error: string, state: ServiceState = 'FAILED') { + this.message = message; + this.error = error; + this.state = state; + this.broadcastState(); + + if (state == 'FAILED' || state == 'DISCONNECTED') + console.warn(PREFIX, message ?? error); + else console.log(PREFIX, message ?? error); + } + + stopFetchClocks() { + clearInterval(this.heartbeatClock); + clearInterval(this.calibrationImageClock); + } + + handleSocketMessage(data: RawData) { + let message: UnitySocketMessage; + try { + message = JSON.parse(data.toString()); + } catch (error) { + return; + } + + switch (message.type) { + case 'heartbeat_data': + this.parameters.timelineWatching = + message.heartbeat.dataTimeline.isWatching; + this.parameters.timelineStanding = + message.heartbeat.dataTimeline.isStanding; + this.parameters.timelineProgress = + message.heartbeat.dataTimeline.timelineProgress; + this.parameters.zedPath = `${message.heartbeat.zedCamera.streamInputIP}:${message.heartbeat.zedCamera.streamInputPort}`; + this.parameters.zedReady = + message.heartbeat.zedCamera.isZedReady; + this.parameters.zedFPS = message.heartbeat.zedCamera.cameraFPS; + this.parameters.parameters = message.heartbeat.dataSliders; + this.broadcastState(); + break; + + case 'response_camera_frame': + this._Main.WebServer.Calibration.writeCalibrationImage( + message.imageBase64 + ); + break; + } + } + + disconnected: boolean = false; + async disconnect() { + this.restartRequested = true; + this.disconnected = true; + + if (this.socket != null) { + this.socket.close(); + this.socket = null; + } + + this.stopFetchClocks(); + + this.setInfo('Waiting for process...', null, 'DISCONNECTED'); + } + + private restartRequested = false; + async reconnect() { + if (this.restartRequested) return; + if (this.disconnected) return; + this.restartRequested = true; + + this.stopFetchClocks(); + + if (this.socket != null) { + this.socket.close(); + this.socket = null; + } + + await delay(2000); + if (this.disconnected) return; + + this.message = `Reconnecting in 10 seconds...`; + this.broadcastState(); + + await delay(10000); + if (this.disconnected) return; + + await this.connect(); + } + + async connect() { + this.restartRequested = false; + this.disconnected = false; + + this.stopFetchClocks(); + + this.setInfo('Connecting...', null, 'CONNECTING'); + + await delay(1000); + + this.socket = new WebSocket( + `ws://${this._Main.Config.unity.webSocket.ip}:${this._Main.Config.unity.webSocket.port}` + ); + + this.socket.on('error', (error) => { + if (this.restartRequested) return; + this.setInfo( + 'Connection error', + `Could not connect: ${error.message}`, + 'FAILED' + ); + this.reconnect(); + }); + + this.socket.on('open', () => { + this.startFetchClocks(); + + this.setInfo('Connected', null, 'CONNECTED'); + }); + + this.socket.on('close', () => { + if (this.restartRequested) return; + this.setInfo( + 'Disconnected', + 'Unity was disconnected unexpectedly', + 'FAILED' + ); + this.reconnect(); + }); + + this.socket.on('message', (data) => this.handleSocketMessage(data)); + } + + private heartbeatClock: NodeJS.Timeout; + private calibrationImageClock: NodeJS.Timeout; + startFetchClocks() { + this.socket.send( + JSON.stringify({ type: 'set_heartbeat_auto_send', autoSend: false }) + ); + this.heartbeatClock = setInterval(() => { + if ( + this.socket == null || + this.socket.readyState !== WebSocket.OPEN + ) + return; + + this.socket.send(JSON.stringify({ type: 'request_heartbeat' })); + }, this._Main.Config.unity.heartbeatInterval); + + this.calibrationImageClock = setInterval(() => { + if ( + this.socket == null || + this.socket.readyState !== WebSocket.OPEN + ) + return; + + this.socket.send(JSON.stringify({ type: 'request_camera_frame' })); + }, this._Main.Config.unity.calibrationImageInterval); + } + + getState(): UnityWebSocketStatus { + return { + state: this.state, + message: this.message, + error: this.error, + + parameters: this.parameters, + }; + } +} + +interface UnityWebSocketStatus { + state: ServiceState; + message?: string; + error?: string; + + parameters: UnityParameters; +} + +interface UnityParameters { + timelineWatching: boolean; + timelineStanding: boolean; + timelineProgress: number; + zedPath: string; + zedReady: boolean; + zedFPS: string; + parameters: UnitySocketMessageHeartbeat['heartbeat']['dataSliders']; +} + +type UnitySocketMessage = + | UnitySocketMessageHeartbeat + | UnitySocketMessageCameraFrame; + +interface UnitySocketMessageBase { + type: string; + timestamp: number; +} +interface UnitySocketMessageHeartbeat extends UnitySocketMessageBase { + type: 'heartbeat_data'; + heartbeat: { + dataSliders: { + sliderIndex: number; + sliderName: string; + outputValue: number; + }[]; + dataTimeline: { + isStanding: boolean; + isWatching: boolean; + timelineProgress: number; + }; + zedCamera: { + cameraFPS: string; + isZedReady: boolean; + streamInputIP: string; + streamInputPort: number; + zedGrabError: number; + }; + }; +} +interface UnitySocketMessageCameraFrame extends UnitySocketMessageBase { + type: 'response_camera_frame'; + imageBase64: string; +} diff --git a/src/Utils.ts b/src/Utils.ts new file mode 100644 index 0000000..192a755 --- /dev/null +++ b/src/Utils.ts @@ -0,0 +1,9 @@ +export type ServiceState = + | 'CONNECTING' + | 'CONNECTED' + | 'DISCONNECTED' + | 'FAILED'; + +export function delay(duration: number): Promise { + return new Promise((resolve) => setTimeout(resolve, duration)); +} diff --git a/src/WebServer/CalibrationRouter.ts b/src/WebServer/CalibrationRouter.ts new file mode 100644 index 0000000..629872c --- /dev/null +++ b/src/WebServer/CalibrationRouter.ts @@ -0,0 +1,41 @@ +import { Router } from 'express'; +import { Main } from '../Main'; +import { join } from 'path'; +import { pathExistsSync, readdirSync, readFile, writeFile } from 'fs-extra'; + +export class CalibrationRouter { + private _Main: Main; + Router: Router; + + calibrationImagePath: string; + hasCalibrationImage: boolean = false; + + constructor(Main: Main) { + this._Main = Main; + this.Router = Router(); + + this.calibrationImagePath = join( + this._Main.dataPath, + 'calibrationImage.png' + ); + + this.registerRoutes(); + } + + async registerRoutes() { + this.Router.get('/calibrationImage', (req, res) => { + if (!this.hasCalibrationImage) + return res.redirect('/img/noCalibrationImage.png'); + + res.sendFile(this.calibrationImagePath); + }); + } + + async writeCalibrationImage(base64: string) { + await writeFile( + this.calibrationImagePath, + Buffer.from(base64, 'base64') + ); + this.hasCalibrationImage = true; + } +} diff --git a/src/WebServer/DashboardRouter.ts b/src/WebServer/DashboardRouter.ts new file mode 100644 index 0000000..69511f5 --- /dev/null +++ b/src/WebServer/DashboardRouter.ts @@ -0,0 +1,51 @@ +import { Router } from 'express'; +import { Main } from '../Main'; +import { join } from 'path'; +import { pathExistsSync, readdirSync, readFile } from 'fs-extra'; + +export class DashboardRouter { + private _Main: Main; + Router: Router; + + path: string; + + constructor(Main: Main) { + this._Main = Main; + this.Router = Router(); + + this.path = join( + __filename, + '..', + '..', + '..', + 'frontend', + 'views', + 'dashboard' + ); + + this.registerRoutes(); + } + + async registerRoutes() { + this.Router.get( + ['/', '/dashboard', '/calibration', '/cameralogs', '/unitylogs'], + async (req, res) => { + const htmlContent = await readFile( + join(this.path, 'index.html') + ); + res.setHeader('Content-Type', 'text/html'); + res.send(htmlContent); + } + ); + this.Router.get('/style.css', async (req, res) => { + const styleContent = await readFile(join(this.path, 'style.css')); + res.setHeader('Content-Type', 'text/css'); + res.send(styleContent); + }); + this.Router.get('/script.js', async (req, res) => { + const scriptContent = await readFile(join(this.path, 'script.js')); + res.setHeader('Content-Type', 'application/javascript'); + res.send(scriptContent); + }); + } +} diff --git a/src/WebServer/WebServer.ts b/src/WebServer/WebServer.ts new file mode 100644 index 0000000..08d7636 --- /dev/null +++ b/src/WebServer/WebServer.ts @@ -0,0 +1,78 @@ +import { Application } from 'express'; +import * as express from 'express'; +import { Server as SocketIOServer } from 'socket.io'; +import { createServer, Server as HTTPServer } from 'http'; +import { Main } from '../Main'; +import { DashboardRouter } from './DashboardRouter'; +import { join } from 'path'; +import { CalibrationRouter } from './CalibrationRouter'; + +const PREFIX = '[WebServer]'; +export class WebServer { + private _Main: Main; + + Dashboard: DashboardRouter; + Calibration: CalibrationRouter; + + httpServer: HTTPServer; + app: Application; + socket: SocketIOServer; + + constructor(Main: Main) { + this._Main = Main; + this.Dashboard = new DashboardRouter(this._Main); + this.Calibration = new CalibrationRouter(this._Main); + + this.prepare(); + } + + private prepare() { + this.app = express(); + this.httpServer = createServer(this.app); + this.socket = new SocketIOServer(this.httpServer); + + this.app.use( + express.static( + join(__filename, '..', '..', '..', 'frontend', 'static') + ) + ); + + this.app.use(this.Dashboard.Router); + this.app.use(this.Calibration.Router); + + this.socket.on('connection', (socket) => { + socket.emit( + 'cameraRunnerState', + this._Main.CameraRunner.getState() + ); + socket.emit('unityRunnerState', this._Main.UnityRunner.getStatus()); + socket.emit( + 'unityWebSocketState', + this._Main.UnityWebSocket.getState() + ); + + socket.on('cameraRunner', (command: string, ...args: any[]) => + this._Main.CameraRunner.handle(command, ...args) + ); + socket.on('unityRunner', (command: string, ...args: any[]) => + this._Main.UnityRunner.handle(command, ...args) + ); + socket.on('unityWebSocket', (command: string, ...args: any[]) => + this._Main.UnityWebSocket.handle(command, ...args) + ); + }); + } + + listen() { + return new Promise((resolve) => { + const port = this._Main.Config.webServer.port; + this.httpServer.listen(port, () => { + console.log( + PREFIX, + `Listening on port http://127.0.0.1:${port}` + ); + resolve(); + }); + }); + } +} diff --git a/test.js b/test.js new file mode 100644 index 0000000..e3160b9 --- /dev/null +++ b/test.js @@ -0,0 +1,14 @@ +const app = require('express')(); + +app.get('/exit', (req, res) => { + console.log(`Received exit request at ${new Date().toLocaleTimeString('nl-NL')}`) + res.send('Goodbye World!') + process.exit(0); +}); + +app.get('/', (req, res) => { + console.log(`Received request at ${new Date().toLocaleTimeString('nl-NL')}`) + res.send('Hello World!') +}); + +app.listen(3001, () => console.log('Test server listening on port 3001!')); \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..ffb5ccb --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "outDir": "dist", + "sourceMap": true + }, + "include": [ + "src/**/*" + ], +} \ No newline at end of file