matterbridge 1.7.0 → 1.7.2-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +52 -9
- package/README-EDGE.md +4 -6
- package/README-SERVICE.md +2 -2
- package/dist/cli.js +0 -26
- package/dist/cluster/export.js +0 -2
- package/dist/defaultConfigSchema.js +0 -23
- package/dist/deviceManager.js +1 -26
- package/dist/index.js +0 -30
- package/dist/logger/export.js +0 -1
- package/dist/matter/export.js +0 -4
- package/dist/matterbridge.js +61 -707
- package/dist/matterbridgeAccessoryPlatform.js +0 -33
- package/dist/matterbridgeBehaviors.js +1 -29
- package/dist/matterbridgeDevice.js +9 -996
- package/dist/matterbridgeDeviceTypes.js +11 -82
- package/dist/matterbridgeDynamicPlatform.js +0 -33
- package/dist/matterbridgeEdge.js +0 -530
- package/dist/matterbridgeEndpoint.js +14 -1121
- package/dist/matterbridgePlatform.js +8 -112
- package/dist/matterbridgeTypes.js +0 -24
- package/dist/matterbridgeWebsocket.js +60 -49
- package/dist/pluginManager.js +3 -238
- package/dist/storage/export.js +0 -1
- package/dist/utils/colorUtils.js +2 -205
- package/dist/utils/export.js +0 -1
- package/dist/utils/utils.js +7 -252
- package/frontend/build/asset-manifest.json +6 -6
- package/frontend/build/index.html +1 -1
- package/frontend/build/static/css/{main.f1fce054.css → main.b1a621ee.css} +2 -2
- package/frontend/build/static/css/main.b1a621ee.css.map +1 -0
- package/frontend/build/static/js/{main.5caad8c7.js → main.0cc31fc9.js} +10 -10
- package/frontend/build/static/js/main.0cc31fc9.js.map +1 -0
- package/npm-shrinkwrap.json +8 -8
- package/package.json +1 -2
- package/dist/cli.d.ts +0 -25
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/cluster/export.d.ts +0 -2
- package/dist/cluster/export.d.ts.map +0 -1
- package/dist/cluster/export.js.map +0 -1
- package/dist/defaultConfigSchema.d.ts +0 -27
- package/dist/defaultConfigSchema.d.ts.map +0 -1
- package/dist/defaultConfigSchema.js.map +0 -1
- package/dist/deviceManager.d.ts +0 -46
- package/dist/deviceManager.d.ts.map +0 -1
- package/dist/deviceManager.js.map +0 -1
- package/dist/index.d.ts +0 -40
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger/export.d.ts +0 -2
- package/dist/logger/export.d.ts.map +0 -1
- package/dist/logger/export.js.map +0 -1
- package/dist/matter/export.d.ts +0 -11
- package/dist/matter/export.d.ts.map +0 -1
- package/dist/matter/export.js.map +0 -1
- package/dist/matterbridge.d.ts +0 -483
- package/dist/matterbridge.d.ts.map +0 -1
- package/dist/matterbridge.js.map +0 -1
- package/dist/matterbridgeAccessoryPlatform.d.ts +0 -39
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +0 -1
- package/dist/matterbridgeAccessoryPlatform.js.map +0 -1
- package/dist/matterbridgeBehaviors.d.ts +0 -942
- package/dist/matterbridgeBehaviors.d.ts.map +0 -1
- package/dist/matterbridgeBehaviors.js.map +0 -1
- package/dist/matterbridgeDevice.d.ts +0 -7077
- package/dist/matterbridgeDevice.d.ts.map +0 -1
- package/dist/matterbridgeDevice.js.map +0 -1
- package/dist/matterbridgeDeviceTypes.d.ts +0 -109
- package/dist/matterbridgeDeviceTypes.d.ts.map +0 -1
- package/dist/matterbridgeDeviceTypes.js.map +0 -1
- package/dist/matterbridgeDynamicPlatform.d.ts +0 -39
- package/dist/matterbridgeDynamicPlatform.d.ts.map +0 -1
- package/dist/matterbridgeDynamicPlatform.js.map +0 -1
- package/dist/matterbridgeEdge.d.ts +0 -91
- package/dist/matterbridgeEdge.d.ts.map +0 -1
- package/dist/matterbridgeEdge.js.map +0 -1
- package/dist/matterbridgeEndpoint.d.ts +0 -10151
- package/dist/matterbridgeEndpoint.d.ts.map +0 -1
- package/dist/matterbridgeEndpoint.js.map +0 -1
- package/dist/matterbridgePlatform.d.ts +0 -140
- package/dist/matterbridgePlatform.d.ts.map +0 -1
- package/dist/matterbridgePlatform.js.map +0 -1
- package/dist/matterbridgeTypes.d.ts +0 -169
- package/dist/matterbridgeTypes.d.ts.map +0 -1
- package/dist/matterbridgeTypes.js.map +0 -1
- package/dist/matterbridgeWebsocket.d.ts +0 -49
- package/dist/matterbridgeWebsocket.d.ts.map +0 -1
- package/dist/matterbridgeWebsocket.js.map +0 -1
- package/dist/pluginManager.d.ts +0 -238
- package/dist/pluginManager.d.ts.map +0 -1
- package/dist/pluginManager.js.map +0 -1
- package/dist/storage/export.d.ts +0 -2
- package/dist/storage/export.d.ts.map +0 -1
- package/dist/storage/export.js.map +0 -1
- package/dist/utils/colorUtils.d.ts +0 -61
- package/dist/utils/colorUtils.d.ts.map +0 -1
- package/dist/utils/colorUtils.js.map +0 -1
- package/dist/utils/export.d.ts +0 -3
- package/dist/utils/export.d.ts.map +0 -1
- package/dist/utils/export.js.map +0 -1
- package/dist/utils/utils.d.ts +0 -221
- package/dist/utils/utils.d.ts.map +0 -1
- package/dist/utils/utils.js.map +0 -1
- package/frontend/build/static/css/main.f1fce054.css.map +0 -1
- package/frontend/build/static/js/main.5caad8c7.js.map +0 -1
- /package/frontend/build/static/js/{main.5caad8c7.js.LICENSE.txt → main.0cc31fc9.js.LICENSE.txt} +0 -0
package/dist/utils/utils.js
CHANGED
|
@@ -1,93 +1,30 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* This file contains the deepEqual function.
|
|
3
|
-
*
|
|
4
|
-
* @file utils.ts
|
|
5
|
-
* @author Luca Liguori
|
|
6
|
-
* @date 2024-02-17
|
|
7
|
-
* @version 1.2.9
|
|
8
|
-
*
|
|
9
|
-
* Copyright 2024, 2025, 2026 Luca Liguori.
|
|
10
|
-
*
|
|
11
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
12
|
-
* you may not use this file except in compliance with the License.
|
|
13
|
-
* You may obtain a copy of the License at
|
|
14
|
-
*
|
|
15
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
|
16
|
-
*
|
|
17
|
-
* Unless required by applicable law or agreed to in writing, software
|
|
18
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
19
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
20
|
-
* See the License for the specific language governing permissions and
|
|
21
|
-
* limitations under the License. *
|
|
22
|
-
*/
|
|
23
|
-
// Node.js modules
|
|
24
1
|
import os from 'os';
|
|
25
2
|
import { createWriteStream, statSync } from 'fs';
|
|
26
3
|
import path from 'path';
|
|
27
4
|
import * as dns from 'dns';
|
|
28
5
|
import { promises as fs } from 'fs';
|
|
29
|
-
// Package modules
|
|
30
6
|
import archiver from 'archiver';
|
|
31
7
|
import { glob } from 'glob';
|
|
32
|
-
// AnsiLogger module
|
|
33
8
|
import { AnsiLogger, idn, rs } from 'node-ansi-logger';
|
|
34
|
-
const log = new AnsiLogger({ logName: 'MatterbridgeUtils', logTimestampFormat: 4
|
|
35
|
-
/**
|
|
36
|
-
* Performs a deep comparison between two values to determine if they are equivalent.
|
|
37
|
-
* This comparison includes primitive types, arrays, and objects, allowing for optional
|
|
38
|
-
* exclusion of specific properties from the comparison in objects.
|
|
39
|
-
*
|
|
40
|
-
* @param {any} a The first value to compare.
|
|
41
|
-
* @param {any} b The second value to compare.
|
|
42
|
-
* @param {string[]} [excludeProperties=[]] An array of property names to exclude from the comparison in objects.
|
|
43
|
-
* @returns {boolean} True if the values are deeply equal, excluding any specified properties; otherwise, false.
|
|
44
|
-
*
|
|
45
|
-
* Note: This function utilizes recursion for deep comparison of nested structures and includes a debugging
|
|
46
|
-
* mechanism that can be toggled on or off for detailed comparison logging. It is important to ensure that
|
|
47
|
-
* objects do not contain circular references when enabling debug logging to avoid infinite loops.
|
|
48
|
-
*
|
|
49
|
-
* Example usage:
|
|
50
|
-
* ```
|
|
51
|
-
* const obj1 = { a: 1, b: { c: 2 } };
|
|
52
|
-
* const obj2 = { a: 1, b: { c: 2 } };
|
|
53
|
-
* console.log(deepEqual(obj1, obj2)); // true
|
|
54
|
-
*
|
|
55
|
-
* const arr1 = [1, 2, [3, 4]];
|
|
56
|
-
* const arr2 = [1, 2, [3, 4]];
|
|
57
|
-
* console.log(deepEqual(arr1, arr2)); // true
|
|
58
|
-
*
|
|
59
|
-
* const obj3 = { a: 1, b: { c: 2, d: 3 } };
|
|
60
|
-
* const obj4 = { a: 1, b: { c: 2 } };
|
|
61
|
-
* console.log(deepEqual(obj3, obj4, ['d'])); // true, excluding property 'd' from comparison
|
|
62
|
-
* ```
|
|
63
|
-
*/
|
|
64
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
|
+
const log = new AnsiLogger({ logName: 'MatterbridgeUtils', logTimestampFormat: 4, logLevel: "info" });
|
|
65
10
|
export function deepEqual(a, b, excludeProperties = []) {
|
|
66
|
-
// Toggle debugging on or off easily
|
|
67
11
|
const debug = false;
|
|
68
|
-
// Helper function for conditional logging
|
|
69
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
70
12
|
const debugLog = (...messages) => {
|
|
71
13
|
if (debug) {
|
|
72
|
-
// eslint-disable-next-line no-console
|
|
73
14
|
console.log(...messages);
|
|
74
15
|
}
|
|
75
16
|
};
|
|
76
|
-
// If both are the same instance, return true (handles primitives and same object references)
|
|
77
17
|
if (a === b) {
|
|
78
18
|
return true;
|
|
79
19
|
}
|
|
80
|
-
// If types are different, return false
|
|
81
20
|
if (typeof a !== typeof b) {
|
|
82
21
|
debugLog(`deepEqual false for typeof a: ${typeof a} typeof b: ${typeof b}`);
|
|
83
22
|
return false;
|
|
84
23
|
}
|
|
85
|
-
// If one of them is null (and we know they are not equal from the first check), return false
|
|
86
24
|
if (a == null || b == null) {
|
|
87
25
|
debugLog('deepEqual false for == null');
|
|
88
26
|
return false;
|
|
89
27
|
}
|
|
90
|
-
// Handle Arrays
|
|
91
28
|
if (Array.isArray(a) && Array.isArray(b)) {
|
|
92
29
|
if (a.length !== b.length) {
|
|
93
30
|
debugLog(`deepEqual false for array a.length(${a.length}) !== b.length(${b.length})`);
|
|
@@ -103,75 +40,54 @@ export function deepEqual(a, b, excludeProperties = []) {
|
|
|
103
40
|
}
|
|
104
41
|
return true;
|
|
105
42
|
}
|
|
106
|
-
// Handle Objects (and exclude null, functions, and arrays)
|
|
107
43
|
if (typeof a === 'object' && typeof b === 'object') {
|
|
108
44
|
const aProps = Object.getOwnPropertyNames(a).filter((prop) => !excludeProperties.includes(prop));
|
|
109
45
|
const bProps = Object.getOwnPropertyNames(b).filter((prop) => !excludeProperties.includes(prop));
|
|
110
|
-
// If their property lengths are different, they're different objects
|
|
111
46
|
if (aProps.length !== bProps.length) {
|
|
112
47
|
debugLog(`deepEqual false for aProps.length(${aProps.length}) !== bProps.length(${bProps.length})`);
|
|
113
48
|
debugLog(`- aProps.length(${aProps.length}):`, aProps);
|
|
114
49
|
debugLog(`- bProps.length(${bProps.length}):`, bProps);
|
|
115
50
|
return false;
|
|
116
51
|
}
|
|
117
|
-
// Check each property in 'a' to see if it's in 'b' and if it's equal (deep check)
|
|
118
52
|
for (const prop of aProps) {
|
|
119
53
|
if (!Object.prototype.hasOwnProperty.call(b, prop)) {
|
|
120
54
|
debugLog(`deepEqual false for !b.hasOwnProperty(${prop})`);
|
|
121
55
|
return false;
|
|
122
56
|
}
|
|
123
57
|
if (!deepEqual(a[prop], b[prop], excludeProperties)) {
|
|
124
|
-
debugLog(`deepEqual false for !deepEqual(a[${prop}], b[${prop}])`
|
|
58
|
+
debugLog(`deepEqual false for !deepEqual(a[${prop}], b[${prop}])`);
|
|
125
59
|
return false;
|
|
126
60
|
}
|
|
127
61
|
}
|
|
128
62
|
return true;
|
|
129
63
|
}
|
|
130
|
-
// If none of the above, the objects are not equal
|
|
131
64
|
return false;
|
|
132
65
|
}
|
|
133
|
-
/**
|
|
134
|
-
* Creates a deep copy of the given value.
|
|
135
|
-
*
|
|
136
|
-
* @template T - The type of the value being copied.
|
|
137
|
-
* @param {T} value - The value to be copied.
|
|
138
|
-
* @returns {T} - The deep copy of the value.
|
|
139
|
-
*/
|
|
140
66
|
export function deepCopy(value) {
|
|
141
67
|
if (typeof value !== 'object' || value === null) {
|
|
142
|
-
// Primitive value (string, number, boolean, bigint, undefined, symbol) or null
|
|
143
68
|
return value;
|
|
144
69
|
}
|
|
145
70
|
else if (Array.isArray(value)) {
|
|
146
|
-
// Array: Recursively copy each element
|
|
147
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
148
71
|
return value.map((item) => deepCopy(item));
|
|
149
72
|
}
|
|
150
73
|
else if (value instanceof Date) {
|
|
151
|
-
// Date objects
|
|
152
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
153
74
|
return new Date(value.getTime());
|
|
154
75
|
}
|
|
155
76
|
else if (value instanceof Map) {
|
|
156
|
-
// Maps
|
|
157
77
|
const mapCopy = new Map();
|
|
158
78
|
value.forEach((val, key) => {
|
|
159
79
|
mapCopy.set(key, deepCopy(val));
|
|
160
80
|
});
|
|
161
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
162
81
|
return mapCopy;
|
|
163
82
|
}
|
|
164
83
|
else if (value instanceof Set) {
|
|
165
|
-
// Sets
|
|
166
84
|
const setCopy = new Set();
|
|
167
85
|
value.forEach((item) => {
|
|
168
86
|
setCopy.add(deepCopy(item));
|
|
169
87
|
});
|
|
170
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
171
88
|
return setCopy;
|
|
172
89
|
}
|
|
173
90
|
else {
|
|
174
|
-
// Objects: Create a copy with the same prototype as the original
|
|
175
91
|
const proto = Object.getPrototypeOf(value);
|
|
176
92
|
const copy = Object.create(proto);
|
|
177
93
|
for (const key in value) {
|
|
@@ -182,14 +98,9 @@ export function deepCopy(value) {
|
|
|
182
98
|
return copy;
|
|
183
99
|
}
|
|
184
100
|
}
|
|
185
|
-
/**
|
|
186
|
-
* Retrieves the IPv4 address of the first non-internal network interface.
|
|
187
|
-
* @returns {string | undefined} The IPv4 address of the selected network interface, or undefined if not found.
|
|
188
|
-
*/
|
|
189
101
|
export function getIpv4InterfaceAddress() {
|
|
190
102
|
let ipv4Address;
|
|
191
103
|
const networkInterfaces = os.networkInterfaces();
|
|
192
|
-
// console.log('Available Network Interfaces:', networkInterfaces);
|
|
193
104
|
for (const interfaceDetails of Object.values(networkInterfaces)) {
|
|
194
105
|
if (!interfaceDetails) {
|
|
195
106
|
break;
|
|
@@ -203,17 +114,11 @@ export function getIpv4InterfaceAddress() {
|
|
|
203
114
|
break;
|
|
204
115
|
}
|
|
205
116
|
}
|
|
206
|
-
// console.log('Selected Network Interfaces:', ipv4Address);
|
|
207
117
|
return ipv4Address;
|
|
208
118
|
}
|
|
209
|
-
/**
|
|
210
|
-
* Retrieves the IPv6 address of the first non-internal network interface.
|
|
211
|
-
* @returns {string | undefined} The IPv4 address of the selected network interface, or undefined if not found.
|
|
212
|
-
*/
|
|
213
119
|
export function getIpv6InterfaceAddress() {
|
|
214
120
|
let ipv6Address;
|
|
215
121
|
const networkInterfaces = os.networkInterfaces();
|
|
216
|
-
// console.log('Available Network Interfaces:', networkInterfaces);
|
|
217
122
|
for (const interfaceDetails of Object.values(networkInterfaces)) {
|
|
218
123
|
if (!interfaceDetails) {
|
|
219
124
|
break;
|
|
@@ -227,17 +132,11 @@ export function getIpv6InterfaceAddress() {
|
|
|
227
132
|
break;
|
|
228
133
|
}
|
|
229
134
|
}
|
|
230
|
-
// console.log('Selected Network Interfaces:', ipv6Address);
|
|
231
135
|
return ipv6Address;
|
|
232
136
|
}
|
|
233
|
-
/**
|
|
234
|
-
* Retrieves the mac address of the first non-internal network interface.
|
|
235
|
-
* @returns {string | undefined} The IPv4 address of the selected network interface, or undefined if not found.
|
|
236
|
-
*/
|
|
237
137
|
export function getMacAddress() {
|
|
238
138
|
let macAddress;
|
|
239
139
|
const networkInterfaces = os.networkInterfaces();
|
|
240
|
-
// console.log('Available Network Interfaces:', networkInterfaces);
|
|
241
140
|
for (const interfaceDetails of Object.values(networkInterfaces)) {
|
|
242
141
|
if (!interfaceDetails) {
|
|
243
142
|
break;
|
|
@@ -253,25 +152,10 @@ export function getMacAddress() {
|
|
|
253
152
|
}
|
|
254
153
|
return macAddress;
|
|
255
154
|
}
|
|
256
|
-
/**
|
|
257
|
-
* Checks if a given string is a valid IPv4 address.
|
|
258
|
-
*
|
|
259
|
-
* @param {string} ipv4Address - The string to be checked.
|
|
260
|
-
* @returns {boolean} - Returns true if the string is a valid IPv4 address, otherwise returns false.
|
|
261
|
-
*/
|
|
262
155
|
export function isValidIpv4Address(ipv4Address) {
|
|
263
156
|
const ipv4Regex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
|
|
264
157
|
return ipv4Regex.test(ipv4Address);
|
|
265
158
|
}
|
|
266
|
-
/**
|
|
267
|
-
* Checks if a value is a valid number within the specified range.
|
|
268
|
-
*
|
|
269
|
-
* @param {any} value - The value to be checked.
|
|
270
|
-
* @param {number} min - The minimum value allowed (optional).
|
|
271
|
-
* @param {number} max - The maximum value allowed (optional).
|
|
272
|
-
* @returns {boolean} Returns true if the value is a valid number within the specified range, otherwise false.
|
|
273
|
-
*/
|
|
274
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
275
159
|
export function isValidNumber(value, min, max) {
|
|
276
160
|
if (value === undefined || value === null || typeof value !== 'number' || Number.isNaN(value))
|
|
277
161
|
return false;
|
|
@@ -281,25 +165,9 @@ export function isValidNumber(value, min, max) {
|
|
|
281
165
|
return false;
|
|
282
166
|
return true;
|
|
283
167
|
}
|
|
284
|
-
/**
|
|
285
|
-
* Checks if a value is a valid boolean.
|
|
286
|
-
*
|
|
287
|
-
* @param {any} value - The value to be checked.
|
|
288
|
-
* @returns {boolean} `true` if the value is a valid boolean, `false` otherwise.
|
|
289
|
-
*/
|
|
290
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
291
168
|
export function isValidBoolean(value) {
|
|
292
169
|
return value !== undefined && value !== null && typeof value === 'boolean';
|
|
293
170
|
}
|
|
294
|
-
/**
|
|
295
|
-
* Checks if a value is a valid string.
|
|
296
|
-
*
|
|
297
|
-
* @param {any} value - The value to be checked.
|
|
298
|
-
* @param {number} minLength - The min string length (optional).
|
|
299
|
-
* @param {number} maxLength - The max string length (optional).
|
|
300
|
-
* @returns {boolean} A boolean indicating whether the value is a valid string.
|
|
301
|
-
*/
|
|
302
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
303
171
|
export function isValidString(value, minLength, maxLength) {
|
|
304
172
|
if (value === undefined || value === null || typeof value !== 'string')
|
|
305
173
|
return false;
|
|
@@ -309,15 +177,6 @@ export function isValidString(value, minLength, maxLength) {
|
|
|
309
177
|
return false;
|
|
310
178
|
return true;
|
|
311
179
|
}
|
|
312
|
-
/**
|
|
313
|
-
* Checks if a value is a valid object.
|
|
314
|
-
*
|
|
315
|
-
* @param {any} value - The value to be checked.
|
|
316
|
-
* @param {number} minLength - The min number of keys (optional).
|
|
317
|
-
* @param {number} maxLength - The max number of keys (optional).
|
|
318
|
-
* @returns {boolean} A boolean indicating whether the value is a valid object.
|
|
319
|
-
*/
|
|
320
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
321
180
|
export function isValidObject(value, minLength, maxLength) {
|
|
322
181
|
if (value === undefined || value === null || typeof value !== 'object' || Array.isArray(value))
|
|
323
182
|
return false;
|
|
@@ -328,15 +187,6 @@ export function isValidObject(value, minLength, maxLength) {
|
|
|
328
187
|
return false;
|
|
329
188
|
return true;
|
|
330
189
|
}
|
|
331
|
-
/**
|
|
332
|
-
* Checks if a value is a valid array.
|
|
333
|
-
*
|
|
334
|
-
* @param {any} value - The value to be checked.
|
|
335
|
-
* @param {number} minLength - The min number of elements (optional).
|
|
336
|
-
* @param {number} maxLength - The max number of elements (optional).
|
|
337
|
-
* @returns {boolean} A boolean indicating whether the value is a valid array.
|
|
338
|
-
*/
|
|
339
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
340
190
|
export function isValidArray(value, minLength, maxLength) {
|
|
341
191
|
if (value === undefined || value === null || !Array.isArray(value))
|
|
342
192
|
return false;
|
|
@@ -346,33 +196,14 @@ export function isValidArray(value, minLength, maxLength) {
|
|
|
346
196
|
return false;
|
|
347
197
|
return true;
|
|
348
198
|
}
|
|
349
|
-
/**
|
|
350
|
-
* Checks if the given value is null.
|
|
351
|
-
*
|
|
352
|
-
* @param {any} value - The value to check.
|
|
353
|
-
* @returns {boolean} `true` if the value is null, `false` otherwise.
|
|
354
|
-
*/
|
|
355
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
356
199
|
export function isValidNull(value) {
|
|
357
200
|
return value === null;
|
|
358
201
|
}
|
|
359
|
-
/**
|
|
360
|
-
* Checks if a value is undefined.
|
|
361
|
-
*
|
|
362
|
-
* @param {any} value - The value to check.
|
|
363
|
-
* @returns {boolean} `true` if the value is undefined, `false` otherwise.
|
|
364
|
-
*/
|
|
365
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
366
202
|
export function isValidUndefined(value) {
|
|
367
203
|
return value === undefined;
|
|
368
204
|
}
|
|
369
|
-
/**
|
|
370
|
-
* Logs the available network interfaces and their details.
|
|
371
|
-
* @param {boolean} log - Whether to enable logging of network interface details.
|
|
372
|
-
* @returns {string | undefined} The IPv6 address of the network interface, if available.
|
|
373
|
-
*/
|
|
374
205
|
export function logInterfaces(debug = true) {
|
|
375
|
-
log.logLevel = "info"
|
|
206
|
+
log.logLevel = "info";
|
|
376
207
|
log.logName = 'LogInterfaces';
|
|
377
208
|
let ipv6Address;
|
|
378
209
|
const networkInterfaces = os.networkInterfaces();
|
|
@@ -390,18 +221,8 @@ export function logInterfaces(debug = true) {
|
|
|
390
221
|
}
|
|
391
222
|
return ipv6Address;
|
|
392
223
|
}
|
|
393
|
-
/**
|
|
394
|
-
* Asynchronous waiter function that resolves when the provided condition is met or rejects on timeout.
|
|
395
|
-
* @param {string} name - The name of the waiter.
|
|
396
|
-
* @param {() => boolean} check - A function that checks the condition. Should return a boolean.
|
|
397
|
-
* @param {boolean} [exitWithReject=false] - Optional. If true, the promise will be rejected on timeout. Default is false.
|
|
398
|
-
* @param {number} [resolveTimeout=5000] - Optional. The timeout duration in milliseconds. Default is 5000ms.
|
|
399
|
-
* @param {number} [resolveInterval=500] - Optional. The interval duration in milliseconds between condition checks. Default is 500ms.
|
|
400
|
-
* @param {boolean} [debug=false] - Optional. If true, debug messages will be logged to the console. Default is false.
|
|
401
|
-
* @returns {Promise<boolean>} A promise that resolves to true when the condition is met, or false if the timeout occurs.
|
|
402
|
-
*/
|
|
403
224
|
export async function waiter(name, check, exitWithReject = false, resolveTimeout = 5000, resolveInterval = 500, debug = false) {
|
|
404
|
-
log.logLevel = "debug"
|
|
225
|
+
log.logLevel = "debug";
|
|
405
226
|
log.logName = 'Waiter';
|
|
406
227
|
if (debug)
|
|
407
228
|
log.debug(`Waiter "${name}" started...`);
|
|
@@ -427,19 +248,11 @@ export async function waiter(name, check, exitWithReject = false, resolveTimeout
|
|
|
427
248
|
}, resolveInterval);
|
|
428
249
|
});
|
|
429
250
|
}
|
|
430
|
-
/**
|
|
431
|
-
* Asynchronously waits for a specified amount of time.
|
|
432
|
-
* @param {number} timeout - The duration to wait in milliseconds. Default is 1000ms.
|
|
433
|
-
* @param {string} name - The name of the wait operation. Default is undefined.
|
|
434
|
-
* @param {boolean} debug - Whether to enable debug logging. Default is false.
|
|
435
|
-
* @returns {Promise<void>} A Promise that resolves after the specified timeout.
|
|
436
|
-
*/
|
|
437
251
|
export async function wait(timeout = 1000, name, debug = false) {
|
|
438
|
-
log.logLevel = "debug"
|
|
252
|
+
log.logLevel = "debug";
|
|
439
253
|
log.logName = 'Wait';
|
|
440
254
|
if (debug)
|
|
441
255
|
log.debug(`Wait "${name}" started...`);
|
|
442
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
443
256
|
return new Promise((resolve, reject) => {
|
|
444
257
|
const timeoutId = setTimeout(() => {
|
|
445
258
|
if (debug)
|
|
@@ -449,28 +262,14 @@ export async function wait(timeout = 1000, name, debug = false) {
|
|
|
449
262
|
}, timeout);
|
|
450
263
|
});
|
|
451
264
|
}
|
|
452
|
-
/**
|
|
453
|
-
* Creates a ZIP archive from the specified source pattern or directory and writes it to the specified output path.
|
|
454
|
-
*
|
|
455
|
-
* @param {string} outputPath - The path where the output ZIP file will be written.
|
|
456
|
-
* @param {string[]} sourcePaths - The source pattern or directory to be zipped (use path.join for sourcePath).
|
|
457
|
-
* @returns {Promise<number>} - A promise that resolves to the total number of bytes written to the ZIP file.
|
|
458
|
-
*
|
|
459
|
-
* @remarks
|
|
460
|
-
* This function uses the `archiver` library to create a ZIP archive. It sets the compression level to 9 (maximum compression).
|
|
461
|
-
* The function ensures that the output file is properly closed after the archiving process is complete.
|
|
462
|
-
* It logs the progress and the total number of bytes written to the console.
|
|
463
|
-
*
|
|
464
|
-
* This function uses the `glob` library to match files based on the source pattern (internally converted in posix).
|
|
465
|
-
*/
|
|
466
265
|
export async function createZip(outputPath, ...sourcePaths) {
|
|
467
|
-
log.logLevel = "info"
|
|
266
|
+
log.logLevel = "info";
|
|
468
267
|
log.logName = 'Archive';
|
|
469
268
|
log.debug(`creating archive ${outputPath} from ${sourcePaths.join(', ')} ...`);
|
|
470
269
|
return new Promise((resolve, reject) => {
|
|
471
270
|
const output = createWriteStream(outputPath);
|
|
472
271
|
const archive = archiver('zip', {
|
|
473
|
-
zlib: { level: 9 },
|
|
272
|
+
zlib: { level: 9 },
|
|
474
273
|
});
|
|
475
274
|
output.on('close', () => {
|
|
476
275
|
log.debug(`archive ${outputPath} closed with ${archive.pointer()} total bytes`);
|
|
@@ -497,7 +296,6 @@ export async function createZip(outputPath, ...sourcePaths) {
|
|
|
497
296
|
});
|
|
498
297
|
archive.pipe(output);
|
|
499
298
|
for (const sourcePath of sourcePaths) {
|
|
500
|
-
// Check if the sourcePath is a file or directory
|
|
501
299
|
let stats;
|
|
502
300
|
try {
|
|
503
301
|
stats = statSync(sourcePath);
|
|
@@ -525,35 +323,22 @@ export async function createZip(outputPath, ...sourcePaths) {
|
|
|
525
323
|
archive.directory(sourcePath, path.basename(sourcePath));
|
|
526
324
|
}
|
|
527
325
|
}
|
|
528
|
-
// Finalize the archive (i.e., we are done appending files but streams have to finish yet)
|
|
529
326
|
log.debug(`finalizing archive ${outputPath}...`);
|
|
530
327
|
archive.finalize().catch(reject);
|
|
531
328
|
});
|
|
532
329
|
}
|
|
533
|
-
/**
|
|
534
|
-
* Copies a directory and all its subdirectories and files to a new location.
|
|
535
|
-
*
|
|
536
|
-
* @param {string} srcDir - The path to the source directory.
|
|
537
|
-
* @param {string} destDir - The path to the destination directory.
|
|
538
|
-
* @returns {Promise<boolean>} - A promise that resolves when the copy operation is complete or fails for error.
|
|
539
|
-
* @throws {Error} - Throws an error if the copy operation fails.
|
|
540
|
-
*/
|
|
541
330
|
export async function copyDirectory(srcDir, destDir) {
|
|
542
331
|
log.debug(`copyDirectory: copying directory from ${srcDir} to ${destDir}`);
|
|
543
332
|
try {
|
|
544
|
-
// Create destination directory if it doesn't exist
|
|
545
333
|
await fs.mkdir(destDir, { recursive: true });
|
|
546
|
-
// Read contents of the source directory
|
|
547
334
|
const entries = await fs.readdir(srcDir, { withFileTypes: true });
|
|
548
335
|
for (const entry of entries) {
|
|
549
336
|
const srcPath = path.join(srcDir, entry.name);
|
|
550
337
|
const destPath = path.join(destDir, entry.name);
|
|
551
338
|
if (entry.isDirectory()) {
|
|
552
|
-
// Recursive call if entry is a directory
|
|
553
339
|
await copyDirectory(srcPath, destPath);
|
|
554
340
|
}
|
|
555
341
|
else if (entry.isFile()) {
|
|
556
|
-
// Copy file if entry is a file
|
|
557
342
|
await fs.copyFile(srcPath, destPath);
|
|
558
343
|
}
|
|
559
344
|
}
|
|
@@ -564,32 +349,15 @@ export async function copyDirectory(srcDir, destDir) {
|
|
|
564
349
|
return false;
|
|
565
350
|
}
|
|
566
351
|
}
|
|
567
|
-
/**
|
|
568
|
-
* Resolves the given hostname to an IP address.
|
|
569
|
-
*
|
|
570
|
-
* @param {string} hostname - The hostname to resolve.
|
|
571
|
-
* @param {0 | 4 | 6} [family=4] - The address family to use (0 for any, 4 for IPv4, 6 for IPv6). Default is 4.
|
|
572
|
-
* @returns {Promise<string | null>} - A promise that resolves to the IP address or null if not found.
|
|
573
|
-
*
|
|
574
|
-
* @remarks
|
|
575
|
-
* This function uses DNS lookup to resolve the hostname, which can take some time to complete.
|
|
576
|
-
*/
|
|
577
352
|
export async function resolveHostname(hostname, family = 4) {
|
|
578
353
|
try {
|
|
579
354
|
const addresses = await dns.promises.lookup(hostname.toLowerCase() + '.local', { family });
|
|
580
355
|
return addresses.address;
|
|
581
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
582
356
|
}
|
|
583
357
|
catch (error) {
|
|
584
358
|
return null;
|
|
585
359
|
}
|
|
586
360
|
}
|
|
587
|
-
/**
|
|
588
|
-
* Retrieves the value of a command-line parameter.
|
|
589
|
-
*
|
|
590
|
-
* @param {string} name - The name of the parameter to retrieve.
|
|
591
|
-
* @returns {string | undefined} The value of the parameter, or undefined if not found.
|
|
592
|
-
*/
|
|
593
361
|
export function getParameter(name) {
|
|
594
362
|
const commandArguments = process.argv.slice(2);
|
|
595
363
|
let markerIndex = commandArguments.indexOf(`-${name}`);
|
|
@@ -599,12 +367,6 @@ export function getParameter(name) {
|
|
|
599
367
|
return undefined;
|
|
600
368
|
return commandArguments[markerIndex + 1];
|
|
601
369
|
}
|
|
602
|
-
/**
|
|
603
|
-
* Checks if a command-line parameter is present.
|
|
604
|
-
*
|
|
605
|
-
* @param {string} name - The name of the parameter to check.
|
|
606
|
-
* @returns {boolean} True if the parameter is present, otherwise false.
|
|
607
|
-
*/
|
|
608
370
|
export function hasParameter(name) {
|
|
609
371
|
const commandArguments = process.argv.slice(2);
|
|
610
372
|
let markerIncluded = commandArguments.includes(`-${name}`);
|
|
@@ -612,12 +374,6 @@ export function hasParameter(name) {
|
|
|
612
374
|
markerIncluded = commandArguments.includes(`--${name}`);
|
|
613
375
|
return markerIncluded;
|
|
614
376
|
}
|
|
615
|
-
/**
|
|
616
|
-
* Retrieves the value of a command-line parameter as an integer.
|
|
617
|
-
*
|
|
618
|
-
* @param {string} name - The name of the parameter to retrieve.
|
|
619
|
-
* @returns {number | undefined} The integer value of the parameter, or undefined if not found or invalid.
|
|
620
|
-
*/
|
|
621
377
|
export function getIntParameter(name) {
|
|
622
378
|
const value = getParameter(name);
|
|
623
379
|
if (value === undefined)
|
|
@@ -627,4 +383,3 @@ export function getIntParameter(name) {
|
|
|
627
383
|
return undefined;
|
|
628
384
|
return intValue;
|
|
629
385
|
}
|
|
630
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"files": {
|
|
3
|
-
"main.css": "./static/css/main.
|
|
4
|
-
"main.js": "./static/js/main.
|
|
3
|
+
"main.css": "./static/css/main.b1a621ee.css",
|
|
4
|
+
"main.js": "./static/js/main.0cc31fc9.js",
|
|
5
5
|
"static/js/453.abd36b29.chunk.js": "./static/js/453.abd36b29.chunk.js",
|
|
6
6
|
"static/media/roboto-latin-700-normal.woff2": "./static/media/roboto-latin-700-normal.4535474e1cf8598695ad.woff2",
|
|
7
7
|
"static/media/roboto-latin-500-normal.woff2": "./static/media/roboto-latin-500-normal.7077203b1982951ecf76.woff2",
|
|
@@ -60,12 +60,12 @@
|
|
|
60
60
|
"static/media/roboto-greek-ext-300-normal.woff": "./static/media/roboto-greek-ext-300-normal.b590dbe5c639944366d1.woff",
|
|
61
61
|
"static/media/roboto-greek-ext-400-normal.woff": "./static/media/roboto-greek-ext-400-normal.16eb83b4a3b1ea994243.woff",
|
|
62
62
|
"index.html": "./index.html",
|
|
63
|
-
"main.
|
|
64
|
-
"main.
|
|
63
|
+
"main.b1a621ee.css.map": "./static/css/main.b1a621ee.css.map",
|
|
64
|
+
"main.0cc31fc9.js.map": "./static/js/main.0cc31fc9.js.map",
|
|
65
65
|
"453.abd36b29.chunk.js.map": "./static/js/453.abd36b29.chunk.js.map"
|
|
66
66
|
},
|
|
67
67
|
"entrypoints": [
|
|
68
|
-
"static/css/main.
|
|
69
|
-
"static/js/main.
|
|
68
|
+
"static/css/main.b1a621ee.css",
|
|
69
|
+
"static/js/main.0cc31fc9.js"
|
|
70
70
|
]
|
|
71
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><base href="./"><link rel="icon" href="./matterbridge 32x32.png"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><title>Matterbridge</title><link rel="manifest" href="./manifest.json"/><script defer="defer" src="./static/js/main.
|
|
1
|
+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><base href="./"><link rel="icon" href="./matterbridge 32x32.png"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><title>Matterbridge</title><link rel="manifest" href="./manifest.json"/><script defer="defer" src="./static/js/main.0cc31fc9.js"></script><link href="./static/css/main.b1a621ee.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(../../static/media/roboto-cyrillic-ext-300-normal.80947a31d23c70204b47.woff2) format("woff2"),url(../../static/media/roboto-cyrillic-ext-300-normal.795dbc8140e3fef82983.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(../../static/media/roboto-cyrillic-300-normal.1b79538ccd585c259996.woff2) format("woff2"),url(../../static/media/roboto-cyrillic-300-normal.5f077fd7b977d1715acf.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(../../static/media/roboto-greek-ext-300-normal.d6049cb54aa6fbe14c42.woff2) format("woff2"),url(../../static/media/roboto-greek-ext-300-normal.b590dbe5c639944366d1.woff) format("woff");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(../../static/media/roboto-greek-300-normal.285f3e6261d8eb20417d.woff2) format("woff2"),url(../../static/media/roboto-greek-300-normal.889beddda1c9bd9f97df.woff) format("woff");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(../../static/media/roboto-vietnamese-300-normal.c96b16e5c05c7b7c3e89.woff2) format("woff2"),url(../../static/media/roboto-vietnamese-300-normal.f5e7cea32756dfe7af40.woff) format("woff");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(../../static/media/roboto-latin-ext-300-normal.97cbc447d4a8d41a9543.woff2) format("woff2"),url(../../static/media/roboto-latin-ext-300-normal.14982a9e4857a93b6dce.woff) format("woff");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(../../static/media/roboto-latin-300-normal.b850f1ff581ea232fac9.woff2) format("woff2"),url(../../static/media/roboto-latin-300-normal.c4bc0593c9954d79cb3a.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(../../static/media/roboto-cyrillic-ext-400-normal.5cec61a21cc20180fbe1.woff2) format("woff2"),url(../../static/media/roboto-cyrillic-ext-400-normal.135d076fa32aa0b4d105.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(../../static/media/roboto-cyrillic-400-normal.a9e19870cf6c4b973427.woff2) format("woff2"),url(../../static/media/roboto-cyrillic-400-normal.5d2930082227d172f62c.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(../../static/media/roboto-greek-ext-400-normal.1df4abad55796d11a0c8.woff2) format("woff2"),url(../../static/media/roboto-greek-ext-400-normal.16eb83b4a3b1ea994243.woff) format("woff");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(../../static/media/roboto-greek-400-normal.2c32b1315be61477013a.woff2) format("woff2"),url(../../static/media/roboto-greek-400-normal.160a791a8e4f46bca3cc.woff) format("woff");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(../../static/media/roboto-vietnamese-400-normal.d3f8e26d6c27de8102b6.woff2) format("woff2"),url(../../static/media/roboto-vietnamese-400-normal.0dc97c66f9b542d6fa17.woff) format("woff");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(../../static/media/roboto-latin-ext-400-normal.2eeae187764baf05867d.woff2) format("woff2"),url(../../static/media/roboto-latin-ext-400-normal.27da5b36b6d3a16f53f4.woff) format("woff");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(../../static/media/roboto-latin-400-normal.297d48e1b5a10c0831a9.woff2) format("woff2"),url(../../static/media/roboto-latin-400-normal.047a7839f69b209db815.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(../../static/media/roboto-cyrillic-ext-500-normal.6de16332fda843a3dc3d.woff2) format("woff2"),url(../../static/media/roboto-cyrillic-ext-500-normal.c0a0638f90b31d6454ba.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(../../static/media/roboto-cyrillic-500-normal.0ae2428323939af5e1ad.woff2) format("woff2"),url(../../static/media/roboto-cyrillic-500-normal.dd7bc8a52c6c70c5a3f5.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(../../static/media/roboto-greek-ext-500-normal.4a96ba31abcce0f5d52b.woff2) format("woff2"),url(../../static/media/roboto-greek-ext-500-normal.fd28d9c008bf3af1bed7.woff) format("woff");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(../../static/media/roboto-greek-500-normal.f95e757c5483310f9c11.woff2) format("woff2"),url(../../static/media/roboto-greek-500-normal.60810e07c7b0273013aa.woff) format("woff");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(../../static/media/roboto-vietnamese-500-normal.090fabef926bdc0e9b9f.woff2) format("woff2"),url(../../static/media/roboto-vietnamese-500-normal.23b7b8a2524d2d4b637b.woff) format("woff");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(../../static/media/roboto-latin-ext-500-normal.9a18d7bb9ff7a6af7b32.woff2) format("woff2"),url(../../static/media/roboto-latin-ext-500-normal.06c30711d588145a4541.woff) format("woff");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(../../static/media/roboto-latin-500-normal.7077203b1982951ecf76.woff2) format("woff2"),url(../../static/media/roboto-latin-500-normal.68d40d6d01c6f85d24ba.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(../../static/media/roboto-cyrillic-ext-700-normal.4750292c47fa2bc6ac1a.woff2) format("woff2"),url(../../static/media/roboto-cyrillic-ext-700-normal.ca247189fc12d00de361.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(../../static/media/roboto-cyrillic-700-normal.4fdfc29a10e7d4b7c527.woff2) format("woff2"),url(../../static/media/roboto-cyrillic-700-normal.3f6e1548bd5175a8c342.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(../../static/media/roboto-greek-ext-700-normal.2dd6febad11502dec6a6.woff2) format("woff2"),url(../../static/media/roboto-greek-ext-700-normal.4abdc9fff4507f17d726.woff) format("woff");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(../../static/media/roboto-greek-700-normal.77dd370f2001e184ba0d.woff2) format("woff2"),url(../../static/media/roboto-greek-700-normal.df87b053fae3d7ad5f7a.woff) format("woff");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(../../static/media/roboto-vietnamese-700-normal.0a79a9fabfc32e33f360.woff2) format("woff2"),url(../../static/media/roboto-vietnamese-700-normal.35ed0597568ff6f19c16.woff) format("woff");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(../../static/media/roboto-latin-ext-700-normal.18841836e391d39e83a8.woff2) format("woff2"),url(../../static/media/roboto-latin-ext-700-normal.3c5bcdd0e69c4c3ffafe.woff) format("woff");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(../../static/media/roboto-latin-700-normal.4535474e1cf8598695ad.woff2) format("woff2"),url(../../static/media/roboto-latin-700-normal.9f6a16a7770c87b2042b.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}[frontend-theme=classic]{--main-bg-color:#c4c2c2;--main-text-color:#000;--main-grey-color:#616161;--main-light-color:#959595;--main-icon-color:#4d4d4d;--main-log-color:var(--main-text-color);--main-button-color:#fff;--main-button-bg-color:var(--primary-color);--main-menu-color:#26292d;--main-menu-bg-color:#e2e2e2;--main-menu-hover-color:#959595;--main-label-color:var(--main-grey-color);--primary-color:#009a00;--secondary-color:#a58827;--header-bg-color:var(--primary-color);--header-text-color:#fff;--footer-bg-color:var(--div-bg-color);--footer-text-color:var(--div-text-color);--ttip-bg-color:#555;--ttip-text-color:#fff;--table-border-color:#ddd;--table-text-color:#000;--table-even-bg-color:#bdbdbd;--table-odd-bg-color:var(--div-bg-color);--table-hover-bg-color:#5f8c9e;--table-selected-bg-color:#5f8c9e;--div-bg-color:#adadad;--div-text-color:#000;--div-shadow-color:#888;--div-border-color:#8b8b8b;--div-border-radius:0px;--div-title-bg-color:var(--div-bg-color);--div-title-text-color:#000;background-color:var(--main-bg-color);color:var(--main-text-color);font-family:Roboto,Helvetica,Arial,sans-serif}[frontend-theme=dark]{--main-bg-color:#26292d;--main-text-color:#fff;--main-grey-color:#616161;--main-light-color:#959595;--main-icon-color:var(--main-light-color);--main-log-color:var(--main-light-color);--main-button-color:#fff;--main-button-bg-color:var(--primary-color);--main-menu-color:var(--main-light-color);--main-menu-bg-color:var(--main-bg-color);--main-menu-hover-color:var(--div-bg-color);--main-label-color:var(--main-grey-color);--primary-color:#1976d2;--secondary-color:#a58827;--header-bg-color:var(--div-bg-color);--header-text-color:var(--primary-color);--footer-bg-color:var(--div-bg-color);--footer-text-color:var(--div-text-color);--ttip-bg-color:#555;--ttip-text-color:#fff;--table-border-color:var(--div-bg-color);--table-text-color:var(--main-light-color);--table-even-bg-color:var(--div-bg-color);--table-odd-bg-color:var(--div-bg-color);--table-hover-bg-color:var(--main-bg-color);--table-selected-bg-color:var(--main-bg-color);--div-bg-color:#1b1d21;--div-text-color:var(--main-light-color);--div-shadow-color:#34373d;--div-border-color:#1b1d21;--div-border-radius:5px;--div-title-bg-color:#1b1d21;--div-title-text-color:var(--primary-color)}[frontend-theme=dark],[frontend-theme=light]{background-color:var(--main-bg-color);color:var(--main-text-color);font-family:Roboto,Helvetica,Arial,sans-serif}[frontend-theme=light]{--main-bg-color:#f0f0f0;--main-text-color:#212121;--main-grey-color:#616161;--main-light-color:#363636;--main-icon-color:#7a7a7a;--main-log-color:var(--main-light-color);--main-button-color:#fff;--main-button-bg-color:var(--primary-color);--main-menu-color:var(--main-text-color);--main-menu-bg-color:var(--div-bg-color);--main-menu-hover-color:#85c0d8;--main-label-color:var(--main-grey-color);--primary-color:#2196f3;--secondary-color:#a58827;--header-bg-color:var(--div-bg-color);--header-text-color:var(--div-text-color);--footer-bg-color:var(--div-bg-color);--footer-text-color:var(--div-text-color);--ttip-bg-color:#555;--ttip-text-color:#fff;--table-border-color:var(--div-bg-color);--table-text-color:var(--main-light-color);--table-even-bg-color:var(--div-bg-color);--table-odd-bg-color:var(--div-bg-color);--table-hover-bg-color:#85c0d8;--table-selected-bg-color:#85c0d8;--div-bg-color:#fff;--div-text-color:#212121;--div-shadow-color:#bfbfbf;--div-border-color:var(--div-bg-color);--div-border-radius:5px;--div-title-bg-color:var(--div-bg-color);--div-title-text-color:var(--div-text-color)}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:var(--primary-color);border-radius:5px}::-webkit-scrollbar-track{background:"inherit"}html{scrollbar-color:var(--primary-color) var(--div-bg-color);scrollbar-width:thin}.tooltip-container{display:inline-block;position:relative}.tooltip-text{background-color:var(--ttip-bg-color);border-radius:6px;bottom:calc(100% + 10px);color:var(--ttip-text-color);font-size:12px;left:50%;margin-left:-60px;opacity:0;padding:5px;position:absolute;text-align:center;transition:opacity .3s;visibility:hidden;z-index:1}.tooltip-container:hover{cursor:pointer}.tooltip-container:hover .tooltip-text{opacity:1;visibility:visible}.status-enabled{background-color:green}.status-disabled,.status-enabled{border-radius:.25rem;box-shadow:2px 2px 2px #0003;color:#fff;cursor:pointer;font-size:12px;padding:.2rem;text-align:center}.status-disabled{background-color:red}.status-information{background-color:#9e9e9e;color:#fff}.status-information,.status-warning{border-radius:.25rem;box-shadow:2px 2px 2px #0003;cursor:pointer;font-size:12px;padding:2px 10px;text-align:center}.status-warning{background-color:#e9db18;color:#000}.status-sponsor{background-color:#b6409c;padding:2px 10px}.status-blue,.status-sponsor{border-radius:.25rem;box-shadow:2px 2px 2px #0003;color:#fff;cursor:pointer;font-size:12px;text-align:center}.status-blue{background-color:#5f8c9e;padding:.2rem}.PluginsIconButton{color:#000;gap:0;padding:0}.main-background{background-color:var(--main-bg-color)}.header{flex-direction:row;justify-content:space-between}.header,.sub-header{align-items:center;display:flex;gap:20px;height:40px;margin:0;padding:0}.sub-header{flex:0 0 auto;flex-direction:row}nav{align-items:center;display:flex}.nav-link{color:var(--main-icon-color);font-size:20px;margin:0 10px;text-decoration:none;transition:color .3s ease}.nav-link:hover{color:var(--primary-color)}table{border-collapse:collapse;width:100%}thead{border:1px solid var(--table-border-color);position:sticky;top:0;z-index:auto}thead th{background:var(--header-bg-color);color:var(--header-text-color)}tbody td,thead th{border:1px solid var(--table-border-color);padding:5px 10px;text-align:left}tbody td{font-size:14px;margin:0}tbody tr:hover{background-color:var(--table-hover-bg-color);color:var(--table-text-color)}.table-content-even{background-color:var(--table-even-bg-color);color:var(--table-text-color)}.table-content-odd{background-color:var(--table-odd-bg-color);color:var(--table-text-color)}.table-content-selected{background-color:var(--table-selected-bg-color);color:var(--table-text-color)}h3{margin:0}.MbfScreen{background-color:var(--main-bg-color);height:calc(100vh - 40px);padding:20px;width:calc(100vw - 40px)}.MbfPageDiv,.MbfScreen{display:flex;flex-direction:column;gap:20px;margin:0}.MbfPageDiv{height:calc(100% - 60px);padding:0;width:100%}.MbfWindowDiv{background-color:var(--div-bg-color);border:1px solid var(--table-border-color);border-radius:var(--div-border-radius);box-shadow:5px 5px 10px var(--div-shadow-color);box-sizing:border-box}.MbfWindowDiv,.MbfWindowDivTable{display:flex;flex-direction:column}.MbfWindowDivTable{display:block;flex:1 1 auto;gap:0;margin:-1px;overflow:auto;padding:0}.MbfWindowHeader{align-items:center;background-color:var(--header-bg-color);border-bottom:1px solid var(--table-border-color);box-sizing:border-box;display:"flex";padding:0;width:100%}.MbfWindowHeader,.MbfWindowHeaderText{color:var(--header-text-color);margin:0}.MbfWindowHeaderText{font-weight:700;padding:5px 10px}.MbfWindowFooter{align-items:center;display:"flex";height:40px;justify-content:center;padding:0 10px 10px}.MbfWindowFooter,.MbfWindowFooterText{background-color:var(--footer-bg-color);color:var(--footer-text-color);margin:0}.MbfWindowFooterText{font-weight:700;padding:5px;text-align:center}.MbfWindowBodyColumn{flex:1 1 auto;flex-direction:column;padding:10px 0;width:100%}.MbfWindowBodyColumn,.MbfWindowBodyRow{display:flex;gap:0;margin:0;overflow:auto}.MbfWindowBodyRow{flex:1 1 auto;flex-direction:row;height:100%;padding:0}.configSubmitButton{display:flex;flex-direction:row;justify-content:center;margin:20px;width:auto}.configSubmitButton button{width:auto}@media (max-width:1300px){.MbfScreen{height:1024px;width:1300px}.xxxheader{flex-direction:column}.xxxheader,.xxxsub-header{align-items:start;justify-content:start}}
|
|
2
|
-
/*# sourceMappingURL=main.
|
|
1
|
+
@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(../../static/media/roboto-cyrillic-ext-300-normal.80947a31d23c70204b47.woff2) format("woff2"),url(../../static/media/roboto-cyrillic-ext-300-normal.795dbc8140e3fef82983.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(../../static/media/roboto-cyrillic-300-normal.1b79538ccd585c259996.woff2) format("woff2"),url(../../static/media/roboto-cyrillic-300-normal.5f077fd7b977d1715acf.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(../../static/media/roboto-greek-ext-300-normal.d6049cb54aa6fbe14c42.woff2) format("woff2"),url(../../static/media/roboto-greek-ext-300-normal.b590dbe5c639944366d1.woff) format("woff");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(../../static/media/roboto-greek-300-normal.285f3e6261d8eb20417d.woff2) format("woff2"),url(../../static/media/roboto-greek-300-normal.889beddda1c9bd9f97df.woff) format("woff");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(../../static/media/roboto-vietnamese-300-normal.c96b16e5c05c7b7c3e89.woff2) format("woff2"),url(../../static/media/roboto-vietnamese-300-normal.f5e7cea32756dfe7af40.woff) format("woff");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(../../static/media/roboto-latin-ext-300-normal.97cbc447d4a8d41a9543.woff2) format("woff2"),url(../../static/media/roboto-latin-ext-300-normal.14982a9e4857a93b6dce.woff) format("woff");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:300;src:url(../../static/media/roboto-latin-300-normal.b850f1ff581ea232fac9.woff2) format("woff2"),url(../../static/media/roboto-latin-300-normal.c4bc0593c9954d79cb3a.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(../../static/media/roboto-cyrillic-ext-400-normal.5cec61a21cc20180fbe1.woff2) format("woff2"),url(../../static/media/roboto-cyrillic-ext-400-normal.135d076fa32aa0b4d105.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(../../static/media/roboto-cyrillic-400-normal.a9e19870cf6c4b973427.woff2) format("woff2"),url(../../static/media/roboto-cyrillic-400-normal.5d2930082227d172f62c.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(../../static/media/roboto-greek-ext-400-normal.1df4abad55796d11a0c8.woff2) format("woff2"),url(../../static/media/roboto-greek-ext-400-normal.16eb83b4a3b1ea994243.woff) format("woff");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(../../static/media/roboto-greek-400-normal.2c32b1315be61477013a.woff2) format("woff2"),url(../../static/media/roboto-greek-400-normal.160a791a8e4f46bca3cc.woff) format("woff");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(../../static/media/roboto-vietnamese-400-normal.d3f8e26d6c27de8102b6.woff2) format("woff2"),url(../../static/media/roboto-vietnamese-400-normal.0dc97c66f9b542d6fa17.woff) format("woff");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(../../static/media/roboto-latin-ext-400-normal.2eeae187764baf05867d.woff2) format("woff2"),url(../../static/media/roboto-latin-ext-400-normal.27da5b36b6d3a16f53f4.woff) format("woff");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(../../static/media/roboto-latin-400-normal.297d48e1b5a10c0831a9.woff2) format("woff2"),url(../../static/media/roboto-latin-400-normal.047a7839f69b209db815.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(../../static/media/roboto-cyrillic-ext-500-normal.6de16332fda843a3dc3d.woff2) format("woff2"),url(../../static/media/roboto-cyrillic-ext-500-normal.c0a0638f90b31d6454ba.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(../../static/media/roboto-cyrillic-500-normal.0ae2428323939af5e1ad.woff2) format("woff2"),url(../../static/media/roboto-cyrillic-500-normal.dd7bc8a52c6c70c5a3f5.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(../../static/media/roboto-greek-ext-500-normal.4a96ba31abcce0f5d52b.woff2) format("woff2"),url(../../static/media/roboto-greek-ext-500-normal.fd28d9c008bf3af1bed7.woff) format("woff");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(../../static/media/roboto-greek-500-normal.f95e757c5483310f9c11.woff2) format("woff2"),url(../../static/media/roboto-greek-500-normal.60810e07c7b0273013aa.woff) format("woff");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(../../static/media/roboto-vietnamese-500-normal.090fabef926bdc0e9b9f.woff2) format("woff2"),url(../../static/media/roboto-vietnamese-500-normal.23b7b8a2524d2d4b637b.woff) format("woff");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(../../static/media/roboto-latin-ext-500-normal.9a18d7bb9ff7a6af7b32.woff2) format("woff2"),url(../../static/media/roboto-latin-ext-500-normal.06c30711d588145a4541.woff) format("woff");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(../../static/media/roboto-latin-500-normal.7077203b1982951ecf76.woff2) format("woff2"),url(../../static/media/roboto-latin-500-normal.68d40d6d01c6f85d24ba.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(../../static/media/roboto-cyrillic-ext-700-normal.4750292c47fa2bc6ac1a.woff2) format("woff2"),url(../../static/media/roboto-cyrillic-ext-700-normal.ca247189fc12d00de361.woff) format("woff");unicode-range:u+0460-052f,u+1c80-1c88,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(../../static/media/roboto-cyrillic-700-normal.4fdfc29a10e7d4b7c527.woff2) format("woff2"),url(../../static/media/roboto-cyrillic-700-normal.3f6e1548bd5175a8c342.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(../../static/media/roboto-greek-ext-700-normal.2dd6febad11502dec6a6.woff2) format("woff2"),url(../../static/media/roboto-greek-ext-700-normal.4abdc9fff4507f17d726.woff) format("woff");unicode-range:u+1f??}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(../../static/media/roboto-greek-700-normal.77dd370f2001e184ba0d.woff2) format("woff2"),url(../../static/media/roboto-greek-700-normal.df87b053fae3d7ad5f7a.woff) format("woff");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(../../static/media/roboto-vietnamese-700-normal.0a79a9fabfc32e33f360.woff2) format("woff2"),url(../../static/media/roboto-vietnamese-700-normal.35ed0597568ff6f19c16.woff) format("woff");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(../../static/media/roboto-latin-ext-700-normal.18841836e391d39e83a8.woff2) format("woff2"),url(../../static/media/roboto-latin-ext-700-normal.3c5bcdd0e69c4c3ffafe.woff) format("woff");unicode-range:u+0100-02af,u+0304,u+0308,u+0329,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:700;src:url(../../static/media/roboto-latin-700-normal.4535474e1cf8598695ad.woff2) format("woff2"),url(../../static/media/roboto-latin-700-normal.9f6a16a7770c87b2042b.woff) format("woff");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+2074,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}[frontend-theme=classic]{--main-bg-color:#c4c2c2;--main-text-color:#000;--main-grey-color:#616161;--main-light-color:#959595;--main-icon-color:#4d4d4d;--main-log-color:var(--main-text-color);--main-button-color:#fff;--main-button-bg-color:var(--primary-color);--main-menu-color:#26292d;--main-menu-bg-color:#e2e2e2;--main-menu-hover-color:#959595;--main-label-color:var(--main-grey-color);--primary-color:#009a00;--secondary-color:#a58827;--header-bg-color:var(--primary-color);--header-text-color:#fff;--footer-bg-color:var(--div-bg-color);--footer-text-color:var(--div-text-color);--ttip-bg-color:#555;--ttip-text-color:#fff;--table-border-color:#ddd;--table-text-color:#000;--table-even-bg-color:#bdbdbd;--table-odd-bg-color:var(--div-bg-color);--table-hover-bg-color:#5f8c9e;--table-selected-bg-color:#5f8c9e;--div-bg-color:#adadad;--div-text-color:#000;--div-shadow-color:#888;--div-border-color:#8b8b8b;--div-border-radius:0px;--div-title-bg-color:var(--div-bg-color);--div-title-text-color:#000;background-color:var(--main-bg-color);color:var(--main-text-color);font-family:Roboto,Helvetica,Arial,sans-serif}[frontend-theme=dark]{--main-bg-color:#26292d;--main-text-color:#fff;--main-grey-color:#616161;--main-light-color:#959595;--main-icon-color:var(--main-light-color);--main-log-color:var(--main-light-color);--main-button-color:#fff;--main-button-bg-color:var(--primary-color);--main-menu-color:var(--main-light-color);--main-menu-bg-color:var(--main-bg-color);--main-menu-hover-color:var(--div-bg-color);--main-label-color:var(--main-grey-color);--primary-color:#1976d2;--secondary-color:#a58827;--header-bg-color:var(--div-bg-color);--header-text-color:var(--primary-color);--footer-bg-color:var(--div-bg-color);--footer-text-color:var(--div-text-color);--ttip-bg-color:#555;--ttip-text-color:#fff;--table-border-color:var(--div-bg-color);--table-text-color:var(--main-light-color);--table-even-bg-color:var(--div-bg-color);--table-odd-bg-color:var(--div-bg-color);--table-hover-bg-color:var(--main-bg-color);--table-selected-bg-color:var(--main-bg-color);--div-bg-color:#1b1d21;--div-text-color:var(--main-light-color);--div-shadow-color:#34373d;--div-border-color:#1b1d21;--div-border-radius:5px;--div-title-bg-color:#1b1d21;--div-title-text-color:var(--primary-color)}[frontend-theme=dark],[frontend-theme=light]{background-color:var(--main-bg-color);color:var(--main-text-color);font-family:Roboto,Helvetica,Arial,sans-serif}[frontend-theme=light]{--main-bg-color:#f0f0f0;--main-text-color:#212121;--main-grey-color:#616161;--main-light-color:#363636;--main-icon-color:#7a7a7a;--main-log-color:var(--main-light-color);--main-button-color:#fff;--main-button-bg-color:var(--primary-color);--main-menu-color:var(--main-text-color);--main-menu-bg-color:var(--div-bg-color);--main-menu-hover-color:#85c0d8;--main-label-color:var(--main-grey-color);--primary-color:#2196f3;--secondary-color:#a58827;--header-bg-color:var(--div-bg-color);--header-text-color:var(--div-text-color);--footer-bg-color:var(--div-bg-color);--footer-text-color:var(--div-text-color);--ttip-bg-color:#555;--ttip-text-color:#fff;--table-border-color:var(--div-bg-color);--table-text-color:var(--main-light-color);--table-even-bg-color:var(--div-bg-color);--table-odd-bg-color:var(--div-bg-color);--table-hover-bg-color:#85c0d8;--table-selected-bg-color:#85c0d8;--div-bg-color:#fff;--div-text-color:#212121;--div-shadow-color:#bfbfbf;--div-border-color:var(--div-bg-color);--div-border-radius:5px;--div-title-bg-color:var(--div-bg-color);--div-title-text-color:var(--div-text-color)}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:var(--primary-color);border-radius:5px}::-webkit-scrollbar-track{background:"inherit"}html{scrollbar-color:var(--primary-color) var(--div-bg-color);scrollbar-width:thin}.tooltip-container{display:inline-block;position:relative}.tooltip-text{background-color:var(--ttip-bg-color);border-radius:6px;bottom:calc(100% + 10px);color:var(--ttip-text-color);font-size:12px;left:50%;margin-left:-60px;opacity:0;padding:5px;position:absolute;text-align:center;transition:opacity .3s;visibility:hidden;z-index:1}.tooltip-container:hover{cursor:pointer}.tooltip-container:hover .tooltip-text{opacity:1;visibility:visible}.status-enabled{background-color:green}.status-disabled,.status-enabled{border-radius:.25rem;box-shadow:2px 2px 2px #0003;color:#fff;cursor:pointer;font-size:12px;padding:.2rem;text-align:center}.status-disabled{background-color:red}.status-information{background-color:#9e9e9e;color:#fff}.status-information,.status-warning{border-radius:.25rem;box-shadow:2px 2px 2px #0003;cursor:pointer;font-size:12px;padding:2px 10px;text-align:center}.status-warning{background-color:#e9db18;color:#000}.status-sponsor{background-color:#b6409c;padding:2px 10px}.status-blue,.status-sponsor{border-radius:.25rem;box-shadow:2px 2px 2px #0003;color:#fff;cursor:pointer;font-size:12px;text-align:center}.status-blue{background-color:#5f8c9e;padding:.2rem}.header{flex-direction:row;justify-content:space-between}.header,.sub-header{align-items:center;display:flex;gap:20px;height:40px;margin:0;padding:0}.sub-header{flex:0 0 auto;flex-direction:row}nav{align-items:center;display:flex}.nav-link{color:var(--main-icon-color);font-size:20px;margin:0 10px;text-decoration:none;transition:color .3s ease}.nav-link:hover{color:var(--primary-color)}table{border-collapse:collapse;table-layout:auto;width:100%}thead{border:1px solid var(--table-border-color);position:sticky;top:0;z-index:10}thead th{background:var(--header-bg-color);color:var(--header-text-color)}tbody td,thead th{border:1px solid var(--table-border-color);padding:5px 10px;text-align:left}tbody td{font-size:14px;margin:0}tbody tr:hover{background-color:var(--table-hover-bg-color);color:var(--table-text-color)}.table-content-even{background-color:var(--table-even-bg-color);color:var(--table-text-color)}.table-content-odd{background-color:var(--table-odd-bg-color);color:var(--table-text-color)}.table-content-selected{background-color:var(--table-selected-bg-color);color:var(--table-text-color)}h3{margin:0}.MbfScreen{background-color:var(--main-bg-color);height:calc(100vh - 40px);padding:20px;width:calc(100vw - 40px)}.MbfPageDiv,.MbfScreen{display:flex;flex-direction:column;gap:20px;margin:0}.MbfPageDiv{height:calc(100% - 60px);padding:0;width:100%}.MbfWindowDiv{background-color:var(--div-bg-color);border:1px solid var(--table-border-color);border-radius:var(--div-border-radius);box-shadow:5px 5px 10px var(--div-shadow-color);box-sizing:border-box}.MbfWindowDiv,.MbfWindowDivTable{display:flex;flex-direction:column}.MbfWindowDivTable{display:block;flex:1 1 auto;gap:0;margin:-1px;overflow:auto;padding:0}.MbfWindowHeader{align-items:center;background-color:var(--header-bg-color);border-bottom:1px solid var(--table-border-color);box-sizing:border-box;display:"flex";padding:0;width:100%}.MbfWindowHeader,.MbfWindowHeaderText{color:var(--header-text-color);margin:0}.MbfWindowHeaderText{font-weight:700;padding:5px 10px}.MbfWindowFooter{align-items:center;display:"flex";height:40px;justify-content:center;padding:0 10px 10px}.MbfWindowFooter,.MbfWindowFooterText{background-color:var(--footer-bg-color);color:var(--footer-text-color);margin:0}.MbfWindowFooterText{font-weight:700;padding:5px;text-align:center}.MbfWindowBodyColumn{flex:1 1 auto;flex-direction:column;padding:10px 0;width:100%}.MbfWindowBodyColumn,.MbfWindowBodyRow{display:flex;gap:0;margin:0;overflow:auto}.MbfWindowBodyRow{flex:1 1 auto;flex-direction:row;height:100%;padding:0 10px}.configSubmitButton{display:flex;flex-direction:row;justify-content:center;margin:20px;width:auto}.configSubmitButton button{width:auto}@media (max-width:1300px){.MbfScreen{height:1024px;width:1300px}.xxxheader{flex-direction:column}.xxxheader,.xxxsub-header{align-items:start;justify-content:start}}
|
|
2
|
+
/*# sourceMappingURL=main.b1a621ee.css.map*/
|