diff --git a/.npmignore b/.npmignore
index e6c85bd11..1536bd696 100644
--- a/.npmignore
+++ b/.npmignore
@@ -12,12 +12,15 @@ yarn.lock
.npmignore
.travis.yml
.eslint*
+.vscode
Gruntfile.js
ISSUE_TEMPLATE.md
PULL_REQUEST_TEMPLATE.md
freelancer
karma.conf.js
protractor.conf.js
+tsconfig.json
+webpack.config.js
## From .gitignore:
*.log
diff --git a/Gruntfile.js b/Gruntfile.js
index cfb546341..4c56e9c3b 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -25,10 +25,10 @@ module.exports = function(grunt) {
}
}
},
-
cssmin: {
dist: {
options: {
+ sourceMap: false,
keepSpecialComments: '*'
},
files: {
@@ -37,23 +37,21 @@ module.exports = function(grunt) {
}
}
},
-
copy: {
dist: {
files: {
- 'dist/gridstack.js': ['src/gridstack.js'],
- 'dist/gridstack.d.ts': ['src/gridstack.d.ts'],
- 'dist/gridstack.all.d.ts': ['src/gridstack.d.ts'],
- 'dist/gridstack.jQueryUI.js': ['src/gridstack.jQueryUI.js'],
+/*
'dist/gridstack-poly.js': ['src/gridstack-poly.js'],
'dist/jquery.js': ['src/jquery.js'],
'dist/jquery-ui.js': ['src/jquery-ui.js'],
'dist/src/gridstack.scss': ['src/gridstack.scss'],
'dist/src/gridstack-extra.scss': ['src/gridstack-extra.scss'],
+*/
}
}
},
+ /*
uglify: {
options: {
sourceMap: true,
@@ -64,15 +62,13 @@ module.exports = function(grunt) {
},
dist: {
files: {
- 'dist/gridstack.min.js': ['src/gridstack.js'],
- 'dist/gridstack.jQueryUI.min.js': ['src/gridstack.jQueryUI.js'],
- 'dist/gridstack-poly.min.js': ['src/gridstack-poly.js'],
- 'dist/jquery.min.js': ['src/jquery.js'],
- 'dist/jquery-ui.min.js': ['src/jquery-ui.js'],
- 'dist/gridstack.all.js': ['src/gridstack-poly.js', 'src/jquery.js', 'src/gridstack.js', 'src/jquery-ui.js', 'src/gridstack.jQueryUI.js']
+ //'dist/gridstack-poly.min.js': 'src/gridstack-poly.js',
+ //'dist/jquery.min.js': 'src/jquery.js',
+ //'dist/jquery-ui.min.js': 'src/jquery-ui.js'
}
}
},
+ */
eslint: {
target: ['*.js', 'src/*.js']
@@ -87,7 +83,7 @@ module.exports = function(grunt) {
},
styles: {
files: ['src/*.scss'],
- tasks: ['sass', 'cssmin'],
+ tasks: ['sass'/*, 'cssmin'*/],
options: {
},
}
@@ -120,7 +116,7 @@ module.exports = function(grunt) {
});
grunt.registerTask('lint', ['eslint']);
- grunt.registerTask('default', ['sass', 'cssmin', 'eslint', 'copy', 'uglify']);
+ grunt.registerTask('default', ['sass', 'cssmin', /*'eslint',*/ 'copy', /*'uglify'*/]);
grunt.registerTask('e2e-test', ['connect', 'protractor_webdriver', 'protractor']);
};
/*eslint-enable camelcase */
\ No newline at end of file
diff --git a/demo/float.html b/demo/float.html
index dbc66085b..24629d493 100644
--- a/demo/float.html
+++ b/demo/float.html
@@ -7,10 +7,13 @@
Float grid demo
+
+
diff --git a/doc/README.md b/doc/README.md
index 68ec69085..417dcbc38 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -317,8 +317,8 @@ Parameters:
Disables widgets moving/resizing. This is a shortcut for:
```js
-grid.movable('.grid-stack-item', false);
-grid.resizable('.grid-stack-item', false);
+grid.enableMove(false);
+grid.enableResize(false);
```
### enable()
@@ -326,24 +326,26 @@ grid.resizable('.grid-stack-item', false);
Enables widgets moving/resizing. This is a shortcut for:
```js
-grid.movable('.grid-stack-item', true);
-grid.resizable('.grid-stack-item', true);
+grid.enableMove(true);
+grid.enableResize(true);
```
### enableMove(doEnable, includeNewWidgets)
-Enables/disables widget moving. `includeNewWidgets` will force new widgets to be draggable as per `doEnable`'s value by changing the `disableDrag` grid option. This is a shortcut for:
+Enables/disables widget moving. `includeNewWidgets` will force new widgets to be draggable as per `doEnable`'s value by changing the `disableDrag` grid option (default: true). This is a shortcut for:
```js
-grid.movable(this.container.children('.' + this.opts.itemClass), doEnable);
+grid.movable('.grid-stack-item', doEnable);
+grid.opts.disableDrag = !doEnable;
```
### enableResize(doEnable, includeNewWidgets)
-Enables/disables widget resizing. `includeNewWidgets` will force new widgets to be resizable as per `doEnable`'s value by changing the `disableResize` grid option. This is a shortcut for:
+Enables/disables widget resizing. `includeNewWidgets` will force new widgets to be resizable as per `doEnable`'s value by changing the `disableResize` grid option (default: true). This is a shortcut for:
```js
-grid.resizable(this.container.children('.' + this.opts.itemClass), doEnable);
+grid.resizable('.grid-stack-item', doEnable);
+grid.opts.disableResize = !doEnable;
```
### float(val?)
diff --git a/package.json b/package.json
index cfadefcc4..e9cc5e73f 100644
--- a/package.json
+++ b/package.json
@@ -1,21 +1,23 @@
{
"name": "gridstack",
- "version": "1.1.0-dev",
- "description": "JavaScript / TypeScript for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)",
- "main": "dist/gridstack",
+ "version": "2.0.0-rc",
+ "description": "TypeScript/Javascript lib for dashboard layout and creation, no external dependencies, with many wrappers (React, Angular, Ember, knockout...)",
+ "main": "./dist/index.js",
+ "typings": "./dist/index.d.ts",
"repository": {
"type": "git",
"url": "git+https://github.com/gridstack/gridstack.js.git"
},
"scripts": {
- "build": "grunt && doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md",
- "test": "grunt lint && karma start karma.conf.js",
- "lint": "grunt lint",
+ "build": "yarn --no-progress && rm -rf dist/* && webpack && grunt && doctoc ./README.md && doctoc ./doc/README.md && doctoc ./doc/CHANGES.md",
+ "web": "rm -rf dist/* && webpack",
+ "test": "yarn lint && karma start karma.conf.js",
+ "lint": "tslint -p ./tsconfig.json",
"reset": "rm -rf dist node_modules",
"prepublishOnly": "yarn build"
},
"keywords": [
- "JavaScript",
+ "Typescript",
"gridstack.js",
"grid",
"gridster",
@@ -27,7 +29,7 @@
"widgets",
"Angular",
"React",
- "Typescript"
+ "JavaScript"
],
"author": "Pavel Reznikov ",
"contributors": [
@@ -41,6 +43,8 @@
"homepage": "http://gridstack.github.io/gridstack.js/",
"dependencies": {},
"devDependencies": {
+ "@types/jquery": "^3.3.32",
+ "@types/jqueryui": "^1.12.10",
"connect": "^3.7.0",
"core-js": "^3.6.4",
"coveralls": "^3.0.9",
@@ -64,7 +68,11 @@
"karma-jasmine": "^3.1.1",
"node-sass": "^4.13.1",
"puppeteer": "^2.1.1",
- "serve-static": "^1.14.1"
+ "serve-static": "^1.14.1",
+ "ts-loader": "^6.2.1",
+ "typescript": "3.4.5",
+ "webpack": "^4.42.0",
+ "webpack-cli": "^3.3.11"
},
"resolutions": {
"lodash": "^4.17.13",
diff --git a/src/gridstack-dragdrop-plugin.ts b/src/gridstack-dragdrop-plugin.ts
new file mode 100644
index 000000000..a2107f364
--- /dev/null
+++ b/src/gridstack-dragdrop-plugin.ts
@@ -0,0 +1,50 @@
+// gridstack-dragdrop-plugin.ts 2.0.0-rc @preserve
+
+/**
+ * https://gridstackjs.com/
+ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov
+ * gridstack.js may be freely distributed under the MIT license.
+*/
+
+import { GridStack } from './gridstack';
+import { GridStackElement } from './types';
+
+/** drag&drop options currently called from the main code, but others can be passed in grid options */
+export type DDOpts = 'enable' | 'disable' | 'option' | {} | any;
+export type DDKey = 'minWidth' | 'minHeight' | string;
+
+/**
+ * Base class for drag'n'drop plugin.
+ */
+export class GridStackDragDropPlugin {
+ protected grid: GridStack;
+ static registeredPlugins = [];
+
+ static registerPlugin(pluginClass) {
+ GridStackDragDropPlugin.registeredPlugins.push(pluginClass);
+ };
+
+ public constructor(grid: GridStack) {
+ this.grid = grid;
+ }
+
+ public resizable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin {
+ return this;
+ };
+
+ public draggable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin {
+ return this;
+ };
+
+ public droppable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin {
+ return this;
+ };
+
+ public isDroppable(el: GridStackElement): boolean {
+ return false;
+ };
+
+ public on(el: GridStackElement, eventName: string, callback): GridStackDragDropPlugin {
+ return this;
+ };
+}
diff --git a/src/gridstack-engine.ts b/src/gridstack-engine.ts
new file mode 100644
index 000000000..82eec0586
--- /dev/null
+++ b/src/gridstack-engine.ts
@@ -0,0 +1,593 @@
+// gridstack-engine.ts 2.0.0-rc @preserve
+
+/**
+ * https://gridstackjs.com/
+ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov
+ * gridstack.js may be freely distributed under the MIT license.
+*/
+
+import { Utils, obsolete } from './utils';
+import { GridStackNode } from './types';
+
+export type onChangeCB = (nodes: GridStackNode[], detachNode?: boolean) => void;
+
+/** @internal class to store per column layout bare minimal info (subset of GridstackWidget) */
+interface layout {
+ x: number;
+ y: number;
+ width: number;
+ _id: number; // so we can find full node back
+}
+
+/**
+ * Defines the GridStack engine that does most no DOM grid manipulation.
+ * See GridStack methods and vars for descriptions.
+ *
+ * NOTE: values should not be modified directly - call the main GridStack API instead
+ */
+export class GridStackEngine {
+ public column: number;
+ public maxRow: number;
+ public nodes: GridStackNode[];
+ public onchange: onChangeCB;
+ public addedNodes: GridStackNode[] = [];
+ public removedNodes: GridStackNode[] = [];
+ public batchMode: boolean;
+ /** @internal */
+ private _float: boolean;
+ /** @internal */
+ private _prevFloat: boolean;
+ /** @internal */
+ private _layouts?: layout[][]; // maps column # to array of values nodes
+ /** @internal */
+ private _ignoreLayoutsNodeChange: boolean;
+ /** @internal */
+ private static _idSeq = 1;
+
+ public constructor(column?: number, onchange?: onChangeCB, float?: boolean, maxRow?: number, nodes?: GridStackNode[]) {
+ this.column = column || 12;
+ this._float = float || false;
+ this.maxRow = maxRow || 0;
+ this.nodes = nodes || [];
+ this.onchange = onchange || function () {};
+ }
+
+ public batchUpdate() {
+ if (this.batchMode) return;
+ this.batchMode = true;
+ this._prevFloat = this._float;
+ this._float = true; // let things go anywhere for now... commit() will restore and possibly reposition
+ };
+
+ public commit() {
+ if (!this.batchMode) return;
+ this.batchMode = false;
+ this._float = this._prevFloat;
+ delete this._prevFloat;
+ this._packNodes();
+ this._notify();
+ };
+
+ private _fixCollisions(node: GridStackNode) {
+ this._sortNodes(-1);
+
+ let nn = node;
+ const hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; }));
+ if (!this.float && !hasLocked) {
+ nn = {x: 0, y: node.y, width: this.column, height: node.height};
+ }
+ while (true) {
+ const array1 = [5, 12, 8, 130, 44];
+ const found = array1.find(element => element > 10);
+
+ const collisionNode = this.nodes.find( n => n !== node && Utils.isIntercepted(n, nn), {node: node, nn: nn});
+ if (!collisionNode) { return; }
+ this.moveNode(collisionNode, collisionNode.x, node.y + node.height,
+ collisionNode.width, collisionNode.height, true);
+ }
+ };
+
+ public isAreaEmpty(x: number, y: number, width: number, height: number) {
+ const nn = {x: x || 0, y: y || 0, width: width || 1, height: height || 1};
+ const collisionNode = this.nodes.find(function(n) {
+ return Utils.isIntercepted(n, nn);
+ });
+ return !collisionNode;
+ };
+
+ /** re-layout grid items to reclaim any empty space */
+ public compact() {
+ if (this.nodes.length === 0) { return; }
+ this.batchUpdate();
+ this._sortNodes();
+ const copyNodes = this.nodes;
+ this.nodes = []; // pretend we have no nodes to conflict layout to start with...
+ copyNodes.forEach(node => {
+ if (!node.noMove && !node.locked) {
+ node.autoPosition = true;
+ }
+ this.addNode(node, false); // 'false' for add event trigger
+ node._dirty = true; // force attr update
+ });
+ this.commit();
+ }
+
+ /**
+ * enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html)
+ */
+ public set float(val: boolean) {
+ if (this._float === val) { return; }
+ this._float = val || false;
+ if (!val) {
+ this._packNodes();
+ this._notify();
+ }
+ }
+
+ // getter method
+ public get float(): boolean { return this._float; }
+
+ private _sortNodes(dir?: number) {
+ this.nodes = Utils.sort(this.nodes, dir, this.column);
+ };
+
+ private _packNodes() {
+ this._sortNodes();
+
+ if (this.float) {
+ this.nodes.forEach((n, i) => {
+ if (n._updating || n._packY === undefined || n.y === n._packY) {
+ return;
+ }
+ let newY = n.y;
+ while (newY >= n._packY) {
+ const box = {x: n.x, y: newY, width: n.width, height: n.height};
+ const collisionNode = this.nodes
+ .slice(0, i)
+ .find(bn => Utils.isIntercepted(box, bn), {n: n, newY: newY});
+ if (!collisionNode) {
+ n._dirty = true;
+ n.y = newY;
+ }
+ --newY;
+ }
+ });
+ } else {
+ this.nodes.forEach((n, i) => {
+ if (n.locked) { return; }
+ while (n.y > 0) {
+ const newY = n.y - 1;
+ let canBeMoved = i === 0;
+ const box = {x: n.x, y: newY, width: n.width, height: n.height};
+ if (i > 0) {
+ const collisionNode = this.nodes
+ .slice(0, i)
+ .find(bn => Utils.isIntercepted(box, bn), {n: n, newY: newY});
+ canBeMoved = collisionNode === undefined;
+ }
+
+ if (!canBeMoved) { break; }
+ // Note: must be dirty (from last position) for GridStack::OnChange CB to update positions
+ // and move items back. The user 'change' CB should detect changes from the original
+ // starting position instead.
+ n._dirty = (n.y !== newY);
+ n.y = newY;
+ }
+ });
+ }
+ };
+
+ public _prepareNode(node: GridStackNode, resizing?: boolean) {
+ node = node || {};
+ // if we're missing position, have the grid position us automatically (before we set them to 0,0)
+ if (node.x === undefined || node.y === undefined || node.x === null || node.y === null) {
+ node.autoPosition = true;
+ }
+
+ // assign defaults for missing required fields
+ const defaults = {width: 1, height: 1, x: 0, y: 0};
+ node = Utils.defaults(node, defaults);
+
+ // convert any strings over
+ /* TODO: check
+ node.x = parseInt(node.x);
+ node.y = parseInt(node.y);
+ node.width = parseInt(node.width);
+ node.height = parseInt(node.height);
+ */
+ node.autoPosition = node.autoPosition || false;
+ node.noResize = node.noResize || false;
+ node.noMove = node.noMove || false;
+
+ // check for NaN (in case messed up strings were passed. can't do parseInt() || defaults.x above as 0 is valid #)
+ if (Number.isNaN(node.x)) { node.x = defaults.x; node.autoPosition = true; }
+ if (Number.isNaN(node.y)) { node.y = defaults.y; node.autoPosition = true; }
+ if (Number.isNaN(node.width)) { node.width = defaults.width; }
+ if (Number.isNaN(node.height)) { node.height = defaults.height; }
+
+ if (node.width > this.column) {
+ node.width = this.column;
+ } else if (node.width < 1) {
+ node.width = 1;
+ }
+
+ if (node.height < 1) {
+ node.height = 1;
+ }
+
+ if (node.x < 0) {
+ node.x = 0;
+ }
+
+ if (node.x + node.width > this.column) {
+ if (resizing) {
+ node.width = this.column - node.x;
+ } else {
+ node.x = this.column - node.width;
+ }
+ }
+
+ if (node.y < 0) {
+ node.y = 0;
+ }
+
+ return node;
+ };
+
+ public getDirtyNodes(verify?: boolean) {
+ // compare original X,Y,W,H (or entire node?) instead as _dirty can be a temporary state
+ if (verify) {
+ const dirtNodes = [];
+ this.nodes.forEach(function (n) {
+ if (n._dirty) {
+ if (n.y === n._origY && n.x === n._origX && n.width === n._origW && n.height === n._origH) {
+ delete n._dirty;
+ } else {
+ dirtNodes.push(n);
+ }
+ }
+ });
+ return dirtNodes;
+ }
+
+ return this.nodes.filter(function(n) { return n._dirty; });
+ };
+
+ private _notify(nodes?: GridStackNode | GridStackNode[], detachNode?: boolean) {
+ if (this.batchMode) { return; }
+ detachNode = (detachNode === undefined ? true : detachNode);
+ nodes = (nodes === undefined ? [] : (Array.isArray(nodes) ? nodes : [nodes]) );
+ const dirtyNodes = nodes.concat(this.getDirtyNodes());
+ this.onchange(dirtyNodes, detachNode);
+ };
+
+ public cleanNodes() {
+ if (this.batchMode) { return; }
+ this.nodes.forEach(function(n) { delete n._dirty; });
+ };
+
+ public addNode(node: GridStackNode, triggerAddEvent?: boolean) {
+ node = this._prepareNode(node);
+
+ if (node.maxWidth !== undefined) { node.width = Math.min(node.width, node.maxWidth); }
+ if (node.maxHeight !== undefined) { node.height = Math.min(node.height, node.maxHeight); }
+ if (node.minWidth !== undefined) { node.width = Math.max(node.width, node.minWidth); }
+ if (node.minHeight !== undefined) { node.height = Math.max(node.height, node.minHeight); }
+
+ node._id = node._id || GridStackEngine._idSeq++;
+
+ if (node.autoPosition) {
+ this._sortNodes();
+
+ for (var i = 0;; ++i) {
+ const x = i % this.column;
+ const y = Math.floor(i / this.column);
+ if (x + node.width > this.column) {
+ continue;
+ }
+ const box = {x: x, y: y, width: node.width, height: node.height};
+ if (!this.nodes.find(n => Utils.isIntercepted(box, n), {x: x, y: y, node: node})) {
+ node.x = x;
+ node.y = y;
+ delete node.autoPosition; // found our slot
+ break;
+ }
+ }
+ }
+
+ this.nodes.push(node);
+ if (triggerAddEvent) {
+ this.addedNodes.push(node);
+ }
+
+ this._fixCollisions(node);
+ this._packNodes();
+ this._notify();
+ return node;
+ };
+
+ public removeNode(node: GridStackNode, detachNode?: boolean) {
+ detachNode = (detachNode === undefined ? true : detachNode);
+ this.removedNodes.push(node);
+ node._id = null; // hint that node is being removed
+ this.nodes = Utils.without(this.nodes, node);
+ this._packNodes();
+ this._notify(node, detachNode);
+ };
+
+ public removeAll(detachNode?: boolean) {
+ delete this._layouts;
+ if (this.nodes.length === 0) { return; }
+ detachNode = (detachNode === undefined ? true : detachNode);
+ this.nodes.forEach(function(n) { n._id = null; }); // hint that node is being removed
+ this.removedNodes = this.nodes;
+ this.nodes = [];
+ this._notify(this.removedNodes, detachNode);
+ };
+
+ public canMoveNode(node: GridStackNode, x: number, y: number, width?: number, height?: number): boolean {
+ if (!this.isNodeChangedPosition(node, x, y, width, height)) {
+ return false;
+ }
+ const hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; }));
+
+ if (!this.maxRow && !hasLocked) {
+ return true;
+ }
+
+ let clonedNode;
+ const clone = new GridStackEngine(
+ this.column,
+ null,
+ this.float,
+ 0,
+ this.nodes.map(function(n) {
+ if (n === node) {
+ clonedNode = Utils.clone(n);
+ return clonedNode;
+ }
+ return Utils.clone(n);
+ }));
+
+ if (!clonedNode) { return true;}
+
+ clone.moveNode(clonedNode, x, y, width, height);
+
+ let canMove = true;
+ if (hasLocked) {
+ canMove = canMove && !Boolean(clone.nodes.find(function(n) {
+ return n !== clonedNode && Boolean(n.locked) && Boolean(n._dirty);
+ }));
+ }
+ if (this.maxRow) {
+ canMove = canMove && (clone.getRow() <= this.maxRow);
+ }
+
+ return canMove;
+ };
+
+ public canBePlacedWithRespectToHeight(node: GridStackNode) {
+ if (!this.maxRow) {
+ return true;
+ }
+
+ const clone = new GridStackEngine(
+ this.column,
+ null,
+ this.float,
+ 0,
+ this.nodes.map(function(n) { return Utils.clone(n) }));
+ clone.addNode(node);
+ return clone.getRow() <= this.maxRow;
+ };
+
+ public isNodeChangedPosition(node: GridStackNode, x: number, y: number, width: number, height: number) {
+ if (typeof x !== 'number') { x = node.x; }
+ if (typeof y !== 'number') { y = node.y; }
+ if (typeof width !== 'number') { width = node.width; }
+ if (typeof height !== 'number') { height = node.height; }
+
+ if (node.maxWidth !== undefined) { width = Math.min(width, node.maxWidth); }
+ if (node.maxHeight !== undefined) { height = Math.min(height, node.maxHeight); }
+ if (node.minWidth !== undefined) { width = Math.max(width, node.minWidth); }
+ if (node.minHeight !== undefined) { height = Math.max(height, node.minHeight); }
+
+ if (node.x === x && node.y === y && node.width === width && node.height === height) {
+ return false;
+ }
+ return true;
+ };
+
+ public moveNode(node: GridStackNode, x: number, y: number, width?: number, height?: number, noPack?: boolean): GridStackNode {
+ if (typeof x !== 'number') { x = node.x; }
+ if (typeof y !== 'number') { y = node.y; }
+ if (typeof width !== 'number') { width = node.width; }
+ if (typeof height !== 'number') { height = node.height; }
+
+ if (node.maxWidth !== undefined) { width = Math.min(width, node.maxWidth); }
+ if (node.maxHeight !== undefined) { height = Math.min(height, node.maxHeight); }
+ if (node.minWidth !== undefined) { width = Math.max(width, node.minWidth); }
+ if (node.minHeight !== undefined) { height = Math.max(height, node.minHeight); }
+
+ if (node.x === x && node.y === y && node.width === width && node.height === height) {
+ return node;
+ }
+
+ const resizing = node.width !== width;
+ node._dirty = true;
+
+ node.x = x;
+ node.y = y;
+ node.width = width;
+ node.height = height;
+
+ node._lastTriedX = x;
+ node._lastTriedY = y;
+ node._lastTriedWidth = width;
+ node._lastTriedHeight = height;
+
+ node = this._prepareNode(node, resizing);
+
+ this._fixCollisions(node);
+ if (!noPack) {
+ this._packNodes();
+ this._notify();
+ }
+ return node;
+ };
+
+ public getRow(): number {
+ return this.nodes.reduce(function(memo, n) { return Math.max(memo, n.y + n.height); }, 0);
+ };
+
+ public beginUpdate(node: GridStackNode) {
+ if (node._updating) return;
+ node._updating = true;
+ this.nodes.forEach(function(n) { n._packY = n.y; });
+ };
+
+ public endUpdate() {
+ const n = this.nodes.find(function(n) { return n._updating; });
+ if (n) {
+ n._updating = false;
+ this.nodes.forEach(function(n) { delete n._packY; });
+ }
+ };
+
+ /** called whenever a node is added or moved - updates the cached layouts */
+ public _layoutsNodesChange(nodes: GridStackNode[]) {
+ if (!this._layouts || this._ignoreLayoutsNodeChange) return;
+ // remove smaller layouts - we will re-generate those on the fly... larger ones need to update
+ this._layouts.forEach(function(layout, column) {
+ if (!layout || column === this.column) return;
+ if (column < this.column) {
+ this._layouts[column] = undefined;
+ }
+ else {
+ // we save the original x,y,w (h isn't cached) to see what actually changed to propagate better.
+ // Note: we don't need to check against out of bound scaling/moving as that will be done when using those cache values.
+ nodes.forEach(function(node) {
+ const n = layout.find(function(l) { return l._id === node._id });
+ if (!n) return; // no cache for new nodes. Will use those values.
+ const ratio = column / this.column;
+ // Y changed, push down same amount
+ // TODO: detect doing item 'swaps' will help instead of move (especially in 1 column mode)
+ if (node.y !== node._origY) {
+ n.y += (node.y - node._origY);
+ }
+ // X changed, scale from new position
+ if (node.x !== node._origX) {
+ n.x = Math.round(node.x * ratio);
+ }
+ // width changed, scale from new width
+ if (node.width !== node._origW) {
+ n.width = Math.round(node.width * ratio);
+ }
+ // ...height always carries over from cache
+ }, this);
+ }
+ }, this);
+ }
+
+ /**
+ * Called to scale the widget width & position up/down based on the column change.
+ * Note we store previous layouts (especially original ones) to make it possible to go
+ * from say 12 -> 1 -> 12 and get back to where we were.
+ *
+ * oldColumn: previous number of columns
+ * column: new column number
+ * nodes?: different sorted list (ex: DOM order) instead of current list
+ */
+ public _updateNodeWidths(oldColumn: number, column: number, nodes: GridStackNode[]) {
+ if (!this.nodes.length || oldColumn === column) { return; }
+
+ // cache the current layout in case they want to go back (like 12 -> 1 -> 12) as it requires original data
+ const copy: layout[] = [];
+ this.nodes.forEach(function(n, i) { copy[i] = {x: n.x, y: n.y, width: n.width, _id: n._id} }); // only thing we change is x,y,w and id to find it back
+ this._layouts = this._layouts || []; // use array to find larger quick
+ this._layouts[oldColumn] = copy;
+
+ // if we're going to 1 column and using DOM order rather than default sorting, then generate that layout
+ if (column === 1 && nodes && nodes.length) {
+ let top = 0;
+ nodes.forEach(function(n) {
+ n.x = 0;
+ n.width = 1;
+ n.y = Math.max(n.y, top);
+ top = n.y + n.height;
+ });
+ } else {
+ nodes = Utils.sort(this.nodes, -1, oldColumn); // current column reverse sorting so we can insert last to front (limit collision)
+ }
+
+ // see if we have cached previous layout.
+ let cacheNodes = this._layouts[column] || [];
+ // if not AND we are going up in size start with the largest layout as down-scaling is more accurate
+ const lastIndex = this._layouts.length - 1;
+ if (cacheNodes.length === 0 && column > oldColumn && column < lastIndex) {
+ cacheNodes = this._layouts[lastIndex] || [];
+ if (cacheNodes.length) {
+ // pretend we came from that larger column by assigning those values as starting point
+ oldColumn = lastIndex;
+ cacheNodes.forEach(function(cacheNode) {
+ const j = nodes.findIndex(function(n) {return n && n._id === cacheNode._id});
+ if (j !== -1) {
+ // still current, use cache info positions
+ nodes[j].x = cacheNode.x;
+ nodes[j].y = cacheNode.y;
+ nodes[j].width = cacheNode.width;
+ }
+ });
+ cacheNodes = []; // we still don't have new column cached data... will generate from larger one.
+ }
+ }
+
+ // if we found cache re-use those nodes that are still current
+ let newNodes = [];
+ cacheNodes.forEach(function(cacheNode) {
+ const j = nodes.findIndex(function(n) {return n && n._id === cacheNode._id});
+ if (j !== -1) {
+ // still current, use cache info positions
+ nodes[j].x = cacheNode.x;
+ nodes[j].y = cacheNode.y;
+ nodes[j].width = cacheNode.width;
+ newNodes.push(nodes[j]);
+ nodes[j] = null; // erase it so we know what's left
+ }
+ });
+ // ...and add any extra non-cached ones
+ const ratio = column / oldColumn;
+ nodes.forEach(function(node) {
+ if (!node) return;
+ node.x = (column === 1 ? 0 : Math.round(node.x * ratio));
+ node.width = ((column === 1 || oldColumn === 1) ? 1 : (Math.round(node.width * ratio) || 1));
+ newNodes.push(node);
+ });
+
+ // finally re-layout them in reverse order (to get correct placement)
+ newNodes = Utils.sort(newNodes, -1, column);
+ this._ignoreLayoutsNodeChange = true;
+ this.batchUpdate();
+ this.nodes = []; // pretend we have no nodes to start with (we use same structures) to simplify layout
+ newNodes.forEach(function(node) {
+ this.addNode(node, false); // 'false' for add event trigger
+ node._dirty = true; // force attr update
+ }, this);
+ this.commit();
+ delete this._ignoreLayoutsNodeChange;
+ }
+
+ /** called to save initial position/size */
+ public _saveInitial() {
+ this.nodes.forEach(function(n) {
+ n._origX = n.x;
+ n._origY = n.y;
+ n._origW = n.width;
+ n._origH = n.height;
+ delete n._dirty;
+ });
+ }
+
+ // legacy method renames
+ private getGridHeight = obsolete(GridStackEngine.prototype.getRow, 'getGridHeight', 'getRow', 'v1.0.0');
+}
diff --git a/src/gridstack-extra.scss b/src/gridstack-extra.scss
index 5725e4475..6fe02327d 100644
--- a/src/gridstack-extra.scss
+++ b/src/gridstack-extra.scss
@@ -1,5 +1,5 @@
/*!
- * gridstack 1.1.0-dev extra CSS for [2-11] columns (non default)
+ * gridstack 2.0.0-rc extra CSS for [2-11] columns (non default)
* https://gridstackjs.com/
* (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov
* gridstack.js may be freely distributed under the MIT license.
diff --git a/src/gridstack-poly.js b/src/gridstack-poly.js
index 5ec62d795..d3e65ed97 100644
--- a/src/gridstack-poly.js
+++ b/src/gridstack-poly.js
@@ -1,5 +1,6 @@
-/** gridstack.js 1.1.0-dev - IE and older browsers Polyfills for this library @preserve*/
-/**
+// gridstack-poly.js 2.0.0-rc @preserve
+
+/** IE and older browsers Polyfills for this library
* https://gridstackjs.com/
* (c) 2019-2020 Alain Dumesny
* gridstack.js may be freely distributed under the MIT license.
diff --git a/src/gridstack.d.ts b/src/gridstack.d.ts
deleted file mode 100644
index 337c8855c..000000000
--- a/src/gridstack.d.ts
+++ /dev/null
@@ -1,644 +0,0 @@
-// Type definitions for Gridstack 1.1.0-dev
-// Project: https://gridstackjs.com/
-// Definitions by: Pascal Senn
-// Ricky Blankenaufulland
-// Sl1MBoy
-// John Archer
-// Alain Dumesny
-// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped initially, but now part of gridstack.js
-// TypeScript Version: 2.8
-
-interface Window {
- GridStack: GridStack;
-}
-
-/* Other items in https://github.com/gridstack/gridstack.js/blob/develop/doc/README.md
- * Grid attributes
- * Item attributes
- * Events
- */
-
-type GridStackElement = string | HTMLElement;
-interface GridStackHTMLElement extends HTMLElement {
- /** grid's parent DOM element points back to grid class */
- gridstack: GridStack;
-}
-type GridStackEvent = 'added' | 'change' | 'disable' | 'dragstart' | 'dragstop' | 'dropped' |
- 'enable' | 'removed' | 'resize' | 'resizestart' | 'gsresizestop' | string;
-
-interface GridStack {
- /**
- * initializing the HTML element, or selector string, into a grid will return the grid. Calling it again will
- * simply return the existing instance (ignore any passed options). There is also a version that support
- * multiple grids initialization.
- * @param options grid options (optional)
- * @param el element to convert to a grid (default to '.grid-stack' class selector)
- *
- * @example
- * var grid = window.GridStack.init();
- * // Note: the HTMLElement (of type GridStackHTMLElement) will itself store a `gridstack: GridStack` value that can be retrieve later
- * var grid = document.querySelector('.grid-stack').gridstack;
- */
- init(options?: GridstackOptions, el?: GridStackElement): GridStack;
-
- /**
- * Will initialize a list of elements (given a selector) and return an array of grids.
- * @param options grid options (optional)
- * @param selector element to convert to grids (default to '.grid-stack' class selector)
- *
- * @example
- * var grids = window.GridStack.initAll();
- * grids.forEach(...)
- */
- initAll(options?: GridstackOptions, selector?: string): GridStack[];
-
- /** the HTML element tied to this grid after it's been initialized */
- el: GridStackHTMLElement;
-
- /** engine used to implement non DOM grid functionality */
- engine: GridStackEngine;
-
- /**
- * Creates new widget and returns it.
- *
- * Widget will be always placed even if result height is more than actual grid height.
- * You need to use willItFit method before calling addWidget for additional check.
- * See also `makeWidget()`.
- *
- * @example
- * var grid = GridStack.init();
- * grid.addWidget(el, {width: 3, autoPosition: true});
- *
- * @param el widget to add
- * @param options widget position/size options (optional)
- */
- addWidget(el: GridStackElement, options ? : GridstackWidget): HTMLElement;
-
- /**
- * Creates new widget and returns it.
- * Legacy: Spelled out version of the widgets options, recommend use new version instead.
- *
- * @example
- * var grid = GridStack.init();
- * grid.addWidget(el, 0, 0, 3, 2, true);
- *
- * @param el widget to add
- * @param x widget position x (optional)
- * @param y widget position y (optional)
- * @param width widget dimension width (optional)
- * @param height widget dimension height (optional)
- * @param autoPosition if true then x, y parameters will be ignored and widget will be places on the first available position (optional)
- * @param minWidth minimum width allowed during resize/creation (optional)
- * @param maxWidth maximum width allowed during resize/creation (optional)
- * @param minHeight minimum height allowed during resize/creation (optional)
- * @param maxHeight maximum height allowed during resize/creation (optional)
- * @param id value for `data-gs-id` (optional)
- */
- addWidget(el: GridStackElement, x ? : number, y ? : number, width ? : number, height ? : number, autoPosition ? : boolean,
- minWidth ? : number, maxWidth ? : number, minHeight ? : number, maxHeight ? : number, id ? : number | string): HTMLElement;
-
- /**
- * Initializes batch updates. You will see no changes until `commit()` method is called.
- */
- batchUpdate(): void;
-
- /**
- * Gets current cell height.
- */
- cellHeight(): number;
-
- /**
- * Update current cell height - see `GridstackOptions.cellHeight` for format.
- * This method rebuilds an internal CSS style sheet.
- * Note: You can expect performance issues if call this method too often.
- *
- * @param val the cell height
- * @param noUpdate (Optional) if true, styles will not be updated
- *
- * @example
- * grid.cellHeight(grid.cellWidth() * 1.2);
- */
- cellHeight(val: number | string, noUpdate ? : boolean): void;
-
- /**
- * Gets current cell width.
- */
- cellWidth(): number;
-
- /**
- * Finishes batch updates. Updates DOM nodes. You must call it after batchUpdate.
- */
- commit(): void;
-
- /**
- * relayout grid items to reclaim any empty space
- */
- compact(): void;
-
- /**
- * set the number of columns in the grid. Will update existing widgets to conform to new number of columns,
- * as well as cache the original layout so you can revert back to previous positions without loss.
- * Requires `gridstack-extra.css` or `gridstack-extra.min.css` for [1-11],
- * else you will need to generate correct CSS (see https://github.com/gridstack/gridstack.js#change-grid-columns)
- * @param column - Integer > 0 (default 12).
- * @param doNotPropagate if true existing widgets will not be updated (optional)
- */
- column(column: number, doNotPropagate ? : boolean): void;
-
- /**
- * get the number of columns in the grid (default 12)
- */
- column(): number;
-
- /**
- * Destroys a grid instance.
- * @param detachGrid if false nodes and grid will not be removed from the DOM (Optional. Default true).
- */
- destroy(detachGrid ? : boolean): void;
-
- /**
- * Disables widgets moving/resizing. This is a shortcut for:
- * @example
- * grid.movable('.grid-stack-item', false);
- * grid.resizable('.grid-stack-item', false);
- */
- disable(): void;
-
- /**
- * Enables widgets moving/resizing. This is a shortcut for:
- * @example
- * grid.movable('.grid-stack-item', true);
- * grid.resizable('.grid-stack-item', true);
- */
- enable(): void;
-
- /**
- * Enables/disables widget moving.
- *
- * @param doEnable
- * @param includeNewWidgets will force new widgets to be draggable as per
- * doEnable`s value by changing the disableDrag grid option.
- */
- enableMove(doEnable: boolean, includeNewWidgets: boolean): void;
-
- /**
- * Enables/disables widget resizing
- * @param doEnable
- * @param includeNewWidgets will force new widgets to be draggable as per
- * doEnable`s value by changing the disableResize grid option.
- */
- enableResize(doEnable: boolean, includeNewWidgets: boolean): void;
-
- /**
- * enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html)
- * @param mode
- */
- float(mode: boolean): void;
-
- /**
- * get the current float mode
- */
- float(): boolean;
-
- /**
- * Get the position of the cell under a pixel on screen.
- * @param position the position of the pixel to resolve in
- * absolute coordinates, as an object with top and left properties
- * @param useOffset if true, value will be based on offset vs position (Optional. Default false).
- * Useful when grid is within `position: relative` element
- *
- * Returns an object with properties `x` and `y` i.e. the column and row in the grid.
- */
- getCellFromPixel(position: MousePosition, useOffset ? : boolean): CellPosition;
-
- /** returns the current number of rows */
- getRow(): number;
-
- /**
- * Checks if specified area is empty.
- * @param x the position x.
- * @param y the position y.
- * @param width the width of to check
- * @param height the height of to check
- */
- isAreaEmpty(x: number, y: number, width: number, height: number): void;
-
- /**
- * Locks/unlocks widget.
- * @param el widget to modify.
- * @param val if true widget will be locked.
- */
- locked(el: GridStackElement, val: boolean): void;
-
- /**
- * If you add elements to your grid by hand, you have to tell gridstack afterwards to make them widgets.
- * If you want gridstack to add the elements for you, use addWidget instead.
- * Makes the given element a widget and returns it.
- * @param el widget to convert.
- *
- * @example
- * var grid = GridStack.init();
- * grid.el.appendChild('')
- * grid.makeWidget('gsi-1');
- */
- makeWidget(el: GridStackElement): HTMLElement;
-
- /**
- * Set the maxWidth for a widget.
- * @param el widget to modify.
- * @param val A numeric value of the number of columns
- */
- maxWidth(el: GridStackElement, val: number): void;
-
- /**
- * Set the minWidth for a widget.
- * @param el widget to modify.
- * @param val A numeric value of the number of columns
- */
- minWidth(el: GridStackElement, val: number): void;
-
- /**
- * Set the maxHeight for a widget.
- * @param el widget to modify.
- * @param val A numeric value of the number of rows
- */
- maxHeight(el: GridStackElement, val: number): void;
-
- /**
- * Set the minHeight for a widget.
- * @param el widget to modify.
- * @param val A numeric value of the number of rows
- */
- minHeight(el: GridStackElement, val: number): void;
-
- /**
- * Enables/Disables moving.
- * @param el widget to modify.
- * @param val if true widget will be draggable.
- */
- movable(el: GridStackElement, val: boolean): void;
-
- /**
- * Changes widget position
- * @param el widget to modify
- * @param x new position x. If value is null or undefined it will be ignored.
- * @param y new position y. If value is null or undefined it will be ignored.
- */
- move(el: GridStackElement, x: number, y: number): void;
-
- /**
- * unsubscribe from the 'on' event below
- * @param name of the event (see possible values)
- */
- off(name: GridStackEvent): void;
-
- /**
- * Event handler that extracts our CustomEvent data out automatically for receiving custom
- * notifications (see doc for supported events)
- * @param name of the event (see possible values) or list of names space separated
- * @param callback function called with event and optional second/third param
- * (see README documentation for each signature).
- *
- * @example
- * grid.on('added', function(e, items) { log('added ', items)} );
- * or
- * grid.on('added removed change', function(e, items) { log(e.type, items)} );
- *
- * Note: in some cases it is the same as calling native handler and parsing the event.
- * grid.el.addEventListener('added', function(event) { log('added ', event.detail)} );
- */
- on(name: GridStackEvent, callback: (event: CustomEvent, arg2?: GridStackNode[] | Object, arg3?: Object) => void): void;
-
- /**
- * Removes widget from the grid.
- * @param el widget to modify
- * @param detachNode if false DOM node won't be removed from the tree (Default? true).
- */
- removeWidget(el: GridStackElement, detachNode ? : boolean): void;
-
- /**
- * Removes all widgets from the grid.
- * @param detachNode if false DOM nodes won't be removed from the tree (Default? true).
- */
- removeAll(detachNode ? : boolean): void;
-
- /**
- * Changes widget size
- * @param el widget to modify
- * @param width new dimensions width. If value is null or undefined it will be ignored.
- * @param height new dimensions height. If value is null or undefined it will be ignored.
- */
- resize(el: GridStackElement, width: number, height: number): void;
-
- /**
- * Enables/Disables resizing.
- * @param el widget to modify
- * @param val if true widget will be resizable.
- */
- resizable(el: GridStackElement, val: boolean): void;
-
- /**
- * Toggle the grid animation state. Toggles the `grid-stack-animate` class.
- * @param doAnimate if true the grid will animate.
- */
- setAnimation(doAnimate: boolean): void;
-
- /**
- * Toggle the grid static state. Also toggle the grid-stack-static class.
- * @param staticValue if true the grid become static.
- */
- setStatic(staticValue: boolean): void;
-
- /**
- * Updates widget position/size.
- * @param el widget to modify
- * @param x new position x. If value is null or undefined it will be ignored.
- * @param y new position y. If value is null or undefined it will be ignored.
- * @param width new dimensions width. If value is null or undefined it will be ignored.
- * @param height new dimensions height. If value is null or undefined it will be ignored.
- */
- update(el: GridStackElement, x: number, y: number, width: number, height: number): void;
-
- /**
- * returns current vertical margin value
- */
- verticalMargin(): number;
-
- /**
- * Updates the vertical margin - see `GridstackOptions.verticalMargin` for format options.
- *
- * @param value new vertical margin value
- * @param noUpdate (optional) if true, styles will not be updated
- */
- verticalMargin(value: number | string, noUpdate ? : boolean): void;
-
- /**
- * Returns true if the height of the grid will be less the vertical
- * constraint. Always returns true if grid doesn't have height constraint.
- * @param x new position x. If value is null or undefined it will be ignored.
- * @param y new position y. If value is null or undefined it will be ignored.
- * @param width new dimensions width. If value is null or undefined it will be ignored.
- * @param height new dimensions height. If value is null or undefined it will be ignored.
- * @param autoPosition if true then x, y parameters will be ignored and widget
- * will be places on the first available position
- *
- * @example
- * if (grid.willItFit(newNode.x, newNode.y, newNode.width, newNode.height, true)) {
- * grid.addWidget(newNode.el, newNode.x, newNode.y, newNode.width, newNode.height, true);
- * } else {
- * alert('Not enough free space to place the widget');
- * }
- */
- willItFit(x: number, y: number, width: number, height: number, autoPosition: boolean): boolean;
-}
-
-/**
- * Defines the GridStack engine that does most no DOM grid manipulation.
- * See GridStack methods and vars for descriptions.
- *
- * NOTE: values should not be modified - call the GridStack API instead
- */
-interface GridStackEngine {
- column: number;
- float: boolean;
- maxRow: number;
- nodes: GridStackNode[];
- getRow(): number;
-}
-
-/**
- * Defines the coordinates of an object
- */
-interface MousePosition {
- top: number;
- left: number;
-}
-
-/**
- * Defines the position of a cell inside the grid
- */
-interface CellPosition {
- x: number;
- y: number;
-}
-
-/**
- * Gridstack Widget creation options
- * @param x widget position x (default?: 0)
- * @param y widget position y (default?: 0)
- * @param width widget dimension width (default?: 1)
- * @param height widget dimension height (default?: 1)
- * @param autoPosition if true then x, y parameters will be ignored and widget will be places on the first available position (default?: false)
- * @param minWidth minimum width allowed during resize/creation (default?: undefined = un-constrained)
- * @param maxWidth maximum width allowed during resize/creation (default?: undefined = un-constrained)
- * @param minHeight minimum height allowed during resize/creation (default?: undefined = un-constrained)
- * @param maxHeight maximum height allowed during resize/creation (default?: undefined = un-constrained)
- * @param noResize prevent resizing (default?: undefined = un-constrained)
- * @param noMove prevents moving (default?: undefined = un-constrained)
- * @param locked prevents moving and resizing (default?: undefined = un-constrained)
- * @param resizeHandles widgets can have their own resize handles. For example 'e,w' will make the particular widget only resize east and west.
- * @param id value for `data-gs-id` stored on the widget (default?: undefined)
- */
-interface GridstackWidget {
- x ? : number;
- y ? : number;
- width ? : number;
- height ? : number;
- autoPosition ? : boolean;
- minWidth ? : number;
- maxWidth ? : number;
- minHeight ? : number;
- maxHeight ? : number;
- noResize ? : boolean;
- noMove ? : boolean;
- locked ? : boolean;
- resizeHandles ?: string;
- id ? : number | string;
-}
-
-/**
- * internal descriptions describing the items in the grid
- */
-interface GridStackNode extends GridstackWidget {
- el: HTMLElement;
- _grid: GridStack;
-}
-
-interface Utils {
- /**
- * Sorts array of nodes
- * @param nodes array to sort
- * @param dir 1 for asc, -1 for desc (optional)
- * @param width width of the grid. If undefined the width will be calculated automatically (optional).
- **/
- sort(nodes: GridStackNode[], dir ? : number, width ? : number): void;
-}
-
-/**
- * Gridstack Options
- * Defines the options for a Gridstack
- */
-interface GridstackOptions {
- /**
- * accept widgets dragged from other grids or from outside (default: `false`). Can be:
- * `true` (uses `'.grid-stack-item'` class filter) or `false`,
- * string for explicit class name,
- * function returning a boolean. See [example](http://gridstack.github.io/gridstack.js/demo/two.html)
- */
- acceptWidgets ? : boolean | string | ((i: number, element: Element) => boolean);
-
- /**
- * if true the resizing handles are shown even if the user is not hovering over the widget (default?: false)
- */
- alwaysShowResizeHandle ? : boolean;
-
- /**
- * turns animation on (default?: true)
- */
- animate ? : boolean;
-
- /**
- * if false gridstack will not initialize existing items (default?: true)
- */
- auto ? : boolean;
-
- /**
- * one cell height (default?: 60). Can be:
- * an integer (px)
- * a string (ex: '100px', '10em', '10rem', '10%')
- * 0 or null, in which case the library will not generate styles for rows. Everything must be defined in CSS files.
- * 'auto' - height will be calculated to match cell width (initial square grid).
- */
- cellHeight ? : number | string;
-
- /**
- * (internal) unit for cellHeight (default? 'px') which is set when a string cellHeight with a unit is passed (ex: '10rem')
- */
- cellHeightUnit ? : string;
-
- /**
- * number of columns (default?: 12). Note: IF you change this, CSS also have to change. See https://github.com/gridstack/gridstack.js#change-grid-columns
- */
- column ? : number;
-
- /** class that implement drag'n'drop functionality for gridstack. If false grid will be static.
- * (default?: null - first available plugin will be used)
- */
- ddPlugin ? : boolean | null | any;
-
- /** disallows dragging of widgets (default?: false) */
- disableDrag ? : boolean;
-
- /** disables the onColumnMode when the window width is less than minWidth (default?: false) */
- disableOneColumnMode ? : boolean;
-
- /** disallows resizing of widgets (default?: false). */
- disableResize ? : boolean;
-
- /**
- * allows to override UI draggable options. (default?: { handle?: '.grid-stack-item-content', scroll?: true, appendTo?: 'body', containment: null })
- */
- draggable ? : {};
-
- /**
- * let user drag nested grid items out of a parent or not (default false)
- */
- dragOut ? : boolean;
-
- /**
- * enable floating widgets (default?: false) See example (http://gridstack.github.io/gridstack.js/demo/float.html)
- */
- float ? : boolean;
-
- /**
- * draggable handle selector (default?: '.grid-stack-item-content')
- */
- handle ? : string;
-
- /** draggable handle class (e.g. 'grid-stack-item-content'). If set 'handle' is ignored (default?: null) */
- handleClass ? : string;
-
- /**
- * widget class (default?: 'grid-stack-item')
- */
- itemClass ? : string;
-
- /**
- * maximum rows amount. Default? is 0 which means no maximum rows
- */
- maxRow ? : number;
-
- /**
- * minimum rows amount. Default is `0`. You can also do this with `min-height` CSS attribute
- * on the grid div in pixels, which will round to the closest row.
- */
- minRow?: number;
-
- /**
- * minimal width. If window width is less, grid will be shown in one column mode (default?: 768)
- */
- minWidth ? : number;
-
- /**
- * set to true if you want oneColumnMode to use the DOM order and ignore x,y from normal multi column
- * layouts during sorting. This enables you to have custom 1 column layout that differ from the rest. (default?: false)
- */
- oneColumnModeDomSort?: boolean;
-
- /**
- * class for placeholder (default?: 'grid-stack-placeholder')
- */
- placeholderClass ? : string;
-
- /** placeholder default content (default?: '') */
- placeholderText ? : string;
-
- /**
- * allows to override UI resizable options. (default?: { autoHide?: true, handles?: 'se' })
- */
- resizable ? : {};
-
- /**
- * if true widgets could be removed by dragging outside of the grid. It could also be a selector string,
- * in this case widgets will be removed by dropping them there (default?: false)
- * See example (http://gridstack.github.io/gridstack.js/demo/two.html)
- */
- removable ? : boolean | string;
-
- /**
- * time in milliseconds before widget is being removed while dragging outside of the grid. (default?: 2000)
- */
- removeTimeout ? : number;
-
- /**
- * fix grid number of rows. This is a shortcut of writing `minRow:N, maxRow:N`.
- * (default `0` no constrain)
- */
- row?: number;
-
- /**
- * if true turns grid to RTL. Possible values are true, false, 'auto' (default?: 'auto')
- * See [example](http://gridstack.github.io/gridstack.js/demo/rtl.html)
- */
- rtl ? : boolean | 'auto';
-
- /**
- * makes grid static (default?: false). If `true` widgets are not movable/resizable.
- * You don't even need draggable/resizable. A CSS class
- * 'grid-stack-static' is also added to the element.
- */
- staticGrid ? : boolean;
-
- /**
- * vertical gap size (default?: 20). Can be:
- * an integer (px)
- * a string (ex: '2em', '20px', '2rem')
- */
- verticalMargin ? : number | string;
-
- /**
- * (internal) unit for verticalMargin (default? 'px') set when `verticalMargin` is set as string with unit (ex: 2rem')
- */
- verticalMarginUnit ? : string;
-}
\ No newline at end of file
diff --git a/src/gridstack.jQueryUI.js b/src/gridstack.jQueryUI.js
deleted file mode 100644
index 0c5c95fb2..000000000
--- a/src/gridstack.jQueryUI.js
+++ /dev/null
@@ -1,90 +0,0 @@
-/** gridstack.js 1.1.0-dev - JQuery UI Drag&Drop plugin @preserve */
-/**
- * https://gridstackjs.com/
- * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov
- * gridstack.js may be freely distributed under the MIT license.
-*/
-(function(factory) {
- /* we compile this in so no need for required loading
- if (typeof define === 'function' && define.amd) {
- define(['jquery', 'gridstack', 'exports'], factory);
- } else if (typeof exports !== 'undefined') {
- try { jQuery = require('jquery'); } catch (e) {}
- try { gridstack = require('gridstack'); } catch (e) {}
- factory(jQuery, gridstack.GridStack, exports);
- } else */{
- factory(jQuery, GridStack, window);
- }
-})(function($, GridStack, scope) {
- /**
- * @class JQueryUIGridStackDragDropPlugin
- * jQuery UI implementation of drag'n'drop gridstack plugin.
- */
- function JQueryUIGridStackDragDropPlugin(grid) {
- GridStack.DragDropPlugin.call(this, grid);
- }
-
- GridStack.DragDropPlugin.registerPlugin(JQueryUIGridStackDragDropPlugin);
-
- JQueryUIGridStackDragDropPlugin.prototype = Object.create(GridStack.DragDropPlugin.prototype);
- JQueryUIGridStackDragDropPlugin.prototype.constructor = JQueryUIGridStackDragDropPlugin;
-
- JQueryUIGridStackDragDropPlugin.prototype.resizable = function(el, opts) {
- el = $(el);
- if (opts === 'disable' || opts === 'enable') {
- el.resizable(opts);
- } else if (opts === 'option') {
- var key = arguments[2];
- var value = arguments[3];
- el.resizable(opts, key, value);
- } else {
- var handles = el.data('gs-resize-handles') ? el.data('gs-resize-handles') :
- this.grid.opts.resizable.handles;
- el.resizable($.extend({}, this.grid.opts.resizable, {
- handles: handles
- }, {
- start: opts.start || function() {},
- stop: opts.stop || function() {},
- resize: opts.resize || function() {}
- }));
- }
- return this;
- };
-
- JQueryUIGridStackDragDropPlugin.prototype.draggable = function(el, opts) {
- el = $(el);
- if (opts === 'disable' || opts === 'enable') {
- el.draggable(opts);
- } else {
- el.draggable($.extend({}, this.grid.opts.draggable, {
- containment: (this.grid.opts.isNested && !this.grid.opts.dragOut) ?
- this.grid.$el.parent() :
- (this.grid.opts.draggable.containment || null),
- start: opts.start || function() {},
- stop: opts.stop || function() {},
- drag: opts.drag || function() {}
- }));
- }
- return this;
- };
-
- JQueryUIGridStackDragDropPlugin.prototype.droppable = function(el, opts) {
- el = $(el);
- el.droppable(opts);
- return this;
- };
-
- JQueryUIGridStackDragDropPlugin.prototype.isDroppable = function(el, opts) {
- el = $(el);
- return Boolean(el.data('droppable'));
- };
-
- JQueryUIGridStackDragDropPlugin.prototype.on = function(el, eventName, callback) {
- $(el).on(eventName, callback);
- return this;
- };
-
- scope.JQueryUIGridStackDragDropPlugin = JQueryUIGridStackDragDropPlugin;
-
- return JQueryUIGridStackDragDropPlugin;
-});
diff --git a/src/gridstack.js b/src/gridstack.js
deleted file mode 100644
index a59ce77c9..000000000
--- a/src/gridstack.js
+++ /dev/null
@@ -1,2119 +0,0 @@
-/**
- * gridstack.js 1.1.0-dev
- * https://gridstackjs.com/
- * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov
- * gridstack.js may be freely distributed under the MIT license.
- * @preserve
-*/
-(function(factory) {
- /* [alain] we compile jquery with our code, so no need to 'load' externally
- if (typeof define === 'function' && define.amd) {
- define(['jquery', 'exports'], factory);
- } else if (typeof exports !== 'undefined') {
- var jQueryModule;
-
- try { jQueryModule = require('jquery'); } catch (e) {}
-
- factory(jQueryModule || window.jQuery, exports);
- } else */{
- factory(window.jQuery, window);
- }
-})(function($, scope) {
-
- // checks for obsolete method names
- var obsolete = function(f, oldName, newName, rev) {
- var wrapper = function() {
- console.warn('gridstack.js: Function `' + oldName + '` is deprecated in ' + rev + ' and has been replaced ' +
- 'with `' + newName + '`. It will be **completely** removed in v1.0');
- return f.apply(this, arguments);
- };
- wrapper.prototype = f.prototype;
-
- return wrapper;
- };
-
- // checks for obsolete grid options (can be used for any fields, but msg is about options)
- var obsoleteOpts = function(opts, oldName, newName, rev) {
- if (opts[oldName] !== undefined) {
- opts[newName] = opts[oldName];
- console.warn('gridstack.js: Option `' + oldName + '` is deprecated in ' + rev + ' and has been replaced with `' +
- newName + '`. It will be **completely** removed in v1.0');
- }
- };
-
- // checks for obsolete grid options which are gone
- var obsoleteOptsDel = function(opts, oldName, rev, info) {
- if (opts[oldName] !== undefined) {
- console.warn('gridstack.js: Option `' + oldName + '` is deprecated in ' + rev + info);
- }
- };
-
- // checks for obsolete Jquery element attributes
- var obsoleteAttr = function(el, oldName, newName, rev) {
- var oldAttr = el.attr(oldName);
- if (oldAttr !== undefined) {
- el.attr(newName, oldAttr);
- console.warn('gridstack.js: attribute `' + oldName + '`=' + oldAttr + ' is deprecated on this object in ' + rev + ' and has been replaced with `' +
- newName + '`. It will be **completely** removed in v1.0');
- }
- };
-
- var Utils = {
-
- isIntercepted: function(a, b) {
- return !(a.x + a.width <= b.x || b.x + b.width <= a.x || a.y + a.height <= b.y || b.y + b.height <= a.y);
- },
-
- sort: function(nodes, dir, column) {
- if (!column) {
- var widths = nodes.map(function(node) { return node.x + node.width; });
- column = Math.max.apply(Math, widths);
- }
-
- if (dir === -1)
- return Utils.sortBy(nodes, function(n) { return -(n.x + n.y * column); });
- else
- return Utils.sortBy(nodes, function(n) { return (n.x + n.y * column); });
- },
-
- createStylesheet: function(id, parent) {
- var style = document.createElement('style');
- style.setAttribute('type', 'text/css');
- style.setAttribute('data-gs-style-id', id);
- if (style.styleSheet) {
- style.styleSheet.cssText = '';
- } else {
- style.appendChild(document.createTextNode(''));
- }
- if (!parent) { parent = document.getElementsByTagName('head')[0]; } // default to head
- parent.insertBefore(style, parent.firstChild);
- return style.sheet;
- },
-
- removeStylesheet: function(id) {
- $('STYLE[data-gs-style-id=' + id + ']').remove();
- },
-
- insertCSSRule: function(sheet, selector, rules, index) {
- if (typeof sheet.insertRule === 'function') {
- sheet.insertRule(selector + '{' + rules + '}', index);
- } else if (typeof sheet.addRule === 'function') {
- sheet.addRule(selector, rules, index);
- }
- },
-
- toBool: function(v) {
- if (typeof v === 'boolean') {
- return v;
- }
- if (typeof v === 'string') {
- v = v.toLowerCase();
- return !(v === '' || v === 'no' || v === 'false' || v === '0');
- }
- return Boolean(v);
- },
-
- _collisionNodeCheck: function(n) {
- return n !== this.node && Utils.isIntercepted(n, this.nn);
- },
-
- _didCollide: function(bn) {
- return Utils.isIntercepted({x: this.n.x, y: this.newY, width: this.n.width, height: this.n.height}, bn);
- },
-
- _isAddNodeIntercepted: function(n) {
- return Utils.isIntercepted({x: this.x, y: this.y, width: this.node.width, height: this.node.height}, n);
- },
-
- parseHeight: function(val) {
- var height = val;
- var heightUnit = 'px';
- if (height && typeof height === 'string') {
- var match = height.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw|%)?$/);
- if (!match) {
- throw new Error('Invalid height');
- }
- heightUnit = match[2] || 'px';
- height = parseFloat(match[1]);
- }
- return {height: height, unit: heightUnit};
- },
-
- without: function(array, item) {
- var index = array.indexOf(item);
-
- if (index !== -1) {
- array = array.slice(0);
- array.splice(index, 1);
- }
-
- return array;
- },
-
- sortBy: function(array, getter) {
- return array.slice(0).sort(function(left, right) {
- var valueLeft = getter(left);
- var valueRight = getter(right);
-
- if (valueRight === valueLeft) {
- return 0;
- }
-
- return valueLeft > valueRight ? 1 : -1;
- });
- },
-
- defaults: function(target) {
- var sources = Array.prototype.slice.call(arguments, 1);
-
- sources.forEach(function(source) {
- for (var prop in source) {
- if (source.hasOwnProperty(prop) && (!target.hasOwnProperty(prop) || target[prop] === undefined)) {
- target[prop] = source[prop];
- }
- }
- });
-
- return target;
- },
-
- clone: function(target) {
- return $.extend({}, target);
- },
-
- throttle: function(callback, delay) {
- var isWaiting = false;
-
- return function() {
- if (!isWaiting) {
- callback.apply(this, arguments);
- isWaiting = true;
- setTimeout(function() { isWaiting = false; }, delay);
- }
- };
- },
-
- removePositioningStyles: function(el) {
- var style = el[0].style;
- if (style.position) {
- style.removeProperty('position');
- }
- if (style.left) {
- style.removeProperty('left');
- }
- if (style.top) {
- style.removeProperty('top');
- }
- if (style.width) {
- style.removeProperty('width');
- }
- if (style.height) {
- style.removeProperty('height');
- }
- },
- getScrollParent: function(el) {
- var returnEl;
- if (el === null) {
- returnEl = null;
- } else if (el.scrollHeight > el.clientHeight) {
- returnEl = el;
- } else {
- returnEl = Utils.getScrollParent(el.parentNode);
- }
- return returnEl;
- },
- updateScrollPosition: function(el, ui, distance) {
- // is widget in view?
- var rect = el.getBoundingClientRect();
- var innerHeightOrClientHeight = (window.innerHeight || document.documentElement.clientHeight);
- if (rect.top < 0 ||
- rect.bottom > innerHeightOrClientHeight
- ) {
- // set scrollTop of first parent that scrolls
- // if parent is larger than el, set as low as possible
- // to get entire widget on screen
- var offsetDiffDown = rect.bottom - innerHeightOrClientHeight;
- var offsetDiffUp = rect.top;
- var scrollEl = Utils.getScrollParent(el);
- if (scrollEl !== null) {
- var prevScroll = scrollEl.scrollTop;
- if (rect.top < 0 && distance < 0) {
- // moving up
- if (el.offsetHeight > innerHeightOrClientHeight) {
- scrollEl.scrollTop += distance;
- } else {
- scrollEl.scrollTop += Math.abs(offsetDiffUp) > Math.abs(distance) ? distance : offsetDiffUp;
- }
- } else if (distance > 0) {
- // moving down
- if (el.offsetHeight > innerHeightOrClientHeight) {
- scrollEl.scrollTop += distance;
- } else {
- scrollEl.scrollTop += offsetDiffDown > distance ? distance : offsetDiffDown;
- }
- }
- // move widget y by amount scrolled
- ui.position.top += scrollEl.scrollTop - prevScroll;
- }
- }
- }
- };
-
- /**
- * @class GridStackDragDropPlugin
- * Base class for drag'n'drop plugin.
- */
- function GridStackDragDropPlugin(grid) {
- this.grid = grid;
- }
-
- GridStackDragDropPlugin.registeredPlugins = [];
-
- GridStackDragDropPlugin.registerPlugin = function(pluginClass) {
- GridStackDragDropPlugin.registeredPlugins.push(pluginClass);
- };
-
- GridStackDragDropPlugin.prototype.resizable = function(el, opts) {
- return this;
- };
-
- GridStackDragDropPlugin.prototype.draggable = function(el, opts) {
- return this;
- };
-
- GridStackDragDropPlugin.prototype.droppable = function(el, opts) {
- return this;
- };
-
- GridStackDragDropPlugin.prototype.isDroppable = function(el) {
- return false;
- };
-
- GridStackDragDropPlugin.prototype.on = function(el, eventName, callback) {
- return this;
- };
-
-
- var idSeq = 0;
-
- var GridStackEngine = function(column, onchange, float, maxRow, items) {
- this.column = column || 12;
- this.float = float || false;
- this.maxRow = maxRow || 0;
-
- this.nodes = items || [];
- this.onchange = onchange || function() {};
-
- this._addedNodes = [];
- this._removedNodes = [];
- this._batchMode = false;
- };
-
- GridStackEngine.prototype.batchUpdate = function() {
- if (this._batchMode) return;
- this._batchMode = true;
- this._prevFloat = this.float;
- this.float = true; // let things go anywhere for now... commit() will restore and possibly reposition
- };
-
- GridStackEngine.prototype.commit = function() {
- if (!this._batchMode) return;
- this._batchMode = false;
- this.float = this._prevFloat;
- delete this._prevFloat;
- this._packNodes();
- this._notify();
- };
-
- // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272
- GridStackEngine.prototype.getNodeDataByDOMEl = function(el) {
- return this.nodes.find(function(node) { return el === node.el });
- };
-
- GridStackEngine.prototype._fixCollisions = function(node) {
- var self = this;
- this._sortNodes(-1);
-
- var nn = node;
- var hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; }));
- if (!this.float && !hasLocked) {
- nn = {x: 0, y: node.y, width: this.column, height: node.height};
- }
- while (true) {
- var collisionNode = this.nodes.find(Utils._collisionNodeCheck, {node: node, nn: nn});
- if (!collisionNode) { return; }
- var moved = this.moveNode(collisionNode, collisionNode.x, node.y + node.height,
- collisionNode.width, collisionNode.height, true);
- if (!moved) { return; } // break inf loop if we couldn't move after all (ex: maxRow, fixed)
- }
- };
-
- GridStackEngine.prototype.isAreaEmpty = function(x, y, width, height) {
- var nn = {x: x || 0, y: y || 0, width: width || 1, height: height || 1};
- var collisionNode = this.nodes.find(function(n) {
- return Utils.isIntercepted(n, nn);
- });
- return !collisionNode;
- };
-
- GridStackEngine.prototype._sortNodes = function(dir) {
- this.nodes = Utils.sort(this.nodes, dir, this.column);
- };
-
- GridStackEngine.prototype._packNodes = function() {
- this._sortNodes();
-
- if (this.float) {
- this.nodes.forEach(function(n, i) {
- if (n._updating || n._packY === undefined || n.y === n._packY) {
- return;
- }
-
- var newY = n.y;
- while (newY >= n._packY) {
- var collisionNode = this.nodes
- .slice(0, i)
- .find(Utils._didCollide, {n: n, newY: newY});
-
- if (!collisionNode) {
- n._dirty = true;
- n.y = newY;
- }
- --newY;
- }
- }, this);
- } else {
- this.nodes.forEach(function(n, i) {
- if (n.locked) { return; }
- while (n.y > 0) {
- var newY = n.y - 1;
- var canBeMoved = i === 0;
-
- if (i > 0) {
- var collisionNode = this.nodes
- .slice(0, i)
- .find(Utils._didCollide, {n: n, newY: newY});
- canBeMoved = collisionNode === undefined;
- }
-
- if (!canBeMoved) { break; }
- // Note: must be dirty (from last position) for GridStack::OnChange CB to update positions
- // and move items back. The user 'change' CB should detect changes from the original
- // starting position instead.
- n._dirty = (n.y !== newY);
- n.y = newY;
- }
- }, this);
- }
- };
-
- GridStackEngine.prototype._prepareNode = function(node, resizing) {
- node = node || {};
- // if we're missing position, have the grid position us automatically (before we set them to 0,0)
- if (node.x === undefined || node.y === undefined || node.x === null || node.y === null) {
- node.autoPosition = true;
- }
-
- // assign defaults for missing required fields
- var defaults = {width: 1, height: 1, x: 0, y: 0};
- node = Utils.defaults(node, defaults);
-
- // convert any strings over
- node.x = parseInt(node.x);
- node.y = parseInt(node.y);
- node.width = parseInt(node.width);
- node.height = parseInt(node.height);
- node.autoPosition = node.autoPosition || false;
- node.noResize = node.noResize || false;
- node.noMove = node.noMove || false;
-
- // check for NaN (in case messed up strings were passed. can't do parseInt() || defaults.x above as 0 is valid #)
- if (Number.isNaN(node.x)) { node.x = defaults.x; node.autoPosition = true; }
- if (Number.isNaN(node.y)) { node.y = defaults.y; node.autoPosition = true; }
- if (Number.isNaN(node.width)) { node.width = defaults.width; }
- if (Number.isNaN(node.height)) { node.height = defaults.height; }
-
- if (node.maxWidth !== undefined) { node.width = Math.min(node.width, node.maxWidth); }
- if (node.maxHeight !== undefined) { node.height = Math.min(node.height, node.maxHeight); }
- if (node.minWidth !== undefined) { node.width = Math.max(node.width, node.minWidth); }
- if (node.minHeight !== undefined) { node.height = Math.max(node.height, node.minHeight); }
-
- if (node.width > this.column) {
- node.width = this.column;
- } else if (node.width < 1) {
- node.width = 1;
- }
- if (this.maxRow && node.height > this.maxRow) {
- node.height = this.maxRow;
- } else if (node.height < 1) {
- node.height = 1;
- }
-
- if (node.x < 0) {
- node.x = 0;
- }
- if (node.y < 0) {
- node.y = 0;
- }
-
- if (node.x + node.width > this.column) {
- if (resizing) {
- node.width = this.column - node.x;
- } else {
- node.x = this.column - node.width;
- }
- }
- if (this.maxRow && node.y + node.height > this.maxRow) {
- if (resizing) {
- node.height = this.maxRow - node.y;
- } else {
- node.y = this.maxRow - node.height;
- }
- }
-
- return node;
- };
-
- GridStackEngine.prototype._notify = function() {
- if (this._batchMode) { return; }
- var args = Array.prototype.slice.call(arguments, 0);
- args[0] = (args[0] === undefined ? [] : (Array.isArray(args[0]) ? args[0] : [args[0]]) );
- args[1] = (args[1] === undefined ? true : args[1]);
- var dirtyNodes = args[0].concat(this.getDirtyNodes());
- this.onchange(dirtyNodes, args[1]);
- };
-
- GridStackEngine.prototype.cleanNodes = function() {
- if (this._batchMode) { return; }
- this.nodes.forEach(function(n) { delete n._dirty; });
- };
-
- GridStackEngine.prototype.getDirtyNodes = function(verify) {
- // compare original X,Y,W,H (or entire node?) instead as _dirty can be a temporary state
- if (verify) {
- var dirtNodes = [];
- this.nodes.forEach(function (n) {
- if (n._dirty) {
- if (n.y === n._origY && n.x === n._origX && n.width === n._origW && n.height === n._origH) {
- delete n._dirty;
- } else {
- dirtNodes.push(n);
- }
- }
- });
- return dirtNodes;
- }
-
- return this.nodes.filter(function(n) { return n._dirty; });
- };
-
- GridStackEngine.prototype.addNode = function(node, triggerAddEvent) {
- node = this._prepareNode(node);
-
- node._id = node._id || ++idSeq;
-
- if (node.autoPosition) {
- this._sortNodes();
-
- for (var i = 0;; ++i) {
- var x = i % this.column;
- var y = Math.floor(i / this.column);
- if (x + node.width > this.column) {
- continue;
- }
- if (!this.nodes.find(Utils._isAddNodeIntercepted, {x: x, y: y, node: node})) {
- node.x = x;
- node.y = y;
- delete node.autoPosition; // found our slot
- break;
- }
- }
- }
-
- this.nodes.push(node);
- if (triggerAddEvent) {
- this._addedNodes.push(node);
- }
-
- this._fixCollisions(node);
- this._packNodes();
- this._notify();
- return node;
- };
-
- GridStackEngine.prototype.removeNode = function(node, detachNode) {
- detachNode = (detachNode === undefined ? true : detachNode);
- this._removedNodes.push(node);
- node._id = null; // hint that node is being removed
- this.nodes = Utils.without(this.nodes, node);
- this._packNodes();
- this._notify(node, detachNode);
- };
-
- GridStackEngine.prototype.removeAll = function(detachNode) {
- delete this._layouts;
- if (this.nodes.length === 0) { return; }
- detachNode = (detachNode === undefined ? true : detachNode);
- this.nodes.forEach(function(n) { n._id = null; }); // hint that node is being removed
- this._removedNodes = this.nodes;
- this.nodes = [];
- this._notify(this._removedNodes, detachNode);
- };
-
- GridStackEngine.prototype.canMoveNode = function(node, x, y, width, height) {
- if (!this.isNodeChangedPosition(node, x, y, width, height)) {
- return false;
- }
- var hasLocked = Boolean(this.nodes.find(function(n) { return n.locked; }));
-
- if (!this.maxRow && !hasLocked) {
- return true;
- }
-
- var clonedNode;
- var clone = new GridStackEngine(
- this.column,
- null,
- this.float,
- 0,
- this.nodes.map(function(n) {
- if (n === node) {
- clonedNode = $.extend({}, n);
- return clonedNode;
- }
- return $.extend({}, n);
- }));
-
- if (!clonedNode) { return true;}
-
- clone.moveNode(clonedNode, x, y, width, height);
-
- var res = true;
-
- if (hasLocked) {
- res &= !Boolean(clone.nodes.find(function(n) {
- return n !== clonedNode && Boolean(n.locked) && Boolean(n._dirty);
- }));
- }
- if (this.maxRow) {
- res &= clone.getRow() <= this.maxRow;
- }
-
- return res;
- };
-
- GridStackEngine.prototype.canBePlacedWithRespectToHeight = function(node) {
- if (!this.maxRow) {
- return true;
- }
-
- var clone = new GridStackEngine(
- this.column,
- null,
- this.float,
- 0,
- this.nodes.map(function(n) { return $.extend({}, n); }));
- clone.addNode(node);
- return clone.getRow() <= this.maxRow;
- };
-
- GridStackEngine.prototype.isNodeChangedPosition = function(node, x, y, width, height) {
- if (typeof x !== 'number') { x = node.x; }
- if (typeof y !== 'number') { y = node.y; }
- if (typeof width !== 'number') { width = node.width; }
- if (typeof height !== 'number') { height = node.height; }
-
- if (node.maxWidth !== undefined) { width = Math.min(width, node.maxWidth); }
- if (node.maxHeight !== undefined) { height = Math.min(height, node.maxHeight); }
- if (node.minWidth !== undefined) { width = Math.max(width, node.minWidth); }
- if (node.minHeight !== undefined) { height = Math.max(height, node.minHeight); }
-
- if (node.x === x && node.y === y && node.width === width && node.height === height) {
- return false;
- }
- return true;
- };
-
- GridStackEngine.prototype.moveNode = function(node, x, y, width, height, noPack) {
- if (typeof x !== 'number') { x = node.x; }
- if (typeof y !== 'number') { y = node.y; }
- if (typeof width !== 'number') { width = node.width; }
- if (typeof height !== 'number') { height = node.height; }
-
- // constrain the passed in values and check if we're still changing our node
- var resizing = (node.width !== width || node.height !== height);
- var nn = { x: x, y: y, width: width, height: height,
- maxWidth: node.maxWidth, maxHeight: NodeIterator.maxHeight, minWidth: node.minWidth, minHeight: node.minHeight};
- nn = this._prepareNode(nn, resizing);
- if (node.x === nn.x && node.y === nn.y && node.width === nn.width && node.height === nn.height) {
- return null;
- }
-
- node._dirty = true;
-
- node.x = node.lastTriedX = nn.x;
- node.y = node.lastTriedY = nn.y;
- node.width = node.lastTriedWidth = nn.width;
- node.height = node.lastTriedHeight = nn.height;
-
- this._fixCollisions(node);
- if (!noPack) {
- this._packNodes();
- this._notify();
- }
- return node;
- };
-
- GridStackEngine.prototype.getRow = function() {
- return this.nodes.reduce(function(memo, n) { return Math.max(memo, n.y + n.height); }, 0);
- };
-
- GridStackEngine.prototype.beginUpdate = function(node) {
- if (node._updating) return;
- node._updating = true;
- this.nodes.forEach(function(n) { n._packY = n.y; });
- };
-
- GridStackEngine.prototype.endUpdate = function() {
- var n = this.nodes.find(function(n) { return n._updating; });
- if (n) {
- n._updating = false;
- this.nodes.forEach(function(n) { delete n._packY; });
- }
- };
-
- /**
- * Construct a grid item from the given element and options
- * @param {GridStackElement} el
- * @param {GridstackOptions} opts
- */
- var GridStack = function(el, opts) {
- var self = this;
- var oneColumnMode, _prevColumn, isAutoCellHeight;
-
- opts = opts || {};
-
- this.$el = $(el); // TODO: legacy code
- this.el = this.$el.get(0); // exposed HTML element to the user
-
- obsoleteOpts(opts, 'width', 'column', 'v0.5.3');
- obsoleteOpts(opts, 'height', 'maxRow', 'v0.5.3');
- obsoleteOptsDel(opts, 'oneColumnModeClass', 'v0.6.3', '. Use class `.grid-stack-1` instead');
-
- // container attributes
- obsoleteAttr(this.$el, 'data-gs-width', 'data-gs-column', 'v0.5.3');
- obsoleteAttr(this.$el, 'data-gs-height', 'data-gs-max-row', 'v0.5.3');
- obsoleteAttr(this.$el, 'data-gs-current-height', 'data-gs-current-row', 'v1.0.0');
-
- opts.itemClass = opts.itemClass || 'grid-stack-item';
- var isNested = this.$el.closest('.' + opts.itemClass).length > 0;
-
- // if row property exists, replace minRow and maxRow instead
- if (opts.row) {
- opts.minRow = opts.maxRow = opts.row;
- delete opts.row;
- }
- var rowAttr = parseInt(this.$el.attr('data-gs-row'));
-
- // elements attributes override any passed options (like CSS style) - merge the two together
- this.opts = Utils.defaults(opts, {
- column: parseInt(this.$el.attr('data-gs-column')) || 12,
- minRow: rowAttr ? rowAttr : parseInt(this.$el.attr('data-gs-min-row')) || 0,
- maxRow: rowAttr ? rowAttr : parseInt(this.$el.attr('data-gs-max-row')) || 0,
- itemClass: 'grid-stack-item',
- placeholderClass: 'grid-stack-placeholder',
- placeholderText: '',
- handle: '.grid-stack-item-content',
- handleClass: null,
- cellHeight: 60,
- verticalMargin: 20,
- auto: true,
- minWidth: 768,
- float: false,
- staticGrid: false,
- _class: 'grid-stack-instance-' + (Math.random() * 10000).toFixed(0),
- animate: Boolean(this.$el.attr('data-gs-animate')) || false,
- alwaysShowResizeHandle: opts.alwaysShowResizeHandle || false,
- resizable: Utils.defaults(opts.resizable || {}, {
- autoHide: !(opts.alwaysShowResizeHandle || false),
- handles: 'se'
- }),
- draggable: Utils.defaults(opts.draggable || {}, {
- handle: (opts.handleClass ? '.' + opts.handleClass : (opts.handle ? opts.handle : '')) ||
- '.grid-stack-item-content',
- scroll: false,
- appendTo: 'body'
- }),
- disableDrag: opts.disableDrag || false,
- disableResize: opts.disableResize || false,
- rtl: 'auto',
- removable: false,
- removableOptions: Utils.defaults(opts.removableOptions || {}, {
- accept: '.' + opts.itemClass
- }),
- removeTimeout: 2000,
- verticalMarginUnit: 'px',
- cellHeightUnit: 'px',
- disableOneColumnMode: opts.disableOneColumnMode || false,
- oneColumnModeDomSort: opts.oneColumnModeDomSort,
- ddPlugin: null
- });
-
- if (this.opts.ddPlugin === false) {
- this.opts.ddPlugin = GridStackDragDropPlugin;
- } else if (this.opts.ddPlugin === null) {
- this.opts.ddPlugin = GridStackDragDropPlugin.registeredPlugins[0] || GridStackDragDropPlugin;
- }
-
- this.dd = new this.opts.ddPlugin(this);
-
- if (this.opts.rtl === 'auto') {
- this.opts.rtl = this.$el.css('direction') === 'rtl';
- }
-
- if (this.opts.rtl) {
- this.$el.addClass('grid-stack-rtl');
- }
-
- this.opts.isNested = isNested;
-
- isAutoCellHeight = (this.opts.cellHeight === 'auto');
- if (isAutoCellHeight) {
- // make the cell square initially
- self.cellHeight(self.cellWidth(), true);
- } else {
- this.cellHeight(this.opts.cellHeight, true);
- }
- this.verticalMargin(this.opts.verticalMargin, true);
-
- this.$el.addClass(this.opts._class);
-
- this._setStaticClass();
-
- if (isNested) {
- this.$el.addClass('grid-stack-nested');
- }
-
- this._initStyles();
-
- this.engine = new GridStackEngine(this.opts.column, function(nodes, detachNode) {
- detachNode = (detachNode === undefined ? true : detachNode);
- var maxHeight = 0;
- this.nodes.forEach(function(n) {
- maxHeight = Math.max(maxHeight, n.y + n.height);
- });
- nodes.forEach(function(n) {
- if (detachNode && n._id === null) {
- if (n.el) {
- $(n.el).remove();
- }
- } else {
- $(n.el)
- .attr('data-gs-x', n.x)
- .attr('data-gs-y', n.y)
- .attr('data-gs-width', n.width)
- .attr('data-gs-height', n.height);
- }
- });
- self._updateStyles(maxHeight + 10);
- }, this.opts.float, this.opts.maxRow);
-
- if (this.opts.auto) {
- var elements = [];
- var _this = this;
- this.$el.children('.' + this.opts.itemClass + ':not(.' + this.opts.placeholderClass + ')')
- .each(function(index, el) {
- el = $(el);
- var x = parseInt(el.attr('data-gs-x'));
- var y = parseInt(el.attr('data-gs-y'));
- elements.push({
- el: el.get(0),
- // if x,y are missing (autoPosition) add them to end of list - but keep their respective DOM order
- i: (Number.isNaN(x) ? 1000 : x) + (Number.isNaN(y) ? 1000 : y) * _this.opts.column
- });
- });
- Utils.sortBy(elements, function(x) { return x.i; }).forEach(function(item) {
- this._prepareElement(item.el);
- }, this);
- }
- this.engine._saveInitial(); // initial start of items
-
- this.setAnimation(this.opts.animate);
-
- this.placeholder = $(
- '' +
- '
' + this.opts.placeholderText + '
').hide();
-
- this._updateContainerHeight();
-
- this._updateHeightsOnResize = Utils.throttle(function() {
- self.cellHeight(self.cellWidth(), false);
- }, 100);
-
- /**
- * called when we are being resized - check if the one Column Mode needs to be turned on/off
- * and remember the prev columns we used.
- */
- this.onResizeHandler = function() {
- if (isAutoCellHeight) {
- self._updateHeightsOnResize();
- }
-
- if (self.opts.staticGrid) { return; }
-
- if (!self.opts.disableOneColumnMode && (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) <= self.opts.minWidth) {
- if (self.oneColumnMode) { return; }
- self.oneColumnMode = true;
- self.column(1);
- } else {
- if (!self.oneColumnMode) { return; }
- self.oneColumnMode = false;
- self.column(self._prevColumn);
- }
- };
-
- $(window).resize(this.onResizeHandler);
- this.onResizeHandler();
-
- if (!self.opts.staticGrid && typeof self.opts.removable === 'string') {
- var trashZone = $(self.opts.removable);
- if (!this.dd.isDroppable(trashZone)) {
- this.dd.droppable(trashZone, self.opts.removableOptions);
- }
- this.dd
- .on(trashZone, 'dropover', function(event, ui) {
- var el = $(ui.draggable);
- var node = el.data('_gridstack_node');
- if (!node || node._grid !== self) {
- return;
- }
- el.data('inTrashZone', true);
- self._setupRemovingTimeout(el);
- })
- .on(trashZone, 'dropout', function(event, ui) {
- var el = $(ui.draggable);
- var node = el.data('_gridstack_node');
- if (!node || node._grid !== self) {
- return;
- }
- el.data('inTrashZone', false);
- self._clearRemovingTimeout(el);
- });
- }
-
- if (!self.opts.staticGrid && self.opts.acceptWidgets) {
- var draggingElement = null;
-
- var onDrag = function(event, ui) {
- var el = draggingElement;
- var node = el.data('_gridstack_node');
- var pos = self.getCellFromPixel({left: event.pageX, top: event.pageY}, true);
- var x = Math.max(0, pos.x);
- var y = Math.max(0, pos.y);
- if (!node._added) {
- node._added = true;
-
- node.el = el.get(0);
- node.autoPosition = true;
- node.x = x;
- node.y = y;
- self.engine.cleanNodes();
- self.engine.beginUpdate(node);
- self.engine.addNode(node);
-
- self.$el.append(self.placeholder);
- self.placeholder
- .attr('data-gs-x', node.x)
- .attr('data-gs-y', node.y)
- .attr('data-gs-width', node.width)
- .attr('data-gs-height', node.height)
- .show();
- node.el = self.placeholder.get(0);
- node._beforeDragX = node.x;
- node._beforeDragY = node.y;
-
- self._updateContainerHeight();
- }
- if (!self.engine.canMoveNode(node, x, y)) {
- return;
- }
- self.engine.moveNode(node, x, y);
- self._updateContainerHeight();
- };
-
- this.dd
- .droppable(self.$el, {
- accept: function(el) {
- el = $(el);
- var node = el.data('_gridstack_node');
- if (node && node._grid === self) {
- return false;
- }
- return el.is(self.opts.acceptWidgets === true ? '.grid-stack-item' : self.opts.acceptWidgets);
- }
- })
- .on(self.$el, 'dropover', function(event, ui) {
- var el = $(ui.draggable);
- var width, height;
-
- // see if we already have a node with widget/height and check for attributes
- var origNode = el.data('_gridstack_node');
- if (!origNode || !origNode.width || !origNode.height) {
- var w = parseInt(el.attr('data-gs-width'));
- if (w > 0) { origNode = origNode || {}; origNode.width = w; }
- var h = parseInt(el.attr('data-gs-height'));
- if (h > 0) { origNode = origNode || {}; origNode.height = h; }
- }
-
- // if not calculate the grid size based on element outer size
- // height: Each row is cellHeight + verticalMargin, until last one which has no margin below
- var cellWidth = self.cellWidth();
- var cellHeight = self.cellHeight();
- var verticalMargin = self.opts.verticalMargin;
- width = origNode && origNode.width ? origNode.width : Math.ceil(el.outerWidth() / cellWidth);
- height = origNode && origNode.height ? origNode.height : Math.round((el.outerHeight() + verticalMargin) / (cellHeight + verticalMargin));
-
- draggingElement = el;
-
- var node = self.engine._prepareNode({width: width, height: height, _added: false, _temporary: true});
- node.isOutOfGrid = true;
- el.data('_gridstack_node', node);
- el.data('_gridstack_node_orig', origNode);
-
- el.on('drag', onDrag);
- return false; // prevent parent from receiving msg (which may be grid as well)
- })
- .on(self.$el, 'dropout', function(event, ui) {
- // jquery-ui bug. Must verify widget is being dropped out
- // check node variable that gets set when widget is out of grid
- var el = $(ui.draggable);
- if (!el.data('_gridstack_node')) {
- return;
- }
- var node = el.data('_gridstack_node');
- if (!node.isOutOfGrid) {
- return;
- }
- el.unbind('drag', onDrag);
- node.el = null;
- self.engine.removeNode(node);
- self.placeholder.detach();
- self._updateContainerHeight();
- el.data('_gridstack_node', el.data('_gridstack_node_orig'));
- return false; // prevent parent from receiving msg (which may be grid as well)
- })
- .on(self.$el, 'drop', function(event, ui) {
- self.placeholder.detach();
-
- var node = $(ui.draggable).data('_gridstack_node');
- node.isOutOfGrid = false;
- node._grid = self;
- var el = $(ui.draggable).clone(false);
- el.data('_gridstack_node', node);
- var originalNode = $(ui.draggable).data('_gridstack_node_orig');
- if (originalNode !== undefined && originalNode._grid !== undefined) {
- originalNode._grid._triggerRemoveEvent();
- }
- $(ui.helper).remove();
- node.el = el.get(0);
- self.placeholder.hide();
- Utils.removePositioningStyles(el);
- el.find('div.ui-resizable-handle').remove();
-
- el
- .attr('data-gs-x', node.x)
- .attr('data-gs-y', node.y)
- .attr('data-gs-width', node.width)
- .attr('data-gs-height', node.height)
- .addClass(self.opts.itemClass)
- .enableSelection()
- .removeData('draggable')
- .removeClass('ui-draggable ui-draggable-dragging ui-draggable-disabled')
- .unbind('drag', onDrag);
- self.$el.append(el);
- self._prepareElementsByNode(el, node);
- self._updateContainerHeight();
- self.engine._addedNodes.push(node);
- self._triggerAddEvent();
- self._triggerChangeEvent();
-
- self.engine.endUpdate();
- $(ui.draggable).unbind('drag', onDrag);
- $(ui.draggable).removeData('_gridstack_node');
- $(ui.draggable).removeData('_gridstack_node_orig');
- self.$el.trigger('dropped', [originalNode, node]);
- return false; // prevent parent from receiving msg (which may be grid as well)
- });
- }
- };
-
- GridStack.prototype._triggerChangeEvent = function(/*forceTrigger*/) {
- if (this.engine._batchMode) { return; }
- var elements = this.engine.getDirtyNodes(true); // verify they really changed
- if (elements && elements.length) {
- this.engine._layoutsNodesChange(elements);
- this._triggerEvent('change', elements);
- }
- this.engine._saveInitial(); // we called, now reset initial values & dirty flags
- };
-
- GridStack.prototype._triggerAddEvent = function() {
- if (this.engine._batchMode) { return; }
- if (this.engine._addedNodes && this.engine._addedNodes.length > 0) {
- this.engine._layoutsNodesChange(this.engine._addedNodes);
- // prevent added nodes from also triggering 'change' event (which is called next)
- this.engine._addedNodes.forEach(function (n) { delete n._dirty; });
- this._triggerEvent('added', this.engine._addedNodes);
- this.engine._addedNodes = [];
- }
- };
-
- GridStack.prototype._triggerRemoveEvent = function() {
- if (this.engine._batchMode) { return; }
- if (this.engine._removedNodes && this.engine._removedNodes.length > 0) {
- this._triggerEvent('removed', this.engine._removedNodes);
- this.engine._removedNodes = [];
- }
- };
-
- GridStack.prototype._triggerEvent = function(name, data) {
- var event = new CustomEvent(name, {detail: data});
- this.el.dispatchEvent(event);
- };
-
- GridStack.prototype._initStyles = function() {
- if (this._stylesId) {
- Utils.removeStylesheet(this._stylesId);
- }
- this._stylesId = 'gridstack-style-' + (Math.random() * 100000).toFixed();
- // insert style to parent (instead of 'head') to support WebComponent
- this._styles = Utils.createStylesheet(this._stylesId, this.el.parentNode);
- if (this._styles !== null) {
- this._styles._max = 0;
- }
- };
-
- GridStack.prototype._updateStyles = function(maxHeight) {
- if (this._styles === null || this._styles === undefined) {
- return;
- }
-
- var prefix = '.' + this.opts._class + ' .' + this.opts.itemClass;
- var self = this;
- var getHeight;
-
- if (maxHeight === undefined) {
- maxHeight = this._styles._max;
- }
-
- this._initStyles();
- this._updateContainerHeight();
- if (!this.opts.cellHeight) { // The rest will be handled by CSS
- return ;
- }
- if (this._styles._max !== 0 && maxHeight <= this._styles._max) { // Keep this._styles._max increasing
- return ;
- }
-
- if (!this.opts.verticalMargin || this.opts.cellHeightUnit === this.opts.verticalMarginUnit) {
- getHeight = function(nbRows, nbMargins) {
- return (self.opts.cellHeight * nbRows + self.opts.verticalMargin * nbMargins) +
- self.opts.cellHeightUnit;
- };
- } else {
- getHeight = function(nbRows, nbMargins) {
- if (!nbRows || !nbMargins) {
- return (self.opts.cellHeight * nbRows + self.opts.verticalMargin * nbMargins) +
- self.opts.cellHeightUnit;
- }
- return 'calc(' + ((self.opts.cellHeight * nbRows) + self.opts.cellHeightUnit) + ' + ' +
- ((self.opts.verticalMargin * nbMargins) + self.opts.verticalMarginUnit) + ')';
- };
- }
-
- if (this._styles._max === 0) {
- Utils.insertCSSRule(this._styles, prefix, 'min-height: ' + getHeight(1, 0) + ';', 0);
- }
-
- if (maxHeight > this._styles._max) {
- for (var i = this._styles._max; i < maxHeight; ++i) {
- Utils.insertCSSRule(this._styles,
- prefix + '[data-gs-height="' + (i + 1) + '"]',
- 'height: ' + getHeight(i + 1, i) + ';',
- i
- );
- Utils.insertCSSRule(this._styles,
- prefix + '[data-gs-min-height="' + (i + 1) + '"]',
- 'min-height: ' + getHeight(i + 1, i) + ';',
- i
- );
- Utils.insertCSSRule(this._styles,
- prefix + '[data-gs-max-height="' + (i + 1) + '"]',
- 'max-height: ' + getHeight(i + 1, i) + ';',
- i
- );
- Utils.insertCSSRule(this._styles,
- prefix + '[data-gs-y="' + i + '"]',
- 'top: ' + getHeight(i, i) + ';',
- i
- );
- }
- this._styles._max = maxHeight;
- }
- };
-
- GridStack.prototype._updateContainerHeight = function() {
- if (this.engine._batchMode) { return; }
- var row = this.engine.getRow();
- if (row < this.opts.minRow) {
- row = this.opts.minRow;
- }
- // check for css min height. Each row is cellHeight + verticalMargin, until last one which has no margin below
- var cssMinHeight = parseInt(this.$el.css('min-height'));
- if (cssMinHeight > 0) {
- var verticalMargin = this.opts.verticalMargin;
- var minRow = Math.round((cssMinHeight + verticalMargin) / (this.cellHeight() + verticalMargin));
- if (row < minRow) {
- row = minRow;
- }
- }
- this.$el.attr('data-gs-current-row', row);
- if (!this.opts.cellHeight) {
- return ;
- }
- if (!this.opts.verticalMargin) {
- this.$el.css('height', (row * (this.opts.cellHeight)) + this.opts.cellHeightUnit);
- } else if (this.opts.cellHeightUnit === this.opts.verticalMarginUnit) {
- this.$el.css('height', (row * (this.opts.cellHeight + this.opts.verticalMargin) -
- this.opts.verticalMargin) + this.opts.cellHeightUnit);
- } else {
- this.$el.css('height', 'calc(' + ((row * (this.opts.cellHeight)) + this.opts.cellHeightUnit) +
- ' + ' + ((row * (this.opts.verticalMargin - 1)) + this.opts.verticalMarginUnit) + ')');
- }
- };
-
- GridStack.prototype._setupRemovingTimeout = function(el) {
- var self = this;
- var node = $(el).data('_gridstack_node');
-
- if (node._removeTimeout || !self.opts.removable) {
- return;
- }
- node._removeTimeout = setTimeout(function() {
- el.addClass('grid-stack-item-removing');
- node._isAboutToRemove = true;
- }, self.opts.removeTimeout);
- };
-
- GridStack.prototype._clearRemovingTimeout = function(el) {
- var node = $(el).data('_gridstack_node');
-
- if (!node._removeTimeout) {
- return;
- }
- clearTimeout(node._removeTimeout);
- node._removeTimeout = null;
- el.removeClass('grid-stack-item-removing');
- node._isAboutToRemove = false;
- };
-
- GridStack.prototype._prepareElementsByNode = function(el, node) {
- var self = this;
-
- var cellWidth;
- var cellFullHeight; // internal cellHeight + v-margin
-
- var dragOrResize = function(event, ui) {
- var x = Math.round(ui.position.left / cellWidth);
- var y = Math.floor((ui.position.top + cellFullHeight / 2) / cellFullHeight);
- var width;
- var height;
-
- if (event.type === 'drag') {
- var distance = ui.position.top - node._prevYPix;
- node._prevYPix = ui.position.top;
- Utils.updateScrollPosition(el[0], ui, distance);
- if (el.data('inTrashZone') || x < 0 || x >= self.engine.column || y < 0 ||
- (!self.engine.float && y > self.engine.getRow())) {
- if (!node._temporaryRemoved) {
- if (self.opts.removable === true) {
- self._setupRemovingTimeout(el);
- }
-
- x = node._beforeDragX;
- y = node._beforeDragY;
-
- self.placeholder.detach();
- self.placeholder.hide();
- self.engine.removeNode(node);
- self._updateContainerHeight();
-
- node._temporaryRemoved = true;
- } else {
- return;
- }
- } else {
- self._clearRemovingTimeout(el);
-
- if (node._temporaryRemoved) {
- self.engine.addNode(node);
- self.placeholder
- .attr('data-gs-x', x)
- .attr('data-gs-y', y)
- .attr('data-gs-width', width)
- .attr('data-gs-height', height)
- .show();
- self.$el.append(self.placeholder);
- node.el = self.placeholder.get(0);
- node._temporaryRemoved = false;
- }
- }
- } else if (event.type === 'resize') {
- if (x < 0) return;
- width = Math.round(ui.size.width / cellWidth);
- height = Math.round((ui.size.height + self.verticalMargin()) / cellFullHeight);
- }
- // width and height are undefined if not resizing
- var lastTriedWidth = width !== undefined ? width : node.lastTriedWidth;
- var lastTriedHeight = height !== undefined ? height : node.lastTriedHeight;
- if (!self.engine.canMoveNode(node, x, y, width, height) ||
- (node.lastTriedX === x && node.lastTriedY === y &&
- node.lastTriedWidth === lastTriedWidth && node.lastTriedHeight === lastTriedHeight)) {
- return;
- }
- node.lastTriedX = x;
- node.lastTriedY = y;
- node.lastTriedWidth = width;
- node.lastTriedHeight = height;
- self.engine.moveNode(node, x, y, width, height);
- self._updateContainerHeight();
-
- if (event.type === 'resize') {
- $(event.target).trigger('gsresize', node);
- }
- };
-
- var onStartMoving = function(event, ui) {
- self.$el.append(self.placeholder);
- var o = $(this);
- self.engine.cleanNodes();
- self.engine.beginUpdate(node);
- cellWidth = self.cellWidth();
- var strictCellHeight = self.cellHeight(); // heigh without v-margin
- // compute height with v-margin (Note: we add 1 margin as last row is missing it)
- cellFullHeight = (self.$el.height() + self.verticalMargin()) / parseInt(self.$el.attr('data-gs-current-row'));
- self.placeholder
- .attr('data-gs-x', o.attr('data-gs-x'))
- .attr('data-gs-y', o.attr('data-gs-y'))
- .attr('data-gs-width', o.attr('data-gs-width'))
- .attr('data-gs-height', o.attr('data-gs-height'))
- .show();
- node.el = self.placeholder.get(0);
- node._beforeDragX = node.x;
- node._beforeDragY = node.y;
- node._prevYPix = ui.position.top;
- var minHeight = (node.minHeight || 1);
- var verticalMargin = self.opts.verticalMargin;
-
- // mineHeight - Each row is cellHeight + verticalMargin, until last one which has no margin below
- self.dd.resizable(el, 'option', 'minWidth', cellWidth * (node.minWidth || 1));
- self.dd.resizable(el, 'option', 'minHeight', (strictCellHeight * minHeight) + (minHeight - 1) * verticalMargin);
-
- if (event.type === 'resizestart') {
- o.find('.grid-stack-item').trigger('resizestart');
- }
- };
-
- var onEndMoving = function(event, ui) {
- var o = $(this);
- if (!o.data('_gridstack_node')) {
- return;
- }
-
- // var forceNotify = false; what is the point of calling 'change' event with no data, when the 'removed' event is already called ?
- self.placeholder.detach();
- node.el = o.get(0);
- self.placeholder.hide();
-
- if (node._isAboutToRemove) {
- // forceNotify = true;
- var gridToNotify = el.data('_gridstack_node')._grid;
- gridToNotify._triggerRemoveEvent();
- el.removeData('_gridstack_node');
- el.remove();
- } else {
- self._clearRemovingTimeout(el);
- if (!node._temporaryRemoved) {
- Utils.removePositioningStyles(o);
- o
- .attr('data-gs-x', node.x)
- .attr('data-gs-y', node.y)
- .attr('data-gs-width', node.width)
- .attr('data-gs-height', node.height);
- } else {
- Utils.removePositioningStyles(o);
- o
- .attr('data-gs-x', node._beforeDragX)
- .attr('data-gs-y', node._beforeDragY)
- .attr('data-gs-width', node.width)
- .attr('data-gs-height', node.height);
- node.x = node._beforeDragX;
- node.y = node._beforeDragY;
- node._temporaryRemoved = false;
- self.engine.addNode(node);
- }
- }
- self._updateContainerHeight();
- self._triggerChangeEvent(/*forceNotify*/);
-
- self.engine.endUpdate();
-
- var nestedGrids = o.find('.grid-stack');
- if (nestedGrids.length && event.type === 'resizestop') {
- nestedGrids.each(function(index, el) {
- el.gridstack.onResizeHandler();
- });
- o.find('.grid-stack-item').trigger('resizestop');
- o.find('.grid-stack-item').trigger('gsresizestop');
- }
- if (event.type === 'resizestop') {
- self.$el.trigger('gsresizestop', o);
- }
- };
-
- this.dd
- .draggable(el, {
- start: onStartMoving,
- stop: onEndMoving,
- drag: dragOrResize
- })
- .resizable(el, {
- start: onStartMoving,
- stop: onEndMoving,
- resize: dragOrResize
- });
-
- if (node.noMove || this.opts.disableDrag || this.opts.staticGrid) {
- this.dd.draggable(el, 'disable');
- }
-
- if (node.noResize || this.opts.disableResize || this.opts.staticGrid) {
- this.dd.resizable(el, 'disable');
- }
-
- this._writeAttr(el, node);
- };
-
- GridStack.prototype._prepareElement = function(el, triggerAddEvent) {
- triggerAddEvent = triggerAddEvent !== undefined ? triggerAddEvent : false;
- var self = this;
- el = $(el);
-
- el.addClass(this.opts.itemClass);
- var node = this._readAttr(el, {el: el.get(0), _grid: self});
- node = self.engine.addNode(node, triggerAddEvent);
- el.data('_gridstack_node', node);
-
- this._prepareElementsByNode(el, node);
- };
-
- /** call to write any default attributes back to element */
- GridStack.prototype._writeAttr = function(el, node) {
- el = $(el);
- node = node || {};
- // Note: passing null removes the attr in jquery
- if (node.x !== undefined) { el.attr('data-gs-x', node.x); }
- if (node.y !== undefined) { el.attr('data-gs-y', node.y); }
- if (node.width !== undefined) { el.attr('data-gs-width', node.width); }
- if (node.height !== undefined) { el.attr('data-gs-height', node.height); }
- if (node.autoPosition !== undefined) { el.attr('data-gs-auto-position', node.autoPosition ? true : null); }
- if (node.minWidth !== undefined) { el.attr('data-gs-min-width', node.minWidth); }
- if (node.maxWidth !== undefined) { el.attr('data-gs-max-width', node.maxWidth); }
- if (node.minHeight !== undefined) { el.attr('data-gs-min-height', node.minHeight); }
- if (node.maxHeight !== undefined) { el.attr('data-gs-max-height', node.maxHeight); }
- if (node.noResize !== undefined) { el.attr('data-gs-no-resize', node.noResize ? true : null); }
- if (node.noMove !== undefined) { el.attr('data-gs-no-move', node.noMove ? true : null); }
- if (node.locked !== undefined) { el.attr('data-gs-locked', node.locked ? true : null); }
- if (node.resizeHandles !== undefined) { el.attr('data-gs-resize-handles', node.resizeHandles); }
- if (node.id !== undefined) { el.attr('data-gs-id', node.id); }
- };
-
- /** call to write any default attributes back to element */
- GridStack.prototype._readAttr = function(el, node) {
- el = $(el);
- node = node || {};
- node.x = el.attr('data-gs-x');
- node.y = el.attr('data-gs-y');
- node.width = el.attr('data-gs-width');
- node.height = el.attr('data-gs-height');
- node.autoPosition = Utils.toBool(el.attr('data-gs-auto-position'));
- node.maxWidth = el.attr('data-gs-max-width');
- node.minWidth = el.attr('data-gs-min-width');
- node.maxHeight = el.attr('data-gs-max-height');
- node.minHeight = el.attr('data-gs-min-height');
- node.noResize = Utils.toBool(el.attr('data-gs-no-resize'));
- node.noMove = Utils.toBool(el.attr('data-gs-no-move'));
- node.locked = Utils.toBool(el.attr('data-gs-locked'));
- node.resizeHandles = el.attr('data-gs-resize-handles');
- node.id = el.attr('data-gs-id');
- return node;
- };
-
- GridStack.prototype.setAnimation = function(enable) {
- if (enable) {
- this.$el.addClass('grid-stack-animate');
- } else {
- this.$el.removeClass('grid-stack-animate');
- }
- };
-
- GridStack.prototype.addWidget = function(el, opt, y, width, height, autoPosition, minWidth, maxWidth, minHeight, maxHeight, id) {
-
- // new way of calling with an object - make sure all items have been properly initialized
- if (opt === undefined || typeof opt === 'object') {
- // Tempting to initialize the passed in opt with default and valid values, but this break knockout demos
- // as the actual value are filled in when _prepareElement() calls el.attr('data-gs-xyz) before adding the node.
- // opt = this.engine._prepareNode(opt);
- } else {
- // old legacy way of calling with items spelled out - call us back with single object instead (so we can properly initialized values)
- return this.addWidget(el, {x: opt, y: y, width: width, height: height, autoPosition: autoPosition,
- minWidth: minWidth, maxWidth: maxWidth, minHeight: minHeight, maxHeight: maxHeight, id: id});
- }
-
- el = $(el);
- if (opt) { // see knockout above
- this.engine._prepareNode(opt);
- }
- this._writeAttr(el, opt);
- this.$el.append(el);
- return this.makeWidget(el);
- };
-
- GridStack.prototype.makeWidget = function(el) {
- el = $(el);
- this._prepareElement(el, true);
- this._updateContainerHeight();
- this._triggerAddEvent();
- this._triggerChangeEvent(true); // trigger any other changes
-
- return el.get(0);
- };
-
- GridStack.prototype.willItFit = function(x, y, width, height, autoPosition) {
- var node = {x: x, y: y, width: width, height: height, autoPosition: autoPosition};
- return this.engine.canBePlacedWithRespectToHeight(node);
- };
-
- GridStack.prototype.removeWidget = function(el, detachNode) {
- detachNode = (detachNode === undefined ? true : detachNode);
- el = $(el);
- var node = el.data('_gridstack_node');
- // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272
- if (!node) {
- node = this.engine.getNodeDataByDOMEl(el.get(0));
- }
-
- el.removeData('_gridstack_node');
- this.engine.removeNode(node, detachNode);
- this._triggerRemoveEvent();
- this._triggerChangeEvent(true); // trigger any other changes
- };
-
- GridStack.prototype.removeAll = function(detachNode) {
- if (detachNode !== false) {
- // remove our data structure before list gets emptied and DOM elements stay behind
- this.engine.nodes.forEach(function(node) { $(node.el).removeData('_gridstack_node') });
- }
- this.engine.removeAll(detachNode);
- this._triggerRemoveEvent();
- };
-
- GridStack.prototype.destroy = function(detachGrid) {
- $(window).off('resize', this.onResizeHandler);
- this.disable();
- if (detachGrid !== undefined && !detachGrid) {
- this.removeAll(false);
- delete this.$el.get(0).gridstack;
- } else {
- this.$el.remove();
- }
- Utils.removeStylesheet(this._stylesId);
- if (this.engine) {
- this.engine = null;
- }
- };
-
- GridStack.prototype.resizable = function(el, val) {
- var self = this;
- el = $(el);
- el.each(function(index, el) {
- el = $(el);
- var node = el.data('_gridstack_node');
- if (!node) { return; }
- node.noResize = !(val || false);
- if (node.noResize) {
- self.dd.resizable(el, 'disable');
- } else {
- self.dd.resizable(el, 'enable');
- }
- });
- return this;
- };
-
- GridStack.prototype.movable = function(el, val) {
- var self = this;
- el = $(el);
- el.each(function(index, el) {
- el = $(el);
- var node = el.data('_gridstack_node');
- if (!node) { return; }
- node.noMove = !(val || false);
- if (node.noMove) {
- self.dd.draggable(el, 'disable');
- el.removeClass('ui-draggable-handle');
- } else {
- self.dd.draggable(el, 'enable');
- el.addClass('ui-draggable-handle');
- }
- });
- return this;
- };
-
- GridStack.prototype.enableMove = function(doEnable, includeNewWidgets) {
- this.movable(this.$el.children('.' + this.opts.itemClass), doEnable);
- if (includeNewWidgets) {
- this.opts.disableDrag = !doEnable;
- }
- };
-
- GridStack.prototype.enableResize = function(doEnable, includeNewWidgets) {
- this.resizable(this.$el.children('.' + this.opts.itemClass), doEnable);
- if (includeNewWidgets) {
- this.opts.disableResize = !doEnable;
- }
- };
-
- GridStack.prototype.disable = function() {
- this.movable(this.$el.children('.' + this.opts.itemClass), false);
- this.resizable(this.$el.children('.' + this.opts.itemClass), false);
- this.$el.trigger('disable');
- };
-
- GridStack.prototype.enable = function() {
- this.movable(this.$el.children('.' + this.opts.itemClass), true);
- this.resizable(this.$el.children('.' + this.opts.itemClass), true);
- this.$el.trigger('enable');
- };
-
- GridStack.prototype.locked = function(el, val) {
- el = $(el);
- el.each(function(index, el) {
- el = $(el);
- var node = el.data('_gridstack_node');
- if (!node) { return; }
- node.locked = (val || false);
- el.attr('data-gs-locked', node.locked ? 'yes' : null);
- });
- return this;
- };
-
- GridStack.prototype.maxHeight = function(el, val) {
- el = $(el);
- el.each(function(index, el) {
- el = $(el);
- var node = el.data('_gridstack_node');
- if (!node) { return; }
- if (!isNaN(val)) {
- node.maxHeight = (val || false);
- el.attr('data-gs-max-height', val);
- }
- });
- return this;
- };
-
- GridStack.prototype.minHeight = function(el, val) {
- el = $(el);
- el.each(function(index, el) {
- el = $(el);
- var node = el.data('_gridstack_node');
- if (!node) { return; }
- if (!isNaN(val)) {
- node.minHeight = (val || false);
- el.attr('data-gs-min-height', val);
- }
- });
- return this;
- };
-
- GridStack.prototype.maxWidth = function(el, val) {
- el = $(el);
- el.each(function(index, el) {
- el = $(el);
- var node = el.data('_gridstack_node');
- if (!node) { return; }
- if (!isNaN(val)) {
- node.maxWidth = (val || false);
- el.attr('data-gs-max-width', val);
- }
- });
- return this;
- };
-
- GridStack.prototype.minWidth = function(el, val) {
- el = $(el);
- el.each(function(index, el) {
- el = $(el);
- var node = el.data('_gridstack_node');
- if (!node) { return; }
- if (!isNaN(val)) {
- node.minWidth = (val || false);
- el.attr('data-gs-min-width', val);
- }
- });
- return this;
- };
-
- GridStack.prototype._updateElement = function(el, callback) {
- el = $(el).first();
- var node = el.data('_gridstack_node');
- if (!node) { return; }
- var self = this;
-
- self.engine.cleanNodes();
- self.engine.beginUpdate(node);
-
- callback.call(this, el, node);
-
- self._updateContainerHeight();
- self._triggerChangeEvent();
-
- self.engine.endUpdate();
- };
-
- GridStack.prototype.resize = function(el, width, height) {
- this._updateElement(el, function(el, node) {
- width = (width !== null && width !== undefined) ? width : node.width;
- height = (height !== null && height !== undefined) ? height : node.height;
-
- this.engine.moveNode(node, node.x, node.y, width, height);
- });
- };
-
- GridStack.prototype.move = function(el, x, y) {
- this._updateElement(el, function(el, node) {
- x = (x !== null && x !== undefined) ? x : node.x;
- y = (y !== null && y !== undefined) ? y : node.y;
-
- this.engine.moveNode(node, x, y, node.width, node.height);
- });
- };
-
- GridStack.prototype.update = function(el, x, y, width, height) {
- this._updateElement(el, function(el, node) {
- x = (x !== null && x !== undefined) ? x : node.x;
- y = (y !== null && y !== undefined) ? y : node.y;
- width = (width !== null && width !== undefined) ? width : node.width;
- height = (height !== null && height !== undefined) ? height : node.height;
-
- this.engine.moveNode(node, x, y, width, height);
- });
- };
-
- /**
- * relayout grid items to reclaim any empty space
- */
- GridStack.prototype.compact = function() {
- if (this.engine.nodes.length === 0) { return; }
- this.batchUpdate();
- this.engine._sortNodes();
- var nodes = this.engine.nodes;
- this.engine.nodes = []; // pretend we have no nodes to conflict layout to start with...
- nodes.forEach(function(node) {
- if (!node.noMove && !node.locked) {
- node.autoPosition = true;
- }
- this.engine.addNode(node, false); // 'false' for add event trigger
- node._dirty = true; // force attr update
- }, this);
- this.commit();
- };
-
- GridStack.prototype.verticalMargin = function(val, noUpdate) {
- if (val === undefined) {
- return this.opts.verticalMargin;
- }
-
- var heightData = Utils.parseHeight(val);
-
- if (this.opts.verticalMarginUnit === heightData.unit && this.opts.maxRow === heightData.height) {
- return ;
- }
- this.opts.verticalMarginUnit = heightData.unit;
- this.opts.verticalMargin = heightData.height;
-
- if (!noUpdate) {
- this._updateStyles();
- }
- };
-
- /** set/get the current cell height value */
- GridStack.prototype.cellHeight = function(val, noUpdate) {
- // getter - returns the opts stored height else compute it...
- if (val === undefined) {
- if (this.opts.cellHeight && this.opts.cellHeight !== 'auto') {
- return this.opts.cellHeight;
- }
- // compute the height taking margin into account (each row has margin other than last one)
- var o = this.$el.children('.' + this.opts.itemClass).first();
- var height = o.attr('data-gs-height');
- var verticalMargin = this.opts.verticalMargin;
- return Math.round((o.outerHeight() - (height - 1) * verticalMargin) / height);
- }
-
- // setter - updates the cellHeight value if they changed
- var heightData = Utils.parseHeight(val);
- if (this.opts.cellHeightUnit === heightData.unit && this.opts.cellHeight === heightData.height) {
- return ;
- }
- this.opts.cellHeightUnit = heightData.unit;
- this.opts.cellHeight = heightData.height;
-
- if (!noUpdate) {
- this._updateStyles();
- }
- };
-
- GridStack.prototype.cellWidth = function() {
- // TODO: take margin into account ($horizontal_padding in .scss) to make cellHeight='auto' square ? (see 810-many-columns.html)
- return Math.round(this.$el.outerWidth() / this.opts.column);
- };
-
- GridStack.prototype.getCellFromPixel = function(position, useOffset) {
- var containerPos = (useOffset !== undefined && useOffset) ?
- this.$el.offset() : this.$el.position();
- var relativeLeft = position.left - containerPos.left;
- var relativeTop = position.top - containerPos.top;
-
- var columnWidth = Math.floor(this.$el.width() / this.opts.column);
- var rowHeight = Math.floor(this.$el.height() / parseInt(this.$el.attr('data-gs-current-row')));
-
- return {x: Math.floor(relativeLeft / columnWidth), y: Math.floor(relativeTop / rowHeight)};
- };
-
- GridStack.prototype.batchUpdate = function() {
- this.engine.batchUpdate();
- };
-
- GridStack.prototype.commit = function() {
- this.engine.commit();
- this._triggerRemoveEvent();
- this._triggerAddEvent();
- this._triggerChangeEvent();
- };
-
- GridStack.prototype.isAreaEmpty = function(x, y, width, height) {
- return this.engine.isAreaEmpty(x, y, width, height);
- };
-
- GridStack.prototype.setStatic = function(staticValue) {
- this.opts.staticGrid = (staticValue === true);
- this.enableMove(!staticValue);
- this.enableResize(!staticValue);
- this._setStaticClass();
- };
-
- GridStack.prototype._setStaticClass = function() {
- var staticClassName = 'grid-stack-static';
-
- if (this.opts.staticGrid === true) {
- this.$el.addClass(staticClassName);
- } else {
- this.$el.removeClass(staticClassName);
- }
- };
-
- /** called whenever a node is added or moved - updates the cached layouts */
- GridStackEngine.prototype._layoutsNodesChange = function(nodes) {
- if (!this._layouts || this._ignoreLayoutsNodeChange) return;
- // remove smaller layouts - we will re-generate those on the fly... larger ones need to update
- this._layouts.forEach(function(layout, column) {
- if (!layout || column === this.column) return;
- if (column < this.column) {
- this._layouts[column] = undefined;
- }
- else {
- // we save the original x,y,w (h isn't cached) to see what actually changed to propagate better.
- // Note: we don't need to check against out of bound scaling/moving as that will be done when using those cache values.
- nodes.forEach(function(node) {
- var n = layout.find(function(l) { return l._id === node._id });
- if (!n) return; // no cache for new nodes. Will use those values.
- var ratio = column / this.column;
- // Y changed, push down same amount
- // TODO: detect doing item 'swaps' will help instead of move (especially in 1 column mode)
- if (node.y !== node._origY) {
- n.y += (node.y - node._origY);
- }
- // X changed, scale from new position
- if (node.x !== node._origX) {
- n.x = Math.round(node.x * ratio);
- }
- // width changed, scale from new width
- if (node.width !== node._origW) {
- n.width = Math.round(node.width * ratio);
- }
- // ...height always carries over from cache
- }, this);
- }
- }, this);
- }
-
- /**
- * Called to scale the widget width & position up/down based on the column change.
- * Note we store previous layouts (especially original ones) to make it possible to go
- * from say 12 -> 1 -> 12 and get back to where we were.
- *
- * oldColumn: previous number of columns
- * column: new column number
- * nodes?: different sorted list (ex: DOM order) instead of current list
- */
- GridStackEngine.prototype._updateNodeWidths = function(oldColumn, column, nodes) {
- if (!this.nodes.length || oldColumn === column) { return; }
-
- // cache the current layout in case they want to go back (like 12 -> 1 -> 12) as it requires original data
- var copy = [this.nodes.length];
- this.nodes.forEach(function(n, i) {copy[i] = {x: n.x, y: n.y, width: n.width, _id: n._id}}); // only thing we change is x,y,w and id to find it back
- this._layouts = this._layouts || []; // use array to find larger quick
- this._layouts[oldColumn] = copy;
-
- // if we're going to 1 column and using DOM order rather than default sorting, then generate that layout
- if (column === 1 && nodes && nodes.length) {
- var top = 0;
- nodes.forEach(function(n) {
- n.x = 0;
- n.width = 1;
- n.y = Math.max(n.y, top);
- top = n.y + n.height;
- });
- } else {
- nodes = Utils.sort(this.nodes, -1, oldColumn); // current column reverse sorting so we can insert last to front (limit collision)
- }
-
- // see if we have cached previous layout.
- var cacheNodes = this._layouts[column] || [];
- // if not AND we are going up in size start with the largest layout as down-scaling is more accurate
- var lastIndex = this._layouts.length - 1;
- if (cacheNodes.length === 0 && column > oldColumn && column < lastIndex) {
- cacheNodes = this._layouts[lastIndex] || [];
- if (cacheNodes.length) {
- // pretend we came from that larger column by assigning those values as starting point
- oldColumn = lastIndex;
- cacheNodes.forEach(function(cacheNode) {
- var j = nodes.findIndex(function(n) {return n && n._id === cacheNode._id});
- if (j !== -1) {
- // still current, use cache info positions
- nodes[j].x = cacheNode.x;
- nodes[j].y = cacheNode.y;
- nodes[j].width = cacheNode.width;
- }
- });
- cacheNodes = []; // we still don't have new column cached data... will generate from larger one.
- }
- }
-
- // if we found cache re-use those nodes that are still current
- var newNodes = [];
- cacheNodes.forEach(function(cacheNode) {
- var j = nodes.findIndex(function(n) {return n && n._id === cacheNode._id});
- if (j !== -1) {
- // still current, use cache info positions
- nodes[j].x = cacheNode.x;
- nodes[j].y = cacheNode.y;
- nodes[j].width = cacheNode.width;
- newNodes.push(nodes[j]);
- nodes[j] = null; // erase it so we know what's left
- }
- });
- // ...and add any extra non-cached ones
- var ratio = column / oldColumn;
- nodes.forEach(function(node) {
- if (!node) return;
- node.x = (column === 1 ? 0 : Math.round(node.x * ratio));
- node.width = ((column === 1 || oldColumn === 1) ? 1 : (Math.round(node.width * ratio) || 1));
- newNodes.push(node);
- });
-
- // finally relayout them in reverse order (to get correct placement)
- newNodes = Utils.sort(newNodes, -1, column);
- this._ignoreLayoutsNodeChange = true;
- this.batchUpdate();
- this.nodes = []; // pretend we have no nodes to start with (we use same structures) to simplify layout
- newNodes.forEach(function(node) {
- this.addNode(node, false); // 'false' for add event trigger
- node._dirty = true; // force attr update
- }, this);
- this.commit();
- delete this._ignoreLayoutsNodeChange;
- }
-
- /** called to save initial position/size */
- GridStackEngine.prototype._saveInitial = function() {
- this.nodes.forEach(function(n) {
- n._origX = n.x;
- n._origY = n.y;
- n._origW = n.width;
- n._origH = n.height;
- delete n._dirty;
- });
- }
-
- /**
- * set/get number of columns in the grid. Will attempt to update existing widgets
- * to conform to new number of columns. Requires `gridstack-extra.css` or `gridstack-extra.min.css` for [2-11],
- * else you will need to generate correct CSS (see https://github.com/gridstack/gridstack.js#change-grid-columns)
- * @param column - Integer > 0 (default 12).
- * @param doNotPropagate if true existing widgets will not be updated (optional)
- */
- GridStack.prototype.column = function(column, doNotPropagate) {
- // getter - returns the opts stored mode
- if (column === undefined) {
- return this.opts.column;
- }
- // setter
- if (this.opts.column === column) { return; }
- var oldColumn = this.opts.column;
-
- // if we go into 1 column mode (which happens if we're sized less than minWidth unless disableOneColumnMode is on)
- // then remember the original columns so we can restore.
- if (column === 1) {
- this._prevColumn = oldColumn;
- } else {
- delete this._prevColumn;
- }
-
- this.$el.removeClass('grid-stack-' + oldColumn);
- this.$el.addClass('grid-stack-' + column);
- this.opts.column = this.engine.column = column;
-
- if (doNotPropagate === true) { return; }
-
- // update the items now - see if the dom order nodes should be passed instead (else default to current list)
- var domNodes;
- if (this.opts.oneColumnModeDomSort && column === 1) {
- domNodes = [];
- this.$el.children('.' + this.opts.itemClass).each(function(index, el) {
- var node = $(el).data('_gridstack_node');
- if (node) { domNodes.push(node); }
- });
- if (!domNodes.length) { domNodes = undefined; }
- }
- this.engine._updateNodeWidths(oldColumn, column, domNodes);
-
- // and trigger our event last...
- this.engine._ignoreLayoutsNodeChange = true;
- this._triggerChangeEvent();
- delete this.engine._ignoreLayoutsNodeChange;
- };
-
- GridStack.prototype.float = function(val) {
- // getter - returns the opts stored mode
- if (val === undefined) {
- return this.opts.float || false;
- }
- // setter - updates the mode and relayout if gravity is back on
- if (this.opts.float === val) { return; }
- this.opts.float = this.engine.float = val || false;
- if (!val) {
- this.engine._packNodes();
- this.engine._notify();
- this._triggerChangeEvent();
- }
- };
-
- GridStack.prototype.getRow = function() {
- return this.engine.getRow();
- }
-
- /** Event handler that extracts our CustomEvent data out automatically for receiving custom
- * notifications (see doc for supported events)
- */
- GridStack.prototype.on = function(eventName, callback) {
- // check for array of names being passed instead
- if (eventName.indexOf(' ') !== -1) {
- var names = eventName.split(' ');
- names.forEach(function(name) { this.on(name, callback) }, this);
- return;
- }
-
- if (eventName === 'change' || eventName === 'added' || eventName === 'removed') {
- // native CustomEvent handlers - cash the generic handlers so we can remove
- this._gsEventHandler = this._gsEventHandler || {};
- this._gsEventHandler[eventName] = function(event) { callback(event, event.detail) };
- this.el.addEventListener(eventName, this._gsEventHandler[eventName]);
- } else {
- // still JQuery events
- this.$el.on(eventName, callback);
- }
- }
-
- /** unsubscribe from the 'on' event */
- GridStack.prototype.off = function(eventName) {
- // check for array of names being passed instead
- if (eventName.indexOf(' ') !== -1) {
- var names = eventName.split(' ');
- names.forEach(function(name) { this.off(name, callback) }, this);
- return;
- }
-
- if (eventName === 'change' || eventName === 'added' || eventName === 'removed') {
- // remove native CustomEvent handlers
- if (this._gsEventHandler && this._gsEventHandler[eventName]) {
- this.el.removeEventListener(eventName, this._gsEventHandler[eventName]);
- delete this._gsEventHandler[eventName];
- }
- } else {
- // still JQuery events
- this.$el.off(eventName);
- }
- }
-
- // legacy method renames
- GridStack.prototype.setGridWidth = obsolete(GridStack.prototype.column, 'setGridWidth', 'column', 'v0.5.3');
- GridStack.prototype.setColumn = obsolete(GridStack.prototype.column, 'setColumn', 'column', 'v0.6.4');
- GridStackEngine.prototype.getGridHeight = obsolete(GridStackEngine.prototype.getRow, 'getGridHeight', 'getRow', 'v1.0.0');
-
- scope.GridStack = GridStack;
- scope.GridStack.Utils = Utils;
- scope.GridStack.Engine = GridStackEngine;
- scope.GridStack.DragDropPlugin = GridStackDragDropPlugin;
-
- /**
- * initializing the HTML element, or selector string, into a grid will return the grid. Calling it again will
- * simply return the existing instance (ignore any passed options).
- */
- GridStack.init = function(opts, elOrString) {
- if (!elOrString) { elOrString = '.grid-stack' }
- var el = $(elOrString).get(0);
- if (!el) return;
- if (!el.gridstack) {
- el.gridstack = new GridStack(el, opts);
- }
- return el.gridstack
- };
-
- /**
- * Will initialize a list of elements (given a selector) and return an array of grids.
- */
- GridStack.initAll = function(opts, selector) {
- if (!selector) { selector = '.grid-stack' }
- var grids = [];
- $(selector).each(function(index, el) {
- if (!el.gridstack) {
- el.gridstack = new GridStack(el, opts);
- }
- grids.push(el.gridstack);
- });
- return grids;
- };
-
- return scope.GridStack;
-});
diff --git a/src/gridstack.scss b/src/gridstack.scss
index 07be076d0..a699197da 100644
--- a/src/gridstack.scss
+++ b/src/gridstack.scss
@@ -1,5 +1,5 @@
/*!
- * required gridstack 1.1.0-dev CSS for default 12 and 1 columnMode size. Use gridstack-extra.css for others
+ * required gridstack 2.0.0-rc CSS for default 12 and 1 columnMode size. Use gridstack-extra.css for others
* https://gridstackjs.com/
* (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov
* gridstack.js may be freely distributed under the MIT license.
diff --git a/src/gridstack.ts b/src/gridstack.ts
new file mode 100644
index 000000000..f298c4958
--- /dev/null
+++ b/src/gridstack.ts
@@ -0,0 +1,1586 @@
+// gridstack.ts 2.0.0-rc @preserve
+
+/**
+ * https://gridstackjs.com/
+ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov
+ * gridstack.js may be freely distributed under the MIT license.
+*/
+
+import { GridStackEngine } from './gridstack-engine'
+import { obsoleteOpts, obsoleteOptsDel, obsoleteAttr, obsolete, Utils } from './utils';
+import { GridStackElement, GridItemHTMLElement, GridstackWidget, GridStackNode, GridstackOptions, numberOrString } from './types';
+import { GridStackDragDropPlugin } from './gridstack-dragdrop-plugin';
+
+// TODO: TEMPORARY until we remove all jquery calls
+// also see https://stackoverflow.com/questions/35345760/importing-jqueryui-with-typescript-and-requirejs
+import * as $ from './jquery.js';
+
+export interface GridHTMLElement extends HTMLElement {
+ gridstack?: GridStack; // grid's parent DOM element points back to grid class
+}
+export type GridStackEvent = 'added' | 'change' | 'disable' | 'dragstart' | 'dragstop' | 'dropped' |
+ 'enable' | 'removed' | 'resize' | 'resizestart' | 'gsresizestop';
+
+/** Defines the coordinates of an object */
+export interface MousePosition {
+ top: number;
+ left: number;
+}
+
+/** Defines the position of a cell inside the grid*/
+export interface CellPosition {
+ x: number;
+ y: number;
+}
+
+interface GridCSSStyleSheet extends CSSStyleSheet {
+ _max?: number; // internal tracker of the max # of rows we created
+}
+
+/**
+ * Main gridstack class - you will need to call `GridStack.init()` first to initialize your grid.
+ * Note: your grid elements MUST have the following classes for the CSS layout to work:
+ * @example
+ *
+ */
+export class GridStack {
+
+ /**
+ * initializing the HTML element, or selector string, into a grid will return the grid. Calling it again will
+ * simply return the existing instance (ignore any passed options). There is also an initAll() version that support
+ * multiple grids initialization at once.
+ * @param options grid options (optional)
+ * @param elOrString element to convert to a grid (default to '.grid-stack' class selector)
+ *
+ * @example
+ * const grid = GridStack.init();
+ *
+ * Note: the HTMLElement (of type GridHTMLElement) will store a `gridstack: GridStack` value that can be retrieve later
+ * const grid = document.querySelector('.grid-stack').gridstack;
+ */
+ public static init(options?: GridstackOptions, elOrString: GridStackElement = '.grid-stack'): GridStack {
+ const el: GridHTMLElement = (typeof elOrString === 'string' ? document.querySelector(elOrString) : elOrString);
+ if (!el) {
+ if (typeof elOrString === 'string') {
+ console.error('gridstack.js: init() no grid was found. Did you forget class ' + elOrString + ' on your element ?');
+ console.error('".grid-stack" is required for proper CSS styling and drag/drop.');
+ } else {
+ console.error('gridstack.js: init() no grid element was passed.');
+ }
+ return;
+ }
+ if (!el.gridstack) {
+ el.gridstack = new GridStack(el, options);
+ }
+ return el.gridstack
+ }
+
+ /**
+ * Will initialize a list of elements (given a selector) and return an array of grids.
+ * @param options grid options (optional)
+ * @param selector element to convert to grids (default to '.grid-stack' class selector)
+ *
+ * @example
+ * const grids = GridStack.initAll();
+ * grids.forEach(...)
+ */
+ public static initAll(options?: GridstackOptions, selector = '.grid-stack'): GridStack[] {
+ const grids: GridStack[] = [];
+ document.querySelectorAll(selector).forEach((el: GridHTMLElement) => {
+ if (!el.gridstack) {
+ el.gridstack = new GridStack(el, options);
+ }
+ grids.push(el.gridstack);
+ });
+ if (grids.length === 0) {
+ console.error('gridstack.js: initAll() no grid was found. Did you forget class ' + selector + ' on your element ?');
+ console.error('".grid-stack" is required for proper CSS styling and drag/drop.');
+ }
+ return grids;
+ }
+
+ /** the HTML element tied to this grid after it's been initialized */
+ public el: GridHTMLElement;
+
+ /** engine used to implement non DOM grid functionality */
+ public engine: GridStackEngine;
+
+ /** grid options - public for classes to access, but use methods to modify! */
+ public opts: GridstackOptions;
+
+ /** @internal */
+ private $el: JQuery; // TODO: legacy code
+ private $placeholder: JQuery;
+ private oneColumnMode: boolean;
+ private dd: GridStackDragDropPlugin;
+ private _prevColumn: number;
+ private _stylesId: string;
+ private _gsEventHandler: {};
+ private _styles: GridCSSStyleSheet;
+ private isAutoCellHeight: boolean;
+
+ /**
+ * Construct a grid item from the given element and options
+ * @param el
+ * @param opts
+ */
+ public constructor(el: GridStackElement, opts: GridstackOptions) {
+ opts = opts || {};
+
+ this.$el = $(el); // legacy code
+ this.el = this.$el.get(0); // exposed HTML element to the user
+
+ obsoleteOpts(opts, 'width', 'column', 'v0.5.3');
+ obsoleteOpts(opts, 'height', 'maxRow', 'v0.5.3');
+ obsoleteOptsDel(opts, 'oneColumnModeClass', 'v0.6.3', '. Use class `.grid-stack-1` instead');
+
+ // container attributes
+ obsoleteAttr(this.el, 'data-gs-width', 'data-gs-column', 'v0.5.3');
+ obsoleteAttr(this.el, 'data-gs-height', 'data-gs-max-row', 'v0.5.3');
+ obsoleteAttr(this.el, 'data-gs-current-height', 'data-gs-current-row', 'v1.0.0');
+
+ opts.itemClass = opts.itemClass || 'grid-stack-item';
+
+ // if row property exists, replace minRow and maxRow instead
+ if (opts.row) {
+ opts.minRow = opts.maxRow = opts.row;
+ delete opts.row;
+ }
+ const rowAttr = parseInt(this.$el.attr('data-gs-row'));
+
+ // elements attributes override any passed options (like CSS style) - merge the two together
+ const defaults: GridstackOptions = {
+ column: parseInt(this.$el.attr('data-gs-column')) || 12,
+ minRow: rowAttr ? rowAttr : parseInt(this.$el.attr('data-gs-min-row')) || 0,
+ maxRow: rowAttr ? rowAttr : parseInt(this.$el.attr('data-gs-max-row')) || 0,
+ itemClass: 'grid-stack-item',
+ placeholderClass: 'grid-stack-placeholder',
+ placeholderText: '',
+ handle: '.grid-stack-item-content',
+ handleClass: null,
+ cellHeight: 60,
+ verticalMargin: 20,
+ auto: true,
+ minWidth: 768,
+ float: false,
+ staticGrid: false,
+ _class: 'grid-stack-instance-' + (Math.random() * 10000).toFixed(0),
+ animate: Boolean(this.$el.attr('data-gs-animate')) || false,
+ alwaysShowResizeHandle: opts.alwaysShowResizeHandle || false,
+ resizable: Utils.defaults(opts.resizable || {}, {
+ autoHide: !(opts.alwaysShowResizeHandle || false),
+ handles: 'se'
+ }),
+ draggable: Utils.defaults(opts.draggable || {}, {
+ handle: (opts.handleClass ? '.' + opts.handleClass : (opts.handle ? opts.handle : '')) ||
+ '.grid-stack-item-content',
+ scroll: false,
+ appendTo: 'body'
+ }),
+ disableDrag: opts.disableDrag || false,
+ disableResize: opts.disableResize || false,
+ rtl: 'auto',
+ removable: false,
+ removableOptions: Utils.defaults(opts.removableOptions || {}, {
+ accept: '.' + opts.itemClass
+ }),
+ removeTimeout: 2000,
+ verticalMarginUnit: 'px',
+ cellHeightUnit: 'px',
+ disableOneColumnMode: opts.disableOneColumnMode || false,
+ oneColumnModeDomSort: opts.oneColumnModeDomSort,
+ ddPlugin: null
+ };
+ this.opts = Utils.defaults(opts, defaults);
+
+ if (this.opts.ddPlugin === false) {
+ this.opts.ddPlugin = GridStackDragDropPlugin;
+ } else if (this.opts.ddPlugin === null) {
+ this.opts.ddPlugin = GridStackDragDropPlugin.registeredPlugins[0] || GridStackDragDropPlugin;
+ }
+
+ this.dd = new this.opts.ddPlugin(this);
+
+ if (this.opts.rtl === 'auto') {
+ this.opts.rtl = this.$el.css('direction') === 'rtl';
+ }
+
+ if (this.opts.rtl) {
+ this.$el.addClass('grid-stack-rtl');
+ }
+
+ this.opts._isNested = this.$el.closest('.' + opts.itemClass).length > 0;
+ if (this.opts._isNested) {
+ this.$el.addClass('grid-stack-nested');
+ }
+
+ this.isAutoCellHeight = (this.opts.cellHeight === 'auto');
+ if (this.isAutoCellHeight) {
+ // make the cell square initially
+ this.cellHeight(this.cellWidth(), true);
+ } else {
+ this.cellHeight(this.opts.cellHeight, true);
+ }
+ this.verticalMargin(this.opts.verticalMargin, true);
+
+ this.$el.addClass(this.opts._class);
+
+ this._setStaticClass();
+
+ this._initStyles();
+
+ this.engine = new GridStackEngine(this.opts.column, (cbNodes, detachNode) => {
+ detachNode = (detachNode === undefined ? true : detachNode);
+ let maxHeight = 0;
+ this.engine.nodes.forEach(n => { maxHeight = Math.max(maxHeight, n.y + n.height) });
+ cbNodes.forEach(n => {
+ if (detachNode && n._id === null) {
+ if (n.el) { $(n.el).remove() }
+ } else {
+ $(n.el)
+ .attr('data-gs-x', n.x)
+ .attr('data-gs-y', n.y)
+ .attr('data-gs-width', n.width)
+ .attr('data-gs-height', n.height);
+ }
+ });
+ this._updateStyles(maxHeight + 10);
+ },
+ this.opts.float,
+ this.opts.maxRow);
+
+ if (this.opts.auto) {
+ const elements = [];
+ const _this = this;
+ this.$el.children('.' + this.opts.itemClass + ':not(.' + this.opts.placeholderClass + ')')
+ .each((index, el) => {
+ const x = parseInt(el.getAttribute('data-gs-x'));
+ const y = parseInt(el.getAttribute('data-gs-y'));
+ elements.push({
+ el: el,
+ // if x,y are missing (autoPosition) add them to end of list - but keep their respective DOM order
+ i: (Number.isNaN(x) ? 1000 : x) + (Number.isNaN(y) ? 1000 : y) * _this.opts.column
+ });
+ });
+ Utils.sortBy(elements, x => x.i).forEach( item => { this._prepareElement(item.el) });
+ }
+ this.engine._saveInitial(); // initial start of items
+
+ this.setAnimation(this.opts.animate);
+
+ this.$placeholder = $(
+ '' +
+ '
' + this.opts.placeholderText + '
').hide();
+
+ this._updateContainerHeight();
+
+ $(window).resize(this.onResizeHandler);
+ this.onResizeHandler();
+
+ if (!this.opts.staticGrid && typeof this.opts.removable === 'string') {
+ const trashZone = $(this.opts.removable);
+ if (!this.dd.isDroppable(trashZone)) {
+ this.dd.droppable(trashZone, this.opts.removableOptions);
+ }
+ this.dd
+ .on(trashZone, 'dropover', (event, ui) => {
+ const el = $(ui.draggable);
+ const node = el.get(0).gridstackNode;
+ if (!node || node._grid !== this) {
+ return;
+ }
+ el.data('inTrashZone', true);
+ this._setupRemovingTimeout(el);
+ })
+ .on(trashZone, 'dropout', (event, ui) => {
+ const el = $(ui.draggable);
+ const node = el.get(0).gridstackNode;
+ if (!node || node._grid !== this) {
+ return;
+ }
+ el.data('inTrashZone', false);
+ this._clearRemovingTimeout(el);
+ });
+ }
+
+ this.setupAcceptWidget();
+ };
+
+
+ /**
+ * Creates new widget and returns it.
+ *
+ * Widget will be always placed even if result height is more than actual grid height.
+ * You need to use willItFit method before calling addWidget for additional check.
+ * See also `makeWidget()`.
+ *
+ * @example
+ * const grid = GridStack.init();
+ * grid.addWidget(el, {width: 3, autoPosition: true});
+ *
+ * @param el widget to add
+ * @param options widget position/size options (optional)
+ */
+ public addWidget(el: GridStackElement, options? : GridstackWidget): HTMLElement;
+
+ /**
+ * Creates new widget and returns it.
+ * Legacy: Spelled out version of the widgets options, recommend use new version instead.
+ *
+ * @example
+ * const grid = GridStack.init();
+ * grid.addWidget(el, 0, 0, 3, 2, true);
+ *
+ * @param el widget to add
+ * @param x widget position x (optional)
+ * @param y widget position y (optional)
+ * @param width widget dimension width (optional)
+ * @param height widget dimension height (optional)
+ * @param autoPosition if true then x, y parameters will be ignored and widget will be places on the first available position (optional)
+ * @param minWidth minimum width allowed during resize/creation (optional)
+ * @param maxWidth maximum width allowed during resize/creation (optional)
+ * @param minHeight minimum height allowed during resize/creation (optional)
+ * @param maxHeight maximum height allowed during resize/creation (optional)
+ * @param id value for `data-gs-id` (optional)
+ */
+ public addWidget(el: GridStackElement, x? : number | GridstackWidget, y?: number, width?: number, height?: number, autoPosition?: boolean,
+ minWidth?: number, maxWidth?: number, minHeight?: number, maxHeight?: number, id?: numberOrString): HTMLElement {
+ // new way of calling with an object - make sure all items have been properly initialized
+ if (x === undefined || typeof x === 'object') {
+ // Tempting to initialize the passed in opt with default and valid values, but this break knockout demos
+ // as the actual value are filled in when _prepareElement() calls el.attr('data-gs-xyz) before adding the node.
+ // opt = this.engine._prepareNode(opt);
+ x = x || {};
+ } else {
+ // old legacy way of calling with items spelled out - call us back with single object instead (so we can properly initialized values)
+ return this.addWidget(el, {x: x, y: y, width: width, height: height, autoPosition: autoPosition,
+ minWidth: minWidth, maxWidth: maxWidth, minHeight: minHeight, maxHeight: maxHeight, id: id});
+ }
+
+ const $el = $(el);
+ this._writeAttr(el, x);
+ this.$el.append(el);
+ return this.makeWidget(el);
+ }
+
+ /**
+ * Initializes batch updates. You will see no changes until `commit()` method is called.
+ */
+ public batchUpdate() {
+ this.engine.batchUpdate();
+ }
+
+ /**
+ * Gets current cell height.
+ */
+ public getCellHeight(): number {
+ if (this.opts.cellHeight && this.opts.cellHeight !== 'auto') {
+ return this.opts.cellHeight as number;
+ }
+ // compute the height taking margin into account (each row has margin other than last one)
+ const o = this.$el.children('.' + this.opts.itemClass).first();
+ const height = parseInt(o.attr('data-gs-height'));
+ const verticalMargin = this.opts.verticalMargin as number;
+ return Math.round((o.outerHeight() - (height - 1) * verticalMargin) / height);
+ }
+
+ /**
+ * Update current cell height - see `GridstackOptions.cellHeight` for format.
+ * This method rebuilds an internal CSS style sheet.
+ * Note: You can expect performance issues if call this method too often.
+ *
+ * @param val the cell height
+ * @param noUpdate (Optional) if true, styles will not be updated
+ *
+ * @example
+ * grid.cellHeight(grid.cellWidth() * 1.2);
+ */
+ public cellHeight(val: numberOrString, noUpdate?: boolean) {
+ const heightData = Utils.parseHeight(val);
+ if (this.opts.cellHeightUnit === heightData.unit && this.opts.cellHeight === heightData.height) {
+ return ;
+ }
+ this.opts.cellHeightUnit = heightData.unit;
+ this.opts.cellHeight = heightData.height;
+
+ if (!noUpdate) {
+ this._updateStyles();
+ }
+ }
+
+ /**
+ * Gets current cell width.
+ */
+ public cellWidth(): number {
+ // TODO: take margin into account ($horizontal_padding in .scss) to make cellHeight='auto' square ? (see 810-many-columns.html)
+ return Math.round(this.$el.outerWidth() / this.opts.column);
+ }
+
+ /**
+ * Finishes batch updates. Updates DOM nodes. You must call it after batchUpdate.
+ */
+ public commit() {
+ this.engine.commit();
+ this._triggerRemoveEvent();
+ this._triggerAddEvent();
+ this._triggerChangeEvent();
+ };
+
+ /** re-layout grid items to reclaim any empty space */
+ public compact() {
+ this.engine.compact();
+ this._triggerChangeEvent();
+ }
+
+ /**
+ * set the number of columns in the grid. Will update existing widgets to conform to new number of columns,
+ * as well as cache the original layout so you can revert back to previous positions without loss.
+ * Requires `gridstack-extra.css` or `gridstack-extra.min.css` for [1-11],
+ * else you will need to generate correct CSS (see https://github.com/gridstack/gridstack.js#change-grid-columns)
+ * @param column - Integer > 0 (default 12).
+ * @param doNotPropagate if true existing widgets will not be updated (optional)
+ */
+ public column(column: number, doNotPropagate?: boolean) {
+ if (this.opts.column === column) { return; }
+ const oldColumn = this.opts.column;
+
+ // if we go into 1 column mode (which happens if we're sized less than minWidth unless disableOneColumnMode is on)
+ // then remember the original columns so we can restore.
+ if (column === 1) {
+ this._prevColumn = oldColumn;
+ } else {
+ delete this._prevColumn;
+ }
+
+ this.$el.removeClass('grid-stack-' + oldColumn);
+ this.$el.addClass('grid-stack-' + column);
+ this.opts.column = this.engine.column = column;
+
+ if (doNotPropagate === true) { return; }
+
+ // update the items now - see if the dom order nodes should be passed instead (else default to current list)
+ let domNodes;
+ if (this.opts.oneColumnModeDomSort && column === 1) {
+ domNodes = [];
+ this.$el.children('.' + this.opts.itemClass).each((index, el: GridItemHTMLElement) => {
+ const node = el.gridstackNode;
+ if (node) { domNodes.push(node); }
+ });
+ if (!domNodes.length) { domNodes = undefined; }
+ }
+ this.engine._updateNodeWidths(oldColumn, column, domNodes);
+
+ // and trigger our event last...
+ this._triggerChangeEvent(true); // skip layout update
+ }
+
+ /**
+ * get the number of columns in the grid (default 12)
+ */
+ public getColumn(): number {
+ return this.opts.column;
+ }
+
+ /**
+ * Destroys a grid instance.
+ * @param detachGrid if false nodes and grid will not be removed from the DOM (Optional. Default true).
+ */
+ public destroy(detachGrid?: boolean) {
+ $(window).off('resize', this.onResizeHandler);
+ this.disable();
+ if (detachGrid !== undefined && !detachGrid) {
+ this.removeAll(false);
+ delete this.el.gridstack;
+ } else {
+ this.$el.remove();
+ }
+ Utils.removeStylesheet(this._stylesId);
+ if (this.engine) {
+ this.engine = null;
+ }
+ }
+
+ /**
+ * Disables widgets moving/resizing. This is a shortcut for:
+ * @example
+ * grid.enableMove(false);
+ * grid.enableResize(false);
+ */
+ public disable() {
+ this.enableMove(false);
+ this.enableResize(false);
+ this.$el.trigger('disable');
+ }
+
+ /**
+ * Enables widgets moving/resizing. This is a shortcut for:
+ * @example
+ * grid.enableMove(true);
+ * grid.enableResize(true);
+ */
+ public enable() {
+ this.enableMove(true);
+ this.enableResize(true);
+ this.$el.trigger('enable');
+ }
+
+ /**
+ * Enables/disables widget moving.
+ *
+ * @param doEnable
+ * @param includeNewWidgets will force new widgets to be draggable as per
+ * doEnable`s value by changing the disableDrag grid option (default: true).
+ */
+ public enableMove(doEnable: boolean, includeNewWidgets = true) {
+ this.$el.children('.' + this.opts.itemClass).each((index, el) => {
+ this.movable(el, doEnable);
+ })
+ if (includeNewWidgets) {
+ this.opts.disableDrag = !doEnable;
+ }
+ }
+
+ /**
+ * Enables/disables widget resizing
+ * @param doEnable
+ * @param includeNewWidgets will force new widgets to be draggable as per
+ * doEnable`s value by changing the disableResize grid option (default: true).
+ */
+ public enableResize(doEnable: boolean, includeNewWidgets = true) {
+ this.$el.children('.' + this.opts.itemClass).each((index, el) => {
+ this.resizable(el, doEnable);
+ })
+ if (includeNewWidgets) {
+ this.opts.disableResize = !doEnable;
+ }
+ }
+
+ /**
+ * enable/disable floating widgets (default: `false`) See [example](http://gridstackjs.com/demo/float.html)
+ */
+ public float(val: boolean) {
+ this.engine.float = val;
+ this._triggerChangeEvent();
+ }
+
+ /**
+ * get the current float mode
+ */
+ public getFloat(): boolean {
+ return this.engine.float || false;
+ }
+
+ /**
+ * Get the position of the cell under a pixel on screen.
+ * @param position the position of the pixel to resolve in
+ * absolute coordinates, as an object with top and left properties
+ * @param useOffset if true, value will be based on offset vs position (Optional. Default false).
+ * Useful when grid is within `position: relative` element
+ *
+ * Returns an object with properties `x` and `y` i.e. the column and row in the grid.
+ */
+ public getCellFromPixel(position: MousePosition, useOffset?: boolean): CellPosition {
+ const containerPos = (useOffset !== undefined && useOffset) ?
+ this.$el.offset() : this.$el.position();
+ const relativeLeft = position.left - containerPos.left;
+ const relativeTop = position.top - containerPos.top;
+
+ const columnWidth = Math.floor(this.$el.width() / this.opts.column);
+ const rowHeight = Math.floor(this.$el.height() / parseInt(this.$el.attr('data-gs-current-row')));
+
+ return {x: Math.floor(relativeLeft / columnWidth), y: Math.floor(relativeTop / rowHeight)};
+ }
+
+ /** returns the current number of rows */
+ public getRow(): number {
+ return this.engine.getRow();
+ }
+
+ /**
+ * Checks if specified area is empty.
+ * @param x the position x.
+ * @param y the position y.
+ * @param width the width of to check
+ * @param height the height of to check
+ */
+ public isAreaEmpty(x: number, y: number, width: number, height: number): boolean {
+ return this.engine.isAreaEmpty(x, y, width, height);
+ }
+
+ /**
+ * Locks/unlocks widget.
+ * @param el element or selector to modify.
+ * @param val if true widget will be locked.
+ */
+ public locked(els: GridStackElement, val: boolean): GridStack {
+ $(els).each((index, el) => {
+ const node = el.gridstackNode;
+ if (node!) return;
+ node.locked = (val || false);
+ if (node.locked) {
+ el.setAttribute('data-gs-locked', 'yes');
+ } else {
+ el.removeAttribute('data-gs-locked');
+ }
+ });
+ return this;
+ }
+
+ /**
+ * If you add elements to your grid by hand, you have to tell gridstack afterwards to make them widgets.
+ * If you want gridstack to add the elements for you, use addWidget instead.
+ * Makes the given element a widget and returns it.
+ * @param el widget to convert.
+ *
+ * @example
+ * const grid = GridStack.init();
+ * grid.el.appendChild('')
+ * grid.makeWidget('gsi-1');
+ */
+ public makeWidget(el: GridStackElement): HTMLElement {
+ this._prepareElement(el, true);
+ this._updateContainerHeight();
+ this._triggerAddEvent();
+ this._triggerChangeEvent();
+ return $(el).get(0);
+ }
+
+ /**
+ * Set the maxWidth for a widget.
+ * @param el widget to modify.
+ * @param val A numeric value of the number of columns
+ */
+ public maxWidth(els: GridStackElement, val: number): GridStack {
+ if (isNaN(val)) return;
+ $(els).each((index, el) => {
+ const node = el.gridstackNode;
+ if (!node) { return; }
+ node.maxWidth = (val || undefined);
+ if (node.maxWidth) {
+ el.setAttribute('data-gs-max-width', val);
+ } else {
+ el.removeAttribute('data-gs-max-width');
+ }
+ });
+ return this;
+ }
+
+ /**
+ * Set the minWidth for a widget.
+ * @param el widget to modify.
+ * @param val A numeric value of the number of columns
+ */
+ public minWidth(els: GridStackElement, val: number): GridStack {
+ if (isNaN(val)) return;
+ $(els).each((index, el) => {
+ const node = el.gridstackNode;
+ if (!node) { return; }
+ if (node.minWidth) {
+ el.setAttribute('data-gs-min-width', val);
+ } else {
+ el.removeAttribute('data-gs-min-width');
+ }
+ });
+ return this;
+ }
+
+ /**
+ * Set the maxHeight for a widget.
+ * @param el widget to modify.
+ * @param val A numeric value of the number of rows
+ */
+ public maxHeight(els: GridStackElement, val: number): GridStack {
+ if (isNaN(val)) return;
+ $(els).each((index, el) => {
+ const node = el.gridstackNode;
+ if (!node) { return; }
+ if (node.maxHeight) {
+ el.setAttribute('data-gs-max-height', val);
+ } else {
+ el.removeAttribute('data-gs-max-height');
+ }
+ });
+ return this;
+ }
+
+ /**
+ * Set the minHeight for a widget.
+ * @param el widget to modify.
+ * @param val A numeric value of the number of rows
+ */
+ public minHeight(els: GridStackElement, val: number): GridStack {
+ if (isNaN(val)) return;
+ $(els).each((index, el) => {
+ const node = el.gridstackNode;
+ if (!node) { return; }
+ if (node.minHeight) {
+ el.setAttribute('data-gs-min-height', val);
+ } else {
+ el.removeAttribute('data-gs-min-height');
+ }
+ });
+ return this;
+ }
+
+ /**
+ * Enables/Disables moving.
+ * @param el widget to modify.
+ * @param val if true widget will be draggable.
+ */
+ public movable(els: GridStackElement, val: boolean): GridStack {
+ $(els).each((index, el: GridItemHTMLElement) => {
+ const node = el.gridstackNode;
+ if (!node) { return; }
+ node.noMove = !(val || false);
+ if (node.noMove) {
+ this.dd.draggable(el, 'disable');
+ el.classList.remove('ui-draggable-handle');
+ } else {
+ this.dd.draggable(el, 'enable');
+ el.classList.remove('ui-draggable-handle');
+ }
+ });
+ return this;
+ }
+
+ /**
+ * Changes widget position
+ * @param el widget to modify
+ * @param x new position x. If value is null or undefined it will be ignored.
+ * @param y new position y. If value is null or undefined it will be ignored.
+ */
+ public move(el: GridStackElement, x: number, y: number) {
+ this._updateElement(el, (el, node) => {
+ x = (x !== null && x !== undefined) ? x : node.x;
+ y = (y !== null && y !== undefined) ? y : node.y;
+
+ this.engine.moveNode(node, x, y, node.width, node.height);
+ });
+ }
+
+ /**
+ * Event handler that extracts our CustomEvent data out automatically for receiving custom
+ * notifications (see doc for supported events)
+ * @param name of the event (see possible values) or list of names space separated
+ * @param callback function called with event and optional second/third param
+ * (see README documentation for each signature).
+ *
+ * @example
+ * grid.on('added', function(e, items) { log('added ', items)} );
+ * or
+ * grid.on('added removed change', function(e, items) { log(e.type, items)} );
+ *
+ * Note: in some cases it is the same as calling native handler and parsing the event.
+ * grid.el.addEventListener('added', function(event) { log('added ', event.detail)} );
+ */
+ public on(eventName: GridStackEvent, callback: (event: CustomEvent, arg2?: GridStackNode[] | Object, arg3?: Object) => void) {
+ if (eventName === 'change' || eventName === 'added' || eventName === 'removed' || eventName === 'enable' || eventName === 'disable') {
+ // native CustomEvent handlers - cash the generic handlers so we can remove
+ const noData = (eventName === 'enable' || eventName === 'disable');
+ this._gsEventHandler = this._gsEventHandler || {};
+ if (noData) {
+ this._gsEventHandler[eventName] = (event) => callback(event);
+ } else {
+ this._gsEventHandler[eventName] = (event) => callback(event, event.detail);
+ }
+ this.el.addEventListener(eventName, this._gsEventHandler[eventName]);
+ } else {
+ // still JQuery events
+ this.$el.on(eventName as any, callback);
+ }
+ }
+
+ /**
+ * unsubscribe from the 'on' event below
+ * @param eventName of the event (see possible values)
+ */
+ public off(eventName: GridStackEvent) {
+ if (eventName === 'change' || eventName === 'added' || eventName === 'removed' || eventName === 'enable' || eventName === 'disable') {
+ // remove native CustomEvent handlers
+ if (this._gsEventHandler && this._gsEventHandler[eventName]) {
+ this.el.removeEventListener(eventName, this._gsEventHandler[eventName]);
+ delete this._gsEventHandler[eventName];
+ }
+ } else {
+ // still JQuery events
+ this.$el.off(eventName);
+ }
+ }
+
+ /**
+ * Removes widget from the grid.
+ * @param el widget to modify
+ * @param detachNode if false DOM node won't be removed from the tree (Default? true).
+ */
+ public removeWidget(el: GridStackElement, detachNode?: boolean) {
+ const elItem = $(el).get(0) as GridItemHTMLElement;
+ detachNode = (detachNode === undefined ? true : detachNode);
+ let node = elItem.gridstackNode;
+ // For Meteor support: https://github.com/gridstack/gridstack.js/pull/272
+ if (!node) {
+ node = this.engine.nodes.find(n => el === n.el);
+ }
+ if (!node) return;
+
+ delete elItem.gridstackNode;
+ this.engine.removeNode(node, detachNode);
+ this._triggerRemoveEvent();
+ this._triggerChangeEvent();
+ }
+
+ /**
+ * Removes all widgets from the grid.
+ * @param detachNode if false DOM nodes won't be removed from the tree (Default? true).
+ */
+ public removeAll(detachNode?: boolean) {
+ if (detachNode !== false) {
+ // remove our data structure before list gets emptied and DOM elements stay behind
+ this.engine.nodes.forEach(n => delete n.el.gridstackNode);
+ }
+ this.engine.removeAll(detachNode);
+ this._triggerRemoveEvent();
+ }
+
+ /**
+ * Changes widget size
+ * @param el widget to modify
+ * @param width new dimensions width. If value is null or undefined it will be ignored.
+ * @param height new dimensions height. If value is null or undefined it will be ignored.
+ */
+ public resize(el: GridStackElement, width: number, height: number) {
+ this._updateElement(el, (el, node) => {
+ width = (width !== null && width !== undefined) ? width : node.width;
+ height = (height !== null && height !== undefined) ? height : node.height;
+
+ this.engine.moveNode(node, node.x, node.y, width, height);
+ });
+ }
+
+ /**
+ * Enables/Disables resizing.
+ * @param el widget to modify
+ * @param val if true widget will be resizable.
+ */
+ public resizable(els: GridStackElement, val: boolean): GridStack {
+ $(els).each((index, el: GridItemHTMLElement) => {
+ const node = el.gridstackNode;
+ if (!node) { return; }
+ node.noResize = !(val || false);
+ if (node.noResize) {
+ this.dd.resizable(el, 'disable');
+ } else {
+ this.dd.resizable(el, 'enable');
+ }
+ });
+ return this;
+ }
+
+ /**
+ * Toggle the grid animation state. Toggles the `grid-stack-animate` class.
+ * @param doAnimate if true the grid will animate.
+ */
+ public setAnimation(doAnimate: boolean) {
+ if (doAnimate) {
+ this.$el.addClass('grid-stack-animate');
+ } else {
+ this.$el.removeClass('grid-stack-animate');
+ }
+ }
+
+ /**
+ * Toggle the grid static state. Also toggle the grid-stack-static class.
+ * @param staticValue if true the grid become static.
+ */
+ public setStatic(staticValue: boolean) {
+ this.opts.staticGrid = (staticValue === true);
+ this.enableMove(!staticValue);
+ this.enableResize(!staticValue);
+ this._setStaticClass();
+ }
+
+ /**
+ * Updates widget position/size.
+ * @param el widget to modify
+ * @param x new position x. If value is null or undefined it will be ignored.
+ * @param y new position y. If value is null or undefined it will be ignored.
+ * @param width new dimensions width. If value is null or undefined it will be ignored.
+ * @param height new dimensions height. If value is null or undefined it will be ignored.
+ */
+ public update(el: GridStackElement, x: number, y: number, width: number, height: number) {
+ this._updateElement(el, (el, node) => {
+ x = (x !== null && x !== undefined) ? x : node.x;
+ y = (y !== null && y !== undefined) ? y : node.y;
+ width = (width !== null && width !== undefined) ? width : node.width;
+ height = (height !== null && height !== undefined) ? height : node.height;
+
+ this.engine.moveNode(node, x, y, width, height);
+ });
+ }
+
+ /**
+ * Updates the vertical margin - see `GridstackOptions.verticalMargin` for format options.
+ *
+ * @param value new vertical margin value
+ * @param noUpdate (optional) if true, styles will not be updated
+ */
+ public verticalMargin(value: numberOrString, noUpdate?: boolean) {
+ const heightData = Utils.parseHeight(value);
+
+ if (this.opts.verticalMarginUnit === heightData.unit && this.opts.maxRow === heightData.height) {
+ return ;
+ }
+ this.opts.verticalMarginUnit = heightData.unit;
+ this.opts.verticalMargin = heightData.height;
+
+ if (!noUpdate) {
+ this._updateStyles();
+ }
+ }
+
+ /**
+ * returns current vertical margin value
+ */
+ public getVerticalMargin(): number { return this.opts.verticalMargin as number; }
+
+ /**
+ * Returns true if the height of the grid will be less the vertical
+ * constraint. Always returns true if grid doesn't have height constraint.
+ * @param x new position x. If value is null or undefined it will be ignored.
+ * @param y new position y. If value is null or undefined it will be ignored.
+ * @param width new dimensions width. If value is null or undefined it will be ignored.
+ * @param height new dimensions height. If value is null or undefined it will be ignored.
+ * @param autoPosition if true then x, y parameters will be ignored and widget
+ * will be places on the first available position
+ *
+ * @example
+ * if (grid.willItFit(newNode.x, newNode.y, newNode.width, newNode.height, true)) {
+ * grid.addWidget(newNode.el, newNode.x, newNode.y, newNode.width, newNode.height, true);
+ * } else {
+ * alert('Not enough free space to place the widget');
+ * }
+ */
+ public willItFit(x: number, y: number, width: number, height: number, autoPosition: boolean): boolean {
+ const node = {x: x, y: y, width: width, height: height, autoPosition: autoPosition};
+ return this.engine.canBePlacedWithRespectToHeight(node);
+ }
+
+ private _triggerChangeEvent(skipLayoutChange?: boolean) {
+ if (this.engine.batchMode) { return; }
+ const elements = this.engine.getDirtyNodes(true); // verify they really changed
+ if (elements && elements.length) {
+ if (!skipLayoutChange) {
+ this.engine._layoutsNodesChange(elements);
+ }
+ this._triggerEvent('change', elements);
+ }
+ this.engine._saveInitial(); // we called, now reset initial values & dirty flags
+ }
+
+ private _triggerAddEvent() {
+ if (this.engine.batchMode) { return; }
+ if (this.engine.addedNodes && this.engine.addedNodes.length > 0) {
+ this.engine._layoutsNodesChange(this.engine.addedNodes);
+ // prevent added nodes from also triggering 'change' event (which is called next)
+ this.engine.addedNodes.forEach(n => { delete n._dirty; });
+ this._triggerEvent('added', this.engine.addedNodes);
+ this.engine.addedNodes = [];
+ }
+ }
+
+ private _triggerRemoveEvent() {
+ if (this.engine.batchMode) { return; }
+ if (this.engine.removedNodes && this.engine.removedNodes.length > 0) {
+ this._triggerEvent('removed', this.engine.removedNodes);
+ this.engine.removedNodes = [];
+ }
+ }
+
+ private _triggerEvent(name: string, data?: any) {
+ const event = data ? new CustomEvent(name, {bubbles: false, detail: data}) : new Event(name);
+ this.el.dispatchEvent(event);
+ }
+
+ private _initStyles() {
+ if (this._stylesId) {
+ Utils.removeStylesheet(this._stylesId);
+ }
+ this._stylesId = 'gridstack-style-' + (Math.random() * 100000).toFixed();
+ // insert style to parent (instead of 'head') to support WebComponent
+ const parent = this.el.parentNode as HTMLElement;
+ this._styles = Utils.createStylesheet(this._stylesId, parent);
+ if (this._styles !== null) {
+ this._styles._max = 0;
+ }
+ }
+
+ private _updateStyles(maxHeight?: number) {
+ if (this._styles === null || this._styles === undefined) {
+ return;
+ }
+
+ const prefix = '.' + this.opts._class + ' .' + this.opts.itemClass;
+ let getHeight;
+
+ if (maxHeight === undefined) {
+ maxHeight = this._styles._max;
+ }
+
+ this._initStyles();
+ this._updateContainerHeight();
+ if (!this.opts.cellHeight) { // The rest will be handled by CSS
+ return ;
+ }
+ if (this._styles._max !== 0 && maxHeight <= this._styles._max) { // Keep it increasing
+ return ;
+ }
+ const height = this.opts.cellHeight as number;
+ const margin = this.opts.verticalMargin as number;
+
+ if (!this.opts.verticalMargin || this.opts.cellHeightUnit === this.opts.verticalMarginUnit) {
+ getHeight = (nbRows, nbMargins) => {
+ return (height * nbRows + margin * nbMargins) + this.opts.cellHeightUnit;
+ }
+ } else {
+ getHeight = (nbRows, nbMargins) => {
+ if (!nbRows || !nbMargins) {
+ return (height * nbRows + margin * nbMargins) + this.opts.cellHeightUnit;
+ }
+ return 'calc(' + ((height * nbRows) + this.opts.cellHeightUnit) + ' + ' +
+ ((margin * nbMargins) + this.opts.verticalMarginUnit) + ')';
+ }
+ }
+
+ if (this._styles._max === 0) {
+ Utils.insertCSSRule(this._styles, prefix, 'min-height: ' + getHeight(1, 0) + ';', 0);
+ }
+
+ if (maxHeight > this._styles._max) {
+ for (var i = this._styles._max; i < maxHeight; ++i) {
+ Utils.insertCSSRule(this._styles,
+ prefix + '[data-gs-height="' + (i + 1) + '"]',
+ 'height: ' + getHeight(i + 1, i) + ';',
+ i
+ );
+ Utils.insertCSSRule(this._styles,
+ prefix + '[data-gs-min-height="' + (i + 1) + '"]',
+ 'min-height: ' + getHeight(i + 1, i) + ';',
+ i
+ );
+ Utils.insertCSSRule(this._styles,
+ prefix + '[data-gs-max-height="' + (i + 1) + '"]',
+ 'max-height: ' + getHeight(i + 1, i) + ';',
+ i
+ );
+ Utils.insertCSSRule(this._styles,
+ prefix + '[data-gs-y="' + i + '"]',
+ 'top: ' + getHeight(i, i) + ';',
+ i
+ );
+ }
+ this._styles._max = maxHeight;
+ }
+ }
+
+ private _updateContainerHeight() {
+ if (this.engine.batchMode) { return; }
+ let row = this.engine.getRow();
+ if (row < this.opts.minRow) {
+ row = this.opts.minRow;
+ }
+ // check for css min height. Each row is cellHeight + verticalMargin, until last one which has no margin below
+ const cssMinHeight = parseInt(this.$el.css('min-height'));
+ if (cssMinHeight > 0) {
+ const verticalMargin = this.opts.verticalMargin as number;
+ const minRow = Math.round((cssMinHeight + verticalMargin) / (this.getCellHeight() + verticalMargin));
+ if (row < minRow) {
+ row = minRow;
+ }
+ }
+ this.$el.attr('data-gs-current-row', row);
+ if (!this.opts.cellHeight) {
+ return ;
+ }
+ if (!this.opts.verticalMargin) {
+ this.$el.css('height', (row * (this.opts.cellHeight as number)) + this.opts.cellHeightUnit);
+ } else if (this.opts.cellHeightUnit === this.opts.verticalMarginUnit) {
+ this.$el.css('height', (row * ((this.opts.cellHeight as number) + (this.opts.verticalMargin as number)) -
+ (this.opts.verticalMargin as number)) + this.opts.cellHeightUnit);
+ } else {
+ this.$el.css('height', 'calc(' + ((row * (this.opts.cellHeight as number)) + this.opts.cellHeightUnit) +
+ ' + ' + ((row * ((this.opts.verticalMargin as number) - 1)) + this.opts.verticalMarginUnit) + ')');
+ }
+ }
+
+ private _setupRemovingTimeout(el) {
+ const node = $(el).get(0).gridstackNode;
+ if (node._removeTimeout || !this.opts.removable) { return; }
+ node._removeTimeout = setTimeout(() => {
+ el.addClass('grid-stack-item-removing');
+ node._isAboutToRemove = true;
+ }, this.opts.removeTimeout);
+ }
+
+ private _clearRemovingTimeout(el) {
+ const node = $(el).get(0).gridstackNode;
+
+ if (!node._removeTimeout) {
+ return;
+ }
+ clearTimeout(node._removeTimeout);
+ node._removeTimeout = null;
+ el.removeClass('grid-stack-item-removing');
+ node._isAboutToRemove = false;
+ }
+
+ /**
+ * prepares the element for drag&drop
+ **/
+ private _prepareElementsByNode(el, node) {
+ el = $(el)
+
+ // variables used/cashed between the 3 start/move/end methods, in addition to node passed above
+ let cellWidth;
+ let cellFullHeight; // internal cellHeight + v-margin
+ const self = this;
+
+ /** called when item starts moving/resizing */
+ const onStartMoving = function(event, ui) {
+ self.$el.append(self.$placeholder);
+ self.engine.cleanNodes();
+ self.engine.beginUpdate(node);
+ cellWidth = self.cellWidth();
+ const strictCellHeight = self.getCellHeight(); // heigh without v-margin
+ // compute height with v-margin (Note: we add 1 margin as last row is missing it)
+ cellFullHeight = (self.$el.height() + self.getVerticalMargin()) / parseInt(self.$el.attr('data-gs-current-row'));
+ const o = $(this);
+ self.$placeholder
+ .attr('data-gs-x', o.attr('data-gs-x'))
+ .attr('data-gs-y', o.attr('data-gs-y'))
+ .attr('data-gs-width', o.attr('data-gs-width'))
+ .attr('data-gs-height', o.attr('data-gs-height'))
+ .show();
+ node.el = self.$placeholder.get(0);
+ node._beforeDragX = node.x;
+ node._beforeDragY = node.y;
+ node._prevYPix = ui.position.top;
+ const minHeight = (node.minHeight || 1);
+ const verticalMargin = self.opts.verticalMargin as number;
+
+ // mineHeight - Each row is cellHeight + verticalMargin, until last one which has no margin below
+ self.dd.resizable(el, 'option', 'minWidth', cellWidth * (node.minWidth || 1));
+ self.dd.resizable(el, 'option', 'minHeight', (strictCellHeight * minHeight) + (minHeight - 1) * verticalMargin);
+
+ if (event.type === 'resizestart') {
+ o.find('.grid-stack-item').trigger('resizestart');
+ }
+ }
+
+ /** called when item is being dragged/resized */
+ const dragOrResize = function(event, ui) {
+ let x = Math.round(ui.position.left / cellWidth);
+ let y = Math.floor((ui.position.top + cellFullHeight / 2) / cellFullHeight);
+ let width;
+ let height;
+
+ if (event.type === 'drag') {
+ const distance = ui.position.top - node._prevYPix;
+ node._prevYPix = ui.position.top;
+ Utils.updateScrollPosition(el[0], ui, distance);
+ if (el.data('inTrashZone') || x < 0 || x >= self.engine.column || y < 0 ||
+ (!self.engine.float && y > self.engine.getRow())) {
+ if (!node._temporaryRemoved) {
+ if (self.opts.removable === true) {
+ self._setupRemovingTimeout(el);
+ }
+
+ x = node._beforeDragX;
+ y = node._beforeDragY;
+
+ self.$placeholder.detach();
+ self.$placeholder.hide();
+ self.engine.removeNode(node);
+ self._updateContainerHeight();
+
+ node._temporaryRemoved = true;
+ } else {
+ return;
+ }
+ } else {
+ self._clearRemovingTimeout(el);
+
+ if (node._temporaryRemoved) {
+ self.engine.addNode(node);
+ self.$placeholder
+ .attr('data-gs-x', x)
+ .attr('data-gs-y', y)
+ .attr('data-gs-width', width)
+ .attr('data-gs-height', height)
+ .show();
+ self.$el.append(self.$placeholder);
+ node.el = self.$placeholder.get(0);
+ node._temporaryRemoved = false;
+ }
+ }
+ } else if (event.type === 'resize') {
+ if (x < 0) return;
+ width = Math.round(ui.size.width / cellWidth);
+ height = Math.round((ui.size.height + self.getVerticalMargin()) / cellFullHeight);
+ }
+ // width and height are undefined if not resizing
+ const _lastTriedWidth = width !== undefined ? width : node._lastTriedWidth;
+ const _lastTriedHeight = height !== undefined ? height : node._lastTriedHeight;
+ if (!self.engine.canMoveNode(node, x, y, width, height) ||
+ (node._lastTriedX === x && node._lastTriedY === y &&
+ node._lastTriedWidth === _lastTriedWidth && node._lastTriedHeight === _lastTriedHeight)) {
+ return;
+ }
+ node._lastTriedX = x;
+ node._lastTriedY = y;
+ node._lastTriedWidth = width;
+ node._lastTriedHeight = height;
+ self.engine.moveNode(node, x, y, width, height);
+ self._updateContainerHeight();
+
+ if (event.type === 'resize') {
+ $(event.target).trigger('gsresize', node);
+ }
+ }
+
+ /** called when the item stops moving/resizing */
+ const onEndMoving = function(event, ui) {
+ const o = $(this);
+ if (!o.get(0).gridstackNode) {
+ return;
+ }
+
+ // const forceNotify = false; what is the point of calling 'change' event with no data, when the 'removed' event is already called ?
+ self.$placeholder.detach();
+ node.el = o.get(0);
+ self.$placeholder.hide();
+
+ if (node._isAboutToRemove) {
+ // forceNotify = true;
+ const gridToNotify = el.get(0).gridstackNode._grid;
+ gridToNotify._triggerRemoveEvent();
+ delete el.get(0).gridstackNode;
+ el.remove();
+ } else {
+ self._clearRemovingTimeout(el);
+ if (!node._temporaryRemoved) {
+ Utils.removePositioningStyles(o);
+ o
+ .attr('data-gs-x', node.x)
+ .attr('data-gs-y', node.y)
+ .attr('data-gs-width', node.width)
+ .attr('data-gs-height', node.height);
+ } else {
+ Utils.removePositioningStyles(o);
+ o
+ .attr('data-gs-x', node._beforeDragX)
+ .attr('data-gs-y', node._beforeDragY)
+ .attr('data-gs-width', node.width)
+ .attr('data-gs-height', node.height);
+ node.x = node._beforeDragX;
+ node.y = node._beforeDragY;
+ node._temporaryRemoved = false;
+ self.engine.addNode(node);
+ }
+ }
+ self._updateContainerHeight();
+ self._triggerChangeEvent();
+
+ self.engine.endUpdate();
+
+ const nestedGrids = o.find('.grid-stack');
+ if (nestedGrids.length && event.type === 'resizestop') {
+ nestedGrids.each((index, el) => {
+ el.gridstack.onResizeHandler();
+ });
+ o.find('.grid-stack-item').trigger('resizestop');
+ o.find('.grid-stack-item').trigger('gsresizestop');
+ }
+ if (event.type === 'resizestop') {
+ self.$el.trigger('gsresizestop', o);
+ }
+ }
+
+ this.dd
+ .draggable(el, {
+ start: onStartMoving,
+ stop: onEndMoving,
+ drag: dragOrResize
+ })
+ .resizable(el, {
+ start: onStartMoving,
+ stop: onEndMoving,
+ resize: dragOrResize
+ });
+
+ if (node.noMove || this.opts.disableDrag || this.opts.staticGrid) {
+ this.dd.draggable(el, 'disable');
+ }
+ if (node.noResize || this.opts.disableResize || this.opts.staticGrid) {
+ this.dd.resizable(el, 'disable');
+ }
+ this._writeAttr(el, node);
+ }
+
+ private _prepareElement(el, triggerAddEvent?: boolean) {
+ triggerAddEvent = triggerAddEvent !== undefined ? triggerAddEvent : false;
+ el = $(el);
+
+ el.addClass(this.opts.itemClass);
+ let node = this._readAttr(el, {el: el.get(0), _grid: this});
+ node = this.engine.addNode(node, triggerAddEvent);
+ el.get(0).gridstackNode = node;
+
+ this._prepareElementsByNode(el, node);
+ }
+
+ /** call to write any default attributes back to element */
+ private _writeAttr(el, node) {
+ const $el = $(el);
+ node = node || {}
+ // Note: passing null removes the attr in jquery
+ if (node.x !== undefined) { el.attr('data-gs-x', node.x); }
+ if (node.y !== undefined) { el.attr('data-gs-y', node.y); }
+ if (node.width !== undefined) { el.attr('data-gs-width', node.width); }
+ if (node.height !== undefined) { el.attr('data-gs-height', node.height); }
+ if (node.autoPosition !== undefined) { el.attr('data-gs-auto-position', node.autoPosition ? true : null); }
+ if (node.minWidth !== undefined) { el.attr('data-gs-min-width', node.minWidth); }
+ if (node.maxWidth !== undefined) { el.attr('data-gs-max-width', node.maxWidth); }
+ if (node.minHeight !== undefined) { el.attr('data-gs-min-height', node.minHeight); }
+ if (node.maxHeight !== undefined) { el.attr('data-gs-max-height', node.maxHeight); }
+ if (node.noResize !== undefined) { el.attr('data-gs-no-resize', node.noResize ? true : null); }
+ if (node.noMove !== undefined) { el.attr('data-gs-no-move', node.noMove ? true : null); }
+ if (node.locked !== undefined) { el.attr('data-gs-locked', node.locked ? true : null); }
+ if (node.resizeHandles !== undefined) { el.attr('data-gs-resize-handles', node.resizeHandles); }
+ if (node.id !== undefined) { el.attr('data-gs-id', node.id); }
+ }
+
+ /** call to write any default attributes back to element */
+ private _readAttr(el, node) {
+ const $el = $(el);
+ node = node || {};
+ node.x = el.attr('data-gs-x');
+ node.y = el.attr('data-gs-y');
+ node.width = el.attr('data-gs-width');
+ node.height = el.attr('data-gs-height');
+ node.autoPosition = Utils.toBool(el.attr('data-gs-auto-position'));
+ node.maxWidth = el.attr('data-gs-max-width');
+ node.minWidth = el.attr('data-gs-min-width');
+ node.maxHeight = el.attr('data-gs-max-height');
+ node.minHeight = el.attr('data-gs-min-height');
+ node.noResize = Utils.toBool(el.attr('data-gs-no-resize'));
+ node.noMove = Utils.toBool(el.attr('data-gs-no-move'));
+ node.locked = Utils.toBool(el.attr('data-gs-locked'));
+ node.resizeHandles = el.attr('data-gs-resize-handles');
+ node.id = el.attr('data-gs-id');
+ return node;
+ }
+
+ private _updateElement(el, callback) {
+ el = $(el).first();
+ const node = el.gridstackNode;
+ if (!node) { return; }
+
+ this.engine.cleanNodes();
+ this.engine.beginUpdate(node);
+
+ callback.call(this, el, node);
+
+ this._updateContainerHeight();
+ this._triggerChangeEvent();
+
+ this.engine.endUpdate();
+ }
+
+ private _setStaticClass() {
+ const staticClassName = 'grid-stack-static';
+
+ if (this.opts.staticGrid === true) {
+ this.$el.addClass(staticClassName);
+ } else {
+ this.$el.removeClass(staticClassName);
+ }
+ }
+
+ /**
+ * called when we are being resized - check if the one Column Mode needs to be turned on/off
+ * and remember the prev columns we used.
+ */
+ private onResizeHandler() {
+ if (this.isAutoCellHeight) {
+ Utils.throttle(() => { this.cellHeight(this.cellWidth(), false)}, 100);
+ }
+
+ if (this.opts.staticGrid) { return; }
+
+ if (!this.opts.disableOneColumnMode &&
+ (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) <= this.opts.minWidth) {
+ if (this.oneColumnMode) { return; }
+ this.oneColumnMode = true;
+ this.column(1);
+ } else {
+ if (!this.oneColumnMode) { return; }
+ this.oneColumnMode = false;
+ this.column(this._prevColumn);
+ }
+ }
+
+ /** called to add drag over support to support widgets*/
+ private setupAcceptWidget() {
+ if (this.opts.staticGrid || !this.opts.acceptWidgets) return;
+
+ // vars used by the function callback
+ let draggingElement = null;
+ const self = this;
+
+ const onDrag = function(event, ui) {
+ const el = draggingElement;
+ const node = el.get(0).gridstackNode;
+ const pos = this.getCellFromPixel({left: event.pageX, top: event.pageY}, true);
+ const x = Math.max(0, pos.x);
+ const y = Math.max(0, pos.y);
+ if (!node._added) {
+ node._added = true;
+
+ node.el = el.get(0);
+ node.autoPosition = true;
+ node.x = x;
+ node.y = y;
+ this.engine.cleanNodes();
+ this.engine.beginUpdate(node);
+ this.engine.addNode(node);
+
+ this.$el.append(self.$placeholder);
+ self.$placeholder
+ .attr('data-gs-x', node.x)
+ .attr('data-gs-y', node.y)
+ .attr('data-gs-width', node.width)
+ .attr('data-gs-height', node.height)
+ .show();
+ node.el = self.$placeholder.get(0);
+ node._beforeDragX = node.x;
+ node._beforeDragY = node.y;
+
+ self._updateContainerHeight();
+ }
+ if (!self.engine.canMoveNode(node, x, y)) {
+ return;
+ }
+ self.engine.moveNode(node, x, y);
+ self._updateContainerHeight();
+ };
+
+ this.dd
+ .droppable(this.el, {
+ accept: el => {
+ el = $(el);
+ const node = el.get(0).gridstackNode;
+ if (node && node._grid === this) {
+ return false;
+ }
+ return el.is(this.opts.acceptWidgets === true ? '.grid-stack-item' : this.opts.acceptWidgets);
+ }
+ })
+ .on(this.el, 'dropover', (event, ui) => {
+ const el = $(ui.draggable);
+ let width, height;
+
+ // see if we already have a node with widget/height and check for attributes
+ let origNode = el.get(0).gridstackNode;
+ if (!origNode || !origNode.width || !origNode.height) {
+ const w = parseInt(el.attr('data-gs-width'));
+ if (w > 0) { origNode = origNode || {}; origNode.width = w; }
+ const h = parseInt(el.attr('data-gs-height'));
+ if (h > 0) { origNode = origNode || {}; origNode.height = h; }
+ }
+
+ // if not calculate the grid size based on element outer size
+ // height: Each row is cellHeight + verticalMargin, until last one which has no margin below
+ const cellWidth = this.cellWidth();
+ const cellHeight = this.getCellHeight();
+ const verticalMargin = this.opts.verticalMargin as number;
+ width = origNode && origNode.width ? origNode.width : Math.ceil(el.outerWidth() / cellWidth);
+ height = origNode && origNode.height ? origNode.height : Math.round((el.outerHeight() + verticalMargin) / (cellHeight + verticalMargin));
+
+ draggingElement = el;
+
+ const node = this.engine._prepareNode({width: width, height: height, _added: false, _temporary: true});
+ node._isOutOfGrid = true;
+ el.get(0).gridstackNode = node;
+ el.get(0)._gridstackNodeOrig = origNode;
+
+ el.on('drag', onDrag);
+ return false; // prevent parent from receiving msg (which may be grid as well)
+ })
+ .on(this.el, 'dropout', (event, ui) => {
+ // jquery-ui bug. Must verify widget is being dropped out
+ // check node variable that gets set when widget is out of grid
+ const el = $(ui.draggable);
+ const node = el.get(0).gridstackNode;
+ if (!node || !node._isOutOfGrid) {
+ return;
+ }
+ el.unbind('drag', onDrag);
+ node.el = null;
+ this.engine.removeNode(node);
+ this.$placeholder.detach();
+ this._updateContainerHeight();
+ el.get(0).gridstackNode = el.get(0)._gridstackNodeOrig;
+ return false; // prevent parent from receiving msg (which may be grid as well)
+ })
+ .on(this.el, 'drop', (event, ui) => {
+ this.$placeholder.detach();
+
+ const node = $(ui.draggable).get(0).gridstackNode;
+ delete node._isOutOfGrid;
+ node._grid = this;
+ const el = $(ui.draggable).clone(false);
+ el.get(0).gridstackNode = node;
+ const originalNode = $(ui.draggable).get(0)._gridstackNodeOrig;
+ if (originalNode !== undefined && originalNode._grid !== undefined) {
+ originalNode._grid._triggerRemoveEvent();
+ }
+ $(ui.helper).remove();
+ node.el = el.get(0);
+ this.$placeholder.hide();
+ Utils.removePositioningStyles(el);
+ el.find('div.ui-resizable-handle').remove();
+
+ el
+ .attr('data-gs-x', node.x)
+ .attr('data-gs-y', node.y)
+ .attr('data-gs-width', node.width)
+ .attr('data-gs-height', node.height)
+ .addClass(this.opts.itemClass)
+ .enableSelection()
+ .removeData('draggable')
+ .removeClass('ui-draggable ui-draggable-dragging ui-draggable-disabled')
+ .unbind('drag', onDrag);
+ this.$el.append(el);
+ this._prepareElementsByNode(el, node);
+ this._updateContainerHeight();
+ this.engine.addedNodes.push(node);
+ this._triggerAddEvent();
+ this._triggerChangeEvent();
+
+ this.engine.endUpdate();
+ $(ui.draggable).unbind('drag', onDrag);
+ delete $(ui.draggable).get(0).gridstackNode;
+ delete $(ui.draggable).get(0)._gridstackNodeOrig;
+ this.$el.trigger('dropped', [originalNode, node]);
+ return false; // prevent parent from receiving msg (which may be grid as well)
+ });
+ }
+
+ // legacy method renames
+ private setGridWidth = obsolete(GridStack.prototype.column, 'setGridWidth', 'column', 'v0.5.3');
+ private setColumn = obsolete(GridStack.prototype.column, 'setColumn', 'column', 'v0.6.4');
+}
diff --git a/src/index.ts b/src/index.ts
new file mode 100644
index 000000000..e1bcaae19
--- /dev/null
+++ b/src/index.ts
@@ -0,0 +1,13 @@
+// index.ts 2.0.0-rc @preserve
+
+/**
+ * The package's root file. Exports all exported classes.
+ */
+import './gridstack-poly.js';
+
+export * from './types';
+export * from './utils';
+export * from './gridstack-engine';
+export * from './gridstack-dragdrop-plugin';
+export * from './gridstack';
+export * from './jqueryui-gridstack-dragdrop-plugin';
diff --git a/src/jquery-ui.js b/src/jquery-ui.js
index 68b416b22..4030bdfb9 100644
--- a/src/jquery-ui.js
+++ b/src/jquery-ui.js
@@ -1,7 +1,8 @@
/*! jQuery UI - v1.12.1 - 2019-11-20
* http://jqueryui.com
* Includes: widget.js, data.js, disable-selection.js, scroll-parent.js, widgets/draggable.js, widgets/droppable.js, widgets/resizable.js, widgets/mouse.js
-* Copyright jQuery Foundation and other contributors; Licensed MIT @preserve*/
+* Copyright jQuery Foundation and other contributors; Licensed MIT
+*/
(function( factory ) {
/* [alain] we compile this in so no need to load with AMD
@@ -21,7 +22,7 @@ $.ui = $.ui || {};
var version = $.ui.version = "1.12.1";
-/*!
+/*
* jQuery UI Widget 1.12.1
* http://jqueryui.com
*
@@ -744,7 +745,7 @@ $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
var widget = $.widget;
-/*!
+/*
* jQuery UI :data 1.12.1
* http://jqueryui.com
*
@@ -773,7 +774,7 @@ var data = $.extend( $.expr[ ":" ], {
}
} );
-/*!
+/*
* jQuery UI Disable Selection 1.12.1
* http://jqueryui.com
*
@@ -809,7 +810,7 @@ var disableSelection = $.fn.extend( {
} );
-/*!
+/*
* jQuery UI Scroll Parent 1.12.1
* http://jqueryui.com
*
@@ -849,7 +850,7 @@ var scrollParent = $.fn.scrollParent = function( includeHidden ) {
// This file is deprecated
var ie = $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
-/*!
+/*
* jQuery UI Mouse 1.12.1
* http://jqueryui.com
*
@@ -1135,7 +1136,7 @@ var safeBlur = $.ui.safeBlur = function( element ) {
};
-/*!
+/*
* jQuery UI Draggable 1.12.1
* http://jqueryui.com
*
@@ -2365,7 +2366,7 @@ $.ui.plugin.add( "draggable", "zIndex", {
var widgetsDraggable = $.ui.draggable;
-/*!
+/*
* jQuery UI Droppable 1.12.1
* http://jqueryui.com
*
@@ -2846,7 +2847,7 @@ if ( $.uiBackCompat !== false ) {
var widgetsDroppable = $.ui.droppable;
-/*!
+/*
* jQuery UI Resizable 1.12.1
* http://jqueryui.com
*
diff --git a/src/jqueryui-gridstack-dragdrop-plugin.ts b/src/jqueryui-gridstack-dragdrop-plugin.ts
new file mode 100644
index 000000000..58eeb236c
--- /dev/null
+++ b/src/jqueryui-gridstack-dragdrop-plugin.ts
@@ -0,0 +1,91 @@
+// jqueryui-gridstack-dragdrop-plugin.ts 2.0.0-rc @preserve
+
+/** JQuery UI Drag&Drop plugin
+ * https://gridstackjs.com/
+ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov
+ * gridstack.js may be freely distributed under the MIT license.
+*/
+
+import { GridStack } from './gridstack';
+import { GridStackDragDropPlugin, DDOpts, DDKey } from './gridstack-dragdrop-plugin';
+import { GridStackElement } from './types';
+
+// TODO: TEMPORARY until can remove jquery-ui drag&drop and this class!
+// see https://stackoverflow.com/questions/35345760/importing-jqueryui-with-typescript-and-requirejs
+import * as $ from './jquery.js';
+import './jquery-ui.js';
+
+/**
+ * Jquery-ui based drag'n'drop plugin.
+ */
+export class JQueryUIGridStackDragDropPlugin extends GridStackDragDropPlugin {
+ public constructor(grid: GridStack) {
+ super(grid);
+ }
+
+ public resizable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin {
+ const $el = $(el);
+ if (opts === 'disable' || opts === 'enable') {
+ $el.resizable(opts);
+ } else if (opts === 'option') {
+ $el.resizable(opts, key, value);
+ } else {
+ const handles = $el.data('gs-resize-handles') ? $el.data('gs-resize-handles') : this.grid.opts.resizable.handles;
+ $el.resizable({...this.grid.opts.resizable, ...{handles: handles}, ...{ // was using $.extend()
+ start: opts.start || function() {},
+ stop: opts.stop || function() {},
+ resize: opts.resize || function() {}
+ }});
+ }
+ return this;
+ };
+
+ public draggable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin {
+ const $el = $(el);
+ if (opts === 'disable' || opts === 'enable') {
+ $el.draggable(opts);
+ } else {
+ $el.draggable({...this.grid.opts.draggable, ...{ // was using $.extend()
+ containment: (this.grid.opts._isNested && !this.grid.opts.dragOut) ?
+ $(this.grid.el).parent() : (this.grid.opts.draggable.containment || null),
+ start: opts.start || function() {},
+ stop: opts.stop || function() {},
+ drag: opts.drag || function() {}
+ }});
+ }
+ return this;
+ };
+
+ public droppable(el: GridStackElement, opts: DDOpts, key?: DDKey, value?): GridStackDragDropPlugin {
+ const $el = $(el);
+ $el.droppable(opts);
+ return this;
+ };
+
+ public isDroppable(el: GridStackElement): boolean {
+ const $el = $(el);
+ return Boolean($el.data('droppable'));
+ };
+
+ public on(el: GridStackElement, eventName: string, callback): GridStackDragDropPlugin {
+ $(el).on(eventName, callback);
+ return this;
+ };
+}
+
+// finally register ourself
+GridStackDragDropPlugin.registerPlugin(JQueryUIGridStackDragDropPlugin);
+
+/* OLD code for reference
+function JQueryUIGridStackDragDropPlugin(grid) {
+ GridStack.DragDropPlugin.call(this, grid);
+}
+
+GridStack.DragDropPlugin.registerPlugin(JQueryUIGridStackDragDropPlugin);
+
+JQueryUIGridStackDragDropPlugin.prototype = Object.create(GridStack.DragDropPlugin.prototype);
+JQueryUIGridStackDragDropPlugin.prototype.constructor = JQueryUIGridStackDragDropPlugin;
+....
+scope.JQueryUIGridStackDragDropPlugin = JQueryUIGridStackDragDropPlugin;
+return JQueryUIGridStackDragDropPlugin;
+*/
\ No newline at end of file
diff --git a/src/types.ts b/src/types.ts
new file mode 100644
index 000000000..cb5081db8
--- /dev/null
+++ b/src/types.ts
@@ -0,0 +1,212 @@
+// types.ts 2.0.0-rc @preserve
+
+/**
+ * https://gridstackjs.com/
+ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov
+ * gridstack.js may be freely distributed under the MIT license.
+*/
+
+export type numberOrString = number | string;
+export type GridStackElement = string | HTMLElement | GridItemHTMLElement;
+export interface GridItemHTMLElement extends HTMLElement {
+ gridstackNode?: GridStackNode; // grid items point back to node
+ /** @internal */
+ _gridstackNodeOrig?: GridStackNode;
+}
+
+/**
+ * Defines the options for a Grid
+ */
+export interface GridstackOptions {
+ /**
+ * accept widgets dragged from other grids or from outside (default: `false`). Can be:
+ * `true` (uses `'.grid-stack-item'` class filter) or `false`,
+ * string for explicit class name,
+ * function returning a boolean. See [example](http://gridstack.github.io/gridstack.js/demo/two.html)
+ */
+ acceptWidgets?: boolean | string | ((i: number, element: Element) => boolean);
+
+ /** if true the resizing handles are shown even if the user is not hovering over the widget (default?: false) */
+ alwaysShowResizeHandle?: boolean;
+
+ /** turns animation on (default?: true) */
+ animate?: boolean;
+
+ /** if false gridstack will not initialize existing items (default?: true) */
+ auto?: boolean;
+
+ /**
+ * one cell height (default?: 60). Can be:
+ * an integer (px)
+ * a string (ex: '100px', '10em', '10rem', '10%')
+ * 0 or null, in which case the library will not generate styles for rows. Everything must be defined in CSS files.
+ * 'auto' - height will be calculated to match cell width (initial square grid).
+ */
+ cellHeight?: numberOrString;
+
+ /** (internal) unit for cellHeight (default? 'px') which is set when a string cellHeight with a unit is passed (ex: '10rem') */
+ cellHeightUnit?: string;
+
+ /** number of columns (default?: 12). Note: IF you change this, CSS also have to change. See https://github.com/gridstack/gridstack.js#change-grid-columns */
+ column?: number;
+
+ /** class that implement drag'n'drop functionality for gridstack. If false grid will be static.
+ * (default?: null - first available plugin will be used)
+ */
+ ddPlugin?: false | null | any;
+
+ /** disallows dragging of widgets (default?: false) */
+ disableDrag?: boolean;
+
+ /** disables the onColumnMode when the window width is less than minWidth (default?: false) */
+ disableOneColumnMode?: boolean;
+
+ /** disallows resizing of widgets (default?: false). */
+ disableResize?: boolean;
+
+ /** allows to override UI draggable options. (default?: { handle?: '.grid-stack-item-content', scroll?: true, appendTo?: 'body', containment: null }) */
+ draggable?: {} | any;
+
+ /** let user drag nested grid items out of a parent or not (default false) */
+ dragOut?: boolean;
+
+ /** enable floating widgets (default?: false) See example (http://gridstack.github.io/gridstack.js/demo/float.html) */
+ float?: boolean;
+
+ /** draggable handle selector (default?: '.grid-stack-item-content') */
+ handle?: string;
+
+ /** draggable handle class (e.g. 'grid-stack-item-content'). If set 'handle' is ignored (default?: null) */
+ handleClass?: string;
+
+ /** widget class (default?: 'grid-stack-item') */
+ itemClass?: string;
+
+ /** maximum rows amount. Default? is 0 which means no maximum rows */
+ maxRow?: number;
+
+ /** minimum rows amount. Default is `0`. You can also do this with `min-height` CSS attribute
+ * on the grid div in pixels, which will round to the closest row.
+ */
+ minRow?: number;
+
+ /** minimal width. If window width is less, grid will be shown in one column mode (default?: 768) */
+ minWidth?: number;
+
+ /**
+ * set to true if you want oneColumnMode to use the DOM order and ignore x,y from normal multi column
+ * layouts during sorting. This enables you to have custom 1 column layout that differ from the rest. (default?: false)
+ */
+ oneColumnModeDomSort?: boolean;
+
+ /** class for placeholder (default?: 'grid-stack-placeholder') */
+ placeholderClass?: string;
+
+ /** placeholder default content (default?: '') */
+ placeholderText?: string;
+
+ /** allows to override UI resizable options. (default?: { autoHide?: true, handles?: 'se' }) */
+ resizable?: {} | any;
+
+ /**
+ * if true widgets could be removed by dragging outside of the grid. It could also be a selector string,
+ * in this case widgets will be removed by dropping them there (default?: false)
+ * See example (http://gridstack.github.io/gridstack.js/demo/two.html)
+ */
+ removable?: boolean | string;
+
+ /** allows to override UI removable options. (default?: { accept: '.' + opts.itemClass }) */
+ removableOptions?: {};
+
+ /** time in milliseconds before widget is being removed while dragging outside of the grid. (default?: 2000) */
+ removeTimeout?: number;
+
+ /** fix grid number of rows. This is a shortcut of writing `minRow:N, maxRow:N`. (default `0` no constrain) */
+ row?: number;
+
+ /**
+ * if true turns grid to RTL. Possible values are true, false, 'auto' (default?: 'auto')
+ * See [example](http://gridstack.github.io/gridstack.js/demo/rtl.html)
+ */
+ rtl?: boolean | 'auto';
+
+ /**
+ * makes grid static (default?: false). If `true` widgets are not movable/resizable.
+ * You don't even need draggable/resizable. A CSS class
+ * 'grid-stack-static' is also added to the element.
+ */
+ staticGrid?: boolean;
+
+ /**
+ * vertical gap size (default?: 20). Can be:
+ * an integer (px)
+ * a string (ex: '2em', '20px', '2rem')
+ */
+ verticalMargin?: numberOrString;
+
+ /** (internal) unit for verticalMargin (default? 'px') set when `verticalMargin` is set as string with unit (ex: 2rem') */
+ verticalMarginUnit?: string;
+
+ /** @internal */
+ _isNested?: boolean;
+ /** @internal */
+ _class?: string;
+}
+
+
+/**
+ * Gridstack Widget creation options
+ */
+export interface GridstackWidget {
+ /** widget position x (default?: 0) */
+ x?: number;
+ /** widget position y (default?: 0) */
+ y?: number;
+ /** widget dimension width (default?: 1) */
+ width?: number;
+ /** widget dimension height (default?: 1) */
+ height?: number;
+ /** if true then x, y parameters will be ignored and widget will be places on the first available position (default?: false) */
+ autoPosition?: boolean;
+ /** minimum width allowed during resize/creation (default?: undefined = un-constrained) */
+ minWidth?: number;
+ /** maximum width allowed during resize/creation (default?: undefined = un-constrained) */
+ maxWidth?: number;
+ /** minimum height allowed during resize/creation (default?: undefined = un-constrained) */
+ minHeight?: number;
+ /** maximum height allowed during resize/creation (default?: undefined = un-constrained) */
+ maxHeight?: number;
+ /** prevent resizing (default?: undefined = un-constrained) */
+ noResize?: boolean;
+ /** prevents moving (default?: undefined = un-constrained) */
+ noMove?: boolean;
+ /** prevents moving and resizing (default?: undefined = un-constrained) */
+ locked?: boolean;
+ /** widgets can have their own resize handles. For example 'e,w' will make the particular widget only resize east and west. */
+ resizeHandles?: string;
+ /** value for `data-gs-id` stored on the widget (default?: undefined) */
+ id?: numberOrString;
+}
+
+/**
+ * internal descriptions describing the items in the grid
+ */
+export interface GridStackNode extends GridstackWidget {
+ el?: GridItemHTMLElement;
+ /** @internal need to do that for each and use --stripInternal */
+ _id?: number;
+ _dirty?: boolean;
+ _updating?: boolean;
+ _added?: boolean;
+ _temporary?: boolean;
+ _isOutOfGrid?: boolean;
+ _origX?: number;
+ _origY?: number;
+ _packY?: number;
+ _origW?: number;
+ _origH?: number;
+ _lastTriedX?: number;
+ _lastTriedY?: number;
+ _lastTriedWidth?: number;
+ _lastTriedHeight?: number;
+}
diff --git a/src/utils.ts b/src/utils.ts
new file mode 100644
index 000000000..22aba9baf
--- /dev/null
+++ b/src/utils.ts
@@ -0,0 +1,252 @@
+// utils.ts 2.0.0-rc @preserve
+
+/**
+ * https://gridstackjs.com/
+ * (c) 2014-2020 Alain Dumesny, Dylan Weiss, Pavel Reznikov
+ * gridstack.js may be freely distributed under the MIT license.
+*/
+
+import { GridstackWidget, GridStackNode, GridstackOptions, numberOrString } from './types';
+
+/** checks for obsolete method names */
+export function obsolete(f, oldName: string, newName: string, rev: string) {
+ const wrapper = function() {
+ console.warn('gridstack.js: Function `' + oldName + '` is deprecated in ' + rev + ' and has been replaced ' +
+ 'with `' + newName + '`. It will be **completely** removed in v1.0');
+ return f.apply(this, arguments);
+ }
+ wrapper.prototype = f.prototype;
+ return wrapper;
+}
+
+/** checks for obsolete grid options (can be used for any fields, but msg is about options) */
+export function obsoleteOpts(opts: GridstackOptions, oldName: string, newName: string, rev: string) {
+ if (opts[oldName] !== undefined) {
+ opts[newName] = opts[oldName];
+ console.warn('gridstack.js: Option `' + oldName + '` is deprecated in ' + rev + ' and has been replaced with `' +
+ newName + '`. It will be **completely** removed in v1.0');
+ }
+}
+
+/** checks for obsolete grid options which are gone */
+export function obsoleteOptsDel(opts: GridstackOptions, oldName: string, rev: string, info: string) {
+ if (opts[oldName] !== undefined) {
+ console.warn('gridstack.js: Option `' + oldName + '` is deprecated in ' + rev + info);
+ }
+}
+
+/** checks for obsolete Jquery element attributes */
+export function obsoleteAttr(el: HTMLElement, oldName: string, newName: string, rev: string) {
+ const oldAttr = el.getAttribute(oldName);
+ if (oldAttr !== undefined) {
+ el.setAttribute(newName, oldAttr);
+ console.warn('gridstack.js: attribute `' + oldName + '`=' + oldAttr + ' is deprecated on this object in ' + rev + ' and has been replaced with `' +
+ newName + '`. It will be **completely** removed in v1.0');
+ }
+}
+
+
+/**
+ * Utility methods
+ */
+export namespace Utils {
+
+ /** returns true if a and b overlap */
+ export function isIntercepted(a: GridstackWidget, b: GridstackWidget): boolean {
+ return !(a.x + a.width <= b.x || b.x + b.width <= a.x || a.y + a.height <= b.y || b.y + b.height <= a.y);
+ }
+
+ /**
+ * Sorts array of nodes
+ * @param nodes array to sort
+ * @param dir 1 for asc, -1 for desc (optional)
+ * @param width width of the grid. If undefined the width will be calculated automatically (optional).
+ **/
+ export function sort(nodes: GridStackNode[], dir?: number, column?: number): GridStackNode[] {
+ if (!column) {
+ const widths = nodes.map(function (node) { return node.x + node.width; });
+ column = Math.max.apply(Math, widths);
+ }
+
+ if (dir === -1)
+ return sortBy(nodes, (n) => -(n.x + n.y * column));
+ else
+ return sortBy(nodes, (n) => (n.x + n.y * column));
+ }
+
+ export function createStylesheet(id: string, parent?: HTMLElement): CSSStyleSheet {
+ const style: HTMLStyleElement = document.createElement('style');
+ style.setAttribute('type', 'text/css');
+ style.setAttribute('data-gs-style-id', id);
+ if ((style as any).styleSheet) { // ??? only CSSImportRule have that and different beast...
+ (style as any).styleSheet.cssText = '';
+ } else {
+ style.appendChild(document.createTextNode('')); // WebKit hack
+ }
+ if (!parent) { parent = document.getElementsByTagName('head')[0]; } // default to head
+ parent.insertBefore(style, parent.firstChild);
+ return style.sheet as CSSStyleSheet;
+ }
+
+ export function removeStylesheet(id: string) {
+ const el = document.querySelector('STYLE[data-gs-style-id=' + id + ']');
+ if (!el) return;
+ el.parentNode.removeChild(el);
+ }
+
+ export function insertCSSRule(sheet: CSSStyleSheet, selector: string, rules: string, index: number) {
+ if (typeof sheet.insertRule === 'function') {
+ sheet.insertRule(selector + '{' + rules + '}', index);
+ } else if (typeof sheet.addRule === 'function') {
+ sheet.addRule(selector, rules, index);
+ }
+ }
+
+ export function toBool(v: any): boolean {
+ if (typeof v === 'boolean') {
+ return v;
+ }
+ if (typeof v === 'string') {
+ v = v.toLowerCase();
+ return !(v === '' || v === 'no' || v === 'false' || v === '0');
+ }
+ return Boolean(v);
+ }
+
+ export function parseHeight(val: numberOrString) {
+ let height: number;
+ let heightUnit = 'px';
+ if (typeof val === 'string') {
+ const match = val.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw|%)?$/);
+ if (!match) {
+ throw new Error('Invalid height');
+ }
+ heightUnit = match[2] || 'px';
+ height = parseFloat(match[1]);
+ } else {
+ height = val;
+ }
+ return { height: height, unit: heightUnit }
+ }
+
+ export function without(array, item) {
+ const index = array.indexOf(item);
+
+ if (index !== -1) {
+ array = array.slice(0);
+ array.splice(index, 1);
+ }
+
+ return array;
+ }
+
+ export function sortBy(array, getter) {
+ return array.slice(0).sort(function (left, right) {
+ const valueLeft = getter(left);
+ const valueRight = getter(right);
+
+ if (valueRight === valueLeft) {
+ return 0;
+ }
+
+ return valueLeft > valueRight ? 1 : -1;
+ });
+ }
+
+ export function defaults(target, arg1) {
+ const sources = Array.prototype.slice.call(arguments, 1);
+
+ sources.forEach(function (source) {
+ for (var prop in source) {
+ if (source.hasOwnProperty(prop) && (!target.hasOwnProperty(prop) || target[prop] === undefined)) {
+ target[prop] = source[prop];
+ }
+ }
+ });
+
+ return target;
+ }
+
+ export function clone(target) {
+ return {...target}; // was $.extend({}, target)
+ }
+
+ export function throttle(callback, delay) {
+ let isWaiting = false;
+
+ return function () {
+ if (!isWaiting) {
+ callback.apply(this, arguments);
+ isWaiting = true;
+ setTimeout(function () { isWaiting = false; }, delay);
+ }
+ }
+ }
+
+ export function removePositioningStyles(el) {
+ const style = el[0].style;
+ if (style.position) {
+ style.removeProperty('position');
+ }
+ if (style.left) {
+ style.removeProperty('left');
+ }
+ if (style.top) {
+ style.removeProperty('top');
+ }
+ if (style.width) {
+ style.removeProperty('width');
+ }
+ if (style.height) {
+ style.removeProperty('height');
+ }
+ }
+
+ export function getScrollParent(el) {
+ let returnEl;
+ if (el === null) {
+ returnEl = null;
+ } else if (el.scrollHeight > el.clientHeight) {
+ returnEl = el;
+ } else {
+ returnEl = getScrollParent(el.parentNode);
+ }
+ return returnEl;
+ }
+
+ export function updateScrollPosition(el, ui, distance) {
+ // is widget in view?
+ const rect = el.getBoundingClientRect();
+ const innerHeightOrClientHeight = (window.innerHeight || document.documentElement.clientHeight);
+ if (rect.top < 0 ||
+ rect.bottom > innerHeightOrClientHeight
+ ) {
+ // set scrollTop of first parent that scrolls
+ // if parent is larger than el, set as low as possible
+ // to get entire widget on screen
+ const offsetDiffDown = rect.bottom - innerHeightOrClientHeight;
+ const offsetDiffUp = rect.top;
+ const scrollEl = getScrollParent(el);
+ if (scrollEl !== null) {
+ const prevScroll = scrollEl.scrollTop;
+ if (rect.top < 0 && distance < 0) {
+ // moving up
+ if (el.offsetHeight > innerHeightOrClientHeight) {
+ scrollEl.scrollTop += distance;
+ } else {
+ scrollEl.scrollTop += Math.abs(offsetDiffUp) > Math.abs(distance) ? distance : offsetDiffUp;
+ }
+ } else if (distance > 0) {
+ // moving down
+ if (el.offsetHeight > innerHeightOrClientHeight) {
+ scrollEl.scrollTop += distance;
+ } else {
+ scrollEl.scrollTop += offsetDiffDown > distance ? distance : offsetDiffDown;
+ }
+ }
+ // move widget y by amount scrolled
+ ui.position.top += scrollEl.scrollTop - prevScroll;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 000000000..948886cf1
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,47 @@
+{
+ "compilerOptions": {
+ /*
+ "allowJs": true,
+ "emitDecoratorMetadata": true,
+ "experimentalDecorators": true,
+ "inlineSources": true,
+ "esModuleInterop": true,
+ "allowSyntheticDefaultImports": true
+ "declaration": true,
+ "lib": [ "es6", "es2015", "dom" ],
+ "module": "es6",
+ "noImplicitAny": false,
+ "outDir": "./dist",
+ "sourceMap": true,
+ "strict": false,
+ "target": "es5",
+ */
+ /*
+ "outDir": "./dist/",
+ "noImplicitAny": false,
+ "module": "commonjs",
+ "target": "es5",
+ "allowJs": true
+ */
+ "declaration": true,
+ "emitDecoratorMetadata": true,
+ "experimentalDecorators": true,
+ "inlineSources": true,
+ "lib": [ "es6", "es2015", "dom" ],
+ "module": "commonjs",
+ "noImplicitAny": false,
+ "outDir": "./dist",
+ "sourceMap": true,
+ "strict": false,
+ "target": "es5"
+ },
+ "exclude": [
+ "./src/**/*.spec.ts"
+ ],
+ "include": [
+ "./src/**/*.ts"
+ ],
+ "typeroots": [
+ "./node_modules/@types"
+ ]
+}
diff --git a/webpack.config.js b/webpack.config.js
new file mode 100644
index 000000000..0d3c46ae2
--- /dev/null
+++ b/webpack.config.js
@@ -0,0 +1,23 @@
+const path = require('path');
+
+module.exports = {
+ entry: './src/index.ts',
+ module: {
+ rules: [
+ {
+ test: /\.tsx?$/,
+ use: 'ts-loader',
+ exclude: /node_modules/,
+ },
+ ],
+ },
+ resolve: {
+ extensions: [ '.ts', '.js' ],
+ },
+ output: {
+ filename: 'gridstack.all.js',
+ path: path.resolve(__dirname, 'dist'),
+ libraryTarget: 'umd',
+ library: 'gridstack',
+ },
+};
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index 0d212947c..33cb2254d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -107,6 +107,20 @@
traverse "^0.6.6"
unified "^6.1.6"
+"@types/jquery@*", "@types/jquery@^3.3.32":
+ version "3.3.33"
+ resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.3.33.tgz#61d9cbd4004ffcdf6cf7e34720a87a5625a7d8e9"
+ integrity sha512-U6IdXYGkfUI42SR79vB2Spj+h1Ly3J3UZjpd8mi943lh126TK7CB+HZOxGh2nM3IySor7wqVQdemD/xtydsBKA==
+ dependencies:
+ "@types/sizzle" "*"
+
+"@types/jqueryui@^1.12.10":
+ version "1.12.10"
+ resolved "https://registry.yarnpkg.com/@types/jqueryui/-/jqueryui-1.12.10.tgz#39ebe4c391fb3b9f623521b4d803d9d4804883fa"
+ integrity sha512-T8sctslWIiLl/2EHEQQfKCB92S9bMKBaeE3+iBRbSERMK/1gzyfqjaIEksduB4eUEsKq+Ji0Y+qVbiXQwI2Mwg==
+ dependencies:
+ "@types/jquery" "*"
+
"@types/mime-types@^2.1.0":
version "2.1.0"
resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.0.tgz#9ca52cda363f699c69466c2a6ccdaad913ea7a73"
@@ -122,6 +136,167 @@
resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz#50bea0c3c2acc31c959c5b1e747798b3b3d06d4b"
integrity sha512-tGomyEuzSC1H28y2zlW6XPCaDaXFaD6soTdb4GNdmte2qfHtrKqhy0ZFs4r/1hpazCfEZqeTSRLvSasmEx89uw==
+"@types/sizzle@*":
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47"
+ integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==
+
+"@webassemblyjs/ast@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359"
+ integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==
+ dependencies:
+ "@webassemblyjs/helper-module-context" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/wast-parser" "1.8.5"
+
+"@webassemblyjs/floating-point-hex-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721"
+ integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==
+
+"@webassemblyjs/helper-api-error@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7"
+ integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==
+
+"@webassemblyjs/helper-buffer@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204"
+ integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==
+
+"@webassemblyjs/helper-code-frame@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e"
+ integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==
+ dependencies:
+ "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/helper-fsm@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452"
+ integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==
+
+"@webassemblyjs/helper-module-context@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245"
+ integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ mamacro "^0.0.3"
+
+"@webassemblyjs/helper-wasm-bytecode@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61"
+ integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==
+
+"@webassemblyjs/helper-wasm-section@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf"
+ integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+
+"@webassemblyjs/ieee754@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e"
+ integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==
+ dependencies:
+ "@xtuc/ieee754" "^1.2.0"
+
+"@webassemblyjs/leb128@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10"
+ integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==
+ dependencies:
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/utf8@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc"
+ integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==
+
+"@webassemblyjs/wasm-edit@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a"
+ integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/helper-wasm-section" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+ "@webassemblyjs/wasm-opt" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+ "@webassemblyjs/wast-printer" "1.8.5"
+
+"@webassemblyjs/wasm-gen@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc"
+ integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/ieee754" "1.8.5"
+ "@webassemblyjs/leb128" "1.8.5"
+ "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wasm-opt@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264"
+ integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-buffer" "1.8.5"
+ "@webassemblyjs/wasm-gen" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+
+"@webassemblyjs/wasm-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d"
+ integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-api-error" "1.8.5"
+ "@webassemblyjs/helper-wasm-bytecode" "1.8.5"
+ "@webassemblyjs/ieee754" "1.8.5"
+ "@webassemblyjs/leb128" "1.8.5"
+ "@webassemblyjs/utf8" "1.8.5"
+
+"@webassemblyjs/wast-parser@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c"
+ integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/floating-point-hex-parser" "1.8.5"
+ "@webassemblyjs/helper-api-error" "1.8.5"
+ "@webassemblyjs/helper-code-frame" "1.8.5"
+ "@webassemblyjs/helper-fsm" "1.8.5"
+ "@xtuc/long" "4.2.2"
+
+"@webassemblyjs/wast-printer@1.8.5":
+ version "1.8.5"
+ resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc"
+ integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/wast-parser" "1.8.5"
+ "@xtuc/long" "4.2.2"
+
+"@xtuc/ieee754@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
+ integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
+
+"@xtuc/long@4.2.2":
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
+ integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+
abbrev@1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
@@ -145,6 +320,11 @@ acorn-jsx@^5.1.0:
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384"
integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==
+acorn@^6.2.1:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.0.tgz#b659d2ffbafa24baf5db1cdbb2c94a983ecd2784"
+ integrity sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==
+
acorn@^7.1.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c"
@@ -172,7 +352,17 @@ agent-base@^4.3.0:
dependencies:
es6-promisify "^5.0.0"
-ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5:
+ajv-errors@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d"
+ integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==
+
+ajv-keywords@^3.1.0, ajv-keywords@^3.4.1:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da"
+ integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==
+
+ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5:
version "6.12.0"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7"
integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==
@@ -233,6 +423,14 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
dependencies:
color-convert "^1.9.0"
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
anymatch@~3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
@@ -248,7 +446,7 @@ append-buffer@^1.0.2:
dependencies:
buffer-equal "^1.0.0"
-aproba@^1.0.3:
+aproba@^1.0.3, aproba@^1.1.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
@@ -325,6 +523,15 @@ arrify@^1.0.0:
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
+asn1.js@^4.0.0:
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
+ integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
+ dependencies:
+ bn.js "^4.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
asn1@~0.2.3:
version "0.2.4"
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
@@ -344,6 +551,14 @@ assert@1.4.1:
dependencies:
util "0.10.3"
+assert@^1.1.1:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb"
+ integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==
+ dependencies:
+ object-assign "^4.1.1"
+ util "0.10.3"
+
assign-symbols@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
@@ -354,6 +569,11 @@ astral-regex@^1.0.0:
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
+async-each@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf"
+ integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==
+
async-foreach@^0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
@@ -416,6 +636,11 @@ base64-arraybuffer@0.1.5:
resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg=
+base64-js@^1.0.2:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
+ integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
+
base64id@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"
@@ -460,11 +685,28 @@ better-assert@~1.0.0:
dependencies:
callsite "1.0.0"
+big.js@^5.2.2:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
+ integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
+
+binary-extensions@^1.0.0:
+ version "1.13.1"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
+ integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==
+
binary-extensions@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c"
integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==
+bindings@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
+ integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
+ dependencies:
+ file-uri-to-path "1.0.0"
+
blob@0.0.5:
version "0.0.5"
resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683"
@@ -484,11 +726,16 @@ blocking-proxy@^1.0.0:
dependencies:
minimist "^1.2.0"
-bluebird@^3.3.0:
+bluebird@^3.3.0, bluebird@^3.5.5:
version "3.7.2"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+ integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
+
body-parser@^1.16.1:
version "1.19.0"
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
@@ -528,7 +775,7 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
-braces@^2.3.1:
+braces@^2.3.1, braces@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
@@ -544,13 +791,77 @@ braces@^2.3.1:
split-string "^3.0.2"
to-regex "^3.0.1"
-braces@^3.0.2, braces@~3.0.2:
+braces@^3.0.1, braces@^3.0.2, braces@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
dependencies:
fill-range "^7.0.1"
+brorand@^1.0.1:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+
+browserify-aes@^1.0.0, browserify-aes@^1.0.4:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+browserify-cipher@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+ integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
+ dependencies:
+ browserify-aes "^1.0.4"
+ browserify-des "^1.0.0"
+ evp_bytestokey "^1.0.0"
+
+browserify-des@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+ integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
+ dependencies:
+ cipher-base "^1.0.1"
+ des.js "^1.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+browserify-rsa@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
+ dependencies:
+ bn.js "^4.1.0"
+ randombytes "^2.0.1"
+
+browserify-sign@^4.0.0:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+ integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
+ dependencies:
+ bn.js "^4.1.1"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.2"
+ elliptic "^6.0.0"
+ inherits "^2.0.1"
+ parse-asn1 "^5.0.0"
+
+browserify-zlib@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
+ dependencies:
+ pako "~1.0.5"
+
browserstack@^1.5.1:
version "1.5.3"
resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.3.tgz#93ab48799a12ef99dbd074dd595410ddb196a7ac"
@@ -586,6 +897,25 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
+
+buffer@^4.3.0:
+ version "4.9.2"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8"
+ integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+builtin-status-codes@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
+
bytes@1:
version "1.0.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8"
@@ -596,6 +926,27 @@ bytes@3.1.0:
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
+cacache@^12.0.2:
+ version "12.0.3"
+ resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390"
+ integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==
+ dependencies:
+ bluebird "^3.5.5"
+ chownr "^1.1.1"
+ figgy-pudding "^3.5.1"
+ glob "^7.1.4"
+ graceful-fs "^4.1.15"
+ infer-owner "^1.0.3"
+ lru-cache "^5.1.1"
+ mississippi "^3.0.0"
+ mkdirp "^0.5.1"
+ move-concurrently "^1.0.1"
+ promise-inflight "^1.0.1"
+ rimraf "^2.6.3"
+ ssri "^6.0.1"
+ unique-filename "^1.1.1"
+ y18n "^4.0.0"
+
cache-base@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
@@ -639,11 +990,25 @@ camelcase@^3.0.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo=
+camelcase@^5.0.0:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
+ integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+
caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
+chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2, chalk@~2.4.1:
+ 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.1, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
@@ -655,15 +1020,6 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
-chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2, chalk@~2.4.1:
- 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"
-
character-entities-legacy@^1.0.0:
version "1.1.4"
resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
@@ -684,6 +1040,25 @@ chardet@^0.7.0:
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+chokidar@^2.0.2:
+ version "2.1.8"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917"
+ integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.1"
+ braces "^2.3.2"
+ glob-parent "^3.1.0"
+ inherits "^2.0.3"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ normalize-path "^3.0.0"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.2.1"
+ upath "^1.1.1"
+ optionalDependencies:
+ fsevents "^1.2.7"
+
chokidar@^3.0.0:
version "3.3.1"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450"
@@ -699,6 +1074,26 @@ chokidar@^3.0.0:
optionalDependencies:
fsevents "~2.1.2"
+chownr@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
+chrome-trace-event@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4"
+ integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==
+ dependencies:
+ tslib "^1.9.0"
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
class-utils@^0.3.5:
version "0.3.6"
resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
@@ -737,6 +1132,15 @@ cliui@^3.2.0:
strip-ansi "^3.0.1"
wrap-ansi "^2.0.0"
+cliui@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5"
+ integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
+ dependencies:
+ string-width "^3.1.0"
+ strip-ansi "^5.2.0"
+ wrap-ansi "^5.1.0"
+
clone-buffer@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
@@ -813,11 +1217,16 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
dependencies:
delayed-stream "~1.0.0"
-commander@~2.20.3:
+commander@^2.20.0, commander@~2.20.3:
version "2.20.3"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
+commondir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
component-bind@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
@@ -843,7 +1252,7 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-concat-stream@1.6.2:
+concat-stream@1.6.2, concat-stream@^1.5.0:
version "1.6.2"
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
@@ -868,11 +1277,21 @@ connect@^3.6.0, connect@^3.6.6, connect@^3.7.0:
parseurl "~1.3.3"
utils-merge "1.0.1"
+console-browserify@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
+ integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
+
console-control-strings@^1.0.0, console-control-strings@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
+constants-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
+
content-type@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
@@ -895,6 +1314,18 @@ cookie@0.3.1:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
+copy-concurrently@^1.0.0:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
+ integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==
+ dependencies:
+ aproba "^1.1.1"
+ fs-write-stream-atomic "^1.0.8"
+ iferr "^0.1.5"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.0"
+
copy-descriptor@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
@@ -921,15 +1352,38 @@ coveralls@^3.0.9, coveralls@~3.0.0:
minimist "^1.2.0"
request "^2.88.0"
-cross-spawn@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
- integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI=
+create-ecdh@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
+ integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
dependencies:
- lru-cache "^4.0.1"
- which "^1.2.9"
+ bn.js "^4.1.0"
+ elliptic "^6.0.0"
+
+create-hash@^1.1.0, create-hash@^1.1.2:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
-cross-spawn@^6.0.5:
+cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5:
version "6.0.5"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
@@ -940,6 +1394,31 @@ cross-spawn@^6.0.5:
shebang-command "^1.2.0"
which "^1.2.9"
+cross-spawn@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
+ integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI=
+ dependencies:
+ lru-cache "^4.0.1"
+ which "^1.2.9"
+
+crypto-browserify@^3.11.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
+ dependencies:
+ browserify-cipher "^1.0.0"
+ browserify-sign "^4.0.0"
+ create-ecdh "^4.0.0"
+ create-hash "^1.1.0"
+ create-hmac "^1.1.0"
+ diffie-hellman "^5.0.0"
+ inherits "^2.0.1"
+ pbkdf2 "^3.0.3"
+ public-encrypt "^4.0.0"
+ randombytes "^2.0.0"
+ randomfill "^1.0.3"
+
currently-unhandled@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
@@ -952,6 +1431,11 @@ custom-event@~1.0.0:
resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425"
integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=
+cyclist@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9"
+ integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=
+
dashdash@^1.12.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
@@ -1000,7 +1484,7 @@ debug@~3.1.0:
dependencies:
ms "2.0.0"
-decamelize@^1.1.1, decamelize@^1.1.2:
+decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
@@ -1072,6 +1556,14 @@ depd@~1.1.2:
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
+des.js@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843"
+ integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==
+ dependencies:
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+
destroy@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
@@ -1087,6 +1579,15 @@ di@^0.0.1:
resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c"
integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=
+diffie-hellman@^5.0.0:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+ integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
+ dependencies:
+ bn.js "^4.1.0"
+ miller-rabin "^4.0.0"
+ randombytes "^2.0.0"
+
doctoc@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/doctoc/-/doctoc-1.4.0.tgz#3115aa61d0a92f0abb0672036918ea904f5b9e02"
@@ -1124,6 +1625,11 @@ dom-serializer@0:
domelementtype "^2.0.1"
entities "^2.0.0"
+domain-browser@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+ integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+
domelementtype@1, domelementtype@^1.3.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
@@ -1154,7 +1660,7 @@ duplexer@^0.1.1:
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
-duplexify@^3.5.1, duplexify@^3.6.0:
+duplexify@^3.4.2, duplexify@^3.5.1, duplexify@^3.6.0:
version "3.7.1"
resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309"
integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==
@@ -1177,6 +1683,19 @@ ee-first@1.1.1:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
+elliptic@^6.0.0:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762"
+ integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==
+ dependencies:
+ bn.js "^4.4.0"
+ brorand "^1.0.1"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.0"
+ inherits "^2.0.1"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.0"
+
emoji-regex@^7.0.1:
version "7.0.3"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
@@ -1192,6 +1711,16 @@ emoji-regex@~6.1.0:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.3.tgz#ec79a3969b02d2ecf2b72254279bf99bc7a83932"
integrity sha1-7HmjlpsC0uzytyJUJ5v5m8eoOTI=
+emojis-list@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+ integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
+
+emojis-list@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
+ integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
+
encodeurl@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
@@ -1244,6 +1773,24 @@ engine.io@~3.2.0:
engine.io-parser "~2.1.0"
ws "~3.3.1"
+enhanced-resolve@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f"
+ integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.4.0"
+ tapable "^1.0.0"
+
+enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66"
+ integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==
+ dependencies:
+ graceful-fs "^4.1.2"
+ memory-fs "^0.5.0"
+ tapable "^1.0.0"
+
ent@~2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
@@ -1259,6 +1806,13 @@ entities@^2.0.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4"
integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==
+errno@^0.1.3, errno@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
+ integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
+ dependencies:
+ prr "~1.0.1"
+
error-ex@^1.2.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
@@ -1307,6 +1861,14 @@ escodegen@1.8.x:
optionalDependencies:
source-map "~0.2.0"
+eslint-scope@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
+ integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==
+ dependencies:
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
eslint-scope@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
@@ -1438,6 +2000,32 @@ events@1.1.1:
resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
+events@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59"
+ integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==
+
+evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+execa@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
+ integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==
+ dependencies:
+ cross-spawn "^6.0.0"
+ get-stream "^4.0.0"
+ is-stream "^1.1.0"
+ npm-run-path "^2.0.0"
+ p-finally "^1.0.0"
+ signal-exit "^3.0.0"
+ strip-eof "^1.0.0"
+
exit@^0.1.2, exit@~0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
@@ -1562,6 +2150,11 @@ fd-slicer@~1.0.1:
dependencies:
pend "~1.2.0"
+figgy-pudding@^3.5.1:
+ version "3.5.1"
+ resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
+ integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==
+
figures@^1.0.1:
version "1.7.0"
resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
@@ -1589,6 +2182,11 @@ file-sync-cmp@^0.1.0:
resolved "https://registry.yarnpkg.com/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz#a5e7a8ffbfa493b43b923bbd4ca89a53b63b612b"
integrity sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=
+file-uri-to-path@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
+ integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
+
fill-range@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
@@ -1619,6 +2217,15 @@ finalhandler@1.1.2:
statuses "~1.5.0"
unpipe "~1.0.0"
+find-cache-dir@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7"
+ integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==
+ dependencies:
+ commondir "^1.0.1"
+ make-dir "^2.0.0"
+ pkg-dir "^3.0.0"
+
find-up@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
@@ -1627,6 +2234,23 @@ find-up@^1.0.0:
path-exists "^2.0.0"
pinkie-promise "^2.0.0"
+find-up@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73"
+ integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
+ dependencies:
+ locate-path "^3.0.0"
+
+findup-sync@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
+ integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
+ dependencies:
+ detect-file "^1.0.0"
+ is-glob "^4.0.0"
+ micromatch "^3.0.4"
+ resolve-dir "^1.0.1"
+
findup-sync@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc"
@@ -1674,7 +2298,7 @@ flatted@^2.0.0:
resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==
-flush-write-stream@^1.0.2:
+flush-write-stream@^1.0.0, flush-write-stream@^1.0.2:
version "1.1.1"
resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8"
integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==
@@ -1732,6 +2356,14 @@ fresh@0.5.2:
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
+from2@^2.1.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af"
+ integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=
+ dependencies:
+ inherits "^2.0.1"
+ readable-stream "^2.0.0"
+
fs-extra@^7.0.1:
version "7.0.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
@@ -1749,11 +2381,29 @@ fs-mkdirp-stream@^1.0.0:
graceful-fs "^4.1.11"
through2 "^2.0.3"
+fs-write-stream-atomic@^1.0.8:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9"
+ integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=
+ dependencies:
+ graceful-fs "^4.1.2"
+ iferr "^0.1.5"
+ imurmurhash "^0.1.4"
+ readable-stream "1 || 2"
+
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+fsevents@^1.2.7:
+ version "1.2.11"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.11.tgz#67bf57f4758f02ede88fb2a1712fef4d15358be3"
+ integrity sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==
+ dependencies:
+ bindings "^1.5.0"
+ nan "^2.12.1"
+
fsevents@~2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805"
@@ -1805,11 +2455,23 @@ get-caller-file@^1.0.1:
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
+get-caller-file@^2.0.1:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
get-stdin@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
+get-stream@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
+ integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
+ dependencies:
+ pump "^3.0.0"
+
get-value@^2.0.3, get-value@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
@@ -1869,7 +2531,7 @@ glob@^5.0.15, glob@~5.0.0:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1:
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
@@ -1893,6 +2555,13 @@ glob@~7.0.0:
once "^1.3.0"
path-is-absolute "^1.0.0"
+global-modules@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
+ integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
+ dependencies:
+ global-prefix "^3.0.0"
+
global-modules@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
@@ -1913,6 +2582,15 @@ global-prefix@^1.0.1:
is-windows "^1.0.1"
which "^1.2.14"
+global-prefix@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97"
+ integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==
+ dependencies:
+ ini "^1.3.5"
+ kind-of "^6.0.2"
+ which "^1.3.1"
+
globals@^11.1.0:
version "11.12.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
@@ -1946,7 +2624,7 @@ globule@^1.0.0:
lodash "~4.17.12"
minimatch "~3.0.2"
-graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
+graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
version "4.2.3"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
@@ -2213,6 +2891,31 @@ has-values@^1.0.0:
is-number "^3.0.0"
kind-of "^4.0.0"
+hash-base@^3.0.0:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+ integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+hmac-drbg@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
homedir-polyfill@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
@@ -2307,6 +3010,11 @@ https-browserify@0.0.1:
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
integrity sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=
+https-browserify@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
https-proxy-agent@^2.2.1:
version "2.2.4"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b"
@@ -2330,6 +3038,16 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13:
dependencies:
safer-buffer ">= 2.1.2 < 3"
+ieee754@^1.1.4:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
+ integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
+
+iferr@^0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501"
+ integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE=
+
ignore@^4.0.6:
version "4.0.6"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
@@ -2348,6 +3066,14 @@ import-fresh@^3.0.0:
parent-module "^1.0.0"
resolve-from "^4.0.0"
+import-local@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d"
+ integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==
+ dependencies:
+ pkg-dir "^3.0.0"
+ resolve-cwd "^2.0.0"
+
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@@ -2370,6 +3096,11 @@ indexof@0.0.1:
resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
+infer-owner@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467"
+ integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
+
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
@@ -2393,7 +3124,7 @@ inherits@2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
-ini@^1.3.4:
+ini@^1.3.4, ini@^1.3.5:
version "1.3.5"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
@@ -2417,6 +3148,11 @@ inquirer@^7.0.0:
strip-ansi "^5.1.0"
through "^2.3.6"
+interpret@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
+ integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
+
interpret@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
@@ -2427,6 +3163,11 @@ invert-kv@^1.0.0:
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
+invert-kv@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
+ integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
+
is-absolute@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576"
@@ -2467,6 +3208,13 @@ is-arrayish@^0.2.1:
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
+is-binary-path@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
+ dependencies:
+ binary-extensions "^1.0.0"
+
is-binary-path@~2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
@@ -2641,6 +3389,11 @@ is-relative@^1.0.0:
dependencies:
is-unc-path "^1.0.0"
+is-stream@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+
is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
@@ -2683,7 +3436,7 @@ is-wsl@^1.1.0:
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
-isarray@1.0.0, isarray@~1.0.0:
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
@@ -2839,6 +3592,11 @@ jsesc@^2.5.1:
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+json-parse-better-errors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9"
+ integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==
+
json-schema-traverse@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
@@ -2859,8 +3617,15 @@ json-stringify-safe@~5.0.1:
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
-jsonfile@^4.0.0:
- version "4.0.0"
+json5@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
+ integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
+ dependencies:
+ minimist "^1.2.0"
+
+jsonfile@^4.0.0:
+ version "4.0.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
optionalDependencies:
@@ -2996,6 +3761,13 @@ lcid@^1.0.0:
dependencies:
invert-kv "^1.0.0"
+lcid@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
+ integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==
+ dependencies:
+ invert-kv "^2.0.0"
+
lcov-parse@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0"
@@ -3062,6 +3834,37 @@ load-json-file@^1.0.0:
pinkie-promise "^2.0.0"
strip-bom "^2.0.0"
+loader-runner@^2.4.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
+ integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==
+
+loader-utils@1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
+ integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^2.0.0"
+ json5 "^1.0.1"
+
+loader-utils@^1.0.2, loader-utils@^1.2.3:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
+ integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
+ dependencies:
+ big.js "^5.2.2"
+ emojis-list "^3.0.0"
+ json5 "^1.0.1"
+
+locate-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e"
+ integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
+ dependencies:
+ p-locate "^3.0.0"
+ path-exists "^3.0.0"
+
lodash.isfinite@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz#fb89b65a9a80281833f0b7478b3a5104f898ebb3"
@@ -3104,7 +3907,14 @@ lru-cache@4.1.x, lru-cache@^4.0.1:
pseudomap "^1.0.2"
yallist "^2.1.2"
-make-dir@^2.1.0:
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+make-dir@^2.0.0, make-dir@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
@@ -3119,6 +3929,18 @@ make-iterator@^1.0.0:
dependencies:
kind-of "^6.0.2"
+mamacro@^0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4"
+ integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==
+
+map-age-cleaner@^0.1.1:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
+ integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==
+ dependencies:
+ p-defer "^1.0.0"
+
map-cache@^0.2.0, map-cache@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
@@ -3151,11 +3973,45 @@ maxmin@^2.1.0:
gzip-size "^3.0.0"
pretty-bytes "^3.0.0"
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
media-typer@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
+mem@^4.0.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
+ integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==
+ dependencies:
+ map-age-cleaner "^0.1.1"
+ mimic-fn "^2.0.0"
+ p-is-promise "^2.0.0"
+
+memory-fs@^0.4.0, memory-fs@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
+memory-fs@^0.5.0:
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
+ integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
+ dependencies:
+ errno "^0.1.3"
+ readable-stream "^2.0.1"
+
meow@^3.3.0, meow@^3.7.0:
version "3.7.0"
resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
@@ -3172,7 +4028,7 @@ meow@^3.3.0, meow@^3.7.0:
redent "^1.0.0"
trim-newlines "^1.0.0"
-micromatch@^3.0.4:
+micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4:
version "3.1.10"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
@@ -3191,6 +4047,22 @@ micromatch@^3.0.4:
snapdragon "^0.8.1"
to-regex "^3.0.2"
+micromatch@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
+ integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.0.5"
+
+miller-rabin@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
+ dependencies:
+ bn.js "^4.0.0"
+ brorand "^1.0.1"
+
mime-db@1.43.0:
version "1.43.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58"
@@ -3213,11 +4085,21 @@ mime@^2.0.3, mime@^2.3.1:
resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5"
integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==
-mimic-fn@^2.1.0:
+mimic-fn@^2.0.0, mimic-fn@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
+
"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
@@ -3240,6 +4122,22 @@ minimist@~0.0.1:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
+mississippi@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022"
+ integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==
+ dependencies:
+ concat-stream "^1.5.0"
+ duplexify "^3.4.2"
+ end-of-stream "^1.1.0"
+ flush-write-stream "^1.0.0"
+ from2 "^2.1.0"
+ parallel-transform "^1.1.0"
+ pump "^3.0.0"
+ pumpify "^1.3.3"
+ stream-each "^1.1.0"
+ through2 "^2.0.0"
+
mixin-deep@^1.2.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
@@ -3266,6 +4164,18 @@ morgan@^1.9.1:
on-finished "~2.3.0"
on-headers "~1.0.1"
+move-concurrently@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
+ integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=
+ dependencies:
+ aproba "^1.1.1"
+ copy-concurrently "^1.0.0"
+ fs-write-stream-atomic "^1.0.8"
+ mkdirp "^0.5.1"
+ rimraf "^2.5.4"
+ run-queue "^1.0.3"
+
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@@ -3286,7 +4196,7 @@ mute-stream@0.0.8:
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
-nan@^2.13.2:
+nan@^2.12.1, nan@^2.13.2:
version "2.14.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
@@ -3318,7 +4228,7 @@ negotiator@0.6.2:
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
-neo-async@^2.6.0:
+neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
@@ -3360,6 +4270,35 @@ node-http2@^4.0.1:
url "^0.11.0"
websocket-stream "^5.0.1"
+node-libs-browser@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
+ integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==
+ dependencies:
+ assert "^1.1.1"
+ browserify-zlib "^0.2.0"
+ buffer "^4.3.0"
+ console-browserify "^1.1.0"
+ constants-browserify "^1.0.0"
+ crypto-browserify "^3.11.0"
+ domain-browser "^1.1.1"
+ events "^3.0.0"
+ https-browserify "^1.0.0"
+ os-browserify "^0.3.0"
+ path-browserify "0.0.1"
+ process "^0.11.10"
+ punycode "^1.2.4"
+ querystring-es3 "^0.2.0"
+ readable-stream "^2.3.3"
+ stream-browserify "^2.0.1"
+ stream-http "^2.7.2"
+ string_decoder "^1.0.0"
+ timers-browserify "^2.0.4"
+ tty-browserify "0.0.0"
+ url "^0.11.0"
+ util "^0.11.0"
+ vm-browserify "^1.0.1"
+
node-sass@^4.13.1:
version "4.13.1"
resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.1.tgz#9db5689696bb2eec2c32b98bfea4c7a2e992d0a3"
@@ -3427,6 +4366,13 @@ now-and-later@^2.0.0:
dependencies:
once "^1.3.2"
+npm-run-path@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
+ dependencies:
+ path-key "^2.0.0"
+
"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0:
version "4.1.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
@@ -3447,7 +4393,7 @@ oauth-sign@~0.9.0:
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
-object-assign@^4.0.1, object-assign@^4.1.0:
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
@@ -3573,6 +4519,11 @@ ordered-read-streams@^1.0.0:
dependencies:
readable-stream "^2.0.1"
+os-browserify@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
+
os-homedir@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
@@ -3585,6 +4536,15 @@ os-locale@^1.4.0:
dependencies:
lcid "^1.0.0"
+os-locale@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
+ integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==
+ dependencies:
+ execa "^1.0.0"
+ lcid "^2.0.0"
+ mem "^4.0.0"
+
os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
@@ -3598,11 +4558,54 @@ osenv@0, osenv@^0.1.4:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
-pako@~1.0.2:
+p-defer@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
+ integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
+
+p-finally@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
+
+p-is-promise@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
+ integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==
+
+p-limit@^2.0.0:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e"
+ integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==
+ dependencies:
+ p-try "^2.0.0"
+
+p-locate@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4"
+ integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
+ dependencies:
+ p-limit "^2.0.0"
+
+p-try@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
+ integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
+
+pako@~1.0.2, pako@~1.0.5:
version "1.0.11"
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf"
integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==
+parallel-transform@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc"
+ integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==
+ dependencies:
+ cyclist "^1.0.1"
+ inherits "^2.0.3"
+ readable-stream "^2.1.5"
+
parent-module@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
@@ -3610,6 +4613,18 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
+parse-asn1@^5.0.0:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e"
+ integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==
+ dependencies:
+ asn1.js "^4.0.0"
+ browserify-aes "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.0"
+ pbkdf2 "^3.0.3"
+ safe-buffer "^5.1.1"
+
parse-entities@^1.1.0:
version "1.2.2"
resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50"
@@ -3667,6 +4682,11 @@ pascalcase@^0.1.1:
resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
+path-browserify@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a"
+ integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==
+
path-dirname@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
@@ -3679,6 +4699,11 @@ path-exists@^2.0.0:
dependencies:
pinkie-promise "^2.0.0"
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+
path-is-absolute@^1.0.0, path-is-absolute@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
@@ -3689,7 +4714,7 @@ path-is-inside@^1.0.1:
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
-path-key@^2.0.1:
+path-key@^2.0.0, path-key@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
@@ -3720,6 +4745,17 @@ path-type@^1.0.0:
pify "^2.0.0"
pinkie-promise "^2.0.0"
+pbkdf2@^3.0.3:
+ version "3.0.17"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
+ integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
pend@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
@@ -3730,7 +4766,7 @@ performance-now@^2.1.0:
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
-picomatch@^2.0.4, picomatch@^2.0.7:
+picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.0.7:
version "2.2.1"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.1.tgz#21bac888b6ed8601f831ce7816e335bc779f0a4a"
integrity sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==
@@ -3757,6 +4793,13 @@ pinkie@^2.0.0:
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+pkg-dir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
+ integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==
+ dependencies:
+ find-up "^3.0.0"
+
portscanner@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/portscanner/-/portscanner-2.2.0.tgz#6059189b3efa0965c9d96a56b958eb9508411cf1"
@@ -3787,11 +4830,21 @@ process-nextick-args@^2.0.0, process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+process@^0.11.10:
+ version "0.11.10"
+ resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
+
progress@^2.0.0, progress@^2.0.1:
version "2.0.3"
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+promise-inflight@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
+ integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
+
protractor@^5.0.0:
version "5.4.3"
resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.4.3.tgz#35f050741e404a45868618ea648745d89af31683"
@@ -3818,6 +4871,11 @@ proxy-from-env@^1.0.0:
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee"
integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=
+prr@~1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
+
pseudomap@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
@@ -3828,6 +4886,18 @@ psl@^1.1.28:
resolved "https://registry.yarnpkg.com/psl/-/psl-1.7.0.tgz#f1c4c47a8ef97167dea5d6bbf4816d736e884a3c"
integrity sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==
+public-encrypt@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+ integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
+ dependencies:
+ bn.js "^4.1.0"
+ browserify-rsa "^4.0.0"
+ create-hash "^1.1.0"
+ parse-asn1 "^5.0.0"
+ randombytes "^2.0.1"
+ safe-buffer "^5.1.2"
+
pump@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909"
@@ -3836,7 +4906,15 @@ pump@^2.0.0:
end-of-stream "^1.1.0"
once "^1.3.1"
-pumpify@^1.3.5:
+pump@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+pumpify@^1.3.3, pumpify@^1.3.5:
version "1.5.1"
resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce"
integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==
@@ -3850,6 +4928,11 @@ punycode@1.3.2:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+punycode@^1.2.4:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
punycode@^2.1.0, punycode@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
@@ -3901,11 +4984,31 @@ qs@~6.5.2:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+querystring-es3@^0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
+
querystring@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+randomfill@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
+ dependencies:
+ randombytes "^2.0.5"
+ safe-buffer "^5.1.0"
+
range-parser@^1.2.0, range-parser@~1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
@@ -3946,7 +5049,7 @@ read-pkg@^1.0.0:
normalize-package-data "^2.3.2"
path-type "^1.0.0"
-readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
version "2.3.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
@@ -3959,6 +5062,15 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
+readdirp@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
+ dependencies:
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
+ readable-stream "^2.0.2"
+
readdirp@~3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17"
@@ -4103,11 +5215,23 @@ require-main-filename@^1.0.1:
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
+require-main-filename@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
+ integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+
requires-port@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
+resolve-cwd@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
+ dependencies:
+ resolve-from "^3.0.0"
+
resolve-dir@^1.0.0, resolve-dir@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
@@ -4116,6 +5240,11 @@ resolve-dir@^1.0.0, resolve-dir@^1.0.1:
expand-tilde "^2.0.0"
global-modules "^1.0.0"
+resolve-from@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha1-six699nWiBvItuZTM17rywoYh0g=
+
resolve-from@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
@@ -4177,6 +5306,14 @@ rimraf@2.6.3, rimraf@~2.6.2:
dependencies:
glob "^7.1.3"
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
run-async@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
@@ -4184,6 +5321,13 @@ run-async@^2.2.0:
dependencies:
is-promise "^2.1.0"
+run-queue@^1.0.0, run-queue@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
+ integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=
+ dependencies:
+ aproba "^1.1.1"
+
rxjs@^6.5.3:
version "6.5.4"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c"
@@ -4196,7 +5340,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2:
+safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
@@ -4240,6 +5384,15 @@ sax@>=0.6.0:
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+schema-utils@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770"
+ integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==
+ dependencies:
+ ajv "^6.1.0"
+ ajv-errors "^1.0.0"
+ ajv-keywords "^3.1.0"
+
scss-tokenizer@^0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
@@ -4292,6 +5445,11 @@ send@0.17.1:
range-parser "~1.2.1"
statuses "~1.5.0"
+serialize-javascript@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61"
+ integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==
+
serve-index@^1.9.1:
version "1.9.1"
resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
@@ -4350,6 +5508,14 @@ setprototypeof@1.1.1:
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
shebang-command@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
@@ -4452,6 +5618,11 @@ socket.io@2.1.1:
socket.io-client "2.1.1"
socket.io-parser "~3.2.0"
+source-list-map@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
source-map-resolve@^0.5.0:
version "0.5.3"
resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
@@ -4470,6 +5641,14 @@ source-map-support@~0.4.0:
dependencies:
source-map "^0.5.6"
+source-map-support@~0.5.12:
+ version "0.5.16"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
+ integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
source-map-url@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
@@ -4487,7 +5666,7 @@ source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.6:
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
-source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
@@ -4564,6 +5743,13 @@ sshpk@^1.7.0:
safer-buffer "^2.0.2"
tweetnacl "~0.14.0"
+ssri@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8"
+ integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==
+ dependencies:
+ figgy-pudding "^3.5.1"
+
state-toggle@^1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe"
@@ -4597,6 +5783,33 @@ stream-browserify@2.0.1:
inherits "~2.0.1"
readable-stream "^2.0.2"
+stream-browserify@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
+ integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==
+ dependencies:
+ inherits "~2.0.1"
+ readable-stream "^2.0.2"
+
+stream-each@^1.1.0:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae"
+ integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==
+ dependencies:
+ end-of-stream "^1.1.0"
+ stream-shift "^1.0.0"
+
+stream-http@^2.7.2:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+ integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
+ dependencies:
+ builtin-status-codes "^3.0.0"
+ inherits "^2.0.1"
+ readable-stream "^2.3.6"
+ to-arraybuffer "^1.0.0"
+ xtend "^4.0.0"
+
stream-shift@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
@@ -4635,7 +5848,7 @@ string-width@^1.0.1, string-width@^1.0.2:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^4.0.0"
-string-width@^3.0.0:
+string-width@^3.0.0, string-width@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
@@ -4658,6 +5871,13 @@ string_decoder@0.10:
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+string_decoder@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
string_decoder@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
@@ -4679,7 +5899,7 @@ strip-ansi@^4.0.0:
dependencies:
ansi-regex "^3.0.0"
-strip-ansi@^5.1.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==
@@ -4700,6 +5920,11 @@ strip-bom@^2.0.0:
dependencies:
is-utf8 "^0.2.0"
+strip-eof@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+
strip-indent@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
@@ -4719,6 +5944,13 @@ structured-source@^3.0.2:
dependencies:
boundary "^1.0.1"
+supports-color@6.1.0, supports-color@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
+ integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
+ dependencies:
+ has-flag "^3.0.0"
+
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
@@ -4738,13 +5970,6 @@ supports-color@^5.3.0:
dependencies:
has-flag "^3.0.0"
-supports-color@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
- integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
- dependencies:
- has-flag "^3.0.0"
-
table@^5.2.3:
version "5.4.6"
resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
@@ -4755,6 +5980,11 @@ table@^5.2.3:
slice-ansi "^2.1.0"
string-width "^3.0.0"
+tapable@^1.0.0, tapable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2"
+ integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==
+
tar@^2.0.0:
version "2.2.2"
resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40"
@@ -4764,6 +5994,30 @@ tar@^2.0.0:
fstream "^1.0.12"
inherits "2"
+terser-webpack-plugin@^1.4.3:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c"
+ integrity sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==
+ dependencies:
+ cacache "^12.0.2"
+ find-cache-dir "^2.1.0"
+ is-wsl "^1.1.0"
+ schema-utils "^1.0.0"
+ serialize-javascript "^2.1.2"
+ source-map "^0.6.1"
+ terser "^4.1.2"
+ webpack-sources "^1.4.0"
+ worker-farm "^1.7.0"
+
+terser@^4.1.2:
+ version "4.6.4"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.4.tgz#40a0b37afbe5b57e494536815efa68326840fc00"
+ integrity sha512-5fqgBPLgVHZ/fVvqRhhUp9YUiGXhFJ9ZkrZWD9vQtFBR4QIGTnbsb+/kKqSqfgp3WnBwGWAFnedGTtmX1YTn0w==
+ dependencies:
+ commander "^2.20.0"
+ source-map "~0.6.1"
+ source-map-support "~0.5.12"
+
text-table@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
@@ -4797,6 +6051,13 @@ timers-browserify@2.0.2:
dependencies:
setimmediate "^1.0.4"
+timers-browserify@^2.0.4:
+ version "2.0.11"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f"
+ integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==
+ dependencies:
+ setimmediate "^1.0.4"
+
tiny-lr@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab"
@@ -4836,6 +6097,11 @@ to-array@0.1.4:
resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA=
+to-arraybuffer@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
+
to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
@@ -4925,11 +6191,27 @@ trough@^1.0.0:
dependencies:
glob "^7.1.2"
+ts-loader@^6.2.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.2.1.tgz#67939d5772e8a8c6bdaf6277ca023a4812da02ef"
+ integrity sha512-Dd9FekWuABGgjE1g0TlQJ+4dFUfYGbYcs52/HQObE0ZmUNjQlmLAS7xXsSzy23AMaMwipsx5sNHvoEpT2CZq1g==
+ dependencies:
+ chalk "^2.3.0"
+ enhanced-resolve "^4.0.0"
+ loader-utils "^1.0.2"
+ micromatch "^4.0.0"
+ semver "^6.0.0"
+
tslib@^1.9.0:
version "1.11.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.0.tgz#f1f3528301621a53220d58373ae510ff747a66bc"
integrity sha512-BmndXUtiTn/VDDrJzQE7Mm22Ix3PxgLltW9bSNLoeCY31gnG2OPx0QqJnuc9oMIKioYrz487i6K9o4Pdn0j+Kg==
+tty-browserify@0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
+
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
@@ -4967,6 +6249,11 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+typescript@3.4.5:
+ version "3.4.5"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.5.tgz#2d2618d10bb566572b8d7aad5180d84257d70a99"
+ integrity sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==
+
uglify-js@^3.1.4, uglify-js@^3.5.0:
version "3.8.0"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.8.0.tgz#f3541ae97b2f048d7e7e3aa4f39fd8a1f5d7a805"
@@ -5028,6 +6315,20 @@ union-value@^1.0.0:
is-extendable "^0.1.1"
set-value "^2.0.1"
+unique-filename@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
+ integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
+ dependencies:
+ unique-slug "^2.0.0"
+
+unique-slug@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c"
+ integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
+ dependencies:
+ imurmurhash "^0.1.4"
+
unique-stream@^2.0.2:
version "2.3.1"
resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac"
@@ -5085,6 +6386,11 @@ unset-value@^1.0.0:
has-value "^0.3.1"
isobject "^3.0.0"
+upath@^1.1.1:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894"
+ integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==
+
update-section@^0.3.0:
version "0.3.3"
resolved "https://registry.yarnpkg.com/update-section/-/update-section-0.3.3.tgz#458f17820d37820dc60e20b86d94391b00123158"
@@ -5140,6 +6446,13 @@ util@0.10.3:
dependencies:
inherits "2.0.1"
+util@^0.11.0:
+ version "0.11.1"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61"
+ integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==
+ dependencies:
+ inherits "2.0.3"
+
utils-merge@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
@@ -5150,6 +6463,11 @@ uuid@^3.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
+v8-compile-cache@2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe"
+ integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==
+
v8-compile-cache@^2.0.3:
version "2.1.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e"
@@ -5254,11 +6572,25 @@ vinyl@^2.0.0, vinyl@^2.1.0:
remove-trailing-separator "^1.0.1"
replace-ext "^1.0.0"
+vm-browserify@^1.0.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
+ integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
+
void-elements@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=
+watchpack@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
+ integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==
+ dependencies:
+ chokidar "^2.0.2"
+ graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
+
webdriver-js-extender@2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7"
@@ -5284,6 +6616,60 @@ webdriver-manager@^12.0.6:
semver "^5.3.0"
xml2js "^0.4.17"
+webpack-cli@^3.3.11:
+ version "3.3.11"
+ resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631"
+ integrity sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==
+ dependencies:
+ chalk "2.4.2"
+ cross-spawn "6.0.5"
+ enhanced-resolve "4.1.0"
+ findup-sync "3.0.0"
+ global-modules "2.0.0"
+ import-local "2.0.0"
+ interpret "1.2.0"
+ loader-utils "1.2.3"
+ supports-color "6.1.0"
+ v8-compile-cache "2.0.3"
+ yargs "13.2.4"
+
+webpack-sources@^1.4.0, webpack-sources@^1.4.1:
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
+ integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==
+ dependencies:
+ source-list-map "^2.0.0"
+ source-map "~0.6.1"
+
+webpack@^4.42.0:
+ version "4.42.0"
+ resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.42.0.tgz#b901635dd6179391d90740a63c93f76f39883eb8"
+ integrity sha512-EzJRHvwQyBiYrYqhyjW9AqM90dE4+s1/XtCfn7uWg6cS72zH+2VPFAlsnW0+W0cDi0XRjNKUMoJtpSi50+Ph6w==
+ dependencies:
+ "@webassemblyjs/ast" "1.8.5"
+ "@webassemblyjs/helper-module-context" "1.8.5"
+ "@webassemblyjs/wasm-edit" "1.8.5"
+ "@webassemblyjs/wasm-parser" "1.8.5"
+ acorn "^6.2.1"
+ ajv "^6.10.2"
+ ajv-keywords "^3.4.1"
+ chrome-trace-event "^1.0.2"
+ enhanced-resolve "^4.1.0"
+ eslint-scope "^4.0.3"
+ json-parse-better-errors "^1.0.2"
+ loader-runner "^2.4.0"
+ loader-utils "^1.2.3"
+ memory-fs "^0.4.1"
+ micromatch "^3.1.10"
+ mkdirp "^0.5.1"
+ neo-async "^2.6.1"
+ node-libs-browser "^2.2.1"
+ schema-utils "^1.0.0"
+ tapable "^1.1.3"
+ terser-webpack-plugin "^1.4.3"
+ watchpack "^1.6.0"
+ webpack-sources "^1.4.1"
+
websocket-driver@>=0.5.1:
version "0.7.3"
resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9"
@@ -5315,7 +6701,12 @@ which-module@^1.0.0:
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=
-which@1, which@^1.1.1, which@^1.2.1, which@^1.2.14, which@^1.2.9, which@~1.3.0:
+which-module@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
+
+which@1, which@^1.1.1, which@^1.2.1, which@^1.2.14, which@^1.2.9, which@^1.3.1, which@~1.3.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
@@ -5344,6 +6735,13 @@ wordwrap@~0.0.2:
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+worker-farm@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
+ integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==
+ dependencies:
+ errno "~0.1.7"
+
wrap-ansi@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
@@ -5352,6 +6750,15 @@ wrap-ansi@^2.0.0:
string-width "^1.0.1"
strip-ansi "^3.0.1"
+wrap-ansi@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
+ integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
+ dependencies:
+ ansi-styles "^3.2.0"
+ string-width "^3.0.0"
+ strip-ansi "^5.0.0"
+
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@@ -5413,11 +6820,29 @@ y18n@^3.2.1:
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
+y18n@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
+ integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
+
yallist@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yargs-parser@^13.1.0:
+ version "13.1.1"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
+ integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
yargs-parser@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
@@ -5425,6 +6850,23 @@ yargs-parser@^5.0.0:
dependencies:
camelcase "^3.0.0"
+yargs@13.2.4:
+ version "13.2.4"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83"
+ integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==
+ dependencies:
+ cliui "^5.0.0"
+ find-up "^3.0.0"
+ get-caller-file "^2.0.1"
+ os-locale "^3.1.0"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^3.0.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^13.1.0"
+
yargs@^7.0.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"