Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nasa/openmct.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShefali Joshi <simplyrender@gmail.com>2022-06-03 02:01:17 +0300
committerGitHub <noreply@github.com>2022-06-03 02:01:17 +0300
commit0e941bb9a2b0425a5162da315e6c90a1193059ba (patch)
tree6fc76ecb126d0071d9b9571182d62b3a85331b76
parent362f306fca8e7791843e1b272e17ea3423b0061f (diff)
parent04ee6f49d623c88aab6169d6615c402574d12c57 (diff)
Merge branch 'master' into imagery-layersimagery-layers
-rw-r--r--example/exampleUser/ExampleUserProvider.js105
-rw-r--r--example/exampleUser/plugin.js15
-rw-r--r--example/exampleUser/pluginSpec.js7
-rw-r--r--package.json4
-rw-r--r--src/api/api.js2
-rw-r--r--src/api/indicators/IndicatorAPI.js34
-rw-r--r--src/api/indicators/SimpleIndicator.js141
-rw-r--r--src/api/telemetry/TelemetryMetadataManager.js2
-rw-r--r--src/api/user/StatusAPI.js295
-rw-r--r--src/api/user/StatusUserProvider.js81
-rw-r--r--src/api/user/UserAPI.js42
-rw-r--r--src/api/user/UserProvider.js36
-rw-r--r--src/api/user/UserStatusAPISpec.js103
-rw-r--r--src/plugins/URLIndicatorPlugin/URLIndicator.js23
-rw-r--r--src/plugins/URLIndicatorPlugin/URLIndicatorSpec.js41
-rw-r--r--src/plugins/autoflow/AutoflowTabularPluginSpec.js27
-rw-r--r--src/plugins/displayLayout/components/TelemetryView.vue2
-rw-r--r--src/plugins/licenses/third-party-licenses.json7
-rw-r--r--src/plugins/objectMigration/Migrations.js2
-rw-r--r--src/plugins/operatorStatus/AbstractStatusIndicator.js106
-rw-r--r--src/plugins/operatorStatus/operator-status.scss142
-rw-r--r--src/plugins/operatorStatus/operatorStatus/OperatorStatus.vue187
-rw-r--r--src/plugins/operatorStatus/operatorStatus/OperatorStatusIndicator.js63
-rw-r--r--src/plugins/operatorStatus/plugin.js50
-rw-r--r--src/plugins/operatorStatus/pollQuestion/PollQuestion.vue184
-rw-r--r--src/plugins/operatorStatus/pollQuestion/PollQuestionIndicator.js63
-rw-r--r--src/plugins/plugins.js3
-rw-r--r--src/plugins/summaryWidget/src/Condition.js41
-rw-r--r--src/plugins/summaryWidget/src/ConditionManager.js12
-rw-r--r--src/plugins/summaryWidget/src/Rule.js154
-rw-r--r--src/plugins/summaryWidget/src/SummaryWidget.js71
-rw-r--r--src/plugins/summaryWidget/src/TestDataItem.js28
-rw-r--r--src/plugins/summaryWidget/src/TestDataManager.js18
-rw-r--r--src/plugins/summaryWidget/src/WidgetDnD.js27
-rw-r--r--src/plugins/summaryWidget/src/input/ColorPalette.js21
-rw-r--r--src/plugins/summaryWidget/src/input/IconPalette.js30
-rw-r--r--src/plugins/summaryWidget/src/input/Palette.js71
-rw-r--r--src/plugins/summaryWidget/src/input/Select.js48
-rw-r--r--src/plugins/summaryWidget/test/ConditionSpec.js60
-rw-r--r--src/plugins/summaryWidget/test/RuleSpec.js29
-rw-r--r--src/plugins/summaryWidget/test/SummaryWidgetSpec.js12
-rw-r--r--src/plugins/summaryWidget/test/TestDataItemSpec.js53
-rw-r--r--src/plugins/summaryWidget/test/TestDataManagerSpec.js8
-rwxr-xr-xsrc/styles/_constants.scss9
-rwxr-xr-xsrc/styles/_glyphs.scss9
-rw-r--r--src/styles/fonts/Open MCT Symbols 16px.json473
-rw-r--r--src/styles/fonts/Open-MCT-Symbols-16px.svg328
-rw-r--r--src/styles/fonts/Open-MCT-Symbols-16px.ttfbin24692 -> 26020 bytes
-rw-r--r--src/styles/fonts/Open-MCT-Symbols-16px.woffbin24768 -> 26096 bytes
-rw-r--r--src/styles/vue-styles.scss1
-rw-r--r--src/ui/layout/status-bar/Indicators.vue13
-rw-r--r--src/utils/raf.js14
-rw-r--r--src/utils/rafSpec.js61
-rw-r--r--src/utils/template/templateHelpers.js14
-rw-r--r--webpack.common.js7
55 files changed, 2673 insertions, 706 deletions
diff --git a/example/exampleUser/ExampleUserProvider.js b/example/exampleUser/ExampleUserProvider.js
index 7e17de98e..2926f0ba9 100644
--- a/example/exampleUser/ExampleUserProvider.js
+++ b/example/exampleUser/ExampleUserProvider.js
@@ -24,16 +24,53 @@ import EventEmitter from 'EventEmitter';
import { v4 as uuid } from 'uuid';
import createExampleUser from './exampleUserCreator';
+const STATUSES = [{
+ key: "NO_STATUS",
+ label: "Not set",
+ iconClass: "icon-question-mark",
+ iconClassPoll: "icon-status-poll-question-mark"
+}, {
+ key: "GO",
+ label: "GO",
+ iconClass: "icon-check",
+ iconClassPoll: "icon-status-poll-question-mark",
+ statusClass: "s-status-ok",
+ statusBgColor: "#33cc33",
+ statusFgColor: "#000"
+}, {
+ key: "MAYBE",
+ label: "MAYBE",
+ iconClass: "icon-alert-triangle",
+ iconClassPoll: "icon-status-poll-question-mark",
+ statusClass: "s-status-warning",
+ statusBgColor: "#ffb66c",
+ statusFgColor: "#000"
+}, {
+ key: "NO_GO",
+ label: "NO GO",
+ iconClass: "icon-circle-slash",
+ iconClassPoll: "icon-status-poll-question-mark",
+ statusClass: "s-status-error",
+ statusBgColor: "#9900cc",
+ statusFgColor: "#fff"
+}];
+/**
+ * @implements {StatusUserProvider}
+ */
export default class ExampleUserProvider extends EventEmitter {
- constructor(openmct) {
+ constructor(openmct, {defaultStatusRole} = {defaultStatusRole: undefined}) {
super();
this.openmct = openmct;
this.user = undefined;
this.loggedIn = false;
this.autoLoginUser = undefined;
+ this.status = STATUSES[1];
+ this.pollQuestion = undefined;
+ this.defaultStatusRole = defaultStatusRole;
this.ExampleUser = createExampleUser(this.openmct.user.User);
+ this.loginPromise = undefined;
}
isLoggedIn() {
@@ -45,11 +82,19 @@ export default class ExampleUserProvider extends EventEmitter {
}
getCurrentUser() {
- if (this.loggedIn) {
- return Promise.resolve(this.user);
+ if (!this.loginPromise) {
+ this.loginPromise = this._login().then(() => this.user);
}
- return this._login().then(() => this.user);
+ return this.loginPromise;
+ }
+
+ canProvideStatusForRole() {
+ return Promise.resolve(true);
+ }
+
+ canSetPollQuestion() {
+ return Promise.resolve(true);
}
hasRole(roleId) {
@@ -60,6 +105,55 @@ export default class ExampleUserProvider extends EventEmitter {
return Promise.resolve(this.user.getRoles().includes(roleId));
}
+ getStatusRoleForCurrentUser() {
+ return Promise.resolve(this.defaultStatusRole);
+ }
+
+ getAllStatusRoles() {
+ return Promise.resolve([this.defaultStatusRole]);
+ }
+
+ getStatusForRole(role) {
+ return Promise.resolve(this.status);
+ }
+
+ async getDefaultStatusForRole(role) {
+ const allRoles = await this.getPossibleStatuses();
+
+ return allRoles?.[0];
+ }
+
+ setStatusForRole(role, status) {
+ this.status = status;
+ this.emit('statusChange', {
+ role,
+ status
+ });
+
+ return true;
+ }
+
+ getPollQuestion() {
+ return Promise.resolve({
+ question: 'Set "GO" if your position is ready for a boarding action on the Klingon cruiser',
+ timestamp: Date.now()
+ });
+ }
+
+ setPollQuestion(pollQuestion) {
+ this.pollQuestion = {
+ question: pollQuestion,
+ timestamp: Date.now()
+ };
+ this.emit("pollQuestionChange", this.pollQuestion);
+
+ return true;
+ }
+
+ getPossibleStatuses() {
+ return Promise.resolve(STATUSES);
+ }
+
_login() {
const id = uuid();
@@ -108,3 +202,6 @@ export default class ExampleUserProvider extends EventEmitter {
);
}
}
+/**
+ * @typedef {import('@/api/user/StatusUserProvider').default} StatusUserProvider
+ */
diff --git a/example/exampleUser/plugin.js b/example/exampleUser/plugin.js
index f7094131e..af533f098 100644
--- a/example/exampleUser/plugin.js
+++ b/example/exampleUser/plugin.js
@@ -22,8 +22,19 @@
import ExampleUserProvider from './ExampleUserProvider';
-export default function ExampleUserPlugin() {
+export default function ExampleUserPlugin({autoLoginUser, defaultStatusRole} = {
+ autoLoginUser: 'guest',
+ defaultStatusRole: 'test-role'
+}) {
return function install(openmct) {
- openmct.user.setProvider(new ExampleUserProvider(openmct));
+ const userProvider = new ExampleUserProvider(openmct, {
+ defaultStatusRole
+ });
+
+ if (autoLoginUser !== undefined) {
+ userProvider.autoLogin(autoLoginUser);
+ }
+
+ openmct.user.setProvider(userProvider);
};
}
diff --git a/example/exampleUser/pluginSpec.js b/example/exampleUser/pluginSpec.js
index dd8ea6bba..02719d99d 100644
--- a/example/exampleUser/pluginSpec.js
+++ b/example/exampleUser/pluginSpec.js
@@ -26,7 +26,7 @@ import {
} from '../../src/utils/testing';
import ExampleUserProvider from './ExampleUserProvider';
-xdescribe("The Example User Plugin", () => {
+describe("The Example User Plugin", () => {
let openmct;
beforeEach(() => {
@@ -47,9 +47,4 @@ xdescribe("The Example User Plugin", () => {
});
openmct.install(openmct.plugins.example.ExampleUser());
});
-
- // The rest of the functionality of the ExampleUser Plugin is
- // tested in both the UserAPISpec.js and in the UserIndicatorPlugin spec.
- // If that changes, those tests can be moved here.
-
});
diff --git a/package.json b/package.json
index c1aac194e..a62dd4192 100644
--- a/package.json
+++ b/package.json
@@ -28,7 +28,6 @@
"eslint-plugin-vue": "8.5.0",
"eslint-plugin-you-dont-need-lodash-underscore": "6.12.0",
"eventemitter3": "1.2.0",
- "exports-loader": "0.7.0",
"express": "4.13.1",
"file-saver": "2.0.5",
"git-rev-sync": "3.0.2",
@@ -74,8 +73,7 @@
"webpack-cli": "4.9.2",
"webpack-dev-middleware": "5.3.3",
"webpack-hot-middleware": "2.25.1",
- "webpack-merge": "5.8.0",
- "zepto": "1.2.0"
+ "webpack-merge": "5.8.0"
},
"scripts": {
"clean": "rm -rf ./dist ./node_modules ./package-lock.json",
diff --git a/src/api/api.js b/src/api/api.js
index 1a0174d57..7e31bec7a 100644
--- a/src/api/api.js
+++ b/src/api/api.js
@@ -56,7 +56,7 @@ define([
CompositionAPI: CompositionAPI,
EditorAPI: EditorAPI,
FormsAPI: FormsAPI,
- IndicatorAPI: IndicatorAPI,
+ IndicatorAPI: IndicatorAPI.default,
MenuAPI: MenuAPI.default,
NotificationAPI: NotificationAPI.default,
ObjectAPI: ObjectAPI,
diff --git a/src/api/indicators/IndicatorAPI.js b/src/api/indicators/IndicatorAPI.js
index ef81f6788..98d78112c 100644
--- a/src/api/indicators/IndicatorAPI.js
+++ b/src/api/indicators/IndicatorAPI.js
@@ -19,27 +19,27 @@
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
-define([
- './SimpleIndicator',
- 'lodash'
-], function (
- SimpleIndicator,
- _
-) {
- function IndicatorAPI(openmct) {
+
+import EventEmitter from "EventEmitter";
+import SimpleIndicator from "./SimpleIndicator";
+
+class IndicatorAPI extends EventEmitter {
+ constructor(openmct) {
+ super();
+
this.openmct = openmct;
this.indicatorObjects = [];
}
- IndicatorAPI.prototype.getIndicatorObjectsByPriority = function () {
+ getIndicatorObjectsByPriority() {
const sortedIndicators = this.indicatorObjects.sort((a, b) => b.priority - a.priority);
return sortedIndicators;
- };
+ }
- IndicatorAPI.prototype.simpleIndicator = function () {
+ simpleIndicator() {
return new SimpleIndicator(this.openmct);
- };
+ }
/**
* Accepts an indicator object, which is a simple object
@@ -62,14 +62,16 @@ define([
* myIndicator.iconClass("icon-info");
*
*/
- IndicatorAPI.prototype.add = function (indicator) {
+ add(indicator) {
if (!indicator.priority) {
indicator.priority = this.openmct.priority.DEFAULT;
}
this.indicatorObjects.push(indicator);
- };
- return IndicatorAPI;
+ this.emit('addIndicator', indicator);
+ }
+
+}
-});
+export default IndicatorAPI;
diff --git a/src/api/indicators/SimpleIndicator.js b/src/api/indicators/SimpleIndicator.js
index 7556dd512..31ce745a5 100644
--- a/src/api/indicators/SimpleIndicator.js
+++ b/src/api/indicators/SimpleIndicator.js
@@ -20,82 +20,101 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
-define(['zepto', './res/indicator-template.html'],
- function ($, indicatorTemplate) {
- const DEFAULT_ICON_CLASS = 'icon-info';
-
- function SimpleIndicator(openmct) {
- this.openmct = openmct;
- this.element = $(indicatorTemplate)[0];
- this.priority = openmct.priority.DEFAULT;
-
- this.textElement = this.element.querySelector('.js-indicator-text');
-
- //Set defaults
- this.text('New Indicator');
- this.description('');
- this.iconClass(DEFAULT_ICON_CLASS);
- this.statusClass('');
- }
+import EventEmitter from 'EventEmitter';
+import indicatorTemplate from './res/indicator-template.html';
+import { convertTemplateToHTML } from '@/utils/template/templateHelpers';
- SimpleIndicator.prototype.text = function (text) {
- if (text !== undefined && text !== this.textValue) {
- this.textValue = text;
- this.textElement.innerText = text;
+const DEFAULT_ICON_CLASS = 'icon-info';
- if (!text) {
- this.element.classList.add('hidden');
- } else {
- this.element.classList.remove('hidden');
- }
- }
+class SimpleIndicator extends EventEmitter {
+ constructor(openmct) {
+ super();
+
+ this.openmct = openmct;
+ this.element = convertTemplateToHTML(indicatorTemplate)[0];
+ this.priority = openmct.priority.DEFAULT;
+
+ this.textElement = this.element.querySelector('.js-indicator-text');
+
+ //Set defaults
+ this.text('New Indicator');
+ this.description('');
+ this.iconClass(DEFAULT_ICON_CLASS);
+
+ this.click = this.click.bind(this);
- return this.textValue;
- };
+ this.element.addEventListener('click', this.click);
+ openmct.once('destroy', () => {
+ this.removeAllListeners();
+ this.element.removeEventListener('click', this.click);
+ });
+ }
+
+ text(text) {
+ if (text !== undefined && text !== this.textValue) {
+ this.textValue = text;
+ this.textElement.innerText = text;
- SimpleIndicator.prototype.description = function (description) {
- if (description !== undefined && description !== this.descriptionValue) {
- this.descriptionValue = description;
- this.element.title = description;
+ if (!text) {
+ this.element.classList.add('hidden');
+ } else {
+ this.element.classList.remove('hidden');
}
+ }
- return this.descriptionValue;
- };
+ return this.textValue;
+ }
- SimpleIndicator.prototype.iconClass = function (iconClass) {
- if (iconClass !== undefined && iconClass !== this.iconClassValue) {
- // element.classList is precious and throws errors if you try and add
- // or remove empty strings
- if (this.iconClassValue) {
- this.element.classList.remove(this.iconClassValue);
- }
+ description(description) {
+ if (description !== undefined && description !== this.descriptionValue) {
+ this.descriptionValue = description;
+ this.element.title = description;
+ }
- if (iconClass) {
- this.element.classList.add(iconClass);
- }
+ return this.descriptionValue;
+ }
- this.iconClassValue = iconClass;
+ iconClass(iconClass) {
+ if (iconClass !== undefined && iconClass !== this.iconClassValue) {
+ // element.classList is precious and throws errors if you try and add
+ // or remove empty strings
+ if (this.iconClassValue) {
+ this.element.classList.remove(this.iconClassValue);
}
- return this.iconClassValue;
- };
+ if (iconClass) {
+ this.element.classList.add(iconClass);
+ }
+
+ this.iconClassValue = iconClass;
+ }
- SimpleIndicator.prototype.statusClass = function (statusClass) {
- if (statusClass !== undefined && statusClass !== this.statusClassValue) {
- if (this.statusClassValue) {
- this.element.classList.remove(this.statusClassValue);
- }
+ return this.iconClassValue;
+ }
- if (statusClass) {
- this.element.classList.add(statusClass);
- }
+ statusClass(statusClass) {
+ if (arguments.length === 1 && statusClass !== this.statusClassValue) {
+ if (this.statusClassValue) {
+ this.element.classList.remove(this.statusClassValue);
+ }
- this.statusClassValue = statusClass;
+ if (statusClass !== undefined) {
+ this.element.classList.add(statusClass);
}
- return this.statusClassValue;
- };
+ this.statusClassValue = statusClass;
+ }
- return SimpleIndicator;
+ return this.statusClassValue;
}
-);
+
+ click(event) {
+ this.emit('click', event);
+ }
+
+ getElement() {
+ return this.element;
+ }
+}
+
+export default SimpleIndicator;
diff --git a/src/api/telemetry/TelemetryMetadataManager.js b/src/api/telemetry/TelemetryMetadataManager.js
index 1f55f5829..0e21ad079 100644
--- a/src/api/telemetry/TelemetryMetadataManager.js
+++ b/src/api/telemetry/TelemetryMetadataManager.js
@@ -138,7 +138,7 @@ define([
valueMetadata = this.values()[0];
}
- return valueMetadata.key;
+ return valueMetadata;
};
return TelemetryMetadataManager;
diff --git a/src/api/user/StatusAPI.js b/src/api/user/StatusAPI.js
new file mode 100644
index 000000000..4e53d9614
--- /dev/null
+++ b/src/api/user/StatusAPI.js
@@ -0,0 +1,295 @@
+/*****************************************************************************
+ * Open MCT, Copyright (c) 2014-2022, United States Government
+ * as represented by the Administrator of the National Aeronautics and Space
+ * Administration. All rights reserved.
+ *
+ * Open MCT is licensed under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ * Open MCT includes source code licensed under additional open source
+ * licenses. See the Open Source Licenses file (LICENSES.md) included with
+ * this source code distribution or the Licensing information page available
+ * at runtime from the About dialog for additional information.
+ *****************************************************************************/
+import EventEmitter from "EventEmitter";
+
+export default class StatusAPI extends EventEmitter {
+ #userAPI;
+ #openmct;
+
+ constructor(userAPI, openmct) {
+ super();
+ this.#userAPI = userAPI;
+ this.#openmct = openmct;
+
+ this.onProviderStatusChange = this.onProviderStatusChange.bind(this);
+ this.onProviderPollQuestionChange = this.onProviderPollQuestionChange.bind(this);
+ this.listenToStatusEvents = this.listenToStatusEvents.bind(this);
+
+ this.#openmct.once('destroy', () => {
+ const provider = this.#userAPI.getProvider();
+
+ if (typeof provider?.off === 'function') {
+ provider.off('statusChange', this.onProviderStatusChange);
+ provider.off('pollQuestionChange', this.onProviderPollQuestionChange);
+ }
+ });
+
+ this.#userAPI.on('providerAdded', this.listenToStatusEvents);
+ }
+
+ /**
+ * Fetch the currently defined operator status poll question. When presented with a status poll question, all operators will reply with their current status.
+ * @returns {Promise<PollQuestion>}
+ */
+ getPollQuestion() {
+ const provider = this.#userAPI.getProvider();
+
+ if (provider.getPollQuestion) {
+ return provider.getPollQuestion();
+ } else {
+ this.#userAPI.error("User provider does not support polling questions");
+ }
+ }
+
+ /**
+ * Set a poll question for operators to respond to. When presented with a status poll question, all operators will reply with their current status.
+ * @param {String} questionText - The text of the question
+ * @returns {Promise<Boolean>} true if operation was successful, otherwise false.
+ */
+ async setPollQuestion(questionText) {
+ const canSetPollQuestion = await this.canSetPollQuestion();
+
+ if (canSetPollQuestion) {
+ const provider = this.#userAPI.getProvider();
+
+ const result = await provider.setPollQuestion(questionText);
+
+ try {
+ await this.resetAllStatuses();
+ } catch (error) {
+ console.warn("Poll question set but unable to clear operator statuses.");
+ console.error(error);
+ }
+
+ return result;
+ } else {
+ this.#userAPI.error("User provider does not support setting polling question");
+ }
+ }
+
+ /**
+ * Can the currently logged in user set the operator status poll question.
+ * @returns {Promise<Boolean>}
+ */
+ canSetPollQuestion() {
+ const provider = this.#userAPI.getProvider();
+
+ if (provider.canSetPollQuestion) {
+ return provider.canSetPollQuestion();
+ } else {
+ return Promise.resolve(false);
+ }
+ }
+
+ /**
+ * @returns {Promise<Array<Status>>} the complete list of possible states that an operator can reply to a poll question with.
+ */
+ async getPossibleStatuses() {
+ const provider = this.#userAPI.getProvider();
+
+ if (provider.getPossibleStatuses) {
+ const possibleStatuses = await provider.getPossibleStatuses() || [];
+
+ return possibleStatuses.map(status => status);
+ } else {
+ this.#userAPI.error("User provider cannot provide statuses");
+ }
+ }
+
+ /**
+ * @param {import("./UserAPI").Role} role The role to fetch the current status for.
+ * @returns {Promise<Status>} the current status of the provided role
+ */
+ async getStatusForRole(role) {
+ const provider = this.#userAPI.getProvider();
+
+ if (provider.getStatusForRole) {
+ const status = await provider.getStatusForRole(role);
+
+ return status;
+ } else {
+ this.#userAPI.error("User provider does not support role status");
+ }
+ }
+
+ /**
+ * @param {import("./UserAPI").Role} role
+ * @returns {Promise<Boolean>} true if the configured UserProvider can provide status for the given role
+ * @see StatusUserProvider
+ */
+ canProvideStatusForRole(role) {
+ const provider = this.#userAPI.getProvider();
+
+ if (provider.canProvideStatusForRole) {
+ return provider.canProvideStatusForRole(role);
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * @param {import("./UserAPI").Role} role The role to set the status for.
+ * @param {Status} status The status to set for the provided role
+ * @returns {Promise<Boolean>} true if operation was successful, otherwise false.
+ */
+ setStatusForRole(role, status) {
+ const provider = this.#userAPI.getProvider();
+
+ if (provider.setStatusForRole) {
+ return provider.setStatusForRole(role, status);
+ } else {
+ this.#userAPI.error("User provider does not support setting role status");
+ }
+ }
+
+ /**
+ * Resets the status of the provided role back to its default status.
+ * @param {import("./UserAPI").Role} role The role to set the status for.
+ * @returns {Promise<Boolean>} true if operation was successful, otherwise false.
+ */
+ async resetStatusForRole(role) {
+ const provider = this.#userAPI.getProvider();
+ const defaultStatus = await this.getDefaultStatus();
+
+ if (provider.setStatusForRole) {
+ return provider.setStatusForRole(role, defaultStatus);
+ } else {
+ this.#userAPI.error("User provider does not support resetting role status");
+ }
+ }
+
+ /**
+ * Resets the status of all operators to their default status
+ * @returns {Promise<Boolean>} true if operation was successful, otherwise false.
+ */
+ async resetAllStatuses() {
+ const allStatusRoles = await this.getAllStatusRoles();
+
+ return Promise.all(allStatusRoles.map(role => this.resetStatusForRole(role)));
+ }
+
+ /**
+ * The default status. This is the status that will be used before the user has selected any status.
+ * @param {import("./UserAPI").Role} role
+ * @returns {Promise<Status>} the default operator status if no other has been set.
+ */
+ async getDefaultStatusForRole(role) {
+ const provider = this.#userAPI.getProvider();
+ const defaultStatus = await provider.getDefaultStatusForRole(role);
+
+ return defaultStatus;
+ }
+
+ /**
+ * All possible status roles. A status role is a user role that can provide status. In some systems
+ * this may be all user roles, but there may be cases where some users are not are not polled
+ * for status if they do not have a real-time operational role.
+ *
+ * @returns {Promise<Array<import("./UserAPI").Role>>} the default operator status if no other has been set.
+ */
+ getAllStatusRoles() {
+ const provider = this.#userAPI.getProvider();
+
+ if (provider.getAllStatusRoles) {
+ return provider.getAllStatusRoles();
+ } else {
+ this.#userAPI.error("User provider cannot provide all status roles");
+ }
+ }
+
+ /**
+ * The status role of the current user. A user may have multiple roles, but will only have one role
+ * that provides status at any time.
+ * @returns {Promise<import("./UserAPI").Role>} the role for which the current user can provide status.
+ */
+ getStatusRoleForCurrentUser() {
+ const provider = this.#userAPI.getProvider();
+
+ if (provider.getStatusRoleForCurrentUser) {
+ return provider.getStatusRoleForCurrentUser();
+ } else {
+ this.#userAPI.error("User provider cannot provide role status for this user");
+ }
+ }
+
+ /**
+ * @returns {Promise<Boolean>} true if the configured UserProvider can provide status for the currently logged in user, false otherwise.
+ * @see StatusUserProvider
+ */
+ async canProvideStatusForCurrentUser() {
+ const provider = this.#userAPI.getProvider();
+
+ if (provider.getStatusRoleForCurrentUser) {
+ const activeStatusRole = await this.#userAPI.getProvider().getStatusRoleForCurrentUser();
+ const canProvideStatus = await this.canProvideStatusForRole(activeStatusRole);
+
+ return canProvideStatus;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Private internal function that cannot be made #private because it needs to be registered as a callback to the user provider
+ * @private
+ */
+ listenToStatusEvents(provider) {
+ if (typeof provider.on === 'function') {
+ provider.on('statusChange', this.onProviderStatusChange);
+ provider.on('pollQuestionChange', this.onProviderPollQuestionChange);
+ }
+ }
+
+ /**
+ * @private
+ */
+ onProviderStatusChange(newStatus) {
+ this.emit('statusChange', newStatus);
+ }
+
+ /**
+ * @private
+ */
+ onProviderPollQuestionChange(pollQuestion) {
+ this.emit('pollQuestionChange', pollQuestion);
+ }
+}
+
+/**
+ * @typedef {import('./UserProvider')} UserProvider
+ */
+/**
+ * @typedef {import('./StatusUserProvider')} StatusUserProvider
+ */
+/**
+ * The PollQuestion type
+ * @typedef {Object} PollQuestion
+ * @property {String} question - The question to be presented to users
+ * @property {Number} timestamp - The time that the poll question was set.
+ */
+
+/**
+ * The Status type
+ * @typedef {Object} Status
+ * @property {String} key - A unique identifier for this status
+ * @property {Number} label - A human readable label for this status
+ */
diff --git a/src/api/user/StatusUserProvider.js b/src/api/user/StatusUserProvider.js
new file mode 100644
index 000000000..b474fdbed
--- /dev/null
+++ b/src/api/user/StatusUserProvider.js
@@ -0,0 +1,81 @@
+/*****************************************************************************
+ * Open MCT, Copyright (c) 2014-2022, United States Government
+ * as represented by the Administrator of the National Aeronautics and Space
+ * Administration. All rights reserved.
+ *
+ * Open MCT is licensed under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ * Open MCT includes source code licensed under additional open source
+ * licenses. See the Open Source Licenses file (LICENSES.md) included with
+ * this source code distribution or the Licensing information page available
+ * at runtime from the About dialog for additional information.
+ *****************************************************************************/
+import UserProvider from "./UserProvider";
+
+export default class StatusUserProvider extends UserProvider {
+ /**
+ * @param {('statusChange'|'pollQuestionChange')} event the name of the event to listen to
+ * @param {Function} callback a function to invoke when this event occurs
+ */
+ on(event, callback) {}
+ /**
+ * @param {('statusChange'|'pollQuestionChange')} event the name of the event to stop listen to
+ * @param {Function} callback the callback function used to register the listener
+ */
+ off(event, callback) {}
+ /**
+ * @returns {import("./StatusAPI").PollQuestion} the current status poll question
+ */
+ async getPollQuestion() {}
+ /**
+ * @param {import("./StatusAPI").PollQuestion} pollQuestion a new poll question to set
+ * @returns {Promise<Boolean>} true if operation was successful, otherwise false
+ */
+ async setPollQuestion(pollQuestion) {}
+ /**
+ * @returns {Promise<Boolean>} true if the current user can set the poll question, otherwise false
+ */
+ async canSetPollQuestion() {}
+ /**
+ * @returns {Promise<Array<import("./StatusAPI").Status>>} a list of the possible statuses that an operator can be in
+ */
+ async getPossibleStatuses() {}
+ /**
+ * @param {import("./UserAPI").Role} role
+ * @returns {Promise<import("./StatusAPI").Status}
+ */
+ async getStatusForRole(role) {}
+ /**
+ * @param {import("./UserAPI").Role} role
+ * @returns {Promise<import("./StatusAPI").Status}
+ */
+ async getDefaultStatusForRole(role) {}
+ /**
+ * @param {import("./UserAPI").Role} role
+ * @param {*} status
+ * @returns {Promise<Boolean>} true if operation was successful, otherwise false.
+ */
+ async setStatusForRole(role, status) {}
+ /**
+ * @param {import("./UserAPI").Role} role
+ * @returns {Promise<Boolean} true if the user provider can provide status for the given role
+ */
+ async canProvideStatusForRole(role) {}
+ /**
+ * @returns {Promise<Array<import("./UserAPI").Role>>} a list of all available status roles, if user permissions allow it.
+ */
+ async getAllStatusRoles() {}
+ /**
+ * @returns {Promise<import("./UserAPI").Role>} the active status role for the currently logged in user
+ */
+ async getStatusRoleForCurrentUser() {}
+}
diff --git a/src/api/user/UserAPI.js b/src/api/user/UserAPI.js
index 194802173..0ab2d9156 100644
--- a/src/api/user/UserAPI.js
+++ b/src/api/user/UserAPI.js
@@ -25,16 +25,22 @@ import {
MULTIPLE_PROVIDER_ERROR,
NO_PROVIDER_ERROR
} from './constants';
+import StatusAPI from './StatusAPI';
import User from './User';
class UserAPI extends EventEmitter {
- constructor(openmct) {
+ /**
+ * @param {OpenMCT} openmct
+ * @param {UserAPIConfiguration} config
+ */
+ constructor(openmct, config) {
super();
this._openmct = openmct;
this._provider = undefined;
this.User = User;
+ this.status = new StatusAPI(this, openmct, config);
}
/**
@@ -47,14 +53,17 @@ class UserAPI extends EventEmitter {
*/
setProvider(provider) {
if (this.hasProvider()) {
- this._error(MULTIPLE_PROVIDER_ERROR);
+ this.error(MULTIPLE_PROVIDER_ERROR);
}
this._provider = provider;
-
this.emit('providerAdded', this._provider);
}
+ getProvider() {
+ return this._provider;
+ }
+
/**
* Return true if the user provider has been set.
*
@@ -74,7 +83,7 @@ class UserAPI extends EventEmitter {
* @throws Will throw an error if no user provider is set
*/
getCurrentUser() {
- this._noProviderCheck();
+ this.noProviderCheck();
return this._provider.getCurrentUser();
}
@@ -105,7 +114,7 @@ class UserAPI extends EventEmitter {
* @throws Will throw an error if no user provider is set
*/
hasRole(roleId) {
- this._noProviderCheck();
+ this.noProviderCheck();
return this._provider.hasRole(roleId);
}
@@ -116,9 +125,9 @@ class UserAPI extends EventEmitter {
* @private
* @throws Will throw an error if no user provider is set
*/
- _noProviderCheck() {
+ noProviderCheck() {
if (!this.hasProvider()) {
- this._error(NO_PROVIDER_ERROR);
+ this.error(NO_PROVIDER_ERROR);
}
}
@@ -129,9 +138,26 @@ class UserAPI extends EventEmitter {
* @param {string} error description of error
* @throws Will throw error passed in
*/
- _error(error) {
+ error(error) {
throw new Error(error);
}
}
export default UserAPI;
+/**
+ * @typedef {String} Role
+ */
+/**
+ * @typedef {Object} OpenMCT
+ */
+/**
+ * @typedef {{statusStyles: Object.<string, StatusStyleDefinition>}} UserAPIConfiguration
+ */
+/**
+ * @typedef {Object} StatusStyleDefinition
+ * @property {String} iconClass The icon class to apply to the status indicator when this status is active "icon-circle-slash",
+ * @property {String} iconClassPoll The icon class to apply to the poll question indicator when this style is active eg. "icon-status-poll-question-mark"
+ * @property {String} statusClass The class to apply to the indicator when this status is active eg. "s-status-error"
+ * @property {String} statusBgColor The background color to apply in the status summary section of the poll question popup for this status eg."#9900cc"
+ * @property {String} statusFgColor The foreground color to apply in the status summary section of the poll question popup for this status eg. "#fff"
+ */
diff --git a/src/api/user/UserProvider.js b/src/api/user/UserProvider.js
new file mode 100644
index 000000000..8502dd54e
--- /dev/null
+++ b/src/api/user/UserProvider.js
@@ -0,0 +1,36 @@
+/*****************************************************************************
+ * Open MCT, Copyright (c) 2014-2022, United States Government
+ * as represented by the Administrator of the National Aeronautics and Space
+ * Administration. All rights reserved.
+ *
+ * Open MCT is licensed under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ * Open MCT includes source code licensed under additional open source
+ * licenses. See the Open Source Licenses file (LICENSES.md) included with
+ * this source code distribution or the Licensing information page available
+ * at runtime from the About dialog for additional information.
+ *****************************************************************************/
+export default class UserProvider {
+ /**
+ * @returns {Promise<User>} A promise that resolves with the currently logged in user
+ */
+ getCurrentUser() {}
+ /**
+ * @returns {Boolean} true if a user is currently logged in, otherwise false
+ */
+ isLoggedIn() {}
+ /**
+ * @param {String} role
+ * @returns {Promise<Boolean>} true if the current user has the given role
+ */
+ hasRole(role) {}
+}
diff --git a/src/api/user/UserStatusAPISpec.js b/src/api/user/UserStatusAPISpec.js
new file mode 100644
index 000000000..30df2820c
--- /dev/null
+++ b/src/api/user/UserStatusAPISpec.js
@@ -0,0 +1,103 @@
+/*****************************************************************************
+ * Open MCT, Copyright (c) 2014-2022, United States Government
+ * as represented by the Administrator of the National Aeronautics and Space
+ * Administration. All rights reserved.
+ *
+ * Open MCT is licensed under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ * Open MCT includes source code licensed under additional open source
+ * licenses. See the Open Source Licenses file (LICENSES.md) included with
+ * this source code distribution or the Licensing information page available
+ * at runtime from the About dialog for additional information.
+ *****************************************************************************/
+
+import {
+ createOpenMct,
+ resetApplicationState
+} from '../../utils/testing';
+
+describe("The User Status API", () => {
+ let openmct;
+ let userProvider;
+ let mockUser;
+
+ beforeEach(() => {
+ userProvider = jasmine.createSpyObj("userProvider", [
+ "setPollQuestion",
+ "getPollQuestion",
+ "getCurrentUser",
+ "getPossibleStatuses",
+ "getAllStatusRoles",
+ "canSetPollQuestion",
+ "isLoggedIn",
+ "on"
+ ]);
+ openmct = createOpenMct();
+ mockUser = new openmct.user.User("test-user", "A test user");
+ userProvider.getCurrentUser.and.returnValue(Promise.resolve(mockUser));
+ userProvider.getPossibleStatuses.and.returnValue(Promise.resolve([]));
+ userProvider.getAllStatusRoles.and.returnValue(Promise.resolve([]));
+ userProvider.canSetPollQuestion.and.returnValue(Promise.resolve(false));
+ userProvider.isLoggedIn.and.returnValue(true);
+ });
+
+ afterEach(() => {
+ return resetApplicationState(openmct);
+ });
+
+ describe("the poll question", () => {
+ it('can be set via a user status provider if supported', () => {
+ openmct.user.setProvider(userProvider);
+ userProvider.canSetPollQuestion.and.returnValue(Promise.resolve(true));
+
+ return openmct.user.status.setPollQuestion('This is a poll question').then(() => {
+ expect(userProvider.setPollQuestion).toHaveBeenCalledWith('This is a poll question');
+ });
+ });
+ // fit('emits an event when the poll question changes', () => {
+ // const pollQuestionChangeCallback = jasmine.createSpy('pollQuestionChangeCallback');
+ // let pollQuestionListener;
+
+ // userProvider.canSetPollQuestion.and.returnValue(Promise.resolve(true));
+ // userProvider.on.and.callFake((eventName, listener) => {
+ // if (eventName === 'pollQuestionChange') {
+ // pollQuestionListener = listener;
+ // }
+ // });
+
+ // openmct.user.on('pollQuestionChange', pollQuestionChangeCallback);
+
+ // openmct.user.setProvider(userProvider);
+
+ // return openmct.user.status.setPollQuestion('This is a poll question').then(() => {
+ // expect(pollQuestionListener).toBeDefined();
+ // pollQuestionListener();
+ // expect(pollQuestionChangeCallback).toHaveBeenCalled();
+
+ // const pollQuestion = pollQuestionChangeCallback.calls.mostRecent().args[0];
+ // expect(pollQuestion.question).toBe('This is a poll question');
+
+ // openmct.user.off('pollQuestionChange', pollQuestionChangeCallback);
+ // });
+ // });
+ it('cannot be set if the user is not permitted', () => {
+ openmct.user.setProvider(userProvider);
+ userProvider.canSetPollQuestion.and.returnValue(Promise.resolve(false));
+
+ return openmct.user.status.setPollQuestion('This is a poll question').catch((error) => {
+ expect(error).toBeInstanceOf(Error);
+ }).finally(() => {
+ expect(userProvider.setPollQuestion).not.toHaveBeenCalled();
+ });
+ });
+ });
+});
diff --git a/src/plugins/URLIndicatorPlugin/URLIndicator.js b/src/plugins/URLIndicatorPlugin/URLIndicator.js
index 1bc83450e..5a6785e54 100644
--- a/src/plugins/URLIndicatorPlugin/URLIndicator.js
+++ b/src/plugins/URLIndicatorPlugin/URLIndicator.js
@@ -20,10 +20,8 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
-define(
- ['zepto'],
- function ($) {
-
+define([],
+ function () {
// Set of connection states; changing among these states will be
// reflected in the indicator's appearance.
// CONNECTED: Everything nominal, expect to be able to read/write.
@@ -75,12 +73,17 @@ define(
};
URLIndicator.prototype.fetchUrl = function () {
- $.ajax({
- type: 'GET',
- url: this.URLpath,
- success: this.handleSuccess,
- error: this.handleError
- });
+ fetch(this.URLpath)
+ .then(response => {
+ if (response.ok) {
+ this.handleSuccess();
+ } else {
+ this.handleError();
+ }
+ })
+ .catch(error => {
+ this.handleError();
+ });
};
URLIndicator.prototype.handleError = function (e) {
diff --git a/src/plugins/URLIndicatorPlugin/URLIndicatorSpec.js b/src/plugins/URLIndicatorPlugin/URLIndicatorSpec.js
index 408a98cd0..cf6cd39ff 100644
--- a/src/plugins/URLIndicatorPlugin/URLIndicatorSpec.js
+++ b/src/plugins/URLIndicatorPlugin/URLIndicatorSpec.js
@@ -25,37 +25,35 @@ define(
"utils/testing",
"./URLIndicator",
"./URLIndicatorPlugin",
- "../../MCT",
- "zepto"
+ "../../MCT"
],
function (
testingUtils,
URLIndicator,
URLIndicatorPlugin,
- MCT,
- $
+ MCT
) {
- const defaultAjaxFunction = $.ajax;
-
describe("The URLIndicator", function () {
let openmct;
let indicatorElement;
let pluginOptions;
- let ajaxOptions;
let urlIndicator; // eslint-disable-line
+ let fetchSpy;
beforeEach(function () {
jasmine.clock().install();
openmct = new testingUtils.createOpenMct();
spyOn(openmct.indicators, 'add');
- spyOn($, 'ajax');
- $.ajax.and.callFake(function (options) {
- ajaxOptions = options;
- });
+ fetchSpy = spyOn(window, 'fetch').and.callFake(() => Promise.resolve({
+ ok: true
+ }));
});
afterEach(function () {
- $.ajax = defaultAjaxFunction;
+ if (window.fetch.restore) {
+ window.fetch.restore();
+ }
+
jasmine.clock().uninstall();
return testingUtils.resetApplicationState(openmct);
@@ -96,11 +94,11 @@ define(
expect(indicatorElement.classList.contains('iconClass-checked')).toBe(true);
});
it("uses custom interval", function () {
- expect($.ajax.calls.count()).toEqual(1);
+ expect(window.fetch).toHaveBeenCalledTimes(1);
jasmine.clock().tick(1);
- expect($.ajax.calls.count()).toEqual(1);
+ expect(window.fetch).toHaveBeenCalledTimes(1);
jasmine.clock().tick(pluginOptions.interval + 1);
- expect($.ajax.calls.count()).toEqual(2);
+ expect(window.fetch).toHaveBeenCalledTimes(2);
});
it("uses custom label if supplied in initialization", function () {
expect(indicatorElement.textContent.indexOf(pluginOptions.label) >= 0).toBe(true);
@@ -120,18 +118,21 @@ define(
it("requests the provided URL", function () {
jasmine.clock().tick(pluginOptions.interval + 1);
- expect(ajaxOptions.url).toEqual(pluginOptions.url);
+ expect(window.fetch).toHaveBeenCalledWith(pluginOptions.url);
});
- it("indicates success if connection is nominal", function () {
+ it("indicates success if connection is nominal", async function () {
jasmine.clock().tick(pluginOptions.interval + 1);
- ajaxOptions.success();
+ await urlIndicator.fetchUrl();
expect(indicatorElement.classList.contains('s-status-on')).toBe(true);
});
- it("indicates an error when the server cannot be reached", function () {
+ it("indicates an error when the server cannot be reached", async function () {
+ fetchSpy.and.callFake(() => Promise.resolve({
+ ok: false
+ }));
jasmine.clock().tick(pluginOptions.interval + 1);
- ajaxOptions.error();
+ await urlIndicator.fetchUrl();
expect(indicatorElement.classList.contains('s-status-warning-hi')).toBe(true);
});
});
diff --git a/src/plugins/autoflow/AutoflowTabularPluginSpec.js b/src/plugins/autoflow/AutoflowTabularPluginSpec.js
index ce20cab1d..5e5d49489 100644
--- a/src/plugins/autoflow/AutoflowTabularPluginSpec.js
+++ b/src/plugins/autoflow/AutoflowTabularPluginSpec.js
@@ -21,7 +21,6 @@
*****************************************************************************/
import AutoflowTabularPlugin from './AutoflowTabularPlugin';
import AutoflowTabularConstants from './AutoflowTabularConstants';
-import $ from 'zepto';
import DOMObserver from './dom-observer';
import {
createOpenMct,
@@ -122,7 +121,7 @@ xdescribe("AutoflowTabularPlugin", () => {
name: "Object " + key
};
});
- testContainer = $('<div>')[0];
+ testContainer = document.createElement('div');
domObserver = new DOMObserver(testContainer);
testHistories = testKeys.reduce((histories, key, index) => {
@@ -195,7 +194,7 @@ xdescribe("AutoflowTabularPlugin", () => {
describe("when rows have been populated", () => {
function rowsMatch() {
- const rows = $(testContainer).find(".l-autoflow-row").length;
+ const rows = testContainer.querySelectorAll(".l-autoflow-row").length;
return rows === testChildren.length;
}
@@ -241,20 +240,20 @@ xdescribe("AutoflowTabularPlugin", () => {
const nextWidth =
initialWidth + AutoflowTabularConstants.COLUMN_WIDTH_STEP;
- expect($(testContainer).find('.l-autoflow-col').css('width'))
+ expect(testContainer.querySelector('.l-autoflow-col').css('width'))
.toEqual(initialWidth + 'px');
- $(testContainer).find('.change-column-width').click();
+ testContainer.querySelector('.change-column-width').click();
function widthHasChanged() {
- const width = $(testContainer).find('.l-autoflow-col').css('width');
+ const width = testContainer.querySelector('.l-autoflow-col').css('width');
return width !== initialWidth + 'px';
}
return domObserver.when(widthHasChanged)
.then(() => {
- expect($(testContainer).find('.l-autoflow-col').css('width'))
+ expect(testContainer.querySelector('.l-autoflow-col').css('width'))
.toEqual(nextWidth + 'px');
});
});
@@ -267,13 +266,13 @@ xdescribe("AutoflowTabularPlugin", () => {
it("displays historical telemetry", () => {
function rowTextDefined() {
- return $(testContainer).find(".l-autoflow-item").filter(".r").text() !== "";
+ return testContainer.querySelector(".l-autoflow-item").filter(".r").text() !== "";
}
return domObserver.when(rowTextDefined).then(() => {
testKeys.forEach((key, index) => {
const datum = testHistories[key];
- const $cell = $(testContainer).find(".l-autoflow-row").eq(index).find(".r");
+ const $cell = testContainer.querySelector(".l-autoflow-row").eq(index).find(".r");
expect($cell.text()).toEqual(String(datum.range));
});
});
@@ -294,7 +293,7 @@ xdescribe("AutoflowTabularPlugin", () => {
return waitsForChange().then(() => {
testData.forEach((datum, index) => {
- const $cell = $(testContainer).find(".l-autoflow-row").eq(index).find(".r");
+ const $cell = testContainer.querySelector(".l-autoflow-row").eq(index).find(".r");
expect($cell.text()).toEqual(String(datum.range));
});
});
@@ -312,7 +311,7 @@ xdescribe("AutoflowTabularPlugin", () => {
return waitsForChange().then(() => {
testKeys.forEach((datum, index) => {
- const $cell = $(testContainer).find(".l-autoflow-row").eq(index).find(".r");
+ const $cell = testContainer.querySelector(".l-autoflow-row").eq(index).find(".r");
expect($cell.hasClass(testClass)).toBe(true);
});
});
@@ -322,16 +321,16 @@ xdescribe("AutoflowTabularPlugin", () => {
const rowHeight = AutoflowTabularConstants.ROW_HEIGHT;
const sliderHeight = AutoflowTabularConstants.SLIDER_HEIGHT;
const count = testKeys.length;
- const $container = $(testContainer);
+ const $container = testContainer;
let promiseChain = Promise.resolve();
function columnsHaveAutoflowed() {
- const itemsHeight = $container.find('.l-autoflow-items').height();
+ const itemsHeight = $container.querySelector('.l-autoflow-items').height();
const availableHeight = itemsHeight - sliderHeight;
const availableRows = Math.max(Math.floor(availableHeight / rowHeight), 1);
const columns = Math.ceil(count / availableRows);
- return $container.find('.l-autoflow-col').length === columns;
+ return $container.querySelector('.l-autoflow-col').length === columns;
}
$container.find('.abs').css({
diff --git a/src/plugins/displayLayout/components/TelemetryView.vue b/src/plugins/displayLayout/components/TelemetryView.vue
index 3a759db9d..6886baa52 100644
--- a/src/plugins/displayLayout/components/TelemetryView.vue
+++ b/src/plugins/displayLayout/components/TelemetryView.vue
@@ -91,7 +91,7 @@ export default {
width: DEFAULT_TELEMETRY_DIMENSIONS[0],
height: DEFAULT_TELEMETRY_DIMENSIONS[1],
displayMode: 'all',
- value: metadata.getDefaultDisplayValue(),
+ value: metadata.getDefaultDisplayValue()?.key,
stroke: "",
fill: "",
color: "",
diff --git a/src/plugins/licenses/third-party-licenses.json b/src/plugins/licenses/third-party-licenses.json
index 184024eb4..c139298ce 100644
--- a/src/plugins/licenses/third-party-licenses.json
+++ b/src/plugins/licenses/third-party-licenses.json
@@ -256,13 +256,6 @@
"licenseFile": "/Users/akhenry/Code/licenses/node_modules/vue/LICENSE",
"licenseText": "The MIT License (MIT)\n\nCopyright (c) 2013-present, Yuxi (Evan) You\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.",
"copyright": "Copyright (c) 2013-present, Yuxi (Evan) You"
- },
- "zepto@1.2.0": {
- "licenses": "MIT",
- "repository": "https://github.com/madrobby/zepto",
- "path": "/Users/akhenry/Code/licenses/node_modules/zepto",
- "licenseFile": "/Users/akhenry/Code/licenses/node_modules/zepto/README.md",
- "licenseText": "Copyright (c) 2010-2018 Thomas Fuchs\nhttp://zeptojs.com/\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
}
}
diff --git a/src/plugins/objectMigration/Migrations.js b/src/plugins/objectMigration/Migrations.js
index 46bd8f383..493845e1f 100644
--- a/src/plugins/objectMigration/Migrations.js
+++ b/src/plugins/objectMigration/Migrations.js
@@ -145,7 +145,7 @@ define([
item.size = element.size || DEFAULT_SIZE;
item.identifier = telemetryObjects[element.id].identifier;
item.displayMode = element.titled ? 'all' : 'value';
- item.value = openmct.telemetry.getMetadata(telemetryObjects[element.id]).getDefaultDisplayValue();
+ item.value = openmct.telemetry.getMetadata(telemetryObjects[element.id]).getDefaultDisplayValue()?.key;
} else if (element.type === 'fixed.box') {
item.type = "box-view";
item.stroke = element.stroke || DEFAULT_STROKE;
diff --git a/src/plugins/operatorStatus/AbstractStatusIndicator.js b/src/plugins/operatorStatus/AbstractStatusIndicator.js
new file mode 100644
index 000000000..7d2a01293
--- /dev/null
+++ b/src/plugins/operatorStatus/AbstractStatusIndicator.js
@@ -0,0 +1,106 @@
+/*****************************************************************************
+ * Open MCT, Copyright (c) 2014-2022, United States Government
+ * as represented by the Administrator of the National Aeronautics and Space
+ * Administration. All rights reserved.
+ *
+ * Open MCT is licensed under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ * Open MCT includes source code licensed under additional open source
+ * licenses. See the Open Source Licenses file (LICENSES.md) included with
+ * this source code distribution or the Licensing information page available
+ * at runtime from the About dialog for additional information.
+ *****************************************************************************/
+import raf from '@/utils/raf';
+
+export default class AbstractStatusIndicator {
+ #popupComponent;
+ #indicator;
+ #configuration;
+
+ /**
+ * @param {*} openmct the Open MCT API (proper jsdoc to come)
+ * @param {import('@/api/user/UserAPI').UserAPIConfiguration} configuration Per-deployment status styling. See the type definition in UserAPI
+ */
+ constructor(openmct, configuration) {
+ this.openmct = openmct;
+ this.#configuration = configuration;
+
+ this.showPopup = this.showPopup.bind(this);
+ this.clearPopup = this.clearPopup.bind(this);
+ this.positionBox = this.positionBox.bind(this);
+ this.positionBox = raf(this.positionBox);
+
+ this.#indicator = this.createIndicator();
+ this.#popupComponent = this.createPopupComponent();
+ }
+
+ install() {
+ this.openmct.indicators.add(this.#indicator);
+ }
+
+ showPopup() {
+ const popupElement = this.getPopupElement();
+
+ document.body.appendChild(popupElement.$el);
+ //Use capture so we don't trigger immediately on the same iteration of the event loop
+ document.addEventListener('click', this.clearPopup, {
+ capture: true
+ });
+
+ this.positionBox();
+
+ window.addEventListener('resize', this.positionBox);
+ }
+
+ positionBox() {
+ const popupElement = this.getPopupElement();
+ const indicator = this.getIndicator();
+
+ let indicatorBox = indicator.element.getBoundingClientRect();
+ popupElement.positionX = indicatorBox.left;
+ popupElement.positionY = indicatorBox.bottom;
+
+ const popupRight = popupElement.positionX + popupElement.$el.clientWidth;
+ const offsetLeft = Math.min(window.innerWidth - popupRight, 0);
+ popupElement.positionX = popupElement.positionX + offsetLeft;
+ }
+
+ clearPopup(clickAwayEvent) {
+ const popupElement = this.getPopupElement();
+
+ if (!popupElement.$el.contains(clickAwayEvent.target)) {
+ popupElement.$el.remove();
+ document.removeEventListener('click', this.clearPopup);
+ window.removeEventListener('resize', this.positionBox);
+ }
+ }
+
+ createPopupComponent() {
+ throw new Error('Must override createPopupElement method');
+ }
+
+ getPopupElement() {
+ return this.#popupComponent;
+ }
+
+ createIndicator() {
+ throw new Error('Must override createIndicator method');
+ }
+
+ getIndicator() {
+ return this.#indicator;
+ }
+
+ getConfiguration() {
+ return this.#configuration;
+ }
+}
diff --git a/src/plugins/operatorStatus/operator-status.scss b/src/plugins/operatorStatus/operator-status.scss
new file mode 100644
index 000000000..144ffff40
--- /dev/null
+++ b/src/plugins/operatorStatus/operator-status.scss
@@ -0,0 +1,142 @@
+/*****************************************************************************
+ * Open MCT, Copyright (c) 2014-2022, United States Government
+ * as represented by the Administrator of the National Aeronautics and Space
+ * Administration. All rights reserved.
+ *
+ * Open MCT is licensed under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ * Open MCT includes source code licensed under additional open source
+ * licenses. See the Open Source Licenses file (LICENSES.md) included with
+ * this source code distribution or the Licensing information page available
+ * at runtime from the About dialog for additional information.
+ *****************************************************************************/
+
+ $statusCountWidth: 30px;
+
+.c-status-poll-panel {
+ @include menuOuter();
+ display: flex;
+ flex-direction: column;
+ padding: $interiorMarginLg;
+ min-width: 350px;
+ max-width: 35%;
+
+ > * + * {
+ margin-top: $interiorMarginLg;
+ }
+
+ *:before {
+ font-size: 0.8em;
+ margin-right: $interiorMarginSm;
+ }
+
+ &__section {
+ display: flex;
+ align-items: center;
+ flex-direction: row;
+
+ > * + * {
+ margin-left: $interiorMarginLg;
+ }
+ }
+
+ &__top {
+ text-transform: uppercase;
+ }
+
+ &__user-role,
+ &__updated {
+ opacity: 50%;
+ }
+
+ &__updated {
+ flex: 1 1 auto;
+ text-align: right;
+ }
+
+ &__poll-question {
+ background: $colorBodyFg;
+ color: $colorBodyBg;
+ border-radius: $controlCr;
+ font-weight: bold;
+ padding: $interiorMarginSm $interiorMargin;
+
+ .c-status-poll-panel--admin & {
+ background: rgba($colorBodyFg, 0.1);
+ color: $colorBodyFg;
+ }
+ }
+
+ /****** Admin interface */
+ &__content {
+ $m: $interiorMargin;
+ display: grid;
+ grid-template-columns: min-content 1fr;
+ grid-column-gap: $m;
+ grid-row-gap: $m;
+
+ [class*='__label'] {
+ padding: 3px 0;
+ }
+
+ [class*='new-question'] {
+ align-items: center;
+ display: flex;
+ flex-direction: row;
+ > * + * { margin-left: $interiorMargin; }
+
+ input {
+ flex: 1 1 auto;
+ height: $btnStdH;
+ }
+
+ button { flex: 0 0 auto; }
+ }
+ }
+}
+
+.c-status-poll-report {
+ display: flex;
+ flex-direction: row;
+ > * + * { margin-left: $interiorMargin; }
+
+ &__count {
+ background: rgba($colorBodyFg, 0.2);
+ border-radius: $controlCr;
+ display: flex;
+ flex-direction: row;
+ font-size: 1.25em;
+ align-items: center;
+ padding: $interiorMarginSm $interiorMarginLg;
+
+ &-type {
+ line-height: 1em;
+ opacity: 0.6;
+ }
+ }
+}
+
+.c-indicator {
+ &:before {
+ // Indicator icon
+ color: $colorKey;
+ }
+
+ &--operator-status {
+ cursor: pointer;
+ max-width: 150px;
+
+ @include hover() {
+ background: $colorIndicatorBgHov;
+ }
+ }
+}
diff --git a/src/plugins/operatorStatus/operatorStatus/OperatorStatus.vue b/src/plugins/operatorStatus/operatorStatus/OperatorStatus.vue
new file mode 100644
index 000000000..e51f3d08d
--- /dev/null
+++ b/src/plugins/operatorStatus/operatorStatus/OperatorStatus.vue
@@ -0,0 +1,187 @@
+<!--
+ Open MCT, Copyright (c) 2014-2022, United States Government
+ as represented by the Administrator of the National Aeronautics and Space
+ Administration. All rights reserved.
+
+ Open MCT is licensed under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0.
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ Open MCT includes source code licensed under additional open source
+ licenses. See the Open Source Licenses file (LICENSES.md) included with
+ this source code distribution or the Licensing information page available
+ at runtime from the About dialog for additional information.
+-->
+<template>
+<div
+ :style="position"
+ class="c-status-poll-panel c-status-poll-panel--operator"
+ @click.stop="noop"
+>
+ <div class="c-status-poll-panel__section c-status-poll-panel__top">
+ <div
+ class="c-status-poll-panel__title"
+ >Status Poll</div>
+ <div class="c-status-poll-panel__user-role icon-person">{{ role }}</div>
+ <div class="c-status-poll-panel__updated">{{ pollQuestionUpdated }}</div>
+ </div>
+
+ <div class="c-status-poll-panel__section c-status-poll-panel__poll-question">
+ {{ currentPollQuestion }}
+ </div>
+
+ <div class="c-status-poll-panel__section c-status-poll-panel__bottom">
+ <div class="c-status-poll-panel__set-status-label">My status:</div>
+ <select
+ v-model="selectedStatus"
+ name="setStatus"
+ @change="changeStatus"
+ >
+ <option
+ v-for="status in allStatuses"
+ :key="status.key"
+ :value="status.key"
+ >
+ {{ status.label }}
+ </option>
+ </select>
+ </div>
+</div>
+</template>
+
+<script>
+
+export default {
+ inject: ['openmct', 'indicator', 'configuration'],
+ props: {
+ positionX: {
+ type: Number,
+ required: true
+ },
+ positionY: {
+ type: Number,
+ required: true
+ }
+ },
+ data() {
+ return {
+ allRoles: [],
+ role: '--',
+ pollQuestionUpdated: '--',
+ currentPollQuestion: '--',
+ selectedStatus: undefined,
+ allStatuses: []
+ };
+ },
+ computed: {
+ position() {
+ return {
+ position: 'absolute',
+ left: `${this.positionX}px`,
+ top: `${this.positionY}px`
+ };
+ }
+ },
+ beforeDestroy() {
+ this.openmct.user.status.off('statusChange', this.setStatus);
+ this.openmct.user.status.off('pollQuestionChange', this.setPollQuestion);
+ },
+ async mounted() {
+ this.unsubscribe = [];
+ await this.fetchUser();
+ await this.findFirstApplicableRole();
+ this.fetchPossibleStatusesForUser();
+ this.fetchCurrentPoll();
+ this.fetchMyStatus();
+ this.subscribeToMyStatus();
+ this.subscribeToPollQuestion();
+ },
+ methods: {
+ async findFirstApplicableRole() {
+ this.role = await this.openmct.user.status.getStatusRoleForCurrentUser();
+ },
+ async fetchUser() {
+ this.user = await this.openmct.user.getCurrentUser();
+ },
+ async fetchCurrentPoll() {
+ const pollQuestion = await this.openmct.user.status.getPollQuestion();
+ if (pollQuestion !== undefined) {
+ this.setPollQuestion(pollQuestion);
+ }
+ },
+ async fetchPossibleStatusesForUser() {
+ this.allStatuses = await this.openmct.user.status.getPossibleStatuses();
+ },
+ setPollQuestion(pollQuestion) {
+ this.currentPollQuestion = pollQuestion.question;
+ this.pollQuestionUpdated = new Date(pollQuestion.timestamp).toISOString();
+
+ this.indicator.text(pollQuestion?.question || '');
+ },
+ async fetchMyStatus() {
+ const activeStatusRole = await this.openmct.user.status.getStatusRoleForCurrentUser();
+ const status = await this.openmct.user.status.getStatusForRole(activeStatusRole);
+
+ if (status !== undefined) {
+ this.setStatus({status});
+ }
+ },
+ subscribeToMyStatus() {
+ this.openmct.user.status.on('statusChange', this.setStatus);
+ },
+ subscribeToPollQuestion() {
+ this.openmct.user.status.on('pollQuestionChange', this.setPollQuestion);
+ },
+ setStatus({role, status}) {
+ status = this.applyStyling(status);
+ this.selectedStatus = status.key;
+ this.indicator.iconClass(status.iconClassPoll);
+ this.indicator.statusClass(status.statusClass);
+ if (this.isDefaultStatus(status)) {
+ this.indicator.text(this.currentPollQuestion);
+ } else {
+ this.indicator.text(status.label);
+ }
+ },
+ isDefaultStatus(status) {
+ return status.key === this.allStatuses[0].key;
+ },
+ findStatusByKey(statusKey) {
+ return this.allStatuses.find(possibleMatch => possibleMatch.key === statusKey);
+ },
+ async changeStatus() {
+ if (this.selectedStatus !== undefined) {
+ const statusObject = this.findStatusByKey(this.selectedStatus);
+
+ const result = await this.openmct.user.status.setStatusForRole(this.role, statusObject);
+
+ if (result === true) {
+ this.openmct.notifications.info("Successfully set operator status");
+ } else {
+ this.openmct.notifications.error("Unable to set operator status");
+ }
+ }
+ },
+ applyStyling(status) {
+ const stylesForStatus = this.configuration?.statusStyles?.[status.label];
+
+ if (stylesForStatus !== undefined) {
+ return {
+ ...status,
+ ...stylesForStatus
+ };
+ } else {
+ return status;
+ }
+ },
+ noop() {}
+ }
+};
+</script>
diff --git a/src/plugins/operatorStatus/operatorStatus/OperatorStatusIndicator.js b/src/plugins/operatorStatus/operatorStatus/OperatorStatusIndicator.js
new file mode 100644
index 000000000..9eb96e938
--- /dev/null
+++ b/src/plugins/operatorStatus/operatorStatus/OperatorStatusIndicator.js
@@ -0,0 +1,63 @@
+/*****************************************************************************
+ * Open MCT, Copyright (c) 2014-2022, United States Government
+ * as represented by the Administrator of the National Aeronautics and Space
+ * Administration. All rights reserved.
+ *
+ * Open MCT is licensed under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ * Open MCT includes source code licensed under additional open source
+ * licenses. See the Open Source Licenses file (LICENSES.md) included with
+ * this source code distribution or the Licensing information page available
+ * at runtime from the About dialog for additional information.
+ *****************************************************************************/
+import Vue from 'vue';
+
+import AbstractStatusIndicator from '../AbstractStatusIndicator';
+import OperatorStatusComponent from './OperatorStatus.vue';
+
+export default class OperatorStatusIndicator extends AbstractStatusIndicator {
+ createPopupComponent() {
+ const indicator = this.getIndicator();
+ const popupElement = new Vue({
+ components: {
+ OperatorStatus: OperatorStatusComponent
+ },
+ provide: {
+ openmct: this.openmct,
+ indicator: indicator,
+ configuration: this.getConfiguration()
+ },
+ data() {
+ return {
+ positionX: 0,
+ positionY: 0
+ };
+ },
+ template: '<operator-status :positionX="positionX" :positionY="positionY" />'
+ }).$mount();
+
+ return popupElement;
+ }
+
+ createIndicator() {
+ const operatorIndicator = this.openmct.indicators.simpleIndicator();
+
+ operatorIndicator.text("My Operator Status");
+ operatorIndicator.description("Set my operator status");
+ operatorIndicator.iconClass('icon-status-poll-question-mark');
+ operatorIndicator.element.classList.add("c-indicator--operator-status");
+ operatorIndicator.element.classList.add("no-minify");
+ operatorIndicator.on('click', this.showPopup);
+
+ return operatorIndicator;
+ }
+}
diff --git a/src/plugins/operatorStatus/plugin.js b/src/plugins/operatorStatus/plugin.js
new file mode 100644
index 000000000..3d449d1eb
--- /dev/null
+++ b/src/plugins/operatorStatus/plugin.js
@@ -0,0 +1,50 @@
+/*****************************************************************************
+ * Open MCT, Copyright (c) 2014-2022, United States Government
+ * as represented by the Administrator of the National Aeronautics and Space
+ * Administration. All rights reserved.
+ *
+ * Open MCT is licensed under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ * Open MCT includes source code licensed under additional open source
+ * licenses. See the Open Source Licenses file (LICENSES.md) included with
+ * this source code distribution or the Licensing information page available
+ * at runtime from the About dialog for additional information.
+ *****************************************************************************/
+import OperatorStatusIndicator from './operatorStatus/OperatorStatusIndicator';
+import PollQuestionIndicator from './pollQuestion/PollQuestionIndicator';
+
+/**
+ * @param {import('@/api/user/UserAPI').UserAPIConfiguration} configuration
+ * @returns {function} The plugin install function
+ */
+export default function operatorStatusPlugin(configuration) {
+ return function install(openmct) {
+
+ if (openmct.user.hasProvider()) {
+ openmct.user.status.canProvideStatusForCurrentUser().then(canProvideStatus => {
+ if (canProvideStatus) {
+ const operatorStatusIndicator = new OperatorStatusIndicator(openmct, configuration);
+
+ operatorStatusIndicator.install();
+ }
+ });
+
+ openmct.user.status.canSetPollQuestion().then(canSetPollQuestion => {
+ if (canSetPollQuestion) {
+ const pollQuestionIndicator = new PollQuestionIndicator(openmct, configuration);
+
+ pollQuestionIndicator.install();
+ }
+ });
+ }
+ };
+}
diff --git a/src/plugins/operatorStatus/pollQuestion/PollQuestion.vue b/src/plugins/operatorStatus/pollQuestion/PollQuestion.vue
new file mode 100644
index 000000000..f279e5797
--- /dev/null
+++ b/src/plugins/operatorStatus/pollQuestion/PollQuestion.vue
@@ -0,0 +1,184 @@
+<!--
+ Open MCT, Copyright (c) 2014-2022, United States Government
+ as represented by the Administrator of the National Aeronautics and Space
+ Administration. All rights reserved.
+
+ Open MCT is licensed under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0.
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ Open MCT includes source code licensed under additional open source
+ licenses. See the Open Source Licenses file (LICENSES.md) included with
+ this source code distribution or the Licensing information page available
+ at runtime from the About dialog for additional information.
+-->
+<template>
+<div
+ :style="position"
+ class="c-status-poll-panel c-status-poll-panel--admin"
+ @click.stop="noop"
+>
+ <div class="c-status-poll-panel__section c-status-poll-panel__top">
+ <div
+ class="c-status-poll-panel__title"
+ >Manage Status Poll</div>
+ <div class="c-status-poll-panel__updated">Last updated: {{ pollQuestionUpdated }}</div>
+ </div>
+
+ <div class="c-status-poll__section c-status-poll-panel__content c-spq">
+ <!-- Grid layout -->
+ <div class="c-spq__label">Current:</div>
+ <div class="c-spq__value c-status-poll-panel__poll-question">{{ currentPollQuestion }}</div>
+
+ <template v-if="statusCountViewModel.length > 0">
+ <div class="c-spq__label">Reporting:</div>
+ <div class="c-spq__value c-status-poll-panel__poll-reporting c-status-poll-report">
+ <div
+ v-for="entry in statusCountViewModel"
+ :key="entry.status.key"
+ class="c-status-poll-report__count"
+ :style="[{
+ background: entry.status.statusBgColor,
+ color: entry.status.statusFgColor
+ }]"
+ >
+ <div
+ class="c-status-poll-report__count-type"
+ :class="entry.status.iconClass"
+ ></div>
+ <div class="c-status-poll-report__count-value">
+ {{ entry.roleCount }}
+ </div>
+ </div>
+ </div>
+ </template>
+
+ <div class="c-spq__label">New poll:</div>
+ <div class="c-spq__value c-status-poll-panel__poll-new-question">
+ <input
+ v-model="newPollQuestion"
+ type="text"
+ name="newPollQuestion"
+ >
+ <button
+ class="c-button"
+ @click="updatePollQuestion"
+ >Update</button>
+ </div>
+ </div>
+
+</div>
+</template>
+
+<script>
+
+export default {
+ inject: ['openmct', 'indicator', 'configuration'],
+ props: {
+ positionX: {
+ type: Number,
+ required: true
+ },
+ positionY: {
+ type: Number,
+ required: true
+ }
+ },
+ data() {
+ return {
+ pollQuestionUpdated: '--',
+ currentPollQuestion: '--',
+ newPollQuestion: undefined,
+ statusCountViewModel: []
+ };
+ },
+ computed: {
+ position() {
+ return {
+ position: 'absolute',
+ left: `${this.positionX}px`,
+ top: `${this.positionY}px`
+ };
+ }
+ },
+ mounted() {
+ this.fetchCurrentPoll();
+ this.subscribeToPollQuestion();
+ this.fetchStatusSummary();
+ this.openmct.user.status.on('statusChange', this.fetchStatusSummary);
+ },
+ beforeDestroy() {
+ this.openmct.user.status.off('statusChange', this.fetchStatusSummary);
+ this.openmct.user.status.off('pollQuestionChange', this.setPollQuestion);
+ },
+ methods: {
+ async fetchCurrentPoll() {
+ const pollQuestion = await this.openmct.user.status.getPollQuestion();
+ if (pollQuestion !== undefined) {
+ this.setPollQuestion(pollQuestion);
+ }
+ },
+ subscribeToPollQuestion() {
+ this.openmct.user.status.on('pollQuestionChange', this.setPollQuestion);
+ },
+ setPollQuestion(pollQuestion) {
+ this.currentPollQuestion = pollQuestion.question;
+ this.pollQuestionUpdated = new Date(pollQuestion.timestamp).toISOString();
+ this.indicator.text(pollQuestion.question);
+ },
+ async updatePollQuestion() {
+ const result = await this.openmct.user.status.setPollQuestion(this.newPollQuestion);
+ if (result === true) {
+ this.openmct.notifications.info("Successfully set new poll question");
+ } else {
+ this.openmct.notifications.error("Unable to set new poll question.");
+ }
+
+ this.newPollQuestion = undefined;
+ },
+ async fetchStatusSummary() {
+ const allStatuses = await this.openmct.user.status.getPossibleStatuses();
+ const statusCountMap = allStatuses.reduce((statusToCountMap, status) => {
+ statusToCountMap[status.key] = 0;
+
+ return statusToCountMap;
+ }, {});
+ const allStatusRoles = await this.openmct.user.status.getAllStatusRoles();
+ const statusesForRoles = await Promise.all(allStatusRoles.map(role => this.openmct.user.status.getStatusForRole(role)));
+
+ statusesForRoles.forEach((status, i) => {
+ const currentCount = statusCountMap[status.key];
+ statusCountMap[status.key] = currentCount + 1;
+ });
+
+ this.statusCountViewModel = allStatuses.map((status) => {
+ return {
+ status: this.applyStyling(status),
+ roleCount: statusCountMap[status.key]
+ };
+ });
+ },
+ applyStyling(status) {
+ const stylesForStatus = this.configuration?.statusStyles?.[status.label];
+
+ if (stylesForStatus !== undefined) {
+ return {
+ ...status,
+ ...stylesForStatus
+ };
+ } else {
+ return status;
+ }
+ },
+ noop() {}
+ }
+
+};
+</script>
diff --git a/src/plugins/operatorStatus/pollQuestion/PollQuestionIndicator.js b/src/plugins/operatorStatus/pollQuestion/PollQuestionIndicator.js
new file mode 100644
index 000000000..ea85d5905
--- /dev/null
+++ b/src/plugins/operatorStatus/pollQuestion/PollQuestionIndicator.js
@@ -0,0 +1,63 @@
+/*****************************************************************************
+ * Open MCT, Copyright (c) 2014-2022, United States Government
+ * as represented by the Administrator of the National Aeronautics and Space
+ * Administration. All rights reserved.
+ *
+ * Open MCT is licensed under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0.
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ * Open MCT includes source code licensed under additional open source
+ * licenses. See the Open Source Licenses file (LICENSES.md) included with
+ * this source code distribution or the Licensing information page available
+ * at runtime from the About dialog for additional information.
+ *****************************************************************************/
+import Vue from 'vue';
+
+import AbstractStatusIndicator from '../AbstractStatusIndicator';
+import PollQuestionComponent from './PollQuestion.vue';
+
+export default class PollQuestionIndicator extends AbstractStatusIndicator {
+ createPopupComponent() {
+ const indicator = this.getIndicator();
+ const pollQuestionElement = new Vue({
+ components: {
+ PollQuestion: PollQuestionComponent
+ },
+ provide: {
+ openmct: this.openmct,
+ indicator: indicator,
+ configuration: this.getConfiguration()
+ },
+ data() {
+ return {
+ positionX: 0,
+ positionY: 0
+ };
+ },
+ template: '<poll-question :positionX="positionX" :positionY="positionY" />'
+ }).$mount();
+
+ return pollQuestionElement;
+ }
+
+ createIndicator() {
+ const pollQuestionIndicator = this.openmct.indicators.simpleIndicator();
+
+ pollQuestionIndicator.text("Poll Question");
+ pollQuestionIndicator.description("Set the current poll question");
+ pollQuestionIndicator.iconClass('icon-status-poll-edit');
+ pollQuestionIndicator.element.classList.add("c-indicator--operator-status");
+ pollQuestionIndicator.element.classList.add("no-minify");
+ pollQuestionIndicator.on('click', this.showPopup);
+
+ return pollQuestionIndicator;
+ }
+}
diff --git a/src/plugins/plugins.js b/src/plugins/plugins.js
index 7beccebd5..e53ac6843 100644
--- a/src/plugins/plugins.js
+++ b/src/plugins/plugins.js
@@ -78,6 +78,7 @@ define([
'./userIndicator/plugin',
'../../example/exampleUser/plugin',
'./localStorage/plugin',
+ './operatorStatus/plugin',
'./gauge/GaugePlugin',
'./timelist/plugin'
], function (
@@ -138,6 +139,7 @@ define([
UserIndicator,
ExampleUser,
LocalStorage,
+ OperatorStatus,
GaugePlugin,
TimeList
) {
@@ -217,6 +219,7 @@ define([
plugins.DeviceClassifier = DeviceClassifier.default;
plugins.UserIndicator = UserIndicator.default;
plugins.LocalStorage = LocalStorage.default;
+ plugins.OperatorStatus = OperatorStatus.default;
plugins.Gauge = GaugePlugin.default;
plugins.Timelist = TimeList.default;
diff --git a/src/plugins/summaryWidget/src/Condition.js b/src/plugins/summaryWidget/src/Condition.js
index 997ad67b4..66f9ecbeb 100644
--- a/src/plugins/summaryWidget/src/Condition.js
+++ b/src/plugins/summaryWidget/src/Condition.js
@@ -4,16 +4,16 @@ define([
'./input/KeySelect',
'./input/OperationSelect',
'./eventHelpers',
- 'EventEmitter',
- 'zepto'
+ '../../../utils/template/templateHelpers',
+ 'EventEmitter'
], function (
conditionTemplate,
ObjectSelect,
KeySelect,
OperationSelect,
eventHelpers,
- EventEmitter,
- $
+ templateHelpers,
+ EventEmitter
) {
/**
* Represents an individual condition for a summary widget rule. Manages the
@@ -31,12 +31,13 @@ define([
this.index = index;
this.conditionManager = conditionManager;
- this.domElement = $(conditionTemplate);
+ this.domElement = templateHelpers.convertTemplateToHTML(conditionTemplate)[0];
+
this.eventEmitter = new EventEmitter();
this.supportedCallbacks = ['remove', 'duplicate', 'change'];
- this.deleteButton = $('.t-delete', this.domElement);
- this.duplicateButton = $('.t-duplicate', this.domElement);
+ this.deleteButton = this.domElement.querySelector('.t-delete');
+ this.duplicateButton = this.domElement.querySelector('.t-duplicate');
this.selects = {};
this.valueInputs = [];
@@ -105,9 +106,10 @@ define([
});
Object.values(this.selects).forEach(function (select) {
- $('.t-configuration', self.domElement).append(select.getDOM());
+ self.domElement.querySelector('.t-configuration').append(select.getDOM());
});
- this.listenTo($('.t-value-inputs', this.domElement), 'input', onValueInput);
+
+ this.listenTo(this.domElement.querySelector('.t-value-inputs'), 'input', onValueInput);
}
Condition.prototype.getDOM = function (container) {
@@ -132,7 +134,7 @@ define([
* Hide the appropriate inputs when this is the only condition
*/
Condition.prototype.hideButtons = function () {
- this.deleteButton.hide();
+ this.deleteButton.style.display = 'none';
};
/**
@@ -172,14 +174,14 @@ define([
*/
Condition.prototype.generateValueInputs = function (operation) {
const evaluator = this.conditionManager.getEvaluator();
- const inputArea = $('.t-value-inputs', this.domElement);
+ const inputArea = this.domElement.querySelector('.t-value-inputs');
let inputCount;
let inputType;
let newInput;
let index = 0;
let emitChange = false;
- inputArea.html('');
+ inputArea.innerHTML = '';
this.valueInputs = [];
this.config.values = this.config.values || [];
@@ -189,17 +191,24 @@ define([
while (index < inputCount) {
if (inputType === 'select') {
- newInput = $('<select>' + this.generateSelectOptions() + '</select>');
+ const options = this.generateSelectOptions();
+
+ newInput = document.createElement("select");
+ newInput.innerHTML = options;
+
emitChange = true;
} else {
const defaultValue = inputType === 'number' ? 0 : '';
const value = this.config.values[index] || defaultValue;
this.config.values[index] = value;
- newInput = $('<input type = "' + inputType + '" value = "' + value + '"></input>');
+
+ newInput = document.createElement("input");
+ newInput.type = `${inputType}`;
+ newInput.value = `${value}`;
}
- this.valueInputs.push(newInput.get(0));
- inputArea.append(newInput);
+ this.valueInputs.push(newInput);
+ inputArea.appendChild(newInput);
index += 1;
}
diff --git a/src/plugins/summaryWidget/src/ConditionManager.js b/src/plugins/summaryWidget/src/ConditionManager.js
index ff90bc7bc..e50264903 100644
--- a/src/plugins/summaryWidget/src/ConditionManager.js
+++ b/src/plugins/summaryWidget/src/ConditionManager.js
@@ -2,13 +2,11 @@ define ([
'./ConditionEvaluator',
'objectUtils',
'EventEmitter',
- 'zepto',
'lodash'
], function (
ConditionEvaluator,
objectUtils,
EventEmitter,
- $,
_
) {
@@ -232,7 +230,10 @@ define ([
self.eventEmitter.emit('add', obj);
- $('.w-summary-widget').removeClass('s-status-no-data');
+ const summaryWidget = document.querySelector('.w-summary-widget');
+ if (summaryWidget) {
+ summaryWidget.classList.remove('s-status-no-data');
+ }
}
};
@@ -256,7 +257,10 @@ define ([
this.eventEmitter.emit('remove', identifier);
if (_.isEmpty(this.compositionObjs)) {
- $('.w-summary-widget').addClass('s-status-no-data');
+ const summaryWidget = document.querySelector('.w-summary-widget');
+ if (summaryWidget) {
+ summaryWidget.classList.add('s-status-no-data');
+ }
}
};
diff --git a/src/plugins/summaryWidget/src/Rule.js b/src/plugins/summaryWidget/src/Rule.js
index d9217f0e0..0b8f28804 100644
--- a/src/plugins/summaryWidget/src/Rule.js
+++ b/src/plugins/summaryWidget/src/Rule.js
@@ -4,18 +4,18 @@ define([
'./input/ColorPalette',
'./input/IconPalette',
'./eventHelpers',
+ '../../../utils/template/templateHelpers',
'EventEmitter',
- 'lodash',
- 'zepto'
+ 'lodash'
], function (
ruleTemplate,
Condition,
ColorPalette,
IconPalette,
eventHelpers,
+ templateHelpers,
EventEmitter,
- _,
- $
+ _
) {
/**
* An object representing a summary widget rule. Maintains a set of text
@@ -41,7 +41,7 @@ define([
this.widgetDnD = widgetDnD;
this.container = container;
- this.domElement = $(ruleTemplate);
+ this.domElement = templateHelpers.convertTemplateToHTML(ruleTemplate)[0];
this.eventEmitter = new EventEmitter();
this.supportedCallbacks = ['remove', 'duplicate', 'change', 'conditionChange'];
this.conditions = [];
@@ -50,31 +50,32 @@ define([
this.remove = this.remove.bind(this);
this.duplicate = this.duplicate.bind(this);
- this.thumbnail = $('.t-widget-thumb', this.domElement);
- this.thumbnailIcon = $('.js-sw__icon', this.domElement);
- this.thumbnailLabel = $('.c-sw__label', this.domElement);
- this.title = $('.rule-title', this.domElement);
- this.description = $('.rule-description', this.domElement);
- this.trigger = $('.t-trigger', this.domElement);
- this.toggleConfigButton = $('.js-disclosure', this.domElement);
- this.configArea = $('.widget-rule-content', this.domElement);
- this.grippy = $('.t-grippy', this.domElement);
- this.conditionArea = $('.t-widget-rule-config', this.domElement);
- this.jsConditionArea = $('.t-rule-js-condition-input-holder', this.domElement);
- this.deleteButton = $('.t-delete', this.domElement);
- this.duplicateButton = $('.t-duplicate', this.domElement);
- this.addConditionButton = $('.add-condition', this.domElement);
+ this.thumbnail = this.domElement.querySelector('.t-widget-thumb');
+ this.thumbnailIcon = this.domElement.querySelector('.js-sw__icon');
+ this.thumbnailLabel = this.domElement.querySelector('.c-sw__label');
+ this.title = this.domElement.querySelector('.rule-title');
+ this.description = this.domElement.querySelector('.rule-description');
+ this.trigger = this.domElement.querySelector('.t-trigger');
+ this.toggleConfigButton = this.domElement.querySelector('.js-disclosure');
+ this.configArea = this.domElement.querySelector('.widget-rule-content');
+ this.grippy = this.domElement.querySelector('.t-grippy');
+ this.conditionArea = this.domElement.querySelector('.t-widget-rule-config');
+ this.jsConditionArea = this.domElement.querySelector('.t-rule-js-condition-input-holder');
+ this.deleteButton = this.domElement.querySelector('.t-delete');
+ this.duplicateButton = this.domElement.querySelector('.t-duplicate');
+ this.addConditionButton = this.domElement.querySelector('.add-condition');
/**
* The text inputs for this rule: any input included in this object will
* have the appropriate event handlers registered to it, and it's corresponding
* field in the domain object will be updated with its value
*/
+
this.textInputs = {
- name: $('.t-rule-name-input', this.domElement),
- label: $('.t-rule-label-input', this.domElement),
- message: $('.t-rule-message-input', this.domElement),
- jsCondition: $('.t-rule-js-condition-input', this.domElement)
+ name: this.domElement.querySelector('.t-rule-name-input'),
+ label: this.domElement.querySelector('.t-rule-label-input'),
+ message: this.domElement.querySelector('.t-rule-message-input'),
+ jsCondition: this.domElement.querySelector('.t-rule-js-condition-input')
};
this.iconInput = new IconPalette('', container);
@@ -94,7 +95,7 @@ define([
function onIconInput(icon) {
self.config.icon = icon;
self.updateDomainObject('icon', icon);
- self.thumbnailIcon.removeClass().addClass(THUMB_ICON_CLASS + ' ' + icon);
+ self.thumbnailIcon.className = `${THUMB_ICON_CLASS + ' ' + icon}`;
self.eventEmitter.emit('change');
}
@@ -106,7 +107,7 @@ define([
*/
function onColorInput(color, property) {
self.config.style[property] = color;
- self.thumbnail.css(property, color);
+ self.thumbnail.style[property] = color;
self.eventEmitter.emit('change');
}
@@ -116,7 +117,10 @@ define([
* @private
*/
function encodeMsg(msg) {
- return $('<div />').text(msg).html();
+ const div = document.createElement('div');
+ div.innerText = msg;
+
+ return div.innerText;
}
/**
@@ -144,9 +148,9 @@ define([
self.config[inputKey] = text;
self.updateDomainObject();
if (inputKey === 'name') {
- self.title.html(text);
+ self.title.innerText = text;
} else if (inputKey === 'label') {
- self.thumbnailLabel.html(text);
+ self.thumbnailLabel.innerText = text;
}
self.eventEmitter.emit('change');
@@ -158,13 +162,14 @@ define([
* @private
*/
function onDragStart(event) {
- $('.t-drag-indicator').each(function () {
+ document.querySelectorAll('.t-drag-indicator').forEach(indicator => {
// eslint-disable-next-line no-invalid-this
- $(this).html($('.widget-rule-header', self.domElement).clone().get(0));
+ const ruleHeader = self.domElement.querySelectorAll('.widget-rule-header')[0].cloneNode(true);
+ indicator.innerHTML = ruleHeader;
});
- self.widgetDnD.setDragImage($('.widget-rule-header', self.domElement).clone().get(0));
+ self.widgetDnD.setDragImage(self.domElement.querySelectorAll('.widget-rule-header')[0].cloneNode(true));
self.widgetDnD.dragStart(self.config.id);
- self.domElement.hide();
+ self.domElement.style.display = 'none';
}
/**
@@ -172,20 +177,31 @@ define([
* @private
*/
function toggleConfig() {
- self.configArea.toggleClass('expanded');
- self.toggleConfigButton.toggleClass('c-disclosure-triangle--expanded');
+ if (self.configArea.classList.contains('expanded')) {
+ self.configArea.classList.remove('expanded');
+ } else {
+ self.configArea.classList.add('expanded');
+ }
+
+ if (self.toggleConfigButton.classList.contains('c-disclosure-triangle--expanded')) {
+ self.toggleConfigButton.classList.remove('c-disclosure-triangle--expanded');
+ } else {
+ self.toggleConfigButton.classList.add('c-disclosure-triangle--expanded');
+ }
+
self.config.expanded = !self.config.expanded;
}
- $('.t-rule-label-input', this.domElement).before(this.iconInput.getDOM());
+ const labelInput = this.domElement.querySelector('.t-rule-label-input');
+ labelInput.parentNode.insertBefore(this.iconInput.getDOM(), labelInput);
this.iconInput.set(self.config.icon);
this.iconInput.on('change', function (value) {
onIconInput(value);
});
// Initialize thumbs when first loading
- this.thumbnailIcon.removeClass().addClass(THUMB_ICON_CLASS + ' ' + self.config.icon);
- this.thumbnailLabel.html(self.config.label);
+ this.thumbnailIcon.className = `${THUMB_ICON_CLASS + ' ' + self.config.icon}`;
+ this.thumbnailLabel.innerText = self.config.label;
Object.keys(this.colorInputs).forEach(function (inputKey) {
const input = self.colorInputs[inputKey];
@@ -198,15 +214,17 @@ define([
self.updateDomainObject();
});
- $('.t-style-input', self.domElement).append(input.getDOM());
+ self.domElement.querySelector('.t-style-input').append(input.getDOM());
});
Object.keys(this.textInputs).forEach(function (inputKey) {
- self.textInputs[inputKey].prop('value', self.config[inputKey] || '');
- self.listenTo(self.textInputs[inputKey], 'input', function () {
- // eslint-disable-next-line no-invalid-this
- onTextInput(this, inputKey);
- });
+ if (self.textInputs[inputKey]) {
+ self.textInputs[inputKey].value = self.config[inputKey] || '';
+ self.listenTo(self.textInputs[inputKey], 'input', function () {
+ // eslint-disable-next-line no-invalid-this
+ onTextInput(this, inputKey);
+ });
+ }
});
this.listenTo(this.deleteButton, 'click', this.remove);
@@ -217,15 +235,15 @@ define([
this.listenTo(this.toggleConfigButton, 'click', toggleConfig);
this.listenTo(this.trigger, 'change', onTriggerInput);
- this.title.html(self.config.name);
- this.description.html(self.config.description);
- this.trigger.prop('value', self.config.trigger);
+ this.title.innerHTML = self.config.name;
+ this.description.innerHTML = self.config.description;
+ this.trigger.value = self.config.trigger;
this.listenTo(this.grippy, 'mousedown', onDragStart);
this.widgetDnD.on('drop', function () {
// eslint-disable-next-line no-invalid-this
this.domElement.show();
- $('.t-drag-indicator').hide();
+ document.querySelector('.t-drag-indicator').style.display = 'none';
}, this);
if (!this.conditionManager.loadCompleted()) {
@@ -233,21 +251,21 @@ define([
}
if (!this.config.expanded) {
- this.configArea.removeClass('expanded');
- this.toggleConfigButton.removeClass('c-disclosure-triangle--expanded');
+ this.configArea.classList.remove('expanded');
+ this.toggleConfigButton.classList.remove('c-disclosure-triangle--expanded');
}
if (this.domainObject.configuration.ruleOrder.length === 2) {
- $('.t-grippy', this.domElement).hide();
+ this.domElement.querySelector('.t-grippy').style.display = 'none';
}
this.refreshConditions();
//if this is the default rule, hide elements that don't apply
if (this.config.id === 'default') {
- $('.t-delete', this.domElement).hide();
- $('.t-widget-rule-config', this.domElement).hide();
- $('.t-grippy', this.domElement).hide();
+ this.domElement.querySelector('.t-delete').style.display = 'none';
+ this.domElement.querySelector('.t-widget-rule-config').style.display = 'none';
+ this.domElement.querySelector('.t-grippy').style.display = 'none';
}
}
@@ -304,8 +322,8 @@ define([
* During a rule drag event, show the placeholder element after this rule
*/
Rule.prototype.showDragIndicator = function () {
- $('.t-drag-indicator').hide();
- $('.t-drag-indicator', this.domElement).show();
+ document.querySelector('.t-drag-indicator').style.display = 'none';
+ this.domElement.querySelector('.t-drag-indicator').style.display = '';
};
/**
@@ -397,7 +415,10 @@ define([
const triggerContextStr = self.config.trigger === 'any' ? ' or ' : ' and ';
self.conditions = [];
- $('.t-condition', this.domElement).remove();
+
+ this.domElement.querySelectorAll('.t-condition').forEach(condition => {
+ condition.remove();
+ });
this.config.conditions.forEach(function (condition, index) {
const newCondition = new Condition(condition, index, self.conditionManager);
@@ -408,16 +429,23 @@ define([
});
if (this.config.trigger === 'js') {
- this.jsConditionArea.show();
- this.addConditionButton.hide();
+ if (this.jsConditionArea) {
+ this.jsConditionArea.style.display = '';
+ }
+
+ this.addConditionButton.style.display = 'none';
} else {
- this.jsConditionArea.hide();
- this.addConditionButton.show();
+ if (this.jsConditionArea) {
+ this.jsConditionArea.style.display = 'none';
+ }
+
+ this.addConditionButton.style.display = '';
self.conditions.forEach(function (condition) {
$condition = condition.getDOM();
- $('li:last-of-type', self.conditionArea).before($condition);
+ const lastOfType = self.conditionArea.querySelector('li:last-of-type');
+ lastOfType.parentNode.insertBefore($condition, lastOfType);
if (loopCnt > 0) {
- $('.t-condition-context', $condition).html(triggerContextStr + ' when');
+ $condition.querySelector('.t-condition-context').innerHTML = triggerContextStr + ' when';
}
loopCnt++;
@@ -489,7 +517,7 @@ define([
}
description = (description === '' ? this.config.description : description);
- this.description.html(description);
+ this.description.innerHTML = self.config.description;
this.config.description = description;
};
diff --git a/src/plugins/summaryWidget/src/SummaryWidget.js b/src/plugins/summaryWidget/src/SummaryWidget.js
index 1a5c1ceba..e9c1442bf 100644
--- a/src/plugins/summaryWidget/src/SummaryWidget.js
+++ b/src/plugins/summaryWidget/src/SummaryWidget.js
@@ -5,9 +5,9 @@ define([
'./TestDataManager',
'./WidgetDnD',
'./eventHelpers',
+ '../../../utils/template/templateHelpers',
'objectUtils',
'lodash',
- 'zepto',
'@braintree/sanitize-url'
], function (
widgetTemplate,
@@ -16,9 +16,9 @@ define([
TestDataManager,
WidgetDnD,
eventHelpers,
+ templateHelpers,
objectUtils,
_,
- $,
urlSanitizeLib
) {
@@ -54,20 +54,22 @@ define([
this.activeId = 'default';
this.rulesById = {};
- this.domElement = $(widgetTemplate);
- this.toggleRulesControl = $('.t-view-control-rules', this.domElement);
- this.toggleTestDataControl = $('.t-view-control-test-data', this.domElement);
- this.widgetButton = this.domElement.children('#widget');
+ this.domElement = templateHelpers.convertTemplateToHTML(widgetTemplate)[0];
+ this.toggleRulesControl = this.domElement.querySelector('.t-view-control-rules');
+ this.toggleTestDataControl = this.domElement.querySelector('.t-view-control-test-data');
+
+ this.widgetButton = this.domElement.querySelector(':scope > #widget');
+
this.editing = false;
this.container = '';
- this.editListenerUnsubscribe = $.noop;
+ this.editListenerUnsubscribe = () => {};
- this.outerWrapper = $('.widget-edit-holder', this.domElement);
- this.ruleArea = $('#ruleArea', this.domElement);
- this.configAreaRules = $('.widget-rules-wrapper', this.domElement);
+ this.outerWrapper = this.domElement.querySelector('.widget-edit-holder');
+ this.ruleArea = this.domElement.querySelector('#ruleArea');
+ this.configAreaRules = this.domElement.querySelector('.widget-rules-wrapper');
- this.testDataArea = $('.widget-test-data', this.domElement);
- this.addRuleButton = $('#addRule', this.domElement);
+ this.testDataArea = this.domElement.querySelector('.widget-test-data');
+ this.addRuleButton = this.domElement.querySelector('#addRule');
this.conditionManager = new ConditionManager(this.domainObject, this.openmct);
this.testDataManager = new TestDataManager(this.domainObject, this.conditionManager, this.openmct);
@@ -87,8 +89,17 @@ define([
* @private
*/
function toggleTestData() {
- self.outerWrapper.toggleClass('expanded-widget-test-data');
- self.toggleTestDataControl.toggleClass('c-disclosure-triangle--expanded');
+ if (self.outerWrapper.classList.contains('expanded-widget-test-data')) {
+ self.outerWrapper.classList.remove('expanded-widget-test-data');
+ } else {
+ self.outerWrapper.classList.add('expanded-widget-test-data');
+ }
+
+ if (self.toggleTestDataControl.classList.contains('c-disclosure-triangle--expanded')) {
+ self.toggleTestDataControl.classList.remove('c-disclosure-triangle--expanded');
+ } else {
+ self.toggleTestDataControl.classList.add('c-disclosure-triangle--expanded');
+ }
}
this.listenTo(this.toggleTestDataControl, 'click', toggleTestData);
@@ -98,8 +109,8 @@ define([
* @private
*/
function toggleRules() {
- self.outerWrapper.toggleClass('expanded-widget-rules');
- self.toggleRulesControl.toggleClass('c-disclosure-triangle--expanded');
+ templateHelpers.toggleClass(self.outerWrapper, 'expanded-widget-rules');
+ templateHelpers.toggleClass(self.toggleRulesControl, 'c-disclosure-triangle--expanded');
}
this.listenTo(this.toggleRulesControl, 'click', toggleRules);
@@ -113,15 +124,15 @@ define([
*/
SummaryWidget.prototype.addHyperlink = function (url, openNewTab) {
if (url) {
- this.widgetButton.attr('href', urlSanitizeLib.sanitizeUrl(url));
+ this.widgetButton.href = urlSanitizeLib.sanitizeUrl(url);
} else {
- this.widgetButton.removeAttr('href');
+ this.widgetButton.removeAttribute('href');
}
if (openNewTab === 'newTab') {
- this.widgetButton.attr('target', '_blank');
+ this.widgetButton.target = '_blank';
} else {
- this.widgetButton.removeAttr('target');
+ this.widgetButton.removeAttribute('target');
}
};
@@ -149,8 +160,8 @@ define([
SummaryWidget.prototype.show = function (container) {
const self = this;
this.container = container;
- $(container).append(this.domElement);
- $('.widget-test-data', this.domElement).append(this.testDataManager.getDOM());
+ this.container.append(this.domElement);
+ this.domElement.querySelector('.widget-test-data').append(this.testDataManager.getDOM());
this.widgetDnD = new WidgetDnD(this.domElement, this.domainObject.configuration.ruleOrder, this.rulesById);
this.initRule('default', 'Default');
this.domainObject.configuration.ruleOrder.forEach(function (ruleId) {
@@ -190,7 +201,7 @@ define([
const self = this;
const ruleOrder = self.domainObject.configuration.ruleOrder;
const rules = self.rulesById;
- self.ruleArea.html('');
+ self.ruleArea.innerHTML = '';
Object.values(ruleOrder).forEach(function (ruleId) {
self.ruleArea.append(rules[ruleId].getDOM());
});
@@ -205,9 +216,9 @@ define([
rules.forEach(function (ruleKey, index, array) {
if (array.length > 2 && index > 0) {
- $('.t-grippy', rulesById[ruleKey].domElement).show();
+ rulesById[ruleKey].domElement.querySelector('.t-grippy').style.display = '';
} else {
- $('.t-grippy', rulesById[ruleKey].domElement).hide();
+ rulesById[ruleKey].domElement.querySelector('.t-grippy').style.display = 'none';
}
});
};
@@ -218,10 +229,10 @@ define([
SummaryWidget.prototype.updateWidget = function () {
const WIDGET_ICON_CLASS = 'c-sw__icon js-sw__icon';
const activeRule = this.rulesById[this.activeId];
- this.applyStyle($('#widget', this.domElement), activeRule.getProperty('style'));
- $('#widget', this.domElement).prop('title', activeRule.getProperty('message'));
- $('#widgetLabel', this.domElement).html(activeRule.getProperty('label'));
- $('#widgetIcon', this.domElement).removeClass().addClass(WIDGET_ICON_CLASS + ' ' + activeRule.getProperty('icon'));
+ this.applyStyle(this.domElement.querySelector('#widget'), activeRule.getProperty('style'));
+ this.domElement.querySelector('#widget').title = activeRule.getProperty('message');
+ this.domElement.querySelector('#widgetLabel').innerHTML = activeRule.getProperty('label');
+ this.domElement.querySelector('#widgetIcon').classList = WIDGET_ICON_CLASS + ' ' + activeRule.getProperty('icon');
};
/**
@@ -356,7 +367,7 @@ define([
*/
SummaryWidget.prototype.applyStyle = function (elem, style) {
Object.keys(style).forEach(function (propId) {
- elem.css(propId, style[propId]);
+ elem.style[propId] = style[propId];
});
};
diff --git a/src/plugins/summaryWidget/src/TestDataItem.js b/src/plugins/summaryWidget/src/TestDataItem.js
index 32b737a90..ae005c46d 100644
--- a/src/plugins/summaryWidget/src/TestDataItem.js
+++ b/src/plugins/summaryWidget/src/TestDataItem.js
@@ -3,15 +3,15 @@ define([
'./input/ObjectSelect',
'./input/KeySelect',
'./eventHelpers',
- 'EventEmitter',
- 'zepto'
+ '../../../utils/template/templateHelpers',
+ 'EventEmitter'
], function (
itemTemplate,
ObjectSelect,
KeySelect,
eventHelpers,
- EventEmitter,
- $
+ templateHelpers,
+ EventEmitter
) {
/**
@@ -31,12 +31,12 @@ define([
this.index = index;
this.conditionManager = conditionManager;
- this.domElement = $(itemTemplate);
+ this.domElement = templateHelpers.convertTemplateToHTML(itemTemplate)[0];
this.eventEmitter = new EventEmitter();
this.supportedCallbacks = ['remove', 'duplicate', 'change'];
- this.deleteButton = $('.t-delete', this.domElement);
- this.duplicateButton = $('.t-duplicate', this.domElement);
+ this.deleteButton = this.domElement.querySelector('.t-delete');
+ this.duplicateButton = this.domElement.querySelector('.t-duplicate');
this.selects = {};
this.valueInputs = [];
@@ -101,7 +101,7 @@ define([
});
Object.values(this.selects).forEach(function (select) {
- $('.t-configuration', self.domElement).append(select.getDOM());
+ self.domElement.querySelector('.t-configuration').append(select.getDOM());
});
this.listenTo(this.domElement, 'input', onValueInput);
}
@@ -139,7 +139,7 @@ define([
* Hide the appropriate inputs when this is the only item
*/
TestDataItem.prototype.hideButtons = function () {
- this.deleteButton.hide();
+ this.deleteButton.style.display = 'none';
};
/**
@@ -177,17 +177,21 @@ define([
*/
TestDataItem.prototype.generateValueInput = function (key) {
const evaluator = this.conditionManager.getEvaluator();
- const inputArea = $('.t-value-inputs', this.domElement);
+ const inputArea = this.domElement.querySelector('.t-value-inputs');
const dataType = this.conditionManager.getTelemetryPropertyType(this.config.object, key);
const inputType = evaluator.getInputTypeById(dataType);
- inputArea.html('');
+ inputArea.innerHTML = '';
if (inputType) {
if (!this.config.value) {
this.config.value = (inputType === 'number' ? 0 : '');
}
- this.valueInput = $('<input class="sm" type = "' + inputType + '" value = "' + this.config.value + '"> </input>').get(0);
+ const newInput = document.createElement("input");
+ newInput.type = `${inputType}`;
+ newInput.value = `${this.config.value}`;
+
+ this.valueInput = newInput;
inputArea.append(this.valueInput);
}
};
diff --git a/src/plugins/summaryWidget/src/TestDataManager.js b/src/plugins/summaryWidget/src/TestDataManager.js
index 819cc5ee3..70240453d 100644
--- a/src/plugins/summaryWidget/src/TestDataManager.js
+++ b/src/plugins/summaryWidget/src/TestDataManager.js
@@ -2,13 +2,13 @@ define([
'./eventHelpers',
'../res/testDataTemplate.html',
'./TestDataItem',
- 'zepto',
+ '../../../utils/template/templateHelpers',
'lodash'
], function (
eventHelpers,
testDataTemplate,
TestDataItem,
- $,
+ templateHelpers,
_
) {
@@ -28,13 +28,13 @@ define([
this.openmct = openmct;
this.evaluator = this.manager.getEvaluator();
- this.domElement = $(testDataTemplate);
+ this.domElement = templateHelpers.convertTemplateToHTML(testDataTemplate)[0];
this.config = this.domainObject.configuration.testDataConfig;
this.testCache = {};
- this.itemArea = $('.t-test-data-config', this.domElement);
- this.addItemButton = $('.add-test-condition', this.domElement);
- this.testDataInput = $('.t-test-data-checkbox', this.domElement);
+ this.itemArea = this.domElement.querySelector('.t-test-data-config');
+ this.addItemButton = this.domElement.querySelector('.add-test-condition');
+ this.testDataInput = this.domElement.querySelector('.t-test-data-checkbox');
/**
* Toggles whether the associated {ConditionEvaluator} uses the actual
@@ -139,7 +139,10 @@ define([
}
self.items = [];
- $('.t-test-data-item', this.domElement).remove();
+
+ this.domElement.querySelectorAll('.t-test-data-item').forEach(item => {
+ item.remove();
+ });
this.config.forEach(function (item, index) {
const newItem = new TestDataItem(item, index, self.manager);
@@ -150,7 +153,6 @@ define([
});
self.items.forEach(function (item) {
- // $('li:last-of-type', self.itemArea).before(item.getDOM());
self.itemArea.prepend(item.getDOM());
});
diff --git a/src/plugins/summaryWidget/src/WidgetDnD.js b/src/plugins/summaryWidget/src/WidgetDnD.js
index e9ee2f040..90cd3b697 100644
--- a/src/plugins/summaryWidget/src/WidgetDnD.js
+++ b/src/plugins/summaryWidget/src/WidgetDnD.js
@@ -1,11 +1,11 @@
define([
'../res/ruleImageTemplate.html',
'EventEmitter',
- 'zepto'
+ '../../../utils/template/templateHelpers'
], function (
ruleImageTemplate,
EventEmitter,
- $
+ templateHelpers
) {
/**
@@ -19,8 +19,8 @@ define([
this.ruleOrder = ruleOrder;
this.rulesById = rulesById;
- this.imageContainer = $(ruleImageTemplate);
- this.image = $('.t-drag-rule-image', this.imageContainer);
+ this.imageContainer = templateHelpers.convertTemplateToHTML(ruleImageTemplate)[0];
+ this.image = this.imageContainer.querySelector('.t-drag-rule-image');
this.draggingId = '';
this.draggingRulePrevious = '';
this.eventEmitter = new EventEmitter();
@@ -29,18 +29,18 @@ define([
this.drag = this.drag.bind(this);
this.drop = this.drop.bind(this);
- $(this.container).on('mousemove', this.drag);
- $(document).on('mouseup', this.drop);
- $(this.container).before(this.imageContainer);
- $(this.imageContainer).hide();
+ this.container.addEventListener('mousemove', this.drag);
+ document.addEventListener('mouseup', this.drop);
+ this.container.parentNode.insertBefore(this.imageContainer, this.container);
+ this.imageContainer.style.display = 'none';
}
/**
* Remove event listeners registered to elements external to the widget
*/
WidgetDnD.prototype.destroy = function () {
- $(this.container).off('mousemove', this.drag);
- $(document).off('mouseup', this.drop);
+ this.container.removeEventListener('mousemove', this.drag);
+ document.removeEventListener('mouseup', this.drop);
};
/**
@@ -81,7 +81,8 @@ define([
let target = '';
ruleOrder.forEach(function (ruleId, index) {
- offset = rulesById[ruleId].getDOM().offset();
+ const ruleDOM = rulesById[ruleId].getDOM();
+ offset = window.innerWidth - (ruleDOM.offsetLeft + ruleDOM.offsetWidth);
y = offset.top;
height = offset.height;
if (index === 0) {
@@ -114,7 +115,7 @@ define([
this.imageContainer.show();
this.imageContainer.offset({
top: event.pageY - this.image.height() / 2,
- left: event.pageX - $('.t-grippy', this.image).width()
+ left: event.pageX - this.image.querySelector('.t-grippy').style.width
});
};
@@ -129,7 +130,7 @@ define([
dragTarget = this.getDropLocation(event);
this.imageContainer.offset({
top: event.pageY - this.image.height() / 2,
- left: event.pageX - $('.t-grippy', this.image).width()
+ left: event.pageX - this.image.querySelector('.t-grippy').style.width
});
if (this.rulesById[dragTarget]) {
this.rulesById[dragTarget].showDragIndicator();
diff --git a/src/plugins/summaryWidget/src/input/ColorPalette.js b/src/plugins/summaryWidget/src/input/ColorPalette.js
index 0bbe23641..2319f9830 100644
--- a/src/plugins/summaryWidget/src/input/ColorPalette.js
+++ b/src/plugins/summaryWidget/src/input/ColorPalette.js
@@ -1,10 +1,8 @@
define([
- './Palette',
- 'zepto'
+ './Palette'
],
function (
- Palette,
- $
+ Palette
) {
//The colors that will be used to instantiate this palette if none are provided
@@ -33,17 +31,16 @@ function (
this.palette.setNullOption('rgba(0,0,0,0)');
- const domElement = $(this.palette.getDOM());
+ const domElement = this.palette.getDOM();
const self = this;
- $('.c-button--menu', domElement).addClass('c-button--swatched');
- $('.t-swatch', domElement).addClass('color-swatch');
- $('.c-palette', domElement).addClass('c-palette--color');
+ domElement.querySelector('.c-button--menu').classList.add('c-button--swatched');
+ domElement.querySelector('.t-swatch').classList.add('color-swatch');
+ domElement.querySelector('.c-palette').classList.add('c-palette--color');
- $('.c-palette__item', domElement).each(function () {
+ domElement.querySelectorAll('.c-palette__item').forEach(item => {
// eslint-disable-next-line no-invalid-this
- const elem = this;
- $(elem).css('background-color', elem.dataset.item);
+ item.style.backgroundColor = item.dataset.item;
});
/**
@@ -53,7 +50,7 @@ function (
*/
function updateSwatch() {
const color = self.palette.getCurrent();
- $('.color-swatch', domElement).css('background-color', color);
+ domElement.querySelector('.color-swatch').style.backgroundColor = color;
}
this.palette.on('change', updateSwatch);
diff --git a/src/plugins/summaryWidget/src/input/IconPalette.js b/src/plugins/summaryWidget/src/input/IconPalette.js
index cdc011d5d..557cc4d95 100644
--- a/src/plugins/summaryWidget/src/input/IconPalette.js
+++ b/src/plugins/summaryWidget/src/input/IconPalette.js
@@ -1,9 +1,7 @@
define([
- './Palette',
- 'zepto'
+ './Palette'
], function (
- Palette,
- $
+ Palette
) {
//The icons that will be used to instantiate this palette if none are provided
const DEFAULT_ICONS = [
@@ -45,20 +43,19 @@ define([
this.icons = icons || DEFAULT_ICONS;
this.palette = new Palette(cssClass, container, this.icons);
- this.palette.setNullOption(' ');
- this.oldIcon = this.palette.current || ' ';
+ this.palette.setNullOption('');
+ this.oldIcon = this.palette.current || '';
- const domElement = $(this.palette.getDOM());
+ const domElement = this.palette.getDOM();
const self = this;
- $('.c-button--menu', domElement).addClass('c-button--swatched');
- $('.t-swatch', domElement).addClass('icon-swatch');
- $('.c-palette', domElement).addClass('c-palette--icon');
+ domElement.querySelector('.c-button--menu').classList.add('c-button--swatched');
+ domElement.querySelector('.t-swatch').classList.add('icon-swatch');
+ domElement.querySelector('.c-palette').classList.add('c-palette--icon');
- $('.c-palette-item', domElement).each(function () {
+ domElement.querySelectorAll('.c-palette-item').forEach(item => {
// eslint-disable-next-line no-invalid-this
- const elem = this;
- $(elem).addClass(elem.dataset.item);
+ item.classList.add(item.dataset.item);
});
/**
@@ -67,8 +64,11 @@ define([
* @private
*/
function updateSwatch() {
- $('.icon-swatch', domElement).removeClass(self.oldIcon)
- .addClass(self.palette.getCurrent());
+ if (self.oldIcon) {
+ domElement.querySelector('.icon-swatch').classList.remove(self.oldIcon);
+ }
+
+ domElement.querySelector('.icon-swatch').classList.add(self.palette.getCurrent());
self.oldIcon = self.palette.getCurrent();
}
diff --git a/src/plugins/summaryWidget/src/input/Palette.js b/src/plugins/summaryWidget/src/input/Palette.js
index ff1d3b550..96df813de 100644
--- a/src/plugins/summaryWidget/src/input/Palette.js
+++ b/src/plugins/summaryWidget/src/input/Palette.js
@@ -1,13 +1,13 @@
define([
'../eventHelpers',
'../../res/input/paletteTemplate.html',
- 'EventEmitter',
- 'zepto'
+ '../../../../utils/template/templateHelpers',
+ 'EventEmitter'
], function (
eventHelpers,
paletteTemplate,
- EventEmitter,
- $
+ templateHelpers,
+ EventEmitter
) {
/**
* Instantiates a new Open MCT Color Palette input
@@ -28,36 +28,41 @@ define([
this.items = items;
this.container = container;
- this.domElement = $(paletteTemplate);
+ this.domElement = templateHelpers.convertTemplateToHTML(paletteTemplate)[0];
+
this.itemElements = {
- nullOption: $('.c-palette__item-none .c-palette__item', this.domElement)
+ nullOption: this.domElement.querySelector('.c-palette__item-none .c-palette__item')
};
this.eventEmitter = new EventEmitter();
this.supportedCallbacks = ['change'];
this.value = this.items[0];
this.nullOption = ' ';
- this.button = $('.js-button', this.domElement);
- this.menu = $('.c-menu', this.domElement);
+ this.button = this.domElement.querySelector('.js-button');
+ this.menu = this.domElement.querySelector('.c-menu');
this.hideMenu = this.hideMenu.bind(this);
- self.button.addClass(this.cssClass);
+ if (this.cssClass) {
+ self.button.classList.add(this.cssClass);
+ }
+
self.setNullOption(this.nullOption);
self.items.forEach(function (item) {
- const itemElement = $('<div class = "c-palette__item ' + item + '"'
- + ' data-item = ' + item + '></div>');
- $('.c-palette__items', self.domElement).append(itemElement);
- self.itemElements[item] = itemElement;
+ const itemElement = `<div class = "c-palette__item ${item}" data-item = "${item}"></div>`;
+ const temp = document.createElement('div');
+ temp.innerHTML = itemElement;
+ self.itemElements[item] = temp.firstChild;
+ self.domElement.querySelector('.c-palette__items').appendChild(temp.firstChild);
});
- $('.c-menu', self.domElement).hide();
+ self.domElement.querySelector('.c-menu').style.display = 'none';
- this.listenTo($(document), 'click', this.hideMenu);
- this.listenTo($('.js-button', self.domElement), 'click', function (event) {
+ this.listenTo(window.document, 'click', this.hideMenu);
+ this.listenTo(self.domElement.querySelector('.js-button'), 'click', function (event) {
event.stopPropagation();
- $('.c-menu', self.container).hide();
- $('.c-menu', self.domElement).show();
+ self.container.querySelector('.c-menu').style.display = 'none';
+ self.domElement.querySelector('.c-menu').style.display = '';
});
/**
@@ -70,10 +75,12 @@ define([
const elem = event.currentTarget;
const item = elem.dataset.item;
self.set(item);
- $('.c-menu', self.domElement).hide();
+ self.domElement.querySelector('.c-menu').style.display = 'none';
}
- this.listenTo($('.c-palette__item', self.domElement), 'click', handleItemClick);
+ self.domElement.querySelectorAll('.c-palette__item').forEach(item => {
+ this.listenTo(item, 'click', handleItemClick);
+ });
}
/**
@@ -91,7 +98,7 @@ define([
};
Palette.prototype.hideMenu = function () {
- $('.c-menu', this.domElement).hide();
+ this.domElement.querySelector('.c-menu').style.display = 'none';
};
/**
@@ -141,12 +148,16 @@ define([
* Update the view assoicated with the currently selected item
*/
Palette.prototype.updateSelected = function (item) {
- $('.c-palette__item', this.domElement).removeClass('is-selected');
- this.itemElements[item].addClass('is-selected');
+ this.domElement.querySelectorAll('.c-palette__item').forEach(paletteItem => {
+ if (paletteItem.classList.contains('is-selected')) {
+ paletteItem.classList.remove('is-selected');
+ }
+ });
+ this.itemElements[item].classList.add('is-selected');
if (item === 'nullOption') {
- $('.t-swatch', this.domElement).addClass('no-selection');
+ this.domElement.querySelector('.t-swatch').classList.add('no-selection');
} else {
- $('.t-swatch', this.domElement).removeClass('no-selection');
+ this.domElement.querySelector('.t-swatch').classList.remove('no-selection');
}
};
@@ -157,14 +168,20 @@ define([
*/
Palette.prototype.setNullOption = function (item) {
this.nullOption = item;
- this.itemElements.nullOption.data('item', item);
+ this.itemElements.nullOption.data = { item: item };
};
/**
* Hides the 'no selection' option to be hidden in the view if it doesn't apply
*/
Palette.prototype.toggleNullOption = function () {
- $('.c-palette__item-none', this.domElement).toggle();
+ const elem = this.domElement.querySelector('.c-palette__item-none');
+
+ if (elem.style.display === 'none') {
+ this.domElement.querySelector('.c-palette__item-none').style.display = 'flex';
+ } else {
+ this.domElement.querySelector('.c-palette__item-none').style.display = 'none';
+ }
};
return Palette;
diff --git a/src/plugins/summaryWidget/src/input/Select.js b/src/plugins/summaryWidget/src/input/Select.js
index 3f89034ca..676a9791b 100644
--- a/src/plugins/summaryWidget/src/input/Select.js
+++ b/src/plugins/summaryWidget/src/input/Select.js
@@ -1,13 +1,13 @@
define([
'../eventHelpers',
'../../res/input/selectTemplate.html',
- 'EventEmitter',
- 'zepto'
+ '../../../../utils/template/templateHelpers',
+ 'EventEmitter'
], function (
eventHelpers,
selectTemplate,
- EventEmitter,
- $
+ templateHelpers,
+ EventEmitter
) {
/**
@@ -20,7 +20,8 @@ define([
const self = this;
- this.domElement = $(selectTemplate);
+ this.domElement = templateHelpers.convertTemplateToHTML(selectTemplate)[0];
+
this.options = [];
this.eventEmitter = new EventEmitter();
this.supportedCallbacks = ['change'];
@@ -35,12 +36,12 @@ define([
*/
function onChange(event) {
const elem = event.target;
- const value = self.options[$(elem).prop('selectedIndex')];
+ const value = self.options[elem.selectedIndex];
self.eventEmitter.emit('change', value[0]);
}
- this.listenTo($('select', this.domElement), 'change', onChange, this);
+ this.listenTo(this.domElement.querySelector('select'), 'change', onChange, this);
}
/**
@@ -74,16 +75,19 @@ define([
const self = this;
let selectedIndex = 0;
- selectedIndex = $('select', this.domElement).prop('selectedIndex');
- $('option', this.domElement).remove();
+ selectedIndex = this.domElement.querySelector('select').selectedIndex;
+
+ this.domElement.querySelector('select').innerHTML = '';
+
+ self.options.forEach(function (option) {
+ const optionElement = document.createElement('option');
+ optionElement.value = option[0];
+ optionElement.innerText = `+ ${option[1]}`;
- self.options.forEach(function (option, index) {
- $('select', self.domElement)
- .append('<option value = "' + option[0] + '" >'
- + option[1] + '</option>');
+ self.domElement.querySelector('select').appendChild(optionElement);
});
- $('select', this.domElement).prop('selectedIndex', selectedIndex);
+ this.domElement.querySelector('select').selectedIndex = selectedIndex;
};
/**
@@ -120,7 +124,7 @@ define([
selectedIndex = index;
}
});
- $('select', this.domElement).prop('selectedIndex', selectedIndex);
+ this.domElement.querySelector('select').selectedIndex = selectedIndex;
selectedOption = this.options[selectedIndex];
this.eventEmitter.emit('change', selectedOption[0]);
@@ -131,17 +135,21 @@ define([
* @return {string}
*/
Select.prototype.getSelected = function () {
- return $('select', this.domElement).prop('value');
+ return this.domElement.querySelector('select').value;
};
Select.prototype.hide = function () {
- $(this.domElement).addClass('hidden');
- $('.equal-to').addClass('hidden');
+ this.domElement.classList.add('hidden');
+ if (this.domElement.querySelector('.equal-to')) {
+ this.domElement.querySelector('.equal-to').classList.add('hidden');
+ }
};
Select.prototype.show = function () {
- $(this.domElement).removeClass('hidden');
- $('.equal-to').removeClass('hidden');
+ this.domElement.classList.remove('hidden');
+ if (this.domElement.querySelector('.equal-to')) {
+ this.domElement.querySelector('.equal-to').classList.remove('hidden');
+ }
};
Select.prototype.destroy = function () {
diff --git a/src/plugins/summaryWidget/test/ConditionSpec.js b/src/plugins/summaryWidget/test/ConditionSpec.js
index a69742065..8b166bf87 100644
--- a/src/plugins/summaryWidget/test/ConditionSpec.js
+++ b/src/plugins/summaryWidget/test/ConditionSpec.js
@@ -20,7 +20,7 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
-define(['../src/Condition', 'zepto'], function (Condition, $) {
+define(['../src/Condition'], function (Condition) {
xdescribe('A summary widget condition', function () {
let testCondition;
let mockConfig;
@@ -33,7 +33,7 @@ define(['../src/Condition', 'zepto'], function (Condition, $) {
let generateValuesSpy;
beforeEach(function () {
- mockContainer = $(document.createElement('div'));
+ mockContainer = document.createElement('div');
mockConfig = {
object: 'object1',
@@ -78,7 +78,7 @@ define(['../src/Condition', 'zepto'], function (Condition, $) {
it('exposes a DOM element to represent itself in the view', function () {
mockContainer.append(testCondition.getDOM());
- expect($('.t-condition', mockContainer).get().length).toEqual(1);
+ expect(mockContainer.querySelectorAll('.t-condition').length).toEqual(1);
});
it('responds to a change in its object select', function () {
@@ -111,41 +111,59 @@ define(['../src/Condition', 'zepto'], function (Condition, $) {
});
it('generates value inputs of the appropriate type and quantity', function () {
+ let inputs;
+
mockContainer.append(testCondition.getDOM());
mockEvaluator.getInputType.and.returnValue('number');
mockEvaluator.getInputCount.and.returnValue(3);
testCondition.generateValueInputs('');
- expect($('input', mockContainer).filter('[type=number]').get().length).toEqual(3);
- expect($('input', mockContainer).eq(0).prop('valueAsNumber')).toEqual(1);
- expect($('input', mockContainer).eq(1).prop('valueAsNumber')).toEqual(2);
- expect($('input', mockContainer).eq(2).prop('valueAsNumber')).toEqual(3);
+
+ inputs = mockContainer.querySelectorAll('input');
+ const numberInputs = Array.from(inputs).filter(input => input.type === 'number');
+
+ expect(numberInputs.length).toEqual(3);
+ expect(numberInputs[0].valueAsNumber).toEqual(1);
+ expect(numberInputs[1].valueAsNumber).toEqual(2);
+ expect(numberInputs[2].valueAsNumber).toEqual(3);
mockEvaluator.getInputType.and.returnValue('text');
mockEvaluator.getInputCount.and.returnValue(2);
testCondition.config.values = ['Text I Am', 'Text It Is'];
testCondition.generateValueInputs('');
- expect($('input', mockContainer).filter('[type=text]').get().length).toEqual(2);
- expect($('input', mockContainer).eq(0).prop('value')).toEqual('Text I Am');
- expect($('input', mockContainer).eq(1).prop('value')).toEqual('Text It Is');
+
+ inputs = mockContainer.querySelectorAll('input');
+ const textInputs = Array.from(inputs).filter(input => input.type === 'text');
+
+ expect(textInputs.length).toEqual(2);
+ expect(textInputs[0].value).toEqual('Text I Am');
+ expect(textInputs[1].value).toEqual('Text It Is');
});
it('ensures reasonable defaults on values if none are provided', function () {
+ let inputs;
+
mockContainer.append(testCondition.getDOM());
mockEvaluator.getInputType.and.returnValue('number');
mockEvaluator.getInputCount.and.returnValue(3);
testCondition.config.values = [];
testCondition.generateValueInputs('');
- expect($('input', mockContainer).eq(0).prop('valueAsNumber')).toEqual(0);
- expect($('input', mockContainer).eq(1).prop('valueAsNumber')).toEqual(0);
- expect($('input', mockContainer).eq(2).prop('valueAsNumber')).toEqual(0);
+
+ inputs = Array.from(mockContainer.querySelectorAll('input'));
+
+ expect(inputs[0].valueAsNumber).toEqual(0);
+ expect(inputs[1].valueAsNumber).toEqual(0);
+ expect(inputs[2].valueAsNumber).toEqual(0);
expect(testCondition.config.values).toEqual([0, 0, 0]);
mockEvaluator.getInputType.and.returnValue('text');
mockEvaluator.getInputCount.and.returnValue(2);
testCondition.config.values = [];
testCondition.generateValueInputs('');
- expect($('input', mockContainer).eq(0).prop('value')).toEqual('');
- expect($('input', mockContainer).eq(1).prop('value')).toEqual('');
+
+ inputs = Array.from(mockContainer.querySelectorAll('input'));
+
+ expect(inputs[0].value).toEqual('');
+ expect(inputs[1].value).toEqual('');
expect(testCondition.config.values).toEqual(['', '']);
});
@@ -154,8 +172,16 @@ define(['../src/Condition', 'zepto'], function (Condition, $) {
mockEvaluator.getInputType.and.returnValue('number');
mockEvaluator.getInputCount.and.returnValue(3);
testCondition.generateValueInputs('');
- $('input', mockContainer).eq(1).prop('value', 9001);
- $('input', mockContainer).eq(1).trigger('input');
+
+ const event = new Event('input', {
+ bubbles: true,
+ cancelable: true
+ });
+ const inputs = mockContainer.querySelectorAll('input');
+
+ inputs[1].value = 9001;
+ inputs[1].dispatchEvent(event);
+
expect(changeSpy).toHaveBeenCalledWith({
value: 9001,
property: 'values[1]',
diff --git a/src/plugins/summaryWidget/test/RuleSpec.js b/src/plugins/summaryWidget/test/RuleSpec.js
index 4d6c5b714..df5108f7a 100644
--- a/src/plugins/summaryWidget/test/RuleSpec.js
+++ b/src/plugins/summaryWidget/test/RuleSpec.js
@@ -1,4 +1,4 @@
-define(['../src/Rule', 'zepto'], function (Rule, $) {
+define(['../src/Rule'], function (Rule) {
describe('A Summary Widget Rule', function () {
let mockRuleConfig;
let mockDomainObject;
@@ -78,7 +78,7 @@ define(['../src/Rule', 'zepto'], function (Rule, $) {
'dragStart'
]);
- mockContainer = $(document.createElement('div'));
+ mockContainer = document.createElement('div');
removeSpy = jasmine.createSpy('removeCallback');
duplicateSpy = jasmine.createSpy('duplicateCallback');
@@ -99,7 +99,7 @@ define(['../src/Rule', 'zepto'], function (Rule, $) {
it('gets its DOM element', function () {
mockContainer.append(testRule.getDOM());
- expect($('.l-widget-rule', mockContainer).get().length).toBeGreaterThan(0);
+ expect(mockContainer.querySelectorAll('.l-widget-rule').length).toBeGreaterThan(0);
});
it('gets its configuration properties', function () {
@@ -185,7 +185,7 @@ define(['../src/Rule', 'zepto'], function (Rule, $) {
it('builds condition view from condition configuration', function () {
mockContainer.append(testRule.getDOM());
- expect($('.t-condition', mockContainer).get().length).toEqual(2);
+ expect(mockContainer.querySelectorAll('.t-condition').length).toEqual(2);
});
it('responds to input of style properties, and updates the preview', function () {
@@ -196,9 +196,9 @@ define(['../src/Rule', 'zepto'], function (Rule, $) {
testRule.colorInputs.color.set('#999999');
expect(mockRuleConfig.style.color).toEqual('#999999');
- expect(testRule.thumbnail.css('background-color')).toEqual('rgb(67, 67, 67)');
- expect(testRule.thumbnail.css('border-color')).toEqual('rgb(102, 102, 102)');
- expect(testRule.thumbnail.css('color')).toEqual('rgb(153, 153, 153)');
+ expect(testRule.thumbnail.style['background-color']).toEqual('rgb(67, 67, 67)');
+ expect(testRule.thumbnail.style['border-color']).toEqual('rgb(102, 102, 102)');
+ expect(testRule.thumbnail.style.color).toEqual('rgb(153, 153, 153)');
expect(changeSpy).toHaveBeenCalled();
});
@@ -228,8 +228,12 @@ define(['../src/Rule', 'zepto'], function (Rule, $) {
// });
it('allows input for when the rule triggers', function () {
- testRule.trigger.prop('value', 'all');
- testRule.trigger.trigger('change');
+ testRule.trigger.value = 'all';
+ const event = new Event('change', {
+ bubbles: true,
+ cancelable: true
+ });
+ testRule.trigger.dispatchEvent(event);
expect(testRule.config.trigger).toEqual('all');
expect(conditionChangeSpy).toHaveBeenCalled();
});
@@ -247,7 +251,12 @@ define(['../src/Rule', 'zepto'], function (Rule, $) {
});
it('initiates a drag event when its grippy is clicked', function () {
- testRule.grippy.trigger('mousedown');
+ const event = new Event('mousedown', {
+ bubbles: true,
+ cancelable: true
+ });
+ testRule.grippy.dispatchEvent(event);
+
expect(mockWidgetDnD.setDragImage).toHaveBeenCalled();
expect(mockWidgetDnD.dragStart).toHaveBeenCalledWith('mockRule');
});
diff --git a/src/plugins/summaryWidget/test/SummaryWidgetSpec.js b/src/plugins/summaryWidget/test/SummaryWidgetSpec.js
index 1bee993e2..877b1b366 100644
--- a/src/plugins/summaryWidget/test/SummaryWidgetSpec.js
+++ b/src/plugins/summaryWidget/test/SummaryWidgetSpec.js
@@ -20,7 +20,7 @@
* at runtime from the About dialog for additional information.
*****************************************************************************/
-define(['../src/SummaryWidget', 'zepto'], function (SummaryWidget, $) {
+define(['../src/SummaryWidget'], function (SummaryWidget) {
xdescribe('The Summary Widget', function () {
let summaryWidget;
let mockDomainObject;
@@ -111,7 +111,7 @@ define(['../src/SummaryWidget', 'zepto'], function (SummaryWidget, $) {
});
it('builds rules and rule placeholders in view from configuration', function () {
- expect($('.l-widget-rule', summaryWidget.ruleArea).get().length).toEqual(2);
+ expect(summaryWidget.ruleArea.querySelectorAll('.l-widget-rule').length).toEqual(2);
});
it('allows initializing a new rule with a particular identifier', function () {
@@ -130,7 +130,7 @@ define(['../src/SummaryWidget', 'zepto'], function (SummaryWidget, $) {
mockDomainObject.configuration.ruleOrder.forEach(function (ruleId) {
expect(mockDomainObject.configuration.ruleConfigById[ruleId]).toBeDefined();
});
- expect($('.l-widget-rule', summaryWidget.ruleArea).get().length).toEqual(6);
+ expect(summaryWidget.ruleArea.querySelectorAll('.l-widget-rule').length).toEqual(6);
});
it('allows duplicating a rule from source configuration', function () {
@@ -186,10 +186,10 @@ define(['../src/SummaryWidget', 'zepto'], function (SummaryWidget, $) {
it('adds hyperlink to the widget button and sets newTab preference', function () {
summaryWidget.addHyperlink('https://www.nasa.gov', 'newTab');
- const widgetButton = $('#widget', mockContainer);
+ const widgetButton = mockContainer.querySelector('#widget');
- expect(widgetButton.attr('href')).toEqual('https://www.nasa.gov');
- expect(widgetButton.attr('target')).toEqual('_blank');
+ expect(widgetButton.href).toEqual('https://www.nasa.gov/');
+ expect(widgetButton.target).toEqual('_blank');
});
});
});
diff --git a/src/plugins/summaryWidget/test/TestDataItemSpec.js b/src/plugins/summaryWidget/test/TestDataItemSpec.js
index dffa6c6f2..171753efe 100644
--- a/src/plugins/summaryWidget/test/TestDataItemSpec.js
+++ b/src/plugins/summaryWidget/test/TestDataItemSpec.js
@@ -1,4 +1,4 @@
-define(['../src/TestDataItem', 'zepto'], function (TestDataItem, $) {
+define(['../src/TestDataItem'], function (TestDataItem) {
describe('A summary widget test data item', function () {
let testDataItem;
let mockConfig;
@@ -11,7 +11,7 @@ define(['../src/TestDataItem', 'zepto'], function (TestDataItem, $) {
let generateValueSpy;
beforeEach(function () {
- mockContainer = $(document.createElement('div'));
+ mockContainer = document.createElement('div');
mockConfig = {
object: 'object1',
@@ -56,7 +56,7 @@ define(['../src/TestDataItem', 'zepto'], function (TestDataItem, $) {
it('exposes a DOM element to represent itself in the view', function () {
mockContainer.append(testDataItem.getDOM());
- expect($('.t-test-data-item', mockContainer).get().length).toEqual(1);
+ expect(mockContainer.querySelectorAll('.t-test-data-item').length).toEqual(1);
});
it('responds to a change in its object select', function () {
@@ -80,34 +80,54 @@ define(['../src/TestDataItem', 'zepto'], function (TestDataItem, $) {
});
it('generates a value input of the appropriate type', function () {
+ let inputs;
+
mockContainer.append(testDataItem.getDOM());
mockEvaluator.getInputTypeById.and.returnValue('number');
testDataItem.generateValueInput('');
- expect($('input', mockContainer).filter('[type=number]').get().length).toEqual(1);
- expect($('input', mockContainer).prop('valueAsNumber')).toEqual(1);
+
+ inputs = mockContainer.querySelectorAll('input');
+ const numberInputs = Array.from(inputs).filter(input => input.type === 'number');
+
+ expect(numberInputs.length).toEqual(1);
+ expect(inputs[0].valueAsNumber).toEqual(1);
mockEvaluator.getInputTypeById.and.returnValue('text');
testDataItem.config.value = 'Text I Am';
testDataItem.generateValueInput('');
- expect($('input', mockContainer).filter('[type=text]').get().length).toEqual(1);
- expect($('input', mockContainer).prop('value')).toEqual('Text I Am');
+
+ inputs = mockContainer.querySelectorAll('input');
+ const textInputs = Array.from(inputs).filter(input => input.type === 'text');
+
+ expect(textInputs.length).toEqual(1);
+ expect(inputs[0].value).toEqual('Text I Am');
});
it('ensures reasonable defaults on values if none are provided', function () {
+ let inputs;
+
mockContainer.append(testDataItem.getDOM());
mockEvaluator.getInputTypeById.and.returnValue('number');
testDataItem.config.value = undefined;
testDataItem.generateValueInput('');
- expect($('input', mockContainer).filter('[type=number]').get().length).toEqual(1);
- expect($('input', mockContainer).prop('valueAsNumber')).toEqual(0);
+
+ inputs = mockContainer.querySelectorAll('input');
+ const numberInputs = Array.from(inputs).filter(input => input.type === 'number');
+
+ expect(numberInputs.length).toEqual(1);
+ expect(inputs[0].valueAsNumber).toEqual(0);
expect(testDataItem.config.value).toEqual(0);
mockEvaluator.getInputTypeById.and.returnValue('text');
testDataItem.config.value = undefined;
testDataItem.generateValueInput('');
- expect($('input', mockContainer).filter('[type=text]').get().length).toEqual(1);
- expect($('input', mockContainer).prop('value')).toEqual('');
+
+ inputs = mockContainer.querySelectorAll('input');
+ const textInputs = Array.from(inputs).filter(input => input.type === 'text');
+
+ expect(textInputs.length).toEqual(1);
+ expect(inputs[0].value).toEqual('');
expect(testDataItem.config.value).toEqual('');
});
@@ -115,8 +135,15 @@ define(['../src/TestDataItem', 'zepto'], function (TestDataItem, $) {
mockContainer.append(testDataItem.getDOM());
mockEvaluator.getInputTypeById.and.returnValue('number');
testDataItem.generateValueInput('');
- $('input', mockContainer).prop('value', 9001);
- $('input', mockContainer).trigger('input');
+
+ const event = new Event('input', {
+ bubbles: true,
+ cancelable: true
+ });
+
+ mockContainer.querySelector('input').value = 9001;
+ mockContainer.querySelector('input').dispatchEvent(event);
+
expect(changeSpy).toHaveBeenCalledWith({
value: 9001,
property: 'value',
diff --git a/src/plugins/summaryWidget/test/TestDataManagerSpec.js b/src/plugins/summaryWidget/test/TestDataManagerSpec.js
index 70042250d..59ce37d92 100644
--- a/src/plugins/summaryWidget/test/TestDataManagerSpec.js
+++ b/src/plugins/summaryWidget/test/TestDataManagerSpec.js
@@ -1,4 +1,4 @@
-define(['../src/TestDataManager', 'zepto'], function (TestDataManager, $) {
+define(['../src/TestDataManager'], function (TestDataManager) {
describe('A Summary Widget Rule', function () {
let mockDomainObject;
let mockOpenMCT;
@@ -103,7 +103,7 @@ define(['../src/TestDataManager', 'zepto'], function (TestDataManager, $) {
mockConditionManager.getObjectName.and.returnValue('Object Name');
mockConditionManager.getTelemetryPropertyName.and.returnValue('Property Name');
- mockContainer = $(document.createElement('div'));
+ mockContainer = document.createElement('div');
testDataManager = new TestDataManager(mockDomainObject, mockConditionManager, mockOpenMCT);
});
@@ -114,7 +114,7 @@ define(['../src/TestDataManager', 'zepto'], function (TestDataManager, $) {
it('exposes a DOM element to represent itself in the view', function () {
mockContainer.append(testDataManager.getDOM());
- expect($('.t-widget-test-data-content', mockContainer).get().length).toBeGreaterThan(0);
+ expect(mockContainer.querySelectorAll('.t-widget-test-data-content').length).toBeGreaterThan(0);
});
it('generates a test cache in the format expected by a condition evaluator', function () {
@@ -207,7 +207,7 @@ define(['../src/TestDataManager', 'zepto'], function (TestDataManager, $) {
it('builds item view from item configuration', function () {
mockContainer.append(testDataManager.getDOM());
- expect($('.t-test-data-item', mockContainer).get().length).toEqual(3);
+ expect(mockContainer.querySelectorAll('.t-test-data-item').length).toEqual(3);
});
it('can remove a item from its configuration', function () {
diff --git a/src/styles/_constants.scss b/src/styles/_constants.scss
index 8d2d34179..8b4994756 100755
--- a/src/styles/_constants.scss
+++ b/src/styles/_constants.scss
@@ -156,6 +156,13 @@ $glyph-icon-notebook-page: '\e92c';
$glyph-icon-unlocked: '\e92d';
$glyph-icon-circle: '\e92e';
$glyph-icon-draft: '\e92f';
+$glyph-icon-circle-slash: '\e930';
+$glyph-icon-question-mark: '\e931';
+$glyph-icon-status-poll-check: '\e932';
+$glyph-icon-status-poll-caution: '\e933';
+$glyph-icon-status-poll-circle-slash: '\e934';
+$glyph-icon-status-poll-question-mark: '\e935';
+$glyph-icon-status-poll-edit: '\e936';
$glyph-icon-arrows-right-left: '\ea00';
$glyph-icon-arrows-up-down: '\ea01';
$glyph-icon-bullet: '\ea02';
@@ -264,6 +271,7 @@ $glyph-icon-bar-chart: '\eb2c';
$glyph-icon-map: '\eb2d';
$glyph-icon-plan: '\eb2e';
$glyph-icon-timelist: '\eb2f';
+$glyph-icon-notebook-shift-log: '\eb31';
$glyph-icon-plot-scatter: '\eb30';
/************************** GLYPHS AS DATA URI */
@@ -317,4 +325,5 @@ $bg-icon-bar-chart: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://w
$bg-icon-map: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cpath fill='%23000000' d='M448 32.7 384 64v448l64-31.3c35.2-17.21 64-60.1 64-95.3v-320c0-35.2-28.8-49.91-64-32.7ZM160 456l193.6 48.4v-448L160 8v448zM129.6.4 128 0 64 31.3C28.8 48.51 0 91.4 0 126.6v320c0 35.2 28.8 49.91 64 32.7l64-31.3 1.6.4Z'/%3e%3c/svg%3e");
$bg-icon-plan: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cg data-name='Layer 2'%3e%3cg data-name='Layer 1'%3e%3cpath fill='%23000000' d='M128 96V64a64.19 64.19 0 0 1 64-64h128a64.19 64.19 0 0 1 64 64v32Z'/%3e%3cpath fill='%23000000' d='M416 64v64H96V64c-52.8 0-96 43.2-96 96v256c0 52.8 43.2 96 96 96h320c52.8 0 96-43.2 96-96V160c0-52.8-43.2-96-96-96ZM64 288v-64h128v64Zm256 128H128v-64h192Zm128 0h-64v-64h64Zm0-128H256v-64h192Z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e");
$bg-icon-timelist: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cg data-name='Layer 2'%3e%3cpath d='M448 0H64A64.19 64.19 0 0 0 0 64v384a64.19 64.19 0 0 0 64 64h384a64.19 64.19 0 0 0 64-64V64a64.19 64.19 0 0 0-64-64ZM213.47 266.73a24 24 0 0 1-32.2 10.74L104 238.83V128a24 24 0 0 1 48 0v81.17l50.73 25.36a24 24 0 0 1 10.74 32.2ZM448 448H288v-64h160Zm0-96H288v-64h160Zm0-96H288v-64h160Zm0-96H288V96h160Z' data-name='Layer 1'/%3e%3c/g%3e%3c/svg%3e");
+$bg-icon-notebook-shift-log: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cpath d='M448 55.36c0-39.95-27.69-63.66-61.54-52.68L0 128h448V55.36ZM448 160H0v288c0 35.2 28.8 64 64 64h384c35.2 0 64-28.8 64-64V224c0-35.2-28.8-64-64-64ZM128 416H64v-64h64v64Zm0-96H64v-64h64v64Zm320 96H192v-64h256v64Zm0-96H192v-64h256v64Z'/%3e%3c/svg%3e");
$bg-icon-plot-scatter: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3e%3cg data-name='Layer 2'%3e%3cpath d='M96 0C43.2 0 0 43.2 0 96v320c0 52.8 43.2 96 96 96h320c52.8 0 96-43.2 96-96V96c0-52.8-43.2-96-96-96ZM64 176a48 48 0 1 1 48 48 48 48 0 0 1-48-48Zm80 240a48 48 0 1 1 48-48 48 48 0 0 1-48 48Zm128-96a48 48 0 1 1 48-48 48 48 0 0 1-48 48Zm0-160a48 48 0 1 1 48-48 48 48 0 0 1-48 48Zm128 256a48 48 0 1 1 48-48 48 48 0 0 1-48 48Z' data-name='Layer 1'/%3e%3c/g%3e%3c/svg%3e");
diff --git a/src/styles/_glyphs.scss b/src/styles/_glyphs.scss
index ac82d6006..80b43eb3d 100755
--- a/src/styles/_glyphs.scss
+++ b/src/styles/_glyphs.scss
@@ -87,6 +87,13 @@
.icon-unlocked { @include glyphBefore($glyph-icon-unlocked); }
.icon-circle { @include glyphBefore($glyph-icon-circle); }
.icon-draft { @include glyphBefore($glyph-icon-draft); }
+.icon-question-mark { @include glyphBefore($glyph-icon-question-mark); }
+.icon-circle-slash { @include glyphBefore($glyph-icon-circle-slash); }
+.icon-status-poll-check { @include glyphBefore($glyph-icon-status-poll-check); }
+.icon-status-poll-caution { @include glyphBefore($glyph-icon-status-poll-caution); }
+.icon-status-poll-circle-slash { @include glyphBefore($glyph-icon-status-poll-circle-slash); }
+.icon-status-poll-question-mark { @include glyphBefore($glyph-icon-status-poll-question-mark); }
+.icon-status-poll-edit { @include glyphBefore($glyph-icon-status-poll-edit); }
.icon-arrows-right-left { @include glyphBefore($glyph-icon-arrows-right-left); }
.icon-arrows-up-down { @include glyphBefore($glyph-icon-arrows-up-down); }
.icon-bullet { @include glyphBefore($glyph-icon-bullet); }
@@ -195,6 +202,7 @@
.icon-map { @include glyphBefore($glyph-icon-map); }
.icon-plan { @include glyphBefore($glyph-icon-plan); }
.icon-timelist { @include glyphBefore($glyph-icon-timelist); }
+.icon-notebook-shift-log { @include glyphBefore($glyph-icon-notebook-shift-log); }
.icon-plot-scatter { @include glyphBefore($glyph-icon-plot-scatter); }
/************************** 12 PX CLASSES */
@@ -256,4 +264,5 @@
.bg-icon-map { @include glyphBg($bg-icon-map); }
.bg-icon-plan { @include glyphBg($bg-icon-plan); }
.bg-icon-timelist { @include glyphBg($bg-icon-timelist); }
+.bg-icon-notebook-shift-log { @include glyphBg($bg-icon-notebook-shift-log); }
.bg-icon-plot-scatter { @include glyphBg($bg-icon-plot-scatter); }
diff --git a/src/styles/fonts/Open MCT Symbols 16px.json b/src/styles/fonts/Open MCT Symbols 16px.json
index 7e5d8a02a..11cc38737 100644
--- a/src/styles/fonts/Open MCT Symbols 16px.json
+++ b/src/styles/fonts/Open MCT Symbols 16px.json
@@ -2,7 +2,7 @@
"metadata": {
"name": "Open MCT Symbols 16px",
"lastOpened": 0,
- "created": 1650916650636
+ "created": 1651949568729
},
"iconSets": [
{
@@ -392,12 +392,68 @@
"tempChar": ""
},
{
+ "order": 212,
+ "id": 183,
+ "name": "icon-circle-slash",
+ "prevSize": 16,
+ "code": 59696,
+ "tempChar": ""
+ },
+ {
+ "order": 213,
+ "id": 182,
+ "name": "icon-question-mark",
+ "prevSize": 16,
+ "code": 59697,
+ "tempChar": ""
+ },
+ {
+ "order": 206,
+ "id": 179,
+ "name": "icon-status-poll-check",
+ "prevSize": 16,
+ "code": 59698,
+ "tempChar": ""
+ },
+ {
+ "order": 207,
+ "id": 178,
+ "name": "icon-status-poll-caution",
+ "prevSize": 16,
+ "code": 59699,
+ "tempChar": ""
+ },
+ {
+ "order": 210,
+ "id": 180,
+ "name": "icon-status-poll-circle-slash",
+ "prevSize": 16,
+ "code": 59700,
+ "tempChar": ""
+ },
+ {
+ "order": 211,
+ "id": 181,
+ "name": "icon-status-poll-question-mark",
+ "prevSize": 16,
+ "code": 59701,
+ "tempChar": ""
+ },
+ {
+ "order": 209,
+ "id": 176,
+ "name": "icon-status-poll-edit",
+ "prevSize": 16,
+ "code": 59702,
+ "tempChar": ""
+ },
+ {
"order": 27,
"id": 105,
"name": "icon-arrows-right-left",
"prevSize": 16,
"code": 59904,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 26,
@@ -405,7 +461,7 @@
"name": "icon-arrows-up-down",
"prevSize": 16,
"code": 59905,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 68,
@@ -413,7 +469,7 @@
"name": "icon-bullet",
"prevSize": 16,
"code": 59906,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 150,
@@ -421,7 +477,7 @@
"prevSize": 16,
"code": 59907,
"name": "icon-calendar",
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 45,
@@ -429,7 +485,7 @@
"name": "icon-chain-links",
"prevSize": 16,
"code": 59908,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 73,
@@ -437,7 +493,7 @@
"name": "icon-download",
"prevSize": 16,
"code": 59909,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 39,
@@ -445,7 +501,7 @@
"name": "icon-duplicate",
"prevSize": 16,
"code": 59910,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 50,
@@ -453,7 +509,7 @@
"name": "icon-folder-new",
"prevSize": 16,
"code": 59911,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 138,
@@ -461,7 +517,7 @@
"name": "icon-fullscreen-collapse",
"prevSize": 16,
"code": 59912,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 139,
@@ -469,7 +525,7 @@
"name": "icon-fullscreen-expand",
"prevSize": 16,
"code": 59913,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 122,
@@ -477,7 +533,7 @@
"name": "icon-layers",
"prevSize": 16,
"code": 59914,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 151,
@@ -485,7 +541,7 @@
"name": "icon-line-horz",
"prevSize": 16,
"code": 59915,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 100,
@@ -493,7 +549,7 @@
"name": "icon-magnify",
"prevSize": 16,
"code": 59916,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 99,
@@ -501,7 +557,7 @@
"name": "icon-magnify-in",
"prevSize": 16,
"code": 59917,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 101,
@@ -509,7 +565,7 @@
"name": "icon-magnify-out-v2",
"prevSize": 16,
"code": 59918,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 103,
@@ -517,7 +573,7 @@
"name": "icon-menu",
"prevSize": 16,
"code": 59919,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 124,
@@ -525,7 +581,7 @@
"name": "icon-move",
"prevSize": 16,
"code": 59920,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 7,
@@ -533,7 +589,7 @@
"name": "icon-new-window",
"prevSize": 16,
"code": 59921,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 63,
@@ -541,7 +597,7 @@
"name": "icon-paint-bucket-v2",
"prevSize": 16,
"code": 59922,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 15,
@@ -549,7 +605,7 @@
"name": "icon-pencil",
"prevSize": 16,
"code": 59923,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 54,
@@ -557,7 +613,7 @@
"name": "icon-pencil-edit-in-place",
"prevSize": 16,
"code": 59924,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 40,
@@ -565,7 +621,7 @@
"name": "icon-play",
"prevSize": 16,
"code": 59925,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 125,
@@ -573,7 +629,7 @@
"name": "icon-pause",
"prevSize": 16,
"code": 59926,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 119,
@@ -581,7 +637,7 @@
"name": "icon-plot-resource",
"prevSize": 16,
"code": 59927,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 48,
@@ -589,7 +645,7 @@
"name": "icon-pointer-left",
"prevSize": 16,
"code": 59928,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 47,
@@ -597,7 +653,7 @@
"name": "icon-pointer-right",
"prevSize": 16,
"code": 59929,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 85,
@@ -605,7 +661,7 @@
"name": "icon-refresh",
"prevSize": 16,
"code": 59930,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 55,
@@ -613,7 +669,7 @@
"name": "icon-save",
"prevSize": 16,
"code": 59931,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 56,
@@ -621,7 +677,7 @@
"name": "icon-save-as",
"prevSize": 16,
"code": 59932,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 58,
@@ -629,7 +685,7 @@
"name": "icon-sine",
"prevSize": 16,
"code": 59933,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 113,
@@ -637,7 +693,7 @@
"name": "icon-font",
"prevSize": 16,
"code": 59934,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 41,
@@ -645,7 +701,7 @@
"name": "icon-thumbs-strip",
"prevSize": 16,
"code": 59935,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 146,
@@ -653,7 +709,7 @@
"name": "icon-two-parts-both",
"prevSize": 16,
"code": 59936,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 145,
@@ -661,7 +717,7 @@
"name": "icon-two-parts-one-only",
"prevSize": 16,
"code": 59937,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 82,
@@ -669,7 +725,7 @@
"name": "icon-resync",
"prevSize": 16,
"code": 59938,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 86,
@@ -677,7 +733,7 @@
"name": "icon-reset",
"prevSize": 16,
"code": 59939,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 61,
@@ -685,7 +741,7 @@
"name": "icon-x-in-circle",
"prevSize": 16,
"code": 59940,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 84,
@@ -693,7 +749,7 @@
"name": "icon-brightness",
"prevSize": 16,
"code": 59941,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 83,
@@ -701,7 +757,7 @@
"name": "icon-contrast",
"prevSize": 16,
"code": 59942,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 87,
@@ -709,7 +765,7 @@
"name": "icon-expand",
"prevSize": 16,
"code": 59943,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 89,
@@ -717,7 +773,7 @@
"name": "icon-list-view",
"prevSize": 16,
"code": 59944,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 133,
@@ -725,7 +781,7 @@
"name": "icon-grid-snap-to",
"prevSize": 16,
"code": 59945,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 132,
@@ -733,7 +789,7 @@
"name": "icon-grid-snap-no",
"prevSize": 16,
"code": 59946,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 94,
@@ -741,7 +797,7 @@
"name": "icon-frame-show",
"prevSize": 16,
"code": 59947,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 95,
@@ -749,7 +805,7 @@
"name": "icon-frame-hide",
"prevSize": 16,
"code": 59948,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 97,
@@ -757,7 +813,7 @@
"name": "icon-import",
"prevSize": 16,
"code": 59949,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 96,
@@ -765,7 +821,7 @@
"name": "icon-export",
"prevSize": 16,
"code": 59950,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 194,
@@ -773,7 +829,7 @@
"name": "icon-font-size",
"prevSize": 16,
"code": 59951,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 163,
@@ -781,7 +837,7 @@
"name": "icon-clear-data",
"prevSize": 16,
"code": 59952,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 173,
@@ -789,7 +845,7 @@
"name": "icon-history",
"prevSize": 16,
"code": 59953,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 181,
@@ -797,7 +853,7 @@
"name": "icon-arrow-up-to-parent",
"prevSize": 16,
"code": 59954,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 184,
@@ -805,7 +861,7 @@
"name": "icon-crosshair-in-circle",
"prevSize": 16,
"code": 59955,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 185,
@@ -813,7 +869,7 @@
"name": "icon-target",
"prevSize": 16,
"code": 59956,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 187,
@@ -821,7 +877,7 @@
"name": "icon-items-collapse",
"prevSize": 16,
"code": 59957,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 188,
@@ -829,7 +885,7 @@
"name": "icon-items-expand",
"prevSize": 16,
"code": 59958,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 190,
@@ -837,7 +893,7 @@
"name": "icon-3-dots",
"prevSize": 16,
"code": 59959,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 193,
@@ -845,7 +901,7 @@
"name": "icon-grid-on",
"prevSize": 16,
"code": 59960,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 192,
@@ -853,7 +909,7 @@
"name": "icon-grid-off",
"prevSize": 16,
"code": 59961,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 191,
@@ -861,7 +917,7 @@
"name": "icon-camera",
"prevSize": 16,
"code": 59962,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 196,
@@ -869,7 +925,7 @@
"name": "icon-folders-collapse",
"prevSize": 16,
"code": 59963,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 144,
@@ -877,7 +933,7 @@
"name": "icon-activity",
"prevSize": 16,
"code": 60160,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 104,
@@ -885,7 +941,7 @@
"name": "icon-activity-mode",
"prevSize": 16,
"code": 60161,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 137,
@@ -893,7 +949,7 @@
"name": "icon-autoflow-tabular",
"prevSize": 16,
"code": 60162,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 115,
@@ -901,7 +957,7 @@
"name": "icon-clock",
"prevSize": 16,
"code": 60163,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 2,
@@ -909,7 +965,7 @@
"name": "icon-database",
"prevSize": 16,
"code": 60164,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 3,
@@ -917,7 +973,7 @@
"name": "icon-database-query",
"prevSize": 16,
"code": 60165,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 67,
@@ -925,7 +981,7 @@
"name": "icon-dataset",
"prevSize": 16,
"code": 60166,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 59,
@@ -933,7 +989,7 @@
"name": "icon-datatable",
"prevSize": 16,
"code": 60167,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 136,
@@ -941,7 +997,7 @@
"name": "icon-dictionary",
"prevSize": 16,
"code": 60168,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 51,
@@ -949,7 +1005,7 @@
"name": "icon-folder",
"prevSize": 16,
"code": 60169,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 147,
@@ -957,7 +1013,7 @@
"name": "icon-image",
"prevSize": 16,
"code": 60170,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 4,
@@ -965,7 +1021,7 @@
"name": "icon-layout",
"prevSize": 16,
"code": 60171,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 24,
@@ -973,7 +1029,7 @@
"name": "icon-object",
"prevSize": 16,
"code": 60172,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 52,
@@ -981,7 +1037,7 @@
"name": "icon-object-unknown",
"prevSize": 16,
"code": 60173,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 105,
@@ -989,7 +1045,7 @@
"name": "icon-packet",
"prevSize": 16,
"code": 60174,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 126,
@@ -997,7 +1053,7 @@
"name": "icon-page",
"prevSize": 16,
"code": 60175,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 130,
@@ -1005,7 +1061,7 @@
"name": "icon-plot-overlay",
"prevSize": 16,
"code": 60176,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 80,
@@ -1013,7 +1069,7 @@
"name": "icon-plot-stacked",
"prevSize": 16,
"code": 60177,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 134,
@@ -1021,7 +1077,7 @@
"name": "icon-session",
"prevSize": 16,
"code": 60178,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 109,
@@ -1029,7 +1085,7 @@
"name": "icon-tabular",
"prevSize": 16,
"code": 60179,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 107,
@@ -1037,7 +1093,7 @@
"name": "icon-tabular-lad",
"prevSize": 16,
"code": 60180,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 106,
@@ -1045,7 +1101,7 @@
"name": "icon-tabular-lad-set",
"prevSize": 16,
"code": 60181,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 70,
@@ -1053,7 +1109,7 @@
"name": "icon-tabular-realtime",
"prevSize": 16,
"code": 60182,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 60,
@@ -1061,7 +1117,7 @@
"name": "icon-tabular-scrolling",
"prevSize": 16,
"code": 60183,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 131,
@@ -1069,7 +1125,7 @@
"name": "icon-telemetry",
"prevSize": 16,
"code": 60184,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 202,
@@ -1077,7 +1133,7 @@
"name": "icon-timeline",
"prevSize": 16,
"code": 60185,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 81,
@@ -1085,7 +1141,7 @@
"name": "icon-timer",
"prevSize": 16,
"code": 60186,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 69,
@@ -1093,7 +1149,7 @@
"name": "icon-topic",
"prevSize": 16,
"code": 60187,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 79,
@@ -1101,7 +1157,7 @@
"name": "icon-box-with-dashed-lines-v2",
"prevSize": 16,
"code": 60188,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 90,
@@ -1109,7 +1165,7 @@
"name": "icon-summary-widget",
"prevSize": 16,
"code": 60189,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 92,
@@ -1117,7 +1173,7 @@
"name": "icon-notebook",
"prevSize": 16,
"code": 60190,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 168,
@@ -1125,7 +1181,7 @@
"name": "icon-tabs-view",
"prevSize": 16,
"code": 60191,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 117,
@@ -1133,7 +1189,7 @@
"name": "icon-flexible-layout",
"prevSize": 16,
"code": 60192,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 166,
@@ -1141,7 +1197,7 @@
"name": "icon-generator-sine",
"prevSize": 16,
"code": 60193,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 167,
@@ -1149,7 +1205,7 @@
"name": "icon-generator-event",
"prevSize": 16,
"code": 60194,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 165,
@@ -1157,7 +1213,7 @@
"name": "icon-gauge-v2",
"prevSize": 16,
"code": 60195,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 170,
@@ -1165,7 +1221,7 @@
"name": "icon-spectra",
"prevSize": 16,
"code": 60196,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 171,
@@ -1173,7 +1229,7 @@
"name": "icon-telemetry-spectra",
"prevSize": 16,
"code": 60197,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 172,
@@ -1181,7 +1237,7 @@
"name": "icon-pushbutton",
"prevSize": 16,
"code": 60198,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 174,
@@ -1189,7 +1245,7 @@
"name": "icon-conditional",
"prevSize": 16,
"code": 60199,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 178,
@@ -1197,7 +1253,7 @@
"name": "icon-condition-widget",
"prevSize": 16,
"code": 60200,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 180,
@@ -1205,7 +1261,7 @@
"name": "icon-alphanumeric",
"prevSize": 16,
"code": 60201,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 183,
@@ -1213,7 +1269,7 @@
"name": "icon-image-telemetry",
"prevSize": 16,
"code": 60202,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 198,
@@ -1221,7 +1277,7 @@
"name": "icon-telemetry-aggregate",
"prevSize": 16,
"code": 60203,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 199,
@@ -1229,7 +1285,7 @@
"name": "icon-bar-graph",
"prevSize": 16,
"code": 60204,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 200,
@@ -1237,7 +1293,7 @@
"name": "icon-map",
"prevSize": 16,
"code": 60205,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 203,
@@ -1245,7 +1301,7 @@
"name": "icon-plan",
"prevSize": 16,
"code": 60206,
- "tempChar": ""
+ "tempChar": ""
},
{
"order": 204,
@@ -1253,7 +1309,15 @@
"name": "icon-timelist",
"prevSize": 16,
"code": 60207,
- "tempChar": ""
+ "tempChar": ""
+ },
+ {
+ "order": 214,
+ "id": 184,
+ "name": "icon-notebook-restricted",
+ "prevSize": 16,
+ "code": 60209,
+ "tempChar": ""
},
{
"order": 205,
@@ -2108,6 +2172,162 @@
}
},
{
+ "id": 183,
+ "paths": [
+ "M512 0c-282.78 0-512 229.22-512 512s229.22 512 512 512 512-229.22 512-512-229.22-512-512-512zM263.1 263.1c66.48-66.48 154.88-103.1 248.9-103.1 66.74 0 130.64 18.48 185.9 52.96l-484.94 484.94c-34.5-55.24-52.96-119.16-52.96-185.9 0-94.020 36.62-182.42 103.1-248.9zM760.9 760.9c-66.48 66.48-154.88 103.1-248.9 103.1-66.74 0-130.64-18.48-185.9-52.96l484.94-484.94c34.5 55.24 52.96 119.16 52.96 185.9 0 94.020-36.62 182.42-103.1 248.9z"
+ ],
+ "attrs": [
+ {}
+ ],
+ "isMulticolor": false,
+ "isMulticolor2": false,
+ "grid": 16,
+ "tags": [
+ "icon-circle-slash"
+ ],
+ "colorPermutations": {
+ "12552552551": [
+ {}
+ ]
+ }
+ },
+ {
+ "id": 182,
+ "paths": [
+ "M136.86 52.26c54.080-34.82 120.58-52.26 199.44-52.26 103.6 0 189.7 24.76 258.24 74.28s102.82 122.88 102.82 220.060c0 59.6-14.86 109.8-44.58 150.6-17.38 24.76-50.76 56.4-100.14 94.9l-48.68 37.82c-26.54 20.64-44.14 44.7-52.82 72.2-5.5 17.44-8.46 44.48-8.92 81.14h-186.4c2.74-77.48 10.060-131 21.94-160.58s42.5-63.62 91.88-102.12l50.060-39.2c16.46-12.38 29.72-25.9 39.78-40.58 18.28-25.2 27.42-52.96 27.42-83.22 0-34.84-10.18-66.6-30.52-95.24-20.36-28.64-57.52-42.98-111.48-42.98s-90.68 17.66-112.88 52.96c-22.18 35.32-33.26 71.98-33.26 110.040h-198.76c5.5-130.64 51.12-223.24 136.86-277.82zM251.020 825.24h205.62v198.74h-205.62v-198.74z"
+ ],
+ "attrs": [
+ {}
+ ],
+ "width": 697,
+ "isMulticolor": false,
+ "isMulticolor2": false,
+ "grid": 16,
+ "tags": [
+ "icon-question-mark"
+ ],
+ "colorPermutations": {
+ "12552552551": [
+ {}
+ ]
+ }
+ },
+ {
+ "id": 179,
+ "paths": [
+ "M512 0c-282.76 0-512 214.9-512 480 0 92.26 27.8 178.44 75.92 251.6l-75.92 292.4 313.5-101.42c61.040 24.1 128.12 37.42 198.5 37.42 282.76 0 512-214.9 512-480s-229.24-480-512-480zM768 448l-320 320-192-192v-192l192 192 320-320v192z"
+ ],
+ "attrs": [
+ {}
+ ],
+ "isMulticolor": false,
+ "isMulticolor2": false,
+ "grid": 16,
+ "tags": [
+ "icon-status-poll-check"
+ ],
+ "colorPermutations": {
+ "12552552551": [
+ {}
+ ]
+ }
+ },
+ {
+ "id": 178,
+ "paths": [
+ "M512 0c-282.76 0-512 214.9-512 480 0 92.26 27.8 178.44 75.92 251.6l-75.92 292.4 313.5-101.42c61.040 24.1 128.12 37.42 198.5 37.42 282.76 0 512-214.9 512-480s-229.24-480-512-480zM781.36 704h-538.72c-44.96 0-63.5-31.94-41.2-70.98l270-472.48c22.3-39.040 58.82-39.040 81.12 0l269.98 472.48c22.3 39.040 3.78 70.98-41.2 70.98z",
+ "M457.14 417.86l24.2 122.64h61.32l24.2-122.64v-163.5h-109.72v163.5z",
+ "M471.12 581.36h81.76v81.76h-81.76v-81.76z"
+ ],
+ "attrs": [
+ {},
+ {},
+ {}
+ ],
+ "isMulticolor": false,
+ "isMulticolor2": false,
+ "grid": 16,
+ "tags": [
+ "icon-status-poll-caution"
+ ],
+ "colorPermutations": {
+ "12552552551": [
+ {},
+ {},
+ {}
+ ]
+ }
+ },
+ {
+ "id": 180,
+ "paths": [
+ "M391.18 668.7c35.72 22.98 77.32 35.3 120.82 35.3 59.84 0 116.080-23.3 158.4-65.6 42.3-42.3 65.6-98.56 65.6-158.4 0-43.5-12.32-85.080-35.3-120.82l-309.52 309.52z",
+ "M512 256c-59.84 0-116.080 23.3-158.4 65.6-42.3 42.3-65.6 98.56-65.6 158.4 0 43.5 12.32 85.080 35.3 120.82l309.52-309.52c-35.72-22.98-77.32-35.3-120.82-35.3z",
+ "M512 0c-282.76 0-512 214.9-512 480 0 92.26 27.8 178.44 75.92 251.6l-75.92 292.4 313.5-101.42c61.040 24.1 128.12 37.42 198.5 37.42 282.76 0 512-214.9 512-480s-229.24-480-512-480zM512 800c-176.74 0-320-143.26-320-320s143.26-320 320-320 320 143.26 320 320-143.26 320-320 320z"
+ ],
+ "attrs": [
+ {},
+ {},
+ {}
+ ],
+ "isMulticolor": false,
+ "isMulticolor2": false,
+ "grid": 16,
+ "tags": [
+ "icon-status-poll-circle-slash"
+ ],
+ "colorPermutations": {
+ "12552552551": [
+ {},
+ {},
+ {}
+ ]
+ }
+ },
+ {
+ "id": 181,
+ "paths": [
+ "M512 0c-282.76 0-512 214.9-512 480 0 92.26 27.8 178.44 75.92 251.6l-75.92 292.4 313.5-101.42c61.040 24.1 128.12 37.42 198.5 37.42 282.76 0 512-214.9 512-480s-229.24-480-512-480zM579.020 832h-141.36v-136.64h141.36v136.64zM713.84 433.9c-11.94 17.020-34.9 38.78-68.84 65.24l-33.48 26c-18.24 14.18-30.34 30.74-36.32 49.64-3.78 11.98-5.82 30.58-6.14 55.8h-128.12c1.88-53.26 6.92-90.060 15.080-110.4 8.18-20.34 29.22-43.74 63.16-70.22l34.42-26.94c11.3-8.52 20.42-17.8 27.34-27.9 12.56-17.34 18.86-36.4 18.86-57.2 0-23.94-7-45.78-20.98-65.48-14-19.7-39.54-29.54-76.64-29.54s-62.34 12.14-77.6 36.4c-15.24 24.28-22.88 49.48-22.88 75.64h-136.64c3.78-89.84 35.14-153.5 94.080-191.020 37.18-23.94 82.9-35.94 137.12-35.94 71.22 0 130.42 17.020 177.54 51.060s70.68 84.48 70.68 151.3c0 40.98-10.22 75.5-30.66 103.54z"
+ ],
+ "attrs": [
+ {}
+ ],
+ "isMulticolor": false,
+ "isMulticolor2": false,
+ "grid": 16,
+ "tags": [
+ "icon-status-poll-question-mark"
+ ],
+ "colorPermutations": {
+ "12552552551": [
+ {}
+ ]
+ }
+ },
+ {
+ "id": 176,
+ "paths": [
+ "M1000.080 334.64l-336.6 336.76-20.52 6.88-450.96 153.72 160.68-471.52 332.34-332.34c-54.040-18.2-112.28-28.14-173.020-28.14-282.76 0-512 214.9-512 480 0 92.26 27.8 178.44 75.92 251.6l-75.92 292.4 313.5-101.42c61.040 24.1 128.12 37.42 198.5 37.42 282.76 0 512-214.9 512-480 0-50.68-8.4-99.5-23.92-145.36z",
+ "M408.42 395.24l-2.16 6.3-111.7 327.9 334.12-113.86 4.62-4.68 350.28-350.28c6.8-6.78 14.96-19.1 14.96-38.9 0-34.86-26.82-83.28-69.88-126.38-26.54-26.54-55.9-47.6-82.7-59.34-47.34-20.8-72.020-6.24-82.64 4.36l-354.9 354.88zM470.56 421.42h44v88h88v44l-4.7 12.72-139.68 47.54-47.94-47.94 47.6-139.72 12.72-4.6z"
+ ],
+ "attrs": [
+ {},
+ {}
+ ],
+ "isMulticolor": false,
+ "isMulticolor2": false,
+ "grid": 16,
+ "tags": [
+ "icon-status-poll-edit"
+ ],
+ "colorPermutations": {
+ "12552552551": [
+ {},
+ {}
+ ]
+ }
+ },
+ {
"id": 105,
"paths": [
"M1024 512l-448 512v-1024z",
@@ -3326,15 +3546,21 @@
{
"id": 76,
"paths": [
- "M510-2l-512 320v384l512 320 512-320v-384l-512-320zM585.4 859.2c-21.2 20.8-46 30.8-76 30.8-31.2 0-56.2-9.8-76.2-29.6-20-20-29.6-44.8-29.6-76.2 0-30.4 10.2-55.2 31-76.2s45.2-31.2 74.8-31.2c29.6 0 54.2 10.4 75.6 32s31.8 46.4 31.8 76c-0.2 29-10.8 54-31.4 74.4zM638.2 546.6c-23.6 11.8-37.4 22-43.4 32.4-3.6 6.2-6 14.8-7.4 26.8v41h-161.4v-44.2c0-40.2 4.4-69.8 13-88 8-17.2 22.6-30.2 44.8-40l34.8-15.4c32-14.2 48.2-35.2 48.2-62.8 0-16-6-30.4-17.2-41.8-11.2-11.2-25.6-17.2-41.6-17.2-24 0-54.4 10-62.8 57.4l-2.2 12.2h-147l1.4-16.2c4-44.6 17-82.4 38.8-112.2 19.6-27 45.6-48.6 77-64.6s64.6-24 98.2-24c60.6 0 110.2 19.4 151.4 59.6 41.2 40 61.2 88 61.2 147.2 0 70.8-28.8 121.4-85.8 149.8z"
+ "M511.98 0l-511.98 320v384l512 320 512-320v-384l-512.020-320zM586.22 896h-141.36v-136.64h141.36v136.64zM721.040 497.9c-11.94 17.020-34.9 38.78-68.84 65.24l-33.48 26c-18.24 14.18-30.34 30.74-36.32 49.64-3.78 11.98-5.82 30.58-6.14 55.8h-128.12c1.88-53.26 6.92-90.060 15.080-110.4 8.18-20.34 29.22-43.74 63.16-70.22l34.42-26.94c11.3-8.52 20.42-17.8 27.34-27.9 12.56-17.34 18.86-36.4 18.86-57.2 0-23.94-7-45.78-20.98-65.48-14-19.7-39.54-29.54-76.64-29.54s-62.34 12.14-77.6 36.4c-15.24 24.28-22.88 49.48-22.88 75.64h-136.64c3.78-89.84 35.14-153.5 94.080-191.020 37.18-23.94 82.9-35.94 137.12-35.94 71.22 0 130.42 17.020 177.54 51.060s70.68 84.48 70.68 151.3c0 40.98-10.22 75.5-30.66 103.54z"
+ ],
+ "attrs": [
+ {}
],
- "attrs": [],
"grid": 16,
"tags": [
"icon-object-unknown"
],
+ "isMulticolor": false,
+ "isMulticolor2": false,
"colorPermutations": {
- "12552552551": []
+ "12552552551": [
+ {}
+ ]
}
},
{
@@ -4010,6 +4236,29 @@
}
},
{
+ "id": 184,
+ "paths": [
+ "M896 110.72c0-79.9-55.38-127.32-123.080-105.36l-772.92 250.64h896v-145.28z",
+ "M896 320h-896v576c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v-448c0-70.4-57.6-128-128-128zM256 832h-128v-128h128v128zM256 640h-128v-128h128v128zM896 832h-512v-128h512v128zM896 640h-512v-128h512v128z"
+ ],
+ "attrs": [
+ {},
+ {}
+ ],
+ "isMulticolor": false,
+ "isMulticolor2": false,
+ "grid": 16,
+ "tags": [
+ "icon-notebook-restricted"
+ ],
+ "colorPermutations": {
+ "12552552551": [
+ {},
+ {}
+ ]
+ }
+ },
+ {
"id": 176,
"paths": [
"M192 0c-105.6 0-192 86.4-192 192v640c0 105.6 86.4 192 192 192h640c105.6 0 192-86.4 192-192v-640c0-105.6-86.4-192-192-192zM128 352c0-53.019 42.981-96 96-96s96 42.981 96 96c0 53.019-42.981 96-96 96v0c-53.019 0-96-42.981-96-96v0zM288 832c-53.019 0-96-42.981-96-96s42.981-96 96-96c53.019 0 96 42.981 96 96v0c0 53.019-42.981 96-96 96v0zM544 640c-53.019 0-96-42.981-96-96s42.981-96 96-96c53.019 0 96 42.981 96 96v0c0 53.019-42.981 96-96 96v0zM544 320c-53.019 0-96-42.981-96-96s42.981-96 96-96c53.019 0 96 42.981 96 96v0c0 53.019-42.981 96-96 96v0zM800 832c-53.019 0-96-42.981-96-96s42.981-96 96-96c53.019 0 96 42.981 96 96v0c0 53.019-42.981 96-96 96v0z"
diff --git a/src/styles/fonts/Open-MCT-Symbols-16px.svg b/src/styles/fonts/Open-MCT-Symbols-16px.svg
index c6455e381..38ce5985a 100644
--- a/src/styles/fonts/Open-MCT-Symbols-16px.svg
+++ b/src/styles/fonts/Open-MCT-Symbols-16px.svg
@@ -3,165 +3,173 @@
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
-<font id="Open-MCT-Symbols-16px" horiz-adv-x="1024">
-<font-face units-per-em="1024" ascent="921.6" descent="-102.4" />
+<font id="icomoon" horiz-adv-x="1024">
+<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
-<glyph unicode="&#x20;" horiz-adv-x="0" d="" />
-<glyph unicode="&#xe900;" glyph-name="icon-alert-rect-v2" d="M896 896h-768c-70.6-0.2-127.8-57.4-128-128v-768c0.2-70.6 57.4-127.8 128-128h768c70.6 0.2 127.8 57.4 128 128v768c-0.2 70.6-57.4 127.8-128 128zM576 0h-128v128h128v-128zM597.8 384l-37.8-192h-96l-37.8 192v384h171.8v-384z" />
-<glyph unicode="&#xe901;" glyph-name="icon-alert-triangle-v2" d="M998.2 47.2l-422.6 739.6c-35 61.2-92 61.2-127 0l-422.8-739.6c-35-61.2-6-111.2 64.4-111.2h843.4c70.6 0 99.6 50 64.6 111.2zM576 0h-128v128h128v-128zM597.8 384l-37.8-192h-96l-37.8 192v256h171.8v-256z" />
-<glyph unicode="&#xe902;" glyph-name="icon-arrow-up" d="M512 640l-512-512h1024z" />
-<glyph unicode="&#xe903;" glyph-name="icon-arrow-double-up" d="M510 386l512-512h-1024zM510 898l512-512h-1024z" />
-<glyph unicode="&#xe904;" glyph-name="icon-arrow-tall-up" d="M512 896l512-1024h-1024z" />
-<glyph unicode="&#xe905;" glyph-name="icon-arrow-right" d="M768 384l-512 512v-1024z" />
-<glyph unicode="&#xe906;" glyph-name="icon-arrow-right-equilateral" d="M962 384l-896-512v1024z" />
-<glyph unicode="&#xe907;" glyph-name="icon-arrow-down" d="M512 128l512 512h-1024z" />
-<glyph unicode="&#xe908;" glyph-name="icon-arrow-double-down" d="M510 386l-512 512h1024zM510-126l-512 512h1024z" />
-<glyph unicode="&#xe909;" glyph-name="icon-arrow-tall-down" d="M512-128l-512 1024h1024z" />
-<glyph unicode="&#xe90a;" glyph-name="icon-arrow-left" d="M256 384l512-512v1024z" />
-<glyph unicode="&#xe90b;" glyph-name="icon-asterisk" d="M1004.166 555.542l-97.522 168.916-330.534-229.414 33.414 400.956h-195.048l33.414-400.956-330.534 229.414-97.522-168.916 363.944-171.542-363.944-171.542 97.522-168.916 330.534 229.414-33.414-400.956h195.048l-33.414 400.956 330.534-229.414 97.522 168.916-363.944 171.542z" />
-<glyph unicode="&#xe90c;" glyph-name="icon-bell" d="M512-128c106 0 192 86 192 192h-384c0-106 86-192 192-192zM896 448v64c0 212-172 384-384 384s-384-172-384-384v-64c0-70.6-57.4-128-128-128v-128h1024v128c-70.6 0-128 57.4-128 128z" />
-<glyph unicode="&#xe90d;" glyph-name="icon-box-round-corners" d="M1024 64c0-105.6-86.4-192-192-192h-640c-105.6 0-192 86.4-192 192v640c0 105.6 86.4 192 192 192h640c105.6 0 192-86.4 192-192v-640z" />
-<glyph unicode="&#xe90e;" glyph-name="icon-box-with-arrow-cursor" d="M894 898h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h400c-2.2 3.8-4 7.6-5.8 11.4l-255.2 576.8c-21.4 48.4-10.8 105 26.6 142.4 24.4 24.4 57.2 37.4 90.4 37.4 17.4 0 35.2-3.6 51.8-11l576.6-255.4c4-1.8 7.8-3.8 11.4-5.8v400.2c0.2 70.4-57.4 128-127.8 128zM958.6 258.6l-576.6 255.4 255.4-576.6 64.6 128.6 192-192 128 128-192 192z" />
-<glyph unicode="&#xe90f;" glyph-name="icon-check" d="M1024 896l-640-640-384 384v-384l384-384 640 640z" />
-<glyph unicode="&#xe910;" glyph-name="icon-connectivity" d="M704 320c0-70.4-57.6-128-128-128h-128c-70.4 0-128 57.6-128 128v128c0 70.4 57.6 128 128 128h128c70.4 0 128-57.6 128-128v-128zM1024 384l-192 320v-640zM0 384l192 320v-640z" />
-<glyph unicode="&#xe911;" glyph-name="icon-database-in-brackets" d="M768 544c0-53.019-114.615-96-256-96s-256 42.981-256 96c0 53.019 114.615 96 256 96s256-42.981 256-96zM768 224v256c0-53-114.6-96-256-96s-256 43-256 96v-256c0-53 114.6-96 256-96s256 43 256 96zM832 896h-128v-192h127.6c0.2 0 0.2-0.2 0.4-0.4v-639.4c0-0.2-0.2-0.2-0.4-0.4h-127.6v-192h128c105.6 0 192 86.4 192 192v640.2c0 105.6-86.4 192-192 192zM192 64.4v639.4c0 0.2 0.2 0.2 0.4 0.4h127.6v191.8h-128c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h128v192h-127.6c-0.2 0-0.4 0.2-0.4 0.4z" />
-<glyph unicode="&#xe912;" glyph-name="icon-eye-open" d="M512 779.6c-245.8 0-452.2-168-510.8-395.6 58.6-227.4 265-395.6 510.8-395.6s452.2 168 510.8 395.6c-58.6 227.4-265 395.6-510.8 395.6zM829.2 307.6c-22.6-34.4-50.6-64.8-83-90.4-32.8-25.8-69-45.6-108-59.4-40.4-14.2-82.8-21.4-126-21.4s-85.8 7.2-126 21.4c-39 13.8-75.4 33.8-108 59.4-32.4 25.6-60.4 55.8-83 90.4-15.8 24-28.8 49.6-38.6 76.4 10 26.8 23 52.4 38.6 76.4 22.6 34.4 50.6 64.8 83 90.4 32.8 25.8 69 45.6 108 59.4 40.4 14.2 82.8 21.4 126 21.4s85.8-7.2 126-21.4c39-13.8 75.4-33.8 108-59.4 32.4-25.6 60.4-55.8 83-90.4 15.8-24 28.8-49.6 38.6-76.4-9.8-26.8-22.8-52.4-38.6-76.4zM704 384c0-106.039-85.961-192-192-192s-192 85.961-192 192c0 106.039 85.961 192 192 192s192-85.961 192-192z" />
-<glyph unicode="&#xe913;" glyph-name="icon-gear" d="M1024 320v128l-140.976 35.244c-8.784 32.922-21.818 64.106-38.504 92.918l74.774 124.622-90.51 90.51-124.622-74.774c-28.812 16.686-59.996 29.72-92.918 38.504l-35.244 140.976h-128l-35.244-140.976c-32.922-8.784-64.106-21.818-92.918-38.504l-124.622 74.774-90.51-90.51 74.774-124.622c-16.686-28.812-29.72-59.996-38.504-92.918l-140.976-35.244v-128l140.976-35.244c8.784-32.922 21.818-64.106 38.504-92.918l-74.774-124.622 90.51-90.51 124.622 74.774c28.812-16.686 59.996-29.72 92.918-38.504l35.244-140.976h128l35.244 140.976c32.922 8.784 64.106 21.818 92.918 38.504l124.622-74.774 90.51 90.51-74.774 124.622c16.686 28.812 29.72 59.996 38.504 92.918l140.976 35.244zM704 384c0-106.038-85.962-192-192-192s-192 85.962-192 192 85.962 192 192 192 192-85.962 192-192z" />
-<glyph unicode="&#xe914;" glyph-name="icon-hourglass" d="M1024 896h-1024c0-282.8 229.2-512 512-512s512 229.2 512 512zM512 512c-102.6 0-199 40-271.6 112.4-41.2 41.2-72 90.2-90.8 143.6h724.6c-18.8-53.4-49.6-102.4-90.8-143.6-72.4-72.4-168.8-112.4-271.4-112.4zM512 384c-282.8 0-512-229.2-512-512h1024c0 282.8-229.2 512-512 512z" />
-<glyph unicode="&#xe915;" glyph-name="icon-info" d="M512 896c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512zM512 768c70.6 0 128-57.4 128-128s-57.4-128-128-128c-70.6 0-128 57.4-128 128s57.4 128 128 128zM704 64h-384v128h64v256h256v-256h64v-128z" />
-<glyph unicode="&#xe916;" glyph-name="icon-link" d="M1024 384l-512 512v-307.2l-512-204.8v-256h512v-256z" />
-<glyph unicode="&#xe917;" glyph-name="icon-lock" horiz-adv-x="768" d="M702 512h-62v128c0 141.385-114.615 256-256 256s-256-114.615-256-256v0-128h-64c-35.301-0.113-63.887-28.699-64-63.989v-512.011c0.113-35.301 28.699-63.887 63.989-64h638.011c35.301 0.113 63.887 28.699 64 63.989v512.011c-0.113 35.301-28.699 63.887-63.989 64h-0.011zM256 512v128c0 70.692 57.308 128 128 128s128-57.308 128-128v0-128z" />
-<glyph unicode="&#xe918;" glyph-name="icon-minus" d="M960 256c35.2 0 64 28.8 64 64v128c0 35.2-28.8 64-64 64h-896c-35.2 0-64-28.8-64-64v-128c0-35.2 28.8-64 64-64h896z" />
-<glyph unicode="&#xe919;" glyph-name="icon-people" d="M704 576h64c70.4 0 128 57.6 128 128v64c0 70.4-57.6 128-128 128h-64c-70.4 0-128-57.6-128-128v-64c0-70.4 57.6-128 128-128zM256 576h64c70.4 0 128 57.6 128 128v64c0 70.4-57.6 128-128 128h-64c-70.4 0-128-57.6-128-128v-64c0-70.4 57.6-128 128-128zM832 512h-192c-34.908 0-67.716-9.448-96-25.904 57.278-33.324 96-95.404 96-166.096v-448h384v448c0 105.6-86.4 192-192 192zM384 512h-192c-105.6 0-192-86.4-192-192v-448h576v448c0 105.6-86.4 192-192 192z" />
-<glyph unicode="&#xe91a;" glyph-name="icon-person" d="M768 640c0-105.6-86.4-192-192-192h-128c-105.6 0-192 86.4-192 192v64c0 105.6 86.4 192 192 192h128c105.6 0 192-86.4 192-192v-64zM64-128v192c0 140.8 115.2 256 256 256h384c140.8 0 256-115.2 256-256v-192z" />
-<glyph unicode="&#xe91b;" glyph-name="icon-plus" d="M960 512h-330v320c0 35.2-28.8 64-64 64h-108c-35.2 0-64-28.8-64-64v-320h-330c-35.2 0-64-28.8-64-64v-128c0-35.2 28.8-64 64-64h330v-320c0-35.2 28.8-64 64-64h108c35.2 0 64 28.8 64 64v320h330c35.2 0 64 28.8 64 64v128c0 35.2-28.8 64-64 64z" />
-<glyph unicode="&#xe91c;" glyph-name="icon-plus-in-rect" d="M830 896h-636c-106.6 0-194-87.2-194-194v-636c0-106.8 87.4-194 194-194h636c106.6 0 194 87.2 194 194v636c0 106.8-87.4 194-194 194zM896 288c0-17.673-14.327-32-32-32v0h-224v-224c0-17.673-14.327-32-32-32v0h-192c-17.673 0-32 14.327-32 32v0 224h-224c-17.673 0-32 14.327-32 32v0 192c0 17.673 14.327 32 32 32v0h224v224c0 17.673 14.327 32 32 32v0h192c17.673 0 32-14.327 32-32v0-224h224c17.673 0 32-14.327 32-32v0z" />
-<glyph unicode="&#xe91d;" glyph-name="icon-trash" d="M832 768h-192.36v64c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-64h-191.64c-105.6 0-192-72-192-160s0-160 0-160h64v-384c0-105.6 86.4-192 192-192h512c105.6 0 192 86.4 192 192v384h64c0 0 0 72 0 160s-86.4 160-192 160zM320 64h-128v384h128v-384zM576 64h-128v384h128v-384zM832 64h-128v384h128v-384z" />
-<glyph unicode="&#xe91e;" glyph-name="icon-x-heavy" d="M704 384l301.332-301.332c24.89-24.89 24.89-65.62 0-90.51l-101.49-101.49c-24.89-24.89-65.62-24.89-90.51 0l-301.332 301.332c0 0-301.332-301.332-301.332-301.332-24.89-24.89-65.62-24.89-90.51 0l-101.49 101.49c-24.89 24.89-24.89 65.62 0 90.51l301.332 301.332c0 0-301.332 301.332-301.332 301.332-24.89 24.89-24.89 65.62 0 90.51l101.49 101.49c24.89 24.89 65.62 24.89 90.51 0l301.332-301.332c0 0 301.332 301.332 301.332 301.332 24.89 24.89 65.62 24.89 90.51 0l101.49-101.49c24.89-24.89 24.89-65.62 0-90.51 0 0-301.332-301.332-301.332-301.332z" />
-<glyph unicode="&#xe91f;" glyph-name="icon-brackets" d="M832 896h-192v-192h191.66l0.34-0.34v-639.32l-0.34-0.34h-191.66v-192h192c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM384 64h-191.66l-0.34 0.34v639.32l0.34 0.34h191.66v192h-192c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h192v192z" />
-<glyph unicode="&#xe920;" glyph-name="icon-crosshair" d="M574 898h-128v-320h128v320zM1022 450h-320v-128h320v128zM574 194h-128v-320h128v320zM318 450h-320v-128h320v128z" />
-<glyph unicode="&#xe921;" glyph-name="icon-grippy" d="M365.4 713.2c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM365.4 493.8c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM365.4 274.2c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM365.4 54.8c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM584.8 822.8c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM584.8 603.4c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM584.8 384c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM584.8 164.6c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM584.8-54.8c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM804.2 713.2c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM804.2 493.8c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM804.2 274.2c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM804.2 54.8c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2z" />
-<glyph unicode="&#xe922;" glyph-name="icon-grid" d="M0 320v-256c0-105.6 86.4-192 192-192h256v448h-448zM448 896h-256c-105.6 0-192-86.4-192-192v-256h448v448zM832 896h-256v-448h448v256c0 105.6-86.4 192-192 192zM576-128h256c105.6 0 192 86.4 192 192v256h-448v-448z" />
-<glyph unicode="&#xe923;" glyph-name="icon-grippy-ew" d="M704 896h128v-1024h-128v1024zM448 896h128v-1024h-128v1024zM192 896h128v-1024h-128v1024z" />
-<glyph unicode="&#xe924;" glyph-name="icon-columns" d="M0 896h256v-1024h-256v1024zM384 896h256v-1024h-256v1024zM768 896h256v-1024h-256v1024z" />
-<glyph unicode="&#xe925;" glyph-name="icon-rows" d="M0 896h1024v-256h-1024v256zM0 512h1024v-256h-1024v256zM0 128h1024v-256h-1024v256z" />
-<glyph unicode="&#xe926;" glyph-name="icon-filter" d="M896 896h-768c-70.601-0.227-127.773-57.399-128-127.978v-768.022c0.227-70.601 57.399-127.773 127.978-128h256.022v512l-192 192h640l-192-192v-512h256c70.601 0.227 127.773 57.399 128 127.978v768.022c-0.227 70.601-57.399 127.773-127.978 128h-0.022z" />
-<glyph unicode="&#xe927;" glyph-name="icon-filter-outline" d="M896 896h-768c-70.601-0.227-127.773-57.399-128-127.978v-768.022c0.227-70.601 57.399-127.773 127.978-128h768.022c70.601 0.227 127.773 57.399 128 127.978v768.022c-0.227 70.601-57.399 127.773-127.978 128h-0.022zM896 0.2h-256v383.8l192 192h-640l192-192v-384h-256v767.8h768z" />
-<glyph unicode="&#xe928;" glyph-name="icon-suitcase" d="M768 768c-0.080 70.66-57.34 127.92-127.993 128h-256.007c-70.66-0.080-127.92-57.34-128-127.993v-128.007h-64v-768h640v768h-64zM384 767.88l0.12 0.12 255.88-0.12v-127.88h-256zM0 576v-640c0.102-35.305 28.695-63.898 63.99-64h64.010v768h-64c-35.305-0.102-63.898-28.695-64-63.99v-0.010zM960 640h-64v-768h64c35.305 0.102 63.898 28.695 64 63.99v640.010c-0.102 35.305-28.695 63.898-63.99 64h-0.010z" />
-<glyph unicode="&#xe929;" glyph-name="icon-cursor-locked" horiz-adv-x="768" d="M704 576h-64v64c0 141.385-114.615 256-256 256s-256-114.615-256-256v0-64h-64c-35.301-0.113-63.887-28.699-64-63.989v-576.011c0.113-35.301 28.699-63.887 63.989-64h640.011c35.301 0.113 63.887 28.699 64 63.989v576.011c-0.113 35.301-28.699 63.887-63.989 64h-0.011zM256 640c0 70.692 57.308 128 128 128s128-57.308 128-128v0-64h-256zM533.4 0l-128 128-43-85-170.4 383.6 383.6-170.2-85-43 128-128z" />
-<glyph unicode="&#xe92a;" glyph-name="icon-flag" d="M192 256h832l-192 320 192 320h-896c-70.606-0.215-127.785-57.394-128-127.979v-896.021h192z" />
-<glyph unicode="&#xe92b;" glyph-name="icon-eye-disabled" d="M209.46 287.32q-7.46 9.86-14.26 20.28c-14.737 21.984-27.741 47.184-37.759 73.847l-0.841 2.553c11.078 29.259 24.068 54.443 39.51 77.869l-0.91-1.469c23.221 34.963 50.705 64.8 82.207 89.793l0.793 0.607c57.663 45.719 130.179 75.053 209.311 79.947l1.069 0.053 114.48 140.88c-27.366 5.017-58.869 7.898-91.041 7.92h-0.019c-245.8 0-452.2-168-510.8-395.6 21.856-82.93 60.906-154.847 113.325-214.773l-0.525 0.613zM814.76 480.92q7.52-10 14.44-20.52c14.737-21.984 27.741-47.184 37.759-73.847l0.841-2.553c-10.859-29.216-23.863-54.416-39.447-77.748l0.847 1.348c-23.221-34.963-50.705-64.8-82.207-89.793l-0.793-0.607c-57.762-45.834-130.437-75.216-209.743-80.049l-1.057-0.051-114.46-140.86c27.346-4.988 58.817-7.84 90.955-7.84 0.037 0 0.074 0 0.111 0h-0.005c245.8 0 452.2 168 510.8 395.6-21.856 82.93-60.906 154.847-113.325 214.773l0.525-0.613zM832 896l-832-1024h192l832 1024h-192z" />
-<glyph unicode="&#xe92c;" glyph-name="icon-notebook-page" d="M830 834h-830l-4-702c0-106.6 87.4-194 194-194h640c106.6 0 194 87.4 194 194v508c0 106.8-87.4 194-194 194zM832 450l-384-384-192 192v256l192-192 384 384v-256z" />
-<glyph unicode="&#xe92d;" glyph-name="icon-unlocked" d="M768 896c-141.339-0.114-255.886-114.661-256-255.989v-128.011h-448c-35.301-0.113-63.887-28.699-64-63.989v-512.011c0.113-35.301 28.699-63.887 63.989-64h638.011c35.301 0.113 63.887 28.699 64 63.989v512.011c-0.113 35.301-28.699 63.887-63.989 64h-62.011v128c0 70.692 57.308 128 128 128s128-57.308 128-128v0-128h128v128c-0.114 141.339-114.661 255.886-255.989 256h-0.011z" />
-<glyph unicode="&#xe92e;" glyph-name="icon-circle" d="M1024 384c0-282.77-229.23-512-512-512s-512 229.23-512 512c0 282.77 229.23 512 512 512s512-229.23 512-512z" />
-<glyph unicode="&#xe92f;" glyph-name="icon-draft" d="M876.34 260.42l-49.9-49.88-19.26-19.5-26-8.7-423.040-144.2 144.2 423.28 8.84 25.78 150 149.88-85.6 149.78c-34.92 61.12-92 61.12-127 0l-422.78-739.72c-34.94-61.14-5.92-111.14 64.48-111.14h843.44c70.4 0 99.42 50 64.48 111.14zM973.18 653.16c-19.32 19.3-40.66 34.62-60.16 43.16-34.42 15.12-52.38 4.54-60.1-3.16l-258.12-258.12-82.8-243.040 243 82.8 3.36 3.4 254.76 254.76c4.94 4.94 10.88 13.88 10.88 28.3 0 25.34-19.5 60.56-50.82 91.9zM631 276.18l-34.88 34.86 34.64 101.6 9.24 3.36h32v-64h64v-32l-3.42-9.26z" />
-<glyph unicode="&#xea00;" glyph-name="icon-arrows-right-left" d="M1024 384l-448-512v1024zM448 896l-448-512 448-512z" />
-<glyph unicode="&#xea01;" glyph-name="icon-arrows-up-down" d="M512 896l512-448h-1024zM0 320l512-448 512 448z" />
-<glyph unicode="&#xea02;" glyph-name="icon-bullet" d="M832 144c0-44-36-80-80-80h-480c-44 0-80 36-80 80v480c0 44 36 80 80 80h480c44 0 80-36 80-80v-480z" />
-<glyph unicode="&#xea03;" glyph-name="icon-calendar" d="M896 896h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM640 448h-256v192h256v-192zM384 384h256v-192h-256v192zM320 192h-256v192h256v-192zM320 640v-192h-256v192h256zM128-64c-17 0-33 6.6-45.2 18.8s-18.8 28.2-18.8 45.2v128h256v-192h-192zM384-64v192h256v-192h-256zM960 0c0-17-6.6-33-18.8-45.2s-28.2-18.8-45.2-18.8h-192v192h256v-128zM960 192h-256v192h256v-192zM960 448h-256v192h256v-192z" />
-<glyph unicode="&#xea04;" glyph-name="icon-chain-links" d="M958.4 830.4c-43.8 43.8-101 65.6-158.4 65.6s-114.6-21.8-158.4-65.6l-128-128c-74-74-85.4-187-34-273l-12.8-12.8c-35.4 20.8-75 31.4-114.8 31.4-57.4 0-114.6-21.8-158.4-65.6l-128-128c-87.4-87.4-87.4-229.4 0-316.8 43.8-43.8 101-65.6 158.4-65.6s114.6 21.8 158.4 65.6l128 128c74 74 85.4 187 34 273l12.8 12.8c35.2-21 75-31.6 114.6-31.6 57.4 0 114.6 21.8 158.4 65.6l128 128c87.6 87.6 87.6 229.6 0.2 317zM419.8 156.2l-128-128c-18-18.2-42.2-28.2-67.8-28.2s-49.8 10-67.8 28.2c-37.4 37.4-37.4 98.4 0 135.8l128 128c18.2 18.2 42.2 28.2 67.8 28.2 5.6 0 11.2-0.6 16.8-1.4l-55.6-55.6c-10.4-10.4-16.2-24.2-16.2-38.8s5.8-28.6 16.2-38.8c10.4-10.4 24.2-16.2 38.8-16.2s28.6 5.8 38.8 16.2l55.6 55.6c5.4-30.4-3.6-62.2-26.6-85zM867.8 604.2l-128-128c-18-18.2-42.2-28.2-67.8-28.2-5.6 0-11.2 0.6-16.8 1.4l55.6 55.6c10.4 10.4 16.2 24.2 16.2 38.8s-5.8 28.6-16.2 38.8c-10.4 10.4-24.2 16.2-38.8 16.2s-28.6-5.8-38.8-16.2l-55.6-55.6c-5.2 29.8 3.6 61.6 26.6 84.6l128 128c18 18.4 42.2 28.4 67.8 28.4s49.8-10 67.8-28.2c37.6-37.4 37.6-98.2 0-135.6z" />
-<glyph unicode="&#xea05;" glyph-name="icon-download" d="M832 320v-255.66l-0.34-0.34-639.66 0.34v255.66h-192v-256c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v256h-192zM512 256l448 448h-256v192h-384v-192h-256l448-448z" />
-<glyph unicode="&#xea06;" glyph-name="icon-duplicate" d="M640 640v128c0 70.4-57.6 128-128 128h-384c-70.4 0-128-57.6-128-128v-384c0-70.4 57.6-128 128-128h128v139.6c0 134.8 109.6 244.4 244.4 244.4h139.6zM896 512h-384c-70.4 0-128-57.6-128-128v-384c0-70.4 57.6-128 128-128h384c70.4 0 128 57.6 128 128v384c0 70.4-57.6 128-128 128z" />
-<glyph unicode="&#xea07;" glyph-name="icon-folder-new" d="M896 704h-320c-16.4 16.4-96.8 96.8-109.2 109.2l-37.4 37.4c-25 25-74.2 45.4-109.4 45.4h-256c-35.2 0-64-28.8-64-64v-384c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v128c0 70.4-57.6 128-128 128zM896 448h-768c-70.4 0-128-57.6-128-128v-320c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v320c0 70.4-57.6 128-128 128zM704 96h-128v-128h-128v128h-128v128h128v128h128v-128h128v-128z" />
-<glyph unicode="&#xea08;" glyph-name="icon-fullscreen-collapse" d="M191.656 64c0.118-0.1 0.244-0.224 0.344-0.344v-191.656h192v192c0 105.6-86.4 192-192 192h-192v-192h191.656zM192 704.344c-0.1-0.118-0.224-0.244-0.344-0.344h-191.656v-192h192c105.6 0 192 86.4 192 192v192h-192v-191.656zM832 512h192v192h-191.656c-0.118 0.1-0.244 0.226-0.344 0.344v191.656h-192v-192c0-105.6 86.4-192 192-192zM832 63.656c0.1 0.118 0.224 0.244 0.344 0.344h191.656v192h-192c-105.6 0-192-86.4-192-192v-192h192v191.656z" />
-<glyph unicode="&#xea09;" glyph-name="icon-fullscreen-expand" d="M192.344 64c-0.118 0.1-0.244 0.224-0.344 0.344v191.656h-192v-192c0-105.6 86.4-192 192-192h192v192h-191.656zM192 703.656c0.1 0.118 0.224 0.244 0.344 0.344h191.656v192h-192c-105.6 0-192-86.4-192-192v-192h192v191.656zM832 896h-192v-192h191.656c0.118-0.1 0.244-0.226 0.344-0.344v-191.656h192v192c0 105.6-86.4 192-192 192zM832 64.344c-0.1-0.118-0.224-0.244-0.344-0.344h-191.656v-192h192c105.6 0 192 86.4 192 192v192h-192v-191.656z" />
-<glyph unicode="&#xea0a;" glyph-name="icon-layers" d="M1024 512l-512 384-512-384 512-384zM512 0l-426.666 320-85.334-64 512-384 512 384-85.334 64z" />
-<glyph unicode="&#xea0b;" glyph-name="icon-line-horz" d="M64 320c-35.346 0-64 28.654-64 64s28.654 64 64 64h896c35.346 0 64-28.654 64-64s-28.654-64-64-64h-896z" />
-<glyph unicode="&#xea0c;" glyph-name="icon-magnify" d="M1024 0l-256.8 256.8c42.4 66.6 65 144 64.8 223.2 0 229.8-186.2 416-416 416s-416-186.2-416-416 186.2-416 416-416c79-0.2 156.4 22.4 223.2 64.8l256.8-256.8 128 128zM212.4 276.4c-112.4 112.4-112.4 294.8 0 407.2s294.8 112.4 407.2 0 112.4-294.8 0-407.2c-54-54-127.2-84.4-203.6-84.4-76.4-0.2-149.8 30.2-203.6 84.4z" />
-<glyph unicode="&#xea0d;" glyph-name="icon-magnify-in" d="M1024 0l-256.86 256.86c40.681 62.963 64.861 139.898 64.861 222.481 0 0.232 0 0.464-0.001 0.696v-0.036c0 229.76-186.24 416-416 416s-416-186.24-416-416 186.24-416 416-416c0.196 0 0.427-0.001 0.659-0.001 82.583 0 159.518 24.18 224.112 65.846l-1.631-0.985 256.86-256.86zM212.36 276.36c-52.114 52.117-84.346 124.114-84.346 203.64 0 159.058 128.942 288 288 288s288-128.942 288-288c0-159.058-128.942-288-288-288-0.005 0-0.010 0-0.014 0h0.001c-0.242-0.001-0.529-0.001-0.815-0.001-79.271 0-151.010 32.251-202.811 84.348l-0.013 0.014zM224 544h384v-128h-384v128zM352 672h128v-384h-128v384z" />
-<glyph unicode="&#xea0e;" glyph-name="icon-magnify-out-v2" d="M767.2 256.8c42.4 66.6 65 144 64.8 223.2 0 229.8-186.2 416-416 416s-416-186.2-416-416 186.2-416 416-416c79-0.2 156.4 22.4 223.2 64.8l256.8-256.8 128 128-256.8 256.8zM619.6 276.4c-54-54-127.2-84.4-203.6-84.4-76.4-0.2-149.8 30.2-203.6 84.4-112.4 112.4-112.4 294.8 0 407.2s294.8 112.4 407.2 0c112.4-112.4 112.4-294.8 0-407.2zM224 544h384v-128h-384v128z" />
-<glyph unicode="&#xea0f;" glyph-name="icon-menu" d="M0 768h1024v-128h-1024v128zM0 448h1024v-128h-1024v128zM0 128h1024v-128h-1024v128z" />
-<glyph unicode="&#xea10;" glyph-name="icon-move" d="M293.4 384l218.6 218.6 256-256v421.4c0 70.4-57.6 128-128 128h-512c-70.4 0-128-57.6-128-128v-512c0-70.4 57.6-128 128-128h421.4l-256 256zM1024 448h-128v-320l-384 384-128-128 384-384h-320v-128h576z" />
-<glyph unicode="&#xea11;" glyph-name="icon-new-window" d="M448 896v-128h320l-384-384 128-128 384 384v-320h128v576zM576 221.726v-157.382c-0.1-0.118-0.226-0.244-0.344-0.344h-383.312c-0.118 0.1-0.244 0.226-0.344 0.344v383.312c0.1 0.118 0.226 0.244 0.344 0.344h157.382l192 192h-349.726c-105.6 0-192-86.4-192-192v-384c0-105.6 86.4-192 192-192h384c105.6 0 192 86.4 192 192v349.726l-192-192z" />
-<glyph unicode="&#xea12;" glyph-name="icon-paint-bucket-v2" d="M544 672v-224c0-88.4-71.6-160-160-160s-160 71.6-160 160v97.2l-197.4-196.4c-50-50-12.4-215.2 112.4-340s290-162.4 340-112.4l417 423.6-352 352zM896-128c70.6 0 128 57.4 128 128 0 108.6-128 192-128 192s-128-83.4-128-192c0-70.6 57.4-128 128-128zM384 384c-35.4 0-64 28.6-64 64v384c0 35.4 28.6 64 64 64s64-28.6 64-64v-384c0-35.4-28.6-64-64-64z" />
-<glyph unicode="&#xea13;" glyph-name="icon-pencil" d="M922.344 794.32c-38.612 38.596-81.306 69.232-120.304 86.324-68.848 30.25-104.77 9.078-120.194-6.344l-516.228-516.216-3.136-9.152-162.482-476.932 485.998 165.612 6.73 6.806 509.502 509.506c9.882 9.866 21.768 27.77 21.768 56.578 0.002 50.71-38.996 121.148-101.654 183.818zM237.982 40.34l-69.73 69.728 69.25 203.228 18.498 6.704h64v-128h128v-64l-6.846-18.506-203.172-69.154z" />
-<glyph unicode="&#xea14;" glyph-name="icon-pencil-edit-in-place" d="M922.4 794.4c-38.6 38.6-81.4 69.2-120.4 86.2-68.8 30.2-104.8 9-120.2-6.4l-516.2-516.2-3.2-9.2-162.4-476.8 486 165.6 516.2 516.4c9.8 9.8 21.8 27.8 21.8 56.6 0 50.6-39 121-101.6 183.8zM238 40.4l-69.8 69.6 69.2 203.2 18.4 6.8h64v-128h128v-64l-6.8-18.6-203-69zM0 896v-512l128 128v256h256l128 128zM1024-128v512l-128-128v-256h-256l-128-128z" />
-<glyph unicode="&#xea15;" glyph-name="icon-play" d="M1024 384l-1024-512v1024z" />
-<glyph unicode="&#xea16;" glyph-name="icon-pause" d="M126 898h256v-1024h-256v1024zM638 898h256v-1024h-256v1024z" />
-<glyph unicode="&#xea17;" glyph-name="icon-plot-resource" d="M255.8 192c0.2 0 0.2 0 0 0l0.2 128c0 70.6 57.4 128 128 128h255.8c0 0 0 0 0.2 0.2v127.8c0 70.6 57.4 128 128 128h143.6c-93.8 117-238 192-399.6 192-282.8 0-512-229.2-512-512 0-68 13.2-132.8 37.2-192h218.6zM768.2 576c-0.2 0-0.2 0 0 0l-0.2-128c0-70.6-57.4-128-128-128h-255.8c0 0 0 0-0.2-0.2v-127.8c0-70.6-57.4-128-128-128h-143.6c93.8-117 238-192 399.6-192 282.8 0 512 229.2 512 512 0 68-13.2 132.8-37.2 192h-218.6z" />
-<glyph unicode="&#xea18;" glyph-name="icon-pointer-left" d="M766-128l-256 512 256 512h-256l-256-512 256-512z" />
-<glyph unicode="&#xea19;" glyph-name="icon-pointer-right" d="M254 896l256-512-256-512h256l256 512-256 512z" />
-<glyph unicode="&#xea1a;" glyph-name="icon-refresh" d="M1024 435.2v460.8l-175.8-175.8c-85.2 69.6-190.8 107.6-302 107.6-127.6 0-247.6-49.8-338-140s-140-210.4-140-338 49.8-247.6 140-338 210.4-140 338-140 247.6 49.8 338 140c74 74 120.8 167.8 135 269.6h-138.6c-32-155.4-169.8-272.8-334.6-272.8-188.2 0-341.4 153.2-341.4 341.4s153.4 341.2 341.6 341.2c76.8 0 147.6-25.4 204.8-68.2l-187.8-187.8h460.8z" />
-<glyph unicode="&#xea1b;" glyph-name="icon-save" d="M192.2 320c-0.2 0-0.2 0 0 0l-0.2-448h640v447.8c0 0 0 0-0.2 0.2h-639.6zM978.8 685.2l-165.4 165.4c-25 25-74.2 45.4-109.4 45.4h-576c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128v448c0 35.2 28.8 64 64 64h640c35.2 0 64-28.8 64-64v-448c70.4 0 128 57.6 128 128v576c0 35.2-20.4 84.4-45.2 109.2zM704 640c0-35.2-28.8-64-64-64h-448c-35.2 0-64 28.8-64 64v192h320v-192h128v192h128v-192z" />
-<glyph unicode="&#xea1c;" glyph-name="icon-save-as" d="M978.8 557.2l-64 64c24.8-24.8 45.2-74 45.2-109.2v-448c0-70.4-57.6-128-128-128h-640c-18.8 0-36.6 4.2-52.6 11.4 20.2-44.4 65-75.4 116.6-75.4h640c70.4 0 128 57.6 128 128v448c0 35.2-20.4 84.4-45.2 109.2zM704 0v319.8c0 0 0 0-0.2 0.2h-511.6l-0.2-320h512zM192 384h512c35.2 0 64-28.8 64-64v-320c70.4 0 128 57.6 128 128v448c0 35.2-20.4 84.4-45.2 109.2l-165.4 165.4c-25 25-74.2 45.4-109.4 45.4h-448c-70.4 0-128-57.6-128-128v-640c0-70.4 57.6-128 128-128v320c0 35.2 28.8 64 64 64zM128 832h192v-192h128v192h128v-192c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v192z" />
-<glyph unicode="&#xea1d;" glyph-name="icon-sine" d="M1024 384c-1.8 7.2-3.4 14.4-5.2 21.8-20.2 86.2-53.4 209.4-98.4 307.2-22.4 49-45.4 86.6-70.2 115.2-48.6 56-98.4 67.8-131.8 67.8-33.2 0-83.2-11.8-131.8-67.8-24.6-28.6-47.6-66.2-70-115.2-44.8-97.8-78.2-221-98.4-307.2-21.8-93-46.6-175.4-72-238.4-16.4-40.6-30.4-66.4-40.8-82.8-10.4 16.2-24.4 42.2-40.8 82.8-23.2 58-46.2 132.4-66.6 216.6h-198c1.8-7.2 3.4-14.4 5.2-21.8 20.2-86.2 53.4-209.4 98.4-307.2 22.4-49 45.4-86.6 70.2-115.2 48.6-56 98.6-67.8 131.8-67.8s83.2 11.8 131.8 67.8c24.8 28.6 47.6 66.2 70.2 115.2 44.8 97.8 78.2 221 98.4 307.2 21.8 93 46.6 175.4 72 238.4 16.4 40.6 30.4 66.4 40.8 82.8 10.4-16.2 24.4-42.2 40.8-82.8 23.4-57.8 46.4-132.4 66.8-216.4h197.6z" />
-<glyph unicode="&#xea1e;" glyph-name="icon-font" d="M800-128h224l-384 1024h-256l-384-1024h224l84 224h408zM380 288l132 352 132-352z" />
-<glyph unicode="&#xea1f;" glyph-name="icon-thumbs-strip" d="M448 514c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-320zM1024 514c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-320zM448-62c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-320zM1024-62c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-320z" />
-<glyph unicode="&#xea20;" glyph-name="icon-two-parts-both" d="M896 896h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM128 768h320v-768h-320v768zM896 0h-320v768h320v-768z" />
-<glyph unicode="&#xea21;" glyph-name="icon-two-parts-one-only" d="M896 896h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM896 0h-320v768h320v-768z" />
-<glyph unicode="&#xea22;" glyph-name="icon-resync" d="M795.2 731.2c-79.8 65.2-178.8 100.8-283.2 100.8-119.6 0-232.2-46.6-316.8-131.2-69.4-69.4-113.2-157.4-126.6-252.8h130c29.6 145.8 158.8 256 313.4 256 72 0 138.4-23.8 192-64l-176-176h432v432l-164.8-164.8zM512 64c-72 0-138.4 23.8-192 64l176 176h-432v-432l164.8 164.8c79.8-65.2 178.8-100.8 283.2-100.8 119.6 0 232.2 46.6 316.8 131.2 69.4 69.4 113.2 157.4 126.6 252.8h-130c-29.6-145.8-158.8-256-313.4-256z" />
-<glyph unicode="&#xea23;" glyph-name="icon-reset" d="M460.8 435.2l-187.8 187.8c57.2 42.8 128 68.2 204.8 68.2 188.2 0 341.6-153.2 341.6-341.4s-153.2-341.2-341.4-341.2c-165 0-302.8 117.6-334.6 273h-138.4c14.2-101.8 61-195.6 135-269.6 90.2-90.2 210.4-140 338-140s247.6 49.8 338 140 140 210.4 140 338-49.8 247.6-140 338-210.4 140-338 140c-111.4 0-217-38-302-107.6l-176 175.6v-460.8h460.8z" />
-<glyph unicode="&#xea24;" glyph-name="icon-x-in-circle" d="M512 896c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512zM832 192l-128-128-192 192-192-192-128 128 192 192-192 192 128 128 192-192 192 192 128-128-192-192 192-192z" />
-<glyph unicode="&#xea25;" glyph-name="icon-brightness" d="M253.414 577.939l-155.172 116.384c-50.233-66.209-85.127-146.713-97.91-234.39l-0.333-2.781 191.919-27.434c8.145 56.552 29.998 106.879 62.068 149.006l-0.573-0.784zM191.98 338.283l-191.919-27.434c13.115-90.459 48.009-170.963 99.174-238.453l-0.931 1.281 155.111 116.384c-31.476 41.347-53.309 91.675-61.231 146.504l-0.204 1.719zM466.283 704.020l-27.434 191.919c-90.459-13.115-170.963-48.009-238.453-99.174l1.281 0.931 116.384-155.111c41.347 31.476 91.675 53.309 146.504 61.231l1.719 0.204zM822.323 797.758c-66.209 50.233-146.713 85.127-234.39 97.91l-2.781 0.333-27.434-191.919c56.552-8.145 106.879-29.998 149.006-62.068l-0.784 0.573zM832.020 429.717l191.919 27.434c-13.115 90.459-48.009 170.963-99.174 238.453l0.931-1.281-155.111-116.384c31.476-41.347 53.309-91.675 61.231-146.504l0.204-1.719zM201.677-29.758c66.209-50.233 146.713-85.127 234.39-97.91l2.781-0.333 27.434 191.919c-56.552 8.145-106.879 29.998-149.006 62.068l0.784-0.573zM770.586 190.061l155.131-116.343c50.233 66.209 85.127 146.713 97.91 234.39l0.333 2.781-191.919 27.434c-8.125-56.564-29.966-106.906-62.028-149.049l0.574 0.786zM557.717 63.98l27.434-191.919c90.459 13.115 170.963 48.009 238.453 99.174l-1.281-0.931-116.384 155.111c-41.347-31.476-91.675-53.309-146.504-61.231l-1.719-0.204zM770.586 384c0-142.813-115.773-258.586-258.586-258.586s-258.586 115.773-258.586 258.586c0 142.813 115.773 258.586 258.586 258.586s258.586-115.773 258.586-258.586z" />
-<glyph unicode="&#xea26;" glyph-name="icon-contrast" d="M512 896c-282.78 0-512-229.24-512-512s229.22-512 512-512 512 229.24 512 512-229.22 512-512 512zM783.52 112.48c-69.111-69.481-164.785-112.481-270.502-112.481-0.358 0-0.716 0-1.074 0.001h0.055v768c212.070-0.010 383.982-171.929 383.982-384 0-106.034-42.977-202.031-112.462-271.52v0z" />
-<glyph unicode="&#xea27;" glyph-name="icon-expand" d="M960 896c0 0 0 0 0 0h-320v-128h165.4l-210.6-210.8c-25-25-25-65.6 0-90.6 12.4-12.4 28.8-18.8 45.2-18.8s32.8 6.2 45.2 18.8l210.8 210.8v-165.4h128v384h-64zM896 90.6l-210.8 210.6c-25 25-65.6 25-90.6 0s-25-65.6 0-90.6l210.8-210.6h-165.4v-128h384v384h-128v-165.4zM218.6 768h165.4v128h-320c0 0 0 0 0 0h-64v-384h128v165.4l210.8-210.8c12.4-12.4 28.8-18.8 45.2-18.8s32.8 6.2 45.2 18.8c25 25 25 65.6 0 90.6l-210.6 210.8zM338.8 301.2l-210.8-210.6v165.4h-128v-384h384v128h-165.4l210.8 210.8c25 25 25 65.6 0 90.6-25.2 24.8-65.6 24.8-90.6-0.2z" />
-<glyph unicode="&#xea28;" glyph-name="icon-list-view" d="M0 832h1024v-128h-1024v128zM0 576h1024v-128h-1024v128zM0 320h1024v-128h-1024v128zM0 64h1024v-128h-1024v128z" />
-<glyph unicode="&#xea29;" glyph-name="icon-grid-snap-to" d="M382 66h448v448h-448v-448zM510 386h192v-192h-192v192zM-2 322h320v-64h-320v64zM894 322h128v-64h-128v64zM574 898h64v-320h-64v320zM574 2h64v-128h-64v128zM574 322h64v-64h-64v64z" />
-<glyph unicode="&#xea2a;" glyph-name="icon-grid-snap-no" d="M768 320h192v-64h-192v64zM256 320h192v-64h-192v64zM0 320h192v-64h-192v64zM640 384h-64v-64h-64v-64h64v-64h64v64h64v64h-64zM576 640h64v-192h-64v192zM576 896h64v-192h-64v192zM576 128h64v-192h-64v192z" />
-<glyph unicode="&#xea2b;" glyph-name="icon-frame-show" d="M0 832v-896h1024v896h-1024zM896 64h-768v640h768v-640zM192 640h384v-128h-384v128z" />
-<glyph unicode="&#xea2c;" glyph-name="icon-frame-hide" d="M128 706h420l104 128h-652v-802.4l128 157.4zM896 66h-420l-104-128h652v802.4l-128-157.4zM832 898l-832-1024h192l832 1024zM392 514l104 128h-304v-128z" />
-<glyph unicode="&#xea2d;" glyph-name="icon-import" d="M832 703.6v-639.4c0-0.2-0.2-0.2-0.4-0.4h-319.6v-192h320c105.6 0 192 86.4 192 192v640.2c0 105.6-86.4 192-192 192h-320v-192h319.6c0.2 0 0.4-0.2 0.4-0.4zM192 192v-192l384 384-384 384v-192h-192v-384z" />
-<glyph unicode="&#xea2e;" glyph-name="icon-export" d="M192 64.34v639.32l0.34 0.34h319.66v192h-320c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h320v192h-319.66zM1024 384l-384 384v-192h-192v-384h192v-192l384 384z" />
-<glyph unicode="&#xea2f;" glyph-name="icon-font-size" horiz-adv-x="1504" d="M1226.4 576h-176l-76.22-203.24 77-205.34 87.22 232.58 90.74-242h-174.44l49.5-132h174.44l57.76-154h154l-264 704zM384 896l-384-1024h224l84 224h408l84-224h224l-384 1024zM380 288l132 352 132-352z" />
-<glyph unicode="&#xea30;" glyph-name="icon-clear-data" d="M632 584l-120-120-120 120-80-80 120-120-120-120 80-80 120 120 120-120 80 80-120 120 120 120-80 80zM512 896c-282.76 0-512-86-512-192v-640c0-106 229.24-192 512-192s512 86 512 192v640c0 106-229.24 192-512 192zM512 64c-176.731 0-320 143.269-320 320s143.269 320 320 320c176.731 0 320-143.269 320-320v0c0-176.731-143.269-320-320-320v0z" />
-<glyph unicode="&#xea31;" glyph-name="icon-history" d="M576 832c-247.4 0-448-200.6-448-448h-128l192-192 192 192h-128c0 85.4 33.2 165.8 93.8 226.2 60.4 60.6 140.8 93.8 226.2 93.8s165.8-33.2 226.2-93.8c60.6-60.4 93.8-140.8 93.8-226.2s-33.2-165.8-93.8-226.2c-60.4-60.6-140.8-93.8-226.2-93.8s-165.8 33.2-226.2 93.8l-90.6-90.6c81-81 193-131.2 316.8-131.2 247.4 0 448 200.6 448 448s-200.6 448-448 448zM576 624c-26.6 0-48-21.4-48-48v-211.8l142-142c9.4-9.4 21.6-14 34-14s24.6 4.6 34 14c18.8 18.8 18.8 49.2 0 67.8l-114 114v172c0 26.6-21.4 48-48 48z" />
-<glyph unicode="&#xea32;" glyph-name="icon-arrow-up-to-parent" horiz-adv-x="1056" d="M643.427 70.739c-81.955 0.697-148.179 67.065-148.642 149.010v395.872l296.871-247.393v197.914l-395.828 329.857-395.828-328.62v-197.502l296.871 246.156v-396.241c0-190.905 155.239-346.556 346.144-346.968l412.321-0.825 0.412 197.914z" />
-<glyph unicode="&#xea33;" glyph-name="icon-crosshair-in-circle" d="M512 896c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512zM783.6 112.4c-54.634-54.8-125.77-93.12-205.322-106.874l-2.278-0.326v250.8h-128v-250.8c-161.302 28.062-286.738 153.497-314.468 312.5l-0.332 2.3h250.8v128h-250.8c28.062 161.302 153.497 286.738 312.5 314.468l2.3 0.332v-250.8h128v250.8c161.302-28.062 286.738-153.497 314.468-312.5l0.332-2.3h-250.8v-128h250.8c-14.080-81.83-52.4-152.966-107.191-207.591l-0.009-0.009z" />
-<glyph unicode="&#xea34;" glyph-name="icon-target" d="M512 512c70.692 0 128-57.308 128-128s-57.308-128-128-128c-70.692 0-128 57.308-128 128v0c0.114 70.647 57.353 127.886 127.989 128h0.011zM512 640c-141.385 0-256-114.615-256-256s114.615-256 256-256c141.385 0 256 114.615 256 256v0c-0.114 141.339-114.661 255.886-255.989 256h-0.011zM512 768c211.87-0.128 383.575-171.912 383.575-383.8 0-211.967-171.833-383.8-383.8-383.8s-383.8 171.833-383.8 383.8c0 105.99 42.963 201.945 112.425 271.4v0c69.21 69.437 164.944 112.401 270.713 112.401 0.312 0 0.624 0 0.936-0.001h-0.048zM512 896c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512z" />
-<glyph unicode="&#xea35;" glyph-name="icon-items-collapse" d="M45.2 237.2h229.6l-274.8-274.6 90.6-90.6 274.6 274.8v-229.6h128v448h-448v-128zM1024 805.4l-90.6 90.6-274.6-274.8v229.6h-128v-448h448v128h-229.6l274.8 274.6z" />
-<glyph unicode="&#xea36;" glyph-name="icon-items-expand" d="M448 0h-229.4l274.6 274.8-90.4 90.4-274.8-274.6v229.4h-128v-448h448v128zM530.8 493.2l90.4-90.4 274.8 274.6v-229.4h128v448h-448v-128h229.4l-274.6-274.8z" />
-<glyph unicode="&#xea37;" glyph-name="icon-3-dots" d="M256 384c0-70.692-57.308-128-128-128s-128 57.308-128 128c0 70.692 57.308 128 128 128s128-57.308 128-128zM640 384c0-70.692-57.308-128-128-128s-128 57.308-128 128c0 70.692 57.308 128 128 128s128-57.308 128-128zM1024 384c0-70.692-57.308-128-128-128s-128 57.308-128 128c0 70.692 57.308 128 128 128s128-57.308 128-128z" />
-<glyph unicode="&#xea38;" glyph-name="icon-grid-on" d="M1024 512v128h-256v256h-128v-256h-256v256h-128v-256h-256v-128h256v-256h-256v-128h256v-256h128v256h256v-256h128v256h256v128h-256v256zM640 256h-256v256h256z" />
-<glyph unicode="&#xea39;" glyph-name="icon-grid-off" d="M256 344.6l128 157.6v9.8h8l104 128h-112v256h-128v-256h-256v-128h256v-167.4zM184 256h-184v-128h80l104 128zM768 423.4l-128-157.6v-9.8h-8l-104-128h112v-256h128v256h256v128h-256v167.4zM840 512h184v128h-80l-104-128zM832 896l-832-1024h192l832 1024h-192z" />
-<glyph unicode="&#xea3a;" glyph-name="icon-camera" d="M896 640h-128l-128 256h-256l-128-256h-128c-70.601-0.227-127.773-57.399-128-127.978v-512.022c0.227-70.601 57.399-127.773 127.978-128h768.022c70.601 0.227 127.773 57.399 128 127.978v512.022c-0.227 70.601-57.399 127.773-127.978 128h-0.022zM512 32c-141.385 0-256 114.615-256 256s114.615 256 256 256c141.385 0 256-114.615 256-256v0c0-141.385-114.615-256-256-256v0z" />
-<glyph unicode="&#xea3b;" glyph-name="icon-folders-collapse" d="M896 576v-448c-0.215-70.606-57.394-127.785-127.979-128h-576.021c0.215-70.606 57.394-127.785 127.979-128h576.021c70.606 0.215 127.785 57.394 128 127.979v448.021c-0.215 70.606-57.394 127.785-127.979 128h-0.021zM832 192v448c-0.215 70.606-57.394 127.785-127.979 128h-192.021l-101.5 82.74c-24.88 24.9-74.040 45.26-109.24 45.26h-237.26c-35.305-0.102-63.898-28.695-64-63.99v-640.010c0.215-70.606 57.394-127.785 127.979-128h576.021c70.606 0.215 127.785 57.394 128 127.979v0.021zM128 252v516l256-260z" />
-<glyph unicode="&#xeb00;" glyph-name="icon-activity" d="M576 832h-256l320-320h-290.256c-44.264 76.516-126.99 128-221.744 128h-128v-512h128c94.754 0 177.48 51.484 221.744 128h290.256l-320-320h256l448 448-448 448z" />
-<glyph unicode="&#xeb01;" glyph-name="icon-activity-mode" d="M512 896c-214.8 0-398.8-132.4-474.8-320h90.8c56.8 0 108-24.8 143-64h241l-192 192h256l320-320-320-320h-256l192 192h-241c-35-39.2-86.2-64-143-64h-90.8c76-187.6 259.8-320 474.8-320 282.8 0 512 229.2 512 512s-229.2 512-512 512z" />
-<glyph unicode="&#xeb02;" glyph-name="icon-autoflow-tabular" d="M192 896c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h64v1024h-64zM384 896h256v-1024h-256v1024zM832 896h-64v-704h256v512c0 105.6-86.4 192-192 192z" />
-<glyph unicode="&#xeb03;" glyph-name="icon-clock" d="M512 896c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512zM782 206c-12.8-22.2-36.6-36-62.4-36-12.6 0-25 3.4-36 9.6l-222 128.2c-0.8 0.4-1.6 1-2.4 1.4l-0.8 0.6-1.8 1.2-2.4 2-1.8 1.4-0.6 0.6c-0.8 0.6-1.4 1.2-2.2 1.8v0c-5 4.6-9.4 10-13 15.8-0.2 0.4-0.6 1-0.8 1.4s-0.6 1-0.8 1.4c-3.2 6-5.8 12.4-7.2 19.2v0.2c-0.2 1-0.4 1.8-0.6 2.8 0 0.2 0 0.6-0.2 0.8-0.2 0.6-0.2 1.4-0.2 2.2s-0.2 1-0.2 1.6 0 1-0.2 1.6-0.2 1.6-0.2 2.2c0 0.4 0 0.6 0 1 0 1 0 1.8 0 2.8 0 0 0 0.2 0 0.4v363.8c0 39.8 32.2 72 72 72s72-32.2 72-72v-322.4l185.8-107.2c34.2-20 45.8-64 26-98.4z" />
-<glyph unicode="&#xeb04;" glyph-name="icon-database" d="M1024 704c0-106.039-229.23-192-512-192s-512 85.961-512 192c0 106.039 229.23 192 512 192s512-85.961 512-192zM512 384c-282.77 0-512 85.962-512 192v-512c0-106.038 229.23-192 512-192s512 85.962 512 192v512c0-106.038-229.23-192-512-192z" />
-<glyph unicode="&#xeb05;" glyph-name="icon-database-query" d="M683.52 76.714c-50.782-28.456-109.284-44.714-171.52-44.714-194.094 0-352 157.906-352 352s157.906 352 352 352 352-157.906 352-352c0-62.236-16.258-120.738-44.714-171.52l191.692-191.692c8.516 13.89 13.022 28.354 13.022 43.212v640c0 106.038-229.23 192-512 192s-512-85.962-512-192v-640c0-106.038 229.23-192 512-192 126.11 0 241.548 17.108 330.776 45.46l-159.256 159.254zM352 384c0-88.224 71.776-160 160-160s160 71.776 160 160-71.776 160-160 160-160-71.776-160-160z" />
-<glyph unicode="&#xeb06;" glyph-name="icon-dataset" d="M896 704h-320c-16.4 16.4-96.8 96.8-109.2 109.2l-37.4 37.4c-25 25-74.2 45.4-109.4 45.4h-256c-35.2 0-64-28.8-64-64v-384c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v128c0 70.4-57.6 128-128 128zM896 448h-768c-70.4 0-128-57.6-128-128v-320c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v320c0 70.4-57.6 128-128 128zM320 0h-128v320h128v-320zM576 0h-128v320h128v-320zM832 0h-128v320h128v-320z" />
-<glyph unicode="&#xeb07;" glyph-name="icon-datatable" d="M1024 704c0-106.039-229.23-192-512-192s-512 85.961-512 192c0 106.039 229.23 192 512 192s512-85.961 512-192zM512 384c-282.8 0-512 86-512 192v-512c0-106 229.2-192 512-192s512 86 512 192v512c0-106-229.2-192-512-192zM896 321v-256c-36.6-15.6-79.8-28.8-128-39.4v256c48.2 10.6 91.4 23.8 128 39.4zM256 281.6v-256c-48.2 10.4-91.4 23.8-128 39.4v256c36.6-15.6 79.8-28.8 128-39.4zM384 6v256c41-4 83.8-6 128-6s87 2.2 128 6v-256c-41-4-83.8-6-128-6s-87 2.2-128 6z" />
-<glyph unicode="&#xeb08;" glyph-name="icon-dictionary" d="M832 256c105.6 0 192 86.4 192 192v256c0 105.6-86.4 192-192 192v-320l-128 64-128-64v320h-384c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v192c0-105.6-86.4-192-192-192h-640v192h640z" />
-<glyph unicode="&#xeb09;" glyph-name="icon-folder" d="M896 704h-320c-16.4 16.4-96.8 96.8-109.2 109.2l-37.4 37.4c-25 25-74.2 45.4-109.4 45.4h-256c-35.2 0-64-28.8-64-64v-384c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v128c0 70.4-57.6 128-128 128zM896 448h-768c-70.4 0-128-57.6-128-128v-320c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v320c0 70.4-57.6 128-128 128z" />
-<glyph unicode="&#xeb0a;" glyph-name="icon-image" d="M896 896h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM896 0h-768v768h768v-768zM320 640l-128-128v-448h640v320l-128 128-128-128z" />
-<glyph unicode="&#xeb0b;" glyph-name="icon-layout" d="M448 896h-256c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h256v1024zM832 896h-256v-577.664h448v385.664c0 105.6-86.4 192-192 192zM576-128h256c105.6 0 192 86.4 192 192v129.664h-448v-321.664z" />
-<glyph unicode="&#xeb0c;" glyph-name="icon-object" d="M512-128l512 320v384l-512.020 320-511.98-320v-384l512-320zM512 704l358.4-224-358.4-224-358.4 224 358.4 224z" />
-<glyph unicode="&#xeb0d;" glyph-name="icon-object-unknown" d="M510 898l-512-320v-384l512-320 512 320v384l-512 320zM585.4 36.8c-21.2-20.8-46-30.8-76-30.8-31.2 0-56.2 9.8-76.2 29.6-20 20-29.6 44.8-29.6 76.2 0 30.4 10.2 55.2 31 76.2s45.2 31.2 74.8 31.2c29.6 0 54.2-10.4 75.6-32s31.8-46.4 31.8-76c-0.2-29-10.8-54-31.4-74.4zM638.2 349.4c-23.6-11.8-37.4-22-43.4-32.4-3.6-6.2-6-14.8-7.4-26.8v-41h-161.4v44.2c0 40.2 4.4 69.8 13 88 8 17.2 22.6 30.2 44.8 40l34.8 15.4c32 14.2 48.2 35.2 48.2 62.8 0 16-6 30.4-17.2 41.8-11.2 11.2-25.6 17.2-41.6 17.2-24 0-54.4-10-62.8-57.4l-2.2-12.2h-147l1.4 16.2c4 44.6 17 82.4 38.8 112.2 19.6 27 45.6 48.6 77 64.6s64.6 24 98.2 24c60.6 0 110.2-19.4 151.4-59.6 41.2-40 61.2-88 61.2-147.2 0-70.8-28.8-121.4-85.8-149.8z" />
-<glyph unicode="&#xeb0e;" glyph-name="icon-packet" d="M512 896l-512-320v-512c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v512l-512 320zM512 704l358.4-224-358.4-224-358.4 224 358.4 224z" />
-<glyph unicode="&#xeb0f;" glyph-name="icon-page" d="M704 384c-105.6 0-192 86.4-192 192v320h-320c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v320h-320zM768 512h256l-384 384v-256c0-70.4 57.6-128 128-128z" />
-<glyph unicode="&#xeb10;" glyph-name="icon-plot-overlay" d="M830 896h-636c-106.7 0-194-87.3-194-194v-406.82c14.18-18.64 25.66-28.34 32-30.84 14.28 5.62 54.44 47.54 92.96 146 42.46 108.38 116.32 237.66 227.040 237.66 52.4 0 101.42-29.16 145.7-86.68 37.34-48.5 64.84-108.92 81.34-151.080 38.52-98.38 78.68-140.3 92.96-146 14.28 5.62 54.44 47.54 92.96 146 42.46 108.48 116.32 237.76 227.040 237.76 11.355-0.003 22.389-1.366 32.952-3.936l-0.952 0.196v57.74c0 106.7-87.3 194-194 194zM992 503.66c-14.28-5.62-54.44-47.52-92.96-146-42.46-108.38-116.32-237.66-227.040-237.66-52.4 0-101.42 29.16-145.7 86.68-37.34 48.5-64.84 108.92-81.34 151.080-38.52 98.38-78.68 140.3-92.96 146-14.28-5.62-54.44-47.52-92.96-146-42.46-108.48-116.32-237.76-227.040-237.76-11.355 0.003-22.389 1.367-32.952 3.936l0.952-0.196v-57.74c0-106.7 87.3-194 194-194h636c106.7 0 194 87.3 194 194v406.82c-14.18 18.64-25.66 28.34-32 30.84z" />
-<glyph unicode="&#xeb11;" glyph-name="icon-plot-stacked" d="M89.6 584c24.98 0 48.96 26.52 85.52 70.18 45.42 54.28 102 121.82 196 121.82 44.64 0 86.62-15.46 124.8-46 28.68-22.9 51.16-50.42 72.92-77.060 38.42-46.94 59.16-68.94 83.96-68.94h371.2v118c0 106.7-87.3 194-194 194h-636c-106.7 0-194-87.3-194-194v-118h89.6zM529.5 485.6c-28.24 22.64-50.52 50-72 76.28-35.5 43.48-58.76 70.12-86.3 70.12-25.060 0-49.080-26.54-85.66-70.24-45.4-54.24-102-121.76-196-121.76h-89.54v-112h371.2c44 0 85.54-15.34 123.3-45.6 28.24-22.64 50.52-50 72-76.28 35.5-43.48 58.76-70.12 86.3-70.12 25.060 0 49.080 26.54 85.66 70.24 45.4 54.24 102 121.76 196 121.76h89.54v112h-371.2c-44.060 0-85.54 15.34-123.3 45.6zM934.4 184c-24.98 0-48.96-26.52-85.52-70.18-45.42-54.28-102-121.82-196-121.82-44.64 0-86.62 15.46-124.8 46-28.68 22.9-51.16 50.42-72.92 77.060-38.42 46.94-59.16 68.94-83.96 68.94h-371.2v-118c0-106.7 87.3-194 194-194h636c106.7 0 194 87.3 194 194v118h-89.6z" />
-<glyph unicode="&#xeb12;" glyph-name="icon-session" d="M635.6 371.6c6.6-4.2 13.2-8.6 19.2-13.6l120.4-96.4c29.6-23.8 83.8-23.8 113.4 0l135.2 108c0.2 4.8 0.2 9.4 0.2 14.2 0 52.2-7.8 102.4-22.2 149.8l-154.8-123.6c-58.2-46.6-140.2-59.2-211.4-38.4zM248.6 261.8l120.4 96.4c58 46.4 140 59.2 211.2 38.4-6.6 4.2-13.2 8.6-19.2 13.6l-120.4 96.4c-29.6 23.8-83.8 23.8-113.4 0l-120.2-96.6c-40-32-91.4-48-143-48-21.6 0-43 2.8-63.8 8.4 0-0.6 0-1.2 0-1.6 5-3.4 10-6.8 14.6-10.6l120.4-96.4c29.8-23.8 83.8-23.8 113.4 0zM120.6 517.8l120.4 96.4c80.2 64.2 205.6 64.2 285.8 0l120.4-96.4c29.6-23.8 83.8-23.8 113.4 0l181 144.8c-91.2 140.4-249.6 233.4-429.6 233.4-238.6 0-439.2-163.2-496-384.2 30.8-17.6 77.8-15.6 104.6 6zM689 154l-120.4 96.4c-29.6 23.8-83.8 23.8-113.4 0l-120.2-96.4c-40-32-91.4-48-143-48-47.8 0-95.4 13.8-134.2 41.4 85.6-163.6 256.8-275.4 454.2-275.4s368.6 111.8 454.2 275.4c-80.4-57.4-199.8-55.2-277.2 6.6z" />
-<glyph unicode="&#xeb13;" glyph-name="icon-tabular" d="M896 896h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM640 448h-256v192h256v-192zM384 384h256v-192h-256v192zM320 192h-256v192h256v-192zM320 640v-192h-256v192h256zM128-64c-17 0-33 6.6-45.2 18.8s-18.8 28.2-18.8 45.2v128h256v-192h-192zM384-64v192h256v-192h-256zM960 0c0-17-6.6-33-18.8-45.2s-28.2-18.8-45.2-18.8h-192v192h256v-128zM960 192h-256v192h256v-192zM960 448h-256v192h256v-192z" />
-<glyph unicode="&#xeb14;" glyph-name="icon-tabular-lad" d="M896 896h-768c-70.6-0.2-127.8-57.4-128-128v-768c0.2-70.6 57.4-127.8 128-128h768c70.6 0.2 127.8 57.4 128 128v768c-0.2 70.6-57.4 127.8-128 128zM64 640h256v-192h-256v192zM64 384h256v-192h-256v192zM128-64c-35.2 0.2-63.8 28.8-64 64v128h256v-192h-192zM384-64v192h256v-192h-256zM960 0c-0.2-35.2-28.8-63.8-64-64h-192v192h256v-128zM960 384v-192h-576v192h64v64h-64v192h576v-192h-64v-64h64zM782.4 348.6l-110.4 55.2v172.2c0 17.6-14.4 32-32 32s-32-14.4-32-32v-211.8l145.6-72.8c15.8-8 35-1.6 43 14.4 8 15.6 1.6 35-14.2 42.8v0z" />
-<glyph unicode="&#xeb15;" glyph-name="icon-tabular-lad-set" d="M128 128v576c-70.6-0.2-127.8-57.4-128-128v-576c0.2-70.6 57.4-127.8 128-128h576c70.6 0.2 127.8 57.4 128 128h-576c-70.6 0.2-127.8 57.4-128 128zM896 896h-576c-70.6-0.2-127.8-57.4-128-128v-576c0.2-70.6 57.4-127.8 128-128h576c70.6 0.2 127.8 57.4 128 128v576c-0.2 70.6-57.4 127.8-128 128zM256 704h192v-128h-192v128zM256 512h192v-192h-192v192zM320 128c-35.2 0.2-63.8 28.8-64 64v64h192v-128h-128zM512 128v128h192v-128h-192zM960 192c-0.2-35.2-28.8-63.8-64-64h-128v128h192v-64zM960 320h-448v384h448v-384zM832 416c17.6 0 32 14.4 32 32 0 13.8-8.8 26-21.8 30.4l-74.2 24.6v105c0 17.6-14.4 32-32 32s-32-14.4-32-32v-151l117.8-39.2c3.4-1.2 6.8-1.8 10.2-1.8z" />
-<glyph unicode="&#xeb16;" glyph-name="icon-tabular-realtime" d="M896 896h-768c-70.606-0.215-127.785-57.394-128-127.979v-768.021c0.215-70.606 57.394-127.785 127.979-128h768.021c70.606 0.215 127.785 57.394 128 127.979v768.021c-0.215 70.606-57.394 127.785-127.979 128h-0.021zM448 604l25.060-25.32c7.916-7.922 18.856-12.822 30.94-12.822s23.023 4.9 30.94 12.822v0l75.5 76.3c29.97 30.338 71.571 49.128 117.56 49.128s87.59-18.79 117.544-49.112l0.016-0.016 50.44-50.98v-152.2c-24.111 8.83-44.678 22.255-61.542 39.342l-0.018 0.018-75.5 76.3c-7.916 7.922-18.856 12.822-30.94 12.822s-23.023-4.9-30.94-12.822v0l-75.5-76.3c-29.971-30.343-71.575-49.137-117.568-49.137-20.084 0-39.331 3.584-57.137 10.146l1.145-0.369v152.2zM320-64h-192c-35.26 0.214-63.786 28.74-64 63.98v128.020h256v-192zM320 192h-256v192h256v-192zM320 448h-256v192h256v-192zM640-64h-256v192h256v-192zM448 259.38v174.5c1.88-1.74 3.74-3.5 5.56-5.34l75.5-76.3c7.916-7.922 18.856-12.822 30.94-12.822s23.023 4.9 30.94 12.822v0l75.5 76.3c29.966 30.333 71.56 49.119 117.542 49.119 43.28 0 82.673-16.643 112.128-43.879l-0.11 0.1v-174.5c-1.88 1.74-3.74 3.5-5.56 5.34l-75.5 76.3c-7.916 7.922-18.856 12.822-30.94 12.822s-23.023-4.9-30.94-12.822v0l-75.5-76.3c-29.966-30.333-71.56-49.119-117.542-49.119-43.28 0-82.673 16.643-112.128 43.879l0.11-0.1zM960 0c-0.214-35.26-28.74-63.786-63.98-64h-192.020v192h256v-128z" />
-<glyph unicode="&#xeb17;" glyph-name="icon-tabular-scrolling" d="M64 896c-35.2 0-64-28.8-64-64v-192h448v256h-384zM1024 640v192c0 35.2-28.8 64-64 64h-384v-256h448zM0 512v-192c0-35.2 28.8-64 64-64h384v256h-448zM960 256c35.2 0 64 28.8 64 64v192h-448v-256h384zM512-128l-256 256h512z" />
-<glyph unicode="&#xeb18;" glyph-name="icon-telemetry" d="M32 264.34c14.28 5.62 54.44 47.54 92.96 146 42.46 108.38 116.32 237.66 227.040 237.66 52.4 0 101.42-29.16 145.7-86.68 37.34-48.5 64.84-108.92 81.34-151.080 38.52-98.38 78.68-140.3 92.96-146 14.28 5.62 54.44 47.54 92.96 146 37.4 95.5 99.14 207.14 188.94 232.46-90.462 152.598-254.314 253.3-441.686 253.3-0.075 0-0.15 0-0.225 0h0.011c-282.76 0-512-229.24-512-512 0-0.032 0-0.070 0-0.108 0-35.719 3.641-70.587 10.572-104.254l-0.572 3.323c9.54-10.78 17.22-16.74 22-18.62zM992 503.66c-14.28-5.62-54.44-47.52-92.96-146-42.46-108.38-116.32-237.66-227.040-237.66-52.4 0-101.42 29.16-145.7 86.68-37.34 48.5-64.84 108.92-81.34 151.080-38.52 98.38-78.68 140.3-92.96 146-14.28-5.62-54.44-47.52-92.96-146-37.4-95.5-99.14-207.14-188.94-232.46 90.462-152.598 254.314-253.3 441.686-253.3 0.075 0 0.15 0 0.225 0h-0.011c282.76 0 512 229.24 512 512 0 0.032 0 0.070 0 0.108 0 35.719-3.641 70.587-10.572 104.254l0.572-3.323c-9.54 10.78-17.22 16.74-22 18.62z" />
-<glyph unicode="&#xeb19;" glyph-name="icon-timeline" d="M832 896h-640c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM128 576v128h256v-128zM256 448h384v-128h-384zM896 64h-448v128h448zM896 320h-128v128h128zM896 576h-384v128h384z" />
-<glyph unicode="&#xeb1a;" glyph-name="icon-timer" d="M640 749.4v82.58c0 35.346-28.654 64-64 64v0h-128c-35.346 0-64-28.654-64-64v0-82.58c-185.040-55.080-320-226.48-320-429.42 0-247.42 200.58-448 448-448s448 200.58 448 448c0 202.96-135 374.4-320 429.42zM532 299.98l-263.76-211c-57.105 59.935-92.24 141.25-92.24 230.772 0 0.080 0 0.16 0 0.24v-0.012c0 185.28 150.72 336 336 336 6.72 0 13.38-0.22 20-0.62v-355.38z" />
-<glyph unicode="&#xeb1b;" glyph-name="icon-topic" d="M454.36 419.36l86.3 86.3c9.088 8.965 21.577 14.502 35.36 14.502s26.272-5.537 35.366-14.507l86.294-86.294c19.328-19.358 42.832-34.541 69.047-44.082l1.313-0.418v172.14l-57.64 57.64c-34.408 34.33-81.9 55.558-134.35 55.558s-99.943-21.228-134.354-55.562l-86.296-86.296c-9.088-8.965-21.577-14.502-35.36-14.502s-26.272 5.537-35.366 14.507l-28.674 28.654v-172.14c19.045-7.022 41.040-11.084 63.984-11.084 52.463 0 99.966 21.239 134.379 55.587l-0.003-0.003zM505.64 348.64l-86.3-86.3c-9.088-8.965-21.577-14.502-35.36-14.502s-26.272 5.537-35.366 14.507l-86.294 86.294c-2 2-4.2 4-6.36 6v-197.36c33.664-30.721 78.65-49.537 128.031-49.537 52.44 0 99.923 21.22 134.333 55.541l86.296 86.296c9.088 8.965 21.577 14.502 35.36 14.502s26.272-5.537 35.366-14.507l86.294-86.294c2-2 4.2-4 6.36-6v197.36c-33.664 30.721-78.65 49.537-128.031 49.537-52.44 0-99.923-21.22-134.333-55.541l0.004 0.004zM832 896h-128v-192h127.66l0.34-0.34v-639.32l-0.34-0.34h-127.66v-192h128c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM320 64h-127.66l-0.34 0.34v639.32l0.34 0.34h127.66v192h-128c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h128v192z" />
-<glyph unicode="&#xeb1c;" glyph-name="icon-box-with-dashed-lines-v2" d="M0 512h128v-256h-128v256zM128 767.78l0.22 0.22h191.78v128h-192c-70.606-0.215-127.785-57.394-128-127.979v-192.021h128v191.78zM128 0.22v191.78h-128v-192c0.215-70.606 57.394-127.785 127.979-128h192.021v128h-191.78zM384 896h256v-128h-256v128zM896 0.22l-0.22-0.22h-191.78v-128h192c70.606 0.215 127.785 57.394 128 127.979v192.021h-128v-191.78zM896 896h-192v-128h191.78l0.22-0.22v-191.78h128v192c-0.215 70.606-57.394 127.785-127.979 128h-0.021zM896 512h128v-256h-128v256zM384 0h256v-128h-256v128zM256 640h512v-512h-512v512z" />
-<glyph unicode="&#xeb1d;" glyph-name="icon-summary-widget" d="M896 896h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM847.8 285.6l-82.6-143.2-189.6 131.6 19.2-230h-165.4l19.2 230-189.6-131.6-82.6 143.2 208.6 98.4-208.8 98.4 82.6 143.2 189.6-131.6-19.2 230h165.4l-19.2-230 189.6 131.6 82.6-143.2-208.6-98.4 208.8-98.4z" />
-<glyph unicode="&#xeb1e;" glyph-name="icon-notebook" d="M896 785.2c0 79.8-55.4 127.4-123 105.4l-773-250.6h896v145.2zM896 576h-896v-576c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v448c0 70.4-57.6 128-128 128zM832 64h-384v320h384v-320z" />
-<glyph unicode="&#xeb1f;" glyph-name="icon-tabs-view" d="M0 0c0.227-70.601 57.399-127.773 127.978-128h768.022c70.601 0.227 127.773 57.399 128 127.978v608.022h-512l-50.2 225.6c-7.6 34.2-42.6 62.4-77.8 62.4h-256c-70.601-0.227-127.773-57.399-128-127.978v-0.022zM832 128h-640v256h640zM480 896c35.2 0 70.2-28.2 77.8-62.4l36-161.6h430.2v96c-0.227 70.601-57.399 127.773-127.978 128h-0.022z" />
-<glyph unicode="&#xeb20;" glyph-name="icon-flexible-layout" d="M0 64c0-105.6 86.4-192 192-192h64v576h-256zM0 704v-128h256v320h-64c-105.6 0-192-86.4-192-192zM768-128h64c105.6 0 192 86.4 192 192v128h-256zM384 896h256v-1024h-256v1024zM832 896h-64v-576h256v384c0 105.6-86.4 192-192 192z" />
-<glyph unicode="&#xeb21;" glyph-name="icon-generator-sine" d="M152 422.2c10.8 4.2 40.8 35.6 69.8 109.4 31.8 81.4 87.2 178.4 170.2 178.4 39.4 0 76-21.8 109.2-65 28-36.4 48.8-81.6 61-113.4 29-73.8 59-105.2 69.8-109.4 10.8 4.2 40.8 35.6 69.8 109.4s74.2 155.4 141.6 174.4c-67.89 114.467-190.82 190-331.391 190-0.003 0-0.007 0-0.010 0h0.001c-212 0-384-172-384-384 0.017-26.829 2.71-53.018 7.827-78.329l-0.427 2.529c7.2-8 13-12.6 16.6-14zM884.6 419c7.235 27.919 11.392 59.972 11.4 92.995v0.005c-0.017 26.829-2.71 53.018-7.827 78.329l0.427-2.529c-7.2 8-13 12.6-16.6 14-10.8-4.2-40.8-35.6-69.8-109.4-21.8-55.8-54.6-119-100-153.2zM512 256l135 59c-4.485-0.614-9.689-0.977-14.972-1h-0.028c-39.4 0-76 21.8-109.2 65-28 36.4-48.8 81.6-61 113.4-29 73.8-59 105.2-69.8 109.4-10.8-4.2-40.8-35.6-69.8-109.4-16.4-42.2-39.2-88.4-68.8-123.2zM1024 416l-512-224-512 224v-320l512-224 512 224v320z" />
-<glyph unicode="&#xeb22;" glyph-name="icon-generator-event" d="M320 704h384v-64h-384v64zM320 448h384v-64h-384v64zM320 576h320v-64h-320v64zM256 767.8h512v-399.8l128 56v344c-0.227 70.601-57.399 127.773-127.978 128h-512.022c-70.601-0.227-127.773-57.399-128-127.978v-344.022l128-56zM658.2 320h-292.4l146.2-64 146.2 64zM512 192l-512 224v-320l512-224 512 224v320l-512-224z" />
-<glyph unicode="&#xeb23;" glyph-name="icon-gauge-v2" d="M512 896c-282.8 0-512-229.2-512-512 0-226.4 147-418.4 350.6-486l257.4 486v-503c236.8 45 416 253 416 503 0 282.8-229.2 512-512 512zM754.8 368.2c-58.967 68.597-145.842 111.772-242.8 111.772s-183.833-43.176-242.445-111.35l-0.355-0.422-146 125c8.6 10 17.4 19.6 26.8 28.8 92.628 92.679 220.619 150.006 362 150.006s269.372-57.326 361.997-150.003l0.003-0.003c9.4-9.2 18.2-18.8 26.8-28.8z" />
-<glyph unicode="&#xeb24;" glyph-name="icon-spectra" d="M768 192h-512l102.4 179.2-358.4-51.2v-254c0-106.6 87.4-194 194-194h636c106.8 0 194 87.4 194 194v62l-325.8 186.2zM830 896h-636c-106.6 0-194-87.2-194-194v-318l400 60.2 112 195.8 109.8-192h402.2v254c-0.227 107.052-86.948 193.773-193.978 194h-0.022zM1024 256v64l-384 64 384-128z" />
-<glyph unicode="&#xeb25;" glyph-name="icon-telemetry-spectra" d="M512 640l109.8-192h398.2c-31.4 252.6-247 448-508 448-282.8 0-512-229.2-512-512l400 60.2zM768 192h-512l102.4 179.2-354.4-50.6c31.2-252.8 246.8-448.6 508-448.6 201.6 0 376 116.6 459.6 286l-273.4 156.2zM640 384l384-128v64l-384 64z" />
-<glyph unicode="&#xeb26;" glyph-name="icon-pushbutton" d="M370.2 436.6c9.326-8.53 19.666-16.261 30.729-22.914l0.871-0.486c-11.077 19.209-17.664 42.221-17.8 66.76v0.040c0 39.6 17.8 77.6 50.2 107.4 37 34 87.4 52.6 141.8 52.6 40.2 0 78.2-10.2 110.2-29.2-8.918 15.653-19.693 29.040-32.268 40.482l-0.132 0.118c-37 34-87.4 52.6-141.8 52.6s-104.8-18.6-141.8-52.6c-32.4-29.8-50.2-67.8-50.2-107.4s17.8-77.6 50.2-107.4zM885.4 626.4c-40.6 154.6-192.4 269.6-373.4 269.6s-332.8-115-373.4-269.6c-86-80-138.6-187.8-138.6-306.4 0-247.4 229.2-448 512-448s512 200.6 512 448c0 118.6-52.6 226.4-138.6 306.4zM512 768c141.2 0 256-100.4 256-224s-114.8-224-256-224-256 100.4-256 224 114.8 224 256 224zM512 64c-175.4 0-318.4 127.8-320 285.4 68.8-94.8 186.4-157.4 320-157.4s251.2 62.6 320 157.4c-1.6-157.6-144.6-285.4-320-285.4z" />
-<glyph unicode="&#xeb27;" glyph-name="icon-conditional" d="M512 896c-282.76 0-512-229.24-512-512s229.24-512 512-512 512 229.24 512 512-229.24 512-512 512zM512 128l-384 256 384 256 384-256z" />
-<glyph unicode="&#xeb28;" glyph-name="icon-condition-widget" d="M832 896h-640c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM512 128l-384 256 384 256 384-256z" />
-<glyph unicode="&#xeb29;" glyph-name="icon-alphanumeric" d="M535.6 365.4c-8.4-1.6-17.2-3-26.2-4s-18.2-2.4-27.2-4c-10.196-1.861-18.808-4.010-27.21-6.633l1.61 0.433c-8.609-2.674-16.105-6.348-22.89-10.987l0.29 0.187c-6.693-4.517-12.283-10.107-16.663-16.585l-0.137-0.215c-4.6-6.8-7.4-15.6-8.8-26s-0.4-18.4 2.4-25.2c2.746-6.688 7.224-12.195 12.881-16.122l0.119-0.078c5.967-4.053 13.057-6.94 20.704-8.161l0.296-0.039c7.592-1.527 16.319-2.4 25.25-2.4 0.123 0 0.246 0 0.369 0h-0.019c22.2 0 39.6 3.6 52.6 11s23.2 16.2 30.2 26.4c6.273 8.873 11.271 19.191 14.426 30.285l0.174 0.715c1.853 6.809 3.601 15.41 4.855 24.169l0.145 1.231 5.2 41.6c-5.4-4.217-11.723-7.564-18.583-9.689l-0.417-0.111c-6.489-2.241-14.362-4.255-22.444-5.662l-0.956-0.138zM1024 512v192h-152l24 192h-192l-24-192h-256l24 192h-192l-24-192h-232v-192h208l-32-256h-176v-192h152l-24-192h192l24 192h256l-24-192h192l24 192h232v192h-208l32 256zM702.8 484.2l-26.4-211.8c-2.231-15.809-3.537-34.122-3.6-52.727v-0.073c0-16.8 2.2-29.4 6.4-37.8h-113.4c-1.342 5.556-2.338 12.122-2.781 18.84l-0.019 0.36c-0.261 3.524-0.409 7.634-0.409 11.778 0 2.962 0.076 5.907 0.226 8.832l-0.017-0.41c-18.663-17.401-41.395-30.694-66.597-38.289l-1.203-0.311c-22.627-6.956-48.639-10.974-75.586-11h-0.014c-0.764-0.011-1.666-0.018-2.569-0.018-18.098 0-35.598 2.563-52.156 7.345l1.325-0.328c-15.991 4.512-29.851 12.090-41.545 22.122l0.145-0.122c-11.233 9.982-19.792 22.733-24.624 37.192l-0.176 0.608c-5.2 15.2-6.4 33.4-3.8 54.4s9.4 42.2 19.4 57.2c9.524 14.399 21.535 26.346 35.532 35.512l0.468 0.288c13.387 8.662 28.922 15.533 45.512 19.765l1.088 0.235c13.436 3.792 30.801 7.554 48.47 10.41l2.93 0.39c17 2.6 33.8 4.6 50.4 6.2 16.628 1.527 31.69 4.070 46.349 7.643l-2.149-0.443c13 3 23.6 7.6 31.6 13.6s12.6 15 13.6 26.4 0.8 21.8-2.4 28.8c-2.849 6.902-7.542 12.56-13.468 16.517l-0.132 0.083c-6.217 4.011-13.604 6.78-21.543 7.774l-0.257 0.026c-7.897 1.277-17 2.007-26.274 2.007-0.537 0-1.073-0.002-1.609-0.007l0.082 0.001c-22 0-40-4.6-53.8-14.2s-23-25.2-28-47.2h-111.8c4.8 26.2 14.2 48 27.8 65.4 13.475 16.978 29.89 30.968 48.574 41.377l0.826 0.423c18.192 10.038 39.297 17.806 61.619 22.175l1.381 0.225c20.488 4.162 44.053 6.563 68.171 6.6h0.029c21.8-0.005 43.239-1.532 64.222-4.479l-2.422 0.279c20.641-2.809 39.324-8.783 56.401-17.461l-1.001 0.461c15.909-8.108 28.858-20.031 37.967-34.601l0.233-0.399c9-15 12.2-34.8 9-59.6z" />
-<glyph unicode="&#xeb2a;" glyph-name="icon-image-telemetry" d="M512 896c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512zM783.6 112.4c-69.581-69.675-165.757-112.776-272-112.776-212.298 0-384.4 172.102-384.4 384.4s172.102 384.4 384.4 384.4c212.298 0 384.4-172.102 384.4-384.4 0-0.008 0-0.017 0-0.025v0.001c0.001-0.264 0.001-0.575 0.001-0.887 0-105.769-42.964-201.503-112.391-270.703l-0.010-0.010zM704 512l-128-128-192 192-192-192c0-176.731 143.269-320 320-320s320 143.269 320 320v0z" />
-<glyph unicode="&#xeb2b;" glyph-name="icon-telemetry-aggregate" d="M78 500.56c14 41.44 37.48 100.8 69.2 148.36 38.62 57.78 82.38 87.080 130.14 87.080s91.5-29.3 130-87.080c31.72-47.56 55.14-106.92 69.2-148.36 30.88-90.96 63.12-134.98 78-146.54 14.94 11.56 47.2 55.58 78 146.54 14 41.44 37.48 100.8 69.22 148.36q27.8 41.7 59.12 63.5c-75.7 111.377-201.81 183.58-344.783 183.58-0.034 0-0.068 0-0.103 0h0.006c-229.76 0-416-186.24-416-416 0-0.071 0-0.156 0-0.24 0-39.119 5.396-76.977 15.484-112.871l-0.704 2.931c16.78 21.74 40.4 63.34 63.22 130.74zM754 459.44c-14-41.44-37.48-100.8-69.2-148.36-38.56-57.78-82.32-87.080-130-87.080s-91.5 29.3-130 87.080c-31.72 47.56-55.14 106.92-69.2 148.36-30.88 90.96-63.14 134.98-78 146.54-14.94-11.56-47.2-55.58-78-146.54-14.38-41.44-37.8-100.8-69.6-148.36q-27.8-41.7-59.12-63.5c75.7-111.378 201.81-183.58 344.783-183.58 0.119 0 0.237 0 0.356 0h-0.019c229.76 0 416 186.24 416 416 0 0.071 0 0.156 0 0.24 0 39.119-5.396 76.977-15.484 112.871l0.704-2.931c-16.78-21.74-40.4-63.34-63.22-130.74zM921.56 561.38c4.098-24.449 6.44-52.617 6.44-81.332 0-0.017 0-0.034 0-0.051v0.003c0-0.095 0-0.208 0-0.32 0-282.593-229.087-511.68-511.68-511.68-0.113 0-0.225 0-0.338 0h0.018c-0.014 0-0.031 0-0.048 0-28.716 0-56.884 2.342-84.325 6.845l2.993-0.405c72.483-63.623 168.109-102.44 272.802-102.44 0.203 0 0.406 0 0.61 0h-0.031c229.76 0 416 186.24 416 416 0 0.172 0 0.375 0 0.578 0 104.692-38.817 200.319-102.844 273.271l0.404-0.47z" />
-<glyph unicode="&#xeb2c;" glyph-name="icon-bar-graph" d="M832 896h-640c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM267.64 0h-139.64v448h139.64zM477.1 0h-139.64v768h139.64zM686.54 0h-139.64v320h139.64zM896 0h-139.64v640h139.64z" />
-<glyph unicode="&#xeb2d;" glyph-name="icon-map" d="M896 830.6l-128-62.6v-896l128 62.6c70.4 34.42 128 120.2 128 190.6v640c0 70.4-57.6 99.82-128 65.4zM320-16l387.2-96.8v896l-387.2 96.8v-896zM259.2 895.2l-3.2 0.8-128-62.6c-70.4-34.42-128-120.2-128-190.6v-640c0-70.4 57.6-99.82 128-65.4l128 62.6 3.2-0.8z" />
-<glyph unicode="&#xeb2e;" glyph-name="icon-plan" d="M256 704v64c0.215 70.606 57.394 127.785 127.979 128h256.021c70.606-0.215 127.785-57.394 128-127.979v-64.021zM832 768v-128h-640v128c-105.6 0-192-86.4-192-192v-512c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v512c0 105.6-86.4 192-192 192zM128 320v128h256v-128zM640 64h-384v128h384zM896 64h-128v128h128zM896 320h-384v128h384z" />
-<glyph unicode="&#xeb2f;" glyph-name="icon-timelist" d="M896 896h-768c-70.606-0.215-127.785-57.394-128-127.979v-768.021c0.215-70.606 57.394-127.785 127.979-128h768.021c70.606 0.215 127.785 57.394 128 127.979v768.021c-0.215 70.606-57.394 127.785-127.979 128h-0.021zM426.94 362.54c-8.054-15.864-24.249-26.545-42.938-26.545-7.823 0-15.209 1.871-21.734 5.191l0.273-0.126-154.54 77.28v221.66c0 26.51 21.49 48 48 48s48-21.49 48-48v0-162.34l101.46-50.72c15.864-8.054 26.545-24.249 26.545-42.938 0-7.823-1.871-15.209-5.191-21.734l0.126 0.273zM896 0h-320v128h320zM896 192h-320v128h320zM896 384h-320v128h320zM896 576h-320v128h320z" />
-<glyph unicode="&#xeb30;" glyph-name="icon-plot-scatter" d="M192 896c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM128 544c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96v0c-53.019 0-96 42.981-96 96v0zM288 64c-53.019 0-96 42.981-96 96s42.981 96 96 96c53.019 0 96-42.981 96-96v0c0-53.019-42.981-96-96-96v0zM544 256c-53.019 0-96 42.981-96 96s42.981 96 96 96c53.019 0 96-42.981 96-96v0c0-53.019-42.981-96-96-96v0zM544 576c-53.019 0-96 42.981-96 96s42.981 96 96 96c53.019 0 96-42.981 96-96v0c0-53.019-42.981-96-96-96v0zM800 64c-53.019 0-96 42.981-96 96s42.981 96 96 96c53.019 0 96-42.981 96-96v0c0-53.019-42.981-96-96-96v0z" />
+<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
+<glyph unicode="&#xe900;" glyph-name="icon-alert-rect-v2" d="M896 960h-768c-70.6-0.2-127.8-57.4-128-128v-768c0.2-70.6 57.4-127.8 128-128h768c70.6 0.2 127.8 57.4 128 128v768c-0.2 70.6-57.4 127.8-128 128zM576 64h-128v128h128v-128zM597.8 448l-37.8-192h-96l-37.8 192v384h171.8v-384z" />
+<glyph unicode="&#xe901;" glyph-name="icon-alert-triangle-v2" d="M998.2 111.2l-422.6 739.6c-35 61.2-92 61.2-127 0l-422.8-739.6c-35-61.2-6-111.2 64.4-111.2h843.4c70.6 0 99.6 50 64.6 111.2zM576 64h-128v128h128v-128zM597.8 448l-37.8-192h-96l-37.8 192v256h171.8v-256z" />
+<glyph unicode="&#xe902;" glyph-name="icon-arrow-up" d="M512 704l-512-512h1024z" />
+<glyph unicode="&#xe903;" glyph-name="icon-arrow-double-up" d="M510 450l512-512h-1024zM510 962l512-512h-1024z" />
+<glyph unicode="&#xe904;" glyph-name="icon-arrow-tall-up" d="M512 960l512-1024h-1024z" />
+<glyph unicode="&#xe905;" glyph-name="icon-arrow-right" d="M768 448l-512 512v-1024z" />
+<glyph unicode="&#xe906;" glyph-name="icon-arrow-right-equilateral" d="M962 448l-896-512v1024z" />
+<glyph unicode="&#xe907;" glyph-name="icon-arrow-down" d="M512 192l512 512h-1024z" />
+<glyph unicode="&#xe908;" glyph-name="icon-arrow-double-down" d="M510 450l-512 512h1024zM510-62l-512 512h1024z" />
+<glyph unicode="&#xe909;" glyph-name="icon-arrow-tall-down" d="M512-64l-512 1024h1024z" />
+<glyph unicode="&#xe90a;" glyph-name="icon-arrow-left" d="M256 448l512-512v1024z" />
+<glyph unicode="&#xe90b;" glyph-name="icon-asterisk" d="M1004.166 619.542l-97.522 168.916-330.534-229.414 33.414 400.956h-195.048l33.414-400.956-330.534 229.414-97.522-168.916 363.944-171.542-363.944-171.542 97.522-168.916 330.534 229.414-33.414-400.956h195.048l-33.414 400.956 330.534-229.414 97.522 168.916-363.944 171.542z" />
+<glyph unicode="&#xe90c;" glyph-name="icon-bell" d="M512-64c106 0 192 86 192 192h-384c0-106 86-192 192-192zM896 512v64c0 212-172 384-384 384s-384-172-384-384v-64c0-70.6-57.4-128-128-128v-128h1024v128c-70.6 0-128 57.4-128 128z" />
+<glyph unicode="&#xe90d;" glyph-name="icon-box-round-corners" d="M1024 128c0-105.6-86.4-192-192-192h-640c-105.6 0-192 86.4-192 192v640c0 105.6 86.4 192 192 192h640c105.6 0 192-86.4 192-192v-640z" />
+<glyph unicode="&#xe90e;" glyph-name="icon-box-with-arrow-cursor" d="M894 962h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h400c-2.2 3.8-4 7.6-5.8 11.4l-255.2 576.8c-21.4 48.4-10.8 105 26.6 142.4 24.4 24.4 57.2 37.4 90.4 37.4 17.4 0 35.2-3.6 51.8-11l576.6-255.4c4-1.8 7.8-3.8 11.4-5.8v400.2c0.2 70.4-57.4 128-127.8 128zM958.6 322.6l-576.6 255.4 255.4-576.6 64.6 128.6 192-192 128 128-192 192z" />
+<glyph unicode="&#xe90f;" glyph-name="icon-check" d="M1024 960l-640-640-384 384v-384l384-384 640 640z" />
+<glyph unicode="&#xe910;" glyph-name="icon-connectivity" d="M704 384c0-70.4-57.6-128-128-128h-128c-70.4 0-128 57.6-128 128v128c0 70.4 57.6 128 128 128h128c70.4 0 128-57.6 128-128v-128zM1024 448l-192 320v-640zM0 448l192 320v-640z" />
+<glyph unicode="&#xe911;" glyph-name="icon-database-in-brackets" d="M768 608c0-53.019-114.615-96-256-96s-256 42.981-256 96c0 53.019 114.615 96 256 96s256-42.981 256-96zM768 288v256c0-53-114.6-96-256-96s-256 43-256 96v-256c0-53 114.6-96 256-96s256 43 256 96zM832 960h-128v-192h127.6c0.2 0 0.2-0.2 0.4-0.4v-639.4c0-0.2-0.2-0.2-0.4-0.4h-127.6v-192h128c105.6 0 192 86.4 192 192v640.2c0 105.6-86.4 192-192 192zM192 128.4v639.4c0 0.2 0.2 0.2 0.4 0.4h127.6v191.8h-128c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h128v192h-127.6c-0.2 0-0.4 0.2-0.4 0.4z" />
+<glyph unicode="&#xe912;" glyph-name="icon-eye-open" d="M512 843.6c-245.8 0-452.2-168-510.8-395.6 58.6-227.4 265-395.6 510.8-395.6s452.2 168 510.8 395.6c-58.6 227.4-265 395.6-510.8 395.6zM829.2 371.6c-22.6-34.4-50.6-64.8-83-90.4-32.8-25.8-69-45.6-108-59.4-40.4-14.2-82.8-21.4-126-21.4s-85.8 7.2-126 21.4c-39 13.8-75.4 33.8-108 59.4-32.4 25.6-60.4 55.8-83 90.4-15.8 24-28.8 49.6-38.6 76.4 10 26.8 23 52.4 38.6 76.4 22.6 34.4 50.6 64.8 83 90.4 32.8 25.8 69 45.6 108 59.4 40.4 14.2 82.8 21.4 126 21.4s85.8-7.2 126-21.4c39-13.8 75.4-33.8 108-59.4 32.4-25.6 60.4-55.8 83-90.4 15.8-24 28.8-49.6 38.6-76.4-9.8-26.8-22.8-52.4-38.6-76.4zM704 448c0-106.039-85.961-192-192-192s-192 85.961-192 192c0 106.039 85.961 192 192 192s192-85.961 192-192z" />
+<glyph unicode="&#xe913;" glyph-name="icon-gear" d="M1024 384v128l-140.976 35.244c-8.784 32.922-21.818 64.106-38.504 92.918l74.774 124.622-90.51 90.51-124.622-74.774c-28.812 16.686-59.996 29.72-92.918 38.504l-35.244 140.976h-128l-35.244-140.976c-32.922-8.784-64.106-21.818-92.918-38.504l-124.622 74.774-90.51-90.51 74.774-124.622c-16.686-28.812-29.72-59.996-38.504-92.918l-140.976-35.244v-128l140.976-35.244c8.784-32.922 21.818-64.106 38.504-92.918l-74.774-124.622 90.51-90.51 124.622 74.774c28.812-16.686 59.996-29.72 92.918-38.504l35.244-140.976h128l35.244 140.976c32.922 8.784 64.106 21.818 92.918 38.504l124.622-74.774 90.51 90.51-74.774 124.622c16.686 28.812 29.72 59.996 38.504 92.918l140.976 35.244zM704 448c0-106.038-85.962-192-192-192s-192 85.962-192 192 85.962 192 192 192 192-85.962 192-192z" />
+<glyph unicode="&#xe914;" glyph-name="icon-hourglass" d="M1024 960h-1024c0-282.8 229.2-512 512-512s512 229.2 512 512zM512 576c-102.6 0-199 40-271.6 112.4-41.2 41.2-72 90.2-90.8 143.6h724.6c-18.8-53.4-49.6-102.4-90.8-143.6-72.4-72.4-168.8-112.4-271.4-112.4zM512 448c-282.8 0-512-229.2-512-512h1024c0 282.8-229.2 512-512 512z" />
+<glyph unicode="&#xe915;" glyph-name="icon-info" d="M512 960c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512zM512 832c70.6 0 128-57.4 128-128s-57.4-128-128-128c-70.6 0-128 57.4-128 128s57.4 128 128 128zM704 128h-384v128h64v256h256v-256h64v-128z" />
+<glyph unicode="&#xe916;" glyph-name="icon-link" d="M1024 448l-512 512v-307.2l-512-204.8v-256h512v-256z" />
+<glyph unicode="&#xe917;" glyph-name="icon-lock" horiz-adv-x="768" d="M702 576h-62v128c0 141.385-114.615 256-256 256s-256-114.615-256-256v0-128h-64c-35.301-0.113-63.887-28.699-64-63.989v-512.011c0.113-35.301 28.699-63.887 63.989-64h638.011c35.301 0.113 63.887 28.699 64 63.989v512.011c-0.113 35.301-28.699 63.887-63.989 64h-0.011zM256 576v128c0 70.692 57.308 128 128 128s128-57.308 128-128v0-128z" />
+<glyph unicode="&#xe918;" glyph-name="icon-minus" d="M960 320c35.2 0 64 28.8 64 64v128c0 35.2-28.8 64-64 64h-896c-35.2 0-64-28.8-64-64v-128c0-35.2 28.8-64 64-64h896z" />
+<glyph unicode="&#xe919;" glyph-name="icon-people" d="M704 640h64c70.4 0 128 57.6 128 128v64c0 70.4-57.6 128-128 128h-64c-70.4 0-128-57.6-128-128v-64c0-70.4 57.6-128 128-128zM256 640h64c70.4 0 128 57.6 128 128v64c0 70.4-57.6 128-128 128h-64c-70.4 0-128-57.6-128-128v-64c0-70.4 57.6-128 128-128zM832 576h-192c-34.908 0-67.716-9.448-96-25.904 57.278-33.324 96-95.404 96-166.096v-448h384v448c0 105.6-86.4 192-192 192zM384 576h-192c-105.6 0-192-86.4-192-192v-448h576v448c0 105.6-86.4 192-192 192z" />
+<glyph unicode="&#xe91a;" glyph-name="icon-person" d="M768 704c0-105.6-86.4-192-192-192h-128c-105.6 0-192 86.4-192 192v64c0 105.6 86.4 192 192 192h128c105.6 0 192-86.4 192-192v-64zM64-64v192c0 140.8 115.2 256 256 256h384c140.8 0 256-115.2 256-256v-192z" />
+<glyph unicode="&#xe91b;" glyph-name="icon-plus" d="M960 576h-330v320c0 35.2-28.8 64-64 64h-108c-35.2 0-64-28.8-64-64v-320h-330c-35.2 0-64-28.8-64-64v-128c0-35.2 28.8-64 64-64h330v-320c0-35.2 28.8-64 64-64h108c35.2 0 64 28.8 64 64v320h330c35.2 0 64 28.8 64 64v128c0 35.2-28.8 64-64 64z" />
+<glyph unicode="&#xe91c;" glyph-name="icon-plus-in-rect" d="M830 960h-636c-106.6 0-194-87.2-194-194v-636c0-106.8 87.4-194 194-194h636c106.6 0 194 87.2 194 194v636c0 106.8-87.4 194-194 194zM896 352c0-17.673-14.327-32-32-32v0h-224v-224c0-17.673-14.327-32-32-32v0h-192c-17.673 0-32 14.327-32 32v0 224h-224c-17.673 0-32 14.327-32 32v0 192c0 17.673 14.327 32 32 32v0h224v224c0 17.673 14.327 32 32 32v0h192c17.673 0 32-14.327 32-32v0-224h224c17.673 0 32-14.327 32-32v0z" />
+<glyph unicode="&#xe91d;" glyph-name="icon-trash" d="M832 832h-192.36v64c0 35.2-28.8 64-64 64h-128c-35.2 0-64-28.8-64-64v-64h-191.64c-105.6 0-192-72-192-160s0-160 0-160h64v-384c0-105.6 86.4-192 192-192h512c105.6 0 192 86.4 192 192v384h64c0 0 0 72 0 160s-86.4 160-192 160zM320 128h-128v384h128v-384zM576 128h-128v384h128v-384zM832 128h-128v384h128v-384z" />
+<glyph unicode="&#xe91e;" glyph-name="icon-x-heavy" d="M704 448l301.332-301.332c24.89-24.89 24.89-65.62 0-90.51l-101.49-101.49c-24.89-24.89-65.62-24.89-90.51 0l-301.332 301.332c0 0-301.332-301.332-301.332-301.332-24.89-24.89-65.62-24.89-90.51 0l-101.49 101.49c-24.89 24.89-24.89 65.62 0 90.51l301.332 301.332c0 0-301.332 301.332-301.332 301.332-24.89 24.89-24.89 65.62 0 90.51l101.49 101.49c24.89 24.89 65.62 24.89 90.51 0l301.332-301.332c0 0 301.332 301.332 301.332 301.332 24.89 24.89 65.62 24.89 90.51 0l101.49-101.49c24.89-24.89 24.89-65.62 0-90.51 0 0-301.332-301.332-301.332-301.332z" />
+<glyph unicode="&#xe91f;" glyph-name="icon-brackets" d="M832 960h-192v-192h191.66l0.34-0.34v-639.32l-0.34-0.34h-191.66v-192h192c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM384 128h-191.66l-0.34 0.34v639.32l0.34 0.34h191.66v192h-192c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h192v192z" />
+<glyph unicode="&#xe920;" glyph-name="icon-crosshair" d="M574 962h-128v-320h128v320zM1022 514h-320v-128h320v128zM574 258h-128v-320h128v320zM318 514h-320v-128h320v128z" />
+<glyph unicode="&#xe921;" glyph-name="icon-grippy" d="M365.4 777.2c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM365.4 557.8c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM365.4 338.2c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM365.4 118.8c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM584.8 886.8c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM584.8 667.4c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM584.8 448c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM584.8 228.6c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM584.8 9.2c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM804.2 777.2c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM804.2 557.8c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM804.2 338.2c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2zM804.2 118.8c0-40.427-32.773-73.2-73.2-73.2s-73.2 32.773-73.2 73.2c0 40.427 32.773 73.2 73.2 73.2s73.2-32.773 73.2-73.2z" />
+<glyph unicode="&#xe922;" glyph-name="icon-grid" d="M0 384v-256c0-105.6 86.4-192 192-192h256v448h-448zM448 960h-256c-105.6 0-192-86.4-192-192v-256h448v448zM832 960h-256v-448h448v256c0 105.6-86.4 192-192 192zM576-64h256c105.6 0 192 86.4 192 192v256h-448v-448z" />
+<glyph unicode="&#xe923;" glyph-name="icon-grippy-ew" d="M704 960h128v-1024h-128v1024zM448 960h128v-1024h-128v1024zM192 960h128v-1024h-128v1024z" />
+<glyph unicode="&#xe924;" glyph-name="icon-columns" d="M0 960h256v-1024h-256v1024zM384 960h256v-1024h-256v1024zM768 960h256v-1024h-256v1024z" />
+<glyph unicode="&#xe925;" glyph-name="icon-rows" d="M0 960h1024v-256h-1024v256zM0 576h1024v-256h-1024v256zM0 192h1024v-256h-1024v256z" />
+<glyph unicode="&#xe926;" glyph-name="icon-filter" d="M896 960h-768c-70.601-0.227-127.773-57.399-128-127.978v-768.022c0.227-70.601 57.399-127.773 127.978-128h256.022v512l-192 192h640l-192-192v-512h256c70.601 0.227 127.773 57.399 128 127.978v768.022c-0.227 70.601-57.399 127.773-127.978 128h-0.022z" />
+<glyph unicode="&#xe927;" glyph-name="icon-filter-outline" d="M896 960h-768c-70.601-0.227-127.773-57.399-128-127.978v-768.022c0.227-70.601 57.399-127.773 127.978-128h768.022c70.601 0.227 127.773 57.399 128 127.978v768.022c-0.227 70.601-57.399 127.773-127.978 128h-0.022zM896 64.2h-256v383.8l192 192h-640l192-192v-384h-256v767.8h768z" />
+<glyph unicode="&#xe928;" glyph-name="icon-suitcase" d="M768 832c-0.080 70.66-57.34 127.92-127.993 128h-256.007c-70.66-0.080-127.92-57.34-128-127.993v-128.007h-64v-768h640v768h-64zM384 831.88l0.12 0.12 255.88-0.12v-127.88h-256zM0 640v-640c0.102-35.305 28.695-63.898 63.99-64h64.010v768h-64c-35.305-0.102-63.898-28.695-64-63.99v-0.010zM960 704h-64v-768h64c35.305 0.102 63.898 28.695 64 63.99v640.010c-0.102 35.305-28.695 63.898-63.99 64h-0.010z" />
+<glyph unicode="&#xe929;" glyph-name="icon-cursor-locked" horiz-adv-x="768" d="M704 640h-64v64c0 141.385-114.615 256-256 256s-256-114.615-256-256v0-64h-64c-35.301-0.113-63.887-28.699-64-63.989v-576.011c0.113-35.301 28.699-63.887 63.989-64h640.011c35.301 0.113 63.887 28.699 64 63.989v576.011c-0.113 35.301-28.699 63.887-63.989 64h-0.011zM256 704c0 70.692 57.308 128 128 128s128-57.308 128-128v0-64h-256zM533.4 64l-128 128-43-85-170.4 383.6 383.6-170.2-85-43 128-128z" />
+<glyph unicode="&#xe92a;" glyph-name="icon-flag" d="M192 320h832l-192 320 192 320h-896c-70.606-0.215-127.785-57.394-128-127.979v-896.021h192z" />
+<glyph unicode="&#xe92b;" glyph-name="icon-eye-disabled" d="M209.46 351.32q-7.46 9.86-14.26 20.28c-14.737 21.984-27.741 47.184-37.759 73.847l-0.841 2.553c11.078 29.259 24.068 54.443 39.51 77.869l-0.91-1.469c23.221 34.963 50.705 64.8 82.207 89.793l0.793 0.607c57.663 45.719 130.179 75.053 209.311 79.947l1.069 0.053 114.48 140.88c-27.366 5.017-58.869 7.898-91.041 7.92h-0.019c-245.8 0-452.2-168-510.8-395.6 21.856-82.93 60.906-154.847 113.325-214.773l-0.525 0.613zM814.76 544.92q7.52-10 14.44-20.52c14.737-21.984 27.741-47.184 37.759-73.847l0.841-2.553c-10.859-29.216-23.863-54.416-39.447-77.748l0.847 1.348c-23.221-34.963-50.705-64.8-82.207-89.793l-0.793-0.607c-57.762-45.834-130.437-75.216-209.743-80.049l-1.057-0.051-114.46-140.86c27.346-4.988 58.817-7.84 90.955-7.84 0.037 0 0.074 0 0.111 0h-0.005c245.8 0 452.2 168 510.8 395.6-21.856 82.93-60.906 154.847-113.325 214.773l0.525-0.613zM832 960l-832-1024h192l832 1024h-192z" />
+<glyph unicode="&#xe92c;" glyph-name="icon-notebook-page" d="M830 898h-830l-4-702c0-106.6 87.4-194 194-194h640c106.6 0 194 87.4 194 194v508c0 106.8-87.4 194-194 194zM832 514l-384-384-192 192v256l192-192 384 384v-256z" />
+<glyph unicode="&#xe92d;" glyph-name="icon-unlocked" d="M768 960c-141.339-0.114-255.886-114.661-256-255.989v-128.011h-448c-35.301-0.113-63.887-28.699-64-63.989v-512.011c0.113-35.301 28.699-63.887 63.989-64h638.011c35.301 0.113 63.887 28.699 64 63.989v512.011c-0.113 35.301-28.699 63.887-63.989 64h-62.011v128c0 70.692 57.308 128 128 128s128-57.308 128-128v0-128h128v128c-0.114 141.339-114.661 255.886-255.989 256h-0.011z" />
+<glyph unicode="&#xe92e;" glyph-name="icon-circle" d="M1024 448c0-282.77-229.23-512-512-512s-512 229.23-512 512c0 282.77 229.23 512 512 512s512-229.23 512-512z" />
+<glyph unicode="&#xe92f;" glyph-name="icon-draft" d="M876.34 324.42l-49.9-49.88-19.26-19.5-26-8.7-423.040-144.2 144.2 423.28 8.84 25.78 150 149.88-85.6 149.78c-34.92 61.12-92 61.12-127 0l-422.78-739.72c-34.94-61.14-5.92-111.14 64.48-111.14h843.44c70.4 0 99.42 50 64.48 111.14zM973.18 717.16c-19.32 19.3-40.66 34.62-60.16 43.16-34.42 15.12-52.38 4.54-60.1-3.16l-258.12-258.12-82.8-243.040 243 82.8 3.36 3.4 254.76 254.76c4.94 4.94 10.88 13.88 10.88 28.3 0 25.34-19.5 60.56-50.82 91.9zM631 340.18l-34.88 34.86 34.64 101.6 9.24 3.36h32v-64h64v-32l-3.42-9.26z" />
+<glyph unicode="&#xe930;" glyph-name="icon-circle-slash" d="M512 960c-282.78 0-512-229.22-512-512s229.22-512 512-512 512 229.22 512 512-229.22 512-512 512zM263.1 696.9c66.48 66.48 154.88 103.1 248.9 103.1 66.74 0 130.64-18.48 185.9-52.96l-484.94-484.94c-34.5 55.24-52.96 119.16-52.96 185.9 0 94.020 36.62 182.42 103.1 248.9zM760.9 199.1c-66.48-66.48-154.88-103.1-248.9-103.1-66.74 0-130.64 18.48-185.9 52.96l484.94 484.94c34.5-55.24 52.96-119.16 52.96-185.9 0-94.020-36.62-182.42-103.1-248.9z" />
+<glyph unicode="&#xe931;" glyph-name="icon-question-mark" horiz-adv-x="697" d="M136.86 907.74c54.080 34.82 120.58 52.26 199.44 52.26 103.6 0 189.7-24.76 258.24-74.28s102.82-122.88 102.82-220.060c0-59.6-14.86-109.8-44.58-150.6-17.38-24.76-50.76-56.4-100.14-94.9l-48.68-37.82c-26.54-20.64-44.14-44.7-52.82-72.2-5.5-17.44-8.46-44.48-8.92-81.14h-186.4c2.74 77.48 10.060 131 21.94 160.58s42.5 63.62 91.88 102.12l50.060 39.2c16.46 12.38 29.72 25.9 39.78 40.58 18.28 25.2 27.42 52.96 27.42 83.22 0 34.84-10.18 66.6-30.52 95.24-20.36 28.64-57.52 42.98-111.48 42.98s-90.68-17.66-112.88-52.96c-22.18-35.32-33.26-71.98-33.26-110.040h-198.76c5.5 130.64 51.12 223.24 136.86 277.82zM251.020 134.76h205.62v-198.74h-205.62v198.74z" />
+<glyph unicode="&#xe932;" glyph-name="icon-status-poll-check" d="M512 960c-282.76 0-512-214.9-512-480 0-92.26 27.8-178.44 75.92-251.6l-75.92-292.4 313.5 101.42c61.040-24.1 128.12-37.42 198.5-37.42 282.76 0 512 214.9 512 480s-229.24 480-512 480zM768 512l-320-320-192 192v192l192-192 320 320v-192z" />
+<glyph unicode="&#xe933;" glyph-name="icon-status-poll-caution" d="M512 960c-282.76 0-512-214.9-512-480 0-92.26 27.8-178.44 75.92-251.6l-75.92-292.4 313.5 101.42c61.040-24.1 128.12-37.42 198.5-37.42 282.76 0 512 214.9 512 480s-229.24 480-512 480zM781.36 256h-538.72c-44.96 0-63.5 31.94-41.2 70.98l270 472.48c22.3 39.040 58.82 39.040 81.12 0l269.98-472.48c22.3-39.040 3.78-70.98-41.2-70.98zM457.14 542.14l24.2-122.64h61.32l24.2 122.64v163.5h-109.72v-163.5zM471.12 378.64h81.76v-81.76h-81.76v81.76z" />
+<glyph unicode="&#xe934;" glyph-name="icon-status-poll-circle-slash" d="M391.18 291.3c35.72-22.98 77.32-35.3 120.82-35.3 59.84 0 116.080 23.3 158.4 65.6 42.3 42.3 65.6 98.56 65.6 158.4 0 43.5-12.32 85.080-35.3 120.82l-309.52-309.52zM512 704c-59.84 0-116.080-23.3-158.4-65.6-42.3-42.3-65.6-98.56-65.6-158.4 0-43.5 12.32-85.080 35.3-120.82l309.52 309.52c-35.72 22.98-77.32 35.3-120.82 35.3zM512 960c-282.76 0-512-214.9-512-480 0-92.26 27.8-178.44 75.92-251.6l-75.92-292.4 313.5 101.42c61.040-24.1 128.12-37.42 198.5-37.42 282.76 0 512 214.9 512 480s-229.24 480-512 480zM512 160c-176.74 0-320 143.26-320 320s143.26 320 320 320 320-143.26 320-320-143.26-320-320-320z" />
+<glyph unicode="&#xe935;" glyph-name="icon-status-poll-question-mark" d="M512 960c-282.76 0-512-214.9-512-480 0-92.26 27.8-178.44 75.92-251.6l-75.92-292.4 313.5 101.42c61.040-24.1 128.12-37.42 198.5-37.42 282.76 0 512 214.9 512 480s-229.24 480-512 480zM579.020 128h-141.36v136.64h141.36v-136.64zM713.84 526.1c-11.94-17.020-34.9-38.78-68.84-65.24l-33.48-26c-18.24-14.18-30.34-30.74-36.32-49.64-3.78-11.98-5.82-30.58-6.14-55.8h-128.12c1.88 53.26 6.92 90.060 15.080 110.4 8.18 20.34 29.22 43.74 63.16 70.22l34.42 26.94c11.3 8.52 20.42 17.8 27.34 27.9 12.56 17.34 18.86 36.4 18.86 57.2 0 23.94-7 45.78-20.98 65.48-14 19.7-39.54 29.54-76.64 29.54s-62.34-12.14-77.6-36.4c-15.24-24.28-22.88-49.48-22.88-75.64h-136.64c3.78 89.84 35.14 153.5 94.080 191.020 37.18 23.94 82.9 35.94 137.12 35.94 71.22 0 130.42-17.020 177.54-51.060s70.68-84.48 70.68-151.3c0-40.98-10.22-75.5-30.66-103.54z" />
+<glyph unicode="&#xe936;" glyph-name="icon-status-poll-edit" d="M1000.080 625.36l-336.6-336.76-20.52-6.88-450.96-153.72 160.68 471.52 332.34 332.34c-54.040 18.2-112.28 28.14-173.020 28.14-282.76 0-512-214.9-512-480 0-92.26 27.8-178.44 75.92-251.6l-75.92-292.4 313.5 101.42c61.040-24.1 128.12-37.42 198.5-37.42 282.76 0 512 214.9 512 480 0 50.68-8.4 99.5-23.92 145.36zM408.42 564.76l-2.16-6.3-111.7-327.9 334.12 113.86 4.62 4.68 350.28 350.28c6.8 6.78 14.96 19.1 14.96 38.9 0 34.86-26.82 83.28-69.88 126.38-26.54 26.54-55.9 47.6-82.7 59.34-47.34 20.8-72.020 6.24-82.64-4.36l-354.9-354.88zM470.56 538.58h44v-88h88v-44l-4.7-12.72-139.68-47.54-47.94 47.94 47.6 139.72 12.72 4.6z" />
+<glyph unicode="&#xea00;" glyph-name="icon-arrows-right-left" d="M1024 448l-448-512v1024zM448 960l-448-512 448-512z" />
+<glyph unicode="&#xea01;" glyph-name="icon-arrows-up-down" d="M512 960l512-448h-1024zM0 384l512-448 512 448z" />
+<glyph unicode="&#xea02;" glyph-name="icon-bullet" d="M832 208c0-44-36-80-80-80h-480c-44 0-80 36-80 80v480c0 44 36 80 80 80h480c44 0 80-36 80-80v-480z" />
+<glyph unicode="&#xea03;" glyph-name="icon-calendar" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM640 512h-256v192h256v-192zM384 448h256v-192h-256v192zM320 256h-256v192h256v-192zM320 704v-192h-256v192h256zM128 0c-17 0-33 6.6-45.2 18.8s-18.8 28.2-18.8 45.2v128h256v-192h-192zM384 0v192h256v-192h-256zM960 64c0-17-6.6-33-18.8-45.2s-28.2-18.8-45.2-18.8h-192v192h256v-128zM960 256h-256v192h256v-192zM960 512h-256v192h256v-192z" />
+<glyph unicode="&#xea04;" glyph-name="icon-chain-links" d="M958.4 894.4c-43.8 43.8-101 65.6-158.4 65.6s-114.6-21.8-158.4-65.6l-128-128c-74-74-85.4-187-34-273l-12.8-12.8c-35.4 20.8-75 31.4-114.8 31.4-57.4 0-114.6-21.8-158.4-65.6l-128-128c-87.4-87.4-87.4-229.4 0-316.8 43.8-43.8 101-65.6 158.4-65.6s114.6 21.8 158.4 65.6l128 128c74 74 85.4 187 34 273l12.8 12.8c35.2-21 75-31.6 114.6-31.6 57.4 0 114.6 21.8 158.4 65.6l128 128c87.6 87.6 87.6 229.6 0.2 317zM419.8 220.2l-128-128c-18-18.2-42.2-28.2-67.8-28.2s-49.8 10-67.8 28.2c-37.4 37.4-37.4 98.4 0 135.8l128 128c18.2 18.2 42.2 28.2 67.8 28.2 5.6 0 11.2-0.6 16.8-1.4l-55.6-55.6c-10.4-10.4-16.2-24.2-16.2-38.8s5.8-28.6 16.2-38.8c10.4-10.4 24.2-16.2 38.8-16.2s28.6 5.8 38.8 16.2l55.6 55.6c5.4-30.4-3.6-62.2-26.6-85zM867.8 668.2l-128-128c-18-18.2-42.2-28.2-67.8-28.2-5.6 0-11.2 0.6-16.8 1.4l55.6 55.6c10.4 10.4 16.2 24.2 16.2 38.8s-5.8 28.6-16.2 38.8c-10.4 10.4-24.2 16.2-38.8 16.2s-28.6-5.8-38.8-16.2l-55.6-55.6c-5.2 29.8 3.6 61.6 26.6 84.6l128 128c18 18.4 42.2 28.4 67.8 28.4s49.8-10 67.8-28.2c37.6-37.4 37.6-98.2 0-135.6z" />
+<glyph unicode="&#xea05;" glyph-name="icon-download" d="M832 384v-255.66l-0.34-0.34-639.66 0.34v255.66h-192v-256c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v256h-192zM512 320l448 448h-256v192h-384v-192h-256l448-448z" />
+<glyph unicode="&#xea06;" glyph-name="icon-duplicate" d="M640 704v128c0 70.4-57.6 128-128 128h-384c-70.4 0-128-57.6-128-128v-384c0-70.4 57.6-128 128-128h128v139.6c0 134.8 109.6 244.4 244.4 244.4h139.6zM896 576h-384c-70.4 0-128-57.6-128-128v-384c0-70.4 57.6-128 128-128h384c70.4 0 128 57.6 128 128v384c0 70.4-57.6 128-128 128z" />
+<glyph unicode="&#xea07;" glyph-name="icon-folder-new" d="M896 768h-320c-16.4 16.4-96.8 96.8-109.2 109.2l-37.4 37.4c-25 25-74.2 45.4-109.4 45.4h-256c-35.2 0-64-28.8-64-64v-384c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v128c0 70.4-57.6 128-128 128zM896 512h-768c-70.4 0-128-57.6-128-128v-320c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v320c0 70.4-57.6 128-128 128zM704 160h-128v-128h-128v128h-128v128h128v128h128v-128h128v-128z" />
+<glyph unicode="&#xea08;" glyph-name="icon-fullscreen-collapse" d="M191.656 128c0.118-0.1 0.244-0.224 0.344-0.344v-191.656h192v192c0 105.6-86.4 192-192 192h-192v-192h191.656zM192 768.344c-0.1-0.118-0.224-0.244-0.344-0.344h-191.656v-192h192c105.6 0 192 86.4 192 192v192h-192v-191.656zM832 576h192v192h-191.656c-0.118 0.1-0.244 0.226-0.344 0.344v191.656h-192v-192c0-105.6 86.4-192 192-192zM832 127.656c0.1 0.118 0.224 0.244 0.344 0.344h191.656v192h-192c-105.6 0-192-86.4-192-192v-192h192v191.656z" />
+<glyph unicode="&#xea09;" glyph-name="icon-fullscreen-expand" d="M192.344 128c-0.118 0.1-0.244 0.224-0.344 0.344v191.656h-192v-192c0-105.6 86.4-192 192-192h192v192h-191.656zM192 767.656c0.1 0.118 0.224 0.244 0.344 0.344h191.656v192h-192c-105.6 0-192-86.4-192-192v-192h192v191.656zM832 960h-192v-192h191.656c0.118-0.1 0.244-0.226 0.344-0.344v-191.656h192v192c0 105.6-86.4 192-192 192zM832 128.344c-0.1-0.118-0.224-0.244-0.344-0.344h-191.656v-192h192c105.6 0 192 86.4 192 192v192h-192v-191.656z" />
+<glyph unicode="&#xea0a;" glyph-name="icon-layers" d="M1024 576l-512 384-512-384 512-384zM512 64l-426.666 320-85.334-64 512-384 512 384-85.334 64z" />
+<glyph unicode="&#xea0b;" glyph-name="icon-line-horz" d="M64 384c-35.346 0-64 28.654-64 64s28.654 64 64 64h896c35.346 0 64-28.654 64-64s-28.654-64-64-64h-896z" />
+<glyph unicode="&#xea0c;" glyph-name="icon-magnify" d="M1024 64l-256.8 256.8c42.4 66.6 65 144 64.8 223.2 0 229.8-186.2 416-416 416s-416-186.2-416-416 186.2-416 416-416c79-0.2 156.4 22.4 223.2 64.8l256.8-256.8 128 128zM212.4 340.4c-112.4 112.4-112.4 294.8 0 407.2s294.8 112.4 407.2 0 112.4-294.8 0-407.2c-54-54-127.2-84.4-203.6-84.4-76.4-0.2-149.8 30.2-203.6 84.4z" />
+<glyph unicode="&#xea0d;" glyph-name="icon-magnify-in" d="M1024 64l-256.86 256.86c40.681 62.963 64.861 139.898 64.861 222.481 0 0.232 0 0.464-0.001 0.696v-0.036c0 229.76-186.24 416-416 416s-416-186.24-416-416 186.24-416 416-416c0.196 0 0.427-0.001 0.659-0.001 82.583 0 159.518 24.18 224.112 65.846l-1.631-0.985 256.86-256.86zM212.36 340.36c-52.114 52.117-84.346 124.114-84.346 203.64 0 159.058 128.942 288 288 288s288-128.942 288-288c0-159.058-128.942-288-288-288-0.005 0-0.010 0-0.014 0h0.001c-0.242-0.001-0.529-0.001-0.815-0.001-79.271 0-151.010 32.251-202.811 84.348l-0.013 0.014zM224 608h384v-128h-384v128zM352 736h128v-384h-128v384z" />
+<glyph unicode="&#xea0e;" glyph-name="icon-magnify-out-v2" d="M767.2 320.8c42.4 66.6 65 144 64.8 223.2 0 229.8-186.2 416-416 416s-416-186.2-416-416 186.2-416 416-416c79-0.2 156.4 22.4 223.2 64.8l256.8-256.8 128 128-256.8 256.8zM619.6 340.4c-54-54-127.2-84.4-203.6-84.4-76.4-0.2-149.8 30.2-203.6 84.4-112.4 112.4-112.4 294.8 0 407.2s294.8 112.4 407.2 0c112.4-112.4 112.4-294.8 0-407.2zM224 608h384v-128h-384v128z" />
+<glyph unicode="&#xea0f;" glyph-name="icon-menu" d="M0 832h1024v-128h-1024v128zM0 512h1024v-128h-1024v128zM0 192h1024v-128h-1024v128z" />
+<glyph unicode="&#xea10;" glyph-name="icon-move" d="M293.4 448l218.6 218.6 256-256v421.4c0 70.4-57.6 128-128 128h-512c-70.4 0-128-57.6-128-128v-512c0-70.4 57.6-128 128-128h421.4l-256 256zM1024 512h-128v-320l-384 384-128-128 384-384h-320v-128h576z" />
+<glyph unicode="&#xea11;" glyph-name="icon-new-window" d="M448 960v-128h320l-384-384 128-128 384 384v-320h128v576zM576 285.726v-157.382c-0.1-0.118-0.226-0.244-0.344-0.344h-383.312c-0.118 0.1-0.244 0.226-0.344 0.344v383.312c0.1 0.118 0.226 0.244 0.344 0.344h157.382l192 192h-349.726c-105.6 0-192-86.4-192-192v-384c0-105.6 86.4-192 192-192h384c105.6 0 192 86.4 192 192v349.726l-192-192z" />
+<glyph unicode="&#xea12;" glyph-name="icon-paint-bucket-v2" d="M544 736v-224c0-88.4-71.6-160-160-160s-160 71.6-160 160v97.2l-197.4-196.4c-50-50-12.4-215.2 112.4-340s290-162.4 340-112.4l417 423.6-352 352zM896-64c70.6 0 128 57.4 128 128 0 108.6-128 192-128 192s-128-83.4-128-192c0-70.6 57.4-128 128-128zM384 448c-35.4 0-64 28.6-64 64v384c0 35.4 28.6 64 64 64s64-28.6 64-64v-384c0-35.4-28.6-64-64-64z" />
+<glyph unicode="&#xea13;" glyph-name="icon-pencil" d="M922.344 858.32c-38.612 38.596-81.306 69.232-120.304 86.324-68.848 30.25-104.77 9.078-120.194-6.344l-516.228-516.216-3.136-9.152-162.482-476.932 485.998 165.612 6.73 6.806 509.502 509.506c9.882 9.866 21.768 27.77 21.768 56.578 0.002 50.71-38.996 121.148-101.654 183.818zM237.982 104.34l-69.73 69.728 69.25 203.228 18.498 6.704h64v-128h128v-64l-6.846-18.506-203.172-69.154z" />
+<glyph unicode="&#xea14;" glyph-name="icon-pencil-edit-in-place" d="M922.4 858.4c-38.6 38.6-81.4 69.2-120.4 86.2-68.8 30.2-104.8 9-120.2-6.4l-516.2-516.2-3.2-9.2-162.4-476.8 486 165.6 516.2 516.4c9.8 9.8 21.8 27.8 21.8 56.6 0 50.6-39 121-101.6 183.8zM238 104.4l-69.8 69.6 69.2 203.2 18.4 6.8h64v-128h128v-64l-6.8-18.6-203-69zM0 960v-512l128 128v256h256l128 128zM1024-64v512l-128-128v-256h-256l-128-128z" />
+<glyph unicode="&#xea15;" glyph-name="icon-play" d="M1024 448l-1024-512v1024z" />
+<glyph unicode="&#xea16;" glyph-name="icon-pause" d="M126 962h256v-1024h-256v1024zM638 962h256v-1024h-256v1024z" />
+<glyph unicode="&#xea17;" glyph-name="icon-plot-resource" d="M255.8 256c0.2 0 0.2 0 0 0l0.2 128c0 70.6 57.4 128 128 128h255.8c0 0 0 0 0.2 0.2v127.8c0 70.6 57.4 128 128 128h143.6c-93.8 117-238 192-399.6 192-282.8 0-512-229.2-512-512 0-68 13.2-132.8 37.2-192h218.6zM768.2 640c-0.2 0-0.2 0 0 0l-0.2-128c0-70.6-57.4-128-128-128h-255.8c0 0 0 0-0.2-0.2v-127.8c0-70.6-57.4-128-128-128h-143.6c93.8-117 238-192 399.6-192 282.8 0 512 229.2 512 512 0 68-13.2 132.8-37.2 192h-218.6z" />
+<glyph unicode="&#xea18;" glyph-name="icon-pointer-left" d="M766-64l-256 512 256 512h-256l-256-512 256-512z" />
+<glyph unicode="&#xea19;" glyph-name="icon-pointer-right" d="M254 960l256-512-256-512h256l256 512-256 512z" />
+<glyph unicode="&#xea1a;" glyph-name="icon-refresh" d="M1024 499.2v460.8l-175.8-175.8c-85.2 69.6-190.8 107.6-302 107.6-127.6 0-247.6-49.8-338-140s-140-210.4-140-338 49.8-247.6 140-338 210.4-140 338-140 247.6 49.8 338 140c74 74 120.8 167.8 135 269.6h-138.6c-32-155.4-169.8-272.8-334.6-272.8-188.2 0-341.4 153.2-341.4 341.4s153.4 341.2 341.6 341.2c76.8 0 147.6-25.4 204.8-68.2l-187.8-187.8h460.8z" />
+<glyph unicode="&#xea1b;" glyph-name="icon-save" d="M192.2 384c-0.2 0-0.2 0 0 0l-0.2-448h640v447.8c0 0 0 0-0.2 0.2h-639.6zM978.8 749.2l-165.4 165.4c-25 25-74.2 45.4-109.4 45.4h-576c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128v448c0 35.2 28.8 64 64 64h640c35.2 0 64-28.8 64-64v-448c70.4 0 128 57.6 128 128v576c0 35.2-20.4 84.4-45.2 109.2zM704 704c0-35.2-28.8-64-64-64h-448c-35.2 0-64 28.8-64 64v192h320v-192h128v192h128v-192z" />
+<glyph unicode="&#xea1c;" glyph-name="icon-save-as" d="M978.8 621.2l-64 64c24.8-24.8 45.2-74 45.2-109.2v-448c0-70.4-57.6-128-128-128h-640c-18.8 0-36.6 4.2-52.6 11.4 20.2-44.4 65-75.4 116.6-75.4h640c70.4 0 128 57.6 128 128v448c0 35.2-20.4 84.4-45.2 109.2zM704 64v319.8c0 0 0 0-0.2 0.2h-511.6l-0.2-320h512zM192 448h512c35.2 0 64-28.8 64-64v-320c70.4 0 128 57.6 128 128v448c0 35.2-20.4 84.4-45.2 109.2l-165.4 165.4c-25 25-74.2 45.4-109.4 45.4h-448c-70.4 0-128-57.6-128-128v-640c0-70.4 57.6-128 128-128v320c0 35.2 28.8 64 64 64zM128 896h192v-192h128v192h128v-192c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v192z" />
+<glyph unicode="&#xea1d;" glyph-name="icon-sine" d="M1024 448c-1.8 7.2-3.4 14.4-5.2 21.8-20.2 86.2-53.4 209.4-98.4 307.2-22.4 49-45.4 86.6-70.2 115.2-48.6 56-98.4 67.8-131.8 67.8-33.2 0-83.2-11.8-131.8-67.8-24.6-28.6-47.6-66.2-70-115.2-44.8-97.8-78.2-221-98.4-307.2-21.8-93-46.6-175.4-72-238.4-16.4-40.6-30.4-66.4-40.8-82.8-10.4 16.2-24.4 42.2-40.8 82.8-23.2 58-46.2 132.4-66.6 216.6h-198c1.8-7.2 3.4-14.4 5.2-21.8 20.2-86.2 53.4-209.4 98.4-307.2 22.4-49 45.4-86.6 70.2-115.2 48.6-56 98.6-67.8 131.8-67.8s83.2 11.8 131.8 67.8c24.8 28.6 47.6 66.2 70.2 115.2 44.8 97.8 78.2 221 98.4 307.2 21.8 93 46.6 175.4 72 238.4 16.4 40.6 30.4 66.4 40.8 82.8 10.4-16.2 24.4-42.2 40.8-82.8 23.4-57.8 46.4-132.4 66.8-216.4h197.6z" />
+<glyph unicode="&#xea1e;" glyph-name="icon-font" d="M800-64h224l-384 1024h-256l-384-1024h224l84 224h408zM380 352l132 352 132-352z" />
+<glyph unicode="&#xea1f;" glyph-name="icon-thumbs-strip" d="M448 578c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-320zM1024 578c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-320zM448 2c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-320zM1024 2c0-35.2-28.8-64-64-64h-320c-35.2 0-64 28.8-64 64v320c0 35.2 28.8 64 64 64h320c35.2 0 64-28.8 64-64v-320z" />
+<glyph unicode="&#xea20;" glyph-name="icon-two-parts-both" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM128 832h320v-768h-320v768zM896 64h-320v768h320v-768z" />
+<glyph unicode="&#xea21;" glyph-name="icon-two-parts-one-only" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM896 64h-320v768h320v-768z" />
+<glyph unicode="&#xea22;" glyph-name="icon-resync" d="M795.2 795.2c-79.8 65.2-178.8 100.8-283.2 100.8-119.6 0-232.2-46.6-316.8-131.2-69.4-69.4-113.2-157.4-126.6-252.8h130c29.6 145.8 158.8 256 313.4 256 72 0 138.4-23.8 192-64l-176-176h432v432l-164.8-164.8zM512 128c-72 0-138.4 23.8-192 64l176 176h-432v-432l164.8 164.8c79.8-65.2 178.8-100.8 283.2-100.8 119.6 0 232.2 46.6 316.8 131.2 69.4 69.4 113.2 157.4 126.6 252.8h-130c-29.6-145.8-158.8-256-313.4-256z" />
+<glyph unicode="&#xea23;" glyph-name="icon-reset" d="M460.8 499.2l-187.8 187.8c57.2 42.8 128 68.2 204.8 68.2 188.2 0 341.6-153.2 341.6-341.4s-153.2-341.2-341.4-341.2c-165 0-302.8 117.6-334.6 273h-138.4c14.2-101.8 61-195.6 135-269.6 90.2-90.2 210.4-140 338-140s247.6 49.8 338 140 140 210.4 140 338-49.8 247.6-140 338-210.4 140-338 140c-111.4 0-217-38-302-107.6l-176 175.6v-460.8h460.8z" />
+<glyph unicode="&#xea24;" glyph-name="icon-x-in-circle" d="M512 960c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512zM832 256l-128-128-192 192-192-192-128 128 192 192-192 192 128 128 192-192 192 192 128-128-192-192 192-192z" />
+<glyph unicode="&#xea25;" glyph-name="icon-brightness" d="M253.414 641.939l-155.172 116.384c-50.233-66.209-85.127-146.713-97.91-234.39l-0.333-2.781 191.919-27.434c8.145 56.552 29.998 106.879 62.068 149.006l-0.573-0.784zM191.98 402.283l-191.919-27.434c13.115-90.459 48.009-170.963 99.174-238.453l-0.931 1.281 155.111 116.384c-31.476 41.347-53.309 91.675-61.231 146.504l-0.204 1.719zM466.283 768.020l-27.434 191.919c-90.459-13.115-170.963-48.009-238.453-99.174l1.281 0.931 116.384-155.111c41.347 31.476 91.675 53.309 146.504 61.231l1.719 0.204zM822.323 861.758c-66.209 50.233-146.713 85.127-234.39 97.91l-2.781 0.333-27.434-191.919c56.552-8.145 106.879-29.998 149.006-62.068l-0.784 0.573zM832.020 493.717l191.919 27.434c-13.115 90.459-48.009 170.963-99.174 238.453l0.931-1.281-155.111-116.384c31.476-41.347 53.309-91.675 61.231-146.504l0.204-1.719zM201.677 34.242c66.209-50.233 146.713-85.127 234.39-97.91l2.781-0.333 27.434 191.919c-56.552 8.145-106.879 29.998-149.006 62.068l0.784-0.573zM770.586 254.061l155.131-116.343c50.233 66.209 85.127 146.713 97.91 234.39l0.333 2.781-191.919 27.434c-8.125-56.564-29.966-106.906-62.028-149.049l0.574 0.786zM557.717 127.98l27.434-191.919c90.459 13.115 170.963 48.009 238.453 99.174l-1.281-0.931-116.384 155.111c-41.347-31.476-91.675-53.309-146.504-61.231l-1.719-0.204zM770.586 448c0-142.813-115.773-258.586-258.586-258.586s-258.586 115.773-258.586 258.586c0 142.813 115.773 258.586 258.586 258.586s258.586-115.773 258.586-258.586z" />
+<glyph unicode="&#xea26;" glyph-name="icon-contrast" d="M512 960c-282.78 0-512-229.24-512-512s229.22-512 512-512 512 229.24 512 512-229.22 512-512 512zM783.52 176.48c-69.111-69.481-164.785-112.481-270.502-112.481-0.358 0-0.716 0-1.074 0.001h0.055v768c212.070-0.010 383.982-171.929 383.982-384 0-106.034-42.977-202.031-112.462-271.52v0z" />
+<glyph unicode="&#xea27;" glyph-name="icon-expand" d="M960 960c0 0 0 0 0 0h-320v-128h165.4l-210.6-210.8c-25-25-25-65.6 0-90.6 12.4-12.4 28.8-18.8 45.2-18.8s32.8 6.2 45.2 18.8l210.8 210.8v-165.4h128v384h-64zM896 154.6l-210.8 210.6c-25 25-65.6 25-90.6 0s-25-65.6 0-90.6l210.8-210.6h-165.4v-128h384v384h-128v-165.4zM218.6 832h165.4v128h-320c0 0 0 0 0 0h-64v-384h128v165.4l210.8-210.8c12.4-12.4 28.8-18.8 45.2-18.8s32.8 6.2 45.2 18.8c25 25 25 65.6 0 90.6l-210.6 210.8zM338.8 365.2l-210.8-210.6v165.4h-128v-384h384v128h-165.4l210.8 210.8c25 25 25 65.6 0 90.6-25.2 24.8-65.6 24.8-90.6-0.2z" />
+<glyph unicode="&#xea28;" glyph-name="icon-list-view" d="M0 896h1024v-128h-1024v128zM0 640h1024v-128h-1024v128zM0 384h1024v-128h-1024v128zM0 128h1024v-128h-1024v128z" />
+<glyph unicode="&#xea29;" glyph-name="icon-grid-snap-to" d="M382 130h448v448h-448v-448zM510 450h192v-192h-192v192zM-2 386h320v-64h-320v64zM894 386h128v-64h-128v64zM574 962h64v-320h-64v320zM574 66h64v-128h-64v128zM574 386h64v-64h-64v64z" />
+<glyph unicode="&#xea2a;" glyph-name="icon-grid-snap-no" d="M768 384h192v-64h-192v64zM256 384h192v-64h-192v64zM0 384h192v-64h-192v64zM640 448h-64v-64h-64v-64h64v-64h64v64h64v64h-64zM576 704h64v-192h-64v192zM576 960h64v-192h-64v192zM576 192h64v-192h-64v192z" />
+<glyph unicode="&#xea2b;" glyph-name="icon-frame-show" d="M0 896v-896h1024v896h-1024zM896 128h-768v640h768v-640zM192 704h384v-128h-384v128z" />
+<glyph unicode="&#xea2c;" glyph-name="icon-frame-hide" d="M128 770h420l104 128h-652v-802.4l128 157.4zM896 130h-420l-104-128h652v802.4l-128-157.4zM832 962l-832-1024h192l832 1024zM392 578l104 128h-304v-128z" />
+<glyph unicode="&#xea2d;" glyph-name="icon-import" d="M832 767.6v-639.4c0-0.2-0.2-0.2-0.4-0.4h-319.6v-192h320c105.6 0 192 86.4 192 192v640.2c0 105.6-86.4 192-192 192h-320v-192h319.6c0.2 0 0.4-0.2 0.4-0.4zM192 256v-192l384 384-384 384v-192h-192v-384z" />
+<glyph unicode="&#xea2e;" glyph-name="icon-export" d="M192 128.34v639.32l0.34 0.34h319.66v192h-320c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h320v192h-319.66zM1024 448l-384 384v-192h-192v-384h192v-192l384 384z" />
+<glyph unicode="&#xea2f;" glyph-name="icon-font-size" horiz-adv-x="1504" d="M1226.4 640h-176l-76.22-203.24 77-205.34 87.22 232.58 90.74-242h-174.44l49.5-132h174.44l57.76-154h154l-264 704zM384 960l-384-1024h224l84 224h408l84-224h224l-384 1024zM380 352l132 352 132-352z" />
+<glyph unicode="&#xea30;" glyph-name="icon-clear-data" d="M632 648l-120-120-120 120-80-80 120-120-120-120 80-80 120 120 120-120 80 80-120 120 120 120-80 80zM512 960c-282.76 0-512-86-512-192v-640c0-106 229.24-192 512-192s512 86 512 192v640c0 106-229.24 192-512 192zM512 128c-176.731 0-320 143.269-320 320s143.269 320 320 320c176.731 0 320-143.269 320-320v0c0-176.731-143.269-320-320-320v0z" />
+<glyph unicode="&#xea31;" glyph-name="icon-history" d="M576 896c-247.4 0-448-200.6-448-448h-128l192-192 192 192h-128c0 85.4 33.2 165.8 93.8 226.2 60.4 60.6 140.8 93.8 226.2 93.8s165.8-33.2 226.2-93.8c60.6-60.4 93.8-140.8 93.8-226.2s-33.2-165.8-93.8-226.2c-60.4-60.6-140.8-93.8-226.2-93.8s-165.8 33.2-226.2 93.8l-90.6-90.6c81-81 193-131.2 316.8-131.2 247.4 0 448 200.6 448 448s-200.6 448-448 448zM576 688c-26.6 0-48-21.4-48-48v-211.8l142-142c9.4-9.4 21.6-14 34-14s24.6 4.6 34 14c18.8 18.8 18.8 49.2 0 67.8l-114 114v172c0 26.6-21.4 48-48 48z" />
+<glyph unicode="&#xea32;" glyph-name="icon-arrow-up-to-parent" horiz-adv-x="1056" d="M643.427 134.739c-81.955 0.697-148.179 67.065-148.642 149.010v395.872l296.871-247.393v197.914l-395.828 329.857-395.828-328.62v-197.502l296.871 246.156v-396.241c0-190.905 155.239-346.556 346.144-346.968l412.321-0.825 0.412 197.914z" />
+<glyph unicode="&#xea33;" glyph-name="icon-crosshair-in-circle" d="M512 960c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512zM783.6 176.4c-54.634-54.8-125.77-93.12-205.322-106.874l-2.278-0.326v250.8h-128v-250.8c-161.302 28.062-286.738 153.497-314.468 312.5l-0.332 2.3h250.8v128h-250.8c28.062 161.302 153.497 286.738 312.5 314.468l2.3 0.332v-250.8h128v250.8c161.302-28.062 286.738-153.497 314.468-312.5l0.332-2.3h-250.8v-128h250.8c-14.080-81.83-52.4-152.966-107.191-207.591l-0.009-0.009z" />
+<glyph unicode="&#xea34;" glyph-name="icon-target" d="M512 576c70.692 0 128-57.308 128-128s-57.308-128-128-128c-70.692 0-128 57.308-128 128v0c0.114 70.647 57.353 127.886 127.989 128h0.011zM512 704c-141.385 0-256-114.615-256-256s114.615-256 256-256c141.385 0 256 114.615 256 256v0c-0.114 141.339-114.661 255.886-255.989 256h-0.011zM512 832c211.87-0.128 383.575-171.912 383.575-383.8 0-211.967-171.833-383.8-383.8-383.8s-383.8 171.833-383.8 383.8c0 105.99 42.963 201.945 112.425 271.4v0c69.21 69.437 164.944 112.401 270.713 112.401 0.312 0 0.624 0 0.936-0.001h-0.048zM512 960c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512z" />
+<glyph unicode="&#xea35;" glyph-name="icon-items-collapse" d="M45.2 301.2h229.6l-274.8-274.6 90.6-90.6 274.6 274.8v-229.6h128v448h-448v-128zM1024 869.4l-90.6 90.6-274.6-274.8v229.6h-128v-448h448v128h-229.6l274.8 274.6z" />
+<glyph unicode="&#xea36;" glyph-name="icon-items-expand" d="M448 64h-229.4l274.6 274.8-90.4 90.4-274.8-274.6v229.4h-128v-448h448v128zM530.8 557.2l90.4-90.4 274.8 274.6v-229.4h128v448h-448v-128h229.4l-274.6-274.8z" />
+<glyph unicode="&#xea37;" glyph-name="icon-3-dots" d="M256 448c0-70.692-57.308-128-128-128s-128 57.308-128 128c0 70.692 57.308 128 128 128s128-57.308 128-128zM640 448c0-70.692-57.308-128-128-128s-128 57.308-128 128c0 70.692 57.308 128 128 128s128-57.308 128-128zM1024 448c0-70.692-57.308-128-128-128s-128 57.308-128 128c0 70.692 57.308 128 128 128s128-57.308 128-128z" />
+<glyph unicode="&#xea38;" glyph-name="icon-grid-on" d="M1024 576v128h-256v256h-128v-256h-256v256h-128v-256h-256v-128h256v-256h-256v-128h256v-256h128v256h256v-256h128v256h256v128h-256v256zM640 320h-256v256h256z" />
+<glyph unicode="&#xea39;" glyph-name="icon-grid-off" d="M256 408.6l128 157.6v9.8h8l104 128h-112v256h-128v-256h-256v-128h256v-167.4zM184 320h-184v-128h80l104 128zM768 487.4l-128-157.6v-9.8h-8l-104-128h112v-256h128v256h256v128h-256v167.4zM840 576h184v128h-80l-104-128zM832 960l-832-1024h192l832 1024h-192z" />
+<glyph unicode="&#xea3a;" glyph-name="icon-camera" d="M896 704h-128l-128 256h-256l-128-256h-128c-70.601-0.227-127.773-57.399-128-127.978v-512.022c0.227-70.601 57.399-127.773 127.978-128h768.022c70.601 0.227 127.773 57.399 128 127.978v512.022c-0.227 70.601-57.399 127.773-127.978 128h-0.022zM512 96c-141.385 0-256 114.615-256 256s114.615 256 256 256c141.385 0 256-114.615 256-256v0c0-141.385-114.615-256-256-256v0z" />
+<glyph unicode="&#xea3b;" glyph-name="icon-folders-collapse" d="M896 640v-448c-0.215-70.606-57.394-127.785-127.979-128h-576.021c0.215-70.606 57.394-127.785 127.979-128h576.021c70.606 0.215 127.785 57.394 128 127.979v448.021c-0.215 70.606-57.394 127.785-127.979 128h-0.021zM832 256v448c-0.215 70.606-57.394 127.785-127.979 128h-192.021l-101.5 82.74c-24.88 24.9-74.040 45.26-109.24 45.26h-237.26c-35.305-0.102-63.898-28.695-64-63.99v-640.010c0.215-70.606 57.394-127.785 127.979-128h576.021c70.606 0.215 127.785 57.394 128 127.979v0.021zM128 316v516l256-260z" />
+<glyph unicode="&#xeb00;" glyph-name="icon-activity" d="M576 896h-256l320-320h-290.256c-44.264 76.516-126.99 128-221.744 128h-128v-512h128c94.754 0 177.48 51.484 221.744 128h290.256l-320-320h256l448 448-448 448z" />
+<glyph unicode="&#xeb01;" glyph-name="icon-activity-mode" d="M512 960c-214.8 0-398.8-132.4-474.8-320h90.8c56.8 0 108-24.8 143-64h241l-192 192h256l320-320-320-320h-256l192 192h-241c-35-39.2-86.2-64-143-64h-90.8c76-187.6 259.8-320 474.8-320 282.8 0 512 229.2 512 512s-229.2 512-512 512z" />
+<glyph unicode="&#xeb02;" glyph-name="icon-autoflow-tabular" d="M192 960c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h64v1024h-64zM384 960h256v-1024h-256v1024zM832 960h-64v-704h256v512c0 105.6-86.4 192-192 192z" />
+<glyph unicode="&#xeb03;" glyph-name="icon-clock" d="M512 960c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512zM782 270c-12.8-22.2-36.6-36-62.4-36-12.6 0-25 3.4-36 9.6l-222 128.2c-0.8 0.4-1.6 1-2.4 1.4l-0.8 0.6-1.8 1.2-2.4 2-1.8 1.4-0.6 0.6c-0.8 0.6-1.4 1.2-2.2 1.8v0c-5 4.6-9.4 10-13 15.8-0.2 0.4-0.6 1-0.8 1.4s-0.6 1-0.8 1.4c-3.2 6-5.8 12.4-7.2 19.2v0.2c-0.2 1-0.4 1.8-0.6 2.8 0 0.2 0 0.6-0.2 0.8-0.2 0.6-0.2 1.4-0.2 2.2s-0.2 1-0.2 1.6 0 1-0.2 1.6-0.2 1.6-0.2 2.2c0 0.4 0 0.6 0 1 0 1 0 1.8 0 2.8 0 0 0 0.2 0 0.4v363.8c0 39.8 32.2 72 72 72s72-32.2 72-72v-322.4l185.8-107.2c34.2-20 45.8-64 26-98.4z" />
+<glyph unicode="&#xeb04;" glyph-name="icon-database" d="M1024 768c0-106.039-229.23-192-512-192s-512 85.961-512 192c0 106.039 229.23 192 512 192s512-85.961 512-192zM512 448c-282.77 0-512 85.962-512 192v-512c0-106.038 229.23-192 512-192s512 85.962 512 192v512c0-106.038-229.23-192-512-192z" />
+<glyph unicode="&#xeb05;" glyph-name="icon-database-query" d="M683.52 140.714c-50.782-28.456-109.284-44.714-171.52-44.714-194.094 0-352 157.906-352 352s157.906 352 352 352 352-157.906 352-352c0-62.236-16.258-120.738-44.714-171.52l191.692-191.692c8.516 13.89 13.022 28.354 13.022 43.212v640c0 106.038-229.23 192-512 192s-512-85.962-512-192v-640c0-106.038 229.23-192 512-192 126.11 0 241.548 17.108 330.776 45.46l-159.256 159.254zM352 448c0-88.224 71.776-160 160-160s160 71.776 160 160-71.776 160-160 160-160-71.776-160-160z" />
+<glyph unicode="&#xeb06;" glyph-name="icon-dataset" d="M896 768h-320c-16.4 16.4-96.8 96.8-109.2 109.2l-37.4 37.4c-25 25-74.2 45.4-109.4 45.4h-256c-35.2 0-64-28.8-64-64v-384c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v128c0 70.4-57.6 128-128 128zM896 512h-768c-70.4 0-128-57.6-128-128v-320c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v320c0 70.4-57.6 128-128 128zM320 64h-128v320h128v-320zM576 64h-128v320h128v-320zM832 64h-128v320h128v-320z" />
+<glyph unicode="&#xeb07;" glyph-name="icon-datatable" d="M1024 768c0-106.039-229.23-192-512-192s-512 85.961-512 192c0 106.039 229.23 192 512 192s512-85.961 512-192zM512 448c-282.8 0-512 86-512 192v-512c0-106 229.2-192 512-192s512 86 512 192v512c0-106-229.2-192-512-192zM896 385v-256c-36.6-15.6-79.8-28.8-128-39.4v256c48.2 10.6 91.4 23.8 128 39.4zM256 345.6v-256c-48.2 10.4-91.4 23.8-128 39.4v256c36.6-15.6 79.8-28.8 128-39.4zM384 70v256c41-4 83.8-6 128-6s87 2.2 128 6v-256c-41-4-83.8-6-128-6s-87 2.2-128 6z" />
+<glyph unicode="&#xeb08;" glyph-name="icon-dictionary" d="M832 320c105.6 0 192 86.4 192 192v256c0 105.6-86.4 192-192 192v-320l-128 64-128-64v320h-384c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v192c0-105.6-86.4-192-192-192h-640v192h640z" />
+<glyph unicode="&#xeb09;" glyph-name="icon-folder" d="M896 768h-320c-16.4 16.4-96.8 96.8-109.2 109.2l-37.4 37.4c-25 25-74.2 45.4-109.4 45.4h-256c-35.2 0-64-28.8-64-64v-384c0 70.4 57.6 128 128 128h768c70.4 0 128-57.6 128-128v128c0 70.4-57.6 128-128 128zM896 512h-768c-70.4 0-128-57.6-128-128v-320c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v320c0 70.4-57.6 128-128 128z" />
+<glyph unicode="&#xeb0a;" glyph-name="icon-image" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM896 64h-768v768h768v-768zM320 704l-128-128v-448h640v320l-128 128-128-128z" />
+<glyph unicode="&#xeb0b;" glyph-name="icon-layout" d="M448 960h-256c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h256v1024zM832 960h-256v-577.664h448v385.664c0 105.6-86.4 192-192 192zM576-64h256c105.6 0 192 86.4 192 192v129.664h-448v-321.664z" />
+<glyph unicode="&#xeb0c;" glyph-name="icon-object" d="M512-64l512 320v384l-512.020 320-511.98-320v-384l512-320zM512 768l358.4-224-358.4-224-358.4 224 358.4 224z" />
+<glyph unicode="&#xeb0d;" glyph-name="icon-object-unknown" d="M511.98 960l-511.98-320v-384l512-320 512 320v384l-512.020 320zM586.22 64h-141.36v136.64h141.36v-136.64zM721.040 462.1c-11.94-17.020-34.9-38.78-68.84-65.24l-33.48-26c-18.24-14.18-30.34-30.74-36.32-49.64-3.78-11.98-5.82-30.58-6.14-55.8h-128.12c1.88 53.26 6.92 90.060 15.080 110.4 8.18 20.34 29.22 43.74 63.16 70.22l34.42 26.94c11.3 8.52 20.42 17.8 27.34 27.9 12.56 17.34 18.86 36.4 18.86 57.2 0 23.94-7 45.78-20.98 65.48-14 19.7-39.54 29.54-76.64 29.54s-62.34-12.14-77.6-36.4c-15.24-24.28-22.88-49.48-22.88-75.64h-136.64c3.78 89.84 35.14 153.5 94.080 191.020 37.18 23.94 82.9 35.94 137.12 35.94 71.22 0 130.42-17.020 177.54-51.060s70.68-84.48 70.68-151.3c0-40.98-10.22-75.5-30.66-103.54z" />
+<glyph unicode="&#xeb0e;" glyph-name="icon-packet" d="M512 960l-512-320v-512c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v512l-512 320zM512 768l358.4-224-358.4-224-358.4 224 358.4 224z" />
+<glyph unicode="&#xeb0f;" glyph-name="icon-page" d="M704 448c-105.6 0-192 86.4-192 192v320h-320c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v320h-320zM768 576h256l-384 384v-256c0-70.4 57.6-128 128-128z" />
+<glyph unicode="&#xeb10;" glyph-name="icon-plot-overlay" d="M830 960h-636c-106.7 0-194-87.3-194-194v-406.82c14.18-18.64 25.66-28.34 32-30.84 14.28 5.62 54.44 47.54 92.96 146 42.46 108.38 116.32 237.66 227.040 237.66 52.4 0 101.42-29.16 145.7-86.68 37.34-48.5 64.84-108.92 81.34-151.080 38.52-98.38 78.68-140.3 92.96-146 14.28 5.62 54.44 47.54 92.96 146 42.46 108.48 116.32 237.76 227.040 237.76 11.355-0.003 22.389-1.366 32.952-3.936l-0.952 0.196v57.74c0 106.7-87.3 194-194 194zM992 567.66c-14.28-5.62-54.44-47.52-92.96-146-42.46-108.38-116.32-237.66-227.040-237.66-52.4 0-101.42 29.16-145.7 86.68-37.34 48.5-64.84 108.92-81.34 151.080-38.52 98.38-78.68 140.3-92.96 146-14.28-5.62-54.44-47.52-92.96-146-42.46-108.48-116.32-237.76-227.040-237.76-11.355 0.003-22.389 1.367-32.952 3.936l0.952-0.196v-57.74c0-106.7 87.3-194 194-194h636c106.7 0 194 87.3 194 194v406.82c-14.18 18.64-25.66 28.34-32 30.84z" />
+<glyph unicode="&#xeb11;" glyph-name="icon-plot-stacked" d="M89.6 648c24.98 0 48.96 26.52 85.52 70.18 45.42 54.28 102 121.82 196 121.82 44.64 0 86.62-15.46 124.8-46 28.68-22.9 51.16-50.42 72.92-77.060 38.42-46.94 59.16-68.94 83.96-68.94h371.2v118c0 106.7-87.3 194-194 194h-636c-106.7 0-194-87.3-194-194v-118h89.6zM529.5 549.6c-28.24 22.64-50.52 50-72 76.28-35.5 43.48-58.76 70.12-86.3 70.12-25.060 0-49.080-26.54-85.66-70.24-45.4-54.24-102-121.76-196-121.76h-89.54v-112h371.2c44 0 85.54-15.34 123.3-45.6 28.24-22.64 50.52-50 72-76.28 35.5-43.48 58.76-70.12 86.3-70.12 25.060 0 49.080 26.54 85.66 70.24 45.4 54.24 102 121.76 196 121.76h89.54v112h-371.2c-44.060 0-85.54 15.34-123.3 45.6zM934.4 248c-24.98 0-48.96-26.52-85.52-70.18-45.42-54.28-102-121.82-196-121.82-44.64 0-86.62 15.46-124.8 46-28.68 22.9-51.16 50.42-72.92 77.060-38.42 46.94-59.16 68.94-83.96 68.94h-371.2v-118c0-106.7 87.3-194 194-194h636c106.7 0 194 87.3 194 194v118h-89.6z" />
+<glyph unicode="&#xeb12;" glyph-name="icon-session" d="M635.6 435.6c6.6-4.2 13.2-8.6 19.2-13.6l120.4-96.4c29.6-23.8 83.8-23.8 113.4 0l135.2 108c0.2 4.8 0.2 9.4 0.2 14.2 0 52.2-7.8 102.4-22.2 149.8l-154.8-123.6c-58.2-46.6-140.2-59.2-211.4-38.4zM248.6 325.8l120.4 96.4c58 46.4 140 59.2 211.2 38.4-6.6 4.2-13.2 8.6-19.2 13.6l-120.4 96.4c-29.6 23.8-83.8 23.8-113.4 0l-120.2-96.6c-40-32-91.4-48-143-48-21.6 0-43 2.8-63.8 8.4 0-0.6 0-1.2 0-1.6 5-3.4 10-6.8 14.6-10.6l120.4-96.4c29.8-23.8 83.8-23.8 113.4 0zM120.6 581.8l120.4 96.4c80.2 64.2 205.6 64.2 285.8 0l120.4-96.4c29.6-23.8 83.8-23.8 113.4 0l181 144.8c-91.2 140.4-249.6 233.4-429.6 233.4-238.6 0-439.2-163.2-496-384.2 30.8-17.6 77.8-15.6 104.6 6zM689 218l-120.4 96.4c-29.6 23.8-83.8 23.8-113.4 0l-120.2-96.4c-40-32-91.4-48-143-48-47.8 0-95.4 13.8-134.2 41.4 85.6-163.6 256.8-275.4 454.2-275.4s368.6 111.8 454.2 275.4c-80.4-57.4-199.8-55.2-277.2 6.6z" />
+<glyph unicode="&#xeb13;" glyph-name="icon-tabular" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM640 512h-256v192h256v-192zM384 448h256v-192h-256v192zM320 256h-256v192h256v-192zM320 704v-192h-256v192h256zM128 0c-17 0-33 6.6-45.2 18.8s-18.8 28.2-18.8 45.2v128h256v-192h-192zM384 0v192h256v-192h-256zM960 64c0-17-6.6-33-18.8-45.2s-28.2-18.8-45.2-18.8h-192v192h256v-128zM960 256h-256v192h256v-192zM960 512h-256v192h256v-192z" />
+<glyph unicode="&#xeb14;" glyph-name="icon-tabular-lad" d="M896 960h-768c-70.6-0.2-127.8-57.4-128-128v-768c0.2-70.6 57.4-127.8 128-128h768c70.6 0.2 127.8 57.4 128 128v768c-0.2 70.6-57.4 127.8-128 128zM64 704h256v-192h-256v192zM64 448h256v-192h-256v192zM128 0c-35.2 0.2-63.8 28.8-64 64v128h256v-192h-192zM384 0v192h256v-192h-256zM960 64c-0.2-35.2-28.8-63.8-64-64h-192v192h256v-128zM960 448v-192h-576v192h64v64h-64v192h576v-192h-64v-64h64zM782.4 412.6l-110.4 55.2v172.2c0 17.6-14.4 32-32 32s-32-14.4-32-32v-211.8l145.6-72.8c15.8-8 35-1.6 43 14.4 8 15.6 1.6 35-14.2 42.8v0z" />
+<glyph unicode="&#xeb15;" glyph-name="icon-tabular-lad-set" d="M128 192v576c-70.6-0.2-127.8-57.4-128-128v-576c0.2-70.6 57.4-127.8 128-128h576c70.6 0.2 127.8 57.4 128 128h-576c-70.6 0.2-127.8 57.4-128 128zM896 960h-576c-70.6-0.2-127.8-57.4-128-128v-576c0.2-70.6 57.4-127.8 128-128h576c70.6 0.2 127.8 57.4 128 128v576c-0.2 70.6-57.4 127.8-128 128zM256 768h192v-128h-192v128zM256 576h192v-192h-192v192zM320 192c-35.2 0.2-63.8 28.8-64 64v64h192v-128h-128zM512 192v128h192v-128h-192zM960 256c-0.2-35.2-28.8-63.8-64-64h-128v128h192v-64zM960 384h-448v384h448v-384zM832 480c17.6 0 32 14.4 32 32 0 13.8-8.8 26-21.8 30.4l-74.2 24.6v105c0 17.6-14.4 32-32 32s-32-14.4-32-32v-151l117.8-39.2c3.4-1.2 6.8-1.8 10.2-1.8z" />
+<glyph unicode="&#xeb16;" glyph-name="icon-tabular-realtime" d="M896 960h-768c-70.606-0.215-127.785-57.394-128-127.979v-768.021c0.215-70.606 57.394-127.785 127.979-128h768.021c70.606 0.215 127.785 57.394 128 127.979v768.021c-0.215 70.606-57.394 127.785-127.979 128h-0.021zM448 668l25.060-25.32c7.916-7.922 18.856-12.822 30.94-12.822s23.023 4.9 30.94 12.822v0l75.5 76.3c29.97 30.338 71.571 49.128 117.56 49.128s87.59-18.79 117.544-49.112l0.016-0.016 50.44-50.98v-152.2c-24.111 8.83-44.678 22.255-61.542 39.342l-0.018 0.018-75.5 76.3c-7.916 7.922-18.856 12.822-30.94 12.822s-23.023-4.9-30.94-12.822v0l-75.5-76.3c-29.971-30.343-71.575-49.137-117.568-49.137-20.084 0-39.331 3.584-57.137 10.146l1.145-0.369v152.2zM320 0h-192c-35.26 0.214-63.786 28.74-64 63.98v128.020h256v-192zM320 256h-256v192h256v-192zM320 512h-256v192h256v-192zM640 0h-256v192h256v-192zM448 323.38v174.5c1.88-1.74 3.74-3.5 5.56-5.34l75.5-76.3c7.916-7.922 18.856-12.822 30.94-12.822s23.023 4.9 30.94 12.822v0l75.5 76.3c29.966 30.333 71.56 49.119 117.542 49.119 43.28 0 82.673-16.643 112.128-43.879l-0.11 0.1v-174.5c-1.88 1.74-3.74 3.5-5.56 5.34l-75.5 76.3c-7.916 7.922-18.856 12.822-30.94 12.822s-23.023-4.9-30.94-12.822v0l-75.5-76.3c-29.966-30.333-71.56-49.119-117.542-49.119-43.28 0-82.673 16.643-112.128 43.879l0.11-0.1zM960 64c-0.214-35.26-28.74-63.786-63.98-64h-192.020v192h256v-128z" />
+<glyph unicode="&#xeb17;" glyph-name="icon-tabular-scrolling" d="M64 960c-35.2 0-64-28.8-64-64v-192h448v256h-384zM1024 704v192c0 35.2-28.8 64-64 64h-384v-256h448zM0 576v-192c0-35.2 28.8-64 64-64h384v256h-448zM960 320c35.2 0 64 28.8 64 64v192h-448v-256h384zM512-64l-256 256h512z" />
+<glyph unicode="&#xeb18;" glyph-name="icon-telemetry" d="M32 328.34c14.28 5.62 54.44 47.54 92.96 146 42.46 108.38 116.32 237.66 227.040 237.66 52.4 0 101.42-29.16 145.7-86.68 37.34-48.5 64.84-108.92 81.34-151.080 38.52-98.38 78.68-140.3 92.96-146 14.28 5.62 54.44 47.54 92.96 146 37.4 95.5 99.14 207.14 188.94 232.46-90.462 152.598-254.314 253.3-441.686 253.3-0.075 0-0.15 0-0.225 0h0.011c-282.76 0-512-229.24-512-512 0-0.032 0-0.070 0-0.108 0-35.719 3.641-70.587 10.572-104.254l-0.572 3.323c9.54-10.78 17.22-16.74 22-18.62zM992 567.66c-14.28-5.62-54.44-47.52-92.96-146-42.46-108.38-116.32-237.66-227.040-237.66-52.4 0-101.42 29.16-145.7 86.68-37.34 48.5-64.84 108.92-81.34 151.080-38.52 98.38-78.68 140.3-92.96 146-14.28-5.62-54.44-47.52-92.96-146-37.4-95.5-99.14-207.14-188.94-232.46 90.462-152.598 254.314-253.3 441.686-253.3 0.075 0 0.15 0 0.225 0h-0.011c282.76 0 512 229.24 512 512 0 0.032 0 0.070 0 0.108 0 35.719-3.641 70.587-10.572 104.254l0.572-3.323c-9.54 10.78-17.22 16.74-22 18.62z" />
+<glyph unicode="&#xeb19;" glyph-name="icon-timeline" d="M832 960h-640c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM128 640v128h256v-128zM256 512h384v-128h-384zM896 128h-448v128h448zM896 384h-128v128h128zM896 640h-384v128h384z" />
+<glyph unicode="&#xeb1a;" glyph-name="icon-timer" d="M640 813.4v82.58c0 35.346-28.654 64-64 64v0h-128c-35.346 0-64-28.654-64-64v0-82.58c-185.040-55.080-320-226.48-320-429.42 0-247.42 200.58-448 448-448s448 200.58 448 448c0 202.96-135 374.4-320 429.42zM532 363.98l-263.76-211c-57.105 59.935-92.24 141.25-92.24 230.772 0 0.080 0 0.16 0 0.24v-0.012c0 185.28 150.72 336 336 336 6.72 0 13.38-0.22 20-0.62v-355.38z" />
+<glyph unicode="&#xeb1b;" glyph-name="icon-topic" d="M454.36 483.36l86.3 86.3c9.088 8.965 21.577 14.502 35.36 14.502s26.272-5.537 35.366-14.507l86.294-86.294c19.328-19.358 42.832-34.541 69.047-44.082l1.313-0.418v172.14l-57.64 57.64c-34.408 34.33-81.9 55.558-134.35 55.558s-99.943-21.228-134.354-55.562l-86.296-86.296c-9.088-8.965-21.577-14.502-35.36-14.502s-26.272 5.537-35.366 14.507l-28.674 28.654v-172.14c19.045-7.022 41.040-11.084 63.984-11.084 52.463 0 99.966 21.239 134.379 55.587l-0.003-0.003zM505.64 412.64l-86.3-86.3c-9.088-8.965-21.577-14.502-35.36-14.502s-26.272 5.537-35.366 14.507l-86.294 86.294c-2 2-4.2 4-6.36 6v-197.36c33.664-30.721 78.65-49.537 128.031-49.537 52.44 0 99.923 21.22 134.333 55.541l86.296 86.296c9.088 8.965 21.577 14.502 35.36 14.502s26.272-5.537 35.366-14.507l86.294-86.294c2-2 4.2-4 6.36-6v197.36c-33.664 30.721-78.65 49.537-128.031 49.537-52.44 0-99.923-21.22-134.333-55.541l0.004 0.004zM832 960h-128v-192h127.66l0.34-0.34v-639.32l-0.34-0.34h-127.66v-192h128c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM320 128h-127.66l-0.34 0.34v639.32l0.34 0.34h127.66v192h-128c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h128v192z" />
+<glyph unicode="&#xeb1c;" glyph-name="icon-box-with-dashed-lines-v2" d="M0 576h128v-256h-128v256zM128 831.78l0.22 0.22h191.78v128h-192c-70.606-0.215-127.785-57.394-128-127.979v-192.021h128v191.78zM128 64.22v191.78h-128v-192c0.215-70.606 57.394-127.785 127.979-128h192.021v128h-191.78zM384 960h256v-128h-256v128zM896 64.22l-0.22-0.22h-191.78v-128h192c70.606 0.215 127.785 57.394 128 127.979v192.021h-128v-191.78zM896 960h-192v-128h191.78l0.22-0.22v-191.78h128v192c-0.215 70.606-57.394 127.785-127.979 128h-0.021zM896 576h128v-256h-128v256zM384 64h256v-128h-256v128zM256 704h512v-512h-512v512z" />
+<glyph unicode="&#xeb1d;" glyph-name="icon-summary-widget" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM847.8 349.6l-82.6-143.2-189.6 131.6 19.2-230h-165.4l19.2 230-189.6-131.6-82.6 143.2 208.6 98.4-208.8 98.4 82.6 143.2 189.6-131.6-19.2 230h165.4l-19.2-230 189.6 131.6 82.6-143.2-208.6-98.4 208.8-98.4z" />
+<glyph unicode="&#xeb1e;" glyph-name="icon-notebook" d="M896 849.2c0 79.8-55.4 127.4-123 105.4l-773-250.6h896v145.2zM896 640h-896v-576c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v448c0 70.4-57.6 128-128 128zM832 128h-384v320h384v-320z" />
+<glyph unicode="&#xeb1f;" glyph-name="icon-tabs-view" d="M0 64c0.227-70.601 57.399-127.773 127.978-128h768.022c70.601 0.227 127.773 57.399 128 127.978v608.022h-512l-50.2 225.6c-7.6 34.2-42.6 62.4-77.8 62.4h-256c-70.601-0.227-127.773-57.399-128-127.978v-0.022zM832 192h-640v256h640zM480 960c35.2 0 70.2-28.2 77.8-62.4l36-161.6h430.2v96c-0.227 70.601-57.399 127.773-127.978 128h-0.022z" />
+<glyph unicode="&#xeb20;" glyph-name="icon-flexible-layout" d="M0 128c0-105.6 86.4-192 192-192h64v576h-256zM0 768v-128h256v320h-64c-105.6 0-192-86.4-192-192zM768-64h64c105.6 0 192 86.4 192 192v128h-256zM384 960h256v-1024h-256v1024zM832 960h-64v-576h256v384c0 105.6-86.4 192-192 192z" />
+<glyph unicode="&#xeb21;" glyph-name="icon-generator-sine" d="M152 486.2c10.8 4.2 40.8 35.6 69.8 109.4 31.8 81.4 87.2 178.4 170.2 178.4 39.4 0 76-21.8 109.2-65 28-36.4 48.8-81.6 61-113.4 29-73.8 59-105.2 69.8-109.4 10.8 4.2 40.8 35.6 69.8 109.4s74.2 155.4 141.6 174.4c-67.89 114.467-190.82 190-331.391 190-0.003 0-0.007 0-0.010 0h0.001c-212 0-384-172-384-384 0.017-26.829 2.71-53.018 7.827-78.329l-0.427 2.529c7.2-8 13-12.6 16.6-14zM884.6 483c7.235 27.919 11.392 59.972 11.4 92.995v0.005c-0.017 26.829-2.71 53.018-7.827 78.329l0.427-2.529c-7.2 8-13 12.6-16.6 14-10.8-4.2-40.8-35.6-69.8-109.4-21.8-55.8-54.6-119-100-153.2zM512 320l135 59c-4.485-0.614-9.689-0.977-14.972-1h-0.028c-39.4 0-76 21.8-109.2 65-28 36.4-48.8 81.6-61 113.4-29 73.8-59 105.2-69.8 109.4-10.8-4.2-40.8-35.6-69.8-109.4-16.4-42.2-39.2-88.4-68.8-123.2zM1024 480l-512-224-512 224v-320l512-224 512 224v320z" />
+<glyph unicode="&#xeb22;" glyph-name="icon-generator-event" d="M320 768h384v-64h-384v64zM320 512h384v-64h-384v64zM320 640h320v-64h-320v64zM256 831.8h512v-399.8l128 56v344c-0.227 70.601-57.399 127.773-127.978 128h-512.022c-70.601-0.227-127.773-57.399-128-127.978v-344.022l128-56zM658.2 384h-292.4l146.2-64 146.2 64zM512 256l-512 224v-320l512-224 512 224v320l-512-224z" />
+<glyph unicode="&#xeb23;" glyph-name="icon-gauge-v2" d="M512 960c-282.8 0-512-229.2-512-512 0-226.4 147-418.4 350.6-486l257.4 486v-503c236.8 45 416 253 416 503 0 282.8-229.2 512-512 512zM754.8 432.2c-58.967 68.597-145.842 111.772-242.8 111.772s-183.833-43.176-242.445-111.35l-0.355-0.422-146 125c8.6 10 17.4 19.6 26.8 28.8 92.628 92.679 220.619 150.006 362 150.006s269.372-57.326 361.997-150.003l0.003-0.003c9.4-9.2 18.2-18.8 26.8-28.8z" />
+<glyph unicode="&#xeb24;" glyph-name="icon-spectra" d="M768 256h-512l102.4 179.2-358.4-51.2v-254c0-106.6 87.4-194 194-194h636c106.8 0 194 87.4 194 194v62l-325.8 186.2zM830 960h-636c-106.6 0-194-87.2-194-194v-318l400 60.2 112 195.8 109.8-192h402.2v254c-0.227 107.052-86.948 193.773-193.978 194h-0.022zM1024 320v64l-384 64 384-128z" />
+<glyph unicode="&#xeb25;" glyph-name="icon-telemetry-spectra" d="M512 704l109.8-192h398.2c-31.4 252.6-247 448-508 448-282.8 0-512-229.2-512-512l400 60.2zM768 256h-512l102.4 179.2-354.4-50.6c31.2-252.8 246.8-448.6 508-448.6 201.6 0 376 116.6 459.6 286l-273.4 156.2zM640 448l384-128v64l-384 64z" />
+<glyph unicode="&#xeb26;" glyph-name="icon-pushbutton" d="M370.2 500.6c9.326-8.53 19.666-16.261 30.729-22.914l0.871-0.486c-11.077 19.209-17.664 42.221-17.8 66.76v0.040c0 39.6 17.8 77.6 50.2 107.4 37 34 87.4 52.6 141.8 52.6 40.2 0 78.2-10.2 110.2-29.2-8.918 15.653-19.693 29.040-32.268 40.482l-0.132 0.118c-37 34-87.4 52.6-141.8 52.6s-104.8-18.6-141.8-52.6c-32.4-29.8-50.2-67.8-50.2-107.4s17.8-77.6 50.2-107.4zM885.4 690.4c-40.6 154.6-192.4 269.6-373.4 269.6s-332.8-115-373.4-269.6c-86-80-138.6-187.8-138.6-306.4 0-247.4 229.2-448 512-448s512 200.6 512 448c0 118.6-52.6 226.4-138.6 306.4zM512 832c141.2 0 256-100.4 256-224s-114.8-224-256-224-256 100.4-256 224 114.8 224 256 224zM512 128c-175.4 0-318.4 127.8-320 285.4 68.8-94.8 186.4-157.4 320-157.4s251.2 62.6 320 157.4c-1.6-157.6-144.6-285.4-320-285.4z" />
+<glyph unicode="&#xeb27;" glyph-name="icon-conditional" d="M512 960c-282.76 0-512-229.24-512-512s229.24-512 512-512 512 229.24 512 512-229.24 512-512 512zM512 192l-384 256 384 256 384-256z" />
+<glyph unicode="&#xeb28;" glyph-name="icon-condition-widget" d="M832 960h-640c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM512 192l-384 256 384 256 384-256z" />
+<glyph unicode="&#xeb29;" glyph-name="icon-alphanumeric" d="M535.6 429.4c-8.4-1.6-17.2-3-26.2-4s-18.2-2.4-27.2-4c-10.196-1.861-18.808-4.010-27.21-6.633l1.61 0.433c-8.609-2.674-16.105-6.348-22.89-10.987l0.29 0.187c-6.693-4.517-12.283-10.107-16.663-16.585l-0.137-0.215c-4.6-6.8-7.4-15.6-8.8-26s-0.4-18.4 2.4-25.2c2.746-6.688 7.224-12.195 12.881-16.122l0.119-0.078c5.967-4.053 13.057-6.94 20.704-8.161l0.296-0.039c7.592-1.527 16.319-2.4 25.25-2.4 0.123 0 0.246 0 0.369 0h-0.019c22.2 0 39.6 3.6 52.6 11s23.2 16.2 30.2 26.4c6.273 8.873 11.271 19.191 14.426 30.285l0.174 0.715c1.853 6.809 3.601 15.41 4.855 24.169l0.145 1.231 5.2 41.6c-5.4-4.217-11.723-7.564-18.583-9.689l-0.417-0.111c-6.489-2.241-14.362-4.255-22.444-5.662l-0.956-0.138zM1024 576v192h-152l24 192h-192l-24-192h-256l24 192h-192l-24-192h-232v-192h208l-32-256h-176v-192h152l-24-192h192l24 192h256l-24-192h192l24 192h232v192h-208l32 256zM702.8 548.2l-26.4-211.8c-2.231-15.809-3.537-34.122-3.6-52.727v-0.073c0-16.8 2.2-29.4 6.4-37.8h-113.4c-1.342 5.556-2.338 12.122-2.781 18.84l-0.019 0.36c-0.261 3.524-0.409 7.634-0.409 11.778 0 2.962 0.076 5.907 0.226 8.832l-0.017-0.41c-18.663-17.401-41.395-30.694-66.597-38.289l-1.203-0.311c-22.627-6.956-48.639-10.974-75.586-11h-0.014c-0.764-0.011-1.666-0.018-2.569-0.018-18.098 0-35.598 2.563-52.156 7.345l1.325-0.328c-15.991 4.512-29.851 12.090-41.545 22.122l0.145-0.122c-11.233 9.982-19.792 22.733-24.624 37.192l-0.176 0.608c-5.2 15.2-6.4 33.4-3.8 54.4s9.4 42.2 19.4 57.2c9.524 14.399 21.535 26.346 35.532 35.512l0.468 0.288c13.387 8.662 28.922 15.533 45.512 19.765l1.088 0.235c13.436 3.792 30.801 7.554 48.47 10.41l2.93 0.39c17 2.6 33.8 4.6 50.4 6.2 16.628 1.527 31.69 4.070 46.349 7.643l-2.149-0.443c13 3 23.6 7.6 31.6 13.6s12.6 15 13.6 26.4 0.8 21.8-2.4 28.8c-2.849 6.902-7.542 12.56-13.468 16.517l-0.132 0.083c-6.217 4.011-13.604 6.78-21.543 7.774l-0.257 0.026c-7.897 1.277-17 2.007-26.274 2.007-0.537 0-1.073-0.002-1.609-0.007l0.082 0.001c-22 0-40-4.6-53.8-14.2s-23-25.2-28-47.2h-111.8c4.8 26.2 14.2 48 27.8 65.4 13.475 16.978 29.89 30.968 48.574 41.377l0.826 0.423c18.192 10.038 39.297 17.806 61.619 22.175l1.381 0.225c20.488 4.162 44.053 6.563 68.171 6.6h0.029c21.8-0.005 43.239-1.532 64.222-4.479l-2.422 0.279c20.641-2.809 39.324-8.783 56.401-17.461l-1.001 0.461c15.909-8.108 28.858-20.031 37.967-34.601l0.233-0.399c9-15 12.2-34.8 9-59.6z" />
+<glyph unicode="&#xeb2a;" glyph-name="icon-image-telemetry" d="M512 960c-282.8 0-512-229.2-512-512s229.2-512 512-512 512 229.2 512 512-229.2 512-512 512zM783.6 176.4c-69.581-69.675-165.757-112.776-272-112.776-212.298 0-384.4 172.102-384.4 384.4s172.102 384.4 384.4 384.4c212.298 0 384.4-172.102 384.4-384.4 0-0.008 0-0.017 0-0.025v0.001c0.001-0.264 0.001-0.575 0.001-0.887 0-105.769-42.964-201.503-112.391-270.703l-0.010-0.010zM704 576l-128-128-192 192-192-192c0-176.731 143.269-320 320-320s320 143.269 320 320v0z" />
+<glyph unicode="&#xeb2b;" glyph-name="icon-telemetry-aggregate" d="M78 564.56c14 41.44 37.48 100.8 69.2 148.36 38.62 57.78 82.38 87.080 130.14 87.080s91.5-29.3 130-87.080c31.72-47.56 55.14-106.92 69.2-148.36 30.88-90.96 63.12-134.98 78-146.54 14.94 11.56 47.2 55.58 78 146.54 14 41.44 37.48 100.8 69.22 148.36q27.8 41.7 59.12 63.5c-75.7 111.377-201.81 183.58-344.783 183.58-0.034 0-0.068 0-0.103 0h0.006c-229.76 0-416-186.24-416-416 0-0.071 0-0.156 0-0.24 0-39.119 5.396-76.977 15.484-112.871l-0.704 2.931c16.78 21.74 40.4 63.34 63.22 130.74zM754 523.44c-14-41.44-37.48-100.8-69.2-148.36-38.56-57.78-82.32-87.080-130-87.080s-91.5 29.3-130 87.080c-31.72 47.56-55.14 106.92-69.2 148.36-30.88 90.96-63.14 134.98-78 146.54-14.94-11.56-47.2-55.58-78-146.54-14.38-41.44-37.8-100.8-69.6-148.36q-27.8-41.7-59.12-63.5c75.7-111.378 201.81-183.58 344.783-183.58 0.119 0 0.237 0 0.356 0h-0.019c229.76 0 416 186.24 416 416 0 0.071 0 0.156 0 0.24 0 39.119-5.396 76.977-15.484 112.871l0.704-2.931c-16.78-21.74-40.4-63.34-63.22-130.74zM921.56 625.38c4.098-24.449 6.44-52.617 6.44-81.332 0-0.017 0-0.034 0-0.051v0.003c0-0.095 0-0.208 0-0.32 0-282.593-229.087-511.68-511.68-511.68-0.113 0-0.225 0-0.338 0h0.018c-0.014 0-0.031 0-0.048 0-28.716 0-56.884 2.342-84.325 6.845l2.993-0.405c72.483-63.623 168.109-102.44 272.802-102.44 0.203 0 0.406 0 0.61 0h-0.031c229.76 0 416 186.24 416 416 0 0.172 0 0.375 0 0.578 0 104.692-38.817 200.319-102.844 273.271l0.404-0.47z" />
+<glyph unicode="&#xeb2c;" glyph-name="icon-bar-graph" d="M832 960h-640c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM267.64 64h-139.64v448h139.64zM477.1 64h-139.64v768h139.64zM686.54 64h-139.64v320h139.64zM896 64h-139.64v640h139.64z" />
+<glyph unicode="&#xeb2d;" glyph-name="icon-map" d="M896 894.6l-128-62.6v-896l128 62.6c70.4 34.42 128 120.2 128 190.6v640c0 70.4-57.6 99.82-128 65.4zM320 48l387.2-96.8v896l-387.2 96.8v-896zM259.2 959.2l-3.2 0.8-128-62.6c-70.4-34.42-128-120.2-128-190.6v-640c0-70.4 57.6-99.82 128-65.4l128 62.6 3.2-0.8z" />
+<glyph unicode="&#xeb2e;" glyph-name="icon-plan" d="M256 768v64c0.215 70.606 57.394 127.785 127.979 128h256.021c70.606-0.215 127.785-57.394 128-127.979v-64.021zM832 832v-128h-640v128c-105.6 0-192-86.4-192-192v-512c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v512c0 105.6-86.4 192-192 192zM128 384v128h256v-128zM640 128h-384v128h384zM896 128h-128v128h128zM896 384h-384v128h384z" />
+<glyph unicode="&#xeb2f;" glyph-name="icon-timelist" d="M896 960h-768c-70.606-0.215-127.785-57.394-128-127.979v-768.021c0.215-70.606 57.394-127.785 127.979-128h768.021c70.606 0.215 127.785 57.394 128 127.979v768.021c-0.215 70.606-57.394 127.785-127.979 128h-0.021zM426.94 426.54c-8.054-15.864-24.249-26.545-42.938-26.545-7.823 0-15.209 1.871-21.734 5.191l0.273-0.126-154.54 77.28v221.66c0 26.51 21.49 48 48 48s48-21.49 48-48v0-162.34l101.46-50.72c15.864-8.054 26.545-24.249 26.545-42.938 0-7.823-1.871-15.209-5.191-21.734l0.126 0.273zM896 64h-320v128h320zM896 256h-320v128h320zM896 448h-320v128h320zM896 640h-320v128h320z" />
+<glyph unicode="&#xeb30;" glyph-name="icon-plot-scatter" d="M192 960c-105.6 0-192-86.4-192-192v-640c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v640c0 105.6-86.4 192-192 192zM128 608c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96v0c-53.019 0-96 42.981-96 96v0zM288 128c-53.019 0-96 42.981-96 96s42.981 96 96 96c53.019 0 96-42.981 96-96v0c0-53.019-42.981-96-96-96v0zM544 320c-53.019 0-96 42.981-96 96s42.981 96 96 96c53.019 0 96-42.981 96-96v0c0-53.019-42.981-96-96-96v0zM544 640c-53.019 0-96 42.981-96 96s42.981 96 96 96c53.019 0 96-42.981 96-96v0c0-53.019-42.981-96-96-96v0zM800 128c-53.019 0-96 42.981-96 96s42.981 96 96 96c53.019 0 96-42.981 96-96v0c0-53.019-42.981-96-96-96v0z" />
+<glyph unicode="&#xeb31;" glyph-name="icon-notebook-restricted" d="M896 849.28c0 79.9-55.38 127.32-123.080 105.36l-772.92-250.64h896v145.28zM896 640h-896v-576c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v448c0 70.4-57.6 128-128 128zM256 128h-128v128h128v-128zM256 320h-128v128h128v-128zM896 128h-512v128h512v-128zM896 320h-512v128h512v-128z" />
</font></defs></svg> \ No newline at end of file
diff --git a/src/styles/fonts/Open-MCT-Symbols-16px.ttf b/src/styles/fonts/Open-MCT-Symbols-16px.ttf
index 073e2c6ec..94ab53538 100644
--- a/src/styles/fonts/Open-MCT-Symbols-16px.ttf
+++ b/src/styles/fonts/Open-MCT-Symbols-16px.ttf
Binary files differ
diff --git a/src/styles/fonts/Open-MCT-Symbols-16px.woff b/src/styles/fonts/Open-MCT-Symbols-16px.woff
index ca1cc26be..510d6e9a9 100644
--- a/src/styles/fonts/Open-MCT-Symbols-16px.woff
+++ b/src/styles/fonts/Open-MCT-Symbols-16px.woff
Binary files differ
diff --git a/src/styles/vue-styles.scss b/src/styles/vue-styles.scss
index 8cfe9c699..f0ff173df 100644
--- a/src/styles/vue-styles.scss
+++ b/src/styles/vue-styles.scss
@@ -54,6 +54,7 @@
@import "./notebook.scss";
@import "../plugins/notebook/components/sidebar.scss";
@import "../plugins/gauge/gauge.scss";
+@import "../plugins/operatorStatus/operator-status";
#splash-screen {
display: none;
diff --git a/src/ui/layout/status-bar/Indicators.vue b/src/ui/layout/status-bar/Indicators.vue
index 7c9a975fc..fd7c3f122 100644
--- a/src/ui/layout/status-bar/Indicators.vue
+++ b/src/ui/layout/status-bar/Indicators.vue
@@ -24,10 +24,19 @@
export default {
inject: ['openmct'],
+ beforeDestroy() {
+ this.openmct.indicators.off('addIndicator', this.addIndicator);
+ },
mounted() {
- this.openmct.indicators.getIndicatorObjectsByPriority().forEach((indicator) => {
+ this.openmct.indicators.getIndicatorObjectsByPriority().forEach(this.addIndicator);
+
+ this.openmct.indicators.on('addIndicator', this.addIndicator);
+ },
+ methods: {
+ addIndicator(indicator) {
this.$el.appendChild(indicator.element);
- });
+ }
}
+
};
</script>
diff --git a/src/utils/raf.js b/src/utils/raf.js
new file mode 100644
index 000000000..d5c0c48fe
--- /dev/null
+++ b/src/utils/raf.js
@@ -0,0 +1,14 @@
+export default function raf(callback) {
+ let rendering = false;
+
+ return () => {
+ if (!rendering) {
+ rendering = true;
+
+ requestAnimationFrame(() => {
+ callback();
+ rendering = false;
+ });
+ }
+ };
+}
diff --git a/src/utils/rafSpec.js b/src/utils/rafSpec.js
new file mode 100644
index 000000000..0bf5ae9d9
--- /dev/null
+++ b/src/utils/rafSpec.js
@@ -0,0 +1,61 @@
+import raf from "./raf";
+
+describe('The raf utility function', () => {
+ it('Throttles function calls that arrive in quick succession using Request Animation Frame', () => {
+ const unthrottledFunction = jasmine.createSpy('unthrottledFunction');
+ const throttledCallback = jasmine.createSpy('throttledCallback');
+ const throttledFunction = raf(throttledCallback);
+
+ for (let i = 0; i < 10; i++) {
+ unthrottledFunction();
+ throttledFunction();
+ }
+
+ return new Promise((resolve) => {
+ requestAnimationFrame(resolve);
+ }).then(() => {
+ expect(unthrottledFunction).toHaveBeenCalledTimes(10);
+ expect(throttledCallback).toHaveBeenCalledTimes(1);
+ });
+ });
+ it('Only invokes callback once per animation frame', () => {
+ const throttledCallback = jasmine.createSpy('throttledCallback');
+ const throttledFunction = raf(throttledCallback);
+
+ for (let i = 0; i < 10; i++) {
+ throttledFunction();
+ }
+
+ return new Promise(resolve => {
+ requestAnimationFrame(resolve);
+ }).then(() => {
+ return new Promise(resolve => {
+ requestAnimationFrame(resolve);
+ });
+ }).then(() => {
+ expect(throttledCallback).toHaveBeenCalledTimes(1);
+ });
+ });
+ it('Invokes callback again if called in subsequent animation frame', () => {
+ const throttledCallback = jasmine.createSpy('throttledCallback');
+ const throttledFunction = raf(throttledCallback);
+
+ for (let i = 0; i < 10; i++) {
+ throttledFunction();
+ }
+
+ return new Promise(resolve => {
+ requestAnimationFrame(resolve);
+ }).then(() => {
+ for (let i = 0; i < 10; i++) {
+ throttledFunction();
+ }
+
+ return new Promise(resolve => {
+ requestAnimationFrame(resolve);
+ });
+ }).then(() => {
+ expect(throttledCallback).toHaveBeenCalledTimes(2);
+ });
+ });
+});
diff --git a/src/utils/template/templateHelpers.js b/src/utils/template/templateHelpers.js
new file mode 100644
index 000000000..70d381ce7
--- /dev/null
+++ b/src/utils/template/templateHelpers.js
@@ -0,0 +1,14 @@
+export function convertTemplateToHTML(templateString) {
+ const template = document.createElement('template');
+ template.innerHTML = templateString;
+
+ return template.content.cloneNode(true).children;
+}
+
+export function toggleClass(element, className) {
+ if (element.classList.contains(className)) {
+ element.classList.remove(className);
+ } else {
+ element.classList.add(className);
+ }
+}
diff --git a/webpack.common.js b/webpack.common.js
index 7f6ae8970..3400ade16 100644
--- a/webpack.common.js
+++ b/webpack.common.js
@@ -106,13 +106,6 @@ const config = {
type: 'asset/source'
},
{
- test: /zepto/,
- use: [
- "imports-loader?this=>window",
- "exports-loader?Zepto"
- ]
- },
- {
test: /\.(jpg|jpeg|png|svg)$/,
type: 'asset/resource',
generator: {