From c4eedfff1eed2e617167d93aa63c2cb395f57c66 Mon Sep 17 00:00:00 2001 From: Mees van der Wijk Date: Wed, 11 Mar 2026 16:46:06 +0100 Subject: [PATCH] Added basic control panel --- README.md | 31 +- TODO.md | 21 +- dist/Audio.js | 132 + dist/Audio.js.map | 1 + dist/CameraRunner.js | 34 +- dist/CameraRunner.js.map | 2 +- dist/Configuration/ConfigurationManager.js | 4 +- dist/Configuration/DefaultConfiguration.js | 1 + .../Configuration/DefaultConfiguration.js.map | 2 +- dist/Configuration/Timer copy.js | 132 + dist/Configuration/Timer copy.js.map | 1 + dist/Configuration/Timer.js | 145 + dist/Configuration/Timer.js.map | 1 + dist/ConfigurationManager.js | 138 - dist/ConfigurationManager.js.map | 1 - dist/Main.js | 84 +- dist/Main.js.map | 2 +- dist/Reboot.js | 30 - dist/Reboot.js.map | 1 - dist/Shutdown.js | 3 +- dist/Shutdown.js.map | 2 +- dist/Status.js | 120 + dist/Status.js.map | 1 + dist/Twilio.js | 5 +- dist/Twilio.js.map | 2 +- dist/Unity/CameraRunner.js | 214 - dist/Unity/CameraRunner.js.map | 1 - dist/Unity/Unity.js | 117 - dist/Unity/Unity.js.map | 1 - dist/Unity/UnityRunner.js | 62 +- dist/Unity/UnityRunner.js.map | 2 +- dist/Unity/UnityWebSocket.js | 36 +- dist/Unity/UnityWebSocket.js.map | 2 +- dist/UnityRunner.js | 207 - dist/UnityRunner.js.map | 1 - dist/Utils.js | 3 +- dist/Utils.js.map | 2 +- dist/WebServer.js | 31 - dist/WebServer.js.map | 1 - dist/WebServer/CalibrationRouter.js | 4 +- .../{DahboardRouter.js => ControlRouter.js} | 22 +- dist/WebServer/ControlRouter.js.map | 1 + dist/WebServer/DahboardRouter.js.map | 1 - dist/WebServer/DashboardRouter.js | 10 +- dist/WebServer/DashboardRouter.js.map | 2 +- dist/WebServer/WebServer.js | 27 +- dist/WebServer/WebServer.js.map | 2 +- frontend/static/font/RidleyGrotesk-Bold.otf | Bin 0 -> 46808 bytes .../static/font/RidleyGrotesk-Regular.otf | Bin 0 -> 46100 bytes .../Roboto-Italic-VariableFont_wdth,wght.ttf | Bin 0 -> 530052 bytes .../font/Roboto-VariableFont_wdth,wght.ttf | Bin 0 -> 487768 bytes frontend/static/font/ScothBrace.ttf | Bin 0 -> 69272 bytes frontend/static/img/call.png | Bin 0 -> 13149 bytes frontend/static/img/logo.png | Bin 0 -> 58100 bytes frontend/views/control/dist/calibration.js | 39 + .../views/control/dist/calibration.js.map | 1 + frontend/views/control/dist/checklist.js | 96 + frontend/views/control/dist/checklist.js.map | 1 + frontend/views/control/dist/main.js | 144 + frontend/views/control/dist/main.js.map | 1 + frontend/views/control/dist/menu.js | 46 + frontend/views/control/dist/menu.js.map | 1 + .../views/control/dist/outOfServiceMode.js | 67 + .../control/dist/outOfServiceMode.js.map | 1 + frontend/views/control/dist/timer.js | 31 + frontend/views/control/dist/timer.js.map | 1 + frontend/views/control/index.html | 284 + frontend/views/control/package-lock.json | 919 + frontend/views/control/package.json | 27 + frontend/views/control/rollup.config.js | 19 + frontend/views/control/script.js | 14895 ++++++++++++++++ frontend/views/control/script.js.map | 1 + frontend/views/control/scss/advanced.scss | 183 + frontend/views/control/scss/checklist.scss | 70 + frontend/views/control/scss/home.scss | 60 + frontend/views/control/scss/index.scss | 75 + frontend/views/control/scss/switch.scss | 61 + frontend/views/control/scss/text.scss | 27 + frontend/views/control/scss/topbar.scss | 30 + frontend/views/control/style.css | 2831 +++ frontend/views/control/style.css.map | 1 + frontend/views/control/ts/calibration.ts | 41 + frontend/views/control/ts/checklist.ts | 146 + frontend/views/control/ts/main.ts | 180 + frontend/views/control/ts/menu.ts | 42 + frontend/views/control/ts/outOfServiceMode.ts | 29 + frontend/views/control/ts/timer.ts | 36 + frontend/views/control/tsconfig.json | 9 + frontend/views/dashboard/index.html | 4 +- package-lock.json | 43 +- package.json | 5 +- src/Audio.ts | 112 + src/CameraRunner.ts | 61 +- src/Configuration/ConfigurationManager.ts | 11 +- src/Configuration/DefaultConfiguration.ts | 1 + src/Configuration/Timer.ts | 113 + src/Main.ts | 34 +- src/Status.ts | 156 + src/Twilio.ts | 12 +- src/Unity/UnityRunner.ts | 86 +- src/Unity/UnityWebSocket.ts | 62 +- src/WebServer/ControlRouter.ts | 46 + src/WebServer/DashboardRouter.ts | 12 +- src/WebServer/WebServer.ts | 64 +- test.js | 19 +- 105 files changed, 21923 insertions(+), 958 deletions(-) create mode 100644 dist/Audio.js create mode 100644 dist/Audio.js.map create mode 100644 dist/Configuration/Timer copy.js create mode 100644 dist/Configuration/Timer copy.js.map create mode 100644 dist/Configuration/Timer.js create mode 100644 dist/Configuration/Timer.js.map delete mode 100644 dist/ConfigurationManager.js delete mode 100644 dist/ConfigurationManager.js.map delete mode 100644 dist/Reboot.js delete mode 100644 dist/Reboot.js.map create mode 100644 dist/Status.js create mode 100644 dist/Status.js.map delete mode 100644 dist/Unity/CameraRunner.js delete mode 100644 dist/Unity/CameraRunner.js.map delete mode 100644 dist/Unity/Unity.js delete mode 100644 dist/Unity/Unity.js.map delete mode 100644 dist/UnityRunner.js delete mode 100644 dist/UnityRunner.js.map delete mode 100644 dist/WebServer.js delete mode 100644 dist/WebServer.js.map rename dist/WebServer/{DahboardRouter.js => ControlRouter.js} (86%) create mode 100644 dist/WebServer/ControlRouter.js.map delete mode 100644 dist/WebServer/DahboardRouter.js.map create mode 100644 frontend/static/font/RidleyGrotesk-Bold.otf create mode 100644 frontend/static/font/RidleyGrotesk-Regular.otf create mode 100644 frontend/static/font/Roboto-Italic-VariableFont_wdth,wght.ttf create mode 100644 frontend/static/font/Roboto-VariableFont_wdth,wght.ttf create mode 100644 frontend/static/font/ScothBrace.ttf create mode 100644 frontend/static/img/call.png create mode 100644 frontend/static/img/logo.png create mode 100644 frontend/views/control/dist/calibration.js create mode 100644 frontend/views/control/dist/calibration.js.map create mode 100644 frontend/views/control/dist/checklist.js create mode 100644 frontend/views/control/dist/checklist.js.map create mode 100644 frontend/views/control/dist/main.js create mode 100644 frontend/views/control/dist/main.js.map create mode 100644 frontend/views/control/dist/menu.js create mode 100644 frontend/views/control/dist/menu.js.map create mode 100644 frontend/views/control/dist/outOfServiceMode.js create mode 100644 frontend/views/control/dist/outOfServiceMode.js.map create mode 100644 frontend/views/control/dist/timer.js create mode 100644 frontend/views/control/dist/timer.js.map create mode 100644 frontend/views/control/index.html create mode 100644 frontend/views/control/package-lock.json create mode 100644 frontend/views/control/package.json create mode 100644 frontend/views/control/rollup.config.js create mode 100644 frontend/views/control/script.js create mode 100644 frontend/views/control/script.js.map create mode 100644 frontend/views/control/scss/advanced.scss create mode 100644 frontend/views/control/scss/checklist.scss create mode 100644 frontend/views/control/scss/home.scss create mode 100644 frontend/views/control/scss/index.scss create mode 100644 frontend/views/control/scss/switch.scss create mode 100644 frontend/views/control/scss/text.scss create mode 100644 frontend/views/control/scss/topbar.scss create mode 100644 frontend/views/control/style.css create mode 100644 frontend/views/control/style.css.map create mode 100644 frontend/views/control/ts/calibration.ts create mode 100644 frontend/views/control/ts/checklist.ts create mode 100644 frontend/views/control/ts/main.ts create mode 100644 frontend/views/control/ts/menu.ts create mode 100644 frontend/views/control/ts/outOfServiceMode.ts create mode 100644 frontend/views/control/ts/timer.ts create mode 100644 frontend/views/control/tsconfig.json create mode 100644 src/Audio.ts create mode 100644 src/Configuration/Timer.ts create mode 100644 src/Status.ts create mode 100644 src/WebServer/ControlRouter.ts diff --git a/README.md b/README.md index a39eb2a..b0b816d 100644 --- a/README.md +++ b/README.md @@ -6,17 +6,17 @@ A Node.js control system for Nothing to See Here installation. NTSH-Control provides centralized control and monitoring of: -- [Camera Runner](https://git.morphix.nl/Nothing-to-See-Here/NTSH-CameraRunner) process via WebSocket communication -- Unity application monitoring and lifecycle management -- Real-time system status and calibration through a web dashboard +- [Camera Runner](https://git.morphix.nl/Nothing-to-See-Here/NTSH-CameraRunner) process via WebSocket communication +- Unity application monitoring and lifecycle management +- Real-time system status and calibration through a web dashboard ## Features -- **Web Dashboard**: Monitor system status and control components through a browser interface -- **Camera Management**: Real-time connection monitoring and process control -- **Unity Integration**: Automatic startup and WebSocket communication with Unity applications -- **Calibration Tools**: Live image streaming and calibration interface -- **Process Monitoring**: Track uptime, connection status, and system health +- **Web Dashboard**: Monitor system status and control components through a browser interface +- **Camera Management**: Real-time connection monitoring and process control +- **Unity Integration**: Automatic startup and WebSocket communication with Unity applications +- **Calibration Tools**: Live image streaming and calibration interface +- **Process Monitoring**: Track uptime, connection status, and system health ## Installation & Setup @@ -38,10 +38,10 @@ NTSH-Control provides centralized control and monitoring of: Configuration is stored in `~/MorphixProductions/NTSHControl/config.json`. Default settings include: -- Web server port: `6300` -- Unity WebSocket: `127.0.0.1:3000` -- [Camera Runner](https://git.morphix.nl/Nothing-to-See-Here/NTSH-CameraRunner) WebSocket: `127.0.0.1:6301` -- Unity startup delay: `5000ms` +- Web server port: `6300` +- Unity WebSocket: `127.0.0.1:3000` +- [Camera Runner](https://git.morphix.nl/Nothing-to-See-Here/NTSH-CameraRunner) WebSocket: `127.0.0.1:6301` +- Unity startup delay: `5000ms` ## Usage @@ -49,6 +49,7 @@ The system automatically starts the web server and attempts to connect to the co ## Project Structure -- `src/` - TypeScript source code -- `frontend/views/dashboard/` - Web interface -- `dist/` - Compiled JavaScript output +- `src/` - TypeScript source code +- `frontend/views/dashboard/` - V2 web interface +- `frontend/views/dashboard/` - Legacy web interface +- `dist/` - Compiled JavaScript output diff --git a/TODO.md b/TODO.md index 4f9fd27..83336ff 100644 --- a/TODO.md +++ b/TODO.md @@ -1,13 +1,8 @@ -- **SMS Service met log** -- ✅ Feedback van dataSensor array -- ✅ dataSliders min/max and unit -- ✅ Camera before Unity -- ✅ Restart knop buiten service mode -- ✅ Operator phonenumber button -- ✅ Gracefull shutdown -- ✅ Out of service control - -Checken met Sjoerd - -- Sliders opslaan -- Camera error code +- **SMS Service met log** +- ✅ Feedback van dataSensor array +- ✅ dataSliders min/max and unit +- ✅ Camera before Unity +- ✅ Restart knop buiten service mode +- ✅ Operator phonenumber button +- ✅ Gracefull shutdown +- ✅ Out of service control diff --git a/dist/Audio.js b/dist/Audio.js new file mode 100644 index 0000000..162c51b --- /dev/null +++ b/dist/Audio.js @@ -0,0 +1,132 @@ +"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.AudioChecker = void 0; +var fs_extra_1 = require("fs-extra"); +var path_1 = require("path"); +var portAudio = require('naudiodon'); +var PREFIX = '[Audio]'; +var AudioChecker = /** @class */ (function () { + function AudioChecker(Main) { + this.deviceName = null; + this._Main = Main; + this.configPath = (0, path_1.join)(this._Main.dataPath, 'audio.json'); + this.load(); + } + AudioChecker.prototype.waitForDevice = function () { + var _a; + return __awaiter(this, void 0, void 0, function () { + var counter; + var _this = this; + return __generator(this, function (_b) { + if (((_a = this.deviceName) !== null && _a !== void 0 ? _a : '').trim().length == 0) { + console.log(PREFIX, 'No audio device configured, skipping audio check. Available devices:'); + portAudio + .getDevices() + .filter(function (device) { return device.maxOutputChannels > 0; }) + .forEach(function (device) { + console.log(" - ".concat(device.name)); + }); + return [2 /*return*/]; + } + console.log(PREFIX, "Waiting for device \"".concat(this.deviceName, "\"...")); + counter = 0; + return [2 /*return*/, new Promise(function (resolve) { + var c = setInterval(function () { + var _a; + counter++; + var availableDevices = portAudio + .getDevices() + .filter(function (device) { return device.maxOutputChannels > 0; }) + .map(function (device) { return device.name; }); + if (!availableDevices.includes(_this.deviceName)) { + if (counter == 3) { + console.log(PREFIX, 'Trouble finding the correct device. Available devices:'); + availableDevices.forEach(function (device) { + console.log(" - ".concat(device)); + }); + } + return; + } + var hostApis = portAudio.getHostAPIs(); + var defaultOutputDeviceId = hostApis.HostAPIs[hostApis.defaultHostAPI].defaultOutput; + var defaultOutputDeviceName = (_a = portAudio + .getDevices() + .find(function (device) { return device.id === defaultOutputDeviceId; })) === null || _a === void 0 ? void 0 : _a.name; + if (defaultOutputDeviceName !== _this.deviceName) { + console.warn(PREFIX, "The configured device \"".concat(_this.deviceName, "\" is not set as the default output device. Please set it as the default output device to ensure proper functionality. Current default output device: \"").concat(defaultOutputDeviceName, "\".")); + _this._Main.Twilio.sendError('Audio', "The configured device \"".concat(_this.deviceName, "\" is not set as the default output device. Current default output device: \"").concat(defaultOutputDeviceName, "\".")); + return; + } + clearInterval(c); + resolve(); + console.log(PREFIX, "Device \"".concat(_this.deviceName, "\" is ready!")); + }, 1000); + })]; + }); + }); + }; + AudioChecker.prototype.load = function () { + console.log(PREFIX, 'Loading audio configuration...'); + var exists = (0, fs_extra_1.pathExistsSync)(this.configPath); + if (!exists) + return this.save(); + var data = (0, fs_extra_1.readJSONSync)(this.configPath); + this.deviceName = data.deviceName; + }; + AudioChecker.prototype.save = function () { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + if (this._save) + clearTimeout(this._save); + this._save = setTimeout(function () { return __awaiter(_this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + (0, fs_extra_1.writeFile)(this.configPath, JSON.stringify({ deviceName: (_a = this.deviceName) !== null && _a !== void 0 ? _a : null }, null, 4)); + return [2 /*return*/]; + }); + }); }, 1000); + return [2 /*return*/]; + }); + }); + }; + return AudioChecker; +}()); +exports.AudioChecker = AudioChecker; +//# sourceMappingURL=Audio.js.map \ No newline at end of file diff --git a/dist/Audio.js.map b/dist/Audio.js.map new file mode 100644 index 0000000..aba68da --- /dev/null +++ b/dist/Audio.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Audio.js","sourceRoot":"","sources":["../src/Audio.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/CameraRunner.js b/dist/CameraRunner.js index 467922c..6814a4f 100644 --- a/dist/CameraRunner.js +++ b/dist/CameraRunner.js @@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; 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; + 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."); @@ -36,9 +36,10 @@ var __generator = (this && this.__generator) || function (thisArg, body) { } }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.CameraRunner = void 0; +exports.CameraProcessStateColors = exports.CameraPCStateColors = exports.CameraRunner = void 0; var socket_io_client_1 = require("socket.io-client"); var Utils_1 = require("./Utils"); +var Status_1 = require("./Status"); var PREFIX = "[CameraRunner]"; var CameraRunner = /** @class */ (function () { function CameraRunner(Main) { @@ -93,6 +94,11 @@ var CameraRunner = /** @class */ (function () { this.message = message; this.error = error; this.state = state; + this._Main.Status.update(Status_1.StatusType.CameraPC, exports.CameraPCStateColors[this.state], message, { + reboot: state === 'FAILED' || + state === 'DISCONNECTED' || + state == 'CONNECTED', + }); this.broadcastState(); if (error != null && Date.now() - this.bootTime > this.errorTriggerStartupDelay) @@ -117,6 +123,11 @@ var CameraRunner = /** @class */ (function () { case 1: data = _a.sent(); this.processStatus = data; + this._Main.Status.update(Status_1.StatusType.CameraProcess, exports.CameraProcessStateColors[this.processStatus.state], this.processStatus.message, { + reboot: this.processStatus.state === 'PROBLEM' || + this.processStatus.state === 'STOPPED' || + this.processStatus.state === 'RUNNING', + }); this.broadcastState(); return [2 /*return*/]; } @@ -126,6 +137,11 @@ var CameraRunner = /** @class */ (function () { _this.processStatus.state = simpleStatus.state; _this.processStatus.message = simpleStatus.message; _this.processStatus.error = simpleStatus.error; + _this._Main.Status.update(Status_1.StatusType.CameraProcess, exports.CameraProcessStateColors[_this.processStatus.state], _this.processStatus.message, { + reboot: _this.processStatus.state === 'PROBLEM' || + _this.processStatus.state === 'STOPPED' || + _this.processStatus.state === 'RUNNING', + }); _this.broadcastState(); }); clearInterval(this.pollClock); @@ -218,4 +234,16 @@ var CameraRunner = /** @class */ (function () { return CameraRunner; }()); exports.CameraRunner = CameraRunner; +exports.CameraPCStateColors = { + CONNECTED: Status_1.State.Green, + DISCONNECTED: Status_1.State.Gray, + CONNECTING: Status_1.State.Yellow, + FAILED: Status_1.State.Red, +}; +exports.CameraProcessStateColors = { + RUNNING: Status_1.State.Green, + STOPPED: Status_1.State.Gray, + STARTING: Status_1.State.Yellow, + PROBLEM: Status_1.State.Red, +}; //# sourceMappingURL=CameraRunner.js.map \ No newline at end of file diff --git a/dist/CameraRunner.js.map b/dist/CameraRunner.js.map index 6098210..ea65bd2 100644 --- a/dist/CameraRunner.js.map +++ b/dist/CameraRunner.js.map @@ -1 +1 @@ -{"version":3,"file":"CameraRunner.js","sourceRoot":"","sources":["../src/CameraRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"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 index 6d15f27..cdd150b 100644 --- a/dist/Configuration/ConfigurationManager.js +++ b/dist/Configuration/ConfigurationManager.js @@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; 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; + 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."); diff --git a/dist/Configuration/DefaultConfiguration.js b/dist/Configuration/DefaultConfiguration.js index 366d543..d592e00 100644 --- a/dist/Configuration/DefaultConfiguration.js +++ b/dist/Configuration/DefaultConfiguration.js @@ -21,6 +21,7 @@ exports.DefaultConfiguration = { }, heartbeatInterval: 1000, calibrationImageInterval: 2000, + launchOnStartup: true, }, cameraRunner: { webSocket: { diff --git a/dist/Configuration/DefaultConfiguration.js.map b/dist/Configuration/DefaultConfiguration.js.map index b0ef4be..49fbec9 100644 --- a/dist/Configuration/DefaultConfiguration.js.map +++ b/dist/Configuration/DefaultConfiguration.js.map @@ -1 +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,MAAM,EAAE;QACP,EAAE,EAAE,EAAE;QACN,cAAc,EAAE,IAAI;KACpB;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;IACD,MAAM,EAAE;QACP,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE;QACb,gBAAgB,EAAE,KAAK;QACvB,iBAAiB,EAAE,EAAE;KACrB;IACD,OAAO,EAAE;QACR,SAAS,EAAE,cAAc;KACzB;CACD,CAAC"} \ No newline at end of file +{"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,MAAM,EAAE;QACP,EAAE,EAAE,EAAE;QACN,cAAc,EAAE,IAAI;KACpB;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;QAC9B,eAAe,EAAE,IAAI;KACrB;IACD,YAAY,EAAE;QACb,SAAS,EAAE;YACV,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,IAAI;SACV;QAED,YAAY,EAAE,IAAI;KAClB;IACD,MAAM,EAAE;QACP,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE;QACb,gBAAgB,EAAE,KAAK;QACvB,iBAAiB,EAAE,EAAE;KACrB;IACD,OAAO,EAAE;QACR,SAAS,EAAE,cAAc;KACzB;CACD,CAAC"} \ No newline at end of file diff --git a/dist/Configuration/Timer copy.js b/dist/Configuration/Timer copy.js new file mode 100644 index 0000000..ad5cb44 --- /dev/null +++ b/dist/Configuration/Timer copy.js @@ -0,0 +1,132 @@ +"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.Timer = void 0; +var path_1 = require("path"); +var fs_extra_1 = require("fs-extra"); +var UnityRunner_1 = require("../Unity/UnityRunner"); +var PREFIX = '[Main]'; +var Timer = /** @class */ (function () { + function Timer(Main) { + this.start = { + hour: null, + minute: null, + }; + this.end = { + hour: null, + minute: null, + }; + this._Main = Main; + this.configPath = (0, path_1.join)(this._Main.dataPath, 'timer.json'); + } + Timer.prototype.startClock = function () { + var _this = this; + setInterval(function () { + var startTime = new Date(); + startTime.setHours(_this.start.hour, _this.start.minute, 0, 0); + var endTime = new Date(); + endTime.setHours(_this.end.hour, _this.end.minute, 0, 0); + var shouldBeStarted = startTime <= new Date() && endTime > new Date(); + if (shouldBeStarted) { + if (_this._Main.UnityRunner.state !== 'RUNNING' && + _this._Main.UnityRunner.state !== 'STARTING') { + console.log(PREFIX, 'Starting Unity'); + _this._Main.UnityRunner.start(UnityRunner_1.StartOrigin.Timer); + } + else if (_this._Main.UnityRunner.startOrigin !== UnityRunner_1.StartOrigin.Timer) { + console.log(PREFIX, 'Already running'); + _this._Main.UnityRunner.startOrigin = UnityRunner_1.StartOrigin.Timer; + } + } + else { + if (_this._Main.UnityRunner.state === 'RUNNING' && + _this._Main.UnityRunner.startOrigin === UnityRunner_1.StartOrigin.Timer) { + console.log(PREFIX, 'Stopping Unity'); + _this._Main.UnityRunner.stop(); + } + } + }, 5000); + }; + Timer.prototype.load = function () { + return __awaiter(this, void 0, void 0, function () { + var exists, data; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + console.log(PREFIX, 'Loading timer configuration...'); + return [4 /*yield*/, (0, fs_extra_1.pathExists)(this.configPath)]; + case 1: + exists = _a.sent(); + if (!exists) { + this.save(); + return [2 /*return*/, this.startClock()]; + } + return [4 /*yield*/, (0, fs_extra_1.readJSON)(this.configPath)]; + case 2: + data = _a.sent(); + this.start = data.start; + this.end = data.end; + this.startClock(); + return [2 /*return*/]; + } + }); + }); + }; + Timer.prototype.save = function () { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + if (this._save) + clearTimeout(this._save); + this._save = setTimeout(function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + (0, fs_extra_1.writeJSON)(this.configPath, { + start: this.start, + end: this.end, + }); + return [2 /*return*/]; + }); + }); }, 1000); + return [2 /*return*/]; + }); + }); + }; + return Timer; +}()); +exports.Timer = Timer; +//# sourceMappingURL=Timer%20copy.js.map \ No newline at end of file diff --git a/dist/Configuration/Timer copy.js.map b/dist/Configuration/Timer copy.js.map new file mode 100644 index 0000000..f32cd40 --- /dev/null +++ b/dist/Configuration/Timer copy.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Timer copy.js","sourceRoot":"","sources":["../../src/Configuration/Timer copy.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/Configuration/Timer.js b/dist/Configuration/Timer.js new file mode 100644 index 0000000..1622a6d --- /dev/null +++ b/dist/Configuration/Timer.js @@ -0,0 +1,145 @@ +"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.Timer = void 0; +var path_1 = require("path"); +var fs_extra_1 = require("fs-extra"); +var UnityRunner_1 = require("../Unity/UnityRunner"); +var PREFIX = '[Main]'; +var Timer = /** @class */ (function () { + function Timer(Main) { + this.start = { + hour: null, + minute: null, + }; + this.end = { + hour: null, + minute: null, + }; + this._Main = Main; + this.configPath = (0, path_1.join)(this._Main.dataPath, 'timer.json'); + } + Timer.prototype.getState = function () { + return { + start: this.start, + end: this.end, + }; + }; + Timer.prototype.setStart = function (data) { + this.start = data; + this._Main.WebServer.socket.emit('timer', this.getState()); + this.save(); + }; + Timer.prototype.setEnd = function (data) { + this.end = data; + this._Main.WebServer.socket.emit('timer', this.getState()); + this.save(); + }; + Timer.prototype.startClock = function () { + var _this = this; + setInterval(function () { + var startTime = new Date(); + startTime.setHours(_this.start.hour, _this.start.minute, 0, 0); + var endTime = new Date(); + endTime.setHours(_this.end.hour, _this.end.minute, 0, 0); + var shouldBeStarted = startTime <= new Date() && endTime > new Date(); + if (shouldBeStarted) { + if (_this._Main.UnityRunner.state !== 'RUNNING' && + _this._Main.UnityRunner.state !== 'STARTING') { + console.log(PREFIX, 'Starting Unity'); + _this._Main.UnityRunner.start(UnityRunner_1.StartOrigin.Timer); + } + else if (_this._Main.UnityRunner.startOrigin !== UnityRunner_1.StartOrigin.Timer) { + console.log(PREFIX, 'Already running'); + _this._Main.UnityRunner.startOrigin = UnityRunner_1.StartOrigin.Timer; + } + } + else { + if (_this._Main.UnityRunner.state === 'RUNNING' && + _this._Main.UnityRunner.startOrigin === UnityRunner_1.StartOrigin.Timer) { + console.log(PREFIX, 'Stopping Unity'); + _this._Main.UnityRunner.stop(); + } + } + }, 5000); + }; + Timer.prototype.load = function () { + return __awaiter(this, void 0, void 0, function () { + var exists, data; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + console.log(PREFIX, 'Loading timer configuration...'); + return [4 /*yield*/, (0, fs_extra_1.pathExists)(this.configPath)]; + case 1: + exists = _a.sent(); + if (!exists) { + this.save(); + return [2 /*return*/, this.startClock()]; + } + return [4 /*yield*/, (0, fs_extra_1.readJSON)(this.configPath)]; + case 2: + data = _a.sent(); + this.start = data.start; + this.end = data.end; + this.startClock(); + return [2 /*return*/]; + } + }); + }); + }; + Timer.prototype.save = function () { + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + if (this._save) + clearTimeout(this._save); + this._save = setTimeout(function () { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + (0, fs_extra_1.writeFile)(this.configPath, JSON.stringify({ start: this.start, end: this.end }, null, 4)); + return [2 /*return*/]; + }); + }); }, 1000); + return [2 /*return*/]; + }); + }); + }; + return Timer; +}()); +exports.Timer = Timer; +//# sourceMappingURL=Timer.js.map \ No newline at end of file diff --git a/dist/Configuration/Timer.js.map b/dist/Configuration/Timer.js.map new file mode 100644 index 0000000..3a494b4 --- /dev/null +++ b/dist/Configuration/Timer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Timer.js","sourceRoot":"","sources":["../../src/Configuration/Timer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/ConfigurationManager.js b/dist/ConfigurationManager.js deleted file mode 100644 index ead3306..0000000 --- a/dist/ConfigurationManager.js +++ /dev/null @@ -1,138 +0,0 @@ -"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 deleted file mode 100644 index 1be6b05..0000000 --- a/dist/ConfigurationManager.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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/Main.js b/dist/Main.js index d1e6096..2b47586 100644 --- a/dist/Main.js +++ b/dist/Main.js @@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; 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; + 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."); @@ -48,41 +48,57 @@ var Twilio_1 = require("./Twilio"); var Utils_1 = require("./Utils"); var ping = require("ping"); var Shutdown_1 = require("./Shutdown"); +var Timer_1 = require("./Configuration/Timer"); +var Status_1 = require("./Status"); +var Audio_1 = require("./Audio"); var PREFIX = '[Main]'; 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.Timer = new Timer_1.Timer(this); + this.Status = new Status_1.Status(this); this.WebServer = new WebServer_1.WebServer(this); this.Twilio = new Twilio_1.TwilioHandler(this); + this.Audio = new Audio_1.AudioChecker(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 () { + var _a, _b; return __awaiter(this, void 0, void 0, function () { var _this = this; - var _a; - return __generator(this, function (_b) { - switch (_b.label) { + return __generator(this, function (_c) { + switch (_c.label) { case 0: return [4 /*yield*/, this.ConfigurationManager.load()]; case 1: - _b.sent(); + _c.sent(); return [4 /*yield*/, this.waitForRouter()]; case 2: - _b.sent(); + _c.sent(); return [4 /*yield*/, this.WebServer.listen()]; case 3: - _b.sent(); + _c.sent(); return [4 /*yield*/, this.Twilio.load()]; case 4: - _b.sent(); - return [4 /*yield*/, this.CameraRunner.connect()]; + _c.sent(); + return [4 /*yield*/, this.Audio.waitForDevice()]; case 5: - _b.sent(); - setTimeout(function () { - _this.UnityRunner.start(); - }, (_a = this.Config.unity.executable.startUpDelay) !== null && _a !== void 0 ? _a : 0); + _c.sent(); + return [4 /*yield*/, this.CameraRunner.connect()]; + case 6: + _c.sent(); + return [4 /*yield*/, this.Timer.load()]; + case 7: + _c.sent(); + if (((_a = this.Config.unity.launchOnStartup) !== null && _a !== void 0 ? _a : true) === true) + setTimeout(function () { + _this.UnityRunner.start(UnityRunner_1.StartOrigin.Startup); + }, (_b = this.Config.unity.executable.startUpDelay) !== null && _b !== void 0 ? _b : 0); + else { + this.UnityRunner.setInfo('Not set to launch on startup. Waiting for timer or manual start...', null, 'STOPPED'); + } return [2 /*return*/]; } }); @@ -123,7 +139,7 @@ var Main = /** @class */ (function () { case 3: _a.sent(); console.log('Starting UnityRunner...'); - return [4 /*yield*/, this.UnityRunner.start()]; + return [4 /*yield*/, this.UnityRunner.start(this.UnityRunner.startOrigin)]; case 4: _a.sent(); console.log('Restart complete.'); @@ -166,25 +182,27 @@ var Main = /** @class */ (function () { return new Promise(function (resolve) { var check = function () { console.log(PREFIX, 'Waiting for router...'); - ping.sys.probe(_this.Config.router.ip, function (_a) { return __awaiter(_this, [_a], void 0, function (_b) { - var alive = _b.alive; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - if (!alive) return [3 /*break*/, 2]; - console.log(PREFIX, 'Router is online'); - return [4 /*yield*/, (0, Utils_1.delay)(3000)]; - case 1: - _c.sent(); - return [2 /*return*/, resolve()]; - case 2: return [4 /*yield*/, (0, Utils_1.delay)(1000)]; - case 3: - _c.sent(); - check(); - return [2 /*return*/]; - } + ping.sys.probe(_this.Config.router.ip, function (_a) { + var alive = _a.alive; + return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + if (!alive) return [3 /*break*/, 2]; + console.log(PREFIX, 'Router is online'); + return [4 /*yield*/, (0, Utils_1.delay)(3000)]; + case 1: + _b.sent(); + return [2 /*return*/, resolve()]; + case 2: return [4 /*yield*/, (0, Utils_1.delay)(1000)]; + case 3: + _b.sent(); + check(); + return [2 /*return*/]; + } + }); }); - }); }); + }); }; check(); }); diff --git a/dist/Main.js.map b/dist/Main.js.map index c2e3f18..d2e1359 100644 --- a/dist/Main.js.map +++ b/dist/Main.js.map @@ -1 +1 @@ -{"version":3,"file":"Main.js","sourceRoot":"","sources":["../src/Main.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Main.js","sourceRoot":"","sources":["../src/Main.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/Reboot.js b/dist/Reboot.js deleted file mode 100644 index 2b87f6a..0000000 --- a/dist/Reboot.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.shutdown = shutdown; -var child_process_1 = require("child_process"); -function shutdown() { - if (process.platform === 'win32') { - return shutdownWindows(); - } - return Promise.resolve({ - succeed: false, - message: 'Platform not supported', - }); -} -function shutdownWindows() { - return new Promise(function (resolve, reject) { - (0, child_process_1.exec)('shutdown /s /t 5', function (error, stdout, stderr) { - if (error) { - console.error("Error shutting down Windows: ".concat(error.message)); - return resolve({ succeed: false, message: error.message }); - } - if (stderr) { - console.error("Error shutting down Windows: ".concat(stderr)); - return resolve({ succeed: false, message: stderr }); - } - console.log("Windows shutdown command executed: ".concat(stdout)); - resolve({ succeed: true }); - }); - }); -} -//# sourceMappingURL=Reboot.js.map \ No newline at end of file diff --git a/dist/Reboot.js.map b/dist/Reboot.js.map deleted file mode 100644 index cb72f7b..0000000 --- a/dist/Reboot.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Reboot.js","sourceRoot":"","sources":["../src/Reboot.ts"],"names":[],"mappings":";;AAEA,4BASC;AAXD,+CAAqC;AAErC,SAAgB,QAAQ;IACvB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,eAAe,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC;QACtB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,wBAAwB;KACjC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe;IACvB,OAAO,IAAI,OAAO,CACjB,UAAC,OAAO,EAAE,MAAM;QACf,IAAA,oBAAI,EAAC,kBAAkB,EAAE,UAAC,KAAK,EAAE,MAAM,EAAE,MAAM;YAC9C,IAAI,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CACZ,uCAAgC,KAAK,CAAC,OAAO,CAAE,CAC/C,CAAC;gBACF,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,uCAAgC,MAAM,CAAE,CAAC,CAAC;gBACxD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,6CAAsC,MAAM,CAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACJ,CAAC,CACD,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/dist/Shutdown.js b/dist/Shutdown.js index 74bd916..c94e1c8 100644 --- a/dist/Shutdown.js +++ b/dist/Shutdown.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.shutdown = shutdown; +exports.shutdown = void 0; var child_process_1 = require("child_process"); function shutdown() { if (process.platform === 'win32') { @@ -11,6 +11,7 @@ function shutdown() { message: 'Platform not supported', }); } +exports.shutdown = shutdown; function shutdownWindows() { return new Promise(function (resolve, reject) { (0, child_process_1.exec)('shutdown /s /t 5', function (error, stdout, stderr) { diff --git a/dist/Shutdown.js.map b/dist/Shutdown.js.map index d383f6f..e7a0a63 100644 --- a/dist/Shutdown.js.map +++ b/dist/Shutdown.js.map @@ -1 +1 @@ -{"version":3,"file":"Shutdown.js","sourceRoot":"","sources":["../src/Shutdown.ts"],"names":[],"mappings":";;AAEA,4BASC;AAXD,+CAAqC;AAErC,SAAgB,QAAQ;IACvB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,eAAe,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC;QACtB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,wBAAwB;KACjC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe;IACvB,OAAO,IAAI,OAAO,CACjB,UAAC,OAAO,EAAE,MAAM;QACf,IAAA,oBAAI,EAAC,kBAAkB,EAAE,UAAC,KAAK,EAAE,MAAM,EAAE,MAAM;YAC9C,IAAI,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CACZ,uCAAgC,KAAK,CAAC,OAAO,CAAE,CAC/C,CAAC;gBACF,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,uCAAgC,MAAM,CAAE,CAAC,CAAC;gBACxD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,6CAAsC,MAAM,CAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACJ,CAAC,CACD,CAAC;AACH,CAAC"} \ No newline at end of file +{"version":3,"file":"Shutdown.js","sourceRoot":"","sources":["../src/Shutdown.ts"],"names":[],"mappings":";;;AAAA,+CAAqC;AAErC,SAAgB,QAAQ;IACvB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAClC,OAAO,eAAe,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO,OAAO,CAAC,OAAO,CAAC;QACtB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE,wBAAwB;KACjC,CAAC,CAAC;AACJ,CAAC;AATD,4BASC;AAED,SAAS,eAAe;IACvB,OAAO,IAAI,OAAO,CACjB,UAAC,OAAO,EAAE,MAAM;QACf,IAAA,oBAAI,EAAC,kBAAkB,EAAE,UAAC,KAAK,EAAE,MAAM,EAAE,MAAM;YAC9C,IAAI,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CACZ,uCAAgC,KAAK,CAAC,OAAO,CAAE,CAC/C,CAAC;gBACF,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,uCAAgC,MAAM,CAAE,CAAC,CAAC;gBACxD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,6CAAsC,MAAM,CAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACJ,CAAC,CACD,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/dist/Status.js b/dist/Status.js new file mode 100644 index 0000000..241a7c1 --- /dev/null +++ b/dist/Status.js @@ -0,0 +1,120 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.StatusType = exports.State = exports.Status = void 0; +var UnityRunner_1 = require("./Unity/UnityRunner"); +var Status = /** @class */ (function () { + function Status(Main) { + this.states = new Map(); + this._Main = Main; + this.ensure(); + this.startClock(); + } + Status.prototype.update = function (type, state, message, buttons) { + this.states.set(type, { state: state, message: message, buttons: buttons }); + this._Main.WebServer.socket.emit('status', this.getState()); + }; + Status.prototype.reboot = function (type) { + switch (type) { + case StatusType.CameraPC: { + this._Main.CameraRunner.sendCommand('reboot', function (response) { + console.log('CameraRunner reboot response:', response); + }); + } + case StatusType.CameraProcess: { + this._Main.CameraRunner.sendCommand('restart', function (response) { + console.log('CameraRunner restart response:', response); + }); + } + case StatusType.CameraUnityStream: { + this._Main.CameraRunner.sendCommand('restart', function (response) { + console.log('CameraRunner restart response:', response); + }); + this._Main.UnityRunner.restart(UnityRunner_1.StartOrigin.Manual); + } + case StatusType.UnityBuild: { + this._Main.UnityRunner.restart(UnityRunner_1.StartOrigin.Manual); + } + case StatusType.ReplayFunction: { + console.log('ReplayFunction reboot requested. Not implemented.'); + } + } + }; + Status.prototype.start = function (type) { + switch (type) { + case StatusType.UnityBuild: { + this._Main.UnityRunner.requestStart(UnityRunner_1.StartOrigin.Manual); + } + } + }; + Status.prototype.stop = function (type) { + switch (type) { + case StatusType.UnityBuild: { + this._Main.UnityRunner.requestStop(); + } + } + }; + Status.prototype.getState = function () { + var state = {}; + this.states.forEach(function (value, key) { + state[key] = value; + }); + return state; + }; + Status.prototype.startClock = function () { + var _this = this; + var hadInvalidLastRound = false; + setInterval(function () { + var hasInvalid = false; + _this.states.forEach(function (state, key) { + if (state.state === State.Red) + hasInvalid = true; + }); + if (hasInvalid && !hadInvalidLastRound) { + hadInvalidLastRound = true; + console.warn('One ore more status entries are invalid, waiting to see if they recover...'); + } + else if (hasInvalid && hadInvalidLastRound) { + console.error('One ore more status entries are still invalid after 5 seconds, restarting system.'); + _this._Main.Twilio.sendError('Status', 'One ore more status entries are still invalid after 5 seconds, restarting system.'); + _this._Main.restart(); + } + else { + _this._Main.Twilio.sendError('Status', null); + hadInvalidLastRound = false; + } + }, 5000); + }; + Status.prototype.ensure = function () { + for (var type in StatusType) { + if (!this.states.has(StatusType[type])) + this.states.set(StatusType[type], { + state: State.Gray, + message: 'Loading...', + }); + } + }; + Status.prototype.doLog = function () { + console.clear(); + this.states.forEach(function (state, key) { + console.log("[".concat(key, "] ").concat(state.state, " - ").concat(state.message)); + }); + }; + return Status; +}()); +exports.Status = Status; +var State; +(function (State) { + State["Green"] = "GREEN"; + State["Yellow"] = "YELLOW"; + State["Red"] = "RED"; + State["Gray"] = "GRAY"; +})(State || (exports.State = State = {})); +var StatusType; +(function (StatusType) { + StatusType["CameraPC"] = "CAMERAPC"; + StatusType["CameraProcess"] = "CAMERAPROCESS"; + StatusType["CameraUnityStream"] = "CAMERAUNITYSTREAM"; + StatusType["UnityBuild"] = "UNITYBUILD"; + StatusType["ReplayFunction"] = "REPLAYFUNCTION"; +})(StatusType || (exports.StatusType = StatusType = {})); +//# sourceMappingURL=Status.js.map \ No newline at end of file diff --git a/dist/Status.js.map b/dist/Status.js.map new file mode 100644 index 0000000..8f60a29 --- /dev/null +++ b/dist/Status.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Status.js","sourceRoot":"","sources":["../src/Status.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/Twilio.js b/dist/Twilio.js index ec13c70..b76df0b 100644 --- a/dist/Twilio.js +++ b/dist/Twilio.js @@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; 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; + 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."); @@ -148,7 +148,6 @@ var TwilioHandler = /** @class */ (function () { }; TwilioHandler.prototype.sendMessage = function (to, message) { var _this = this; - return; return new Promise(function (resolve) { _this.client.messages .create({ diff --git a/dist/Twilio.js.map b/dist/Twilio.js.map index 6e6b024..d3600bc 100644 --- a/dist/Twilio.js.map +++ b/dist/Twilio.js.map @@ -1 +1 @@ -{"version":3,"file":"Twilio.js","sourceRoot":"","sources":["../src/Twilio.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Twilio.js","sourceRoot":"","sources":["../src/Twilio.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/Unity/CameraRunner.js b/dist/Unity/CameraRunner.js deleted file mode 100644 index 2fc125b..0000000 --- a/dist/Unity/CameraRunner.js +++ /dev/null @@ -1,214 +0,0 @@ -"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 deleted file mode 100644 index b7b1474..0000000 --- a/dist/Unity/CameraRunner.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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 deleted file mode 100644 index 6438c08..0000000 --- a/dist/Unity/Unity.js +++ /dev/null @@ -1,117 +0,0 @@ -"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 deleted file mode 100644 index 53a07e1..0000000 --- a/dist/Unity/Unity.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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 index e55d668..f651067 100644 --- a/dist/Unity/UnityRunner.js +++ b/dist/Unity/UnityRunner.js @@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; 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; + 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."); @@ -45,10 +45,11 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { return to.concat(ar || Array.prototype.slice.call(from)); }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.UnityRunner = void 0; +exports.StartOrigin = exports.UnityBuildStateColors = exports.UnityRunner = void 0; var fs_extra_1 = require("fs-extra"); var child_process_1 = require("child_process"); var Utils_1 = require("../Utils"); +var Status_1 = require("../Status"); var PREFIX = '[UnityRunner]'; var LOG_OUTPUT = !process.argv.includes('--no-output-log'); var UnityRunner = /** @class */ (function () { @@ -70,11 +71,11 @@ var UnityRunner = /** @class */ (function () { return; switch (command) { case 'restart': - return callback(this.requestRestart()); + return callback(this.requestRestart(StartOrigin.Manual)); case 'stop': return callback(this.requestStop()); case 'start': - return callback(this.requestStart()); + return callback(this.requestStart(StartOrigin.Manual)); } }; UnityRunner.prototype.startStatusClock = function () { @@ -84,13 +85,13 @@ var UnityRunner = /** @class */ (function () { _this.broadcastState(); }, 3000); }; - UnityRunner.prototype.requestRestart = function () { + UnityRunner.prototype.requestRestart = function (startOrigin) { if (this.state !== 'RUNNING') return { succeed: false, message: 'Cannot restart when process is not running. It is probably restarting already.', }; - this.restart(true); + this.restart(startOrigin, true); return { succeed: true }; }; UnityRunner.prototype.requestStop = function () { @@ -102,23 +103,29 @@ var UnityRunner = /** @class */ (function () { this.stop(); return { succeed: true }; }; - UnityRunner.prototype.requestStart = function () { + UnityRunner.prototype.requestStart = function (startOrigin) { if (this.state !== 'STOPPED') return { succeed: false, message: 'Cannot start when process is already running.', }; - this.start(); + this.start(startOrigin); return { succeed: true }; }; UnityRunner.prototype.broadcastState = function () { this._Main.WebServer.socket.emit('unityRunnerState', this.getStatus()); }; UnityRunner.prototype.setInfo = function (message, error, state) { + var _a; if (state === void 0) { state = 'PROBLEM'; } this.message = message; this.error = error; this.state = state; + this._Main.Status.update(Status_1.StatusType.UnityBuild, exports.UnityBuildStateColors[state], (_a = message !== null && message !== void 0 ? message : error) !== null && _a !== void 0 ? _a : '', { + reboot: state === 'PROBLEM' || state === 'RUNNING', + start: state === 'STOPPED', + stop: state === 'RUNNING', + }); this.broadcastState(); if (error != null) this._Main.Twilio.sendError('UnityRunner', error); @@ -174,9 +181,9 @@ var UnityRunner = /** @class */ (function () { }); }); }; - UnityRunner.prototype.restart = function () { - return __awaiter(this, arguments, void 0, function (instant) { - if (instant === void 0) { instant = false; } + UnityRunner.prototype.restart = function (origin, instant) { + if (instant === void 0) { instant = false; } + return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { switch (_a.label) { case 0: @@ -186,6 +193,7 @@ var UnityRunner = /** @class */ (function () { this._Main.WebServer.Calibration.hasCalibrationImage = false; clearInterval(this.statusClock); this.startTime = -1; + this.startOrigin = null; this.broadcastState(); if (!!instant) return [3 /*break*/, 2]; return [4 /*yield*/, (0, Utils_1.delay)(2000)]; @@ -216,7 +224,7 @@ var UnityRunner = /** @class */ (function () { case 7: _a.sent(); _a.label = 8; - case 8: return [4 /*yield*/, this.start()]; + case 8: return [4 /*yield*/, this.start(this.startOrigin)]; case 9: _a.sent(); return [2 /*return*/]; @@ -224,11 +232,11 @@ var UnityRunner = /** @class */ (function () { }); }); }; - UnityRunner.prototype.start = function () { + UnityRunner.prototype.start = function (origin) { + var _a, _b, _c; 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: @@ -285,11 +293,11 @@ var UnityRunner = /** @class */ (function () { if (_this.restartTriggered) return; _this.setInfo('Process exited', "Process exited with code ".concat(code, " and signal ").concat(signal), 'PROBLEM'); - _this.restart(); + _this.restart(_this.startOrigin); }); this.process.on('error', function (err) { _this.setInfo('Process error', err.message); - _this.restart(); + _this.restart(_this.startOrigin); }); (_b = this.process.stdout) === null || _b === void 0 ? void 0 : _b.on('data', function (data) { var lines = data @@ -317,6 +325,7 @@ var UnityRunner = /** @class */ (function () { _this.output.current.push(formattedLine); }); }); + this.startOrigin = origin; this.startStatusClock(); setTimeout(function () { var _a, _b; @@ -346,4 +355,23 @@ var UnityRunner = /** @class */ (function () { return UnityRunner; }()); exports.UnityRunner = UnityRunner; +var State; +(function (State) { + State["Green"] = "GREEN"; + State["Yellow"] = "YELLOW"; + State["Red"] = "RED"; + State["Gray"] = "GRAY"; +})(State || (State = {})); +exports.UnityBuildStateColors = { + RUNNING: State.Green, + STOPPED: State.Gray, + STARTING: State.Yellow, + PROBLEM: State.Red, +}; +var StartOrigin; +(function (StartOrigin) { + StartOrigin["Timer"] = "TIMER"; + StartOrigin["Manual"] = "MANUAL"; + StartOrigin["Startup"] = "STARTUP"; +})(StartOrigin || (exports.StartOrigin = StartOrigin = {})); //# sourceMappingURL=UnityRunner.js.map \ No newline at end of file diff --git a/dist/Unity/UnityRunner.js.map b/dist/Unity/UnityRunner.js.map index f5bc163..c29a734 100644 --- a/dist/Unity/UnityRunner.js.map +++ b/dist/Unity/UnityRunner.js.map @@ -1 +1 @@ -{"version":3,"file":"UnityRunner.js","sourceRoot":"","sources":["../../src/Unity/UnityRunner.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"UnityRunner.js","sourceRoot":"","sources":["../../src/Unity/UnityRunner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAA0C;AAC1C,+CAAoD;AACpD,kCAAiC;AAGjC,oCAAuC;AAEvC,IAAM,MAAM,GAAG,eAAe,CAAC;AAE/B,IAAM,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AAE7D;IAgBC,qBAAY,IAAU;QAVtB,YAAO,GAAY,2BAA2B,CAAC;QAG/C,aAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEtB,cAAS,GAAW,IAAI,CAAC;QACzB,WAAM,GAA0C,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QA+J1E,qBAAgB,GAAY,KAAK,CAAC;QA1JjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,4BAAM,GAAN,UAAO,OAAe;QAAE,cAAc;aAAd,UAAc,EAAd,qBAAc,EAAd,IAAc;YAAd,6BAAc;;QACrC,IAAM,QAAQ,GAGD,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,OAAO,QAAQ,KAAK,UAAU;YAAE,OAAO;QAE3C,QAAQ,OAAO,EAAE,CAAC;YACjB,KAAK,SAAS;gBACb,OAAO,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1D,KAAK,MAAM;gBACV,OAAO,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YACrC,KAAK,OAAO;gBACX,OAAO,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QACzD,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,UAAe,WAAwB;QAItC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAC3B,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,OAAO,EACN,gFAAgF;aACjF,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,iCAAW,GAAX;QACC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAC3B,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,OAAO,EACN,6EAA6E;aAC9E,CAAC;QAEH,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,kCAAY,GAAZ,UAAa,WAAwB;QAIpC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAC3B,OAAO;gBACN,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,+CAA+C;aACxD,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACxB,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,KAAK,CAAC,MAAM,CAAC,MAAM,CACvB,mBAAU,CAAC,UAAU,EACrB,6BAAqB,CAAC,KAAK,CAAC,EAC5B,MAAA,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,KAAK,mCAAI,EAAE,EACtB;YACC,MAAM,EAAE,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;YAClD,KAAK,EAAE,KAAK,KAAK,SAAS;YAC1B,IAAI,EAAE,KAAK,KAAK,SAAS;SACzB,CACD,CAAC;QACF,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,KAAK,IAAI,IAAI;YAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAErE,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;IAEK,0BAAI,GAAV;;;;;;;wBACC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI;4BAAE,sBAAO;wBAEjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;wBAE7B,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;4BACrD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC;4BAE5C,IAAI,CAAC,OAAO,CACX,qCAAqC,EACrC,IAAI,EACJ,UAAU,CACV,CAAC;wBACH,CAAC;6BAAM,CAAC;4BACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;4BAC7B,IAAI,CAAC,OAAO,CAAC,mCAAmC,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;wBACrE,CAAC;wBAEqB,qBAAM,IAAI,OAAO,CAAC,UAAC,OAAO;gCAC/C,IAAM,OAAO,GAAG,UAAU,CAAC;oCAC1B,aAAa,CAAC,CAAC,CAAC,CAAC;oCACjB,OAAO,CAAC,KAAK,CAAC,CAAC;gCAChB,CAAC,EAAE,IAAI,CAAC,CAAC;gCAET,IAAM,CAAC,GAAG,WAAW,CAAC;oCACrB,IACC,KAAI,CAAC,OAAO,IAAI,IAAI;wCACpB,CAAC,KAAI,CAAC,OAAO,CAAC,MAAM;wCACpB,KAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI;wCAE7B,OAAO;oCAER,YAAY,CAAC,OAAO,CAAC,CAAC;oCACtB,aAAa,CAAC,CAAC,CAAC,CAAC;oCACjB,OAAO,CAAC,IAAI,CAAC,CAAC;gCACf,CAAC,CAAC,CAAC;4BACJ,CAAC,CAAC,EAAA;;wBAlBI,aAAa,GAAG,SAkBpB;wBAEF,IAAI,CAAC,aAAa;4BAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAEjD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;wBAEzC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;wBAEvC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,mBAAmB,GAAG,KAAK,CAAC;wBAC7D,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;;;;;KACpB;IAGK,6BAAO,GAAb,UAAc,MAAmB,EAAE,OAAwB;QAAxB,wBAAA,EAAA,eAAwB;;;;;wBAC1D,IAAI,IAAI,CAAC,gBAAgB;4BAAE,sBAAO;wBAClC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;wBAE7B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,mBAAmB,GAAG,KAAK,CAAC;wBAE7D,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAEhC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;wBACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;wBACxB,IAAI,CAAC,cAAc,EAAE,CAAC;6BAElB,CAAC,OAAO,EAAR,wBAAQ;wBAAE,qBAAM,IAAA,aAAK,EAAC,IAAI,CAAC,EAAA;;wBAAjB,SAAiB,CAAC;;;wBAEhC,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,qBAAM,IAAI,CAAC,IAAI,EAAE,EAAA;;wBAAjB,SAAiB,CAAC;6BAEd,OAAO,EAAP,wBAAO;wBACV,qBAAM,IAAA,aAAK,EAAC,IAAI,CAAC,EAAA;;wBAAjB,SAAiB,CAAC;wBAClB,IAAI,CAAC,OAAO,CAAC,iCAAiC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;wBACjE,qBAAM,IAAA,aAAK,EAAC,IAAI,CAAC,EAAA;;wBAAjB,SAAiB,CAAC;;;wBAElB,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,CAAC,IAAI,CAAC,WAAW,CAAC,EAAA;;wBAAlC,SAAkC,CAAC;;;;;KACnC;IAEK,2BAAK,GAAX,UAAY,MAAmB;;;;;;;;wBAC9B,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,CAAC,KAAI,CAAC,WAAW,CAAC,CAAC;wBAChC,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,CAAC,KAAI,CAAC,WAAW,CAAC,CAAC;wBAChC,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,WAAW,GAAG,MAAM,CAAC;wBAC1B,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,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;4BAC5C,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,AAtVD,IAsVC;AAtVY,kCAAW;AAiWxB,IAAK,KAKJ;AALD,WAAK,KAAK;IACT,wBAAe,CAAA;IACf,0BAAiB,CAAA;IACjB,oBAAW,CAAA;IACX,sBAAa,CAAA;AACd,CAAC,EALI,KAAK,KAAL,KAAK,QAKT;AAEY,QAAA,qBAAqB,GAAsC;IACvE,OAAO,EAAE,KAAK,CAAC,KAAK;IACpB,OAAO,EAAE,KAAK,CAAC,IAAI;IACnB,QAAQ,EAAE,KAAK,CAAC,MAAM;IACtB,OAAO,EAAE,KAAK,CAAC,GAAG;CAClB,CAAC;AAIF,IAAY,WAIX;AAJD,WAAY,WAAW;IACtB,8BAAe,CAAA;IACf,gCAAiB,CAAA;IACjB,kCAAmB,CAAA;AACpB,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB"} \ No newline at end of file diff --git a/dist/Unity/UnityWebSocket.js b/dist/Unity/UnityWebSocket.js index 3ab7041..66db478 100644 --- a/dist/Unity/UnityWebSocket.js +++ b/dist/Unity/UnityWebSocket.js @@ -20,8 +20,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; 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; + 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."); @@ -47,9 +47,10 @@ var __generator = (this && this.__generator) || function (thisArg, body) { } }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.UnityWebSocket = void 0; +exports.CameraUnityStateColors = exports.UnityWebSocket = void 0; var ws_1 = require("ws"); var Utils_1 = require("../Utils"); +var Status_1 = require("../Status"); var PREFIX = '[Unity]'; var UnityWebSocket = /** @class */ (function () { function UnityWebSocket(Main) { @@ -71,6 +72,7 @@ var UnityWebSocket = /** @class */ (function () { this.disconnected = false; this.restartRequested = false; this._Main = Main; + this.updateStatus(); } UnityWebSocket.prototype.handle = function (command) { var args = []; @@ -150,11 +152,27 @@ var UnityWebSocket = /** @class */ (function () { UnityWebSocket.prototype.broadcastState = function () { this._Main.WebServer.socket.emit('unityWebSocketState', this.getState()); }; + UnityWebSocket.prototype.updateStatus = function () { + if (this.state != 'CONNECTED') { + this._Main.Status.update(Status_1.StatusType.CameraUnityStream, exports.CameraUnityStateColors[this.state], this.message, { + reboot: this.state === 'FAILED', + }); + } + else { + var status_1 = !this.parameters.zedReady + ? 'Waiting for ZED stream' + : this.message; + this._Main.Status.update(Status_1.StatusType.CameraUnityStream, this.parameters.zedReady ? Status_1.State.Green : Status_1.State.Yellow, status_1, { + reboot: this.parameters.zedReady, + }); + } + }; UnityWebSocket.prototype.setInfo = function (message, error, state) { if (state === void 0) { state = 'FAILED'; } this.message = message; this.error = error; this.state = state; + this.updateStatus(); this.broadcastState(); if (error != null) this._Main.Twilio.sendError('UnityWebSocket', error); @@ -204,6 +222,7 @@ var UnityWebSocket = /** @class */ (function () { ? 2 : null }); }); + this.updateStatus(); this.broadcastState(); break; case 'response_camera_frame': @@ -302,7 +321,10 @@ var UnityWebSocket = /** @class */ (function () { }; UnityWebSocket.prototype.startFetchClocks = function () { var _this = this; - this.socket.send(JSON.stringify({ type: 'set_heartbeat_auto_send', autoSend: false })); + 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) @@ -327,4 +349,10 @@ var UnityWebSocket = /** @class */ (function () { return UnityWebSocket; }()); exports.UnityWebSocket = UnityWebSocket; +exports.CameraUnityStateColors = { + CONNECTED: Status_1.State.Green, + DISCONNECTED: Status_1.State.Gray, + CONNECTING: Status_1.State.Yellow, + FAILED: Status_1.State.Red, +}; //# sourceMappingURL=UnityWebSocket.js.map \ No newline at end of file diff --git a/dist/Unity/UnityWebSocket.js.map b/dist/Unity/UnityWebSocket.js.map index 53d38b9..91c7e06 100644 --- a/dist/Unity/UnityWebSocket.js.map +++ b/dist/Unity/UnityWebSocket.js.map @@ -1 +1 @@ -{"version":3,"file":"UnityWebSocket.js","sourceRoot":"","sources":["../../src/Unity/UnityWebSocket.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"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 deleted file mode 100644 index 882f9f7..0000000 --- a/dist/UnityRunner.js +++ /dev/null @@ -1,207 +0,0 @@ -"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 deleted file mode 100644 index ea9f62e..0000000 --- a/dist/UnityRunner.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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 index f995540..0e675c4 100644 --- a/dist/Utils.js +++ b/dist/Utils.js @@ -1,7 +1,8 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.delay = delay; +exports.delay = void 0; function delay(duration) { return new Promise(function (resolve) { return setTimeout(resolve, duration); }); } +exports.delay = delay; //# sourceMappingURL=Utils.js.map \ No newline at end of file diff --git a/dist/Utils.js.map b/dist/Utils.js.map index cd36e95..4c90012 100644 --- a/dist/Utils.js.map +++ b/dist/Utils.js.map @@ -1 +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 +{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../src/Utils.ts"],"names":[],"mappings":";;;AAMA,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;AAFD,sBAEC"} \ No newline at end of file diff --git a/dist/WebServer.js b/dist/WebServer.js deleted file mode 100644 index 8eeefac..0000000 --- a/dist/WebServer.js +++ /dev/null @@ -1,31 +0,0 @@ -"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 deleted file mode 100644 index f42f2be..0000000 --- a/dist/WebServer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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 index 1a795eb..07ded8c 100644 --- a/dist/WebServer/CalibrationRouter.js +++ b/dist/WebServer/CalibrationRouter.js @@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; 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; + 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."); diff --git a/dist/WebServer/DahboardRouter.js b/dist/WebServer/ControlRouter.js similarity index 86% rename from dist/WebServer/DahboardRouter.js rename to dist/WebServer/ControlRouter.js index 9272a90..39394ef 100644 --- a/dist/WebServer/DahboardRouter.js +++ b/dist/WebServer/ControlRouter.js @@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; 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; + 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."); @@ -36,22 +36,22 @@ var __generator = (this && this.__generator) || function (thisArg, body) { } }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.DashboardRouter = void 0; +exports.ControlRouter = 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) { +var ControlRouter = /** @class */ (function () { + function ControlRouter(Main) { this._Main = Main; this.Router = (0, express_1.Router)(); - this.path = (0, path_1.join)(__filename, '..', '..', '..', 'frontend', 'views', 'dashboard'); + this.path = (0, path_1.join)(__filename, '..', '..', '..', 'frontend', 'views', 'control'); this.registerRoutes(); } - DashboardRouter.prototype.registerRoutes = function () { + ControlRouter.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 () { + this.Router.get('/', function (req, res) { return __awaiter(_this, void 0, void 0, function () { var htmlContent; return __generator(this, function (_a) { switch (_a.label) { @@ -94,7 +94,7 @@ var DashboardRouter = /** @class */ (function () { }); }); }; - return DashboardRouter; + return ControlRouter; }()); -exports.DashboardRouter = DashboardRouter; -//# sourceMappingURL=DahboardRouter.js.map \ No newline at end of file +exports.ControlRouter = ControlRouter; +//# sourceMappingURL=ControlRouter.js.map \ No newline at end of file diff --git a/dist/WebServer/ControlRouter.js.map b/dist/WebServer/ControlRouter.js.map new file mode 100644 index 0000000..3f9c48d --- /dev/null +++ b/dist/WebServer/ControlRouter.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ControlRouter.js","sourceRoot":"","sources":["../../src/WebServer/ControlRouter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAiC;AAEjC,6BAA4B;AAC5B,qCAAiE;AAEjE;IAMC,uBAAY,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,SAAS,CACT,CAAC;QAEF,IAAI,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC;IAEK,sCAAc,GAApB;;;;gBACC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCACf,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,oBAAC;AAAD,CAAC,AAxCD,IAwCC;AAxCY,sCAAa"} \ No newline at end of file diff --git a/dist/WebServer/DahboardRouter.js.map b/dist/WebServer/DahboardRouter.js.map deleted file mode 100644 index 64b8def..0000000 --- a/dist/WebServer/DahboardRouter.js.map +++ /dev/null @@ -1 +0,0 @@ -{"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 index 53eb9ec..468beb4 100644 --- a/dist/WebServer/DashboardRouter.js +++ b/dist/WebServer/DashboardRouter.js @@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; 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; + 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."); @@ -51,7 +51,7 @@ var DashboardRouter = /** @class */ (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 () { + 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) { @@ -64,7 +64,7 @@ var DashboardRouter = /** @class */ (function () { } }); }); }); - this.Router.get('/style.css', function (req, res) { return __awaiter(_this, void 0, void 0, function () { + this.Router.get('/dashboard/style.css', function (req, res) { return __awaiter(_this, void 0, void 0, function () { var styleContent; return __generator(this, function (_a) { switch (_a.label) { @@ -77,7 +77,7 @@ var DashboardRouter = /** @class */ (function () { } }); }); }); - this.Router.get('/script.js', function (req, res) { return __awaiter(_this, void 0, void 0, function () { + this.Router.get('/dashboard/script.js', function (req, res) { return __awaiter(_this, void 0, void 0, function () { var scriptContent; return __generator(this, function (_a) { switch (_a.label) { diff --git a/dist/WebServer/DashboardRouter.js.map b/dist/WebServer/DashboardRouter.js.map index b7505c9..f081865 100644 --- a/dist/WebServer/DashboardRouter.js.map +++ b/dist/WebServer/DashboardRouter.js.map @@ -1 +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 +{"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,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,CAAC,EAC3D,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,sBAAsB,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCACjC,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,sBAAsB,EAAE,UAAO,GAAG,EAAE,GAAG;;;;oCAChC,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 index dde9217..ac75f58 100644 --- a/dist/WebServer/WebServer.js +++ b/dist/WebServer/WebServer.js @@ -9,8 +9,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge }); }; 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; + 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."); @@ -53,12 +53,14 @@ var DashboardRouter_1 = require("./DashboardRouter"); var path_1 = require("path"); var CalibrationRouter_1 = require("./CalibrationRouter"); var Utils_1 = require("../Utils"); +var ControlRouter_1 = require("./ControlRouter"); 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.Control = new ControlRouter_1.ControlRouter(this._Main); this.prepare(); } WebServer.prototype.prepare = function () { @@ -68,8 +70,11 @@ var WebServer = /** @class */ (function () { 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.Control.Router); this.app.use(this.Calibration.Router); this.socket.on('connection', function (socket) { + socket.emit('status', _this._Main.Status.getState()); + socket.emit('timer', _this._Main.Timer.getState()); socket.emit('cameraRunnerState', _this._Main.CameraRunner.getState()); socket.emit('unityRunnerState', _this._Main.UnityRunner.getStatus()); socket.emit('unityWebSocketState', _this._Main.UnityWebSocket.getState()); @@ -119,6 +124,24 @@ var WebServer = /** @class */ (function () { } return (_a = _this._Main.UnityWebSocket).handle.apply(_a, __spreadArray([command], args, false)); }); + socket.on('status', function (action, type) { + switch (action) { + case 'fullreboot': + return _this._Main.restart(); + case 'reboot': + return _this._Main.Status.reboot(type); + case 'start': + return _this._Main.Status.start(type); + case 'stop': + return _this._Main.Status.stop(type); + } + }); + socket.on('setTimerStart', function (data) { + _this._Main.Timer.setStart(data); + }); + socket.on('setTimerEnd', function (data) { + _this._Main.Timer.setEnd(data); + }); }); }; WebServer.prototype.listen = function () { diff --git a/dist/WebServer/WebServer.js.map b/dist/WebServer/WebServer.js.map index a18d530..1494bd9 100644 --- a/dist/WebServer/WebServer.js.map +++ b/dist/WebServer/WebServer.js.map @@ -1 +1 @@ -{"version":3,"file":"WebServer.js","sourceRoot":"","sources":["../../src/WebServer/WebServer.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"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/font/RidleyGrotesk-Bold.otf b/frontend/static/font/RidleyGrotesk-Bold.otf new file mode 100644 index 0000000000000000000000000000000000000000..aabcc0caf7ebe70ecaa53fbac14504ca7a1a4379 GIT binary patch literal 46808 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 GGye~{9+{>9 literal 0 HcmV?d00001 diff --git a/frontend/static/font/RidleyGrotesk-Regular.otf b/frontend/static/font/RidleyGrotesk-Regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..d18e26aee31fa83b5abd8be9c08fc0e640402019 GIT binary patch literal 46100 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 literal 0 HcmV?d00001 diff --git a/frontend/static/font/Roboto-Italic-VariableFont_wdth,wght.ttf b/frontend/static/font/Roboto-Italic-VariableFont_wdth,wght.ttf new file mode 100644 index 0000000000000000000000000000000000000000..fb3c626c5203635234b24d898d61e1a34d21ee03 GIT binary patch literal 530052 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�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

@6X;jXwqswA*hT^?szq>=ZSMTQ49ctKTa&n;S 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 z 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%0DH7TJf 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

@UW!`X9Gny2+Rt$ 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 literal 0 HcmV?d00001 diff --git a/frontend/static/font/Roboto-VariableFont_wdth,wght.ttf b/frontend/static/font/Roboto-VariableFont_wdth,wght.ttf new file mode 100644 index 0000000000000000000000000000000000000000..01656a35b0b23d04c22b8b3f30319355d5af8f58 GIT binary patch literal 487768 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ß*$fI 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ô#8CY!kMhH8?M2|q6QA%Q|c`>zky|A!5 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 literal 0 HcmV?d00001 diff --git a/frontend/static/font/ScothBrace.ttf b/frontend/static/font/ScothBrace.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c68206903069f1badf295e0dff51269ba7a2f0d6 GIT binary patch literal 69272 zcmeFa2YeGp7C%0-tJSJlvSeA3yDiDK+?y;{Y|A!aZ~@b7Ofi@afzSyh5GS-0(jb)( zLLfak2&7*~Anno%xzxK$ZQXb+=Bfp@Tr?Qcg2iL9=vKUA!+v#@`7R3^p0t1 z%XU`~^4&q4FPen|wwrV}WB)MrlV{CavixB9_YH*nD-O@QW$yf`9ps@yWrQ4l5`BJS zUdQqULPvNBAxGHrlg{jzH@!S@(#P1}Pl#~ag87S=%#g@egmh2Ce(r)r(-+Jd{LD5& zO@BrETLBqD!tiD=T5j(~p%ibDX%RY5P zNV2e&NwZuZlK{5gUcW)$HwgR&f!`qT8wCCX2q-%VQAR2w@qgXPZlgS>K>o7#>3j9e zVfX4;a{BK0+nxTuf`Ibc>3)*(8ry(l?9DWv;EU^kq3$iLS zzW{+A*c_+t)uUziQVyQ_9eX}J^|t>nx9oZAR7T%(3v1QWqPFe%{#33xwKgheImNbj z2cOSu&C~Si*?cNDQsr+*ruUqGD%YIOHa$u(V&nowa zj+|(m%0ae)A8;M3C#EMxIjFwb_r5K3pa1P=h-)36YSb$sk)I#e%Rak^G6QQND>L+3)r*r&3SZ9Q}FezNC# z<*(Rw2H)@UJ$3|J|7-r=`3{_bzmL6td;JE1{{{ql8c%-L|GBL^?c{y@t;K&40^|OR z_x|nHzd_(P2>j0=(BIGXKkLMA4?aZ*9AED~#fy*ItY;1MZf+5WPP4t9mqL5TexB&~ zv8{g1Ue6Ns`F(f(rRV>eJO4M@o|=c_*E|{a-DY;zK04%k?8yIZUN?c5iG+=16Bv*o zV8SL48;K(#NhTH8tH$Of1Ia{^MmouQQbRV9tH=;?4Y{6-B|FH?q#bz*_mgSlLGlP$ zLJnYCi91Q;Vf+uh)Ng(JESo_@CW1t?L`GhM9#1!h8V5ha@N_c?M|OslM4(TR#7-Q< zNuo$Ji6OD*V>~h-5=jzq5jXLmzbU~h)#s$5-)SVBWROhcNo128l1uVPJ}DqRQb_!y zh!m3&QcB85IT?VlR+6fp^x)sy4MWC8XhV_-`mb)07y;YDdH-WD2DTBrlY(0^e_$%< z+mMKY{;OLKM!>do-v2_3fo;fY!3fl?5_^?F*!PV^{nocn`a!%8#{AK}|4tp^eNa{} zR-coJUSwg8Rj7*`?rgS?g}wF|==VPSKlow=u7oxMoUsSDXuzCpksMsU zPOSPV9wIY@2u2i)6oW4@^o4y6X-rBY0YcoKRAK&y^H*g^w50aY2jJn9dS)kWKv90LXtZvHK{CV zVA4%Vw zzwiA$?_dA^74H|lU-*9Bdr!Z&|J`@q{nNXzzI*81CkT1>>31J~_l9@ZspCa|0(dh@ z_%*No(HIf*dKUSZXaxhi1%Suk*Z)O1q}dS$@n3qWSN@#S_0iqGLuseZ&jR4yHKZ2& zdk|*64t#qksV5Djku;HEWH@OiBgjZHii{>>NDFBNM{gtJ$apdV{Jxz`B9lo6hPMuU ze?AjlUEuwPEHd`x{e61b!Y8KjP;jKSdbH_8WNS{*;P}Pni!K1 zC^hO0VI_J)iCH%4D`aWwkr@S2(N}Td36q-hr#3gw%1xcr;cKLE4W%{K@aV3dGJ|n| zQExO>nhkY&Jv*>HDa^VmR|o&v7xE#YCJ#w6m&8am5t6eLMI$$;BxtxY(FVGoN9 zq^eEXVb(&Um1Z7uS+HSSAR#U;E-@}KAwD)HI?9R3vPD>fFN;-9%%m=xOLSpCKK^Fk zU7}C+uy+c+YA#hiT&sv{l@Hdw9rmZcz8&`VQkt-Yb}ylcOa2`8=g;w0{`R>dey)Vk z&y;BTS++PKo9tN) z#sKo5Q#dv^5m_cv!nDA6U{rpdE6E-yX^Q=M<@x35-lSYtZfta9qCL@M)Yv4O)naDg zc42cfcvn(i0Ryd>dJ8}Z03`tF_{DQ&%1fHb)OYmxsXIG5c21qTYx3k>Q_p+gf%DFN z@Ii6$lwBPiyQWNK|3e2AgFd6%Jo9(6Xa8=d`akEX3om-=sf#Xr>c=Z)^c|j&9XiY< zqhgTvL;sjf3Iq9*$2JbiiZ{q0rbfo}IzpU+fK%{+3#6W$w_k=U!2snlO9bRgXQj zWTIwl&C;^knD&VW){PoC-9D(Zq9H?QZmODP8`2qQie0&K!r=LL{cSiHr2XOfG|(3Retm84WrMxb;r=$Xd0E*(0O6Yid%1J%nL6+@ZOWRc6MBqV+QMG znuyj%w#q*6OIrY13z#K?F?gj#0LIung+=}#r;LmgVzp~cOEsBnIHLYem6ou|+tA-52y6oH65I&jnw%4H?q*wW5>u z(MEdv7oXGHY2!XA+oU|C9Pa+E`&;F(@{sA6=cNSP=&I0xheCQlPy#1JF1ty zI>0cZGp+t2uuO|6c>NAd3{c)cHD9+49oqKw1(Y0|KK)=1Mv!fybyO#qgfOb3b*5}- zpK`C#`uP`1t8(u?+>Sk0^O4Yuak_~=P~fyjTEb0QL3FzkWpHmog+_=j@HzV4TgQ+ZJKj`7Nd2 z?y^K&uS<%Pw?|lR`kvD7*}mo@`o(Uu0#`m@F|&*f z^p!j;-mh7RIb{-7glXK`uXmydMGSmrIF}<9*0~gq)#Z0tp*PrFf^Hn+{^OVccsTgU zo%@uC-8;$q%9pU7tpT%$eQ1A#EK8%ZGt-7KafYg(gRoC9SYJCq2Pyko^O? zcM3Tbaz%Phb&T5=?Jy4+qV`poE#5CYfqO*-?5yv!6|>5ENYO)%gcN-f@9(NdyV>Xo z!#NXqNBIKdiwQVc>yDtjq(qj8ks3vC0$V?gVSY|^bxwA5wPNBQ**Vqx*)Bz|S&KOZ z4+idYC4^&a@Ub51qqcvF3;&_$^%-0@SM=I^@FpAh_3(zfEs*(6%yW<}Nnp;sd@1($ zXY6EHTfkMbZPir|WhfvRjv;G8RlIvry4 z4&~hsmM!~$x_9iLF7{1%Pl%7d`u9=VjLLspy>b=*E@!guivAwj466D9RMmXXJ<8om z>lX~U@4jcAU_z{KHg5VRP#og@Te!zr!D zF}l7N<`{&XMlzUVriv?Rv9&PO?I}$4r}(T1G?5D0?rtf!Qc5k373f78sWMjrlc!-* z>*V2asnBTO`e94m)G&s(Y;FzGK0M3Ia5ptVfUs-qN9HQ>GPaVMouRT77vs-;oL%MH zoS6fX5kN)if_mVTwjG(KX&P@86N{JSm7cZfmJ24QuNthMb<>vLJx;40o!>P;j6ZX` zQH$q)x^ic1%+%JcRgQ^g{_)zYCf%}Vv3b+5!FMU|?RjMDk=M5@U|kLN^?JDoR!@E) zr@l1704n2xO6*|d-^5WfD5xkISW{SF4JXaCnF}g66Gcqd0TaNc%AZOwNPgU3RP2N7 z>D!n6TyFJAB_Fh54JZxBgFy-!VddYR_9Tr-u#8Vi-}>Z^%?rjDBdwj5_F21@%^5RH zkXi;W(azK-n#?pgt$FhPJF}Bh(~H~Vv@0&!OWnVlH|d6l-&VFLhL!f{`dLN3wT;zP zpDvwLq%)YNeHQ)D%df2-6CM^@E)AN#Z;!mKQ4W_iQ0$CZEpL{U4{mNBaYn8=|LX3o zD_$KoOL_S5L&|M02I2D}<}!=q1Twv;HfZ=90nG`#^LBCz1ZEY&8d`*9H!k+$I}>8V*XuP?oubCD{miasRxP3NH~gLs`eDIvT<7oCS6t&>v))3e8Q0fe59{=5T^G!2N*bj6To+%nuyV7u3>V zH>mBysoleI0y{Fg-oA|YI^rGc%*S&O6=c1?`fzj9Ab^mS3 zKQCE$MzJ$>!DBUb>n^{y%b#GOf}YyrHhr*hxzv&|n%F#|`o@MxjCn zlWpikV*@1<#x=}ooRgPBT-3z{7cf}Wo7sf0S;-N-m=EaHz;CC+hK_tdh1>A?P$PXtkShj#PYmk)V7^JXMUQm3?h!r~5EBT71urYJ;2tX3}lo3i|` zvzI;bab4s~blj`2((x~iY`KQoXL>(ZRw(mh!%W3XTE?gE{aZu0F*VmFVAMk@TZS!7 zx?TBn+4@YI<|ay|A@|5<_bj^8E%~jWfpIrzZ@hF`X3}`Dey}&KCi%!$57MIj`>woY z{JDRwsk@1qZ@f|Y=S`betsS%BaL4TZ%5x8@x`aV{7hsgGsx!>^%*?IC%9zd&oQ z^!W>gkQ{+P2;zJnHvwM5Y-27a)iWxr&Jr!9_e8l`jlBT zbI*%()N}Q1cgDx8M<{Nmu$Qi&PsQE=UFq( zIQtIe!`)lfT-RZ;OjmB~E*l5WBs`Q1HcY1K`Q0dR-L5gYjT zFXz@t;<~kztlhD0$MR)o%pNzkd01_=JIQGWi#d;;7xokB&DjXk#)ACC>xZW~$ZCS# z6L55<zq~yfJDlh`Ms(NOhU70g)TsX3No8vr!GN!5^Or(BC)*|JW z$A>q}pFO_hrR9t0_{WDe&Y!Js8lV?w{0imGKl#1-n9=$$U0y|eWt0QxTN7{5M+edr z{SDMX7aV$(E})JZZcx5ZE_?N!Z5IZ#DUpSj6_uxHM^220DK!W=1#a)a+?Yh02}-5T zAiB~#?ihWNflkjUbEMQx_J?WoIm0ec=2jM;XQd;mr`Vl(=goVDwSPm4efI2Z{|m~_ zAC(`zQJ%$~lw7K#f@|gy;Xu4LX55$=>+HAs#!>lF_W9*WCv? z96>yRq+*o{nMDj=Pf(N1&2}e%dyUXA9B}!AVn3PNC@gwVRBYqIo5>lE-(~01K{2sT zy9+0oB%)5HzcXcp`*pRl#HWwV8*NnX^~SabTD46y`SSEI`|K4$^wW^ASsv)mFmGZc zzeOCL>@V|mf10I}tzBI;lXwJ#d@t)pPXp%=F1a|%>&;U-+pNOnCfx*fdgt2 z7N)hEEr;?_TeU$wNmm5eWFYp{%IttBDhVx_O#O!{tc6h^NVAzEK#gSRs76B&pW$#D zSPPclJiMv4bzo~vAT~POKr(2CUWFkymUCz>{NOIG1aXCjkpx$IWW<9wh6h<2LwZg} zDusAlL5c}-Jb1&gSv9+kPGsgb>>Vf&L*{pE_nT`=+tM>U9y)&C+>|qvKde00o1T%; zbs%G?)0w~QF%Q+(cEC4RwwUf zhPs?xzpJ2d{+!k_jhNW8>&eB-mHXZvnPWET4dR7MXS-d+8`l`pI*MYA+7aW14!=3u z^h4g#O-H}`;tFaR>=n$n&A)2@8>~VF!@KSt-7vs5k2c;1B?ty$!`*r~RuTx*A3-B_ zLJIZw`$|DJ*KoJ-B(1>BVpWEE@_R*|(!CrfX~o!Y!`-nbX{Gin{v@q9EB~dAGiI&6 z0#-^8iAm;qU>=3Lk-L*ZCRUQf)N5v7fija_Nf3a{QgS*pz9cR&i+$QKs<~2Cx4512 zPdbgJXb%id965Z|zBiOErAK+=mHTT8M!fO@eg6}xd79?t`*U*VDt}V0@9ue!*3!Ga z`;Oj4Yae_{I_K_TjT@$3ckwfeF1YU&W%uM8UZTiI zF>=7uHz|e6cgnx;|DmB?uVD4j(MPx5K6f$vW3SOj{SPeZf%8j)mifd|NO_>d4Ann5 z25~&_10XHPj>&HD2d2G;;+qiClW{2~*5!32mvYBz$YI8KfZt`4nbmKFyUOpg!hxoK zFZM})KVsoysmhV0zdN)>82P*CV?_7J|~mPKsoC(Abd=hiJ*ZR-P`3Ltx=K~?})TnO$L%oVHouJ`P6ARPPe(+Pv}-c zGa!BMl#Scxb#0@M276s2Rpp9(Tm`^CrpsLc%m-7K!5{P;=yMI77%(JIt%wjA*seZ)My5s{bI8|Ht~ziRN9U>wYxEPate22Jm43bseNOy2#?$MTgmd;9a1J?%U00AKm%!iKWxf1A8|@ZvvbAN{-PLG54D;n@8Rl1NW3tEp`HW@PUB6(!v@nM5A$lkf1e}(JJaWVJOAd{0 z%5Jb}ah4y{vTs4MkS?qpbm8KXqQR}TO`T^en;Atwe^H4X1jAkEM<(8~plz^!UTt;L zxohcJjEnK(hevV(3h^pI06d(*cnP#RRf-}((?Fcm(cgEkvZB7h2q7{C^HKXPRpn^< zD3|F2$2<|an((1NgXd+DjDXhwC73ysV7gG4E)4##gH`8fTr?cwSu~5QlyFewB1U+u zLmaSWoYC%f%)$FOw;uvX2M%ms&GbgMZsaeDW3t+vJ0=AVx!-Z?_yjU?L zBuxi46c2;KD9y^w^REp*I`uXjW~a`aOtdRKBVh0ywS@>^t+V!0(pfgdYuL- z9F1U+j4yTuaYqW_PF`+SMtroz1g~aEh$%89S5JS6Gh7`Gj)1Fj+~$F2OBSIB17D2Y zZ%G-h?pu_9fd+!n60W`p%w>+@2zRwjqF0=oo4qLij)Tgfc~1%d%sz{`_GD`I=htfD zm0{giGMBZM`?rH?8Xw}(NKNbdW?{88?+Q)%)XmD{NB-2`w_S_zMzPqf6Vt>Ue~4Qk zkQEeFsihVXQPe&;#pJGv94xBh(`NnnT8PQ3*dcCZ&c{Cd2qEMTk3k4=+SD({GqcHR zm51wH(FR$Ah(Kd(K>ZHia$}o%GMt5U8M;dFR;nzRDPcDCFx&&-O-PqgPX!!=A_EFY z7Q85UqOFZ7NFH}myv3~7k!+e3nk^Qpq8@6EbodyBGg>b4TcIW~l+)ATIN1#8m#Z;` zu5I^q9U4`xyd>##E@y_Qj~^=0sp4R9H60n$xq4 zL)nV30qZG6yp7EYayYCW(aXj|hbj*kjX6mfHdmEImr6H`DyQ}3qmut3ADJ^sF(XMw zmy}*Ezn76ZDxAuPZ`D3tK1!BHmH#k@Ch6p+!-?gixSpobeTY6KAt(4t#G66DA@$sW zPK&)!E;Z%HE->|%3EbnIh5Ii8d!oyN`m@>X z%F1vRx(gHI5q@%J(x4^@e<<9ca#1ma0VE^SnwcY_xJc@gkiDK%>HCMiN;ahpQeJ&} z@BUdGLx(LnH5iq?`9BA1I?1P8V!V4=eOU{J88{>55he<=DTl| zG0LO8zT~GcPhR8^rUg>cT#VQ9gc;Q!?d7*6#V|j;G$m-lAJ6<`8h}RP;?JIdII~Y= zWRc8BBcj-E5xg!zRKvMoP%v~&=Pdo??5Wy}2PZ95-d5fU-!|GC##z@{T6yqldh75A z``Vl3k00nhr;jCY6LR9~cfR2BE8pyC%Rgg|l(V8_z&CZ%5d26q8fKJT8>V}VhS|oUgWmcoW03Mk zWy8Vi*5CVH+WEEZSp(!dwrMJorJR=PhO^G9ucY6fH*X&;rQ5&yif*T+`#w^ZAH8rn zo#$^FUDuqFJGJHLHP+}ty1o>-0)o-3u_iC3pVNZf571=#(ECHCDyx;dTa^2i=dV5| zP^R6gPtxWm+H>QxC>nf6BaYGsY15;RD)%Tujw&B2QOfTInno#yeM#>0At^49GOR34;(MU}8Zd!OKBA!Kh#qtO00)!A>EVfJVvKmh#fflo*G}NCwhs9_VB| z6#`LY4k5Vw_y!0SaDNaBUUecz>;BKfrABr5u&IP7;k3N;&sX8 z-M2`7&ykd|zD!@5Ep24s?1%_hjok{gJJsz8eKamn_LIeRXfFe*BxZufmZLN&b0vZoaiNf9HsD*{eKvsQU+oo#yhKN_z1iPehc-+uV5d#g{`g^Vk{p zdqB9-Y~KN;XUp%Dzf4YOu1U`q>#G!P-4s~QbX;T8wae+Oro`yB`#0ChXzX!r8Da=nz4mXi{TCe61WN|MlV5*T| z&2#w$p^)tD%cF$BFNKmQQ<8)8!2F~dr{uwf%rgM9%f0M$Bc{e4DpA8oOUoK39}~IUnh~G+t9XiVl58$PxCf ze7(xKRe2vb(|7#-@9PJY#>SraMPt*7Fq41qurUh`4gVl9ZOij1DJ$M?x#NzOw^vkG zY`$>*&>A^2Z)!wD{fHTl*4jjB47y!_Uo?xVgc~_FvIIzB5?3XI zz5+@jBjA3L;U|ddugS9jsn-@VteGU2MycGZyM-CePTf+cjF@?M3-t4lQmd;%h6l~% z_UI3fh3ru1TDPMg1uWMiHz&mn5&)BB3Co8v@BlON@_VCYc^YuXW4b*g7#3*Tf z-3+5vYn)LBonr=H8pU)ms#}CHC6Ks4G<2k1l>?jr%2rHNA(TIsr3&!$L9-*j9LkRez4TDAw?7^xl@Zwr z9zYa;;kMJkyBO-B{@}~qFDu_F|9GkUmd6sO`m{m}P^cU|rQf`YeF;4m%1sScmoNr> z&kuE7`k`CXEoo;6;lUwTN2g>TZj#Ot280f@Bxk*nG2zEud{l$@pxBrU^2-=gIm20h zhSy=#AyV^m>oYGWAr=NuIV}z0tZF~-F))=B8n&JmdbpOyOdxfz{eiEi$et*0%1<&2 zBBuMV-K$Lc$ZTa_)q)h^w(e1M${a~Z!(cOFgc#u>lg^ewhYwnj*4-}LiF2X=WtEzX za?-`AU1vG$5fNUkwyaQmSTmBYk7JW&D$4VAT_^NArD} zKcvP-MI;CqPg>f5BX4$(VAF>osAJGFy*rc4xNSr@2*K#cU`ZzC9=GoUwf(`*Y zB;;2LxUn9CB4UrsmlHK=3)m@EXT(G~?ACCz3G5(~X7;Kam{XM*duWhJQHVWo1Fk_Z zp~qadTFtaJS9ytKDZk*h+b$TG-z+UX`Ul3i9NHa69?37fbRE@L-4*wIvU$eFnBr>> zDh5#-E@&)iX^}BHg|o3AMr#tNMmKlp#Iu(*jJ>?`n%;2>xfr(`%G>Q-g~4(!8Py>@ zG#Kh-X`!Hv-0nj{uJS33L1uSm_7Axnej;)xr}G@jXs%^5V~uD0<1AZ`B0`@Al2UO= z*QNgy7qC>y@83}2e$4axB~ShA`D&<{Js;2h6n!vc>kefH$I-n}oi^}9 zIi!2F&`Ml>m&SYaZM5I0=85Eu{V^(N^i@g=N_nnG?27@CLI6eUAr3Q7AYkcPlQ+14g4 z3lDXOA+xpNZf3dko_GHIJPRoFp8whPeW!kUDXg1-y>2iigQwI@sVd9QO^PRj=pe3| zu~+~$I9q&b*gT{=u%kg`tuKJfF%xW+)1}j{iZh{DHA4%%R<9bSQdK;a0n_{EOj;U{ zwV4j;ogQ}COYdxscT|Ks^Aa7dXsc!WrLzhrdVRCPO!);(qqncWZeqOwt`AXw)XTr` zA1NCqtu1s?owdL+a@FXuLt-v0cSja=HX$`WDSwtBthFsrv#iaqEH87hJ-V(b*_|C@ z)yhKj-gS43Tr;$8Qi&`%bk_3P^JcE@`k1>#u0G?2)sM_u(z5KH)|N;cy|W-tY-uV^ zjSScO&#P~)sJ?O#GJHex__17yHM2uWZ6E-_0M!@Ce!WRKY(WNA&7ze^Dos_1J=GiOL;$p(zT4|T1i`C%uf_}b2WJAD5d1MT35+4C5Ebjs z{kTm~76~E?YxH{KG8?acA-m$*zh88(@@lKg5lOu%`ioMHWtD$eTvL^s-BuhCo)IpO zpS)qIVwl#pw6@nl6mk|Feg3Srd(6o%DzEN)UfK6_xghEhA|C#1W%ZS}-}Y5Oyv5a; z=%VfO%iOyUK7Pgom3E~|#1{~~nRA~d7_(!^&~6AhC`1|rKSZiQz5)b-2w+iaZ3@Nh zexZ>w)QCH500EcN4wWvQrgJ5V=ZCSpFjZ-lky9q9n9AUzfgS}Ivg82znzHMaSLnpo zE+&k+tc~bo(Q{IKgCu7arw-foh)v*uaqjp&p56YN>$}p7YB{JcJbK zX>5H;T3vcwd<<6zy@HAqoPsd3NR`N;EEN*N0(k|s817(Z%4!N55@P3woKa4%Au|di zX6BLfDd;7u>FO7=DzE)!)4eqJ!E-+u*M}P1p`Lc-*og2V9re_&ziDwtdP=0_>;!!| zu%lWrTyw_xD<`nIr#btcr^B9}F-}C{Yp+9h1p9vVM$GthlHoVd&L;D4Ya{ilRdl_0o(x8i!PuEnJywTF~59uFp-X$}5;o zZ~g<_79HJsu2nKq>K5a2TV3~Eb48i6dg$hs2_uznb_I1I&AGty0x~F2lOAsb@5=#u zV@?(*@_zJ<_-fXg=qCL4D7Ia3+hD06@@I z@yBdVnZpNqpqCj!Ov7LpFGQ=MlS?i!T)W}o?F*+;UnU*yl!{87a1~zU zAMcWmN+o>VW+(YJ5ZMO*(G*HG3kGAP8L5IOYl0Sf23$)B03c{V;GmY_^&nbgX+j@F zR*fi3#|k{n6zGLknRzyu6hGA~ocszV*H85d_KZ_*jN5bB?@F3KZ{mc}BZoESSxYhQ9Zz)Ps3%VpwyThGHGnO8p)lUX091AYld1lj4b8_LL zv#mF@#f59ay!7b$2?vw|PxO!{A}6;Bo`IF(Wi@Hyoytezgbt;9-*Y?PPP0YjEgC!D zwSU)DvlnJZMIg&Y^L?X`UofGj)fO?K`m#$V&k`cj7Z#O9JGV9k{I=LY_}Jw|#RCUV zZ|~Xs2rYidxcgvwS%gaq|GM|y0PQ%B(bNzjfD9=80eOcm=HE}mZx`a{Z4sToc z$FqTRz&pglz5`wPNXrAMCWJD2)k3y>2#N&Ik2xu^Ksclo^5sK)XPmufARC#3At^r6 z3ZCWbb1*Om0!yz(1`s187SK>VY<&?Mww!>?C~qKrci|aV8~3kYKbdZ|a7ob{tycp% z0ZMP&xcICqm|})iG1r_SR-AwD1iInvE~QUK$UJX?2b#L} zK=SlPIWhrDZHo~@z+@B_F(;3wH--%R4kl#3ktv@jx#!W@d*{YPi-VG;tqBt# z(7|qa$hc*b^4*p6yWoJ2EL}HZTzulp?D)m|7l?wzoW1uf*`@t`Um)sI|2$ZG9;^w9K-WapQlR-4F+7Ru;2tyif5GN@qD$L1pCD z&>-k?k#HkJPqi>Nc^}?!j}cd8ii#tGd7hj@FbkidsPuOC6Bz&J&)|PIRq8#ft75EHv0GhNDbq!%}OdKT&bi^*G>)C>c z*f$g|qd5NcD&UNE80yJ$`pDuiSDk{ium2RfQ6ni06qOf-VYLjXpLsB)4n&nC$=ak5 zbZT@{Ahp#cMZWxWZ(@7|7RZxEp^>X3!ESKvkJ(@VGSJDN8qJt7KkDc^tU3~{oY*lT z%$1<3CQk5uhf~jVM&l#v*L7^Qf{3~mconH;di(nI9XCTc3*>hz1p%Z@70^wL1FT>A z;6T9~Ub*g^ZRdj-=ryrpdwIb|#tK+`7vz?1rq|N#S9Xk>aQRtyT&yKMouv%&Q&0^F?Ndii|C3q)p61Eu+xIp~GSs$I=8_KJ(3 zM$-0IUQu?w7PN8%RHr!Ca^(%m_&xT>sK|}xtFEUz_C$*>Jgw|~{&{8Z(;+kG$m>@7 zYI^S{e|=`4KFl1kN*VI`C(i~9(BBP5Zj`=8ztgaianS?yiDquzG~CS?qZ=MDUXuXp zQMggZ+&dT$GV!4ZvX#~t*3TOCo~9kVJquqrGt()lC{J(BY>toR*<@+d+h0votsj!(j@+nnls)Q< zpS_&f$uB9d?qzoJw6>Dr1>M8gDe(qDqYJZYhd)!iV70>#$ z3{K!l@5v_c*hUOP`Hh4Q-Ups+8gOP{3acyAn=_gdkP?XOv7b!g&rDjs6XKy?B88f< z%vh2d8}x&LaTbR7AWwA;S+*akQ-$oA{{rt!)F)q5IBQHg}FK0ljdtA zqc0{ePQ38)C+18P!qi!s=o!Y(h@8z;{-{cm_(6us;2}(#Tk3f~Sx%ROj}PsyuT_XRO?TA`5ED36L1p2Hlj?a?cMjF%`bKCE4Cd z&vmpt)nSlFoBKT9FoS}eX~M$x{ZWD;VRYTFku@8t;}?aQIkE5s|8XC>erk z3@Qo;B3lCvV&SGrg=&h3x}~`$ETvNIlQkRfW9Ew}@Uie?FcLUb0L5XWy(2ykO9in| z3&>fGWMM!Y`+pt_g=Pz06$)Lc`B$=NKU2}V#%D?N8;x6Mqw6emqgEGJN$V@8N8t%{ zNH7*!Vah1!%19DFw^{ABa;C=|8@>t1mLUjiD6glboxsa%`##N(~Kz05!-KWtr{G$B)>UyE!{_w+OU zx-4EaQkkYq?d^GZ9qTxK|6y9r$0CX012fCIGAy*4cJ&P=gvZiajHisnL4E0|_I`0t z45&8?HzzAD+F~YU$HqZLwo-^^=J7CS&^H>4f;wz0WEdKj9&(>s6l=R*)ucOrP_|j( zbCmnaXC)(-cw_EzzgEbF%AFpSdWcR7kISL;WwVo&d33p`$yrj!-AJaAj1qdYlHqh( zOJv!XCqxS8)Xi31q2(DxwaRw-2F{ggwS~FeUv{4>X$FS)sq);BjoLR6`^h0g1N!(F z3u+_u8kP}Ed~zx!NCgTSl;M1RBPBEVNoGibTLts6b7&6ZR#=Y8854v9XIC~jT!Kk{ zEa2U5@N5a3X88OEd|C3?bu-Vp^6dL-_jfOin_VU3C8f#q2>nK%nn&xa=OuK_39~dQ z?;P1UuC;lrC#5yZQ#9;Kx<)E2t(N7?IE&@zcj6C`kxoe0fddZT8Xvduw%&ORU>?&* zRbYT8$|kZb76?4%q-6n6QG%!l21%i@_of6TB?LpCGW3KrZW!|w)VJ;mnaTP=GnQQh8o4jJ&C=4UWS7*ZJOCeL(S|c9nRoC>e z(mfD_v*CmZ1tPWDP#`omkOK9HmG^;FOitXcEnrAVNlvlalVmv_DYGo0o}nm~b6Bz5 z)KvhlC-WX#;rv8ZKBQ@uQ(>m^*~E2$?Cik0iPRJ(FUk&_JGp&rAbW*kST|A3&kkS{ z^V-)rE!seK*Qf30it8qJeVQHMARx2tmrm zNjjKIc!Vp(*WIaO5K+Z599lR}ad`O~$3r^ok1ea&xj%JSkR( zMaPnEe&)sxRpem4UdD-_M=^S45{G;8f#5tl97PY0EMj@l-+U9c`K(+2cpcSE@H>pf zdBY>^=8=OZb>28{4l20_7j`eJC=}EH7&iI z@1=RI2EAp_vgT!3#aY?u8Kv3FnwKV8VSXeoZC;jLl98E_$&M{cvV@r|LSC9xr^Cg) zx6YOR$)6>9P?^bNHntIZH>dOT#Ql>{w|=MpkAq!xQeK)v+9& zN>WWm28R2>F#b|*l451KCQJ|KphldD!h=TOD3ArQ7o^p)+Bm=z7=wWlz@#8QFBe4z z6P+lFW;PiS17a>hv$|5Ofcv45d*K)HkEN0cNc>^ALY%1GbWGw8lAc6(w-5|Mb-r*a z+FVklk|(mP&h9S+$Ct|M)T(HZ4WwncKv*+DpDv=S=yx_#B$9#r#dTiAq$r<1MCr>) zepr((Ofzu@(qYwVQ}mUb`E*;hxFV?kA-Acv>*I;yu9SEIZd8>X&ETB~jug-c2yDWLM6?M;Buet3+UpwdSh%Et zl`QtAnGK%=YV5S(1CB%ZWTX+ch!M?Ab^e0foXpgS(YDc86wOlCIf^2x#&Hx-#-eP% zm?yEo?1t8@T03CGj(E!3@rb6HBnlOs1?ND^el1FpA#0JvaRgUM`cTG79plSuhqd3n zaL5ql$yKx4YG0 zppL1cCcbUxs;*D9Re|ZNuMTXUbwyjX)y6-Eqf}S)<0E{znzo_qE~veB{+;u^(Iu5l zXWqF0nv!}h8vr?^StdH9iQw~IlEOKC46Id5L>u$AQFtt{HzF-94Fy6~u712?w<(Nb zp>*^wfcsvZDa>dYWC$B%)tQZrdb;W-2PFNFF!NBe(PVD0hP8wlO{O7Xrh4p~8m(ci zMx%)dlxaO*Yg47WvEC||jHB)q2Ak zV$k4kjfrJepo#~^g!)pj-66fkF%zD4FjN}>gWLc+dDu_xsYlh&U%n~a{EXS1@UG0v zhlB5!o}T=!C+R9%+HtzO8W`Q%OXwr0nGB-Q4{x~O2)+K2?>g6hw=T8bD`{+U#*nPS;X@k2TW(Bu3C5-4hqRx) z$^V#i_rh7zm9IB%QT{o5_PqJCXHnyoS5WiJSqqi!$v>Qb!FL^#XH1_o<%f+Mja&YByGIOu?xro~7hg2Ts~_||nwz40uY8|^%;MlT#zjdhwZWa*gH#W! zgMx&n8}I~yvsjk$O@!fA7hjTQb6I7St!x#C&?()qLXTpn^nBJI)YcBtUj#f{BTz~9 z1I{C`5Rp(fmB4CMYHT28qrqr4bn3$eir=f?k$%ZQuxcCb1Q4f53=>UZofc{|hZ)DA zfoK@3LxPbYQ_%$Gj}ykQ4iaVz8xb35{H41YB#_*%xLsQyt-OqoSu-Y#s~c1{qI`re zKQAXUJq^JCS5h1+1#M?lIPF%je2#@y=0z;0@Gmlfio_@z+eI|QSHJ>vZaC3HyVgRc zbu-jtIQA>iSNKMBy5eKCi4_*`r@ZRKO(UljxRqP769zS8WF-5QCo@x0GU>EH#enL- zhrb4YH4Vyzx{_#zW>8gu-(;>`oYMWTB^MV!N{yM3al?v&f)zr{iorBJee>{Pmx~3z z3Xg#|1H@&*ENLgN4;A3};DqGj>Un-(wKu}hl3c9*xdt{l8;@uHh{E?Ke@a%zC42#GrV^G<>I>v3Y4 z!_BJh@<(vvgXPIc9$}IvJ<^q)n5f)8NSfq{N=tO4MLy4PouaNj5pR^P1La{|0&t%q zW2F-UkgkJ`Mu^mk4~a|yyO&U(pJ{DoUiVd&W3iOb11*JZYKp6P<2fU58NK`YH}^@` z4L)+GH0H>i!iTy?uD<@D`mA$>61qwp47tnfO)hX*A5?La#=CwzL3{Z~D1{NtVdmyY zy~Q-vAbdR9Y-zEW!YyMX&C^Y$aCWO%N;`s}ghY{fe0I$6=|gQNGzv*LVvu58P`QNl z+>B#uNi`H@4UkOBOdghrLo_2}nQErC5dl%2&UA+$NP_^D~6a7eh4t_3X+>f@zs~>l#pct|tMLDD#3VmavXZkqm@aR3@TVvSj>0l)u zcw88MAV}ToG#fKIRFEeaT;NXa;-b@5kjI0p?bB0~NBEmbIf5dzr@1tb{wR(5zYS)# z(+0Cx^Va_w$a?Xt5O_A0MY6_>1_xxw#_W)vBiq>4|2DFDQONRi6@e0mnx1>sbnU9s zj&X*tH{S$9>ZMcNYh1q=5GWl(MXZ@oK?wT}&P5I5Qz5GDb%{=&HgUqZwh%Cbt0Yf1 z<+^k6>pC)i*n)W^SYct9+w3Lh&X?9!d$cdvShJbGfxhG&CpGLOH9dz&;LUjB3eLr2$H^!%>#mA+mza0EL{ZOys z_m2zSAD`f{LAdL4gK$6lJ{9b$BAv|gVnyvDJ#w}+(3>?ncwK)w5zK*%X85U-PPH98 zZpUrd7Kr~}PTDa)h;f=o=B%2D6Kks5+pBYGYI1UGYEJv4=|7lQ!=6zyF_%9eH>Za4 zc!O~;e0zC_D2@mWD~Lv>YYNqAbKwXUSpjR7&WwfgI*nGhMo)Ew$~ubQ8tRRKFrP3q zN9O9w&(HVe`&_78pltjMC;-iZMdJk^Pb{`C{XRoYXU8^sk=SWhyf4}0nGD1QclQ-|Q%j2rDtr~$nW_2S ze08v4ERm>p9l<~d{ZOv_ z8S4K+KMDbl1cI7Cv51hcG_s$AB_aM)z`}9)_>ieM9`5$*lfkHBEz=lKXjoa9>B+e%xry;no@kHS$DfwX?LT$>*HQFG!Q*#Y zx%3xtu7CF{e}-+~^*yhF{jeIQHqamJKfNpnTAiTA1d)xZ)(Ze}Ns~Zk;nJ|kNJ1j> zBYB`SE(({~teGwYE3IaALBL^w1pKyY=~9Zr zRMx15s9whmQT!C9#;QBD`eugIpIMixor9WZ;3KT&SqZfqTlFk9n1)G2qzI@Bw*)K` z5`@0eXD4jZSO4sUP5O$Uov=w?CA1SZ=_`kJ!X~^X+6m9%2C5ntu((|%#l5A`SSHH9 zRT_UOo?GQcCd^Lb+!k`WEvJq^SV=K- zZC|^C8 zX~-G+N!s+W^+>mCNL`?+Vn8o)sHsD$5`vX>EW7R0s$Po67u^3gM_7I$=kkAsJ$c8G z^+>a1@&NiM!=nH&Y51|y-i=&0gI3QgzpxZeaY~=iM+Ja>7<96heJFIYmVG#MvX*^F zbh4IxSah}jWvw}%KU+%Krcq&_s9M{W#L46{J)J-%ATL9 z`u`a&H5|ttpl~^^6h494Z^Umd;rCz*GW7x~L8E*dlJ$ihsQUTpAeycG5!GO6Hj04K zY`XH;eO4LtRbW}r*ZvXKXUC#SawUs#l$XV${+)oInq@12H0qi>Gm3A(g6{|wo5{_g zB&RaB(wzjalnI%Hu{2iAyG}tYD3$%XDEq~|Bne?|2m2*lWESds7Z8UE-13sOy1z-b$&?bnU-=rc@@ z`}c;~JI+GPXDO>lP~^wz|Inl&9(}?|EiE}MlgibbUp24YhERa{*B0J1n2yn7fX9$O z1)%bJR@XQ*XxgZwTBB@0kvOe1yAPo|s2*4W2T7o+&?k_=1FPx-^<^c#%EHS2kl?@4 zg_Q!ovgYWCIPb3l&C%UI<+i^XEewI5aacwR2HiEF`CP=ZvI6PHR-1%eCZV5=p~P1Z zDmvMJ*)16FDHWaM2F0_qZV-AFPpK2%tY zW#6xXS4<=uKq$<;Gz-343#%oN$+9EYpQtUW(~f0p878x}49!@5&kEEP`n>)$zbnaZ zgFh`bxGbmF!P{FX#@<_x8EFHuT9`?#Bf*mOp&q7Kd%bG-c^$Ph34Q&%CF`GCvgnz0 z|EIk#0gtLW`#<;InLAsy$u@yW$Rv}5kjxCpBxJG?hM6otKtk9u0m6iA1d&ZdL`9TE zM60b@muj_D+q!!L7O8fzeEr($=R*IVw%FFSt)jHre`~*14a4_)&z+e}Hc5Qs`=0;v z{26ZUx#zy;+;iUZp8Y-VZ*BjXe-Ye;@U_aC@A-0Uv(K_SQbYUCe3P%L#aN8F-C1@# z^x4( zAy;~w96|Gd^U7F3+yfaP#dxy$P5XGT6Bb_gUAVwIyVQkVF^R1a)y&i8w#`#r-SqbMBj*F9K9hF0{NP&e&t_z)BnA>=gCIWTg`qU^zxI>ho1boI?ga^ zACODA&B|W()M%@fS-kB9KgCYS5?T9#F5NmQ%v#Ku$>`N^BFktZ+K(JgG%BVM??*;L z8rc@IWZBy@+?FLD-|({z{IKNtvSo>W|Ge0<6pH!y;Cx!Ol<$hHeSML#?wm+j#}bWO z)a~y8>wfk_Z(?r`+UST$T3QYxHH9&& zWV9GQuX4u{eTfC$zy5!xa`W-uc`0+@JCVJy^I7hX#_X?YAJD$T%Y7I7oj17`$6~s0 za5+-+v@}LV56dU8JVs*&Y~Dm$cY|t}7$CDW#0(3-SfrLkqew{%#v(P3Bps7#WQ5cP zSgF0=aml8OF5EC&EV$m@`ET>bUf4Q6V$w0*s@Hk#8Gc5KVk@tNdS%=qRlO1_^kfI) z0quKShBmQX?CsH`f;>!4;&di;axx@7Mpb;mGnBCSj7e)*G>VqwXG~i2NZPTtwb51)@ei;p6Dz*lZ`0?dqf^Jh8z-U#yf4 zQ-Y0Jaxd(;qZdCRNwgx5mZ40fk$>rfM{VV521yE!(rgk5pq;$v5n> zWgBr`QTjn^W4?wNM1atZ@HD{_XmljB`OtAN3I-+^`VmCZb?RYS$h^oDj~-Lg8HZUr z;Y>kr=mf1Br^<|yVBEuuqGZJJKam-jc&?Bn!iJT>goELT!89TUI*32)(t!&vc+8!Fl^op`zxpggB=``z{j5PCYhn{?cn;}K2Isv_omH# z7szm=5Rl?z?}KV2u!b}^>>JU8*T|c()&yfsk$OzE(Rr>=^1j$W6QqYxNB$8Aym6*I zH>J=4`$#Yvgt15%4j^n6FoJS`^`#h$gNTB3mM}s=TDWRR->1DtuEK6=0PA$W8jb`|%=ChOf7HN# z*rY$U-l13@g#$34Al11CvEDO02q@2i2@nZB*^o5<;2%bDOu?Dj)uW*S_^jhRK?7i4 z>3qNg2yd#ZOA!OG6R1n)0143c^V4sUHHQCR){}>U!1|KsJU~Hw6n`hSAil(sUe8N9 zQm5zhIvr%c@y4xLEed*$@e$Fh`hTcq2iN{j*KAr`DmxDaE@s6)_dK0({W1&vGFnNZ z{T6i{;2!NDFZUj{m3=(CH6H?92{+`>fln~TV^7AQ$KZHaqfRz!h8p#{XcsVMdmbCl zFua#YEZ#2`fn`xR0yOc{`+8Tk3+$o`d$;y&?Ofa5v#MvbSR~TYz1o5x zTEt{~O2#>|&0C9+DTvne(P^-SD=crPvBp2hu{Mg>=(81OZp|Cj(3VY*8wGjUMYf_? z;Eh43}^<{>pl;5;mnico#}|dpP2w2gRWeI z{qkX^1JpGjS(3{+KEn()TipvWqrnpQ()Xb5E}-mftxUFgM2W$ulqloCsL4^Xr4mT(0G2qJT>rgaiMzoG}BV>nk6Ff=3^49`RGI zYK?{3i+XGji#Ql-#5MD*6LZQ{mykDNGvUKqX4 z0vTezk&bGU(6S{$R~UAFN!M#Xtnbm;SD-mzWor+q>~P!2LL2&27NoVZ7ITtTV@XT0 znysp#VKeOf0_Pj%S@UDIs-#%=(ZL1M(NLVr>vg&2&UJ!FrE}Uexhs`lC#-ud?oR(n=z4N0IJyKm+&3jZ`na+ubEcTp8EGLH4l_x9aF%4Ag zGOWAjh=B02L zZMFX{7^$<&bxY9_CUVu?wbZ2(te6TwHWoE{^-1FI#3ZmTM6U*raIP6JWJLm- zJEv%A@zPvdMmiLsX9$I(VaU{pp1O@5R_vvoCX7RdnIsg30Y?_ze8=hqotabj)YG60 z96=%z!w7RxHEBolZ7)XPx{m?Sn=48`k`3JMd^=EmWR6A#=x(5q5p=gR3A)Yk%|U>X z-N)_X>+dBkY4wbLXu&Y#?(V?gZ8*^nI5J7n$D2jX1<%j%-TL5ze=f~RByg+l>ji68 z#+3M*?>&AYnGIFt6ZP2zlz>LIb(DloiyVN%q`N;xPzidO17lia377zXAqLYVySAoe zroepOn#S73it?G&CDlXHYx)AxJ5F_Ja|_vXP4 z3!Tym8*?Y?S>Q@HtyO3)NFlRWWO+1yxHVo#6Oe&ip+;Bt=8`w2m%RCy+x?iJEOIn# zrQok?Jdz#uVr4d++eXa&MVO!!#U18kZeE#UNhz~<$|U>ih@$$`4(&I7 z{p--(6h}z&h$LzYG43qjabUQE@TwJjqy}d2ksiXXkizDPQ?Rrbf_B6sS6)fsf5-FF zz~WgU51$1tAuHILm4pDIl3-myke1{o=W<*6YEo27+GPm>s^Ra-%-b)zXq&k#_14RG z-KK4rU+-VA|GGnzj5{u&}Rh;euYx`$g5&MTIprh0VQv3!3}-z=y5CD|j2lkiyD1 zj|+`Z%)=xa)ff{>USI*d7COOsf$Vt0B1wLJM1FF(^>Q*@ZsGhQd~V}R8uB<%oV zF(=~GsL4*|HPpHrG5wr~T0G=_?W-BZQ!)$FQeXT-)PbGS!5vx z^*=QnULF?y($Fd4Vqpr4W5Dx`GZ}!v6=@<7(T-F#8EPd$?_EB9)`yP3jrH>rt`?^3 zU2)Or;^JE_EhjmSayW?tC_0{>6iXQ3Bdj@x98E79ato`|gk-%a z?~S|Q(WpyTF69BHm9pxNy2kt#7mx#Fznk(N{#FW>RQcH?Kqkv$d}ymSeBdu1 zijh@S(xIB3ZV@HBC~+eNXwSKNttDM}SMREtS6kKWaT$V3dNNCEJx<&Dj^+I}ho=UF%DW-cp`S|6#9(!Wf<&TOlUH<4}yLLVCIMq{$U48a5`B%{W zB+Qu_szDl{Qc#q1M>mS|mMC%podN6&i7!x!N5RXC1vxX8-zbau&x|yoKhooSBTVWi zo#PpK5(u|LOy+j$VY5KMSSf0WSCWIb7 z`v>u1?H%A8T2Kni4TRA^H8L>N;!s`aVd>FjgDbMM-~Y5({RWJ;YKqWz7P0l-9?XMv zqDHre*CLMYBC6;vA_vV8M7^*(L5RaZ5)ij6K7Jptb)Zd#WnlvQ0J0ixKvpxMWZ2>v zIJcUYOUQJYQ_ab_rDk)kIVllUFNL=EI4B0NSnS%|G;@v{z(>GKEysAhEX_WIo$=4( z$NPfPEq$dmdqY3#75cl~?(Wd-$B*}Ro;eZh6MAaJ-=B8BcT_kX`qrH4(8INLq4#R% zop!rVbN*ppoMW;rV(s3QRmB;SMqVTUqYi^IlhBNI1MP`s4~!>cVE|@nVK@TmHvx2u zA8VzRT&$~@Otgqg3Kh-s8|wW&LZ|VR<^$AWY8n}A)RvY>iCD_5D614o32&HkM_2f` zD(Mwk(#hgs6uZry8^xdD@NI;@6^3w=r%EZJ_~|wd!SxaTMRDA;T4!p4Mz=N$<#rW@ z_rhKO8Afx9L3H~?C}c_JQ&;g0r)Y8tm#e65TCKaWtaRz_Ay_wUh{L*tPB_o}!+GXW zj_ihC8r5pPFvbtTFeF7kkbZi9H$07e-w_ zk6su*cJG?e$xbqfrX(0r{(Pp7_knZ_2~3?~-f$)G%F@y)P(&)-Rk~}(_N`ksZCn@Z zSku08#qwoKTU(mv&ujFP*w=by71(Xr86{InARDO_8Dw(?$Z_}qNi>3mqb|(|c0xq9 zO!wd=hV(R?QZdo;Wz+>erZ5kmlmjA%er0apxWPmtCSbrzbAePn>&?4bK2;!ffr9CF zvv8-Rnc=UhF&gT3WTp$c<-W>Fqe;5*NN(n=rczH$RikcoO-<-b&x-k>O5F_i(XQ@Q zIaaml=nIM)RtHvB9D@G9rj@HREZbi!vJ0WSGfS5gWXsPA*Ek&IvzGQ=QNDBeW%H$;HQTQ8re}p- zre;VAo_341br)~Ff>s1l1Z(QOzGd@kH*WD#Bt%Y7j z1?%z#r$V3Fib*oHRT$lvG_akkHdtt8jl66%wsS_P(}kE+$vzP#%P*=zn7Kj`!>H8x-Rsu%1{29k@440DzOrE>1!AD>Pt!s3uW!yp--ME5_g}uJULn1 zf99H^X9V5dTDdSZN0;cF_O@_f(0SFh2d;7s3J2cKawh2X@~fen|Ki+z?ZMs7zl3gn zRR%9aw&?78(nH!K*v~3uZZB-@NSb2g7DHJT>H+MMgbkn+`6xrgAdiVlFjkwLu9dCD zDP$gCq*$u0t~QnAkJck-t_O*Og@su*c1oMDw#n<2b&VHWlC%k(O>^g%>bGYki9g-? z;+8EhZr%RU#*6y0rYsA+Iv}`(`@|_T3U-~Wnk8uWZkxZbsCd`!D&5+vw=LVh@56og zzxS`#%uTkO7Bb^KXMRrkL9R5VXj9QRM$vp?a14{pqMT7|5OVNe6hj-NoX~Az!e_5) z9{KEqHv7|FE*~YK4(&6D!_M~}(RUd!9oMpcgANNh7(oZPLlD=(T9zO#7Fc#xrgdsY z8XDcC1d~Az++t=Ia!oR6+5r!DI6@VaafbQXg|k3Cqkgt8sJ*^3;?}M|{ps1$Wo4(e z0!cXB_zO1*WM?R-*@^U}u{v)J@GAj<0SE%fFswxodJs^HwGc{(F;+Ku$>GMtwN!MA zbIg!TvpGjEPa{5Htrr$p-7x4xpwl!^$kEsb|14g9O-*UvU|*d>y!}kSqfWXLV}ol# zRxxjI)6rAzSyH^Ts>*%pDCgHo@mj3SreHOLu+3=nIAYBV`c7s^wiIJdZb@4yH3{Oi zHwf4Bux6CkH2EfAtRXDMnvyU-CI(~&*psPLW@VDc0?0M{_a9iWTs(Q(JfYA21MQD% zsUP(TLFp+?HTY2sO)FU1L8=iDB8-=W*Pug`I>2h+B%X+cI8<-}Fu&N{f?*9&yQHA7 zpwN+#nL;d~*%?;6X&8}(rL~A?4>i5B$>2(ugb?t`+ypqrSCcS*Qyblg&?A)aRAP;* zAkI{}61eAOt}I)UdFINRxYmXWld*1d)>P47oj*N2-M_QM5SP2l@84BlPk(dc3|LR? zC@&9|l?BVoJFGhK?|swKMPq~8<&a(+_o4-H~=vcQ1Uc%s|7IM z4ts&yQ1?aPPf6HhmvC+olK`*`wSOHp9Yh8oszQ~JWDU^KIBqf?X~3Hzuql?b)Z`=s z(B;@PVVVwALdwM;beh0BD-UqBlFQuT4oK9&EJIvvp5UJ*wC33Kje6_J-FU3eYHHWa zPklY~Ue>+E#rNI!4e^b-4~47fA@tmdGs1hJ1IU}mI)tmFyEIvRF0yBS9`;fJ_%a(?L3TG?gWg1f7QPlj&#Yaxn&ea>^Kf z(p{r4mFJK0(PYJ-EQkIT^T6}55~~RJYF7Ym1O)9c(F$tXn#r&ZIMCP~9?! zX~HZ6Eb3d*q@LDKyX(;=9LYL6@*$K63gT+WLW6#WaKYMLr?LSz&9v+Onx#h?e{C?@- zcL(440qEx?7oO9s6RI@ty~5^iiu$UD^Ui{Br7OJ1eAjYI=~c|R@+*8_Tr`>Ws; z_|M-VzlLAHt;M%HL(glEBkcR&0pg~+^b@#`GM*0kUOewr(<$V_od+5UTd%&Cvf=mq z(6dO34@iIHqCAjW`Z?l+bco1rV&fJRflx_rQwy@D@8vO!yP7zv1~=TrWdDK(7bSs2=cZH}0q>bct_* z->21!>V}L3H6n#o-YC-B9X$#XnPQNw% zq{V01XZbK=UB=I*c&Btv*)!z<{EkmKHT4B+hxON)y;%#gemL#FvbSYFZL70AYx_87 zU(N@)jk%xNf1g*EpOD{?|H}en!M1{Tr>~g)bYX5`ZQ;X(r)HGk_i#~t(aEC0;(Lle zboSzRgY$9MG5kX6Z)P5T?K2O~e3yPDanav*OTDFUx$iD(D|eSGvp%S3sd&<3^E~MJ zb7e{8uFAKnmQ}q_{dCQPwfD?EUUzCv!kl}&$=(BV#kqI*G`>6hzWT}rS7TAr!g-tK zA8USa;f6)Q3zjWzY1!2BaLc<(3YQ#cEo^;yY2MNsm$79xFV9`RW%=J$tY7iQ%J!9i zYugg=1>S8>Z?A3dXy4ubX!{$hN>*)L_2KH0)eBdzUwv@(gR5U!qghkAX4{(Ic3jhO za;?j@V0fW>rT?I%iFcC>u}en-5K50-6wkLdhY9arB{oRg-oyy*iSLW zrhg*VFMRD3W4EDu1$r6W8*r&^0VgLmgxw;x9rlFXSPNk{hTR&_{5b5^ zvYqUeuv=!SwExWG)Uk9S7>*r*&@S)6K!7ZR^stTaSqi#tXnDBcb|ZCe{K!2QZ|Qw2sQVDpc6Kp;>cPDS zvF^a%?wBvxm@oRRR=n$Dmmqv6{Dx8!OH<8O@OUmp{F{*;8|Gy$e7|HI`thi1FcR)U z>NX>QZy=EwUUq=~4BvXp;w7XL2k_>culH~cH$aw5KdP!6Sj zD1T$~aBSaY;9WoGU2ixQHg+k}K-}z#riXZG!xt~Z-?8IakCYFU+r>y(H}ita7a^{G zaN5Po{GxF}i;ztGJ3AfHI@Z4r;7P+?Od}xcGR9zlAZI``hkVCFeiNa?YsT4>6qbtF zM> zFb}I_Rjiuy@7Qbx8@b5KTu6|g)w2eaR}=CvALGDg=&3DY7odz=fLzy#(pUyu)fE`k zwPBjxj-8yK zJHdX%o&eYX%D%>ajT-wZO7}GT3%d@ry`No((%1+|`xZ)iD>MkUp_DH{N$o(1e}Edk z3*~z`yAnOcG4^eC6{fFy*wyUM>_hf6`wctE-p1tnckK7}Ga1`yRWMeO-6S zrv8!=pF4an3*W2w-R-Z^Z0z6GDR1eyxMzE(rs0xpo9TtSw6ua`K{$IBr9Rfbm)XnO zOWWI&a;s7p2=>|z zEpJoA{LUZfA!1!!_I1{r9EAlG=C{`$#&`WepHmSWiY?gdR78h8$DZR`b0`LX@nJMHoa=f#+I@D2i{00$i0gV4p$i{SbVW|Z;IL6@6Ob(p zTL%)P*BcBFNwA)$*628FNMQa3Ur|m}a7>Qjf)uC5A`~MDeq=ppYdB=@q(bG)W>zW? z#b!k!BdJ8u+B@sjPsEQCT**Ty1de7cHc$e|zuk8vK8{HZC?cypCr|_-PIL^2VuRA% zS?^Sm9LR#rrX>0oP|n~$2`NeR)QYDhUS4KIl*E~00}r~8aK-Eo+71P6iWzKkD#?!K zWo-kR?)pHU65nIr=~Pl2%}d&vm#UuD9Qdbj|5V2SOZG2s8%Rz@5qA0%b1_vph?Z|4 zk^Us%k0PX_ETsIFwgIY#V3+R@N*JF_D$21VSi}u^p!XC6HJRQ9kdr2)zX`s>3u~Mr z#3U@m4kr5*R(BYy%UmAP9BhDz4a?e;WV_GSpd>*2;_=}iL@^aUL8RfS3?NIH(GmH4 zKH@|w5`uRFsrq8&`eJJ?g6PX_ z>Pwr0DT&47Wtj5%eKoI?(b)XuAb&QbD;N2ryB+zXdmi#f_k84!?ghvn-KQgebT35y z=spAaqk9qZM|YRQR?BPDOb1w;5wxN86M`fhowzG565bMrGP78jiHcc@I?)8t9kXWI zJ1gzf!hbFWFhSIs&Pu1^akwnCPNni(q>%6~kXNCI zSbDzAWox3g0j!;W=unfr32jjudO$S4=$a}8EU<#Z)o8@h6${8TXjk(&*+3lgDJFk$ z&mouHW~)7fIBSNJ*<5OTij3M2rnV_TYFxZa+Ky;!TATHVra(J2;G-tjh}Ik5M+)qX zK}AMs53jeVT0*hfJ!$;GZo8sI?}}DW9SoqM7#XG$Nkd0qZ|tnJ+VO=(d?0!EVU6{*pLEkL6{fzTCiz$ z^p#>n8)CCH+MDR3REl+xcRVvHrxmuW&1I`a&rYcqRZm13Eeb`>$J2bgiVkAbLL4o5 zL3_Bg&;>Y^Igzh%?uUyjNF$w*S&kI37ww0OxY(#z{B12(bgs7AfNP*cNJYJ!JM3+% zwPn~_->|olu(9!t4B>Yu)y1&{kwB3T);pA%;zJNWlCeXm>Eoph1?o~tki-U_WfJ28 zmGhk#srl5blQ`Q^(_E-|YK9se14eW@B>i0SCnwTPV+q(7kz(REwPUsRN^4GxyyOJJ z>1;v+TwNUD$~-*P6z5Qx5nsZ&iLzimSdgYxdkj-h!&6*J1#0<%ar~PRosgQMctEqz zp;Y0vh`87QcH0`!8%MZxfrA8ESp+sOb{uA`5snr(1ad5K9EQFd9IbG0pQS|81fOL@ zLyqM{Lyi?hLynaWED|$6Ty1cnlZPwdI3lQi?Qp4ntB6jZx2uVcyVejLcXbdQcdeyw zHh?Th-y}yTeUlvP=$qu|BAR({bQ29ZdWeP`y+lKfKAx_6xYqM@k*lAli(DIcy2y1Q zPZzm1@^q2wBAzaCZQ|)7*JkjzHd=sN_><12E}Ywl=|raZ@N_ZyS~!VjyXqvG zOE?X^AetQrJUbferTmG9*r_@x#AT|J$af*0*=m%Rt4<=gLUj_sm7uMQ#Kg1xGf2=;+?PBgy#{E5eRKy?!NwW^cI4ED(C zrt=-P2&{-4N8uLQStfhGmb}i$SctQV;B*;QS(J|rdens;Ybk6lhwB0x|QBNs_ HyfgOS2`A)? literal 0 HcmV?d00001 diff --git a/frontend/static/img/call.png b/frontend/static/img/call.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d0a00369770807d6b1ddcfa893a6c4d7bdc588 GIT binary patch literal 13149 zcmXYYby!sW^Y+GGkwyFo%yx_x`ch z?zJqlpEGCXo|${@4O3B)#Xu!R1poj;UQS9403hH?2!Q+od@}e_XbC={ILPTb0RYm6 ze-B7vPh&m!CW*7Oj-Ml@BU~O&x%03cG9nj}8hKgR7uo1A2gX@=`H^*jQ6V8nYP6 zI4nC1cz>}`v0p3pYks_DVD^`hmE$7TuzYkSCfq5q>!VyPwg6#5WKJg&ln$2~M+}PS z9NAqB@X0V0<%nTGF#X3La|`FyQ)>>8k(u%u`H)Uw*_=(cO{tg}9;LzK%-M8NP%{+H zBq&X(nUfkB+y^#?CgIjo%xr@uS`*(uobZ(q=-)2SBwL%p;S|U3B?*fA4p;)nW)#Va z0?avrh^jiuh>n3u_-{#_BHxz=o>>Y(8g-3~GAn%!GQ+5yMF@Itv$seA(iumtmuevx6Ffo?^vQ?B^T4lmS@f_*qRwgXLu!c$xA^0IV`P1VOAYOzq76RgOIoN%)X%NFIX_gzsa{1m`yZ3)+a$rf$uT zm>XnA-MLS%D^34!+9{F=e9oaJ`5MfIDuii5y6?bOa6sLehUXSzoSK}>SdA%D&bZWLAPWn!iPZ{JTW`pa^r&b9f-srmBZ~eaXJw-{5$Slx#sHmK`~;9p6)eh+9qCB7XiQK*;Q&2>tnM zY&y+(o0r)^RA_f+1AoU%wC3n3pbyco6yaNdtVY5}?g*bMJ}RJSMS-?M;Hs_~uipG| z{=C#XylyFiV`A}jp7F;wOOnV*#V5bXl^(st z9Bj_YihLUi*l&H8n_Y_2#S4dI;Y$w&KFKp@G{|l7E^OpT3XxJ)x4Mopj*R;%=|7rb zm6hfnQpWR)Wl%D}^G3IbeWwm3`6SpOrinsrCf$$xX*vNaXF-8BU>FYN(UTx5wl-6n zc82~(h7n(+S%U(e3RM~|#Y#^`NN7>~pG$E#EcU~j5u{4OPHfN{=@dCq`0az7q=Yq? zy*S~@z~8UBB>0@r6Yx?8_~n%SIY8gF=pdQK11PdJb<>0IZ zp{{3grR0tu>#<|^_ zc+jYUHPgZ{3t*XHd#*i-RS#wDWEI_M3qYY~CEVKSuSA8*LsM>^gazI=jD10kv``fp zU`B-CB4#w1AMG_MQu=?VgU=OCJp&F15!L)k{tSBpkIxy&$vanfyH`*mQVguq3~#<8 zQ`pair22i`7k`?^z>NPJ6juja9I+*n2}vNomi^D{Dbxe`^zX9g1dHB;1y`5(p@hD& z;DYDExVb>!R7MovvJ2`ZMS(->A)lfa-sY~RY<_O6Zu3Wvq83zVeW*@s78&jC$Reb- zsYG$q1ToLnJFBKV8x=c?2WxVV@HyE!SqXOEmd>=Ysivn ziau^<@AdISpG?*r<^xGAJ}8Hx+;7X=kXu(kkfvnUbr(-o zd3_mzQqBpYfZ=>T4IkHq>>I|ulRD`~n3bHXyN<#g|gN`Az zAq##Fxq4VE7tKB|;Gt7~?{rjke?j@XmRvek1X+tEcWMbGej0}J(m6nBX2!o`lnO6* zU~{{-37dM&VIRj{5r(4We+5SWjeK<4@Y&)p+mIrm^arFHrFP0FIJF#AkVzJ`)UEV~ zP`@|9H&|UKYcO;y%IJ^JO!C7vf9?8+2#if#evwvqzM+QCvxH7*Tb9i+^t92-h)<$n ztU^<0Z`=4aQN|Ie>4iv&)|newHWc!M3dC3&S9VKnOZr5wd;>BHT;;KUD5z8y96A5a zKfLxeNjj^KV}xJ)nZNcQcl*)KQQ+&VCz>xE)x*Pu$3<%=0Cg@e^SeF0QND3F9^hN_ z(aJ?8IQ|=V&^?>qnv;)WvQnL{lR=$?fSh>Np1w0-0)D;*Kwu!OiTqNc3#F{5eU?#C=ndv)drzl;eIows$jv~P?`mpvW z)ArtO9t*BY+bEaxPB4#R(Fb?WQ^%TXh*hipuRsB3=^EFYt+EYuWMGi$=+>at+17<( zMargBI7R*ZATG(}HFsHPT_o;PP^`4;s%1Lq{~J&99jmLHBe%RB0CrBkh63jhpyx*; z)j(8?LJvhz0}Z{4Y%qg#l0}sis z(85@qy4npiZMzLM=ue#_Zi1jE63W_14xcUPgTSHD$De)AHWJwnuz3o1hu zYtt4_drqkwb01+0QZXS)m8+yDvv+1Q_ch<~#f-PfpkuQsi5Q<)`n4IXWe1f#5&=Zih}u!POX zA`&tsyY74%yu(ovFhWvr1;IByOBG08`S30W0Gk^}5gxPiTJR|pY99%$w_=ozS3U|( zP8$XfmJdFG9`_@$i?zl$!hapP-jAE%eNl;%J zwBO?Mskpt^`BPLaXzlOJ?-&TW6KHMYV@Ot>`#|=W6gGwjXH#J{TD3zvIou7rfb}kv zo6}xTUTH?&xG!FNac=1(I1Vgey&nE9j^eX&+nE4jp+_Ufq1_;hAJr3IHo4_QBnBhz z`ra-Ia>EoZn7x5=(g!wQtR*tkq%uQAG_^APvKJP5&Rh#F++yU@m8GzQuo={Uq{Hd$ z2%HG(E|1%fe^zUy&n9PxK(WABbg+F;yqPDapblCC&!OYxO`%Abm}Mo$`O;c`sJQqC z0V8?S(&-SJ4%JsOOx$lhzrxPVAGbO*@{Q??GH!8A5pEojOQ+r5tTjb>xXwBR-M}`x zP_P;g?WL6P-G5HlP~2JDkBniQPJdSx`^x(CLU5GhE0`NXbx$O}-3q<7b-hi5w$WQC zyF|Kn>r+jtoqNo=a+>bhlw8w$!|LP1SHrA69pDQI|3PW-Lwau5H}qCNr{a~SCySsC z?a?+bwYZKJbwpN%(aZ?F!-Fs zC0s*#n@JM|tNwokQSxdgN(PMs-38A{@=rgpQwSAQ^2uq$_k$J^A6+N^JHrtTLO)2{%Vd zQ_@eN=)vcAD(toF5879s92jByJOYuZ6k%j|+iSr={3p|Q+5cTKP091VB&cd}#Ilo1 z!Dy2aU32LP2wq>Cm*ktbYd|bB|G;RvKcnrZ=`lAW?J5Z2$#rOO<{CT(4TKjz_}oz< z{eB}we6aS`;7aOVc73PFZEe$oYHde*#UDG%ME*#S_>uzSW^vT*z{qVj#aQ7>D9XE_ zIOF-2{%vJGx636UO7|KCpc>4Lo46@_BgA#fg)H@*Hqqx5qz)ZN=H{!}ml2-0Wo5<- z$~OXjy}vjkEH!wkV2PG)HU;E1g2CTtXgS|}T|1h`?dt3;&;F_yCTNp*&Ig3No#pw;Q}zHdpSgU9;?mpz7NzG0$c zzG&Jq`3k;%vfho?w9fi1wnjB{7FELqL|p&P?v6ApGzePzp`{yukUsO0^@`2RhDh0 z%2(9pEudX-Xuiz8!)RF)lI(;47J3ljDe;k^y(jJFYJw2${ z@n7Lz%fI-hJy011_f)1l@x92dKWq-Z*YVgQOQ1CRTD;BTtlNx@hiz7q+$K8lq?#gp zAaG#4v{TRJ{wba6(Hk$`vpDtMi$Hcy~H?Y0;MiWNdUuJ{y=O}y-UqMvX5;u_GP*{)tr%`sctVk z4dwsqRq8LznXSg`q0fwi-GyrOR@HCbJk1Gwwwa5@&caR;J|db#)f)-V3d1{OR9SRY z+?Mm=amnaP586laUe?}^2p)YwZpXioxK`%*d+oS$}t9h zru<~p4WUNiiNfT|Yrds6nm?0$`0(gdXuE&Sb@5tHJVKUHWTT$Gxkc%?UU13E9<{0) z2W|WqYy6orn|d^vha3e1>niNLFaZj7aiWygQn&LfSMs(({3tq7tVvpgYyX0$_Ekg0 z4AGdfSO2Sy&FVW_*BzmyHxDo7H)AIbz}dRvU5AG*bS|mh1{dz{C512Z2ao6O&!9X2 z45eYNb=Ae>7SBJ8YIfb32>JfXt5zQVk*(uc*t^YB6Ku49u^Sw4F;>yH)2kJ%p!>!a>GHnf0miiT|_xob~lW!io8k$Dc9t80*I{j9pHw*7uDaGgNqa z6-mOFO~?sL-t*V&E#c$C>}u6uCECX}$NNhZwo@RoKTebK$-FxC_}u5yAAr6+(++5;{@P!#Opw@Fy|7{rOuvFkCu_~Z1<7StbPIX zdC(_Dt9J}6V{=De8L4kv7KF!9F%Lg*f839LHaWkvF=gPd6%CM}A2UvJns7hpdj*tO zvS@H#`Ozd+%)9>l8T+kNGB$DWQ#V?gaevXM`rC>Kuvs1@c%f^?@9hRQUykLh4_~upSn- zc|=I5%wtC5c%rL=ZQmMeUy?u*F0z0x=T1BTLyIsq5ru78T}!$CuYYkA-N0Yl*CNYF z$=1D2nAW1R4$f4_rzqcE1%m*^sf#2+1;PmNlwp)XLQ+~5+1z!^IZF0offu<(_3gmd z(%<1dR?`Bqi}gPe5t$10KzBCa7KL8B`h9e=2S7loma+Ir7^wTk?D((0_A?H4e$bDf zTJ0mX3}t^FkRESgV$7<`1%6q=QC?t@G=WBL9y*CidrUSuzoWMFI68%_GVLEJ|FIgf zZO_EbWYeGjf`{n%X?6CQLOq8rO8yP*oZ}}(yZ56O6v5^?nomp}Od}M&v=Tm&9|+1m zayR6(=RsukZNQ;DRMP3@hnh+qIvAdUYYenBA~cPjKVb>ei@ruwrDy*kyfs!v)jn

16)d6ZpFYIZEw|uZ-p~Er1B& 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 literal 0 HcmV?d00001 diff --git a/frontend/static/img/logo.png b/frontend/static/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0a30ca280f25b4de026889fe8dc05735d2db47c3 GIT binary patch literal 58100 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 Qa2D=B)$|@#sM<#S4}00V82|tP literal 0 HcmV?d00001 diff --git a/frontend/views/control/dist/calibration.js b/frontend/views/control/dist/calibration.js new file mode 100644 index 0000000..dfdf536 --- /dev/null +++ b/frontend/views/control/dist/calibration.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Calibration = void 0; +var Calibration = /** @class */ (function () { + function Calibration(Main) { + this.visible = false; + this.container = document.querySelector('.ntsh-calibration'); + this.image = this.container.querySelector('img'); + this._Main = Main; + this.registerListeners(); + this.startClock(); + } + Calibration.prototype.startClock = function () { + var _this = this; + setInterval(function () { + if (_this.visible && _this.image) + _this.image.src = "/calibrationImage?t=".concat(Date.now()); + }, 1000); + }; + Calibration.prototype.registerListeners = function () { + var _this = this; + this.observer = new IntersectionObserver(function (entries) { + entries.forEach(function (entry) { + if (entry.isIntersecting) { + _this.visible = true; + console.log('Calibration visible'); + } + else { + _this.visible = false; + console.log('Calibration not visible'); + } + }); + }); + this.observer.observe(this.container); + }; + return Calibration; +}()); +exports.Calibration = Calibration; +//# sourceMappingURL=calibration.js.map \ No newline at end of file diff --git a/frontend/views/control/dist/calibration.js.map b/frontend/views/control/dist/calibration.js.map new file mode 100644 index 0000000..1867e19 --- /dev/null +++ b/frontend/views/control/dist/calibration.js.map @@ -0,0 +1 @@ +{"version":3,"file":"calibration.js","sourceRoot":"","sources":["../ts/calibration.ts"],"names":[],"mappings":";;;AAEA;IASC,qBAAY,IAAU;QALtB,YAAO,GAAY,KAAK,CAAC;QAEzB,cAAS,GAAmB,QAAQ,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;QACxE,UAAK,GAAqB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAG7D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;IAEO,gCAAU,GAAlB;QAAA,iBAKC;QAJA,WAAW,CAAC;YACX,IAAI,KAAI,CAAC,OAAO,IAAI,KAAI,CAAC,KAAK;gBAC7B,KAAI,CAAC,KAAK,CAAC,GAAG,GAAG,8BAAuB,IAAI,CAAC,GAAG,EAAE,CAAE,CAAC;QACvD,CAAC,EAAE,IAAI,CAAC,CAAC;IACV,CAAC;IAEO,uCAAiB,GAAzB;QAAA,iBAaC;QAZA,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAoB,CAAC,UAAC,OAAO;YAChD,OAAO,CAAC,OAAO,CAAC,UAAC,KAAK;gBACrB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;oBAC1B,KAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;gBACpC,CAAC;qBAAM,CAAC;oBACP,KAAI,CAAC,OAAO,GAAG,KAAK,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBACxC,CAAC;YACF,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IACF,kBAAC;AAAD,CAAC,AAtCD,IAsCC;AAtCY,kCAAW"} \ No newline at end of file diff --git a/frontend/views/control/dist/checklist.js b/frontend/views/control/dist/checklist.js new file mode 100644 index 0000000..39aa0f5 --- /dev/null +++ b/frontend/views/control/dist/checklist.js @@ -0,0 +1,96 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Checklist = void 0; +var morphux_1 = require("morphux"); +var Checklist = /** @class */ (function () { + function Checklist(Main) { + this.Rows = { + CAMERAPC: document.querySelector(".ntsh-checklist-row[status=\"CAMERAPC\"]"), + CAMERAPROCESS: document.querySelector(".ntsh-checklist-row[status=\"CAMERAPROCESS\"]"), + CAMERAUNITYSTREAM: document.querySelector(".ntsh-checklist-row[status=\"CAMERAUNITYSTREAM\"]"), + UNITYBUILD: document.querySelector(".ntsh-checklist-row[status=\"UNITYBUILD\"]"), + REPLAYFUNCTION: document.querySelector(".ntsh-checklist-row[status=\"REPLAYFUNCTION\"]"), + }; + this.FullReboot = document.querySelector('.ntsh-fullreboot-button'); + this._Main = Main; + this.registerListeners(); + } + Checklist.prototype.update = function (status) { + this.updateRow(this.Rows.CAMERAPC, status.CAMERAPC); + this.updateRow(this.Rows.CAMERAPROCESS, status.CAMERAPROCESS); + this.updateRow(this.Rows.CAMERAUNITYSTREAM, status.CAMERAUNITYSTREAM); + this.updateRow(this.Rows.UNITYBUILD, status.UNITYBUILD); + this.updateRow(this.Rows.REPLAYFUNCTION, status.REPLAYFUNCTION); + console.log('Updated checklist:', status); + }; + Checklist.prototype.updateRow = function (row, state) { + var _a, _b, _c; + var status = row.querySelector('.ntsh-checklist-row-status'); + var message = row.querySelector('p'); + var startButton = row.querySelector('.ntsh-checklist-row-button.start'); + var stopButton = row.querySelector('.ntsh-checklist-row-button.stop'); + var rebootButton = row.querySelector('.ntsh-checklist-row-button.reboot'); + status.classList.remove('RED', 'GREEN', 'YELLOW', 'GRAY'); + status.classList.add(state.state); + message.innerText = state.message; + startButton.style.display = ((_a = state.buttons) === null || _a === void 0 ? void 0 : _a.start) ? 'block' : 'none'; + stopButton.style.display = ((_b = state.buttons) === null || _b === void 0 ? void 0 : _b.stop) ? 'block' : 'none'; + rebootButton.style.display = ((_c = state.buttons) === null || _c === void 0 ? void 0 : _c.reboot) ? 'block' : 'none'; + }; + Checklist.prototype.registerListeners = function () { + var _this = this; + this.FullReboot.onclick = function () { + morphux_1.MorphFeature.Confirm({ + title: 'Full Reboot', + message: 'Are you sure you want to perform a full reboot?', + }, function (state) { + if (!state) + return; + _this._Main.socket.emit('status', 'fullreboot'); + }); + }; + var _loop_1 = function (key) { + var row = this_1.Rows[key]; + var startButton = row.querySelector('.ntsh-checklist-row-button.start'); + startButton.onclick = function () { + return morphux_1.MorphFeature.Confirm({ + title: 'Start', + message: 'Are you sure you want to start?', + }, function (state) { + if (!state) + return; + _this._Main.socket.emit('status', 'start', key); + }); + }; + var stopButton = row.querySelector('.ntsh-checklist-row-button.stop'); + stopButton.onclick = function () { + return morphux_1.MorphFeature.Confirm({ + title: 'Stop', + message: 'Are you sure you want to stop?', + }, function (state) { + if (!state) + return; + _this._Main.socket.emit('status', 'stop', key); + }); + }; + var rebootButton = row.querySelector('.ntsh-checklist-row-button.reboot'); + rebootButton.onclick = function () { + return morphux_1.MorphFeature.Confirm({ + title: 'Reboot', + message: 'Are you sure you want to reboot?', + }, function (state) { + if (!state) + return; + _this._Main.socket.emit('status', 'reboot', key); + }); + }; + }; + var this_1 = this; + for (var key in this.Rows) { + _loop_1(key); + } + }; + return Checklist; +}()); +exports.Checklist = Checklist; +//# sourceMappingURL=checklist.js.map \ No newline at end of file diff --git a/frontend/views/control/dist/checklist.js.map b/frontend/views/control/dist/checklist.js.map new file mode 100644 index 0000000..143e28e --- /dev/null +++ b/frontend/views/control/dist/checklist.js.map @@ -0,0 +1 @@ +{"version":3,"file":"checklist.js","sourceRoot":"","sources":["../ts/checklist.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/control/dist/main.js b/frontend/views/control/dist/main.js new file mode 100644 index 0000000..b4dc1d2 --- /dev/null +++ b/frontend/views/control/dist/main.js @@ -0,0 +1,144 @@ +"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.Main = void 0; +var socket_io_client_1 = require("socket.io-client"); +var menu_1 = require("./menu"); +var checklist_1 = require("./checklist"); +var calibration_1 = require("./calibration"); +var morphux_1 = require("morphux"); +var outOfServiceMode_1 = require("./outOfServiceMode"); +var timer_1 = require("./timer"); +var socket = (0, socket_io_client_1.io)('/'); +var Main = /** @class */ (function () { + function Main() { + this.Menu = new menu_1.Menu(); + this.CheckList = new checklist_1.Checklist(this); + this.Calibration = new calibration_1.Calibration(this); + this.OutOfServiceMode = new outOfServiceMode_1.OutOfServiceMode(this); + this.Timer = new timer_1.Timer(this); + this.socket = socket; + this.supportButton = document.querySelector('.ntsh-support img'); + this.supportNumber = ''; + this.registerListeners(); + } + Main.prototype.registerListeners = function () { + var _this = this; + this.supportButton.onclick = function () { return _this.showSupport(); }; + socket.on('status', function (data) { + _this.CheckList.update(data); + }); + socket.on('supportNumber', function (number) { + _this.supportNumber = number; + }); + socket.on('unityWebSocketState', function (state) { + var _a, _b, _c, _d; + _this.OutOfServiceMode.input.checked = + (_b = (_a = state === null || state === void 0 ? void 0 : state.parameters) === null || _a === void 0 ? void 0 : _a.outOfService) !== null && _b !== void 0 ? _b : false; + _this.OutOfServiceMode.state = + (_d = (_c = state === null || state === void 0 ? void 0 : state.parameters) === null || _c === void 0 ? void 0 : _c.outOfService) !== null && _d !== void 0 ? _d : false; + }); + socket.on('timer', function (data) { + _this.Timer.update(data); + }); + }; + Main.prototype.executeCommand = function (command, message, type) { + if (type === void 0) { type = 'unityRunner'; } + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + return [2 /*return*/, new Promise(function (resolve) { 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*/, resolve(false)]; + morphux_1.MorphFeature.Loader({ + active: true, + message: "Dispatching command...", + }); + socket.emit(type, 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: "Dispatched command", + }); + }); + resolve(true); + return [2 /*return*/]; + } + }); + }); })]; + }); + }); + }; + Main.prototype.showSupport = function () { + return __awaiter(this, void 0, void 0, function () { + var dialog, callAnchor; + return __generator(this, function (_a) { + dialog = new morphux_1.MorphComponent.Dialog({ + title: 'Contact Support', + width: 'medium', + height: 'auto', + okButtonVisible: false, + cancelButtonVisible: false, + }); + this.supportNumber.slice(); + callAnchor = (0, morphux_1.ce)('a', 'ntsh_callanchor', { href: "tel:".concat(this.supportNumber) }, "+".concat(this.supportNumber)); + dialog.content.appendChild(callAnchor); + setTimeout(function () { return callAnchor.click(); }, 100); + return [2 /*return*/]; + }); + }); + }; + return Main; +}()); +exports.Main = Main; +var _Main = new Main(); +//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/frontend/views/control/dist/main.js.map b/frontend/views/control/dist/main.js.map new file mode 100644 index 0000000..8ae228d --- /dev/null +++ b/frontend/views/control/dist/main.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.js","sourceRoot":"","sources":["../ts/main.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/control/dist/menu.js b/frontend/views/control/dist/menu.js new file mode 100644 index 0000000..28f6f3e --- /dev/null +++ b/frontend/views/control/dist/menu.js @@ -0,0 +1,46 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Menu = void 0; +var Menu = /** @class */ (function () { + function Menu() { + this.menuContainer = document.querySelector('.ntsh_menubar'); + this.tabContainer = document.querySelector('.ntsh_tabs'); + this.registerListeners(); + if (window.location.search.includes('advanced')) + this.selectTab('advanced'); + } + Menu.prototype.selectTab = function (tabId) { + this.menuContainer + .querySelectorAll('.ntsh_menubar-item') + .forEach(function (item) { + if (item.getAttribute('tabid') === tabId) { + item.classList.add('selected'); + } + else { + item.classList.remove('selected'); + } + }); + this.tabContainer.querySelectorAll('.ntsh_tab').forEach(function (tab) { + if (tab.getAttribute('tabid') === tabId) { + tab.classList.add('visible'); + } + else { + tab.classList.remove('visible'); + } + }); + }; + Menu.prototype.registerListeners = function () { + var _this = this; + this.menuContainer + .querySelectorAll('.ntsh_menubar-item') + .forEach(function (item) { + item.addEventListener('click', function () { + var itemId = item.getAttribute('tabid'); + _this.selectTab(itemId); + }); + }); + }; + return Menu; +}()); +exports.Menu = Menu; +//# sourceMappingURL=menu.js.map \ No newline at end of file diff --git a/frontend/views/control/dist/menu.js.map b/frontend/views/control/dist/menu.js.map new file mode 100644 index 0000000..d30023e --- /dev/null +++ b/frontend/views/control/dist/menu.js.map @@ -0,0 +1 @@ +{"version":3,"file":"menu.js","sourceRoot":"","sources":["../ts/menu.ts"],"names":[],"mappings":";;;AAAA;IAIC;QAHA,kBAAa,GAAmB,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QACxE,iBAAY,GAAmB,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAGnE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7B,CAAC;IAED,wBAAS,GAAT,UAAU,KAAa;QACtB,IAAI,CAAC,aAAa;aAChB,gBAAgB,CAAC,oBAAoB,CAAC;aACtC,OAAO,CAAC,UAAC,IAAI;YACb,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC;gBAC1C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACP,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACnC,CAAC;QACF,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;YAC3D,IAAI,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC;gBACzC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACP,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACjC,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAEO,gCAAiB,GAAzB;QAAA,iBASC;QARA,IAAI,CAAC,aAAa;aAChB,gBAAgB,CAAC,oBAAoB,CAAC;aACtC,OAAO,CAAC,UAAC,IAAI;YACb,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE;gBAC9B,IAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;gBAC1C,KAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IACF,WAAC;AAAD,CAAC,AAzCD,IAyCC;AAzCY,oBAAI"} \ No newline at end of file diff --git a/frontend/views/control/dist/outOfServiceMode.js b/frontend/views/control/dist/outOfServiceMode.js new file mode 100644 index 0000000..679d85c --- /dev/null +++ b/frontend/views/control/dist/outOfServiceMode.js @@ -0,0 +1,67 @@ +"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.OutOfServiceMode = void 0; +var OutOfServiceMode = /** @class */ (function () { + function OutOfServiceMode(Main) { + this.state = false; + this.input = document.querySelector('.ntsh-outofservicemode-input'); + this._Main = Main; + this.registerListeners(); + } + OutOfServiceMode.prototype.registerListeners = function () { + var _this = this; + this.input.addEventListener('change', function () { return __awaiter(_this, void 0, void 0, function () { + var valid; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this._Main.executeCommand(this.state ? 'disableOutOfService' : 'enableOutOfService', "Are you sure you want to set the installation to \"".concat(this.state ? 'Out of Service' : 'Operational', "\"?"), 'unityWebSocket')]; + case 1: + valid = _a.sent(); + if (!valid) + this.input.checked = this.state; + this.state = this.input.checked; + return [2 /*return*/]; + } + }); + }); }); + }; + return OutOfServiceMode; +}()); +exports.OutOfServiceMode = OutOfServiceMode; +//# sourceMappingURL=outOfServiceMode.js.map \ No newline at end of file diff --git a/frontend/views/control/dist/outOfServiceMode.js.map b/frontend/views/control/dist/outOfServiceMode.js.map new file mode 100644 index 0000000..7b96942 --- /dev/null +++ b/frontend/views/control/dist/outOfServiceMode.js.map @@ -0,0 +1 @@ +{"version":3,"file":"outOfServiceMode.js","sourceRoot":"","sources":["../ts/outOfServiceMode.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;IAQC,0BAAY,IAAU;QALtB,UAAK,GAAY,KAAK,CAAC;QACvB,UAAK,GAAqB,QAAQ,CAAC,aAAa,CAC/C,8BAA8B,CAC9B,CAAC;QAGD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAEO,4CAAiB,GAAzB;QAAA,iBAUC;QATA,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE;;;;4BACvB,qBAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAC5C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,oBAAoB,EACzD,6DAAqD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,QAAI,EACtG,gBAAgB,CAChB,EAAA;;wBAJK,KAAK,GAAG,SAIb;wBACD,IAAI,CAAC,KAAK;4BAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;wBAC5C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;;;;aAChC,CAAC,CAAC;IACJ,CAAC;IACF,uBAAC;AAAD,CAAC,AAzBD,IAyBC;AAzBY,4CAAgB"} \ No newline at end of file diff --git a/frontend/views/control/dist/timer.js b/frontend/views/control/dist/timer.js new file mode 100644 index 0000000..06f3cf5 --- /dev/null +++ b/frontend/views/control/dist/timer.js @@ -0,0 +1,31 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Timer = void 0; +var Timer = /** @class */ (function () { + function Timer(Main) { + this.startup = document.querySelector('.ntsh-timer-startup'); + this.shutdown = document.querySelector('.ntsh-timer-shutdown'); + this._Main = Main; + this.registerListeners(); + } + Timer.prototype.update = function (data) { + var start = "".concat(data.start.hour.toString().padStart(2, '0'), ":").concat(data.start.minute.toString().padStart(2, '0')); + var end = "".concat(data.end.hour.toString().padStart(2, '0'), ":").concat(data.end.minute.toString().padStart(2, '0')); + this.startup.value = start; + this.shutdown.value = end; + }; + Timer.prototype.registerListeners = function () { + var _this = this; + this.startup.onchange = function () { + var _a = _this.startup.value.split(':').map(Number), hour = _a[0], minute = _a[1]; + _this._Main.socket.emit('setTimerStart', { hour: hour, minute: minute }); + }; + this.shutdown.onchange = function () { + var _a = _this.shutdown.value.split(':').map(Number), hour = _a[0], minute = _a[1]; + _this._Main.socket.emit('setTimerEnd', { hour: hour, minute: minute }); + }; + }; + return Timer; +}()); +exports.Timer = Timer; +//# sourceMappingURL=timer.js.map \ No newline at end of file diff --git a/frontend/views/control/dist/timer.js.map b/frontend/views/control/dist/timer.js.map new file mode 100644 index 0000000..e7e9cad --- /dev/null +++ b/frontend/views/control/dist/timer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"timer.js","sourceRoot":"","sources":["../ts/timer.ts"],"names":[],"mappings":";;;AAEA;IAMC,eAAY,IAAU;QAHtB,YAAO,GAAqB,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;QAC1E,aAAQ,GAAqB,QAAQ,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;QAG3E,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1B,CAAC;IAED,sBAAM,GAAN,UAAO,IAGN;QACA,IAAM,KAAK,GAAG,UAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,cAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC;QAChH,IAAM,GAAG,GAAG,UAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,cAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAE,CAAC;QAE1G,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC;IAC3B,CAAC;IAED,iCAAiB,GAAjB;QAAA,iBASC;QARA,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG;YACjB,IAAA,KAAiB,KAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAzD,IAAI,QAAA,EAAE,MAAM,QAA6C,CAAC;YACjE,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG;YAClB,IAAA,KAAiB,KAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAA1D,IAAI,QAAA,EAAE,MAAM,QAA8C,CAAC;YAClE,KAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,CAAC,CAAC;QACzD,CAAC,CAAC;IACH,CAAC;IACF,YAAC;AAAD,CAAC,AAjCD,IAiCC;AAjCY,sBAAK"} \ No newline at end of file diff --git a/frontend/views/control/index.html b/frontend/views/control/index.html new file mode 100644 index 0000000..33fd390 --- /dev/null +++ b/frontend/views/control/index.html @@ -0,0 +1,284 @@ + + + + + + + NTSH Control + + + + + + + + + +

+
+
+
+
+
+ HOME +
+
+ ADVANCED +
+
+ + +
+
+ +
+
+

1. SYSTEM CHECKLIST

+

+ Check if all lights are green. +
+ If not? Reboot! +

+ +
+
+
+ +
+

CAMERA PC

+

Status...

+
+ +
+
+ START +
+
+ STOP +
+
+ REBOOT +
+
+
+ +
+
+ +
+

CAMERA PROCESS

+

Status...

+
+ +
+
+ START +
+
+ STOP +
+
+ REBOOT +
+
+
+ +
+
+ +
+

CAMERA/UNITY STREAM

+

Status...

+
+ +
+
+ START +
+
+ STOP +
+
+ REBOOT +
+
+
+ +
+
+ +
+

UNITY BUILD

+

Status...

+
+ +
+
+ START +
+
+ STOP +
+
+ REBOOT +
+
+
+ +
+
+ +
+

REPLAY FUNCTION

+

Status...

+
+ +
+
+ START +
+
+ STOP +
+
+ REBOOT +
+
+
+
+ +
+
+ FULL REBOOT +
+
+ +
+

If reboot doesn't help:

+ +
+ +
+

2. CALIBRATION CHECK

+

+ Look if the top plate of the installation precisely aligns with the pink rectangle. +
+ If not? Reposition the physical installation. +

+ +
+ +
+ +

Thank you for checking! :)

+
+ +
+

OUT OF SERVICE MODE

+

Display the 'out of service' message and mute the sound.

+
+

OUT OF SERVICE MODE

+ + +
+ +
+ +

SET TIMER

+

Please set timer in order to schedule the daily reboot.

+
+

Advise: fill in 30 minutes before opening and 30 minutes after closing of exhibition.

+ +
+
+

Start up

+ + +
+
+

Shut down

+ + +
+
+ +
+ +

COLOR SETTINGS

+

If lighting at the exhibition location changes during the day (for example in daylight)

+ +
+

AUTO LIGHTING

+ + +
+
+

FIXED LIGHTING SETTINGS

+
+
+

Brightness

+ + +
+
+

Gain

+ + +
+
+

White Balance

+ + +
+
+
+ +
+ +

SOUND SETTINGS

+

Adjust sound settings according to acoustics of location. (Take in account changes during + the + day and adjust to an average.)

+ +
+
+

Volume

+ + +
+
+

EQ low

+ + +
+
+

EQ mid

+ + +
+
+

EQ high

+ + +
+
+ +
+
+ RESET +
+
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/frontend/views/control/package-lock.json b/frontend/views/control/package-lock.json new file mode 100644 index 0000000..a510cb6 --- /dev/null +++ b/frontend/views/control/package-lock.json @@ -0,0 +1,919 @@ +{ + "name": "control", + "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": "2026.3.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.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "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.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.37.tgz", + "integrity": "sha512-8kzdPJ3FsNsVIurqBs7oodNnCEVbni9yUEkaHbgptDACOPW04jimGagZ51E6+lXUwJjgnBw+hyko/lkFWCldqw==", + "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.9", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.9.tgz", + "integrity": "sha512-7HP+rZGE2p886PKV9c9OJzLBI6BBJu1O7lJGYnPyG3fS4/duUCcngkNCjsLwIMV+WMqANe3tt4irrXHSIe68OQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "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==", + "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.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "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.4", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.4.tgz", + "integrity": "sha512-+kjUJnZGwzewFDw951CDWcwj35vMNf2fcj7xQWOctq1F2i1jkDdVvdFG9kM/BEChymCH36KgjnW0NsL58JYRxw==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.18.3", + "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": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "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.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "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.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "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.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dependencies": { + "is-core-module": "^2.16.1", + "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.80.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.80.0.tgz", + "integrity": "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ==", + "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.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.3.tgz", + "integrity": "sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.1", + "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.5", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.5.tgz", + "integrity": "sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.4.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.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", + "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.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "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.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "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/control/package.json b/frontend/views/control/package.json new file mode 100644 index 0000000..ef9226c --- /dev/null +++ b/frontend/views/control/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/control/rollup.config.js b/frontend/views/control/rollup.config.js new file mode 100644 index 0000000..1fa702c --- /dev/null +++ b/frontend/views/control/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/control/script.js b/frontend/views/control/script.js new file mode 100644 index 0000000..bd4872a --- /dev/null +++ b/frontend/views/control/script.js @@ -0,0 +1,14895 @@ +(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 = []; + + const split = (typeof namespaces === 'string' ? namespaces : '') + .trim() + .replace(/\s+/g, ',') + .split(',') + .filter(Boolean); + + for (const ns of split) { + if (ns[0] === '-') { + createDebug.skips.push(ns.slice(1)); + } else { + createDebug.names.push(ns); + } + } + } + + /** + * Checks if the given string matches a namespace template, honoring + * asterisks as wildcards. + * + * @param {String} search + * @param {String} template + * @return {Boolean} + */ + function matchesTemplate(search, template) { + let searchIndex = 0; + let templateIndex = 0; + let starIndex = -1; + let matchIndex = 0; + + while (searchIndex < search.length) { + if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) { + // Match character or proceed with wildcard + if (template[templateIndex] === '*') { + starIndex = templateIndex; + matchIndex = searchIndex; + templateIndex++; // Skip the '*' + } else { + searchIndex++; + templateIndex++; + } + } else if (starIndex !== -1) { // eslint-disable-line no-negated-condition + // Backtrack to the last '*' and try to match more characters + templateIndex = starIndex + 1; + matchIndex++; + searchIndex = matchIndex; + } else { + return false; // No match + } + } + + // Handle trailing '*' in template + while (templateIndex < template.length && template[templateIndex] === '*') { + templateIndex++; + } + + return templateIndex === template.length; + } + + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + function disable() { + const namespaces = [ + ...createDebug.names, + ...createDebug.skips.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) { + for (const skip of createDebug.skips) { + if (matchesTemplate(name, skip)) { + return false; + } + } + + for (const ns of createDebug.names) { + if (matchesTemplate(name, ns)) { + return true; + } + } + + return false; + } + + /** + * 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 + // eslint-disable-next-line no-return-assign + 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') || 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$5 = require$$5; + const util_js_1$4 = util; + const parseqs_js_1$1 = parseqs; + const debug_1$9 = __importDefault$8(browserExports); // debug() + const debug$9 = (0, debug_1$9.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$5.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$9("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$8 = __importDefault$7(browserExports); // debug() + const debug$8 = (0, debug_1$8.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$8("paused"); + this.readyState = "paused"; + onPause(); + }; + if (this._polling || !this.writable) { + let total = 0; + if (this._polling) { + debug$8("we are currently polling - waiting to pause"); + total++; + this.once("pollComplete", function () { + debug$8("pre-pause polling complete"); + --total || pause(); + }); + } + if (!this.writable) { + debug$8("we are currently writing - waiting to pause"); + total++; + this.once("drain", function () { + debug$8("pre-pause writing complete"); + --total || pause(); + }); + } + } + else { + pause(); + } + } + /** + * Starts polling cycle. + * + * @private + */ + _poll() { + debug$8("polling"); + this._polling = true; + this.doPoll(); + this.emitReserved("poll"); + } + /** + * Overloads onData to detect payloads. + * + * @protected + */ + onData(data) { + debug$8("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$8('ignoring poll - transport state "%s"', this.readyState); + } + } + } + /** + * For polling, send a close packet. + * + * @protected + */ + doClose() { + const close = () => { + debug$8("writing close packet"); + this.write([{ type: "close" }]); + }; + if ("open" === this.readyState) { + debug$8("transport open - closing"); + close(); + } + else { + // in case we're trying to close while + // handshaking is in progress (GH-164) + debug$8("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$4 = require$$5; + const util_js_1$2 = util; + const globals_node_js_1$3 = globals; + const has_cors_js_1 = hasCors; + const debug_1$7 = __importDefault$6(browserExports); // debug() + const debug$7 = (0, debug_1$7.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$7("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$4.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$7("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$7("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$6 = __importDefault$5(browserExports); // debug() + const debug$6 = (0, debug_1$6.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$6("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$5 = __importDefault$4(browserExports); // debug() + const debug$5 = (0, debug_1$5.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$5("transport closed gracefully"); + this.onClose(); + }) + .catch((err) => { + debug$5("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$5("session is closed"); + return; + } + debug$5("received chunk: %o", value); + this.onPacket(value); + read(); + }) + .catch((err) => { + debug$5("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$3 = require$$5; + const engine_io_parser_1 = cjs$1; + const globals_node_js_1 = globals; + const debug_1$4 = __importDefault$3(browserExports); // debug() + const debug$4 = (0, debug_1$4.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$4("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$3.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$4("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$4('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$4("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$4("setting transport %s", transport.name); + if (this.transport) { + debug$4("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$4("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$4('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$4('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$4("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$4("only send %d out of %d packets", i, this.writeBuffer.length); + return this.writeBuffer.slice(0, i); + } + payloadSize += 2; // separator + packet type + } + debug$4("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$4("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$4("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$4("socket error %j", err); + SocketWithoutUpgrade.priorWebsocketSuccess = false; + if (this.opts.tryAllTransports && + this.transports.length > 1 && + this.readyState === "opening") { + debug$4("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$4('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$4("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$4("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$4('probing transport "%s"', name); + let transport = this.createTransport(name); + let failed = false; + SocketWithoutUpgrade.priorWebsocketSuccess = false; + const onTransportOpen = () => { + if (failed) + return; + debug$4('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$4('probe transport "%s" pong', name); + this.upgrading = true; + this.emitReserved("upgrading", transport); + if (!transport) + return; + SocketWithoutUpgrade.priorWebsocketSuccess = + "websocket" === transport.name; + debug$4('pausing current transport "%s"', this.transport.name); + this.transport.pause(() => { + if (failed) + return; + if ("closed" === this.readyState) + return; + debug$4("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$4('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$4('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$4('"%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$3 = __importDefault$2(browserExports); // debug() + const debug$3 = (0, debug_1$3.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$3("protocol-less url %s", uri); + if ("undefined" !== typeof loc) { + uri = loc.protocol + "//" + uri; + } + else { + uri = "https://" + uri; + } + } + // parse + debug$3("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.isBinary = isBinary; + isBinary$1.hasBinary = hasBinary; + 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)); + } + 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; + } + + Object.defineProperty(binary, "__esModule", { value: true }); + binary.deconstructPacket = deconstructPacket; + binary.reconstructPacket = reconstructPacket; + const is_binary_js_1$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 }; + } + function _deconstructPacket(data, buffers) { + if (!data) + return data; + if ((0, is_binary_js_1$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; + } + 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; + } + + Object.defineProperty(cjs, "__esModule", { value: true }); + cjs.Decoder = cjs.Encoder = cjs.PacketType = cjs.protocol = void 0; + cjs.isPacketValid = isPacketValid; + const component_emitter_1$2 = require$$5; + const binary_js_1 = binary; + const is_binary_js_1 = isBinary$1; + const debug_1$2 = browserExports; // debug() + const debug$2 = (0, debug_1$2.default)("socket.io-parser"); // debug() + /** + * These strings must not be used as event names, as they have a special meaning. + */ + const RESERVED_EVENTS$1 = [ + "connect", // used on the client side + "connect_error", // used on the client side + "disconnect", // used on both sides + "disconnecting", // used on the server side + "newListener", // used by the Node.js EventEmitter + "removeListener", // used by the Node.js EventEmitter + ]; + /** + * Protocol version. + * + * @public + */ + cjs.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 || (cjs.PacketType = 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$2("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$2("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 + } + } + cjs.Encoder = Encoder; + /** + * A socket.io Decoder instance + * + * @return {Object} decoder + */ + class Decoder extends component_emitter_1$2.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$2("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$1.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; + } + } + } + cjs.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 = []; + } + } + function isNamespaceValid(nsp) { + return typeof nsp === "string"; + } + // see https://caniuse.com/mdn-javascript_builtins_number_isinteger + const isInteger = Number.isInteger || + function (value) { + return (typeof value === "number" && + isFinite(value) && + Math.floor(value) === value); + }; + function isAckIdValid(id) { + return id === undefined || isInteger(id); + } + // 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]"; + } + function isDataValid(type, payload) { + switch (type) { + case PacketType.CONNECT: + return payload === undefined || isObject(payload); + case PacketType.DISCONNECT: + return payload === undefined; + case PacketType.EVENT: + return (Array.isArray(payload) && + (typeof payload[0] === "number" || + (typeof payload[0] === "string" && + RESERVED_EVENTS$1.indexOf(payload[0]) === -1))); + case PacketType.ACK: + return Array.isArray(payload); + case PacketType.CONNECT_ERROR: + return typeof payload === "string" || isObject(payload); + default: + return false; + } + } + function isPacketValid(packet) { + return (isNamespaceValid(packet.nsp) && + isAckIdValid(packet.id) && + isDataValid(packet.type, packet.data)); + } + + 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]) { + return debug$1("packet [%d] already acknowledged", packet.id); + } + 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._drainQueue(true); + this.emitReserved("connect"); + } + /** + * 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 menu = {}; + + Object.defineProperty(menu, "__esModule", { value: true }); + menu.Menu = void 0; + var Menu = /** @class */ (function () { + function Menu() { + this.menuContainer = document.querySelector('.ntsh_menubar'); + this.tabContainer = document.querySelector('.ntsh_tabs'); + this.registerListeners(); + if (window.location.search.includes('advanced')) + this.selectTab('advanced'); + } + Menu.prototype.selectTab = function (tabId) { + this.menuContainer + .querySelectorAll('.ntsh_menubar-item') + .forEach(function (item) { + if (item.getAttribute('tabid') === tabId) { + item.classList.add('selected'); + } + else { + item.classList.remove('selected'); + } + }); + this.tabContainer.querySelectorAll('.ntsh_tab').forEach(function (tab) { + if (tab.getAttribute('tabid') === tabId) { + tab.classList.add('visible'); + } + else { + tab.classList.remove('visible'); + } + }); + }; + Menu.prototype.registerListeners = function () { + var _this = this; + this.menuContainer + .querySelectorAll('.ntsh_menubar-item') + .forEach(function (item) { + item.addEventListener('click', function () { + var itemId = item.getAttribute('tabid'); + _this.selectTab(itemId); + }); + }); + }; + return Menu; + }()); + menu.Menu = Menu; + + var checklist = {}; + + var Index = {}; + + var name = "morphux"; + var version = "2026.3.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 = void 0; + 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; + } + CE.ce = ce; + + 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 = void 0; + 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; + } + TextHighlighter.generateTextHighlights = generateTextHighlights; + + 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, key: key, 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, key: key, 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.getBindsOverview = function () { + return Object.values(this.binds).map(function (_a) { + var key = _a.key, settings = _a.settings; + var combo = []; + if (settings === null || settings === void 0 ? void 0 : settings.controlKey) + combo.push('Ctrl'); + if (settings === null || settings === void 0 ? void 0 : settings.shiftKey) + combo.push('Shift'); + if (settings === null || settings === void 0 ? void 0 : settings.altKey) + combo.push('Alt'); + combo.push(key.length < 3 ? key.toUpperCase() : key); + return [combo.join('+'), settings === null || settings === void 0 ? void 0 : settings.name]; + }); + }; + 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'); + if ((options === null || options === void 0 ? void 0 : options.width) != undefined) { + _this.container.style.minWidth = "".concat(options.width, "px"); + _this.container.style.width = "".concat(options.width, "px"); + } + 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.uniqueIdentifier != undefined) { + element.setAttribute('uid', item.uniqueIdentifier); + } + if (item.enabled == false) + element.classList.add('mux_contextmenu-item-disabled'); + var textContent = (0, CE_1$7.ce)('div', 'mux_contextmenu-item-content'); + element.appendChild(textContent); + 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"); + textContent.appendChild(itemContent); + if (item.children == undefined && item.shortcut != undefined) + textContent.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) { + textContent.appendChild((0, CE_1$7.ce)('span', [ + 'material-symbols-outlined', + 'mux_contextmenu-item-arrow', + ], null, 'keyboard_arrow_right')); + } + 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, + })); + 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.delay = Utils.blackPixel = Utils.isMobile = void 0; + function isMobile() { + return /Android|iPhone|iPad|iPod|Opera Mini|IEMobile|WPDesktop/i.test(navigator.userAgent); + } + Utils.isMobile = isMobile; + Utils.blackPixel = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='; + function delay(duration) { + return new Promise(function (resolve) { return setTimeout(resolve, duration); }); + } + Utils.delay = delay; + + 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; + 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(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 __()); + }; + })(); + 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_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 && + uniqueIdentifier != null) + 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); + }) + .map(function (item) { + if (item.type !== 'icon') + return item; + return __assign(__assign({}, item), { type: 'normal' }); + }), + right: this._rightItems + .filter(function (item) { + if (item.uniqueIdentifier == undefined) + return true; + return !_this.mobileIgnoreItems.includes(item.uniqueIdentifier); + }) + .map(function (item) { + if (item.type !== 'icon') + return item; + return __assign(__assign({}, item), { type: 'normal' }); + }), + }); + 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); + this.container.classList.add('mux_resizer-moving'); + this.callEvent('startResize'); + }; + 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); + this.callEvent('stopResize'); + }; + 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; + 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(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 = void 0; + 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(); }); + }); + } + Feature_Alert.FeatureAlert = FeatureAlert; + + 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 = void 0; + 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); }); + }); + } + Feature_Confirm.FeatureConfirm = FeatureConfirm; + + 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 = void 0; + 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(); + } + Feature_Loader.FeatureLoader = FeatureLoader; + 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 = void 0; + 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); + } + Feature_Notification.FeatureNotification = FeatureNotification; + + 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 = void 0; + 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(); + }); + } + Feature_Prompt.FeaturePrompt = FeaturePrompt; + + 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 = void 0; + function clone(object) { + if (typeof object !== 'object') + return object; + return JSON.parse(JSON.stringify(object !== null && object !== void 0 ? object : {})); + } + clone$1.clone = clone; + + (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; + } + + Object.defineProperty(checklist, "__esModule", { value: true }); + checklist.Checklist = void 0; + var morphux_1$1 = requireIndex(); + var Checklist = /** @class */ (function () { + function Checklist(Main) { + this.Rows = { + CAMERAPC: document.querySelector(".ntsh-checklist-row[status=\"CAMERAPC\"]"), + CAMERAPROCESS: document.querySelector(".ntsh-checklist-row[status=\"CAMERAPROCESS\"]"), + CAMERAUNITYSTREAM: document.querySelector(".ntsh-checklist-row[status=\"CAMERAUNITYSTREAM\"]"), + UNITYBUILD: document.querySelector(".ntsh-checklist-row[status=\"UNITYBUILD\"]"), + REPLAYFUNCTION: document.querySelector(".ntsh-checklist-row[status=\"REPLAYFUNCTION\"]"), + }; + this.FullReboot = document.querySelector('.ntsh-fullreboot-button'); + this._Main = Main; + this.registerListeners(); + } + Checklist.prototype.update = function (status) { + this.updateRow(this.Rows.CAMERAPC, status.CAMERAPC); + this.updateRow(this.Rows.CAMERAPROCESS, status.CAMERAPROCESS); + this.updateRow(this.Rows.CAMERAUNITYSTREAM, status.CAMERAUNITYSTREAM); + this.updateRow(this.Rows.UNITYBUILD, status.UNITYBUILD); + this.updateRow(this.Rows.REPLAYFUNCTION, status.REPLAYFUNCTION); + console.log('Updated checklist:', status); + }; + Checklist.prototype.updateRow = function (row, state) { + var _a, _b, _c; + var status = row.querySelector('.ntsh-checklist-row-status'); + var message = row.querySelector('p'); + var startButton = row.querySelector('.ntsh-checklist-row-button.start'); + var stopButton = row.querySelector('.ntsh-checklist-row-button.stop'); + var rebootButton = row.querySelector('.ntsh-checklist-row-button.reboot'); + status.classList.remove('RED', 'GREEN', 'YELLOW', 'GRAY'); + status.classList.add(state.state); + message.innerText = state.message; + startButton.style.display = ((_a = state.buttons) === null || _a === void 0 ? void 0 : _a.start) ? 'block' : 'none'; + stopButton.style.display = ((_b = state.buttons) === null || _b === void 0 ? void 0 : _b.stop) ? 'block' : 'none'; + rebootButton.style.display = ((_c = state.buttons) === null || _c === void 0 ? void 0 : _c.reboot) ? 'block' : 'none'; + }; + Checklist.prototype.registerListeners = function () { + var _this = this; + this.FullReboot.onclick = function () { + morphux_1$1.MorphFeature.Confirm({ + title: 'Full Reboot', + message: 'Are you sure you want to perform a full reboot?', + }, function (state) { + if (!state) + return; + _this._Main.socket.emit('status', 'fullreboot'); + }); + }; + var _loop_1 = function (key) { + var row = this_1.Rows[key]; + var startButton = row.querySelector('.ntsh-checklist-row-button.start'); + startButton.onclick = function () { + return morphux_1$1.MorphFeature.Confirm({ + title: 'Start', + message: 'Are you sure you want to start?', + }, function (state) { + if (!state) + return; + _this._Main.socket.emit('status', 'start', key); + }); + }; + var stopButton = row.querySelector('.ntsh-checklist-row-button.stop'); + stopButton.onclick = function () { + return morphux_1$1.MorphFeature.Confirm({ + title: 'Stop', + message: 'Are you sure you want to stop?', + }, function (state) { + if (!state) + return; + _this._Main.socket.emit('status', 'stop', key); + }); + }; + var rebootButton = row.querySelector('.ntsh-checklist-row-button.reboot'); + rebootButton.onclick = function () { + return morphux_1$1.MorphFeature.Confirm({ + title: 'Reboot', + message: 'Are you sure you want to reboot?', + }, function (state) { + if (!state) + return; + _this._Main.socket.emit('status', 'reboot', key); + }); + }; + }; + var this_1 = this; + for (var key in this.Rows) { + _loop_1(key); + } + }; + return Checklist; + }()); + checklist.Checklist = Checklist; + + var calibration = {}; + + Object.defineProperty(calibration, "__esModule", { value: true }); + calibration.Calibration = void 0; + var Calibration = /** @class */ (function () { + function Calibration(Main) { + this.visible = false; + this.container = document.querySelector('.ntsh-calibration'); + this.image = this.container.querySelector('img'); + this._Main = Main; + this.registerListeners(); + this.startClock(); + } + Calibration.prototype.startClock = function () { + var _this = this; + setInterval(function () { + if (_this.visible && _this.image) + _this.image.src = "/calibrationImage?t=".concat(Date.now()); + }, 1000); + }; + Calibration.prototype.registerListeners = function () { + var _this = this; + this.observer = new IntersectionObserver(function (entries) { + entries.forEach(function (entry) { + if (entry.isIntersecting) { + _this.visible = true; + console.log('Calibration visible'); + } + else { + _this.visible = false; + console.log('Calibration not visible'); + } + }); + }); + this.observer.observe(this.container); + }; + return Calibration; + }()); + calibration.Calibration = Calibration; + + var outOfServiceMode = {}; + + 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; + 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(outOfServiceMode, "__esModule", { value: true }); + outOfServiceMode.OutOfServiceMode = void 0; + var OutOfServiceMode = /** @class */ (function () { + function OutOfServiceMode(Main) { + this.state = false; + this.input = document.querySelector('.ntsh-outofservicemode-input'); + this._Main = Main; + this.registerListeners(); + } + OutOfServiceMode.prototype.registerListeners = function () { + var _this = this; + this.input.addEventListener('change', function () { return __awaiter$1(_this, void 0, void 0, function () { + var valid; + return __generator$1(this, function (_a) { + switch (_a.label) { + case 0: return [4 /*yield*/, this._Main.executeCommand(this.state ? 'disableOutOfService' : 'enableOutOfService', "Are you sure you want to set the installation to \"".concat(this.state ? 'Out of Service' : 'Operational', "\"?"), 'unityWebSocket')]; + case 1: + valid = _a.sent(); + if (!valid) + this.input.checked = this.state; + this.state = this.input.checked; + return [2 /*return*/]; + } + }); + }); }); + }; + return OutOfServiceMode; + }()); + outOfServiceMode.OutOfServiceMode = OutOfServiceMode; + + var timer = {}; + + Object.defineProperty(timer, "__esModule", { value: true }); + timer.Timer = void 0; + var Timer = /** @class */ (function () { + function Timer(Main) { + this.startup = document.querySelector('.ntsh-timer-startup'); + this.shutdown = document.querySelector('.ntsh-timer-shutdown'); + this._Main = Main; + this.registerListeners(); + } + Timer.prototype.update = function (data) { + var start = "".concat(data.start.hour.toString().padStart(2, '0'), ":").concat(data.start.minute.toString().padStart(2, '0')); + var end = "".concat(data.end.hour.toString().padStart(2, '0'), ":").concat(data.end.minute.toString().padStart(2, '0')); + this.startup.value = start; + this.shutdown.value = end; + }; + Timer.prototype.registerListeners = function () { + var _this = this; + this.startup.onchange = function () { + var _a = _this.startup.value.split(':').map(Number), hour = _a[0], minute = _a[1]; + _this._Main.socket.emit('setTimerStart', { hour: hour, minute: minute }); + }; + this.shutdown.onchange = function () { + var _a = _this.shutdown.value.split(':').map(Number), hour = _a[0], minute = _a[1]; + _this._Main.socket.emit('setTimerEnd', { hour: hour, minute: minute }); + }; + }; + return Timer; + }()); + timer.Timer = Timer; + + 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; + 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(main$1, "__esModule", { value: true }); + exports.Main = main$1.Main = void 0; + var socket_io_client_1 = cjsExports; + var menu_1 = menu; + var checklist_1 = checklist; + var calibration_1 = calibration; + var morphux_1 = requireIndex(); + var outOfServiceMode_1 = outOfServiceMode; + var timer_1 = timer; + var socket = (0, socket_io_client_1.io)('/'); + var Main = /** @class */ (function () { + function Main() { + this.Menu = new menu_1.Menu(); + this.CheckList = new checklist_1.Checklist(this); + this.Calibration = new calibration_1.Calibration(this); + this.OutOfServiceMode = new outOfServiceMode_1.OutOfServiceMode(this); + this.Timer = new timer_1.Timer(this); + this.socket = socket; + this.supportButton = document.querySelector('.ntsh-support img'); + this.supportNumber = ''; + this.registerListeners(); + } + Main.prototype.registerListeners = function () { + var _this = this; + this.supportButton.onclick = function () { return _this.showSupport(); }; + socket.on('status', function (data) { + _this.CheckList.update(data); + }); + socket.on('supportNumber', function (number) { + _this.supportNumber = number; + }); + socket.on('unityWebSocketState', function (state) { + var _a, _b, _c, _d; + _this.OutOfServiceMode.input.checked = + (_b = (_a = state === null || state === void 0 ? void 0 : state.parameters) === null || _a === void 0 ? void 0 : _a.outOfService) !== null && _b !== void 0 ? _b : false; + _this.OutOfServiceMode.state = + (_d = (_c = state === null || state === void 0 ? void 0 : state.parameters) === null || _c === void 0 ? void 0 : _c.outOfService) !== null && _d !== void 0 ? _d : false; + }); + socket.on('timer', function (data) { + _this.Timer.update(data); + }); + }; + Main.prototype.executeCommand = function (command, message, type) { + if (type === void 0) { type = 'unityRunner'; } + return __awaiter(this, void 0, void 0, function () { + var _this = this; + return __generator(this, function (_a) { + return [2 /*return*/, new Promise(function (resolve) { 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*/, resolve(false)]; + morphux_1.MorphFeature.Loader({ + active: true, + message: "Dispatching command...", + }); + socket.emit(type, 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: "Dispatched command", + }); + }); + resolve(true); + return [2 /*return*/]; + } + }); + }); })]; + }); + }); + }; + Main.prototype.showSupport = function () { + return __awaiter(this, void 0, void 0, function () { + var dialog, callAnchor; + return __generator(this, function (_a) { + dialog = new morphux_1.MorphComponent.Dialog({ + title: 'Contact Support', + width: 'medium', + height: 'auto', + okButtonVisible: false, + cancelButtonVisible: false, + }); + this.supportNumber.slice(); + callAnchor = (0, morphux_1.ce)('a', 'ntsh_callanchor', { href: "tel:".concat(this.supportNumber) }, "+".concat(this.supportNumber)); + dialog.content.appendChild(callAnchor); + setTimeout(function () { return callAnchor.click(); }, 100); + return [2 /*return*/]; + }); + }); + }; + return Main; + }()); + exports.Main = main$1.Main = Main; + new Main(); + + exports["default"] = main$1; + + Object.defineProperty(exports, '__esModule', { value: true }); + + return exports; + +})({}); +//# sourceMappingURL=script.js.map diff --git a/frontend/views/control/script.js.map b/frontend/views/control/script.js.map new file mode 100644 index 0000000..26e280d --- /dev/null +++ b/frontend/views/control/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","dist/menu.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/checklist.js","dist/calibration.js","dist/outOfServiceMode.js","dist/timer.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\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\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,\n\t\t\t...createDebug.skips.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\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\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* 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\t// eslint-disable-next-line no-return-assign\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') || 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.isBinary = isBinary;\nexports.hasBinary = hasBinary;\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}\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}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.deconstructPacket = deconstructPacket;\nexports.reconstructPacket = reconstructPacket;\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}\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}\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;\nexports.isPacketValid = isPacketValid;\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\", // used on the client side\n \"connect_error\", // used on the client side\n \"disconnect\", // used on both sides\n \"disconnecting\", // used on the server side\n \"newListener\", // used by the Node.js EventEmitter\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 = 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/**\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}\nfunction isNamespaceValid(nsp) {\n return typeof nsp === \"string\";\n}\n// see https://caniuse.com/mdn-javascript_builtins_number_isinteger\nconst isInteger = Number.isInteger ||\n function (value) {\n return (typeof value === \"number\" &&\n isFinite(value) &&\n Math.floor(value) === value);\n };\nfunction isAckIdValid(id) {\n return id === undefined || isInteger(id);\n}\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}\nfunction isDataValid(type, payload) {\n switch (type) {\n case PacketType.CONNECT:\n return payload === undefined || isObject(payload);\n case PacketType.DISCONNECT:\n return payload === undefined;\n case PacketType.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 return Array.isArray(payload);\n case PacketType.CONNECT_ERROR:\n return typeof payload === \"string\" || isObject(payload);\n default:\n return false;\n }\n}\nfunction isPacketValid(packet) {\n return (isNamespaceValid(packet.nsp) &&\n isAckIdValid(packet.id) &&\n isDataValid(packet.type, packet.data));\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 return debug(\"packet [%d] already acknowledged\", packet.id);\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._drainQueue(true);\n this.emitReserved(\"connect\");\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.Menu = void 0;\nvar Menu = /** @class */ (function () {\n function Menu() {\n this.menuContainer = document.querySelector('.ntsh_menubar');\n this.tabContainer = document.querySelector('.ntsh_tabs');\n this.registerListeners();\n if (window.location.search.includes('advanced'))\n this.selectTab('advanced');\n }\n Menu.prototype.selectTab = function (tabId) {\n this.menuContainer\n .querySelectorAll('.ntsh_menubar-item')\n .forEach(function (item) {\n if (item.getAttribute('tabid') === tabId) {\n item.classList.add('selected');\n }\n else {\n item.classList.remove('selected');\n }\n });\n this.tabContainer.querySelectorAll('.ntsh_tab').forEach(function (tab) {\n if (tab.getAttribute('tabid') === tabId) {\n tab.classList.add('visible');\n }\n else {\n tab.classList.remove('visible');\n }\n });\n };\n Menu.prototype.registerListeners = function () {\n var _this = this;\n this.menuContainer\n .querySelectorAll('.ntsh_menubar-item')\n .forEach(function (item) {\n item.addEventListener('click', function () {\n var itemId = item.getAttribute('tabid');\n _this.selectTab(itemId);\n });\n });\n };\n return Menu;\n}());\nexports.Menu = Menu;\n//# sourceMappingURL=menu.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ce = void 0;\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}\nexports.ce = ce;\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 = void 0;\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}\nexports.generateTextHighlights = generateTextHighlights;\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, key: key, 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, key: key, 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.getBindsOverview = function () {\n return Object.values(this.binds).map(function (_a) {\n var key = _a.key, settings = _a.settings;\n var combo = [];\n if (settings === null || settings === void 0 ? void 0 : settings.controlKey)\n combo.push('Ctrl');\n if (settings === null || settings === void 0 ? void 0 : settings.shiftKey)\n combo.push('Shift');\n if (settings === null || settings === void 0 ? void 0 : settings.altKey)\n combo.push('Alt');\n combo.push(key.length < 3 ? key.toUpperCase() : key);\n return [combo.join('+'), settings === null || settings === void 0 ? void 0 : settings.name];\n });\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 if ((options === null || options === void 0 ? void 0 : options.width) != undefined) {\n _this.container.style.minWidth = \"\".concat(options.width, \"px\");\n _this.container.style.width = \"\".concat(options.width, \"px\");\n }\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.uniqueIdentifier != undefined) {\n element.setAttribute('uid', item.uniqueIdentifier);\n }\n if (item.enabled == false)\n element.classList.add('mux_contextmenu-item-disabled');\n var textContent = (0, CE_1.ce)('div', 'mux_contextmenu-item-content');\n element.appendChild(textContent);\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 textContent.appendChild(itemContent);\n if (item.children == undefined && item.shortcut != undefined)\n textContent.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 textContent.appendChild((0, CE_1.ce)('span', [\n 'material-symbols-outlined',\n 'mux_contextmenu-item-arrow',\n ], null, 'keyboard_arrow_right'));\n }\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 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.delay = exports.blackPixel = exports.isMobile = void 0;\nfunction isMobile() {\n return /Android|iPhone|iPad|iPod|Opera Mini|IEMobile|WPDesktop/i.test(navigator.userAgent);\n}\nexports.isMobile = isMobile;\nexports.blackPixel = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';\nfunction delay(duration) {\n return new Promise(function (resolve) { return setTimeout(resolve, duration); });\n}\nexports.delay = delay;\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;\n return g = { next: verb(0), \"throw\": verb(1), \"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})();\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.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 uniqueIdentifier != null)\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\n .filter(function (item) {\n if (item.uniqueIdentifier == undefined)\n return true;\n return !_this.mobileIgnoreItems.includes(item.uniqueIdentifier);\n })\n .map(function (item) {\n if (item.type !== 'icon')\n return item;\n return __assign(__assign({}, item), { type: 'normal' });\n }),\n right: this._rightItems\n .filter(function (item) {\n if (item.uniqueIdentifier == undefined)\n return true;\n return !_this.mobileIgnoreItems.includes(item.uniqueIdentifier);\n })\n .map(function (item) {\n if (item.type !== 'icon')\n return item;\n return __assign(__assign({}, item), { type: 'normal' });\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 this.container.classList.add('mux_resizer-moving');\n this.callEvent('startResize');\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 this.callEvent('stopResize');\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;\n return g = { next: verb(0), \"throw\": verb(1), \"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 = void 0;\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}\nexports.FeatureAlert = FeatureAlert;\n//# sourceMappingURL=Feature.Alert.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FeatureConfirm = void 0;\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}\nexports.FeatureConfirm = FeatureConfirm;\n//# sourceMappingURL=Feature.Confirm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FeatureLoader = void 0;\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}\nexports.FeatureLoader = FeatureLoader;\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 = void 0;\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}\nexports.FeatureNotification = FeatureNotification;\n//# sourceMappingURL=Feature.Notification.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FeaturePrompt = void 0;\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}\nexports.FeaturePrompt = FeaturePrompt;\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 = void 0;\nfunction clone(object) {\n if (typeof object !== 'object')\n return object;\n return JSON.parse(JSON.stringify(object !== null && object !== void 0 ? object : {}));\n}\nexports.clone = clone;\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\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Checklist = void 0;\nvar morphux_1 = require(\"morphux\");\nvar Checklist = /** @class */ (function () {\n function Checklist(Main) {\n this.Rows = {\n CAMERAPC: document.querySelector(\".ntsh-checklist-row[status=\\\"CAMERAPC\\\"]\"),\n CAMERAPROCESS: document.querySelector(\".ntsh-checklist-row[status=\\\"CAMERAPROCESS\\\"]\"),\n CAMERAUNITYSTREAM: document.querySelector(\".ntsh-checklist-row[status=\\\"CAMERAUNITYSTREAM\\\"]\"),\n UNITYBUILD: document.querySelector(\".ntsh-checklist-row[status=\\\"UNITYBUILD\\\"]\"),\n REPLAYFUNCTION: document.querySelector(\".ntsh-checklist-row[status=\\\"REPLAYFUNCTION\\\"]\"),\n };\n this.FullReboot = document.querySelector('.ntsh-fullreboot-button');\n this._Main = Main;\n this.registerListeners();\n }\n Checklist.prototype.update = function (status) {\n this.updateRow(this.Rows.CAMERAPC, status.CAMERAPC);\n this.updateRow(this.Rows.CAMERAPROCESS, status.CAMERAPROCESS);\n this.updateRow(this.Rows.CAMERAUNITYSTREAM, status.CAMERAUNITYSTREAM);\n this.updateRow(this.Rows.UNITYBUILD, status.UNITYBUILD);\n this.updateRow(this.Rows.REPLAYFUNCTION, status.REPLAYFUNCTION);\n console.log('Updated checklist:', status);\n };\n Checklist.prototype.updateRow = function (row, state) {\n var _a, _b, _c;\n var status = row.querySelector('.ntsh-checklist-row-status');\n var message = row.querySelector('p');\n var startButton = row.querySelector('.ntsh-checklist-row-button.start');\n var stopButton = row.querySelector('.ntsh-checklist-row-button.stop');\n var rebootButton = row.querySelector('.ntsh-checklist-row-button.reboot');\n status.classList.remove('RED', 'GREEN', 'YELLOW', 'GRAY');\n status.classList.add(state.state);\n message.innerText = state.message;\n startButton.style.display = ((_a = state.buttons) === null || _a === void 0 ? void 0 : _a.start) ? 'block' : 'none';\n stopButton.style.display = ((_b = state.buttons) === null || _b === void 0 ? void 0 : _b.stop) ? 'block' : 'none';\n rebootButton.style.display = ((_c = state.buttons) === null || _c === void 0 ? void 0 : _c.reboot) ? 'block' : 'none';\n };\n Checklist.prototype.registerListeners = function () {\n var _this = this;\n this.FullReboot.onclick = function () {\n morphux_1.MorphFeature.Confirm({\n title: 'Full Reboot',\n message: 'Are you sure you want to perform a full reboot?',\n }, function (state) {\n if (!state)\n return;\n _this._Main.socket.emit('status', 'fullreboot');\n });\n };\n var _loop_1 = function (key) {\n var row = this_1.Rows[key];\n var startButton = row.querySelector('.ntsh-checklist-row-button.start');\n startButton.onclick = function () {\n return morphux_1.MorphFeature.Confirm({\n title: 'Start',\n message: 'Are you sure you want to start?',\n }, function (state) {\n if (!state)\n return;\n _this._Main.socket.emit('status', 'start', key);\n });\n };\n var stopButton = row.querySelector('.ntsh-checklist-row-button.stop');\n stopButton.onclick = function () {\n return morphux_1.MorphFeature.Confirm({\n title: 'Stop',\n message: 'Are you sure you want to stop?',\n }, function (state) {\n if (!state)\n return;\n _this._Main.socket.emit('status', 'stop', key);\n });\n };\n var rebootButton = row.querySelector('.ntsh-checklist-row-button.reboot');\n rebootButton.onclick = function () {\n return morphux_1.MorphFeature.Confirm({\n title: 'Reboot',\n message: 'Are you sure you want to reboot?',\n }, function (state) {\n if (!state)\n return;\n _this._Main.socket.emit('status', 'reboot', key);\n });\n };\n };\n var this_1 = this;\n for (var key in this.Rows) {\n _loop_1(key);\n }\n };\n return Checklist;\n}());\nexports.Checklist = Checklist;\n//# sourceMappingURL=checklist.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Calibration = void 0;\nvar Calibration = /** @class */ (function () {\n function Calibration(Main) {\n this.visible = false;\n this.container = document.querySelector('.ntsh-calibration');\n this.image = this.container.querySelector('img');\n this._Main = Main;\n this.registerListeners();\n this.startClock();\n }\n Calibration.prototype.startClock = function () {\n var _this = this;\n setInterval(function () {\n if (_this.visible && _this.image)\n _this.image.src = \"/calibrationImage?t=\".concat(Date.now());\n }, 1000);\n };\n Calibration.prototype.registerListeners = function () {\n var _this = this;\n this.observer = new IntersectionObserver(function (entries) {\n entries.forEach(function (entry) {\n if (entry.isIntersecting) {\n _this.visible = true;\n console.log('Calibration visible');\n }\n else {\n _this.visible = false;\n console.log('Calibration not visible');\n }\n });\n });\n this.observer.observe(this.container);\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;\n return g = { next: verb(0), \"throw\": verb(1), \"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.OutOfServiceMode = void 0;\nvar OutOfServiceMode = /** @class */ (function () {\n function OutOfServiceMode(Main) {\n this.state = false;\n this.input = document.querySelector('.ntsh-outofservicemode-input');\n this._Main = Main;\n this.registerListeners();\n }\n OutOfServiceMode.prototype.registerListeners = function () {\n var _this = this;\n this.input.addEventListener('change', function () { return __awaiter(_this, void 0, void 0, function () {\n var valid;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._Main.executeCommand(this.state ? 'disableOutOfService' : 'enableOutOfService', \"Are you sure you want to set the installation to \\\"\".concat(this.state ? 'Out of Service' : 'Operational', \"\\\"?\"), 'unityWebSocket')];\n case 1:\n valid = _a.sent();\n if (!valid)\n this.input.checked = this.state;\n this.state = this.input.checked;\n return [2 /*return*/];\n }\n });\n }); });\n };\n return OutOfServiceMode;\n}());\nexports.OutOfServiceMode = OutOfServiceMode;\n//# sourceMappingURL=outOfServiceMode.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Timer = void 0;\nvar Timer = /** @class */ (function () {\n function Timer(Main) {\n this.startup = document.querySelector('.ntsh-timer-startup');\n this.shutdown = document.querySelector('.ntsh-timer-shutdown');\n this._Main = Main;\n this.registerListeners();\n }\n Timer.prototype.update = function (data) {\n var start = \"\".concat(data.start.hour.toString().padStart(2, '0'), \":\").concat(data.start.minute.toString().padStart(2, '0'));\n var end = \"\".concat(data.end.hour.toString().padStart(2, '0'), \":\").concat(data.end.minute.toString().padStart(2, '0'));\n this.startup.value = start;\n this.shutdown.value = end;\n };\n Timer.prototype.registerListeners = function () {\n var _this = this;\n this.startup.onchange = function () {\n var _a = _this.startup.value.split(':').map(Number), hour = _a[0], minute = _a[1];\n _this._Main.socket.emit('setTimerStart', { hour: hour, minute: minute });\n };\n this.shutdown.onchange = function () {\n var _a = _this.shutdown.value.split(':').map(Number), hour = _a[0], minute = _a[1];\n _this._Main.socket.emit('setTimerEnd', { hour: hour, minute: minute });\n };\n };\n return Timer;\n}());\nexports.Timer = Timer;\n//# sourceMappingURL=timer.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;\n return g = { next: verb(0), \"throw\": verb(1), \"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.Main = void 0;\nvar socket_io_client_1 = require(\"socket.io-client\");\nvar menu_1 = require(\"./menu\");\nvar checklist_1 = require(\"./checklist\");\nvar calibration_1 = require(\"./calibration\");\nvar morphux_1 = require(\"morphux\");\nvar outOfServiceMode_1 = require(\"./outOfServiceMode\");\nvar timer_1 = require(\"./timer\");\nvar socket = (0, socket_io_client_1.io)('/');\nvar Main = /** @class */ (function () {\n function Main() {\n this.Menu = new menu_1.Menu();\n this.CheckList = new checklist_1.Checklist(this);\n this.Calibration = new calibration_1.Calibration(this);\n this.OutOfServiceMode = new outOfServiceMode_1.OutOfServiceMode(this);\n this.Timer = new timer_1.Timer(this);\n this.socket = socket;\n this.supportButton = document.querySelector('.ntsh-support img');\n this.supportNumber = '';\n this.registerListeners();\n }\n Main.prototype.registerListeners = function () {\n var _this = this;\n this.supportButton.onclick = function () { return _this.showSupport(); };\n socket.on('status', function (data) {\n _this.CheckList.update(data);\n });\n socket.on('supportNumber', function (number) {\n _this.supportNumber = number;\n });\n socket.on('unityWebSocketState', function (state) {\n var _a, _b, _c, _d;\n _this.OutOfServiceMode.input.checked =\n (_b = (_a = state === null || state === void 0 ? void 0 : state.parameters) === null || _a === void 0 ? void 0 : _a.outOfService) !== null && _b !== void 0 ? _b : false;\n _this.OutOfServiceMode.state =\n (_d = (_c = state === null || state === void 0 ? void 0 : state.parameters) === null || _c === void 0 ? void 0 : _c.outOfService) !== null && _d !== void 0 ? _d : false;\n });\n socket.on('timer', function (data) {\n _this.Timer.update(data);\n });\n };\n Main.prototype.executeCommand = function (command, message, type) {\n if (type === void 0) { type = 'unityRunner'; }\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (resolve) { 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*/, resolve(false)];\n morphux_1.MorphFeature.Loader({\n active: true,\n message: \"Dispatching command...\",\n });\n socket.emit(type, 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: \"Dispatched command\",\n });\n });\n resolve(true);\n return [2 /*return*/];\n }\n });\n }); })];\n });\n });\n };\n Main.prototype.showSupport = function () {\n return __awaiter(this, void 0, void 0, function () {\n var dialog, callAnchor;\n return __generator(this, function (_a) {\n dialog = new morphux_1.MorphComponent.Dialog({\n title: 'Contact Support',\n width: 'medium',\n height: 'auto',\n okButtonVisible: false,\n cancelButtonVisible: false,\n });\n this.supportNumber.slice();\n callAnchor = (0, morphux_1.ce)('a', 'ntsh_callanchor', { href: \"tel:\".concat(this.supportNumber) }, \"+\".concat(this.supportNumber));\n dialog.content.appendChild(callAnchor);\n setTimeout(function () { return callAnchor.click(); }, 100);\n return [2 /*return*/];\n });\n });\n };\n return Main;\n}());\nexports.Main = Main;\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","is_binary_js_1","RESERVED_EVENTS","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","morphux_1","__awaiter","__generator","main","Main_1"],"mappings":"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"} \ No newline at end of file diff --git a/frontend/views/control/scss/advanced.scss b/frontend/views/control/scss/advanced.scss new file mode 100644 index 0000000..fb0f501 --- /dev/null +++ b/frontend/views/control/scss/advanced.scss @@ -0,0 +1,183 @@ +.ntsh-outofservicemode { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 20px; + margin-top: 30px; +} + +.ntsh-timer { + width: 100%; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: flex-start; + gap: 10px; + margin-top: 30px; + + .ntsh-timer-row { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 20px; + + h4 { + width: 85px; + } + + input[type="time"] { + position: relative; + padding: 10px; + border: 2px solid #000; + font-weight: 500; + transition-duration: 0.2s; + cursor: pointer; + font-size: 20px; + + &::-webkit-calendar-picker-indicator { + background: transparent; + bottom: 0; + color: transparent; + cursor: pointer; + height: auto; + left: 0; + position: absolute; + right: 0; + top: 0; + width: auto; + } + } + + } +} + +.ntsh-autolighting { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 20px; + margin: 30px 0px; +} + + +.ntsh_lightingsettings-container { + width: 100%; + + &.disabled { + opacity: .3; + pointer-events: none; + } + + h3 { + margin-bottom: 10px; + } + + .ntsh_lightingsettings { + width: 100%; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: flex-start; + gap: 5px; + + .ntsh_lightingsettings-row { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 20px; + + h4 { + width: 120px; + } + + input { + position: relative; + padding: 10px; + border: 2px solid #000; + font-weight: 500; + transition-duration: 0.2s; + cursor: pointer; + font-size: 20px; + + &::-webkit-calendar-picker-indicator { + background: transparent; + bottom: 0; + color: transparent; + cursor: pointer; + height: auto; + left: 0; + position: absolute; + right: 0; + top: 0; + width: auto; + } + } + } + } +} + +.ntsh_soundsettings { + width: 100%; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: flex-start; + gap: 5px; + + &.disabled { + opacity: .3; + pointer-events: none; + } + + .ntsh_soundsettings-row { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 20px; + + h4 { + width: 120px; + } + + input { + padding: 10px; + border: 2px solid #000; + font-weight: 500; + transition-duration: 0.2s; + cursor: pointer; + font-size: 20px; + + &::-webkit-calendar-picker-indicator { + background: transparent; + bottom: 0; + color: transparent; + cursor: pointer; + height: auto; + left: 0; + position: absolute; + right: 0; + top: 0; + width: auto; + } + } + } +} + +.ntsh_soundsettings-resetcontainer { + width: 100%; + display: flex; + justify-content: flex-end; + margin-bottom: 30px; + + .ntsh_soundsettings-reset { + padding: 10px 20px; + border: 2px solid #000; + font-weight: 500; + transition-duration: .2s; + cursor: pointer; + + &:hover { + background: #d7ccc1; + } + } +} \ No newline at end of file diff --git a/frontend/views/control/scss/checklist.scss b/frontend/views/control/scss/checklist.scss new file mode 100644 index 0000000..c0d19b4 --- /dev/null +++ b/frontend/views/control/scss/checklist.scss @@ -0,0 +1,70 @@ +.ntsh-checklist { + width: 100%; + margin: 30px 0px; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: flex-start; + gap: 10px; + + + + .ntsh-checklist-row { + width: 100%; + display: flex; + justify-content: flex-start; + align-items: center; + gap: 10px; + + .ntsh-checklist-row-status { + width: 20px; + height: 20px; + margin: 0px 10px; + border-radius: 100%; + background: #00000024; + flex-shrink: 0; + + &.GREEN { + background: #1db100; + } + + &.RED { + background: #b10000; + } + + &.YELLOW { + background: #b1a100; + } + + &.GRAY { + background: #d5c7ba; + } + } + + .ntsh-checklist-row-text { + flex-grow: 1; + } + + .ntsh-checklist-row-buttons { + display: flex; + flex-direction: column; + gap: 3px; + + .ntsh-checklist-row-button { + align-self: stretch; + display: none; + padding: 5px 10px; + border: 2px solid #000; + font-weight: 500; + transition-duration: 0.2s; + cursor: pointer; + font-size: 12px; + text-align: center; + + &:hover { + background: #d7ccc1; + } + } + } + } +} \ No newline at end of file diff --git a/frontend/views/control/scss/home.scss b/frontend/views/control/scss/home.scss new file mode 100644 index 0000000..33dc50d --- /dev/null +++ b/frontend/views/control/scss/home.scss @@ -0,0 +1,60 @@ +.ntsh-fullreboot { + width: 100%; + display: flex; + justify-content: center; + + .ntsh-fullreboot-button { + padding: 20px; + border: 2px solid #000; + font-weight: 500; + transition-duration: 0.2s; + cursor: pointer; + background: #ff644e; + font-size: 25px; + font-weight: 800; + letter-spacing: -1px; + + &:hover { + background: #be4939; + } + } + +} + +.ntsh-support { + width: 100%; + display: flex; + justify-content: center; + align-items: center; + gap: 20px; + margin-top: 30px; + + img { + height: 50px; + cursor: pointer; + transition-duration: .2s; + + &:hover { + filter: brightness(.8); + } + } +} + +.ntsh-calibration { + width: 100%; + margin: 30px 0px; + + img { + width: 100%; + } +} + +.ntsh_callanchor { + width: 100%; + display: block; + background: #454545; + text-align: center; + padding: 10px 00px; + font-size: 40px; + color: #fff; +} \ No newline at end of file diff --git a/frontend/views/control/scss/index.scss b/frontend/views/control/scss/index.scss new file mode 100644 index 0000000..460dd70 --- /dev/null +++ b/frontend/views/control/scss/index.scss @@ -0,0 +1,75 @@ +@use '../node_modules/morphux/style.css'; +@use './topbar.scss'; +@use './checklist.scss'; +@use './text.scss'; +@use './switch.scss'; +@use './home.scss'; +@use './advanced.scss'; + +@font-face { + font-family: Roboto; + src: url(/font/Roboto-VariableFont_wdth,wght.ttf) format('truetype'); +} + +@font-face { + font-family: ScothBrace; + src: url(/font/ScothBrace.ttf) format('truetype'); +} + +@font-face { + font-family: RidleyGrotesk; + src: url(/font/RidleyGrotesk-Bold.otf) format('opentype'); + font-weight: bold; +} + +@font-face { + font-family: RidleyGrotesk; + src: url(/font/RidleyGrotesk-Regular.otf) format('opentype'); + font-weight: normal; +} + +body { + position: absolute; + inset: 0px; + margin: 0px; + padding: 0px; + color: #000; + font-family: RidleyGrotesk, sans-serif; + background: #E1EAF6; +} + +.ntsh { + position: absolute; + inset: 0px; + overflow-y: scroll; + + .ntsh-wrapper { + width: 100%; + min-height: 100%; + background: linear-gradient(0deg, #E1EAF6, #F9E7D6); + + .ntsh-inlay { + width: min(800px, calc(100% - 40px)); + margin: 0 auto; + } + } +} + +.ntsh_tabs { + width: 100%; + + .ntsh_tab { + width: 100%; + display: none; + + &.visible { + display: block; + } + } +} + +.ntsh-separator { + width: 100%; + border-bottom: 10px dotted #000; + margin: 30px 0px; +} \ No newline at end of file diff --git a/frontend/views/control/scss/switch.scss b/frontend/views/control/scss/switch.scss new file mode 100644 index 0000000..a3bbf6d --- /dev/null +++ b/frontend/views/control/scss/switch.scss @@ -0,0 +1,61 @@ +.switch { + position: relative; + display: inline-block; + width: 60px; + height: 34px; +} + +/* Hide default HTML checkbox */ +.switch input { + opacity: 0; + width: 0; + height: 0; +} + +/* The slider */ +.slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + -webkit-transition: .4s; + transition: .4s; +} + +.slider:before { + position: absolute; + content: ""; + height: 26px; + width: 26px; + left: 4px; + bottom: 4px; + background-color: white; + -webkit-transition: .4s; + transition: .4s; +} + +input:checked+.slider { + background-color: #2bc038; +} + +input:focus+.slider { + box-shadow: 0 0 1px #2bc038; +} + +input:checked+.slider:before { + -webkit-transform: translateX(26px); + -ms-transform: translateX(26px); + transform: translateX(26px); +} + +/* Rounded sliders */ +.slider.round { + border-radius: 34px; +} + +.slider.round:before { + border-radius: 50%; +} \ No newline at end of file diff --git a/frontend/views/control/scss/text.scss b/frontend/views/control/scss/text.scss new file mode 100644 index 0000000..ec7f871 --- /dev/null +++ b/frontend/views/control/scss/text.scss @@ -0,0 +1,27 @@ +h1 { + font-size: 45px; + margin: 0px; + font-weight: 600; +} + + +h2 { + font-size: 24px; + margin: 0px 0px 5px 0px; +} + +h3 { + font-size: 22px; + margin: 0px; + font-weight: 400; +} + +h4 { + font-size: 14px; + margin: 0px; +} + +p { + font-size: 14px; + margin: 0px; +} \ No newline at end of file diff --git a/frontend/views/control/scss/topbar.scss b/frontend/views/control/scss/topbar.scss new file mode 100644 index 0000000..658d30d --- /dev/null +++ b/frontend/views/control/scss/topbar.scss @@ -0,0 +1,30 @@ +.ntsh-topbar { + .ntsh_menubar { + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 30px; + + .ntsh_menubar-item { + padding: 10px 20px; + border: 2px solid #000; + font-weight: 500; + transition-duration: .2s; + cursor: pointer; + + &:hover { + background: #d7ccc1; + } + + &.selected { + pointer-events: none; + opacity: .3; + } + } + } + + img { + width: 100%; + } +} \ No newline at end of file diff --git a/frontend/views/control/style.css b/frontend/views/control/style.css new file mode 100644 index 0000000..e97074b --- /dev/null +++ b/frontend/views/control/style.css @@ -0,0 +1,2831 @@ +@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; + min-width: 120px; + 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: #919191; +} + +.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: -2px; + height: 16px; + border-radius: var(--mux-rounding); +} + +.mux_contextmenu .mux_contextmenu-item .mux_contextmenu-item-materialicon { + margin-right: -2px; + color: var(--mux-contextmenu-iconcolor); + font-size: 16px; +} + +.mux_contextmenu .mux_contextmenu-item .mux_contextmenu-item-content { + flex-grow: 1; + display: flex; + justify-content: flex-start; + align-items: center; + gap: var(--mux-edge-offset-tiny); + padding-right: calc(var(--mux-edge-offset) * 2); +} + +.mux_contextmenu .mux_contextmenu-item .mux_contextmenu-item-content .mux_contextmenu-item-arrow { + font-size: 16px; + margin-left: calc(var(--mux-edge-offset-tiny) * -1); + color: #c0c0c0; +} + +.mux_contextmenu .mux_contextmenu-item .mux_contextmenu-item-content .mux_contextmenu-shortcut { + 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-topbar .ntsh_menubar { + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 30px; +} +.ntsh-topbar .ntsh_menubar .ntsh_menubar-item { + padding: 10px 20px; + border: 2px solid #000; + font-weight: 500; + transition-duration: 0.2s; + cursor: pointer; +} +.ntsh-topbar .ntsh_menubar .ntsh_menubar-item:hover { + background: #d7ccc1; +} +.ntsh-topbar .ntsh_menubar .ntsh_menubar-item.selected { + pointer-events: none; + opacity: 0.3; +} +.ntsh-topbar img { + width: 100%; +} + +.ntsh-checklist { + width: 100%; + margin: 30px 0px; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: flex-start; + gap: 10px; +} +.ntsh-checklist .ntsh-checklist-row { + width: 100%; + display: flex; + justify-content: flex-start; + align-items: center; + gap: 10px; +} +.ntsh-checklist .ntsh-checklist-row .ntsh-checklist-row-status { + width: 20px; + height: 20px; + margin: 0px 10px; + border-radius: 100%; + background: rgba(0, 0, 0, 0.1411764706); + flex-shrink: 0; +} +.ntsh-checklist .ntsh-checklist-row .ntsh-checklist-row-status.GREEN { + background: #1db100; +} +.ntsh-checklist .ntsh-checklist-row .ntsh-checklist-row-status.RED { + background: #b10000; +} +.ntsh-checklist .ntsh-checklist-row .ntsh-checklist-row-status.YELLOW { + background: #b1a100; +} +.ntsh-checklist .ntsh-checklist-row .ntsh-checklist-row-status.GRAY { + background: #d5c7ba; +} +.ntsh-checklist .ntsh-checklist-row .ntsh-checklist-row-text { + flex-grow: 1; +} +.ntsh-checklist .ntsh-checklist-row .ntsh-checklist-row-buttons { + display: flex; + flex-direction: column; + gap: 3px; +} +.ntsh-checklist .ntsh-checklist-row .ntsh-checklist-row-buttons .ntsh-checklist-row-button { + align-self: stretch; + display: none; + padding: 5px 10px; + border: 2px solid #000; + font-weight: 500; + transition-duration: 0.2s; + cursor: pointer; + font-size: 12px; + text-align: center; +} +.ntsh-checklist .ntsh-checklist-row .ntsh-checklist-row-buttons .ntsh-checklist-row-button:hover { + background: #d7ccc1; +} + +h1 { + font-size: 45px; + margin: 0px; + font-weight: 600; +} + +h2 { + font-size: 24px; + margin: 0px 0px 5px 0px; +} + +h3 { + font-size: 22px; + margin: 0px; + font-weight: 400; +} + +h4 { + font-size: 14px; + margin: 0px; +} + +p { + font-size: 14px; + margin: 0px; +} + +.switch { + position: relative; + display: inline-block; + width: 60px; + height: 34px; +} + +/* Hide default HTML checkbox */ +.switch input { + opacity: 0; + width: 0; + height: 0; +} + +/* The slider */ +.slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + -webkit-transition: 0.4s; + transition: 0.4s; +} + +.slider:before { + position: absolute; + content: ""; + height: 26px; + width: 26px; + left: 4px; + bottom: 4px; + background-color: white; + -webkit-transition: 0.4s; + transition: 0.4s; +} + +input:checked + .slider { + background-color: #2bc038; +} + +input:focus + .slider { + box-shadow: 0 0 1px #2bc038; +} + +input:checked + .slider:before { + -webkit-transform: translateX(26px); + -ms-transform: translateX(26px); + transform: translateX(26px); +} + +/* Rounded sliders */ +.slider.round { + border-radius: 34px; +} + +.slider.round:before { + border-radius: 50%; +} + +.ntsh-fullreboot { + width: 100%; + display: flex; + justify-content: center; +} +.ntsh-fullreboot .ntsh-fullreboot-button { + padding: 20px; + border: 2px solid #000; + font-weight: 500; + transition-duration: 0.2s; + cursor: pointer; + background: #ff644e; + font-size: 25px; + font-weight: 800; + letter-spacing: -1px; +} +.ntsh-fullreboot .ntsh-fullreboot-button:hover { + background: #be4939; +} + +.ntsh-support { + width: 100%; + display: flex; + justify-content: center; + align-items: center; + gap: 20px; + margin-top: 30px; +} +.ntsh-support img { + height: 50px; + cursor: pointer; + transition-duration: 0.2s; +} +.ntsh-support img:hover { + filter: brightness(0.8); +} + +.ntsh-calibration { + width: 100%; + margin: 30px 0px; +} +.ntsh-calibration img { + width: 100%; +} + +.ntsh_callanchor { + width: 100%; + display: block; + background: #454545; + text-align: center; + padding: 10px 0px; + font-size: 40px; + color: #fff; +} + +.ntsh-outofservicemode { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 20px; + margin-top: 30px; +} + +.ntsh-timer { + width: 100%; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: flex-start; + gap: 10px; + margin-top: 30px; +} +.ntsh-timer .ntsh-timer-row { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 20px; +} +.ntsh-timer .ntsh-timer-row h4 { + width: 85px; +} +.ntsh-timer .ntsh-timer-row input[type=time] { + position: relative; + padding: 10px; + border: 2px solid #000; + font-weight: 500; + transition-duration: 0.2s; + cursor: pointer; + font-size: 20px; +} +.ntsh-timer .ntsh-timer-row input[type=time]::-webkit-calendar-picker-indicator { + background: transparent; + bottom: 0; + color: transparent; + cursor: pointer; + height: auto; + left: 0; + position: absolute; + right: 0; + top: 0; + width: auto; +} + +.ntsh-autolighting { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 20px; + margin: 30px 0px; +} + +.ntsh_lightingsettings-container { + width: 100%; +} +.ntsh_lightingsettings-container.disabled { + opacity: 0.3; + pointer-events: none; +} +.ntsh_lightingsettings-container h3 { + margin-bottom: 10px; +} +.ntsh_lightingsettings-container .ntsh_lightingsettings { + width: 100%; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: flex-start; + gap: 5px; +} +.ntsh_lightingsettings-container .ntsh_lightingsettings .ntsh_lightingsettings-row { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 20px; +} +.ntsh_lightingsettings-container .ntsh_lightingsettings .ntsh_lightingsettings-row h4 { + width: 120px; +} +.ntsh_lightingsettings-container .ntsh_lightingsettings .ntsh_lightingsettings-row input { + position: relative; + padding: 10px; + border: 2px solid #000; + font-weight: 500; + transition-duration: 0.2s; + cursor: pointer; + font-size: 20px; +} +.ntsh_lightingsettings-container .ntsh_lightingsettings .ntsh_lightingsettings-row input::-webkit-calendar-picker-indicator { + background: transparent; + bottom: 0; + color: transparent; + cursor: pointer; + height: auto; + left: 0; + position: absolute; + right: 0; + top: 0; + width: auto; +} + +.ntsh_soundsettings { + width: 100%; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: flex-start; + gap: 5px; +} +.ntsh_soundsettings.disabled { + opacity: 0.3; + pointer-events: none; +} +.ntsh_soundsettings .ntsh_soundsettings-row { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 20px; +} +.ntsh_soundsettings .ntsh_soundsettings-row h4 { + width: 120px; +} +.ntsh_soundsettings .ntsh_soundsettings-row input { + padding: 10px; + border: 2px solid #000; + font-weight: 500; + transition-duration: 0.2s; + cursor: pointer; + font-size: 20px; +} +.ntsh_soundsettings .ntsh_soundsettings-row input::-webkit-calendar-picker-indicator { + background: transparent; + bottom: 0; + color: transparent; + cursor: pointer; + height: auto; + left: 0; + position: absolute; + right: 0; + top: 0; + width: auto; +} + +.ntsh_soundsettings-resetcontainer { + width: 100%; + display: flex; + justify-content: flex-end; + margin-bottom: 30px; +} +.ntsh_soundsettings-resetcontainer .ntsh_soundsettings-reset { + padding: 10px 20px; + border: 2px solid #000; + font-weight: 500; + transition-duration: 0.2s; + cursor: pointer; +} +.ntsh_soundsettings-resetcontainer .ntsh_soundsettings-reset:hover { + background: #d7ccc1; +} + +@font-face { + font-family: Roboto; + src: url(/font/Roboto-VariableFont_wdth,wght.ttf) format("truetype"); +} +@font-face { + font-family: ScothBrace; + src: url(/font/ScothBrace.ttf) format("truetype"); +} +@font-face { + font-family: RidleyGrotesk; + src: url(/font/RidleyGrotesk-Bold.otf) format("opentype"); + font-weight: bold; +} +@font-face { + font-family: RidleyGrotesk; + src: url(/font/RidleyGrotesk-Regular.otf) format("opentype"); + font-weight: normal; +} +body { + position: absolute; + inset: 0px; + margin: 0px; + padding: 0px; + color: #000; + font-family: RidleyGrotesk, sans-serif; + background: #E1EAF6; +} + +.ntsh { + position: absolute; + inset: 0px; + overflow-y: scroll; +} +.ntsh .ntsh-wrapper { + width: 100%; + min-height: 100%; + background: linear-gradient(0deg, #E1EAF6, #F9E7D6); +} +.ntsh .ntsh-wrapper .ntsh-inlay { + width: min(800px, 100% - 40px); + margin: 0 auto; +} + +.ntsh_tabs { + width: 100%; +} +.ntsh_tabs .ntsh_tab { + width: 100%; + display: none; +} +.ntsh_tabs .ntsh_tab.visible { + display: block; +} + +.ntsh-separator { + width: 100%; + border-bottom: 10px dotted #000; + margin: 30px 0px; +} + +/*# sourceMappingURL=style.css.map */ diff --git a/frontend/views/control/style.css.map b/frontend/views/control/style.css.map new file mode 100644 index 0000000..d9473f0 --- /dev/null +++ b/frontend/views/control/style.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["node_modules/morphux/style.css","scss/topbar.scss","scss/checklist.scss","scss/text.scss","scss/switch.scss","scss/home.scss","scss/advanced.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;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;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;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;;;;ACh+DE;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;AAKZ;EACI;;;AC3BR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAIR;EACI;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;;AChEpB;EACI;EACA;EACA;;;AAIJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;;ACzBJ;EACI;EACA;EACA;EACA;;;AAGJ;AACA;EACI;EACA;EACA;;;AAGJ;AACA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;;;AAGJ;AACA;EACI;;;AAGJ;EACI;;;AC3DJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;;AAMZ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAEA;EACI;;;AAKZ;EACI;EACA;;AAEA;EACI;;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AC1DJ;EACI;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAOhB;EACI;EACA;EACA;EACA;EACA;;;AAIJ;EACI;;AAEA;EACI;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAOpB;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMhB;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;;AC3KZ;EACI;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAEA;EACI;EACA;;;AAKZ;EACI;;AAEA;EACI;EACA;;AAEA;EACI;;;AAKZ;EACI;EACA;EACA","file":"style.css"} \ No newline at end of file diff --git a/frontend/views/control/ts/calibration.ts b/frontend/views/control/ts/calibration.ts new file mode 100644 index 0000000..f7e3aae --- /dev/null +++ b/frontend/views/control/ts/calibration.ts @@ -0,0 +1,41 @@ +import { Main } from './main'; + +export class Calibration { + private _Main: Main; + + observer: IntersectionObserver; + visible: boolean = false; + + container: HTMLDivElement = document.querySelector('.ntsh-calibration'); + image: HTMLImageElement = this.container.querySelector('img'); + + constructor(Main: Main) { + this._Main = Main; + + this.registerListeners(); + + this.startClock(); + } + + private startClock() { + setInterval(() => { + if (this.visible && this.image) + this.image.src = `/calibrationImage?t=${Date.now()}`; + }, 1000); + } + + private registerListeners() { + this.observer = new IntersectionObserver((entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + this.visible = true; + console.log('Calibration visible'); + } else { + this.visible = false; + console.log('Calibration not visible'); + } + }); + }); + this.observer.observe(this.container); + } +} diff --git a/frontend/views/control/ts/checklist.ts b/frontend/views/control/ts/checklist.ts new file mode 100644 index 0000000..746f084 --- /dev/null +++ b/frontend/views/control/ts/checklist.ts @@ -0,0 +1,146 @@ +import { Main } from './main'; +import { MorphFeature } from 'morphux'; + +export class Checklist { + private _Main: Main; + + Rows = { + CAMERAPC: document.querySelector( + `.ntsh-checklist-row[status="CAMERAPC"]`, + ) as HTMLDivElement, + CAMERAPROCESS: document.querySelector( + `.ntsh-checklist-row[status="CAMERAPROCESS"]`, + ) as HTMLDivElement, + CAMERAUNITYSTREAM: document.querySelector( + `.ntsh-checklist-row[status="CAMERAUNITYSTREAM"]`, + ) as HTMLDivElement, + UNITYBUILD: document.querySelector( + `.ntsh-checklist-row[status="UNITYBUILD"]`, + ) as HTMLDivElement, + REPLAYFUNCTION: document.querySelector( + `.ntsh-checklist-row[status="REPLAYFUNCTION"]`, + ) as HTMLDivElement, + }; + FullReboot: HTMLDivElement = document.querySelector( + '.ntsh-fullreboot-button', + ); + + constructor(Main: Main) { + this._Main = Main; + + this.registerListeners(); + } + + update(status: Status) { + this.updateRow(this.Rows.CAMERAPC, status.CAMERAPC); + this.updateRow(this.Rows.CAMERAPROCESS, status.CAMERAPROCESS); + this.updateRow(this.Rows.CAMERAUNITYSTREAM, status.CAMERAUNITYSTREAM); + this.updateRow(this.Rows.UNITYBUILD, status.UNITYBUILD); + this.updateRow(this.Rows.REPLAYFUNCTION, status.REPLAYFUNCTION); + console.log('Updated checklist:', status); + } + + updateRow(row: HTMLDivElement, state: StateEntry) { + const status: HTMLDivElement = row.querySelector( + '.ntsh-checklist-row-status', + ); + const message: HTMLDivElement = row.querySelector('p'); + + const startButton: HTMLDivElement = row.querySelector( + '.ntsh-checklist-row-button.start', + ); + const stopButton: HTMLDivElement = row.querySelector( + '.ntsh-checklist-row-button.stop', + ); + const rebootButton: HTMLDivElement = row.querySelector( + '.ntsh-checklist-row-button.reboot', + ); + + status.classList.remove('RED', 'GREEN', 'YELLOW', 'GRAY'); + status.classList.add(state.state); + + message.innerText = state.message; + + startButton.style.display = state.buttons?.start ? 'block' : 'none'; + stopButton.style.display = state.buttons?.stop ? 'block' : 'none'; + rebootButton.style.display = state.buttons?.reboot ? 'block' : 'none'; + } + + private registerListeners() { + this.FullReboot.onclick = () => { + MorphFeature.Confirm( + { + title: 'Full Reboot', + message: 'Are you sure you want to perform a full reboot?', + }, + (state) => { + if (!state) return; + this._Main.socket.emit('status', 'fullreboot'); + }, + ); + }; + + for (const key in this.Rows) { + const row = this.Rows[key]; + + const startButton: HTMLDivElement = row.querySelector( + '.ntsh-checklist-row-button.start', + ); + startButton.onclick = () => + MorphFeature.Confirm( + { + title: 'Start', + message: 'Are you sure you want to start?', + }, + (state) => { + if (!state) return; + this._Main.socket.emit('status', 'start', key); + }, + ); + + const stopButton: HTMLDivElement = row.querySelector( + '.ntsh-checklist-row-button.stop', + ); + stopButton.onclick = () => + MorphFeature.Confirm( + { + title: 'Stop', + message: 'Are you sure you want to stop?', + }, + (state) => { + if (!state) return; + this._Main.socket.emit('status', 'stop', key); + }, + ); + + const rebootButton: HTMLDivElement = row.querySelector( + '.ntsh-checklist-row-button.reboot', + ); + rebootButton.onclick = () => + MorphFeature.Confirm( + { + title: 'Reboot', + message: 'Are you sure you want to reboot?', + }, + (state) => { + if (!state) return; + this._Main.socket.emit('status', 'reboot', key); + }, + ); + } + } +} + +interface Status { + CAMERAPC: StateEntry; + CAMERAPROCESS: StateEntry; + CAMERAUNITYSTREAM: StateEntry; + UNITYBUILD: StateEntry; + REPLAYFUNCTION: StateEntry; +} + +interface StateEntry { + state: 'GREEN' | 'RED' | 'YELLOW' | 'GRAY'; + message: string; + buttons?: { reboot?: boolean; start?: boolean; stop?: boolean }; +} diff --git a/frontend/views/control/ts/main.ts b/frontend/views/control/ts/main.ts new file mode 100644 index 0000000..3c687d0 --- /dev/null +++ b/frontend/views/control/ts/main.ts @@ -0,0 +1,180 @@ +import { io } from 'socket.io-client'; +import { Menu } from './menu'; +import { Checklist } from './checklist'; +import { Calibration } from './calibration'; +import { ce, MorphComponent, MorphFeature } from 'morphux'; +import { OutOfServiceMode } from './outOfServiceMode'; +import { Timer } from './timer'; + +const socket = io('/'); + +export class Main { + Menu = new Menu(); + CheckList = new Checklist(this); + Calibration = new Calibration(this); + OutOfServiceMode = new OutOfServiceMode(this); + Timer = new Timer(this); + + socket = socket; + + supportButton: HTMLDivElement = document.querySelector('.ntsh-support img'); + supportNumber: string = ''; + + constructor() { + this.registerListeners(); + } + + private registerListeners() { + this.supportButton.onclick = () => this.showSupport(); + + socket.on('status', (data) => { + this.CheckList.update(data); + }); + + socket.on('supportNumber', (number: string) => { + this.supportNumber = number; + }); + + socket.on('unityWebSocketState', (state: UnityWebSocketStatus) => { + this.OutOfServiceMode.input.checked = + state?.parameters?.outOfService ?? false; + this.OutOfServiceMode.state = + state?.parameters?.outOfService ?? false; + }); + + socket.on('timer', (data) => { + this.Timer.update(data); + }); + } + + async executeCommand( + command: string, + message: string, + type: 'unityRunner' | 'unityWebSocket' = 'unityRunner', + ): Promise { + return new Promise(async (resolve) => { + const confirmed = await MorphFeature.Confirm({ + title: 'Are you sure?', + message, + }); + if (!confirmed) return resolve(false); + + MorphFeature.Loader({ + active: true, + message: `Dispatching command...`, + }); + socket.emit( + type, + 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: `Dispatched command`, + }); + }, + ); + resolve(true); + }); + } + + async showSupport() { + const dialog = new MorphComponent.Dialog({ + title: 'Contact Support', + width: 'medium', + height: 'auto', + okButtonVisible: false, + cancelButtonVisible: false, + }); + + this.supportNumber.slice(); + const callAnchor = ce( + 'a', + 'ntsh_callanchor', + { href: `tel:${this.supportNumber}` }, + `+${this.supportNumber}`, + ); + dialog.content.appendChild(callAnchor); + + setTimeout(() => callAnchor.click(), 100); + } +} + +const _Main = new Main(); + +export type ServiceState = + | 'CONNECTING' + | 'CONNECTED' + | 'DISCONNECTED' + | 'FAILED'; + +interface UnityWebSocketStatus { + state: ServiceState; + message?: string; + error?: string; + + parameters: UnityParameters; +} + +interface UnityParameters { + timelineWatching: boolean; + timelineStanding: boolean; + timelineProgress: number; + zedPath: string; + zedReady: boolean; + zedFPS: string; + outOfService: boolean; + sliders: UnityParameterSlider[]; + advancedSliders: UnityParameterSlider[]; + sensors: UnitySocketMessageHeartbeat['heartbeat']['dataSensors']; +} + +type UnityHeartbeatSlider = + UnitySocketMessageHeartbeat['heartbeat']['dataSliders'][number]; +interface UnityParameterSlider extends UnityHeartbeatSlider { + visualMultiplier: number; + decimalPlaces: number; +} + +interface UnitySocketMessageBase { + type: string; + timestamp: number; +} +interface UnitySocketMessageHeartbeat extends UnitySocketMessageBase { + type: 'heartbeat_data'; + heartbeat: { + dataSensors: { + sensorIndex: number; + deviceName: string; + outputValue: number; + }[]; + dataSliders: { + sliderIndex: number; + sliderName: string; + outputValue: number; + min: number; + max: number; + unit: string; + }[]; + dataTimeline: { + isStanding: boolean; + isWatching: boolean; + timelineProgress: number; + }; + zedCamera: { + cameraFPS: string; + isZedReady: boolean; + streamInputIP: string; + streamInputPort: number; + zedGrabError: number; + }; + showOutOfService?: boolean; + }; +} diff --git a/frontend/views/control/ts/menu.ts b/frontend/views/control/ts/menu.ts new file mode 100644 index 0000000..5b62fa5 --- /dev/null +++ b/frontend/views/control/ts/menu.ts @@ -0,0 +1,42 @@ +export class Menu { + menuContainer: HTMLDivElement = document.querySelector('.ntsh_menubar'); + tabContainer: HTMLDivElement = document.querySelector('.ntsh_tabs'); + + constructor() { + this.registerListeners(); + + if (window.location.search.includes('advanced')) + this.selectTab('advanced'); + } + + selectTab(tabId: string) { + this.menuContainer + .querySelectorAll('.ntsh_menubar-item') + .forEach((item) => { + if (item.getAttribute('tabid') === tabId) { + item.classList.add('selected'); + } else { + item.classList.remove('selected'); + } + }); + + this.tabContainer.querySelectorAll('.ntsh_tab').forEach((tab) => { + if (tab.getAttribute('tabid') === tabId) { + tab.classList.add('visible'); + } else { + tab.classList.remove('visible'); + } + }); + } + + private registerListeners() { + this.menuContainer + .querySelectorAll('.ntsh_menubar-item') + .forEach((item) => { + item.addEventListener('click', () => { + const itemId = item.getAttribute('tabid'); + this.selectTab(itemId); + }); + }); + } +} diff --git a/frontend/views/control/ts/outOfServiceMode.ts b/frontend/views/control/ts/outOfServiceMode.ts new file mode 100644 index 0000000..88890bd --- /dev/null +++ b/frontend/views/control/ts/outOfServiceMode.ts @@ -0,0 +1,29 @@ +import { MorphComponent } from 'morphux'; +import { Main } from './main'; + +export class OutOfServiceMode { + private _Main: Main; + + state: boolean = false; + input: HTMLInputElement = document.querySelector( + '.ntsh-outofservicemode-input', + ); + + constructor(Main: Main) { + this._Main = Main; + + this.registerListeners(); + } + + private registerListeners() { + this.input.addEventListener('change', async () => { + const valid = await this._Main.executeCommand( + this.state ? 'disableOutOfService' : 'enableOutOfService', + `Are you sure you want to set the installation to "${this.state ? 'Out of Service' : 'Operational'}"?`, + 'unityWebSocket', + ); + if (!valid) this.input.checked = this.state; + this.state = this.input.checked; + }); + } +} diff --git a/frontend/views/control/ts/timer.ts b/frontend/views/control/ts/timer.ts new file mode 100644 index 0000000..e5fd137 --- /dev/null +++ b/frontend/views/control/ts/timer.ts @@ -0,0 +1,36 @@ +import { Main } from './main'; + +export class Timer { + private _Main: Main; + + startup: HTMLInputElement = document.querySelector('.ntsh-timer-startup'); + shutdown: HTMLInputElement = document.querySelector('.ntsh-timer-shutdown'); + + constructor(Main: Main) { + this._Main = Main; + + this.registerListeners(); + } + + update(data: { + start: { hour: number; minute: number }; + end: { hour: number; minute: number }; + }) { + const start = `${data.start.hour.toString().padStart(2, '0')}:${data.start.minute.toString().padStart(2, '0')}`; + const end = `${data.end.hour.toString().padStart(2, '0')}:${data.end.minute.toString().padStart(2, '0')}`; + + this.startup.value = start; + this.shutdown.value = end; + } + + registerListeners() { + this.startup.onchange = () => { + const [hour, minute] = this.startup.value.split(':').map(Number); + this._Main.socket.emit('setTimerStart', { hour, minute }); + }; + this.shutdown.onchange = () => { + const [hour, minute] = this.shutdown.value.split(':').map(Number); + this._Main.socket.emit('setTimerEnd', { hour, minute }); + }; + } +} diff --git a/frontend/views/control/tsconfig.json b/frontend/views/control/tsconfig.json new file mode 100644 index 0000000..4f1714c --- /dev/null +++ b/frontend/views/control/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "outDir": "dist", + "sourceMap": true + }, + "include": [ + "ts/**/*" + ] +} \ No newline at end of file diff --git a/frontend/views/dashboard/index.html b/frontend/views/dashboard/index.html index 77f70d4..37382ff 100644 --- a/frontend/views/dashboard/index.html +++ b/frontend/views/dashboard/index.html @@ -7,8 +7,8 @@ NTSH Control - - + + diff --git a/package-lock.json b/package-lock.json index 66c7553..9a49fbf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ntshcontrol", - "version": "1.0.0", + "version": "2026.3.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ntshcontrol", - "version": "1.0.0", + "version": "2026.3.1", "license": "ISC", "dependencies": { "@types/express": "^5.0.3", @@ -15,6 +15,7 @@ "@types/ws": "^8.18.1", "express": "^5.1.0", "fs-extra": "^11.3.2", + "naudiodon": "^2.3.6", "ping": "^1.0.0", "socket.io": "^4.8.1", "socket.io-client": "^4.8.1", @@ -221,6 +222,14 @@ "node": "^4.5.0 || >= 5.9" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, "node_modules/body-parser": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", @@ -691,6 +700,11 @@ "url": "https://opencollective.com/express" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, "node_modules/finalhandler": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", @@ -1125,6 +1139,21 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/nan": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.25.0.tgz", + "integrity": "sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g==" + }, + "node_modules/naudiodon": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/naudiodon/-/naudiodon-2.3.6.tgz", + "integrity": "sha512-6NWMV4lAdBSoHIh3jcXG/tjCzBLCafh6uuhwUdtDbPbj8xVJ8FOgKi6lU0rkHrW22Up5AFIrWPSiAhGOxmhEQQ==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "segfault-handler": "^1.3.0" + } + }, "node_modules/negotiator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", @@ -1326,6 +1355,16 @@ "integrity": "sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q==", "license": "BSD-3-Clause" }, + "node_modules/segfault-handler": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/segfault-handler/-/segfault-handler-1.3.0.tgz", + "integrity": "sha512-p7kVHo+4uoYkr0jmIiTBthwV5L2qmWtben/KDunDZ834mbos+tY+iO0//HpAJpOFSQZZ+wxKWuRo4DxV02B7Lg==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.2.1", + "nan": "^2.14.0" + } + }, "node_modules/semver": { "version": "7.7.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", diff --git a/package.json b/package.json index 969051f..022d487 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ntshcontrol", - "version": "2025.11.2", + "version": "2026.3.1", "main": "dist/Entry.js", "scripts": { "start": "node ." @@ -15,10 +15,11 @@ "@types/ws": "^8.18.1", "express": "^5.1.0", "fs-extra": "^11.3.2", + "naudiodon": "^2.3.6", "ping": "^1.0.0", "socket.io": "^4.8.1", "socket.io-client": "^4.8.1", "twilio": "^5.10.3", "ws": "^8.18.3" } -} \ No newline at end of file +} diff --git a/src/Audio.ts b/src/Audio.ts new file mode 100644 index 0000000..19687fc --- /dev/null +++ b/src/Audio.ts @@ -0,0 +1,112 @@ +import { pathExistsSync, readJSONSync, writeFile } from 'fs-extra'; +import { Main } from './Main'; +import { join } from 'path'; +const portAudio = require('naudiodon'); + +const PREFIX = '[Audio]'; +export class AudioChecker { + private _Main: Main; + + private configPath: string; + + deviceName: string = null; + + constructor(Main: Main) { + this._Main = Main; + + this.configPath = join(this._Main.dataPath, 'audio.json'); + this.load(); + } + + async waitForDevice() { + if ((this.deviceName ?? '').trim().length == 0) { + console.log( + PREFIX, + 'No audio device configured, skipping audio check. Available devices:', + ); + + portAudio + .getDevices() + .filter((device) => device.maxOutputChannels > 0) + .forEach((device) => { + console.log(` - ${device.name}`); + }); + return; + } + + console.log(PREFIX, `Waiting for device "${this.deviceName}"...`); + + let counter = 0; + return new Promise((resolve) => { + const c = setInterval(() => { + counter++; + const availableDevices = portAudio + .getDevices() + .filter((device) => device.maxOutputChannels > 0) + .map((device) => device.name); + + if (!availableDevices.includes(this.deviceName)) { + if (counter == 3) { + console.log( + PREFIX, + 'Trouble finding the correct device. Available devices:', + ); + availableDevices.forEach((device) => { + console.log(` - ${device}`); + }); + } + return; + } + + const hostApis = portAudio.getHostAPIs(); + const defaultOutputDeviceId = + hostApis.HostAPIs[hostApis.defaultHostAPI].defaultOutput; + const defaultOutputDeviceName = portAudio + .getDevices() + .find( + (device) => device.id === defaultOutputDeviceId, + )?.name; + if (defaultOutputDeviceName !== this.deviceName) { + console.warn( + PREFIX, + `The configured device "${this.deviceName}" is not set as the default output device. Please set it as the default output device to ensure proper functionality. Current default output device: "${defaultOutputDeviceName}".`, + ); + this._Main.Twilio.sendError( + 'Audio', + `The configured device "${this.deviceName}" is not set as the default output device. Current default output device: "${defaultOutputDeviceName}".`, + ); + return; + } + + clearInterval(c); + resolve(); + console.log(PREFIX, `Device "${this.deviceName}" is ready!`); + }, 1000); + }); + } + + load() { + console.log(PREFIX, 'Loading audio configuration...'); + const exists = pathExistsSync(this.configPath); + if (!exists) return this.save(); + + const data = readJSONSync(this.configPath); + this.deviceName = data.deviceName; + } + + private _save: NodeJS.Timeout; + async save() { + if (this._save) clearTimeout(this._save); + + this._save = setTimeout(async () => { + writeFile( + this.configPath, + JSON.stringify( + { deviceName: this.deviceName ?? null }, + null, + 4, + ), + ); + }, 1000); + } +} diff --git a/src/CameraRunner.ts b/src/CameraRunner.ts index e69a464..b77376e 100644 --- a/src/CameraRunner.ts +++ b/src/CameraRunner.ts @@ -1,6 +1,7 @@ import { io, Socket } from 'socket.io-client'; import { Main } from './Main'; import { delay, ServiceState } from './Utils'; +import { State, StatusType } from './Status'; const PREFIX = `[CameraRunner]`; export class CameraRunner { @@ -43,7 +44,7 @@ export class CameraRunner { sendCommand( command: 'reboot' | 'restart', - callback: (response: { succeed: boolean; message?: string }) => void + callback: (response: { succeed: boolean; message?: string }) => void, ) { if (this.socket == null || !this.socket.connected) return callback({ @@ -55,7 +56,7 @@ export class CameraRunner { command, (response: { succeed: boolean; message?: string }) => { callback(response); - } + }, ); } @@ -77,6 +78,18 @@ export class CameraRunner { this.message = message; this.error = error; this.state = state; + + this._Main.Status.update( + StatusType.CameraPC, + CameraPCStateColors[this.state], + message, + { + reboot: + state === 'FAILED' || + state === 'DISCONNECTED' || + state == 'CONNECTED', + }, + ); this.broadcastState(); if ( @@ -95,11 +108,23 @@ export class CameraRunner { const poll = async () => { const data: ProcessStatus = await new Promise((resolve) => { this.socket.emit('getStatus', (response: ProcessStatus) => - resolve(response) + resolve(response), ); }); this.processStatus = data; + this._Main.Status.update( + StatusType.CameraProcess, + CameraProcessStateColors[this.processStatus.state], + this.processStatus.message, + { + reboot: + this.processStatus.state === 'PROBLEM' || + this.processStatus.state === 'STOPPED' || + this.processStatus.state === 'RUNNING', + }, + ); + this.broadcastState(); }; @@ -107,13 +132,24 @@ export class CameraRunner { this.processStatus.state = simpleStatus.state; this.processStatus.message = simpleStatus.message; this.processStatus.error = simpleStatus.error; + this._Main.Status.update( + StatusType.CameraProcess, + CameraProcessStateColors[this.processStatus.state], + this.processStatus.message, + { + reboot: + this.processStatus.state === 'PROBLEM' || + this.processStatus.state === 'STOPPED' || + this.processStatus.state === 'RUNNING', + }, + ); this.broadcastState(); }); clearInterval(this.pollClock); this.pollClock = setInterval( () => poll(), - this._Main.Config.cameraRunner.pollInterval + this._Main.Config.cameraRunner.pollInterval, ); poll(); } @@ -146,7 +182,7 @@ export class CameraRunner { if (ip == null || port == null) { return this.setInfo( 'Connection problem', - 'Camera Runner WebSocket IP or port is not configured.' + 'Camera Runner WebSocket IP or port is not configured.', ); } @@ -165,7 +201,7 @@ export class CameraRunner { this.setInfo( 'Disconnected', 'Camera Runner was disconnected unexpectedly', - 'DISCONNECTED' + 'DISCONNECTED', ); this.reconnect(); }); @@ -210,6 +246,19 @@ interface CameraRunnerStatus { export type ProcessStatusState = 'RUNNING' | 'STOPPED' | 'STARTING' | 'PROBLEM'; +export const CameraPCStateColors: Record = { + CONNECTED: State.Green, + DISCONNECTED: State.Gray, + CONNECTING: State.Yellow, + FAILED: State.Red, +}; +export const CameraProcessStateColors: Record = { + RUNNING: State.Green, + STOPPED: State.Gray, + STARTING: State.Yellow, + PROBLEM: State.Red, +}; + interface ProcessStatusSimple { state: ProcessStatusState; message?: string; diff --git a/src/Configuration/ConfigurationManager.ts b/src/Configuration/ConfigurationManager.ts index cc4347f..0fd5443 100644 --- a/src/Configuration/ConfigurationManager.ts +++ b/src/Configuration/ConfigurationManager.ts @@ -21,7 +21,7 @@ export class ConfigurationManager { if (!configExists) { await writeFile( configPath, - JSON.stringify(DefaultConfiguration, null, 4) + JSON.stringify(DefaultConfiguration, null, 4), ); this._Main.Config = DefaultConfiguration; console.log(PREFIX, 'Written default configuration'); @@ -36,7 +36,7 @@ export class ConfigurationManager { async validateConfig(config: Config): Promise { const normalizedConfig: Config = this.normalizeConfig( config, - DefaultConfiguration + DefaultConfiguration, ); const hasChanges = JSON.stringify(config) !== JSON.stringify(normalizedConfig); @@ -47,7 +47,7 @@ export class ConfigurationManager { const configPath = join(this._Main.dataPath, 'config.json'); await writeFile( configPath, - JSON.stringify(normalizedConfig, null, 4) + JSON.stringify(normalizedConfig, null, 4), ); console.log(PREFIX, 'Configuration updated and saved'); } @@ -73,7 +73,7 @@ export class ConfigurationManager { !Array.isArray(template[0]) ) { return current.map((item) => - this.normalizeConfig(item, template[0]) + this.normalizeConfig(item, template[0]), ); } return current; @@ -89,7 +89,7 @@ export class ConfigurationManager { if (template.hasOwnProperty(key)) { result[key] = this.normalizeConfig( current?.[key], - template[key] + template[key], ); } } @@ -130,6 +130,7 @@ export interface ConfigUnity { heartbeatInterval: number; calibrationImageInterval: number; + launchOnStartup: boolean; } export interface ConfigCameraRunner { diff --git a/src/Configuration/DefaultConfiguration.ts b/src/Configuration/DefaultConfiguration.ts index 49389ec..10b921a 100644 --- a/src/Configuration/DefaultConfiguration.ts +++ b/src/Configuration/DefaultConfiguration.ts @@ -22,6 +22,7 @@ export const DefaultConfiguration: Config = { heartbeatInterval: 1000, calibrationImageInterval: 2000, + launchOnStartup: true, }, cameraRunner: { webSocket: { diff --git a/src/Configuration/Timer.ts b/src/Configuration/Timer.ts new file mode 100644 index 0000000..032b075 --- /dev/null +++ b/src/Configuration/Timer.ts @@ -0,0 +1,113 @@ +import { join } from 'path'; +import { Main } from '../Main'; +import { pathExists, readJSON, writeFile, writeJSON } from 'fs-extra'; +import { StartOrigin } from '../Unity/UnityRunner'; + +const PREFIX = '[Main]'; +export class Timer { + private _Main: Main; + + private configPath: string; + + private start: { + hour: number; + minute: number; + } = { + hour: null, + minute: null, + }; + private end: { + hour: number; + minute: number; + } = { + hour: null, + minute: null, + }; + + constructor(Main: Main) { + this._Main = Main; + this.configPath = join(this._Main.dataPath, 'timer.json'); + } + + getState() { + return { + start: this.start, + end: this.end, + }; + } + + setStart(data: { hour: number; minute: number }) { + this.start = data; + this._Main.WebServer.socket.emit('timer', this.getState()); + this.save(); + } + + setEnd(data: { hour: number; minute: number }) { + this.end = data; + this._Main.WebServer.socket.emit('timer', this.getState()); + this.save(); + } + + startClock() { + setInterval(() => { + const startTime = new Date(); + startTime.setHours(this.start.hour, this.start.minute, 0, 0); + + const endTime = new Date(); + endTime.setHours(this.end.hour, this.end.minute, 0, 0); + + const shouldBeStarted = + startTime <= new Date() && endTime > new Date(); + + if (shouldBeStarted) { + if ( + this._Main.UnityRunner.state !== 'RUNNING' && + this._Main.UnityRunner.state !== 'STARTING' + ) { + console.log(PREFIX, 'Starting Unity'); + this._Main.UnityRunner.start(StartOrigin.Timer); + } else if ( + this._Main.UnityRunner.startOrigin !== StartOrigin.Timer + ) { + console.log(PREFIX, 'Already running'); + this._Main.UnityRunner.startOrigin = StartOrigin.Timer; + } + } else { + if ( + this._Main.UnityRunner.state === 'RUNNING' && + this._Main.UnityRunner.startOrigin === StartOrigin.Timer + ) { + console.log(PREFIX, 'Stopping Unity'); + this._Main.UnityRunner.stop(); + } + } + }, 5000); + } + + async load() { + console.log(PREFIX, 'Loading timer configuration...'); + const exists = await pathExists(this.configPath); + if (!exists) { + this.save(); + return this.startClock(); + } + + const data = await readJSON(this.configPath); + this.start = data.start; + this.end = data.end; + + this.startClock(); + } + + private _save: NodeJS.Timeout; + async save() { + if (this._save) clearTimeout(this._save); + + this._save = setTimeout(async () => { + writeFile( + this.configPath, + JSON.stringify({ start: this.start, end: this.end }, null, 4), + ); + }, 1000); + } +} diff --git a/src/Main.ts b/src/Main.ts index 77b79e7..8599124 100644 --- a/src/Main.ts +++ b/src/Main.ts @@ -6,20 +6,26 @@ import { ConfigurationManager, } from './Configuration/ConfigurationManager'; import { CameraRunner } from './CameraRunner'; -import { UnityRunner } from './Unity/UnityRunner'; +import { StartOrigin, UnityRunner } from './Unity/UnityRunner'; import { UnityWebSocket } from './Unity/UnityWebSocket'; import { TwilioHandler } from './Twilio'; import { delay } from './Utils'; import * as ping from 'ping'; import { shutdown } from './Shutdown'; +import { Timer } from './Configuration/Timer'; +import { Status } from './Status'; +import { AudioChecker } from './Audio'; const PREFIX = '[Main]'; export class Main { dataPath = join(homedir(), 'MorphixProductions', 'NTSHControl'); ConfigurationManager = new ConfigurationManager(this); + Timer = new Timer(this); + Status = new Status(this); WebServer = new WebServer(this); Twilio = new TwilioHandler(this); + Audio = new AudioChecker(this); CameraRunner = new CameraRunner(this); UnityRunner = new UnityRunner(this); @@ -35,11 +41,23 @@ export class Main { await this.WebServer.listen(); await this.Twilio.load(); + await this.Audio.waitForDevice(); + await this.CameraRunner.connect(); - setTimeout(() => { - this.UnityRunner.start(); - }, this.Config.unity.executable.startUpDelay ?? 0); + await this.Timer.load(); + + if ((this.Config.unity.launchOnStartup ?? true) === true) + setTimeout(() => { + this.UnityRunner.start(StartOrigin.Startup); + }, this.Config.unity.executable.startUpDelay ?? 0); + else { + this.UnityRunner.setInfo( + 'Not set to launch on startup. Waiting for timer or manual start...', + null, + 'STOPPED', + ); + } } async restart() { @@ -55,11 +73,11 @@ export class Main { if (!response.succeed) { console.error( 'Failed to reboot CameraRunner:', - response.message + response.message, ); this.Twilio.sendError( 'CameraRunner', - `Failed to reboot CameraRunner: ${response.message}` + `Failed to reboot CameraRunner: ${response.message}`, ); resolve(false); } else { @@ -67,7 +85,7 @@ export class Main { this.Twilio.sendError('CameraRunner', null); resolve(true); } - } + }, ); }); if (!succeed) return; @@ -75,7 +93,7 @@ export class Main { await delay(5000); console.log('Starting UnityRunner...'); - await this.UnityRunner.start(); + await this.UnityRunner.start(this.UnityRunner.startOrigin); console.log('Restart complete.'); } diff --git a/src/Status.ts b/src/Status.ts new file mode 100644 index 0000000..eb0db9c --- /dev/null +++ b/src/Status.ts @@ -0,0 +1,156 @@ +import { Main } from './Main'; +import { StartOrigin } from './Unity/UnityRunner'; +import { delay } from './Utils'; + +export class Status { + private _Main: Main; + + states: Map = new Map(); + + constructor(Main: Main) { + this._Main = Main; + + this.ensure(); + this.startClock(); + } + + update( + type: StatusType, + state: State, + message: string, + buttons?: { reboot?: boolean; start?: boolean; stop?: boolean }, + ) { + this.states.set(type, { state, message, buttons }); + + this._Main.WebServer.socket.emit('status', this.getState()); + } + + reboot(type: StatusType) { + switch (type) { + case StatusType.CameraPC: { + this._Main.CameraRunner.sendCommand( + 'reboot', + (response: { succeed: boolean; message?: string }) => { + console.log('CameraRunner reboot response:', response); + }, + ); + } + case StatusType.CameraProcess: { + this._Main.CameraRunner.sendCommand( + 'restart', + (response: { succeed: boolean; message?: string }) => { + console.log('CameraRunner restart response:', response); + }, + ); + } + case StatusType.CameraUnityStream: { + this._Main.CameraRunner.sendCommand( + 'restart', + (response: { succeed: boolean; message?: string }) => { + console.log('CameraRunner restart response:', response); + }, + ); + this._Main.UnityRunner.restart(StartOrigin.Manual); + } + case StatusType.UnityBuild: { + this._Main.UnityRunner.restart(StartOrigin.Manual); + } + case StatusType.ReplayFunction: { + console.log( + 'ReplayFunction reboot requested. Not implemented.', + ); + } + } + } + + start(type: StatusType) { + switch (type) { + case StatusType.UnityBuild: { + this._Main.UnityRunner.requestStart(StartOrigin.Manual); + } + } + } + + stop(type: StatusType) { + switch (type) { + case StatusType.UnityBuild: { + this._Main.UnityRunner.requestStop(); + } + } + } + + getState() { + const state = {}; + this.states.forEach((value, key) => { + state[key] = value; + }); + return state; + } + + private startClock() { + let hadInvalidLastRound: boolean = false; + setInterval(() => { + let hasInvalid = false; + this.states.forEach((state, key) => { + if (state.state === State.Red) hasInvalid = true; + }); + + if (hasInvalid && !hadInvalidLastRound) { + hadInvalidLastRound = true; + console.warn( + 'One ore more status entries are invalid, waiting to see if they recover...', + ); + } else if (hasInvalid && hadInvalidLastRound) { + console.error( + 'One ore more status entries are still invalid after 5 seconds, restarting system.', + ); + this._Main.Twilio.sendError( + 'Status', + 'One ore more status entries are still invalid after 5 seconds, restarting system.', + ); + this._Main.restart(); + } else { + this._Main.Twilio.sendError('Status', null); + hadInvalidLastRound = false; + } + }, 5000); + } + + private ensure() { + for (const type in StatusType) { + if (!this.states.has(StatusType[type])) + this.states.set(StatusType[type], { + state: State.Gray, + message: 'Loading...', + }); + } + } + + private doLog() { + console.clear(); + this.states.forEach((state, key) => { + console.log(`[${key}] ${state.state} - ${state.message}`); + }); + } +} + +export interface StatusEntry { + state: State; + message: string; + buttons?: { reboot?: boolean; start?: boolean; stop?: boolean }; +} + +export enum State { + Green = 'GREEN', + Yellow = 'YELLOW', + Red = 'RED', + Gray = 'GRAY', +} + +export enum StatusType { + CameraPC = 'CAMERAPC', + CameraProcess = 'CAMERAPROCESS', + CameraUnityStream = 'CAMERAUNITYSTREAM', + UnityBuild = 'UNITYBUILD', + ReplayFunction = 'REPLAYFUNCTION', +} diff --git a/src/Twilio.ts b/src/Twilio.ts index 18819d1..851969e 100644 --- a/src/Twilio.ts +++ b/src/Twilio.ts @@ -44,7 +44,7 @@ export class TwilioHandler { this.client = require('twilio')( this._Main.Config.twilio.accountSid, - this._Main.Config.twilio.authToken + this._Main.Config.twilio.authToken, ); } @@ -77,14 +77,13 @@ export class TwilioHandler { console.log(PREFIX, `Sending to Twilio:\n`, errorMessage); const promises = this._Main.Config.twilio.toNumbers.map( - (toNumber) => this.sendMessage(toNumber, errorMessage) + (toNumber) => this.sendMessage(toNumber, errorMessage), ); await Promise.all(promises); }, this._Main.Config.twilio.aggregateTimeout); } sendMessage(to: string, message: string) { - return; return new Promise((resolve) => { this.client.messages .create({ @@ -104,4 +103,9 @@ export class TwilioHandler { } } -type TwilioCategories = 'CameraRunner' | 'UnityRunner' | 'UnityWebSocket'; +type TwilioCategories = + | 'CameraRunner' + | 'UnityRunner' + | 'UnityWebSocket' + | 'Status' + | 'Audio'; diff --git a/src/Unity/UnityRunner.ts b/src/Unity/UnityRunner.ts index b20e798..6699f34 100644 --- a/src/Unity/UnityRunner.ts +++ b/src/Unity/UnityRunner.ts @@ -1,7 +1,9 @@ import { pathExistsSync } from 'fs-extra'; -import { ChildProcess, exec, spawn } from 'child_process'; +import { ChildProcess, spawn } from 'child_process'; import { delay } from '../Utils'; import { Main } from '../Main'; +import { ProcessStatusState } from '../CameraRunner'; +import { StatusType } from '../Status'; const PREFIX = '[UnityRunner]'; @@ -11,6 +13,8 @@ export class UnityRunner { private _Main: Main; state: UnityRunnerState; + startOrigin: StartOrigin; + message?: string = 'Awaiting startup delay...'; error?: string; @@ -34,11 +38,11 @@ export class UnityRunner { switch (command) { case 'restart': - return callback(this.requestRestart()); + return callback(this.requestRestart(StartOrigin.Manual)); case 'stop': return callback(this.requestStop()); case 'start': - return callback(this.requestStart()); + return callback(this.requestStart(StartOrigin.Manual)); } } @@ -50,7 +54,10 @@ export class UnityRunner { }, 3000); } - requestRestart(): { succeed: boolean; message?: string } { + requestRestart(startOrigin: StartOrigin): { + succeed: boolean; + message?: string; + } { if (this.state !== 'RUNNING') return { succeed: false, @@ -58,7 +65,7 @@ export class UnityRunner { 'Cannot restart when process is not running. It is probably restarting already.', }; - this.restart(true); + this.restart(startOrigin, true); return { succeed: true }; } @@ -74,14 +81,17 @@ export class UnityRunner { return { succeed: true }; } - requestStart(): { succeed: boolean; message?: string } { + requestStart(startOrigin: StartOrigin): { + succeed: boolean; + message?: string; + } { if (this.state !== 'STOPPED') return { succeed: false, message: 'Cannot start when process is already running.', }; - this.start(); + this.start(startOrigin); return { succeed: true }; } @@ -92,11 +102,21 @@ export class UnityRunner { setInfo( message: string, error: string, - state: UnityRunnerState = 'PROBLEM' + state: UnityRunnerState = 'PROBLEM', ) { this.message = message; this.error = error; this.state = state; + this._Main.Status.update( + StatusType.UnityBuild, + UnityBuildStateColors[state], + message ?? error ?? '', + { + reboot: state === 'PROBLEM' || state === 'RUNNING', + start: state === 'STOPPED', + stop: state === 'RUNNING', + }, + ); this.broadcastState(); if (error != null) this._Main.Twilio.sendError('UnityRunner', error); @@ -104,7 +124,7 @@ export class UnityRunner { this.output.current.push( `[${new Date().toLocaleTimeString('nl-NL')}] [System] [${state}] ${ message ?? error - }` + }`, ); if (state == 'PROBLEM' || state == 'STOPPED') @@ -123,7 +143,7 @@ export class UnityRunner { this.setInfo( 'Requested quit through WebSocket...', null, - 'STARTING' + 'STARTING', ); } else { this.process.kill('SIGTERM'); @@ -161,7 +181,7 @@ export class UnityRunner { } restartTriggered: boolean = false; - async restart(instant: boolean = false) { + async restart(origin: StartOrigin, instant: boolean = false) { if (this.restartTriggered) return; this.restartTriggered = true; @@ -170,6 +190,7 @@ export class UnityRunner { clearInterval(this.statusClock); this.startTime = -1; + this.startOrigin = null; this.broadcastState(); if (!instant) await delay(2000); @@ -191,10 +212,10 @@ export class UnityRunner { await delay(10000); } - await this.start(); + await this.start(this.startOrigin); } - async start() { + async start(origin: StartOrigin) { if (this.output.current.length > 0) { this.output.last = [...this.output.current]; this.output.current = []; @@ -211,7 +232,7 @@ export class UnityRunner { if (path == null || !pathExistsSync(path)) { this.setInfo( 'Executable problem', - `Executable path is not set or does not exist: ${path}` + `Executable path is not set or does not exist: ${path}`, ); return; } @@ -221,7 +242,7 @@ export class UnityRunner { this.setInfo( 'Waiting for CameraRunner to connect...', null, - 'STARTING' + 'STARTING', ); var c = setInterval(() => { if (this._Main.CameraRunner.state !== 'CONNECTED') return; @@ -236,7 +257,7 @@ export class UnityRunner { this.setInfo( 'Waiting for CameraRunner process to start...', null, - 'STARTING' + 'STARTING', ); var c = setInterval(() => { if ( @@ -259,7 +280,7 @@ export class UnityRunner { this._Main.Config.unity.executable.arguments, { stdio: 'pipe', - } + }, ); this.process.on('exit', (code, signal) => { @@ -267,13 +288,13 @@ export class UnityRunner { this.setInfo( 'Process exited', `Process exited with code ${code} and signal ${signal}`, - 'PROBLEM' + 'PROBLEM', ); - this.restart(); + this.restart(this.startOrigin); }); this.process.on('error', (err) => { this.setInfo('Process error', err.message); - this.restart(); + this.restart(this.startOrigin); }); this.process.stdout?.on('data', (data) => { const lines = data @@ -283,7 +304,7 @@ export class UnityRunner { .filter((line) => line.length > 0); lines.forEach((line) => { const formattedLine = `[${new Date().toLocaleTimeString( - 'nl-NL' + 'nl-NL', )}] [${fileName}] ${line}`; if (LOG_OUTPUT) console.log(PREFIX, formattedLine); this.output.current.push(formattedLine); @@ -297,12 +318,13 @@ export class UnityRunner { .filter((line) => line.length > 0); lines.forEach((line) => { const formattedLine = `[${new Date().toLocaleTimeString( - 'nl-NL' + 'nl-NL', )}] [${fileName}] [ERROR] ${line}`; if (LOG_OUTPUT) console.error(PREFIX, formattedLine); this.output.current.push(formattedLine); }); }); + this.startOrigin = origin; this.startStatusClock(); setTimeout(() => { if ( @@ -340,4 +362,24 @@ interface UnityRunnerStatus { output: { current: string[]; last: string[] }; } +enum State { + Green = 'GREEN', + Yellow = 'YELLOW', + Red = 'RED', + Gray = 'GRAY', +} + +export const UnityBuildStateColors: Record = { + RUNNING: State.Green, + STOPPED: State.Gray, + STARTING: State.Yellow, + PROBLEM: State.Red, +}; + export type UnityRunnerState = 'RUNNING' | 'STOPPED' | 'STARTING' | 'PROBLEM'; + +export enum StartOrigin { + Timer = 'TIMER', + Manual = 'MANUAL', + Startup = 'STARTUP', +} diff --git a/src/Unity/UnityWebSocket.ts b/src/Unity/UnityWebSocket.ts index bbf6fdc..a8f9333 100644 --- a/src/Unity/UnityWebSocket.ts +++ b/src/Unity/UnityWebSocket.ts @@ -1,6 +1,7 @@ import { RawData, WebSocket } from 'ws'; import { Main } from '../Main'; import { delay, ServiceState } from '../Utils'; +import { State, StatusType } from '../Status'; const PREFIX = '[Unity]'; export class UnityWebSocket { @@ -29,6 +30,8 @@ export class UnityWebSocket { constructor(Main: Main) { this._Main = Main; + + this.updateStatus(); } handle(command: string, ...args: any[]) { @@ -74,7 +77,7 @@ export class UnityWebSocket { this.socket.send( JSON.stringify({ type: 'quit_application', - }) + }), ); } @@ -87,7 +90,7 @@ export class UnityWebSocket { type: 'set_slider_value', sliderIndex, sliderValue, - }) + }), ); if (this.parameters.sliders[sliderIndex] == undefined) return; @@ -104,7 +107,7 @@ export class UnityWebSocket { type: 'set_advanced_slider_value', sliderIndex, sliderValue, - }) + }), ); if (this.parameters.advancedSliders[sliderIndex] == undefined) return; @@ -120,7 +123,7 @@ export class UnityWebSocket { JSON.stringify({ type: 'set_out_of_service', showOutOfService: state, - }) + }), ); this.parameters.outOfService = true; @@ -130,14 +133,40 @@ export class UnityWebSocket { broadcastState() { this._Main.WebServer.socket.emit( 'unityWebSocketState', - this.getState() + this.getState(), ); } + updateStatus() { + if (this.state != 'CONNECTED') { + this._Main.Status.update( + StatusType.CameraUnityStream, + CameraUnityStateColors[this.state], + this.message, + { + reboot: this.state === 'FAILED', + }, + ); + } else { + const status = !this.parameters.zedReady + ? 'Waiting for ZED stream' + : this.message; + this._Main.Status.update( + StatusType.CameraUnityStream, + this.parameters.zedReady ? State.Green : State.Yellow, + status, + { + reboot: this.parameters.zedReady, + }, + ); + } + } + setInfo(message: string, error: string, state: ServiceState = 'FAILED') { this.message = message; this.error = error; this.state = state; + this.updateStatus(); this.broadcastState(); if (error != null) this._Main.Twilio.sendError('UnityWebSocket', error); @@ -185,7 +214,7 @@ export class UnityWebSocket { ? 2 : null, }; - } + }, ); this.parameters.advancedSliders = message.heartbeat.dataAdvancedSliders.map((slider) => { @@ -199,12 +228,13 @@ export class UnityWebSocket { }; }); + this.updateStatus(); this.broadcastState(); break; case 'response_camera_frame': this._Main.WebServer.Calibration.writeCalibrationImage( - message.imageBase64 + message.imageBase64, ); break; } @@ -261,7 +291,7 @@ export class UnityWebSocket { await delay(1000); this.socket = new WebSocket( - `ws://${this._Main.Config.unity.webSocket.ip}:${this._Main.Config.unity.webSocket.port}` + `ws://${this._Main.Config.unity.webSocket.ip}:${this._Main.Config.unity.webSocket.port}`, ); this.socket.on('error', (error) => { @@ -269,7 +299,7 @@ export class UnityWebSocket { this.setInfo( 'Connection error', `Could not connect: ${error.message}`, - 'FAILED' + 'FAILED', ); this.reconnect(); }); @@ -288,7 +318,7 @@ export class UnityWebSocket { this.setInfo( 'Disconnected', 'Unity was disconnected unexpectedly', - 'FAILED' + 'FAILED', ); this.reconnect(); }); @@ -300,7 +330,10 @@ export class UnityWebSocket { private calibrationImageClock: NodeJS.Timeout; startFetchClocks() { this.socket.send( - JSON.stringify({ type: 'set_heartbeat_auto_send', autoSend: false }) + JSON.stringify({ + type: 'set_heartbeat_auto_send', + autoSend: false, + }), ); this.heartbeatClock = setInterval(() => { if ( @@ -409,6 +442,13 @@ interface UnitySocketMessageHeartbeat extends UnitySocketMessageBase { showOutOfService?: boolean; }; } + +export const CameraUnityStateColors: Record = { + CONNECTED: State.Green, + DISCONNECTED: State.Gray, + CONNECTING: State.Yellow, + FAILED: State.Red, +}; interface UnitySocketMessageCameraFrame extends UnitySocketMessageBase { type: 'response_camera_frame'; imageBase64: string; diff --git a/src/WebServer/ControlRouter.ts b/src/WebServer/ControlRouter.ts new file mode 100644 index 0000000..9273e4c --- /dev/null +++ b/src/WebServer/ControlRouter.ts @@ -0,0 +1,46 @@ +import { Router } from 'express'; +import { Main } from '../Main'; +import { join } from 'path'; +import { pathExistsSync, readdirSync, readFile } from 'fs-extra'; + +export class ControlRouter { + private _Main: Main; + Router: Router; + + path: string; + + constructor(Main: Main) { + this._Main = Main; + this.Router = Router(); + + this.path = join( + __filename, + '..', + '..', + '..', + 'frontend', + 'views', + 'control', + ); + + this.registerRoutes(); + } + + async registerRoutes() { + this.Router.get('/', 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/DashboardRouter.ts b/src/WebServer/DashboardRouter.ts index 69511f5..33dbee7 100644 --- a/src/WebServer/DashboardRouter.ts +++ b/src/WebServer/DashboardRouter.ts @@ -20,7 +20,7 @@ export class DashboardRouter { '..', 'frontend', 'views', - 'dashboard' + 'dashboard', ); this.registerRoutes(); @@ -28,21 +28,21 @@ export class DashboardRouter { async registerRoutes() { this.Router.get( - ['/', '/dashboard', '/calibration', '/cameralogs', '/unitylogs'], + ['/dashboard', '/calibration', '/cameralogs', '/unitylogs'], async (req, res) => { const htmlContent = await readFile( - join(this.path, 'index.html') + join(this.path, 'index.html'), ); res.setHeader('Content-Type', 'text/html'); res.send(htmlContent); - } + }, ); - this.Router.get('/style.css', async (req, res) => { + this.Router.get('/dashboard/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) => { + this.Router.get('/dashboard/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 index 58a8045..5551b32 100644 --- a/src/WebServer/WebServer.ts +++ b/src/WebServer/WebServer.ts @@ -7,11 +7,14 @@ import { DashboardRouter } from './DashboardRouter'; import { join } from 'path'; import { CalibrationRouter } from './CalibrationRouter'; import { delay } from '../Utils'; +import { ControlRouter } from './ControlRouter'; +import { StatusType } from '../Status'; const PREFIX = '[WebServer]'; export class WebServer { private _Main: Main; + Control: ControlRouter; Dashboard: DashboardRouter; Calibration: CalibrationRouter; @@ -23,6 +26,7 @@ export class WebServer { this._Main = Main; this.Dashboard = new DashboardRouter(this._Main); this.Calibration = new CalibrationRouter(this._Main); + this.Control = new ControlRouter(this._Main); this.prepare(); } @@ -34,26 +38,29 @@ export class WebServer { this.app.use( express.static( - join(__filename, '..', '..', '..', 'frontend', 'static') - ) + join(__filename, '..', '..', '..', 'frontend', 'static'), + ), ); this.app.use(this.Dashboard.Router); + this.app.use(this.Control.Router); this.app.use(this.Calibration.Router); this.socket.on('connection', (socket) => { + socket.emit('status', this._Main.Status.getState()); + socket.emit('timer', this._Main.Timer.getState()); socket.emit( 'cameraRunnerState', - this._Main.CameraRunner.getState() + this._Main.CameraRunner.getState(), ); socket.emit('unityRunnerState', this._Main.UnityRunner.getStatus()); socket.emit( 'unityWebSocketState', - this._Main.UnityWebSocket.getState() + this._Main.UnityWebSocket.getState(), ); socket.emit( 'supportNumber', - this._Main.Config.support.telephone.replace('+', '') + this._Main.Config.support.telephone.replace('+', ''), ); socket.on( @@ -62,7 +69,7 @@ export class WebServer { callback: (response: { succeed: boolean; message?: string; - }) => void + }) => void, ) => { if (this._Main.CameraRunner.state !== 'CONNECTED') return callback({ @@ -73,7 +80,7 @@ export class WebServer { this._Main.restart(); callback({ succeed: true }); - } + }, ); socket.on( @@ -82,21 +89,52 @@ export class WebServer { callback: (response: { succeed: boolean; message?: string; - }) => void + }) => void, ) => { await delay(1000); callback({ succeed: true }); this._Main.shutdown(); - } + }, ); socket.on('cameraRunner', (command: string, ...args: any[]) => - this._Main.CameraRunner.handle(command, ...args) + this._Main.CameraRunner.handle(command, ...args), ); socket.on('unityRunner', (command: string, ...args: any[]) => - this._Main.UnityRunner.handle(command, ...args) + this._Main.UnityRunner.handle(command, ...args), ); socket.on('unityWebSocket', (command: string, ...args: any[]) => - this._Main.UnityWebSocket.handle(command, ...args) + this._Main.UnityWebSocket.handle(command, ...args), + ); + + socket.on( + 'status', + ( + action: 'fullreboot' | 'reboot' | 'start' | 'stop', + type: StatusType, + ) => { + switch (action) { + case 'fullreboot': + return this._Main.restart(); + case 'reboot': + return this._Main.Status.reboot(type); + case 'start': + return this._Main.Status.start(type); + case 'stop': + return this._Main.Status.stop(type); + } + }, + ); + socket.on( + 'setTimerStart', + (data: { hour: number; minute: number }) => { + this._Main.Timer.setStart(data); + }, + ); + socket.on( + 'setTimerEnd', + (data: { hour: number; minute: number }) => { + this._Main.Timer.setEnd(data); + }, ); }); } @@ -107,7 +145,7 @@ export class WebServer { this.httpServer.listen(port, () => { console.log( PREFIX, - `Listening on port http://127.0.0.1:${port}` + `Listening on port http://127.0.0.1:${port}`, ); resolve(); }); diff --git a/test.js b/test.js index e3160b9..8ddc135 100644 --- a/test.js +++ b/test.js @@ -1,14 +1,11 @@ -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); -}); +const portAudio = require('naudiodon'); +// const defaultOutput = portAudio.getDevices().find(d => d.isDefaultOutput); +console.log(portAudio.getDevices().filter((d) => d.maxOutputChannels > 0)); +// console.log(defaultOutput); -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 +const hostApis = portAudio.getHostAPIs(); +const defaultOutputDeviceId = hostApis.HostAPIs[hostApis.defaultHostAPI].defaultOutput; + +console.log(hostApis) \ No newline at end of file