Merged in feature/mindplot-lint (pull request #11)

mindplot lint

* fix eqeqeq

* fix max-len

* fix max-len, guard-for-in

* fix import/no-named-as-default-member

* misc fixes

* fix no-shadow

* fix no-param-reassign

* fix issues introduced with "fix no-param-reassign"

* Merge 'origin/develop' into feature/mindplot-lint

* lint and docs fixes after merge


Approved-by: Paulo Veiga
This commit is contained in:
Matias Arriola 2021-12-20 20:54:31 +00:00 committed by Paulo Veiga
parent c6caa3a420
commit b5fd708971
64 changed files with 550 additions and 624 deletions

View File

@ -1 +0,0 @@
[{"/Users/pveiga/repos/wisemapping-react/src/Footer.js":"1","/Users/pveiga/repos/wisemapping-react/src/Header.js":"2","/Users/pveiga/repos/wisemapping-react/src/index.js":"3","/Users/pveiga/repos/wisemapping-react/src/LoginPage.js":"4","/Users/pveiga/repos/wisemapping-react/src/RegistrationPage.js":"5"},{"size":1609,"mtime":1607011308675,"results":"6","hashOfConfig":"7"},{"size":1924,"mtime":1607015196109,"results":"8","hashOfConfig":"7"},{"size":1385,"mtime":1607144319143,"results":"9","hashOfConfig":"7"},{"size":3345,"mtime":1607147386381,"results":"10","hashOfConfig":"7"},{"size":4573,"mtime":1607143971378,"results":"11","hashOfConfig":"7"},{"filePath":"12","messages":"13","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1xegajf",{"filePath":"14","messages":"15","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"16","messages":"17","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"18","messages":"19","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"20","messages":"21","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/Users/pveiga/repos/wisemapping-react/src/Footer.js",[],"/Users/pveiga/repos/wisemapping-react/src/Header.js",[],"/Users/pveiga/repos/wisemapping-react/src/index.js",[],"/Users/pveiga/repos/wisemapping-react/src/LoginPage.js",[],"/Users/pveiga/repos/wisemapping-react/src/RegistrationPage.js",[]]

View File

@ -21,7 +21,7 @@ If you want to contribute, please check out [CONTRIBUTING.md](./CONTRIBUTING.md)
## Scripts
Each package might provide the following scripts.
You can run these for all packages by running it from the root folder. Alternatively you can run it for a specific package from inside the package folder you want to.
You can run these for all packages by running it from the root folder. Alternatively you can run it for a specific package by passing the `--scope` option.
### build
@ -39,7 +39,8 @@ You can run these for all packages by running it from the root folder. Alternati
> start a devServer with some browsable examples
`yarn playground`
`yarn playground --scope @wisemapping/web2d`
`yarn playground --scope @wisemapping/mindplot`
## test

View File

@ -5,6 +5,7 @@
"build": "lerna run build",
"clean": "lerna clean && rm -rf node_modules",
"lint": "lerna run lint --stream",
"playground": "lerna run playground --stream",
"test": "lerna run test --stream",
"test:unit": "lerna run test:unit --stream",
"test:integration": "lerna run test:integration --stream"

View File

@ -1,2 +1,3 @@
dist/
node_modules/
src/components/libraries/bootstrap/js

View File

@ -8,14 +8,23 @@
"airbnb-base",
"plugin:cypress/recommended"
],
"plugins": ["only-warn"],
"globals": {
// Browser is a mootools polyfill. Remove when moving from browser checks to feature detection
"Browser": true,
// designer is a global currently used as a hack. Remove this when fixing the hack.
"designer": true
},
"rules": {
"no-underscore-dangle": "off",
"no-plusplus": "off",
"no-param-reassign": "off",
"max-len": [1,250],
"class-methods-use-this": "off",
"import/no-extraneous-dependencies": ["error", {"devDependencies": ["!cypress/**/*.js"]}]
"import/no-extraneous-dependencies": ["error", {"devDependencies": ["!cypress/**/*.js"]}],
"func-names": ["error", "as-needed"],
"no-unused-vars": ["error", { "args": "none" }],
"camelcase": ["error", {"allow": ["XML"]}],
"new-cap": ["error", { "properties": false }]
},
"settings": {
"import/resolver": {

View File

@ -46,13 +46,12 @@
"core-js": "^3.15.2",
"cypress": "^8.4.1",
"cypress-image-snapshot": "^4.0.1",
"eslint": "^5.16.0",
"eslint": "^8.4.1",
"eslint-config-airbnb-base": "^14.2.1",
"eslint-config-standard": "^16.0.3",
"eslint-loader": "^4.0.2",
"eslint-nibble": "^8.0.0",
"eslint-plugin-cypress": "^2.12.1",
"eslint-plugin-import": "^2.24.2",
"eslint-plugin-only-warn": "^1.0.3",
"html-webpack-plugin": "^5.3.2",
"jest-webpack": "^0.5.1",
"less": "^4.1.2",

View File

@ -26,12 +26,9 @@ class CommandContext {
}
/** */
findTopics(topicsIds) {
$assert($defined(topicsIds), 'topicsIds can not be null');
if (!(topicsIds instanceof Array)) {
topicsIds = [topicsIds];
}
findTopics(topicIds) {
$assert($defined(topicIds), 'topicsIds can not be null');
const topicsIds = Array.isArray(topicIds) ? topicIds : [topicIds];
const designerTopics = this._designer.getModel().getTopics();
const result = designerTopics.filter((topic) => topicsIds.includes(topic.getId()));
@ -93,11 +90,9 @@ class CommandContext {
}
/** */
findRelationships(relIds) {
$assert($defined(relIds), 'relId can not be null');
if (!(relIds instanceof Array)) {
relIds = [relIds];
}
findRelationships(relationshipIds) {
$assert($defined(relationshipIds), 'relId can not be null');
const relIds = Array.isArray(relationshipIds) ? relationshipIds : [relationshipIds];
const designerRel = this._designer.getModel().getRelationships();
return designerRel.filter((rel) => relIds.includes(rel.getId()));

View File

@ -58,11 +58,8 @@ class ConnectionLine {
return [new Point(deltaX, 0), new Point(-deltaX, 0)];
}
_createLine(lineType, defaultStyle) {
if (!$defined(lineType)) {
lineType = defaultStyle;
}
lineType = parseInt(lineType, 10);
_createLine(lineTypeParam, defaultStyle) {
const lineType = $defined(lineTypeParam) ? parseInt(lineTypeParam, 10) : defaultStyle;
this._lineType = lineType;
let line = null;
switch (lineType) {

View File

@ -137,7 +137,7 @@ class ControlPoint {
const pos = screen.getWorkspaceMousePosition(event);
let cords;
if (point == 0) {
if (point === 0) {
cords = Shape.calculateRelationShipPointCoordinates(this._line.getSourceTopic(), pos);
this._line.setFrom(cords.x, cords.y);
this._line.setSrcControlPoint(new Point(pos.x - cords.x, pos.y - cords.y));

View File

@ -342,11 +342,7 @@ class Designer extends Events {
* @param {Number=} factor
* zoom out by the given factor, or 1.2, if undefined
*/
zoomOut(factor) {
if (!factor) {
factor = 1.2;
}
zoomOut(factor = 1.2) {
const model = this.getModel();
const scale = model.getZoom() * factor;
if (scale <= 1.9) {
@ -361,9 +357,7 @@ class Designer extends Events {
* @param {Number=} factor
* zoom in by the given factor, or 1.2, if undefined
*/
zoomIn(factor) {
if (!factor) factor = 1.2;
zoomIn(factor = 1.2) {
const model = this.getModel();
const scale = model.getZoom() / factor;
@ -935,7 +929,8 @@ class Designer extends Events {
/** */
changeTopicShape(shape) {
const validateFunc = (topic) => !(topic.getType() === INodeModel.CENTRAL_TOPIC_TYPE && shape === TopicShape.LINE
const validateFunc = (topic) => !(
topic.getType() === INodeModel.CENTRAL_TOPIC_TYPE && shape === TopicShape.LINE
);
const validateError = 'Central Topic shape can not be changed to line figure.';

View File

@ -15,8 +15,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { $assert } from '@wisemapping/core-js';
import $ from 'jquery';
import { $assert } from '@wisemapping/core-js';
import Keyboard from './Keyboard';
class DesignerKeyboard extends Keyboard {

View File

@ -30,7 +30,7 @@ class DesignerUndoManager {
if (command.discardDuplicated && length > 0) {
// Skip duplicated events ...
const lastItem = this._undoQueue[length - 1];
if (lastItem.discardDuplicated != command.discardDuplicated) {
if (lastItem.discardDuplicated !== command.discardDuplicated) {
this._undoQueue.push(command);
}
} else {
@ -73,11 +73,11 @@ class DesignerUndoManager {
hasBeenChanged() {
let result = true;
const undoLength = this._undoQueue.length;
if (undoLength == 0 && this._baseId == 0) {
if (undoLength === 0 && this._baseId === 0) {
result = false;
} else if (undoLength > 0) {
const command = this._undoQueue[undoLength - 1];
result = (this._baseId != command.getId());
result = (this._baseId !== command.getId());
}
return result;
}

View File

@ -28,13 +28,11 @@ class DragConnector {
}
checkConnection(dragTopic) {
const topics = this._designerModel.getTopics();
// Must be disconnected from their current connection ?.
const candidates = this._searchConnectionCandidates(dragTopic);
const currentConnection = dragTopic.getConnectedToTopic();
if (currentConnection && (candidates.length == 0 || candidates[0] != currentConnection)) {
if (currentConnection && (candidates.length === 0 || candidates[0] !== currentConnection)) {
dragTopic.disconnect(this._workspace);
}
@ -71,7 +69,8 @@ class DragConnector {
// * The x distance greater the vertical tolerated distance
topics = topics.filter((topic) => {
const tpos = topic.getPosition();
// Center topic has different alignment than the rest of the nodes. That's why i need to divide it by two...
// Center topic has different alignment than the rest of the nodes.
// That's why i need to divide it by two...
const txborder = tpos.x + (topic.getSize().width / 2) * Math.sign(sPos.x);
const distance = (sPos.x - txborder) * Math.sign(sPos.x);
return distance > 0 && (distance < DragConnector.MAX_VERTICAL_CONNECTION_TOLERANCE);
@ -90,14 +89,16 @@ class DragConnector {
const av = me._isVerticallyAligned(a.getSize(), aPos, sPos);
const bv = me._isVerticallyAligned(b.getSize(), bPos, sPos);
return me._proximityWeight(av, a, sPos, currentConnection) - me._proximityWeight(bv, b, sPos, currentConnection);
return me._proximityWeight(av, a, sPos, currentConnection)
- me._proximityWeight(bv, b, sPos, currentConnection);
});
return topics;
}
_proximityWeight(isAligned, target, sPos, currentConnection) {
const tPos = target.getPosition();
return (isAligned ? 0 : 200) + Math.abs(tPos.x - sPos.x) + Math.abs(tPos.y - sPos.y) + (currentConnection == target ? 0 : 100);
return (isAligned ? 0 : 200) + Math.abs(tPos.x - sPos.x)
+ Math.abs(tPos.y - sPos.y) + (currentConnection === target ? 0 : 100);
}
_isVerticallyAligned(targetSize, targetPosition, sourcePosition) {

View File

@ -44,11 +44,15 @@ class DragManager {
const dragNode = node.createDragNode(layoutManager);
// Register mouse move listener ...
const mouseMoveListener = dragManager._buildMouseMoveListener(workspace, dragNode, dragManager);
const mouseMoveListener = dragManager._buildMouseMoveListener(
workspace, dragNode, dragManager,
);
screen.addEvent('mousemove', mouseMoveListener);
// Register mouse up listeners ...
const mouseUpListener = dragManager._buildMouseUpListener(workspace, node, dragNode, dragManager);
const mouseUpListener = dragManager._buildMouseUpListener(
workspace, node, dragNode, dragManager,
);
screen.addEvent('mouseup', mouseUpListener);
// Change cursor.
@ -59,15 +63,7 @@ class DragManager {
}
remove(node) {
const nodes = this._topics;
let contained = false;
let index = -1;
for (let i = 0; i < nodes.length; i++) {
if (nodes[i] == node) {
contained = true;
index = i;
}
}
throw new Error('Not implemented: DragManager.prototype.remove');
}
_buildMouseMoveListener(workspace, dragNode, dragManager) {
@ -96,6 +92,8 @@ class DragManager {
event.preventDefault();
};
// allowed param reassign to avoid risks of existing code relying in this side-effect
// eslint-disable-next-line no-param-reassign
dragManager._mouseMoveListener = result;
return result;
}
@ -111,8 +109,11 @@ class DragManager {
screen.removeEvent('mouseup', dragManager._mouseUpListener);
// Help GC
// allowed param reassign to avoid risks of existing code relying in this side-effect
/* eslint-disable no-param-reassign */
dragManager._mouseMoveListener = null;
dragManager._mouseUpListener = null;
/* eslint-enable no-param-reassign */
workspace.enableWorkspaceEvents(true);
// Change the cursor to the default.
@ -129,6 +130,7 @@ class DragManager {
me._isDragInProcess = false;
}
};
// eslint-disable-next-line no-param-reassign
dragManager._mouseUpListener = result;
return result;
}

View File

@ -125,7 +125,7 @@ class DragPivot {
}
setVisibility(value) {
if (this.isVisible() != value) {
if (this.isVisible() !== value) {
const pivotRect = this._getPivotRect();
pivotRect.setVisibility(value);
@ -145,7 +145,7 @@ class DragPivot {
let result = null;
const parentTopic = this._targetTopic;
if (parentTopic) {
if (parentTopic.getType() == INodeModel.CENTRAL_TOPIC_TYPE) {
if (parentTopic.getType() === INodeModel.CENTRAL_TOPIC_TYPE) {
result = this._straightLine;
} else {
result = this._curvedLine;
@ -198,7 +198,7 @@ class DragPivot {
connectTo(targetTopic, position) {
$assert(!this._outgoingLine, 'Could not connect an already connected node');
$assert(targetTopic != this, 'Circular connection are not allowed');
$assert(targetTopic !== this, 'Circular connection are not allowed');
$assert(position, 'position can not be null');
$assert(targetTopic, 'parent can not be null');

View File

@ -71,7 +71,7 @@ class DragTopic {
this._draggedNode.getId(),
this.getPosition(),
);
if (this._order != predict.order) {
if (this._order !== predict.order) {
const dragPivot = this._getDragPivot();
const pivotPosition = predict.position;
dragPivot.connectTo(parent, pivotPosition);
@ -81,8 +81,10 @@ class DragTopic {
}
updateFreeLayout(event) {
const isFreeEnabled = (event.metaKey && Browser.Platform.mac) || (event.ctrlKey && !Browser.Platform.mac);
if (this.isFreeLayoutOn() != isFreeEnabled) {
const isFreeEnabled = (event.metaKey && Browser.Platform.mac)
|| (event.ctrlKey && !Browser.Platform.mac);
if (this.isFreeLayoutOn() !== isFreeEnabled) {
const dragPivot = this._getDragPivot();
dragPivot.setVisibility(!isFreeEnabled);
this._isFreeLayoutEnabled = isFreeEnabled;
@ -114,7 +116,8 @@ class DragTopic {
// Where it should be connected ?
// @todo: This is a hack for the access of the editor. It's required to review why this is needed forcing the declaration of a global variable.
// @todo: This is a hack for the access of the editor.
// It's required to review why this is needed forcing the declaration of a global variable.
const predict = designer._eventBussDispatcher._layoutManager.predict(
parent.getId(),
this._draggedNode.getId(),
@ -139,7 +142,8 @@ class DragTopic {
// Remove drag shadow.
workspace.removeChild(this._elem2d);
// Remove pivot shape. To improve performance it will not be removed. Only the visibility will be changed.
// Remove pivot shape. To improve performance it will not be removed.
// Only the visibility will be changed.
const dragPivot = this._getDragPivot();
dragPivot.setVisibility(false);
@ -213,13 +217,13 @@ class DragTopic {
}
}
DragTopic.init = function (workspace) {
DragTopic.init = function init(workspace) {
$assert(workspace, 'workspace can not be null');
const pivot = DragTopic.__getDragPivot();
workspace.append(pivot);
};
DragTopic.__getDragPivot = function () {
DragTopic.__getDragPivot = function __getDragPivot() {
let result = DragTopic._dragPivot;
if (!$defined(result)) {
result = new DragPivot();

View File

@ -1,4 +1,4 @@
export const PIVOT_SIZE = { width: 50, height: 6 };
const PIVOT_SIZE = { width: 50, height: 6 };
export default {
PIVOT_SIZE,

View File

@ -1,26 +0,0 @@
/*
* Copyright [2015] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
* "powered by wisemapping" text requirement on every single page;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the license at
*
* http://www.wisemapping.org/license
*
* 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.
*/
const EditorOptions = {
LayoutManager: 'OriginalLayout',
// LayoutManager:"FreeMindLayout",
textEditor: 'TextEditor',
// textEditor:"RichTextEditor"
};
export default EditorOptions;

View File

@ -41,12 +41,12 @@ class Events {
return this;
}
fireEvent(typeName, args, delay) {
fireEvent(typeName, eventArgs, delay) {
const type = Events._removeOn(typeName);
const events = this.$events[type];
if (!events) return this;
args = Array.isArray(args) ? args : [args];
const args = Array.isArray(eventArgs) ? eventArgs : [eventArgs];
events.forEach(((fn) => {
if (delay) {
fn.delay(delay, this, args);

View File

@ -17,7 +17,7 @@
*/
// eslint-disable-next-line max-classes-per-file
import { $assert, $defined } from '@wisemapping/core-js';
import { Group, Rect, Line } from '@wisemapping/web2d';
import { Group } from '@wisemapping/web2d';
import IconGroupRemoveTip from './IconGroupRemoveTip';
import Icon from './Icon';

View File

@ -1,6 +1,6 @@
import { Group, Rect, Line } from '@wisemapping/web2d';
import $ from 'jquery';
import { $assert, $defined } from '@wisemapping/core-js';
import { Group, Rect, Line } from '@wisemapping/web2d';
export default class RemoveTip {
/** @lends IconGroup.RemoveTip */
@ -160,6 +160,7 @@ export default class RemoveTip {
icon.addEvent('mouseout', () => {
me.hide();
});
// eslint-disable-next-line no-param-reassign
icon.__remove = true;
}
}

View File

@ -37,12 +37,11 @@ class ImageIcon extends Icon {
const image = this.getImage();
const me = this;
image.addEvent('click', () => {
const iconType = iconModel.getIconType();
const newIconType = ImageIcon._getNextFamilyIconId(iconType);
const iconTypeClick = iconModel.getIconType();
const newIconType = ImageIcon._getNextFamilyIconId(iconTypeClick);
iconModel.setIconType(newIconType);
const imgUrl = ImageIcon._getImageUrl(newIconType);
me._image.setHref(imgUrl);
me._image.setHref(ImageIcon._getImageUrl(newIconType));
});
this._image.setCursor('pointer');
}
@ -65,7 +64,7 @@ class ImageIcon extends Icon {
if (familyIcons[i] === iconId) {
// Is last one?
if (i === (familyIcons.length - 1)) {
result = familyIcons[0];
[result] = familyIcons;
} else {
result = familyIcons[i + 1];
}
@ -150,7 +149,8 @@ ImageIcon.prototype.ICON_FAMILIES = [
{ id: 'tag', icons: ['tag_blue', 'tag_green', 'tag_orange', 'tag_red', 'tag_pink', 'tag_yellow'] },
{
id: 'object',
icons: ['object_bell', 'object_clanbomber', 'object_key', 'object_pencil', 'object_phone', 'object_magnifier', 'object_clip', 'object_music', 'object_star', 'object_wizard', 'object_house', 'object_cake', 'object_camera', 'object_palette', 'object_rainbow'],
icons: ['object_bell', 'object_clanbomber', 'object_key', 'object_pencil', 'object_phone', 'object_magnifier', 'object_clip',
'object_music', 'object_star', 'object_wizard', 'object_house', 'object_cake', 'object_camera', 'object_palette', 'object_rainbow'],
},
{
id: 'weather',

View File

@ -18,12 +18,9 @@
import $ from 'jquery';
class Keyboard {
// eslint-disable-next-line class-methods-use-this
addShortcut(shortcuts, callback) {
if (!Array.isArray(shortcuts)) {
shortcuts = [shortcuts];
}
shortcuts.forEach((shortcut) => {
const shortcutsArray = Array.isArray(shortcuts) ? shortcuts : [shortcuts];
shortcutsArray.forEach((shortcut) => {
$(document).bind('keydown', shortcut, callback);
});
}

View File

@ -17,6 +17,8 @@
*/
import { $defined } from '@wisemapping/core-js';
import $ from 'jquery';
// TODO: use jquery.hotkeys from npm or setup eslint-import-resolver-alias plugin
// eslint-disable-next-line import/no-unresolved, import/no-extraneous-dependencies
import initHotKeyPluggin from '@libraries/jquery.hotkeys';
import Events from './Events';
import ActionDispatcher from './ActionDispatcher';
@ -56,6 +58,8 @@ class MultilineTextEditor extends Events {
_registerEvents(containerElem) {
const textareaElem = this._getTextareaElem();
const me = this;
let start;
let end;
textareaElem.on('keydown', function keydown(event) {
switch ($.hotkeys.specialKeys[event.keyCode]) {
case 'esc':
@ -92,8 +96,8 @@ class MultilineTextEditor extends Events {
break;
case 'tab': {
event.preventDefault();
const start = $(this).get(0).selectionStart;
const end = $(this).get(0).selectionEnd;
start = $(this).get(0).selectionStart;
end = $(this).get(0).selectionEnd;
// set textarea value to: text before caret + tab + text after caret
$(this).val(`${$(this).val().substring(0, start)}\t${$(this).val().substring(end)}`);
@ -157,7 +161,7 @@ class MultilineTextEditor extends Events {
}
_updateModel() {
if (this._topic.getText() != this._getText()) {
if (this._topic.getText() !== this._getText()) {
const text = this._getText();
const topicId = this._topic.getId();
@ -223,6 +227,8 @@ class MultilineTextEditor extends Events {
_setStyle(fontStyle) {
const inputField = this._getTextareaElem();
// allowed param reassign to avoid risks of existing code relying in this side-effect
/* eslint-disable no-param-reassign */
if (!$defined(fontStyle.font)) {
fontStyle.font = 'Arial';
}
@ -235,6 +241,7 @@ class MultilineTextEditor extends Events {
if (!$defined(fontStyle.size)) {
fontStyle.size = 12;
}
/* eslint-enable no-param-reassign */
const style = {
fontSize: `${fontStyle.size}px`,
fontFamily: fontStyle.font,
@ -276,8 +283,12 @@ class MultilineTextEditor extends Events {
const range = textareaElem.createTextRange();
range.move('character', lengh);
} else {
// allowed param reassign to avoid risks of existing code relying in this side-effect
/* eslint-disable no-param-reassign */
textareaElem.selectionStart = lengh;
textareaElem.selectionEnd = lengh;
/* eslint-enable no-param-reassign */
textareaElem.focus();
}
}

View File

@ -52,7 +52,7 @@ class NodeGraph {
* @throws will throw an error if the topic id is not a number
*/
setId(id) {
$assert(typeof topic.getId() === 'number', `id is not a number:${id}`);
$assert(typeof id === 'number', `id is not a number:${id}`);
this.getModel().setId(id);
}

View File

@ -61,7 +61,8 @@ class NoteIcon extends Icon {
if ($('body').find('#textPopoverNote').length === 1) {
const text = $('body').find('#textPopoverNote');
text.text(this._linksModel.getText());
} else {
return text;
}
const result = $('<div id="textPopoverNote"></div>').css({ padding: '5px' });
const text = $('<div></div>').text(this._linksModel.getText())
@ -72,7 +73,6 @@ class NoteIcon extends Icon {
result.append(text);
return result;
}
}
getModel() {
return this._linksModel;

View File

@ -6,14 +6,15 @@ class Options {
this.options = options;
if (this.addEvent) {
for (const option in options) {
if (typeof (options[option]) !== 'function' || !(/^on[A-Z]/).test(option)) {
continue;
}
const optionsKeys = Object.keys(options);
for (let index = 0; index < optionsKeys.length; index++) {
const option = optionsKeys[index];
if (typeof (options[option]) === 'function' && (/^on[A-Z]/).test(option)) {
this.addEvent(option, options[option]);
delete options[option];
}
}
}
return this;
}
}

View File

@ -63,13 +63,11 @@ class PersistenceManager {
}
}
PersistenceManager.init = function init(instance) {
PersistenceManager.init = (instance) => {
PersistenceManager._instance = instance;
};
PersistenceManager.getInstance = function getInstance() {
return PersistenceManager._instance;
};
PersistenceManager.getInstance = () => PersistenceManager._instance;
PersistenceManager.loadFromDom = function loadFromDom(mapId, mapDom) {
$assert(mapId, 'mapId can not be null');

View File

@ -229,7 +229,8 @@ class Relationship extends ConnectionLine {
this._focusShape.updateLine();
}
addEvent(type, listener) {
addEvent(eventType, listener) {
let type = eventType;
// Translate to web 2d events ...
if (type === 'onfocus') {
type = 'mousedown';

View File

@ -64,8 +64,8 @@ class RESTPersistenceManager extends PersistenceManager {
contentType: 'application/json; charset=utf-8',
async: !sync,
success(data, textStatus, jqXHRresponseText) {
persistence.timestamp = data;
success(successData, textStatus, jqXHRresponseText) {
persistence.timestamp = successData;
events.onSuccess();
},
error(jqXHR, textStatus, errorThrown) {
@ -92,7 +92,7 @@ class RESTPersistenceManager extends PersistenceManager {
// Message could not be decoded ...
}
userMsg = persistence._buildError(serverMsg);
} else if (this.status == 405) {
} else if (this.status === 405) {
userMsg = { severity: 'SEVERE', message: $msg('SESSION_EXPIRED') };
}
events.onError(userMsg);

View File

@ -115,9 +115,9 @@ class StandaloneActionDispatcher extends ActionDispatcher {
$assert(topicIds, 'topicIds can not be null');
$assert(fontFamily, 'fontFamily can not be null');
const commandFunc = (topic, fontFamily) => {
const commandFunc = (topic, commandFontFamily) => {
const result = topic.getFontFamily();
topic.setFontFamily(fontFamily, true);
topic.setFontFamily(commandFontFamily, true);
topic._adjustShapes();
return result;
@ -132,9 +132,9 @@ class StandaloneActionDispatcher extends ActionDispatcher {
$assert(topicsIds, 'topicIds can not be null');
$assert(color, 'color can not be null');
const commandFunc = (topic, color) => {
const commandFunc = (topic, commandColor) => {
const result = topic.getFontColor();
topic.setFontColor(color, true);
topic.setFontColor(commandColor, true);
return result;
};
@ -148,9 +148,9 @@ class StandaloneActionDispatcher extends ActionDispatcher {
$assert(topicsIds, 'topicIds can not be null');
$assert(color, 'color can not be null');
const commandFunc = (topic, color) => {
const commandFunc = (topic, commandColor) => {
const result = topic.getBackgroundColor();
topic.setBackgroundColor(color);
topic.setBackgroundColor(commandColor);
return result;
};
@ -164,9 +164,9 @@ class StandaloneActionDispatcher extends ActionDispatcher {
$assert(topicsIds, 'topicIds can not be null');
$assert(color, 'topicIds can not be null');
const commandFunc = (topic, color) => {
const commandFunc = (topic, commandColor) => {
const result = topic.getBorderColor();
topic.setBorderColor(color);
topic.setBorderColor(commandColor);
return result;
};
@ -180,9 +180,9 @@ class StandaloneActionDispatcher extends ActionDispatcher {
$assert(topicsIds, 'topicIds can not be null');
$assert(size, 'size can not be null');
const commandFunc = (topic, size) => {
const commandFunc = (topic, commandSize) => {
const result = topic.getFontSize();
topic.setFontSize(size, true);
topic.setFontSize(commandSize, true);
topic._adjustShapes();
return result;
@ -197,9 +197,9 @@ class StandaloneActionDispatcher extends ActionDispatcher {
$assert(topicsIds, 'topicsIds can not be null');
$assert(shapeType, 'shapeType can not be null');
const commandFunc = (topic, shapeType) => {
const commandFunc = (topic, commandShapeType) => {
const result = topic.getShapeType();
topic.setShapeType(shapeType, true);
topic.setShapeType(commandShapeType, true);
return result;
};

View File

@ -1,259 +0,0 @@
/*
* Copyright [2015] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
* "powered by wisemapping" text requirement on every single page;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the license at
*
* http://www.wisemapping.org/license
* 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.
*/
import { $defined } from '@wisemapping/core-js';
import { TransformUtil } from '@wisemapping/web2d';
import ActionDispatcher from './ActionDispatcher';
// FIXME: Not used!
class TextEditor {
constructor(topic) {
this._topic = topic;
}
_buildEditor() {
this._size = { width: 500, height: 100 };
const result = new Element('div');
result.setStyles({
position: 'absolute',
display: 'none',
zIndex: '8',
width: '500px',
height: '100px',
});
const inputContainer = new Element('div');
inputContainer.setStyles({
border: 'none',
overflow: 'auto',
});
inputContainer.inject(result);
const inputText = new Element('input', {
type: 'text',
tabindex: '-1',
value: '',
});
inputText.setStyles({
border: 'none',
background: 'transparent',
});
inputText.inject(inputContainer);
const spanContainer = new Element('div');
spanContainer.setStyle('visibility', 'hidden');
spanContainer.inject(result);
const spanElem = new Element('span', { tabindex: '-1' });
spanElem.setStyle('white-space', 'nowrap');
spanElem.setStyle('nowrap', 'nowrap');
spanElem.inject(spanContainer);
return result;
}
_registerEvents(divElem) {
const inputElem = this._getTextareaElem();
const spanElem = this._getSpanElem();
const me = this;
divElem.addEvent('keydown', (event) => {
switch (event.key) {
case 'esc':
me.close(false);
break;
case 'enter':
me.close(true);
break;
default:
spanElem.innerHTML = inputElem.value;
var size = inputElem.value.length + 1;
inputElem.size = size;
if (spanElem.offsetWidth > parseInt(divElem.style.width, 10) - 100) {
divElem.style.width = `${spanElem.offsetWidth + 100}px`;
}
break;
}
event.stopPropagation();
});
// If the user clicks on the input, all event must be ignored ...
divElem.addEvent('click', (event) => {
event.stopPropagation();
});
divElem.addEvent('dblclick', (event) => {
event.stopPropagation();
});
divElem.addEvent('mousedown', (event) => {
event.stopPropagation();
});
}
isVisible() {
return $defined(this._containerElem) && this._containerElem.getStyle('display') === 'block';
}
_updateModel() {
if (this._topic.getText() !== this._getText()) {
const text = this._getText();
const topicId = this._topic.getId();
const actionDispatcher = ActionDispatcher.getInstance();
actionDispatcher.changeTextToTopic([topicId], text);
}
}
show(text) {
if (!this.isVisible()) {
// Create editor ui
const editorElem = this._buildEditor();
editorElem.inject($(document.body)[0]);
this._containerElem = editorElem;
this._registerEvents(editorElem);
this._showEditor(text);
}
}
_showEditor(defaultText) {
const topic = this._topic;
// Hide topic text ...
topic.getTextShape().setVisibility(false);
// Set Editor Style
const nodeText = topic.getTextShape();
const font = nodeText.getFont();
font.size = nodeText.getHtmlFontSize();
font.color = nodeText.getColor();
this._setStyle(font);
// Set editor's initial text
const text = $defined(defaultText) ? defaultText : topic.getText();
this._setText(text);
const me = this;
// Set editor's initial size
const displayFunc = function () {
// Position the editor and set the size...
const textShape = me._topic.getTextShape();
me._containerElem.css('display', 'block');
me._containerElem.offset(textShape.getNativePosition());
// Set size ...
const elemSize = topic.getSize();
me._setEditorSize(elemSize.width, elemSize.height);
const textareaElem = me._getTextareaElem();
textareaElem.focus();
me._positionCursor(textareaElem, !$defined(defaultText));
};
displayFunc.delay(10);
}
_setStyle(fontStyle) {
const inputField = this._getTextareaElem();
const spanField = this._getSpanElem();
if (!$defined(fontStyle.font)) {
fontStyle.font = 'Arial';
}
if (!$defined(fontStyle.style)) {
fontStyle.style = 'normal';
}
if (!$defined(fontStyle.weight)) {
fontStyle.weight = 'normal';
}
if (!$defined(fontStyle.size)) {
fontStyle.size = 12;
}
inputField.style.fontSize = `${fontStyle.size}px`;
inputField.style.fontFamily = fontStyle.font;
inputField.style.fontStyle = fontStyle.style;
inputField.style.fontWeight = fontStyle.weight;
inputField.style.color = fontStyle.color;
spanField.style.fontFamily = fontStyle.font;
spanField.style.fontStyle = fontStyle.style;
spanField.style.fontWeight = fontStyle.weight;
spanField.style.fontSize = `${fontStyle.size}px`;
}
_setText(text) {
const inputField = this._getTextareaElem();
inputField.size = text.length + 1;
this._containerElem.style.width = `${inputField.size * parseInt(inputField.style.fontSize, 10) + 100
}px`;
const spanField = this._getSpanElem();
spanField.innerHTML = text;
inputField.value = text;
}
_getText() {
return this._getTextareaElem().value;
}
_getTextareaElem() {
return this._containerElem.getElement('input');
}
_getSpanElem() {
return this._containerElem.getElement('span');
}
_setEditorSize(width, height) {
const textShape = this._topic.getTextShape();
const scale = TransformUtil.workoutScale(textShape.peer);
this._size = { width: width * scale.width, height: height * scale.height };
this._containerElem.style.width = `${this._size.width * 2}px`;
this._containerElem.style.height = `${this._size.height}px`;
}
_positionCursor(inputElem, selectText) {
// Select text if it's required ...
if (inputElem.createTextRange) {
// ie
const range = inputElem.createTextRange();
const pos = inputElem.value.length;
if (!selectText) {
range.select();
range.move('character', pos);
} else {
range.move('character', pos);
range.select();
}
} else if (!selectText) {
inputElem.setSelectionRange(0, inputElem.value.length);
}
}
close(update) {
if (this.isVisible()) {
// Update changes ...
if (!$defined(update) || update) {
this._updateModel();
}
// Let make the visible text in the node visible again ...
this._topic.getTextShape().setVisibility(true);
// Remove it form the screen ...
this._containerElem.dispose();
this._containerElem = null;
}
}
}
export default TextEditor;

View File

@ -1,30 +0,0 @@
/*
* Copyright [2015] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
* "powered by wisemapping" text requirement on every single page;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the license at
*
* http://www.wisemapping.org/license
*
* 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.
*/
import TextEditor from './TextEditor';
const TextEditorFactory = {};
TextEditorFactory.getTextEditorFromName = function (name) {
let editorClass = null;
if (name == 'RichTextEditor') {
editorClass = RichTextEditor;
} else {
editorClass = TextEditor;
}
return editorClass;
};

View File

@ -15,9 +15,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { $assert, $defined } from '@wisemapping/core-js';
import { Rect, Image, Line, Text, Group } from '@wisemapping/web2d';
import $ from 'jquery';
import { $assert, $defined } from '@wisemapping/core-js';
import {
Rect, Image, Line, Text, Group,
} from '@wisemapping/web2d';
import NodeGraph from './NodeGraph';
import TopicConfig from './TopicConfig';
@ -507,10 +509,11 @@ class Topic extends NodeGraph {
setText(text) {
// Avoid empty nodes ...
if (!text || $.trim(text).length === 0) {
text = null;
this._setText(null, true);
} else {
this._setText(text, true);
}
this._setText(text, true);
this._adjustShapes();
}
@ -825,7 +828,10 @@ class Topic extends NodeGraph {
*/
setPosition(point) {
$assert(point, 'position can not be null');
// allowed param reassign to avoid risks of existing code relying in this side-effect
// eslint-disable-next-line no-param-reassign
point.x = Math.ceil(point.x);
// eslint-disable-next-line no-param-reassign
point.y = Math.ceil(point.y);
// Update model's position ...
@ -1006,11 +1012,11 @@ class Topic extends NodeGraph {
const children = this.getChildren();
const model = this.getModel();
isVisible = isVisible ? !model.areChildrenShrunken() : isVisible;
const visibility = isVisible ? !model.areChildrenShrunken() : isVisible;
children.forEach((child) => {
child.setVisibility(isVisible);
child.setVisibility(visibility);
const outgoingLine = child.getOutgoingLine();
outgoingLine.setVisibility(isVisible);
outgoingLine.setVisibility(visibility);
});
}
@ -1030,26 +1036,27 @@ class Topic extends NodeGraph {
setSize(size, force) {
$assert(size, 'size can not be null');
$assert($defined(size.width), 'size seem not to be a valid element');
size = { width: Math.ceil(size.width), height: Math.ceil(size.height) };
const roundedSize = { width: Math.ceil(size.width), height: Math.ceil(size.height) };
const oldSize = this.getSize();
const hasSizeChanged = oldSize.width !== size.width || oldSize.height !== size.height;
const hasSizeChanged = oldSize.width !== roundedSize.width
|| oldSize.height !== roundedSize.height;
if (hasSizeChanged || force) {
NodeGraph.prototype.setSize.call(this, size);
NodeGraph.prototype.setSize.call(this, roundedSize);
const outerShape = this.getOuterShape();
const innerShape = this.getInnerShape();
outerShape.setSize(size.width + 4, size.height + 6);
innerShape.setSize(size.width, size.height);
outerShape.setSize(roundedSize.width + 4, roundedSize.height + 6);
innerShape.setSize(roundedSize.width, roundedSize.height);
// Update the figure position(ej: central topic must be centered) and children position.
this._updatePositionOnChangeSize(oldSize, size);
this._updatePositionOnChangeSize(oldSize, roundedSize);
if (hasSizeChanged) {
EventBus.instance.fireEvent(EventBus.events.NodeResizeEvent, {
node: this.getModel(),
size,
size: roundedSize,
});
}
}

View File

@ -3,13 +3,13 @@
* @type {Number}
* @default
*/
export const CONNECTOR_WIDTH = 6;
const CONNECTOR_WIDTH = 6;
/**
* @constant
* @type {Object<String, Number>}
* @default
*/
export const OUTER_SHAPE_ATTRIBUTES = {
const OUTER_SHAPE_ATTRIBUTES = {
fillColor: 'rgb(252,235,192)',
stroke: '1 dot rgb(241,163,39)',
x: 0,
@ -20,13 +20,13 @@ export const OUTER_SHAPE_ATTRIBUTES = {
* @type {Object<String, Number>}
* @default
*/
export const OUTER_SHAPE_ATTRIBUTES_FOCUS = { fillColor: 'rgb(244,184,45)', x: 0, y: 0 };
const OUTER_SHAPE_ATTRIBUTES_FOCUS = { fillColor: 'rgb(244,184,45)', x: 0, y: 0 };
/**
* @constant
* @type {Object<String>}
* @default
* */
export const INNER_RECT_ATTRIBUTES = { stroke: '2 solid' };
const INNER_RECT_ATTRIBUTES = { stroke: '2 solid' };
export default {
CONNECTOR_WIDTH,

View File

@ -66,9 +66,9 @@ const TopicFeature = {
$assert(type, 'type can not be null');
$assert(attributes, 'attributes can not be null');
const { model } = TopicFeature._featuresMetadataById.filter((elem) => elem.id === type)[0];
// eslint-disable-next-line new-cap
return new model(attributes);
const { model: Model } = TopicFeature._featuresMetadataById
.filter((elem) => elem.id === type)[0];
return new Model(attributes);
},
/**
@ -83,9 +83,9 @@ const TopicFeature = {
$assert(topic, 'topic can not be null');
$assert(model, 'model can not be null');
const { icon } = TopicFeature._featuresMetadataById.filter((elem) => elem.id === model.getType())[0];
// eslint-disable-next-line new-cap
return new icon(topic, model, readOnly);
const { icon: Icon } = TopicFeature._featuresMetadataById
.filter((elem) => elem.id === model.getType())[0];
return new Icon(topic, model, readOnly);
},
};

View File

@ -105,8 +105,8 @@ class Workspace {
// View port coords ...
if (this._viewPort) {
this._viewPort.width = this._viewPort.width * zoom;
this._viewPort.height = this._viewPort.height * zoom;
this._viewPort.width *= zoom;
this._viewPort.height *= zoom;
}
// Center topic....
@ -166,8 +166,8 @@ class Workspace {
const originalCoordOrigin = workspace.getCoordOrigin();
let wasDragged = false;
workspace._mouseMoveListener = function _mouseMoveListener(event) {
const currentMousePosition = screenManager.getWorkspaceMousePosition(event);
workspace._mouseMoveListener = (mouseMoveEvent) => {
const currentMousePosition = screenManager.getWorkspaceMousePosition(mouseMoveEvent);
const offsetX = currentMousePosition.x - mouseDownPosition.x;
const coordOriginX = -offsetX + originalCoordOrigin.x;
@ -183,7 +183,7 @@ class Workspace {
} else {
window.document.body.style.cursor = 'move';
}
event.preventDefault();
mouseMoveEvent.preventDefault();
// Fire drag event ...
screenManager.fireEvent('update');
@ -192,7 +192,7 @@ class Workspace {
screenManager.addEvent('mousemove', workspace._mouseMoveListener);
// Register mouse up listeners ...
workspace._mouseUpListener = function mouseUpListener() {
workspace._mouseUpListener = () => {
screenManager.removeEvent('mousemove', workspace._mouseMoveListener);
screenManager.removeEvent('mouseup', workspace._mouseUpListener);
workspace._mouseUpListener = null;

View File

@ -53,7 +53,9 @@ class DeleteCommand extends Command {
// Delete relationships
const relationships = this._collectInDepthRelationships(topic);
this._deletedRelModel = this._deletedRelModel.concat(relationships.map((rel) => rel.getModel().clone()));
this._deletedRelModel = this._deletedRelModel.concat(
relationships.map((rel) => rel.getModel().clone()),
);
relationships.forEach((relationship) => {
commandContext.deleteRelationship(relationship);
@ -162,7 +164,8 @@ class DeleteCommand extends Command {
// Filter for unique ...
result = result.sort((a, b) => a.getModel().getId() - b.getModel().getId());
const ret = [result[0]];
for (let i = 1; i < result.length; i++) { // start loop at 1 as element 0 can never be a duplicate
// start loop at 1 as element 0 can never be a duplicate
for (let i = 1; i < result.length; i++) {
if (result[i - 1] !== result[i]) {
ret.push(result[i]);
}

View File

@ -24,7 +24,7 @@ class DragTopicCommand extends Command {
* @constructs
* @param {String} topicId id of the topic to drag
* @param {Object} position
* @param {Number} order the order property (children of one node are displayed in order from 0 to n)
* @param {Number} order the order property (children are displayed in order from 0 to n)
* @param {mindplot.Topic} parentTopic the topic to be made the dragged topic's new parent
* @extends mindplot.Command
*/

View File

@ -50,11 +50,12 @@ class GenericFunctionCommand extends Command {
try {
topics = commandContext.findTopics(this._topicsId);
} catch (e) {
if (this._commandFunc.commandType != 'changeTextToTopic') {
if (this._commandFunc.commandType !== 'changeTextToTopic') {
// Workaround: For some reason, there is a combination of events that involves
// making some modification and firing out of focus event. This is causing
// that a remove node try to be removed. In some other life, I will come with the solution.
// Almost aways occurs with IE9. I could be related with some change of order in sets o something similar.
// that a remove node try to be removed.
// In some other life, I will come with the solution. Almost aways occurs with IE9.
// I could be related with some change of order in sets o something similar.
throw e;
}
}

View File

@ -1,3 +1,4 @@
/* eslint-disable camelcase */
/*
* Copyright [2015] [wisemapping]
*

View File

@ -34,7 +34,8 @@ class AbstractBasicSorter extends ChildrenSorterStrategy {
}
_computeChildrenHeight(treeSet, node, heightCache) {
const height = node.getSize().height + this._getVerticalPadding() * 2; // 2* Top and down padding;
// 2* Top and down padding;
const height = node.getSize().height + this._getVerticalPadding() * 2;
let result;
const children = treeSet.getChildren(node);
@ -51,6 +52,7 @@ class AbstractBasicSorter extends ChildrenSorterStrategy {
}
if (heightCache) {
// eslint-disable-next-line no-param-reassign
heightCache[node.getId()] = result;
}

View File

@ -42,14 +42,16 @@ class BalancedSorter extends AbstractBasicSorter {
+ node.getSize().width / 2
+ BalancedSorter.INTERNODE_HORIZONTAL_PADDING);
const xPos = direction > 0
? position.x >= limitXPos
? position.x
: limitXPos
: position.x <= limitXPos
let xPos;
if (direction > 0) {
xPos = position.x >= limitXPos
? position.x
: limitXPos;
} else {
xPos = position.x <= limitXPos
? position.x
: limitXPos;
}
return [0, { x: xPos, y: position.y }];
}
@ -80,17 +82,21 @@ class BalancedSorter extends AbstractBasicSorter {
left = this._getChildrenForOrder(parent, graph, 1);
}
// Filter nodes on one side..
const order = position
? position.x > rootNode.getPosition().x
let order;
if (position) {
order = position.x > rootNode.getPosition().x
? 0
: 1
: right.length - left.length > 0
: 1;
} else {
order = right.length - left.length > 0
? 1
: 0;
}
const direction = order % 2 === 0 ? 1 : -1;
// Exclude the dragged node (if set)
const children = this._getChildrenForOrder(parent, graph, order).filter((child) => child !== node);
const children = this._getChildrenForOrder(parent, graph, order)
.filter((child) => child !== node);
// No children?
if (children.length === 0) {
@ -110,10 +116,10 @@ class BalancedSorter extends AbstractBasicSorter {
// Try to fit within ...
let result = null;
const last = children[children.length - 1];
position = position || { x: last.getPosition().x, y: last.getPosition().y + 1 };
const newestPosition = position || { x: last.getPosition().x, y: last.getPosition().y + 1 };
children.forEach((child, index) => {
const cpos = child.getPosition();
if (position.y > cpos.y) {
if (newestPosition.y > cpos.y) {
const yOffset = child === last
? child.getSize().height + BalancedSorter.INTERNODE_VERTICAL_PADDING * 2
: (children[index + 1].getPosition().y - child.getPosition().y) / 2;
@ -205,7 +211,8 @@ class BalancedSorter extends AbstractBasicSorter {
order: child.getOrder(),
width: child.getSize().width,
height: this._computeChildrenHeight(treeSet, child),
})).reverse();
}))
.reverse();
// Compute the center of the branch ...
let totalPHeight = 0;
@ -289,7 +296,8 @@ class BalancedSorter extends AbstractBasicSorter {
}
_getChildrenForOrder(parent, graph, order) {
return this._getSortedChildren(graph, parent).filter((child) => child.getOrder() % 2 === order % 2);
return this._getSortedChildren(graph, parent)
.filter((child) => child.getOrder() % 2 === order % 2);
}
_getVerticalPadding() {

View File

@ -37,7 +37,9 @@ class EventBusDispatcher {
EventBus.instance.addEvent(EventBus.events.NodeRemoved, this._nodeRemoved.bind(this));
EventBus.instance.addEvent(EventBus.events.NodeResizeEvent, this._nodeResizeEvent.bind(this));
EventBus.instance.addEvent(EventBus.events.NodeMoveEvent, this._nodeMoveEvent.bind(this));
EventBus.instance.addEvent(EventBus.events.NodeDisconnectEvent, this._nodeDisconnectEvent.bind(this));
EventBus.instance.addEvent(
EventBus.events.NodeDisconnectEvent, this._nodeDisconnectEvent.bind(this),
);
EventBus.instance.addEvent(EventBus.events.NodeConnectEvent, this._nodeConnectEvent.bind(this));
EventBus.instance.addEvent(EventBus.events.NodeShrinkEvent, this._nodeShrinkEvent.bind(this));
EventBus.instance.addEvent(EventBus.events.DoLayout, this._doLayout.bind(this));
@ -56,7 +58,9 @@ class EventBusDispatcher {
}
_nodeConnectEvent(args) {
this._layoutManager.connectNode(args.parentNode.getId(), args.childNode.getId(), args.childNode.getOrder());
this._layoutManager.connectNode(
args.parentNode.getId(), args.childNode.getId(), args.childNode.getOrder(),
);
}
_nodeShrinkEvent(node) {

View File

@ -40,14 +40,14 @@ class GridSorter extends AbstractBasicSorter {
// Calculate the offsets ...
const result = {};
for (let i = 0; i < heights.length; i++) {
const even = i % 2 == 0 ? 1 : -1;
const even = i % 2 === 0 ? 1 : -1;
const zeroHeight = i == 0 ? 0 : heights[0].height / 2 * even;
const zeroHeight = i === 0 ? 0 : ((heights[0].height / 2) * even);
let middleHeight = 0;
for (let j = i - 2; j > 0; j -= 2) {
middleHeight += heights[j].height * even;
}
const finalHeight = i == 0 ? 0 : heights[i].height / 2 * even;
const finalHeight = i === 0 ? 0 : ((heights[i].height / 2) * even);
const yOffset = zeroHeight + middleHeight + finalHeight;
const xOffset = node.getSize().width + GridSorter.GRID_HORIZONTAR_SIZE;

View File

@ -90,7 +90,9 @@ class LayoutManager extends Events {
const node = this._treeSet.find(id);
// @Todo: this should not be here. This is broking the isolated node support...
// node.setFree(true);
// node.setFreeDisplacement({x:position.x - node.getPosition().x, y:position.y - node.getPosition().y});
// node.setFreeDisplacement(
// {x:position.x - node.getPosition().x, y:position.y - node.getPosition().y}
// );
node.setPosition(position);
}
@ -193,14 +195,13 @@ class LayoutManager extends Events {
* @throws will throw an error if containerId is null or undefined
* @return canvas
*/
plot(containerId, size) {
plot(containerId, size = { width: 200, height: 200 }) {
// this method is only used from tests that include Raphael
if (!global.Raphael) {
console.warn('Raphael.js not found, exiting plot()');
return null;
}
$assert(containerId, 'containerId cannot be null');
size = size || { width: 200, height: 200 };
const squaresize = 10;
const canvas = global.Raphael(containerId, size.width, size.height);
canvas.drawGrid(
@ -243,11 +244,9 @@ class LayoutManager extends Events {
}
_collectChanges(nodes) {
if (!nodes) {
nodes = this._treeSet.getTreeRoots();
}
const nodesToCollect = nodes || this._treeSet.getTreeRoots();
nodes.forEach(((node) => {
nodesToCollect.forEach(((node) => {
if (node.hasOrderChanged() || node.hasPositionChanged()) {
// Find or create a event ...
const id = node.getId();

View File

@ -101,6 +101,7 @@ class OriginalLayout {
const parentHeightChanged = $defined(parent) ? parent._heightChanged : false;
const heightChanged = node._branchHeight !== newBranchHeight;
// eslint-disable-next-line no-param-reassign
node._heightChanged = heightChanged || parentHeightChanged;
if (childrenOrderMoved || childrenSizeChanged || heightChanged || parentHeightChanged) {
@ -139,6 +140,7 @@ class OriginalLayout {
me._treeSet.updateBranchPosition(child, newPos);
});
// eslint-disable-next-line no-param-reassign
node._branchHeight = newBranchHeight;
}
@ -212,9 +214,9 @@ class OriginalLayout {
);
siblingsToShift.forEach(((sibling) => {
const overlappingOccurs = shiftedBranches
// eslint-disable-next-line max-len
.some(((shiftedBranch) => OriginalLayout._branchesOverlap(shiftedBranch, sibling, heightById)));
const overlappingOccurs = shiftedBranches.some(
((shiftedBranch) => OriginalLayout._branchesOverlap(shiftedBranch, sibling, heightById)),
);
if (!sibling.isFree() || overlappingOccurs) {
const sAmount = node.getFreeDisplacement().y;

View File

@ -37,6 +37,7 @@ class RootedTreeSet {
}
_decodate(node) {
// eslint-disable-next-line no-param-reassign
node._children = [];
return node;
}
@ -112,7 +113,7 @@ class RootedTreeSet {
* @throws will throw an error if node cannot be found
* @return node
*/
find(id, validate) {
find(id, validate = true) {
$assert($defined(id), 'id can not be null');
const graphs = this._rootNodes;
@ -124,7 +125,6 @@ class RootedTreeSet {
break;
}
}
validate = !$defined(validate) ? true : validate;
$assert(
validate ? result : true,
`node could not be found id:${id}\n,RootedTreeSet${this.dump()}`,
@ -299,11 +299,14 @@ class RootedTreeSet {
`${node.getId()}[${order}]`,
);
text.attr('fill', '#FFF');
const fillColor = this._rootNodes.includes(node)
? '#000'
: node.isFree()
let fillColor;
if (this._rootNodes.includes(node)) {
fillColor = '#000';
} else {
fillColor = node.isFree()
? '#abc'
: '#c00';
}
rect.attr('fill', fillColor);
const rectPosition = {
@ -397,10 +400,11 @@ class RootedTreeSet {
/**
* @param node
* @param yOffset
* @return siblings in the offset (vertical) direction, i.e. with lower or higher order, respectively
* @return siblings in the offset (vertical) direction, i.e. with lower or higher order
*/
getSiblingsInVerticalDirection(node, yOffset) {
// siblings with lower or higher order, depending on the direction of the offset and on the same side as their parent
// siblings with lower or higher order
// (depending on the direction of the offset and on the same side as their parent)
const parent = this.getParent(node);
const siblings = this.getSiblings(node).filter((sibling) => {
const sameSide = node.getPosition().x > parent.getPosition().x
@ -429,7 +433,8 @@ class RootedTreeSet {
// direct descendants of the root that do not contain the node and are on the same side
// and on the direction of the offset
const rootNode = this.getRootNode(node);
const branches = this.getChildren(rootNode).filter(((child) => this._find(node.getId(), child)));
const branches = this.getChildren(rootNode)
.filter(((child) => this._find(node.getId(), child)));
const branch = branches[0];
const rootDescendants = this.getSiblings(branch).filter((sibling) => {

View File

@ -49,15 +49,16 @@ class SymmetricSorter extends AbstractBasicSorter {
+ node.getSize().width / 2
+ SymmetricSorter.INTERNODE_HORIZONTAL_PADDING);
// eslint-disable-next-line no-nested-ternary
const xPos = direction > 0
? position.x >= limitXPos
? position.x
: limitXPos
: position.x <= limitXPos
let xPos;
if (direction > 0) {
xPos = position.x >= limitXPos
? position.x
: limitXPos;
} else {
xPos = position.x <= limitXPos
? position.x
: limitXPos;
}
return [0, { x: xPos, y: position.y }];
}
@ -97,7 +98,9 @@ class SymmetricSorter extends AbstractBasicSorter {
if (parentChildren.length === 0) {
// Fit as a child of the parent node...
const result = {
x: parent.getPosition().x + positionDirection * (parent.getSize().width + SymmetricSorter.INTERNODE_HORIZONTAL_PADDING),
x: parent.getPosition().x
+ positionDirection
* (parent.getSize().width + SymmetricSorter.INTERNODE_HORIZONTAL_PADDING),
y: parent.getPosition().y,
};

View File

@ -97,13 +97,13 @@ class BootstrapDialog extends Options {
}
onAcceptClick(event) {
throw 'Unsupported operation';
throw new Error('Unsupported operation');
}
onDialogShown() {}
onRemoveClick(event) {
throw 'Unsupported operation';
throw new Error('Unsupported operation');
}
show() {

View File

@ -16,6 +16,7 @@
* limitations under the License.
*/
import $ from 'jquery';
import { $defined } from '@wisemapping/core-js';
import BootstrapDialog from './BootstrapDialog';
class BootstrapDialogRequest extends BootstrapDialog {
@ -48,9 +49,11 @@ class BootstrapDialogRequest extends BootstrapDialog {
this._native.find('.modal-body').load(url, () => {
me.acceptButton.unbind('click').click(() => {
submitDialogForm();
if ($defined(global.submitDialogForm) && typeof (global.submitDialogForm) === 'function') {
global.submitDialogForm();
}
});
me._native.on('hidden.bs.modal', () => {
me._native.on('hidden.bs.modal', function onModalHide() {
$(this).remove();
});
me.show();
@ -58,8 +61,8 @@ class BootstrapDialogRequest extends BootstrapDialog {
}
onDialogShown() {
if (onDialogShown instanceof Function) {
onDialogShown();
if ($defined(global.onDialogShown) && typeof (global.onDialogShown) === 'function') {
global.onDialogShown();
}
}
}

View File

@ -18,6 +18,9 @@
*/
import { $assert, $defined } from '@wisemapping/core-js';
// regex taken from https://stackoverflow.com/a/34763398/58128
const parseJsObject = (str) => JSON.parse(str.replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": '));
class INodeModel {
constructor(mindmap) {
$assert(mindmap && mindmap.getBranches, 'mindmap can not be null');
@ -31,16 +34,17 @@ class INodeModel {
/** */
setId(id) {
if ($defined(id) && id > INodeModel._uuid) {
if (!$defined(id)) {
const newId = INodeModel._nextUUID();
this.putProperty('id', newId);
} else {
if (id > INodeModel._uuid) {
$assert(Number.isFinite(id));
INodeModel._uuid = id;
}
if (!$defined(id)) {
id = INodeModel._nextUUID();
}
this.putProperty('id', id);
}
}
/** */
getType() {
@ -74,7 +78,7 @@ class INodeModel {
const value = this.getProperty('position');
let result = null;
if (value != null) {
result = eval(`(${value})`);
result = parseJsObject(value);
}
return result;
}
@ -89,7 +93,7 @@ class INodeModel {
const value = this.getProperty('imageSize');
let result = null;
if (value != null) {
result = eval(`(${value})`);
result = parseJsObject(value);
}
return result;
}

View File

@ -121,8 +121,7 @@ class Mindmap extends IMindmap {
* @param id
* @return the node model created
*/
createNode(type, id) {
type = !$defined(type) ? INodeModel.MAIN_TOPIC_TYPE : type;
createNode(type = INodeModel.MAIN_TOPIC_TYPE, id) {
return new NodeModel(type, this, id);
}

View File

@ -152,6 +152,7 @@ class NodeModel extends INodeModel {
append(child) {
$assert(child && child.isNodeModel(), 'Only NodeModel can be appended to Mindmap object');
this._children.push(child);
// eslint-disable-next-line no-param-reassign
child._parent = this;
}
@ -162,6 +163,7 @@ class NodeModel extends INodeModel {
removeChild(child) {
$assert(child && child.isNodeModel(), 'Only NodeModel can be appended to Mindmap object.');
this._children = this._children.filter((c) => c !== child);
// eslint-disable-next-line no-param-reassign
child._parent = null;
}

View File

@ -15,7 +15,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { $defined } from '@wisemapping/core-js';
import ModelCodeName from './ModelCodeName';
import Beta2PelaMigrator from './Beta2PelaMigrator';
import Pela2TangoMigrator from './Pela2TangoMigrator';
@ -33,15 +32,14 @@ const XMLSerializerFactory = {};
* @return {mindplot.persistence.XMLSerializer_Beta|mindplot.persistence.XMLSerializer_Pela|
* mindplot.persistence.XMLSerializer_Tango} serializer corresponding to the mindmap's version
*/
XMLSerializerFactory.getSerializerFromMindmap = function getSerializerFromMindmap(mindmap) {
return XMLSerializerFactory.getSerializer(mindmap.getVersion());
};
XMLSerializerFactory.getSerializerFromMindmap = (mindmap) => XMLSerializerFactory
.getSerializer(mindmap.getVersion());
/**
* @param domDocument
* @return serializer corresponding to the mindmap's version
*/
XMLSerializerFactory.getSerializerFromDocument = function getSerializerFromDocument(domDocument) {
XMLSerializerFactory.getSerializerFromDocument = (domDocument) => {
const rootElem = domDocument.documentElement;
return XMLSerializerFactory.getSerializer(rootElem.getAttribute('version'));
};
@ -53,20 +51,17 @@ XMLSerializerFactory.getSerializerFromDocument = function getSerializerFromDocum
* @param {String} version the version name
* @return serializer
*/
XMLSerializerFactory.getSerializer = function getSerializer(version) {
if (!$defined(version)) {
version = ModelCodeName.BETA;
}
XMLSerializerFactory.getSerializer = function getSerializer(version = ModelCodeName.BETA) {
const codeNames = XMLSerializerFactory._codeNames;
let found = false;
let serializer = null;
for (let i = 0; i < codeNames.length; i++) {
if (!found) {
found = codeNames[i].codeName == version;
found = codeNames[i].codeName === version;
if (found) serializer = new (codeNames[i].serializer)();
} else {
const { migrator } = codeNames[i];
serializer = new migrator(serializer);
const { migrator: Migrator } = codeNames[i];
serializer = new Migrator(serializer);
}
}

View File

@ -157,7 +157,9 @@ class XMLSerializer_Pela {
const featureDom = document.createElement(featureType);
const attributes = feature.getAttributes();
for (const key in attributes) {
const attributesKeys = Object.keys(attributes);
for (let attrIndex = 0; attrIndex < attributesKeys.length; attrIndex++) {
const key = attributesKeys[attrIndex];
const value = attributes[key];
if (key === 'text') {
const cdata = document.createCDATASection(this.rmXmlInv(value));

View File

@ -18,7 +18,7 @@
import { Point } from '@wisemapping/web2d';
import { $assert, $defined } from '@wisemapping/core-js';
import { TopicShape } from '../model/INodeModel';
import { CONNECTOR_WIDTH } from '../TopicConfig';
import TopicConfig from '../TopicConfig';
const Shape = {
isAtRight(sourcePoint, targetPoint) {
@ -124,7 +124,7 @@ const Shape = {
}
// Move a little the position...
const offset = CONNECTOR_WIDTH / 2;
const offset = TopicConfig.CONNECTOR_WIDTH / 2;
if (!isAtRight) {
result.x += offset;
} else {

View File

@ -31,12 +31,11 @@ class IconPanel extends ToolbarPaneItem {
});
let count = 0;
let familyContent;
for (let i = 0; i < ImageIcon.prototype.ICON_FAMILIES.length; i += 1) {
const familyIcons = ImageIcon.prototype.ICON_FAMILIES[i].icons;
for (let j = 0; j < familyIcons.length; j += 1) {
// @TODO: This is a bug, for some reason is working because is a var. This must change to let.
var familyContent;
if ((count % 12) == 0) {
if ((count % 12) === 0) {
familyContent = $('<div></div>');
content.append(familyContent);
}

View File

@ -115,7 +115,7 @@ class LinkEditor extends BootstrapDialog {
* @return {Boolean} true if the url is valid
*/
checkURL(url) {
const regex = /^(http|https|ftp):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/i;
const regex = /^(http|https|ftp):\/\/[a-z0-9]+([-.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/i;
return (regex.test(url));
}

View File

@ -16,7 +16,6 @@
* limitations under the License.
*/
import $ from 'jquery';
import { $defined } from '@wisemapping/core-js';
import { $msg } from '../Messages';
import BootstrapDialogRequest from '../libraries/bootstrap/BootstrapDialogRequest';
import IMenu from './IMenu';
@ -29,11 +28,10 @@ import ToolbarItem from './ToolbarItem';
import KeyboardShortcutTooltip from './KeyboardShortcutTooltip';
class Menu extends IMenu {
constructor(designer, containerId, mapId, readOnly, baseUrl) {
constructor(designer, containerId, mapId, readOnly, baseUrl = '') {
super(designer, containerId, mapId);
const saveElem = $('#save');
baseUrl = !$defined(baseUrl) ? '' : baseUrl;
const widgetsBaseUrl = `${baseUrl}css/widget`;
// Stop event propagation ...
@ -225,8 +223,8 @@ class Menu extends IMenu {
this._addButton('print', false, false, () => {
me.save(saveElem, designer, false);
const url = window.location.href.substring(0, window.location.href.lastIndexOf('c/maps/'));
window.open(`${url}c/maps/${mapId}/print`);
const urlPrefix = window.location.href.substring(0, window.location.href.lastIndexOf('c/maps/'));
window.open(`${urlPrefix}c/maps/${mapId}/print`);
});
Menu._registerTooltip('print', $msg('PRINT'));
@ -398,8 +396,8 @@ class Menu extends IMenu {
if (videoElem) {
const width = 900;
const height = 500;
const left = (screen.width / 2) - (width / 2);
const top = (screen.height / 2) - (height / 2);
const left = (window.screen.width / 2) - (width / 2);
const top = (window.screen.height / 2) - (height / 2);
videoElem.bind('click', (event) => {
window.open('https://www.youtube.com/tv?vq=medium#/watch?v=rKxZwNKs9cE', '_blank', `toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=${width}, height=${height}, top=${top}, left=${left}`);
@ -476,11 +474,14 @@ class Menu extends IMenu {
if ($(`#${buttonId}`)) {
let tooltip = text;
if (shortcut) {
shortcut = navigator.appVersion.indexOf('Mac') !== -1 ? shortcut.replace('meta+', '⌘') : shortcut.replace('meta+', 'ctrl+');
tooltip = `${tooltip} (${shortcut})`;
const platformedShortcut = navigator.appVersion.indexOf('Mac') !== -1
? shortcut.replace('meta+', '⌘')
: shortcut.replace('meta+', 'ctrl+');
tooltip = `${tooltip} (${platformedShortcut})`;
}
return new KeyboardShortcutTooltip($(`#${buttonId}`), tooltip);
}
return undefined;
}
}

View File

@ -16,7 +16,7 @@ module.exports = {
module: {
rules: [
{
use: ['babel-loader', 'eslint-loader'],
use: ['babel-loader'],
test: /.(js$)/,
exclude: [
/node_modules/,

View File

@ -37,7 +37,6 @@
"eslint-config-airbnb-base": "^14.2.1",
"eslint-config-standard": "^16.0.3",
"eslint-import-resolver-webpack": "^0.13.2",
"eslint-loader": "^4.0.2",
"eslint-plugin-cypress": "^2.12.1",
"eslint-plugin-import": "^2.25.3",
"nodemon": "^2.0.12",

View File

@ -16,7 +16,7 @@ module.exports = {
module: {
rules: [
{
use: ['babel-loader', 'eslint-loader'],
use: ['babel-loader'],
test: /.(js)$/,
exclude: [
/node_modules/,

305
yarn.lock
View File

@ -2,6 +2,13 @@
# yarn lockfile v1
"@babel/code-frame@7.0.0":
version "7.0.0"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==
dependencies:
"@babel/highlight" "^7.0.0"
"@babel/code-frame@7.12.11":
version "7.12.11"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
@ -249,7 +256,7 @@
"@babel/traverse" "^7.16.3"
"@babel/types" "^7.16.0"
"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.0":
"@babel/highlight@^7.0.0", "@babel/highlight@^7.10.4", "@babel/highlight@^7.16.0":
version "7.16.0"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a"
integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==
@ -1007,6 +1014,21 @@
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
"@eslint/eslintrc@^1.0.5":
version "1.0.5"
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318"
integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==
dependencies:
ajv "^6.12.4"
debug "^4.3.2"
espree "^9.2.0"
globals "^13.9.0"
ignore "^4.0.6"
import-fresh "^3.2.1"
js-yaml "^4.1.0"
minimatch "^3.0.4"
strip-json-comments "^3.1.1"
"@evocateur/libnpmaccess@^3.1.2":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz#ecf7f6ce6b004e9f942b098d92200be4a4b1c845"
@ -1174,11 +1196,28 @@
debug "^4.1.1"
minimatch "^3.0.4"
"@humanwhocodes/object-schema@^1.2.0":
"@humanwhocodes/config-array@^0.9.2":
version "0.9.2"
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.2.tgz#68be55c737023009dfc5fe245d51181bb6476914"
integrity sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==
dependencies:
"@humanwhocodes/object-schema" "^1.2.1"
debug "^4.1.1"
minimatch "^3.0.4"
"@humanwhocodes/object-schema@^1.2.0", "@humanwhocodes/object-schema@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
"@ianvs/eslint-stats@^2.0.0":
version "2.0.0"
resolved "https://registry.yarnpkg.com/@ianvs/eslint-stats/-/eslint-stats-2.0.0.tgz#068a4a1508cfdfc21fd0b9931ae0921c5053ac29"
integrity sha512-DnIVVAiXR4tfWERTiQxr1Prrs/uFEbC1C4gTGORMvbF4k7ENyVQeLcoUfNyhlAj2MB/OeorCrN3wSnYuDOUS6Q==
dependencies:
chalk "^2.4.2"
lodash "^4.17.15"
"@istanbuljs/load-nyc-config@^1.0.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
@ -2447,7 +2486,7 @@
dependencies:
"@types/node" "*"
"@types/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1":
"@types/hoist-non-react-statics@*", "@types/hoist-non-react-statics@^3.3.0", "@types/hoist-non-react-statics@^3.3.1":
version "3.3.1"
resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f"
integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==
@ -2551,6 +2590,13 @@
resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11"
integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==
"@types/react-dom@^17.0.0":
version "17.0.11"
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.11.tgz#e1eadc3c5e86bdb5f7684e00274ae228e7bcc466"
integrity sha512-f96K3k+24RaLGVu/Y2Ng3e1EbZ8/cVJvypZWd7cy0ofCBaf2lcM46xNhycMZ2xGwbBjRql7hOlZ+e2WlJ5MH3Q==
dependencies:
"@types/react" "*"
"@types/react-redux@^7.1.20":
version "7.1.20"
resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.20.tgz#42f0e61ababb621e12c66c96dda94c58423bd7df"
@ -2568,7 +2614,7 @@
dependencies:
"@types/react" "*"
"@types/react@*":
"@types/react@*", "@types/react@^17.0.0":
version "17.0.37"
resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.37.tgz#6884d0aa402605935c397ae689deed115caad959"
integrity sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg==
@ -2602,6 +2648,15 @@
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c"
integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==
"@types/styled-components@^5.1.4":
version "5.1.18"
resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.18.tgz#1c361130f76a52f1cb4851c2a32aa328267e5b78"
integrity sha512-xPTYmWP7Mxk5TAD3pYsqjwA9G5fAI8e/S51QUJEl7EQD1siKCdiYXIWiH2lzoHRl+QqbQCJMcGv3YTF3OmyPdQ==
dependencies:
"@types/hoist-non-react-statics" "*"
"@types/react" "*"
csstype "^3.0.2"
"@types/tapable@^1":
version "1.0.8"
resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310"
@ -3023,7 +3078,7 @@ acorn@^7.1.1, acorn@^7.4.0:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
acorn@^8.0.4, acorn@^8.2.4, acorn@^8.4.1:
acorn@^8.0.4, acorn@^8.2.4, acorn@^8.4.1, acorn@^8.6.0:
version "8.6.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895"
integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw==
@ -3643,7 +3698,7 @@ bindings@^1.5.0:
dependencies:
file-uri-to-path "1.0.0"
bl@^4.0.3:
bl@^4.0.3, bl@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
@ -4013,7 +4068,16 @@ caseless@~0.12.0:
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
chalk@^1.1.3:
chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@^1.0.0, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
@ -4024,16 +4088,7 @@ chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
dependencies:
ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
chalk@^4.0.0, chalk@^4.1.0:
chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1:
version "4.1.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@ -4195,6 +4250,11 @@ cli-cursor@^3.1.0:
dependencies:
restore-cursor "^3.1.0"
cli-spinners@^2.5.0:
version "2.6.1"
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d"
integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==
cli-table3@~0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee"
@ -4218,6 +4278,11 @@ cli-width@^2.0.0:
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48"
integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==
cli-width@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
cliui@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
@ -5606,6 +5671,24 @@ eslint-config-standard@^16.0.3:
resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz#6c8761e544e96c531ff92642eeb87842b8488516"
integrity sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==
eslint-filtered-fix@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/eslint-filtered-fix/-/eslint-filtered-fix-0.2.0.tgz#f3d9e10c028ef74b878296948f9c20e836816203"
integrity sha512-XdaG7foK2Xu4EORAwtgBRv25eLv50XGbeiCDVeUui8Mp51HBd1h+HR/Od40U2rhQmFqnCK0hIPknltoCKq8xew==
dependencies:
optionator "^0.9.1"
eslint-formatter-friendly@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/eslint-formatter-friendly/-/eslint-formatter-friendly-7.0.0.tgz#32a4998ababa0a39994aed629b831fda7dabc864"
integrity sha512-WXg2D5kMHcRxIZA3ulxdevi8/BGTXu72pfOO5vXHqcAfClfIWDSlOljROjCSOCcKvilgmHz1jDWbvFCZHjMQ5w==
dependencies:
"@babel/code-frame" "7.0.0"
chalk "2.4.2"
extend "3.0.2"
strip-ansi "5.2.0"
text-table "0.2.0"
eslint-import-resolver-node@^0.3.6:
version "0.3.6"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd"
@ -5631,17 +5714,6 @@ eslint-import-resolver-webpack@^0.13.2:
resolve "^1.20.0"
semver "^5.7.1"
eslint-loader@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-4.0.2.tgz#386a1e21bcb613b3cf2d252a3b708023ccfb41ec"
integrity sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw==
dependencies:
find-cache-dir "^3.3.1"
fs-extra "^8.1.0"
loader-utils "^2.0.0"
object-hash "^2.0.3"
schema-utils "^2.6.5"
eslint-module-utils@^2.7.1:
version "2.7.1"
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz#b435001c9f8dd4ab7f6d0efcae4b9696d4c24b7c"
@ -5651,6 +5723,19 @@ eslint-module-utils@^2.7.1:
find-up "^2.1.0"
pkg-dir "^2.0.0"
eslint-nibble@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/eslint-nibble/-/eslint-nibble-8.0.0.tgz#667e1f9b64492c90058c1f9b2236a97682d83924"
integrity sha512-Og/0EGKxwEtNPNN4eo84GxgzpD4a4+LcvBd72j0OL55aTHtfR7vdnp3qJ9RQ0Qh4mXLUlC0O13sQZxLtx9ZDvA==
dependencies:
"@ianvs/eslint-stats" "^2.0.0"
chalk "^4.1.1"
eslint-filtered-fix "^0.2.0"
eslint-formatter-friendly "^7.0.0"
eslint-summary "^1.0.0"
inquirer "8.1.1"
optionator "^0.9.1"
eslint-plugin-cypress@^2.12.1:
version "2.12.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-cypress/-/eslint-plugin-cypress-2.12.1.tgz#9aeee700708ca8c058e00cdafe215199918c2632"
@ -5677,11 +5762,6 @@ eslint-plugin-import@^2.24.2, eslint-plugin-import@^2.25.3:
resolve "^1.20.0"
tsconfig-paths "^3.11.0"
eslint-plugin-only-warn@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/eslint-plugin-only-warn/-/eslint-plugin-only-warn-1.0.3.tgz#a75f3a9ded7f03e9808e75ec27f22b644084506e"
integrity sha512-XQOX/TfLoLw6h8ky51d29uUjXRTQHqBGXPylDEmy5fe/w7LIOnp8MA24b1OSMEn9BQoKow1q3g1kLe5/9uBTvw==
eslint-plugin-react-hooks@^4.2.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz#318dbf312e06fab1c835a4abef00121751ac1172"
@ -5723,6 +5803,22 @@ eslint-scope@^4.0.3:
esrecurse "^4.1.0"
estraverse "^4.1.1"
eslint-scope@^7.1.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153"
integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==
dependencies:
esrecurse "^4.3.0"
estraverse "^5.2.0"
eslint-summary@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/eslint-summary/-/eslint-summary-1.0.0.tgz#b811f00437016b20c0f6f5234479bd6395b57886"
integrity sha1-uBHwBDcBayDA9vUjRHm9Y5W1eIY=
dependencies:
chalk "^1.0.0"
text-table "^0.2.0"
eslint-utils@^1.3.1:
version "1.4.3"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
@ -5754,6 +5850,11 @@ eslint-visitor-keys@^2.0.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
eslint-visitor-keys@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2"
integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==
eslint@^5.16.0:
version "5.16.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea"
@ -5842,6 +5943,50 @@ eslint@^7.14.0:
text-table "^0.2.0"
v8-compile-cache "^2.0.3"
eslint@^8.4.1:
version "8.4.1"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.4.1.tgz#d6531bbf3e598dffd7c0c7d35ec52a0b30fdfa2d"
integrity sha512-TxU/p7LB1KxQ6+7aztTnO7K0i+h0tDi81YRY9VzB6Id71kNz+fFYnf5HD5UOQmxkzcoa0TlVZf9dpMtUv0GpWg==
dependencies:
"@eslint/eslintrc" "^1.0.5"
"@humanwhocodes/config-array" "^0.9.2"
ajv "^6.10.0"
chalk "^4.0.0"
cross-spawn "^7.0.2"
debug "^4.3.2"
doctrine "^3.0.0"
enquirer "^2.3.5"
escape-string-regexp "^4.0.0"
eslint-scope "^7.1.0"
eslint-utils "^3.0.0"
eslint-visitor-keys "^3.1.0"
espree "^9.2.0"
esquery "^1.4.0"
esutils "^2.0.2"
fast-deep-equal "^3.1.3"
file-entry-cache "^6.0.1"
functional-red-black-tree "^1.0.1"
glob-parent "^6.0.1"
globals "^13.6.0"
ignore "^4.0.6"
import-fresh "^3.0.0"
imurmurhash "^0.1.4"
is-glob "^4.0.0"
js-yaml "^4.1.0"
json-stable-stringify-without-jsonify "^1.0.1"
levn "^0.4.1"
lodash.merge "^4.6.2"
minimatch "^3.0.4"
natural-compare "^1.4.0"
optionator "^0.9.1"
progress "^2.0.0"
regexpp "^3.2.0"
semver "^7.2.1"
strip-ansi "^6.0.1"
strip-json-comments "^3.1.0"
text-table "^0.2.0"
v8-compile-cache "^2.0.3"
espree@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a"
@ -5860,6 +6005,15 @@ espree@^7.3.0, espree@^7.3.1:
acorn-jsx "^5.3.1"
eslint-visitor-keys "^1.3.0"
espree@^9.2.0:
version "9.2.0"
resolved "https://registry.yarnpkg.com/espree/-/espree-9.2.0.tgz#c50814e01611c2d0f8bd4daa83c369eabba80dbc"
integrity sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg==
dependencies:
acorn "^8.6.0"
acorn-jsx "^5.3.1"
eslint-visitor-keys "^3.1.0"
esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
@ -6093,7 +6247,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
assign-symbols "^1.0.0"
is-extendable "^1.0.1"
extend@~3.0.2:
extend@3.0.2, extend@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
@ -6225,7 +6379,7 @@ figures@^2.0.0:
dependencies:
escape-string-regexp "^1.0.5"
figures@^3.2.0:
figures@^3.0.0, figures@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
@ -7450,6 +7604,26 @@ init-package-json@^1.10.3:
validate-npm-package-license "^3.0.1"
validate-npm-package-name "^3.0.0"
inquirer@8.1.1:
version "8.1.1"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.1.1.tgz#7c53d94c6d03011c7bb2a947f0dca3b98246c26a"
integrity sha512-hUDjc3vBkh/uk1gPfMAD/7Z188Q8cvTGl0nxwaCdwSbzFh6ZKkZh+s2ozVxbE5G9ZNRyeY0+lgbAIOUFsFf98w==
dependencies:
ansi-escapes "^4.2.1"
chalk "^4.1.1"
cli-cursor "^3.1.0"
cli-width "^3.0.0"
external-editor "^3.0.3"
figures "^3.0.0"
lodash "^4.17.21"
mute-stream "0.0.8"
ora "^5.3.0"
run-async "^2.4.0"
rxjs "^6.6.6"
string-width "^4.1.0"
strip-ansi "^6.0.0"
through "^2.3.6"
inquirer@^6.2.0, inquirer@^6.2.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
@ -7751,6 +7925,11 @@ is-installed-globally@^0.4.0, is-installed-globally@~0.4.0:
global-dirs "^3.0.0"
is-path-inside "^3.0.2"
is-interactive@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
is-negative-zero@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
@ -8496,7 +8675,7 @@ js-sha3@0.8.0:
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
js-yaml@4.1.0:
js-yaml@4.1.0, js-yaml@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
@ -9083,7 +9262,7 @@ lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
log-symbols@4.1.0, log-symbols@^4.0.0:
log-symbols@4.1.0, log-symbols@^4.0.0, log-symbols@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
@ -9661,7 +9840,7 @@ mute-stream@0.0.7:
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
mute-stream@~0.0.4:
mute-stream@0.0.8, mute-stream@~0.0.4:
version "0.0.8"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
@ -10008,11 +10187,6 @@ object-copy@^0.1.0:
define-property "^0.2.5"
kind-of "^3.0.3"
object-hash@^2.0.3:
version "2.2.0"
resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5"
integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==
object-inspect@^1.11.0, object-inspect@^1.9.0:
version "1.11.1"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.1.tgz#d4bd7d7de54b9a75599f59a00bd698c1f1c6549b"
@ -10188,6 +10362,21 @@ optionator@^0.9.1:
type-check "^0.4.0"
word-wrap "^1.2.3"
ora@^5.3.0:
version "5.4.1"
resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
dependencies:
bl "^4.1.0"
chalk "^4.1.0"
cli-cursor "^3.1.0"
cli-spinners "^2.5.0"
is-interactive "^1.0.0"
is-unicode-supported "^0.1.0"
log-symbols "^4.1.0"
strip-ansi "^6.0.0"
wcwidth "^1.0.1"
original@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
@ -11068,7 +11257,7 @@ react-async-script@^1.1.1:
hoist-non-react-statics "^3.3.0"
prop-types "^15.5.0"
react-dom@^17.0.0:
react-dom@^17.0.0, react-dom@^17.0.1:
version "17.0.2"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23"
integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==
@ -11178,7 +11367,7 @@ react-transition-group@^4.4.0:
loose-envify "^1.4.0"
prop-types "^15.6.2"
react@^17.0.0:
react@^17.0.0, react@^17.0.1:
version "17.0.2"
resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037"
integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==
@ -11413,7 +11602,7 @@ regexpp@^2.0.1:
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
regexpp@^3.1.0:
regexpp@^3.1.0, regexpp@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
@ -11691,7 +11880,7 @@ rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3:
dependencies:
glob "^7.1.3"
run-async@^2.2.0:
run-async@^2.2.0, run-async@^2.4.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
@ -11710,7 +11899,7 @@ run-queue@^1.0.0, run-queue@^1.0.3:
dependencies:
aproba "^1.1.1"
rxjs@^6.4.0:
rxjs@^6.4.0, rxjs@^6.6.6:
version "6.6.7"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==
@ -12489,6 +12678,13 @@ stringify-object@^3.3.0:
is-obj "^1.0.1"
is-regexp "^1.0.0"
strip-ansi@5.2.0, strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
dependencies:
ansi-regex "^4.1.0"
strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
@ -12503,13 +12699,6 @@ strip-ansi@^4.0.0:
dependencies:
ansi-regex "^3.0.0"
strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
dependencies:
ansi-regex "^4.1.0"
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
@ -12590,7 +12779,7 @@ style-loader@^2.0.0:
loader-utils "^2.0.0"
schema-utils "^3.0.0"
styled-components@^5.1.7:
styled-components@^5.1.7, styled-components@^5.2.1:
version "5.3.3"
resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.3.tgz#312a3d9a549f4708f0fb0edc829eb34bde032743"
integrity sha512-++4iHwBM7ZN+x6DtPPWkCI4vdtwumQ+inA/DdAsqYd4SVgUKJie5vXyzotA00ttcFdQkCng7zc6grwlfIfw+lw==
@ -12789,7 +12978,7 @@ text-extensions@^1.0.0:
resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26"
integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==
text-table@^0.2.0:
text-table@0.2.0, text-table@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
@ -13464,7 +13653,7 @@ wbuf@^1.1.0, wbuf@^1.7.3:
dependencies:
minimalistic-assert "^1.0.0"
wcwidth@^1.0.0:
wcwidth@^1.0.0, wcwidth@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=