From abaa6ca73127c99e264a6c0a8532d009e1343e48 Mon Sep 17 00:00:00 2001 From: Anton Shumikhin Date: Mon, 27 May 2019 23:27:25 +0300 Subject: [PATCH 1/3] fix: translate3d style case --- src/resizable.directive.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/resizable.directive.ts b/src/resizable.directive.ts index 7c75111..26ede4f 100644 --- a/src/resizable.directive.ts +++ b/src/resizable.directive.ts @@ -98,7 +98,16 @@ function getElementRect( const transform = transformProperties .map(property => style[property]) .find(value => !!value); - if (transform && transform.includes('translate')) { + if (transform && transform.includes('translate3d')) { + translateX = transform.replace( + /.*translate3d\((.*)px, (.*)px, (.*)px\).*/, + '$1' + ); + translateY = transform.replace( + /.*translate3d\((.*)px, (.*)px, (.*)px\).*/, + '$2' + ); + } else if (transform && transform.includes('translate')) { translateX = transform.replace(/.*translate\((.*)px, (.*)px\).*/, '$1'); translateY = transform.replace(/.*translate\((.*)px, (.*)px\).*/, '$2'); } @@ -536,7 +545,7 @@ export class ResizableDirective implements OnInit, OnChanges, OnDestroy { } return merge( - mouseMove.pipe(take(1)).pipe(map(coords => [, coords])), + mouseMove.pipe(take(1)).pipe(map(coords => [coords])), mouseMove.pipe(pairwise()) ) .pipe( From a2824456cf0e56be188b3a1af13ec4a9804ff83e Mon Sep 17 00:00:00 2001 From: Anton Shumikhin Date: Tue, 28 May 2019 12:41:53 +0300 Subject: [PATCH 2/3] build: push dist to repo --- dist/CHANGELOG.md | 589 ++++++++++ dist/LICENSE | 21 + dist/README.md | 108 ++ dist/angular-resizable-element.d.ts | 4 + dist/angular-resizable-element.metadata.json | 1 + dist/bundles/angular-resizable-element.umd.js | 1047 +++++++++++++++++ .../angular-resizable-element.umd.js.map | 1 + .../angular-resizable-element.umd.min.js | 2 + .../angular-resizable-element.umd.min.js.map | 1 + dist/esm2015/angular-resizable-element.js | 9 + dist/esm2015/index.js | 8 + .../bounding-rectangle.interface.js | 29 + dist/esm2015/interfaces/edges.interface.js | 21 + .../interfaces/resize-event.interface.js | 16 + dist/esm2015/resizable.directive.js | 899 ++++++++++++++ dist/esm2015/resizable.module.js | 16 + dist/esm2015/resize-handle.directive.js | 170 +++ dist/esm5/angular-resizable-element.js | 9 + dist/esm5/index.js | 8 + .../bounding-rectangle.interface.js | 29 + dist/esm5/interfaces/edges.interface.js | 21 + .../esm5/interfaces/resize-event.interface.js | 16 + dist/esm5/resizable.directive.js | 949 +++++++++++++++ dist/esm5/resizable.module.js | 20 + dist/esm5/resize-handle.directive.js | 202 ++++ dist/fesm2015/angular-resizable-element.js | 901 ++++++++++++++ .../fesm2015/angular-resizable-element.js.map | 1 + dist/fesm5/angular-resizable-element.js | 984 ++++++++++++++++ dist/fesm5/angular-resizable-element.js.map | 1 + dist/index.d.ts | 6 + .../bounding-rectangle.interface.d.ts | 14 + dist/interfaces/edges.interface.d.ts | 10 + dist/interfaces/resize-event.interface.d.ts | 9 + dist/package.json | 99 ++ dist/resizable.directive.d.ts | 138 +++ dist/resizable.module.d.ts | 1 + dist/resize-handle.directive.d.ts | 46 + 37 files changed, 6406 insertions(+) create mode 100644 dist/CHANGELOG.md create mode 100644 dist/LICENSE create mode 100644 dist/README.md create mode 100644 dist/angular-resizable-element.d.ts create mode 100644 dist/angular-resizable-element.metadata.json create mode 100644 dist/bundles/angular-resizable-element.umd.js create mode 100644 dist/bundles/angular-resizable-element.umd.js.map create mode 100644 dist/bundles/angular-resizable-element.umd.min.js create mode 100644 dist/bundles/angular-resizable-element.umd.min.js.map create mode 100644 dist/esm2015/angular-resizable-element.js create mode 100644 dist/esm2015/index.js create mode 100644 dist/esm2015/interfaces/bounding-rectangle.interface.js create mode 100644 dist/esm2015/interfaces/edges.interface.js create mode 100644 dist/esm2015/interfaces/resize-event.interface.js create mode 100644 dist/esm2015/resizable.directive.js create mode 100644 dist/esm2015/resizable.module.js create mode 100644 dist/esm2015/resize-handle.directive.js create mode 100644 dist/esm5/angular-resizable-element.js create mode 100644 dist/esm5/index.js create mode 100644 dist/esm5/interfaces/bounding-rectangle.interface.js create mode 100644 dist/esm5/interfaces/edges.interface.js create mode 100644 dist/esm5/interfaces/resize-event.interface.js create mode 100644 dist/esm5/resizable.directive.js create mode 100644 dist/esm5/resizable.module.js create mode 100644 dist/esm5/resize-handle.directive.js create mode 100644 dist/fesm2015/angular-resizable-element.js create mode 100644 dist/fesm2015/angular-resizable-element.js.map create mode 100644 dist/fesm5/angular-resizable-element.js create mode 100644 dist/fesm5/angular-resizable-element.js.map create mode 100644 dist/index.d.ts create mode 100644 dist/interfaces/bounding-rectangle.interface.d.ts create mode 100644 dist/interfaces/edges.interface.d.ts create mode 100644 dist/interfaces/resize-event.interface.d.ts create mode 100644 dist/package.json create mode 100644 dist/resizable.directive.d.ts create mode 100644 dist/resizable.module.d.ts create mode 100644 dist/resize-handle.directive.d.ts diff --git a/dist/CHANGELOG.md b/dist/CHANGELOG.md new file mode 100644 index 0000000..92a04c7 --- /dev/null +++ b/dist/CHANGELOG.md @@ -0,0 +1,589 @@ +# Change Log + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + + +## [3.2.4](https://github.com/mattlewis92/angular-resizable-element/compare/v3.2.3...v3.2.4) (2019-02-28) + + +### Bug Fixes + +* restore compatibility with universal ([210decc](https://github.com/mattlewis92/angular-resizable-element/commit/210decc)), closes [#83](https://github.com/mattlewis92/angular-resizable-element/issues/83) + + + + +## [3.2.3](https://github.com/mattlewis92/angular-resizable-element/compare/v3.2.2...v3.2.3) (2019-02-05) + + +### Bug Fixes + +* allow angular 8 peer dependency ([94dc48d](https://github.com/mattlewis92/angular-resizable-element/commit/94dc48d)) +* deprecate the top level resizeEdges option in favour of resize handles ([2f6ac2d](https://github.com/mattlewis92/angular-resizable-element/commit/2f6ac2d)) + + +### Performance Improvements + +* remove mouse move listeners when only using resize handles ([1185f3a](https://github.com/mattlewis92/angular-resizable-element/commit/1185f3a)) + + + + +## [3.2.2](https://github.com/mattlewis92/angular-resizable-element/compare/v3.2.1...v3.2.2) (2018-08-10) + + +### Bug Fixes + +* don't throw errors when immediately destroying the host component ([56e463b](https://github.com/mattlewis92/angular-resizable-element/commit/56e463b)) + + + + +## [3.2.1](https://github.com/mattlewis92/angular-resizable-element/compare/v3.2.0...v3.2.1) (2018-08-03) + + +### Bug Fixes + +* ensure all resizing events are always emitted ([25d6fa3](https://github.com/mattlewis92/angular-resizable-element/commit/25d6fa3)) + + + + +# [3.2.0](https://github.com/mattlewis92/angular-resizable-element/compare/v3.1.0...v3.2.0) (2018-07-23) + + +### Features + +* allow negative resizing of elements ([560bcb1](https://github.com/mattlewis92/angular-resizable-element/commit/560bcb1)) + + + + +# [3.1.0](https://github.com/mattlewis92/angular-resizable-element/compare/v3.0.0...v3.1.0) (2018-06-19) + + +### Features + +* improve default resize cursors ([37fc88e](https://github.com/mattlewis92/angular-resizable-element/commit/37fc88e)) + + + + +# [3.0.0](https://github.com/mattlewis92/angular-resizable-element/compare/v2.0.0...v3.0.0) (2018-05-09) + + +### Features + +* upgrade to angular 6 ([c7e3de6](https://github.com/mattlewis92/angular-resizable-element/commit/c7e3de6)) + + +### BREAKING CHANGES + +* angular 6 and rxjs 6 or higher are now required to use this package + + + + +# [2.0.0](https://github.com/mattlewis92/angular-resizable-element/compare/v1.2.5...v2.0.0) (2017-12-26) + + +### Features + +* export directives with Directive suffix ([0440bbd](https://github.com/mattlewis92/angular-resizable-element/commit/0440bbd)) +* upgrade to angular 5 ([5d6a576](https://github.com/mattlewis92/angular-resizable-element/commit/5d6a576)) +* use lettable rxjs operators ([af7abf7](https://github.com/mattlewis92/angular-resizable-element/commit/af7abf7)) +* use ng-packagr for bundling the package ([c4519a1](https://github.com/mattlewis92/angular-resizable-element/commit/c4519a1)), closes [#79](https://github.com/mattlewis92/angular-resizable-element/issues/79) [#80](https://github.com/mattlewis92/angular-resizable-element/issues/80) + + +### BREAKING CHANGES + +* the global observable prototype is now no longer modified by this package, you must +import rxjs operators yourself. Also rxjs 5.5 or higher is now required to use this library +* The UMD entry point has changed from `angular-resizable-element/dist/umd/angular-resizable-element.js` to `angular-resizable-element/bundles/angular-resizable-element.umd.js` + +System.js users will need to update their configs +* angular 5 or higher is now required to use this package +* The Resizable import is now ResizableDirective and ResizeHandle is now +ResizeHandleDirective + + + + +## [1.2.5](https://github.com/mattlewis92/angular-resizable-element/compare/v1.2.4...v1.2.5) (2017-12-26) + + +### Bug Fixes + +* **resizeHandle:** allow handles to be dynamically shown ([34342aa](https://github.com/mattlewis92/angular-resizable-element/commit/34342aa)), closes [#68](https://github.com/mattlewis92/angular-resizable-element/issues/68) +* resize elements that have css transforms ([f24a746](https://github.com/mattlewis92/angular-resizable-element/commit/f24a746)), closes [#72](https://github.com/mattlewis92/angular-resizable-element/issues/72) +* set the resize cursor globally when resizing ([71d5a05](https://github.com/mattlewis92/angular-resizable-element/commit/71d5a05)), closes [#70](https://github.com/mattlewis92/angular-resizable-element/issues/70) + + + + +## [1.2.4](https://github.com/mattlewis92/angular-resizable-element/compare/v1.2.3...v1.2.4) (2017-10-21) + + +### Bug Fixes + +* allow angular 5 peer dependency ([25cfe50](https://github.com/mattlewis92/angular-resizable-element/commit/25cfe50)) + + + + +## [1.2.3](https://github.com/mattlewis92/angular-resizable-element/compare/v1.2.2...v1.2.3) (2017-09-28) + + +### Bug Fixes + +* Add startingRect scroll position to cloned node. ([#66](https://github.com/mattlewis92/angular-resizable-element/issues/66)) ([a056154](https://github.com/mattlewis92/angular-resizable-element/commit/a056154)) + + + + +## [1.2.2](https://github.com/mattlewis92/angular-resizable-element/compare/v1.2.1...v1.2.2) (2017-08-28) + + +### Bug Fixes + +* ensure mouse event handlers are triggers outside of the angular zone ([23fc6e5](https://github.com/mattlewis92/angular-resizable-element/commit/23fc6e5)), closes [#65](https://github.com/mattlewis92/angular-resizable-element/issues/65) + + + + +## [1.2.1](https://github.com/mattlewis92/angular-resizable-element/compare/v1.2.0...v1.2.1) (2017-08-06) + + +### Bug Fixes + +* **cursor:** change the cursor back to default on IE11 ([a0323e9](https://github.com/mattlewis92/angular-resizable-element/commit/a0323e9)), closes [#62](https://github.com/mattlewis92/angular-resizable-element/issues/62) + + + + +# [1.2.0](https://github.com/mattlewis92/angular-resizable-element/compare/v1.1.2...v1.2.0) (2017-06-12) + + +### Features + +* export Edges and BoundingRectangle interfaces for use within applications ([10051cd](https://github.com/mattlewis92/angular-resizable-element/commit/10051cd)) + + + + +## [1.1.2](https://github.com/mattlewis92/angular-resizable-element/compare/v1.1.1...v1.1.2) (2017-06-10) + + +### Bug Fixes + +* **dragHandle:** fix drag handles on firefox ([1d15bb4](https://github.com/mattlewis92/angular-resizable-element/commit/1d15bb4)), closes [#54](https://github.com/mattlewis92/angular-resizable-element/issues/54) + + + + +## [1.1.1](https://github.com/mattlewis92/angular-resizable-element/compare/v1.1.0...v1.1.1) (2017-05-21) + + +### Bug Fixes + +* set ghost element width and height on resize start ([be5d727](https://github.com/mattlewis92/angular-resizable-element/commit/be5d727)), closes [#53](https://github.com/mattlewis92/angular-resizable-element/issues/53) + + + + +# [1.1.0](https://github.com/mattlewis92/angular-resizable-element/compare/v1.0.0...v1.1.0) (2017-05-12) + + +### Features + +* add a class to the ghost element ([54be6b7](https://github.com/mattlewis92/angular-resizable-element/commit/54be6b7)) + + + + +# [1.0.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.8.1...v1.0.0) (2017-03-24) + + +### Features + +* **ng4:** upgrade to angular 4 ([4c665d2](https://github.com/mattlewis92/angular-resizable-element/commit/4c665d2)) + + +### BREAKING CHANGES + +* **ng4:** angular 4.0 or higher is now required to use this library. The +[upgrade](http://angularjs.blogspot.co.uk/2017/03/angular-400-now-available.html) should be seamless +for most users. + + + + +## [0.8.1](https://github.com/mattlewis92/angular-resizable-element/compare/v0.8.0...v0.8.1) (2017-03-23) + + +### Performance Improvements + +* throttle mousemove listener events ([05f7f7e](https://github.com/mattlewis92/angular-resizable-element/commit/05f7f7e)) +* use shared mouse event listeners across all resizable instances ([2a4b102](https://github.com/mattlewis92/angular-resizable-element/commit/2a4b102)) + + + + +# [0.8.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.7.2...v0.8.0) (2017-03-16) + + +### Features + +* **ghostElementPositioning:** allow ghost element positioning to be configured ([b77c9fc](https://github.com/mattlewis92/angular-resizable-element/commit/b77c9fc)) +* expose Resizable and ResizeHandle directives ([3633040](https://github.com/mattlewis92/angular-resizable-element/commit/3633040)) + + + + +## [0.7.2](https://github.com/mattlewis92/angular-resizable-element/compare/v0.7.0...v0.7.2) (2017-03-04) + + +### Bug Fixes + +* relax peer dependency warning to allow angular 4 ([8232e66](https://github.com/mattlewis92/angular-resizable-element/commit/8232e66)) + + +### Performance Improvements + +* run all rezize events outside the angular zone ([820612e](https://github.com/mattlewis92/angular-resizable-element/commit/820612e)) +* **resizable:** only register mouse move events when a rezize is active ([a74f9e2](https://github.com/mattlewis92/angular-resizable-element/commit/a74f9e2)) +* **resizeHandle:** dynamically register mouse move event listener ([4b20cde](https://github.com/mattlewis92/angular-resizable-element/commit/4b20cde)) + + + + +# [0.7.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.6.1...v0.7.0) (2017-02-28) + + +### Features + +* **cssClasses:** Gives classes to main element depend on state ([8e3f108](https://github.com/mattlewis92/angular-resizable-element/commit/8e3f108)) +* **cursorPrecision:** allow cursor precision value to be edited ([3ce508d](https://github.com/mattlewis92/angular-resizable-element/commit/3ce508d)) + + + + +## [0.6.1](https://github.com/mattlewis92/angular-resizable-element/compare/v0.6.0...v0.6.1) (2017-02-11) + + +### Bug Fixes + +* **universal:** remove MouseEvent reference ([520abce](https://github.com/mattlewis92/angular-resizable-element/commit/520abce)), closes [#41](https://github.com/mattlewis92/angular-resizable-element/issues/41) + + + + +# [0.6.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.5.7...v0.6.0) (2017-02-04) + + +### Features + +* **resizeCursors:** allow resize cursors to be customised ([99d2f66](https://github.com/mattlewis92/angular-resizable-element/commit/99d2f66)), closes [#40](https://github.com/mattlewis92/angular-resizable-element/issues/40) + + + + +## [0.5.7](https://github.com/mattlewis92/angular-resizable-element/compare/v0.5.6...v0.5.7) (2017-01-30) + + +### Bug Fixes + +* use correct touch event properties ([0ab7d40](https://github.com/mattlewis92/angular-resizable-element/commit/0ab7d40)), closes [#39](https://github.com/mattlewis92/angular-resizable-element/issues/39) + + + + +## [0.5.6](https://github.com/mattlewis92/angular-resizable-element/compare/v0.5.5...v0.5.6) (2017-01-25) + + +### Bug Fixes + +* element should resize on touch events ([aa169c7](https://github.com/mattlewis92/angular-resizable-element/commit/aa169c7)), closes [#36](https://github.com/mattlewis92/angular-resizable-element/issues/36) + + + + +## [0.5.5](https://github.com/mattlewis92/angular-resizable-element/compare/v0.5.4...v0.5.5) (2017-01-11) + + +### Bug Fixes + +* add width and height to cloned node ([75ce122](https://github.com/mattlewis92/angular-resizable-element/commit/75ce122)), closes [#31](https://github.com/mattlewis92/angular-resizable-element/issues/31) +* keep cursor while resizing ([93a5c4e](https://github.com/mattlewis92/angular-resizable-element/commit/93a5c4e)), closes [#33](https://github.com/mattlewis92/angular-resizable-element/issues/33) + + + + +## [0.5.4](https://github.com/mattlewis92/angular-resizable-element/compare/v0.5.3...v0.5.4) (2016-12-11) + + +### Bug Fixes + +* **cursor:** reset the cursor instead of changing it to auto ([514851f](https://github.com/mattlewis92/angular-resizable-element/commit/514851f)) + + + + +## [0.5.3](https://github.com/mattlewis92/angular-resizable-element/compare/v0.5.2...v0.5.3) (2016-11-19) + + +### Bug Fixes + +* unsubscribe all observables when the component is destroyed ([d5ea756](https://github.com/mattlewis92/angular-resizable-element/commit/d5ea756)), closes [#27](https://github.com/mattlewis92/angular-resizable-element/issues/27) + + + + +## [0.5.2](https://github.com/mattlewis92/angular-resizable-element/compare/v0.5.1...v0.5.2) (2016-11-05) + + +### Bug Fixes + +* **aot:** aot compatibility ([9236e02](https://github.com/mattlewis92/angular-resizable-element/commit/9236e02)) + + + + +## [0.5.1](https://github.com/mattlewis92/angular-resizable-element/compare/v0.5.0...v0.5.1) (2016-11-03) + + +### Bug Fixes + +* dont change the cursor when resizing an element ([697c52c](https://github.com/mattlewis92/angular-resizable-element/commit/697c52c)), closes [#24](https://github.com/mattlewis92/angular-resizable-element/issues/24) + + + + +# [0.5.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.4.1...v0.5.0) (2016-10-29) + + +### Bug Fixes + +* fix resizing via a drag handle ([5f7f468](https://github.com/mattlewis92/angular-resizable-element/commit/5f7f468)) +* prevent text from being selected when resizing an element ([5571069](https://github.com/mattlewis92/angular-resizable-element/commit/5571069)), closes [#22](https://github.com/mattlewis92/angular-resizable-element/issues/22) + + +### Features + +* rename the library from angular2-resizable to angular-resizable-element ([927235e](https://github.com/mattlewis92/angular-resizable-element/commit/927235e)), closes [#21](https://github.com/mattlewis92/angular-resizable-element/issues/21) +* rename the resize output to resizing ([9597986](https://github.com/mattlewis92/angular-resizable-element/commit/9597986)), closes [#20](https://github.com/mattlewis92/angular-resizable-element/issues/20) + + +### BREAKING CHANGES + +* The library has been renamed to `angular-resizable-element`. + +The UMD entry point has changed to +``` +node_modules/angular-resizable-element/dist/umd/angular-resizable-element.js +``` +* Before +``` +(resize)="onResize($event)" +``` + +After: +``` +(resizing)="onResizing($event)" +``` + + + + +## [0.4.1](https://github.com/mattlewis92/angular-resizable-element/compare/v0.4.0...v0.4.1) (2016-09-28) + + +### Bug Fixes + +* **typings:** dont include reference to core-js ([68dc84f](https://github.com/mattlewis92/angular-resizable-element/commit/68dc84f)) + + + + +# [0.4.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.3.3...v0.4.0) (2016-09-25) + + +### Features + +* **build:** support offline template compilation ([f3fe12a](https://github.com/mattlewis92/angular-resizable-element/commit/f3fe12a)) + + +### BREAKING CHANGES + +* build: For System.js users the path to the UMD files has changed: + +Before: +``` +node_modules/angular2-resizable/angular2-resizable.js +``` + +After: +``` +node_modules/angular2-resizable/dist/umd/angular2-resizable.js +``` + + + + +## [0.3.3](https://github.com/mattlewis92/angular-resizable-element/compare/v0.3.2...v0.3.3) (2016-09-13) + + +### Bug Fixes + +* **peerDependencies:** allow any versions of angular post RC5 ([cbe088f](https://github.com/mattlewis92/angular-resizable-element/commit/cbe088f)) + + + + +## [0.3.2](https://github.com/mattlewis92/angular-resizable-element/compare/v0.3.1...v0.3.2) (2016-09-03) + + +### Features + +* **angular:** support RC6 ([d5b18cc](https://github.com/mattlewis92/angular-resizable-element/commit/d5b18cc)) + + + + +## [0.3.1](https://github.com/mattlewis92/angular-resizable-element/compare/v0.3.0...v0.3.1) (2016-08-25) + + +### Bug Fixes + +* **rxjs:** use correct rxjs operator imports in dist ([858b3f8](https://github.com/mattlewis92/angular-resizable-element/commit/858b3f8)), closes [#16](https://github.com/mattlewis92/angular-resizable-element/issues/16) + + + + +# [0.3.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.2.1...v0.3.0) (2016-08-12) + + +### Features + +* **events:** rename all outputs to drop the on prefix ([9c76aac](https://github.com/mattlewis92/angular-resizable-element/commit/9c76aac)) +* directive selectors are now camel case instead of dash case ([ffad2ca](https://github.com/mattlewis92/angular-resizable-element/commit/ffad2ca)) +* upgrade to angular RC5 ([9557c0a](https://github.com/mattlewis92/angular-resizable-element/commit/9557c0a)) + + +### BREAKING CHANGES + +* `mwl-resizable` is now `mwlResizable` and `mwl-resize-handle` is now `mwlResizeHandle` +* Angular RC5 is now required + +The Resizable and ResizeHandle directives are now no longer exported. Instead you must use the ResizableModule. See the readme or the demo app for an example of how to do this. +* events: The `onResizeStart` output has been renamed to `resizeStart` + +The `onResize` output has been renamed to `resize` + +The `onResizeEnd` output has been renamed to `resizeEnd` + + + + +## [0.2.1](https://github.com/mattlewis92/angular-resizable-element/compare/v0.2.0...v0.2.1) (2016-07-15) + + +### Bug Fixes + +* **demo:** fix broken demo ([0a5bf11](https://github.com/mattlewis92/angular-resizable-element/commit/0a5bf11)) + + + + +# [0.2.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.1.0...v0.2.0) (2016-07-15) + + +### Bug Fixes + +* create a clone of the ghost element instead of applying styling to the host ([fa73345](https://github.com/mattlewis92/angular-resizable-element/commit/fa73345)), closes [#15](https://github.com/mattlewis92/angular-resizable-element/issues/15) +* only resize when the cursor is within the bounding rectangle ([dedc3bb](https://github.com/mattlewis92/angular-resizable-element/commit/dedc3bb)) + + +### BREAKING CHANGES + +* `enableResizeStyling` has been renamed to `enableGhostResize` + + + + +# [0.1.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.0.3...v0.1.0) (2016-06-26) + + +### Bug Fixes + +* **mousedrag:** cancel the previous mousedrag observable when starting a new drag ([149c1a4](https://github.com/mattlewis92/angular-resizable-element/commit/149c1a4)), closes [#9](https://github.com/mattlewis92/angular-resizable-element/issues/9) +* **onResizeEnd:** call with co-ordinates of last valid resize rather than where the mouse up event w ([eb314fd](https://github.com/mattlewis92/angular-resizable-element/commit/eb314fd)) +* **onResizeStart:** ensure the starting rectangle is a POJO rather than a bounding rectangle ([81fe0b4](https://github.com/mattlewis92/angular-resizable-element/commit/81fe0b4)) +* cancel mousedrag event when either a mouseup or mousedown event fires ([c76be59](https://github.com/mattlewis92/angular-resizable-element/commit/c76be59)) +* disable dragging effects on resizable elements on webkit browsers ([59078e2](https://github.com/mattlewis92/angular-resizable-element/commit/59078e2)) +* renamed directive selector from mwl-resizeable to mwl-resizable ([c60b3f5](https://github.com/mattlewis92/angular-resizable-element/commit/c60b3f5)) + + +### Features + +* **disableResize:** support completely disabling resizing an element ([9f9c54a](https://github.com/mattlewis92/angular-resizable-element/commit/9f9c54a)), closes [#13](https://github.com/mattlewis92/angular-resizable-element/issues/13) +* expose the amount each edge was resized on resize events ([d664038](https://github.com/mattlewis92/angular-resizable-element/commit/d664038)), closes [#11](https://github.com/mattlewis92/angular-resizable-element/issues/11) +* **enableResizeStyling:** make temporary resizing of the element opt-in by default so users can con ([4c59b05](https://github.com/mattlewis92/angular-resizable-element/commit/4c59b05)), closes [#5](https://github.com/mattlewis92/angular-resizable-element/issues/5) +* **resizeEdges:** allow the resize edges to be customised ([60c2e08](https://github.com/mattlewis92/angular-resizable-element/commit/60c2e08)), closes [#8](https://github.com/mattlewis92/angular-resizable-element/issues/8) +* **resizeHandles:** add support for nesting resize handles inside the element ([1af705a](https://github.com/mattlewis92/angular-resizable-element/commit/1af705a)), closes [#10](https://github.com/mattlewis92/angular-resizable-element/issues/10) +* **resizeSnapGrid:** allow resizing to fit to a snap grid ([74424ba](https://github.com/mattlewis92/angular-resizable-element/commit/74424ba)), closes [#3](https://github.com/mattlewis92/angular-resizable-element/issues/3) +* **validate:** provide a way for resize events to be validated ([4da938d](https://github.com/mattlewis92/angular-resizable-element/commit/4da938d)), closes [#12](https://github.com/mattlewis92/angular-resizable-element/issues/12) + + +### BREAKING CHANGES + +* enableResizeStyling: the element will no longer have its styles changed by default when dragging and +resizing. You can now re-enable it by setting `[enableResizeStyling]="true"` on the element. +* the `$event.edges` object values now contain numbers instead of booleans +* - rename the directive from mwl-resizeable to mwl-resizable +* resizeEdges: by default the element is no longer resizable. + +You must specify `[resizeEdges]={top: true, bottom: true, left: true, right: true}` to get the old behaviour back + + + + +## [0.0.3](https://github.com/mattlewis92/angular-resizable-element/compare/v0.0.2...v0.0.3) (2016-06-13) + + +### Bug Fixes + +* import missing rxjs operators ([300ac10](https://github.com/mattlewis92/angular-resizable-element/commit/300ac10)) + + + + +## [0.0.2](https://github.com/mattlewis92/angular-resizable-element/compare/v0.0.1...v0.0.2) (2016-06-13) + + +### Bug Fixes + +* **types:** export Edges and BoundingRectangle types ([fe49114](https://github.com/mattlewis92/angular-resizable-element/commit/fe49114)) +* dont bundle rxjs with the library ([7b1280e](https://github.com/mattlewis92/angular-resizable-element/commit/7b1280e)) + + + + +## 0.0.1 (2016-06-13) + + +### Bug Fixes + +* allow the element to be resized multiple times ([bf497d2](https://github.com/mattlewis92/angular-resizable-element/commit/bf497d2)) +* **drag:** disable user dragging ([053fb0e](https://github.com/mattlewis92/angular-resizable-element/commit/053fb0e)) +* reset element styles on mousedown if there was a previous uncancelled resize ([a8e5cd3](https://github.com/mattlewis92/angular-resizable-element/commit/a8e5cd3)) +* **outputs:** make outputs sync to prevent ui flicker ([032ea5a](https://github.com/mattlewis92/angular-resizable-element/commit/032ea5a)) +* **typescript:** add missing types ([e722a86](https://github.com/mattlewis92/angular-resizable-element/commit/e722a86)) + + +### Features + +* improve transforms, add resize events ([0959a12](https://github.com/mattlewis92/angular-resizable-element/commit/0959a12)) +* initial WIP resizable implementation ([22af52f](https://github.com/mattlewis92/angular-resizable-element/commit/22af52f)) +* show the cursor when mousing over the edge of the element ([f440c87](https://github.com/mattlewis92/angular-resizable-element/commit/f440c87)) +* support resizing from corners ([bac87e3](https://github.com/mattlewis92/angular-resizable-element/commit/bac87e3)), closes [#4](https://github.com/mattlewis92/angular-resizable-element/issues/4) diff --git a/dist/LICENSE b/dist/LICENSE new file mode 100644 index 0000000..cf7d026 --- /dev/null +++ b/dist/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Matt Lewis + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/dist/README.md b/dist/README.md new file mode 100644 index 0000000..7099a59 --- /dev/null +++ b/dist/README.md @@ -0,0 +1,108 @@ +# angular resizable element + +[![Build Status](https://travis-ci.org/mattlewis92/angular-resizable-element.svg?branch=master)](https://travis-ci.org/mattlewis92/angular-resizable-element) +[![codecov](https://codecov.io/gh/mattlewis92/angular-resizable-element/branch/master/graph/badge.svg)](https://codecov.io/gh/mattlewis92/angular-resizable-element) +[![npm version](https://badge.fury.io/js/angular-resizable-element.svg)](http://badge.fury.io/js/angular-resizable-element) +[![devDependency Status](https://david-dm.org/mattlewis92/angular-resizable-element/dev-status.svg)](https://david-dm.org/mattlewis92/angular-resizable-element?type=dev) +[![GitHub issues](https://img.shields.io/github/issues/mattlewis92/angular-resizable-element.svg)](https://github.com/mattlewis92/angular-resizable-element/issues) +[![GitHub stars](https://img.shields.io/github/stars/mattlewis92/angular-resizable-element.svg)](https://github.com/mattlewis92/angular-resizable-element/stargazers) +[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/mattlewis92/angular-resizable-element/master/LICENSE) + +## Demo + +https://mattlewis92.github.io/angular-resizable-element/demo/ + +## Table of contents + +- [About](#about) +- [Installation](#installation) +- [Documentation](#documentation) +- [Development](#development) +- [License](#license) + +## About + +An angular 6.0+ directive that allows an element to be dragged and resized + +## Installation + +Install through npm: + +``` +npm install --save angular-resizable-element +``` + +Then use it in your app like so: + +```typescript +import { Component } from '@angular/core'; +import { ResizeEvent } from 'angular-resizable-element'; + +@Component({ + selector: 'demo-app', + // you should add some more styles to the element. See the demo folder for a more fleshed out example + styles: [ + ` + mwlResizable { + box-sizing: border-box; // required for the enableGhostResize option to work + } + ` + ], + template: ` +
+ ` +}) +export class MyComponent { + onResizeEnd(event: ResizeEvent): void { + console.log('Element was resized', event); + } +} + +// now use within your apps module +import { NgModule } from '@angular/core'; +import { ResizableModule } from 'angular-resizable-element'; + +@NgModule({ + declarations: [MyComponent], + imports: [ResizableModule], + bootstrap: [MyComponent] +}) +class MyModule {} +``` + +You may also find it useful to view the [demo source](https://github.com/mattlewis92/angular-resizable-element/blob/master/demo/demo.component.ts). + +## Documentation + +All documentation is auto-generated from the source and can be viewed here: +https://mattlewis92.github.io/angular-resizable-element/docs/ + +## Development + +### Prepare your environment + +- Install [Node.js](http://nodejs.org/) and NPM (should come with) +- Install local dev dependencies: `npm install` while current directory is this repo + +### Development server + +Run `npm start` to start a development server on port 8000 with auto reload + tests. + +### Testing + +Run `npm test` to run tests once or `npm run test:watch` to continually run tests. + +### Release + +```bash +npm run release +``` + +## License + +MIT diff --git a/dist/angular-resizable-element.d.ts b/dist/angular-resizable-element.d.ts new file mode 100644 index 0000000..67ff29a --- /dev/null +++ b/dist/angular-resizable-element.d.ts @@ -0,0 +1,4 @@ +/** + * Generated bundle index. Do not edit. + */ +export * from './index'; diff --git a/dist/angular-resizable-element.metadata.json b/dist/angular-resizable-element.metadata.json new file mode 100644 index 0000000..aa62123 --- /dev/null +++ b/dist/angular-resizable-element.metadata.json @@ -0,0 +1 @@ +{"__symbolic":"module","version":4,"metadata":{"ResizableModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":4,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"ResizableDirective"},{"__symbolic":"reference","name":"ResizeHandleDirective"}],"exports":[{"__symbolic":"reference","name":"ResizableDirective"},{"__symbolic":"reference","name":"ResizeHandleDirective"}]}]}],"members":{}},"BoundingRectangle":{"__symbolic":"interface"},"Edges":{"__symbolic":"interface"},"ResizeEvent":{"__symbolic":"interface"},"ResizableDirective":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":287,"character":1},"arguments":[{"selector":"[mwlResizable]"}]}],"members":{"validateResize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":294,"character":3}}]}],"resizeEdges":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":300,"character":3}}]}],"enableGhostResize":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":305,"character":3}}]}],"resizeSnapGrid":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":312,"character":3}}]}],"resizeCursors":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":317,"character":3}}]}],"resizeCursorPrecision":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":323,"character":3}}]}],"ghostElementPositioning":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":328,"character":3}}]}],"allowNegativeResizes":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":333,"character":3}}]}],"resizeStart":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":338,"character":3}}]}],"resizing":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":343,"character":3}}]}],"resizeEnd":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":348,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":388,"character":5},"arguments":[{"__symbolic":"reference","module":"@angular/core","name":"PLATFORM_ID","line":388,"character":12}]}],null,null,null],"parameters":[{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":389,"character":22},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":390,"character":16},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":391,"character":18}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"setElementClass":[{"__symbolic":"method"}]}},"ResizeHandleDirective":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":23,"character":1},"arguments":[{"selector":"[mwlResizeHandle]"}]}],"members":{"resizeEdges":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":30,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Renderer2","line":39,"character":22},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":40,"character":21},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":41,"character":18},{"__symbolic":"reference","name":"ResizableDirective"}]}],"ngOnDestroy":[{"__symbolic":"method"}],"onMousedown":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":52,"character":3},"arguments":["touchstart",["$event","$event.touches[0].clientX","$event.touches[0].clientY"]]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":57,"character":3},"arguments":["mousedown",["$event","$event.clientX","$event.clientY"]]}]}],"onMouseup":[{"__symbolic":"method","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":102,"character":3},"arguments":["touchend",["$event.changedTouches[0].clientX","$event.changedTouches[0].clientY"]]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":106,"character":3},"arguments":["touchcancel",["$event.changedTouches[0].clientX","$event.changedTouches[0].clientY"]]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"HostListener","line":110,"character":3},"arguments":["mouseup",["$event.clientX","$event.clientY"]]}]}],"onMousemove":[{"__symbolic":"method"}],"unsubscribeEventListeners":[{"__symbolic":"method"}]}}},"origins":{"ResizableModule":"./resizable.module","BoundingRectangle":"./interfaces/bounding-rectangle.interface","Edges":"./interfaces/edges.interface","ResizeEvent":"./interfaces/resize-event.interface","ResizableDirective":"./resizable.directive","ResizeHandleDirective":"./resize-handle.directive"},"importAs":"angular-resizable-element"} \ No newline at end of file diff --git a/dist/bundles/angular-resizable-element.umd.js b/dist/bundles/angular-resizable-element.umd.js new file mode 100644 index 0000000..e06d550 --- /dev/null +++ b/dist/bundles/angular-resizable-element.umd.js @@ -0,0 +1,1047 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/common'), require('rxjs'), require('rxjs/operators'), require('@angular/core')) : + typeof define === 'function' && define.amd ? define('angular-resizable-element', ['exports', '@angular/common', 'rxjs', 'rxjs/operators', '@angular/core'], factory) : + (factory((global['angular-resizable-element'] = {}),global.ng.common,global.rxjs,global.rxjs.operators,global.ng.core)); +}(this, (function (exports,common,rxjs,operators,core) { 'use strict'; + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. All rights reserved. + Licensed under the Apache License, Version 2.0 (the "License"); you may not use + this file except in compliance with the License. You may obtain a copy of the + License at http://www.apache.org/licenses/LICENSE-2.0 + + THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED + WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, + MERCHANTABLITY OR NON-INFRINGEMENT. + + See the Apache Version 2.0 License for specific language governing permissions + and limitations under the License. + ***************************************************************************** */ + var __assign = function () { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + function __read(o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) + return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) + ar.push(r.value); + } + catch (error) { + e = { error: error }; + } + finally { + try { + if (r && !r.done && (m = i["return"])) + m.call(i); + } + finally { + if (e) + throw e.error; + } + } + return ar; + } + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * @param {?} value1 + * @param {?} value2 + * @param {?=} precision + * @return {?} + */ + function isNumberCloseTo(value1, value2, precision) { + if (precision === void 0) { + precision = 3; + } + /** @type {?} */ + var diff = Math.abs(value1 - value2); + return diff < precision; + } + /** + * @param {?} startingRect + * @param {?} edges + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + function getNewBoundingRectangle(startingRect, edges, clientX, clientY) { + /** @type {?} */ + var newBoundingRect = { + top: startingRect.top, + bottom: startingRect.bottom, + left: startingRect.left, + right: startingRect.right + }; + if (edges.top) { + newBoundingRect.top += clientY; + } + if (edges.bottom) { + newBoundingRect.bottom += clientY; + } + if (edges.left) { + newBoundingRect.left += clientX; + } + if (edges.right) { + newBoundingRect.right += clientX; + } + newBoundingRect.height = newBoundingRect.bottom - newBoundingRect.top; + newBoundingRect.width = newBoundingRect.right - newBoundingRect.left; + return newBoundingRect; + } + /** + * @param {?} element + * @param {?} ghostElementPositioning + * @return {?} + */ + function getElementRect(element, ghostElementPositioning) { + /** @type {?} */ + var translateX = 0; + /** @type {?} */ + var translateY = 0; + /** @type {?} */ + var style = element.nativeElement.style; + /** @type {?} */ + var transformProperties = [ + 'transform', + '-ms-transform', + '-moz-transform', + '-o-transform' + ]; + /** @type {?} */ + var transform = transformProperties + .map(function (property) { return style[property]; }) + .find(function (value) { return !!value; }); + if (transform && transform.includes('translate3d')) { + translateX = transform.replace(/.*translate3d\((.*)px, (.*)px, (.*)px\).*/, '$1'); + translateY = transform.replace(/.*translate3d\((.*)px, (.*)px, (.*)px\).*/, '$2'); + } + else if (transform && transform.includes('translate')) { + translateX = transform.replace(/.*translate\((.*)px, (.*)px\).*/, '$1'); + translateY = transform.replace(/.*translate\((.*)px, (.*)px\).*/, '$2'); + } + if (ghostElementPositioning === 'absolute') { + return { + height: element.nativeElement.offsetHeight, + width: element.nativeElement.offsetWidth, + top: element.nativeElement.offsetTop - translateY, + bottom: element.nativeElement.offsetHeight + + element.nativeElement.offsetTop - + translateY, + left: element.nativeElement.offsetLeft - translateX, + right: element.nativeElement.offsetWidth + + element.nativeElement.offsetLeft - + translateX + }; + } + else { + /** @type {?} */ + var boundingRect = element.nativeElement.getBoundingClientRect(); + return { + height: boundingRect.height, + width: boundingRect.width, + top: boundingRect.top - translateY, + bottom: boundingRect.bottom - translateY, + left: boundingRect.left - translateX, + right: boundingRect.right - translateX, + scrollTop: element.nativeElement.scrollTop, + scrollLeft: element.nativeElement.scrollLeft + }; + } + } + /** + * @param {?} __0 + * @return {?} + */ + function isWithinBoundingY(_a) { + var clientY = _a.clientY, rect = _a.rect; + return clientY >= rect.top && clientY <= rect.bottom; + } + /** + * @param {?} __0 + * @return {?} + */ + function isWithinBoundingX(_a) { + var clientX = _a.clientX, rect = _a.rect; + return clientX >= rect.left && clientX <= rect.right; + } + /** + * @param {?} __0 + * @return {?} + */ + function getResizeEdges(_a) { + var clientX = _a.clientX, clientY = _a.clientY, elm = _a.elm, allowedEdges = _a.allowedEdges, cursorPrecision = _a.cursorPrecision; + /** @type {?} */ + var elmPosition = elm.nativeElement.getBoundingClientRect(); + /** @type {?} */ + var edges = {}; + if (allowedEdges.left && + isNumberCloseTo(clientX, elmPosition.left, cursorPrecision) && + isWithinBoundingY({ clientY: clientY, rect: elmPosition })) { + edges.left = true; + } + if (allowedEdges.right && + isNumberCloseTo(clientX, elmPosition.right, cursorPrecision) && + isWithinBoundingY({ clientY: clientY, rect: elmPosition })) { + edges.right = true; + } + if (allowedEdges.top && + isNumberCloseTo(clientY, elmPosition.top, cursorPrecision) && + isWithinBoundingX({ clientX: clientX, rect: elmPosition })) { + edges.top = true; + } + if (allowedEdges.bottom && + isNumberCloseTo(clientY, elmPosition.bottom, cursorPrecision) && + isWithinBoundingX({ clientX: clientX, rect: elmPosition })) { + edges.bottom = true; + } + return edges; + } + /** @type {?} */ + var DEFAULT_RESIZE_CURSORS = Object.freeze({ + topLeft: 'nw-resize', + topRight: 'ne-resize', + bottomLeft: 'sw-resize', + bottomRight: 'se-resize', + leftOrRight: 'col-resize', + topOrBottom: 'row-resize' + }); + /** + * @param {?} edges + * @param {?} cursors + * @return {?} + */ + function getResizeCursor(edges, cursors) { + if (edges.left && edges.top) { + return cursors.topLeft; + } + else if (edges.right && edges.top) { + return cursors.topRight; + } + else if (edges.left && edges.bottom) { + return cursors.bottomLeft; + } + else if (edges.right && edges.bottom) { + return cursors.bottomRight; + } + else if (edges.left || edges.right) { + return cursors.leftOrRight; + } + else if (edges.top || edges.bottom) { + return cursors.topOrBottom; + } + else { + return ''; + } + } + /** + * @param {?} __0 + * @return {?} + */ + function getEdgesDiff(_a) { + var edges = _a.edges, initialRectangle = _a.initialRectangle, newRectangle = _a.newRectangle; + /** @type {?} */ + var edgesDiff = {}; + Object.keys(edges).forEach(function (edge) { + edgesDiff[edge] = (newRectangle[edge] || 0) - (initialRectangle[edge] || 0); + }); + return edgesDiff; + } + /** @type {?} */ + var RESIZE_ACTIVE_CLASS = 'resize-active'; + /** @type {?} */ + var RESIZE_LEFT_HOVER_CLASS = 'resize-left-hover'; + /** @type {?} */ + var RESIZE_RIGHT_HOVER_CLASS = 'resize-right-hover'; + /** @type {?} */ + var RESIZE_TOP_HOVER_CLASS = 'resize-top-hover'; + /** @type {?} */ + var RESIZE_BOTTOM_HOVER_CLASS = 'resize-bottom-hover'; + /** @type {?} */ + var RESIZE_GHOST_ELEMENT_CLASS = 'resize-ghost-element'; + /** @type {?} */ + var MOUSE_MOVE_THROTTLE_MS = 50; + /** + * Place this on an element to make it resizable. For example: + * + * ```html + *
+ *
+ * ``` + */ + var ResizableDirective = /** @class */ (function () { + /** + * @hidden + */ + function ResizableDirective(platformId, renderer, elm, zone) { + this.platformId = platformId; + this.renderer = renderer; + this.elm = elm; + this.zone = zone; + /** + * The edges that an element can be resized from. Pass an object like `{top: true, bottom: false}`. By default no edges can be resized. + * @deprecated use a resize handle instead that positions itself to the side of the element you would like to resize + */ + this.resizeEdges = {}; + /** + * Set to `true` to enable a temporary resizing effect of the element in between the `resizeStart` and `resizeEnd` events. + */ + this.enableGhostResize = false; + /** + * A snap grid that resize events will be locked to. + * + * e.g. to only allow the element to be resized every 10px set it to `{left: 10, right: 10}` + */ + this.resizeSnapGrid = {}; + /** + * The mouse cursors that will be set on the resize edges + */ + this.resizeCursors = DEFAULT_RESIZE_CURSORS; + /** + * Mouse over thickness to active cursor. + * @deprecated invalid when you migrate to use resize handles instead of setting resizeEdges on the element + */ + this.resizeCursorPrecision = 3; + /** + * Define the positioning of the ghost element (can be fixed or absolute) + */ + this.ghostElementPositioning = 'fixed'; + /** + * Allow elements to be resized to negative dimensions + */ + this.allowNegativeResizes = false; + /** + * Called when the mouse is pressed and a resize event is about to begin. `$event` is a `ResizeEvent` object. + */ + this.resizeStart = new core.EventEmitter(); + /** + * Called as the mouse is dragged after a resize event has begun. `$event` is a `ResizeEvent` object. + */ + this.resizing = new core.EventEmitter(); + /** + * Called after the mouse is released after a resize event. `$event` is a `ResizeEvent` object. + */ + this.resizeEnd = new core.EventEmitter(); + /** + * @hidden + */ + this.mouseup = new rxjs.Subject(); + /** + * @hidden + */ + this.mousedown = new rxjs.Subject(); + /** + * @hidden + */ + this.mousemove = new rxjs.Subject(); + this.destroy$ = new rxjs.Subject(); + this.resizeEdges$ = new rxjs.Subject(); + this.pointerEventListeners = PointerEventListeners.getInstance(renderer, zone); + } + /** + * @hidden + */ + /** + * @hidden + * @return {?} + */ + ResizableDirective.prototype.ngOnInit = /** + * @hidden + * @return {?} + */ + function () { + var _this = this; + // TODO - use some fancy Observable.merge's for this + this.pointerEventListeners.pointerDown + .pipe(operators.takeUntil(this.destroy$)) + .subscribe(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY; + _this.mousedown.next({ clientX: clientX, clientY: clientY }); + }); + this.pointerEventListeners.pointerMove + .pipe(operators.takeUntil(this.destroy$)) + .subscribe(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY, event = _a.event; + _this.mousemove.next({ clientX: clientX, clientY: clientY, event: event }); + }); + this.pointerEventListeners.pointerUp + .pipe(operators.takeUntil(this.destroy$)) + .subscribe(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY; + _this.mouseup.next({ clientX: clientX, clientY: clientY }); + }); + /** @type {?} */ + var currentResize; + /** @type {?} */ + var removeGhostElement = function () { + if (currentResize && currentResize.clonedNode) { + _this.elm.nativeElement.parentElement.removeChild(currentResize.clonedNode); + _this.renderer.setStyle(_this.elm.nativeElement, 'visibility', 'inherit'); + } + }; + /** @type {?} */ + var getResizeCursors = function () { + return __assign({}, DEFAULT_RESIZE_CURSORS, _this.resizeCursors); + }; + /** @type {?} */ + var mouseMove = this.mousemove.pipe(operators.share()); + mouseMove.pipe(operators.filter(function () { return !!currentResize; })).subscribe(function (_a) { + var event = _a.event; + event.preventDefault(); + }); + this.resizeEdges$ + .pipe(operators.startWith(this.resizeEdges), operators.map(function () { + return (_this.resizeEdges && + Object.keys(_this.resizeEdges).some(function (edge) { return !!_this.resizeEdges[edge]; })); + }), operators.switchMap(function (legacyResizeEdgesEnabled) { + return legacyResizeEdgesEnabled ? mouseMove : rxjs.EMPTY; + }), operators.auditTime(MOUSE_MOVE_THROTTLE_MS)) + .subscribe(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY; + /** @type {?} */ + var resizeEdges = getResizeEdges({ + clientX: clientX, + clientY: clientY, + elm: _this.elm, + allowedEdges: _this.resizeEdges, + cursorPrecision: _this.resizeCursorPrecision + }); + /** @type {?} */ + var resizeCursors = getResizeCursors(); + if (!currentResize) { + /** @type {?} */ + var cursor = getResizeCursor(resizeEdges, resizeCursors); + _this.renderer.setStyle(_this.elm.nativeElement, 'cursor', cursor); + } + _this.setElementClass(_this.elm, RESIZE_LEFT_HOVER_CLASS, resizeEdges.left === true); + _this.setElementClass(_this.elm, RESIZE_RIGHT_HOVER_CLASS, resizeEdges.right === true); + _this.setElementClass(_this.elm, RESIZE_TOP_HOVER_CLASS, resizeEdges.top === true); + _this.setElementClass(_this.elm, RESIZE_BOTTOM_HOVER_CLASS, resizeEdges.bottom === true); + }); + /** @type {?} */ + var mousedrag = this.mousedown + .pipe(operators.mergeMap(function (startCoords) { + /** + * @param {?} moveCoords + * @return {?} + */ + function getDiff(moveCoords) { + return { + clientX: moveCoords.clientX - startCoords.clientX, + clientY: moveCoords.clientY - startCoords.clientY + }; + } + /** @type {?} */ + var getSnapGrid = function () { + /** @type {?} */ + var snapGrid = { x: 1, y: 1 }; + if (currentResize) { + if (_this.resizeSnapGrid.left && currentResize.edges.left) { + snapGrid.x = +_this.resizeSnapGrid.left; + } + else if (_this.resizeSnapGrid.right && + currentResize.edges.right) { + snapGrid.x = +_this.resizeSnapGrid.right; + } + if (_this.resizeSnapGrid.top && currentResize.edges.top) { + snapGrid.y = +_this.resizeSnapGrid.top; + } + else if (_this.resizeSnapGrid.bottom && + currentResize.edges.bottom) { + snapGrid.y = +_this.resizeSnapGrid.bottom; + } + } + return snapGrid; + }; + /** + * @param {?} coords + * @param {?} snapGrid + * @return {?} + */ + function getGrid(coords, snapGrid) { + return { + x: Math.ceil(coords.clientX / snapGrid.x), + y: Math.ceil(coords.clientY / snapGrid.y) + }; + } + return rxjs.merge(mouseMove.pipe(operators.take(1)).pipe(operators.map(function (coords) { return [coords]; })), mouseMove.pipe(operators.pairwise())) + .pipe(operators.map(function (_a) { + var _b = __read(_a, 2), previousCoords = _b[0], newCoords = _b[1]; + return [ + previousCoords ? getDiff(previousCoords) : previousCoords, + getDiff(newCoords) + ]; + })) + .pipe(operators.filter(function (_a) { + var _b = __read(_a, 2), previousCoords = _b[0], newCoords = _b[1]; + if (!previousCoords) { + return true; + } + /** @type {?} */ + var snapGrid = getSnapGrid(); + /** @type {?} */ + var previousGrid = getGrid(previousCoords, snapGrid); + /** @type {?} */ + var newGrid = getGrid(newCoords, snapGrid); + return (previousGrid.x !== newGrid.x || previousGrid.y !== newGrid.y); + })) + .pipe(operators.map(function (_a) { + var _b = __read(_a, 2), newCoords = _b[1]; + /** @type {?} */ + var snapGrid = getSnapGrid(); + return { + clientX: Math.round(newCoords.clientX / snapGrid.x) * snapGrid.x, + clientY: Math.round(newCoords.clientY / snapGrid.y) * snapGrid.y + }; + })) + .pipe(operators.takeUntil(rxjs.merge(_this.mouseup, _this.mousedown))); + })) + .pipe(operators.filter(function () { return !!currentResize; })); + mousedrag + .pipe(operators.map(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY; + return getNewBoundingRectangle(( /** @type {?} */(currentResize)).startingRect, ( /** @type {?} */(currentResize)).edges, clientX, clientY); + })) + .pipe(operators.filter(function (newBoundingRect) { + return (_this.allowNegativeResizes || + !!(newBoundingRect.height && + newBoundingRect.width && + newBoundingRect.height > 0 && + newBoundingRect.width > 0)); + })) + .pipe(operators.filter(function (newBoundingRect) { + return _this.validateResize + ? _this.validateResize({ + rectangle: newBoundingRect, + edges: getEdgesDiff({ + edges: ( /** @type {?} */(currentResize)).edges, + initialRectangle: ( /** @type {?} */(currentResize)).startingRect, + newRectangle: newBoundingRect + }) + }) + : true; + })) + .subscribe(function (newBoundingRect) { + if (currentResize && currentResize.clonedNode) { + _this.renderer.setStyle(currentResize.clonedNode, 'height', newBoundingRect.height + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'width', newBoundingRect.width + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'top', newBoundingRect.top + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'left', newBoundingRect.left + "px"); + } + _this.zone.run(function () { + _this.resizing.emit({ + edges: getEdgesDiff({ + edges: ( /** @type {?} */(currentResize)).edges, + initialRectangle: ( /** @type {?} */(currentResize)).startingRect, + newRectangle: newBoundingRect + }), + rectangle: newBoundingRect + }); + }); + ( /** @type {?} */(currentResize)).currentRect = newBoundingRect; + }); + this.mousedown + .pipe(operators.map(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY, edges = _a.edges; + return (edges || + getResizeEdges({ + clientX: clientX, + clientY: clientY, + elm: _this.elm, + allowedEdges: _this.resizeEdges, + cursorPrecision: _this.resizeCursorPrecision + })); + })) + .pipe(operators.filter(function (edges) { + return Object.keys(edges).length > 0; + })) + .subscribe(function (edges) { + if (currentResize) { + removeGhostElement(); + } + /** @type {?} */ + var startingRect = getElementRect(_this.elm, _this.ghostElementPositioning); + currentResize = { + edges: edges, + startingRect: startingRect, + currentRect: startingRect + }; + /** @type {?} */ + var resizeCursors = getResizeCursors(); + /** @type {?} */ + var cursor = getResizeCursor(currentResize.edges, resizeCursors); + _this.renderer.setStyle(document.body, 'cursor', cursor); + _this.setElementClass(_this.elm, RESIZE_ACTIVE_CLASS, true); + if (_this.enableGhostResize) { + currentResize.clonedNode = _this.elm.nativeElement.cloneNode(true); + _this.elm.nativeElement.parentElement.appendChild(currentResize.clonedNode); + _this.renderer.setStyle(_this.elm.nativeElement, 'visibility', 'hidden'); + _this.renderer.setStyle(currentResize.clonedNode, 'position', _this.ghostElementPositioning); + _this.renderer.setStyle(currentResize.clonedNode, 'left', currentResize.startingRect.left + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'top', currentResize.startingRect.top + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'height', currentResize.startingRect.height + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'width', currentResize.startingRect.width + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'cursor', getResizeCursor(currentResize.edges, resizeCursors)); + _this.renderer.addClass(currentResize.clonedNode, RESIZE_GHOST_ELEMENT_CLASS); + ( /** @type {?} */(currentResize.clonedNode)).scrollTop = ( /** @type {?} */(currentResize.startingRect + .scrollTop)); + ( /** @type {?} */(currentResize.clonedNode)).scrollLeft = ( /** @type {?} */(currentResize.startingRect + .scrollLeft)); + } + _this.zone.run(function () { + _this.resizeStart.emit({ + edges: getEdgesDiff({ + edges: edges, + initialRectangle: startingRect, + newRectangle: startingRect + }), + rectangle: getNewBoundingRectangle(startingRect, {}, 0, 0) + }); + }); + }); + this.mouseup.subscribe(function () { + if (currentResize) { + _this.renderer.removeClass(_this.elm.nativeElement, RESIZE_ACTIVE_CLASS); + _this.renderer.setStyle(document.body, 'cursor', ''); + _this.renderer.setStyle(_this.elm.nativeElement, 'cursor', ''); + _this.zone.run(function () { + _this.resizeEnd.emit({ + edges: getEdgesDiff({ + edges: ( /** @type {?} */(currentResize)).edges, + initialRectangle: ( /** @type {?} */(currentResize)).startingRect, + newRectangle: ( /** @type {?} */(currentResize)).currentRect + }), + rectangle: ( /** @type {?} */(currentResize)).currentRect + }); + }); + removeGhostElement(); + currentResize = null; + } + }); + }; + /** + * @hidden + */ + /** + * @hidden + * @param {?} changes + * @return {?} + */ + ResizableDirective.prototype.ngOnChanges = /** + * @hidden + * @param {?} changes + * @return {?} + */ + function (changes) { + if (changes.resizeEdges) { + this.resizeEdges$.next(this.resizeEdges); + } + }; + /** + * @hidden + */ + /** + * @hidden + * @return {?} + */ + ResizableDirective.prototype.ngOnDestroy = /** + * @hidden + * @return {?} + */ + function () { + // browser check for angular universal, because it doesn't know what document is + if (common.isPlatformBrowser(this.platformId)) { + this.renderer.setStyle(document.body, 'cursor', ''); + } + this.mousedown.complete(); + this.mouseup.complete(); + this.mousemove.complete(); + this.resizeEdges$.complete(); + this.destroy$.next(); + }; + /** + * @private + * @param {?} elm + * @param {?} name + * @param {?} add + * @return {?} + */ + ResizableDirective.prototype.setElementClass = /** + * @private + * @param {?} elm + * @param {?} name + * @param {?} add + * @return {?} + */ + function (elm, name, add) { + if (add) { + this.renderer.addClass(elm.nativeElement, name); + } + else { + this.renderer.removeClass(elm.nativeElement, name); + } + }; + ResizableDirective.decorators = [ + { type: core.Directive, args: [{ + selector: '[mwlResizable]' + },] } + ]; + /** @nocollapse */ + ResizableDirective.ctorParameters = function () { + return [ + { type: undefined, decorators: [{ type: core.Inject, args: [core.PLATFORM_ID,] }] }, + { type: core.Renderer2 }, + { type: core.ElementRef }, + { type: core.NgZone } + ]; + }; + ResizableDirective.propDecorators = { + validateResize: [{ type: core.Input }], + resizeEdges: [{ type: core.Input }], + enableGhostResize: [{ type: core.Input }], + resizeSnapGrid: [{ type: core.Input }], + resizeCursors: [{ type: core.Input }], + resizeCursorPrecision: [{ type: core.Input }], + ghostElementPositioning: [{ type: core.Input }], + allowNegativeResizes: [{ type: core.Input }], + resizeStart: [{ type: core.Output }], + resizing: [{ type: core.Output }], + resizeEnd: [{ type: core.Output }] + }; + return ResizableDirective; + }()); + var PointerEventListeners = /** @class */ (function () { + function PointerEventListeners(renderer, zone) { + this.pointerDown = new rxjs.Observable(function (observer) { + /** @type {?} */ + var unsubscribeMouseDown; + /** @type {?} */ + var unsubscribeTouchStart; + zone.runOutsideAngular(function () { + unsubscribeMouseDown = renderer.listen('document', 'mousedown', function (event) { + observer.next({ + clientX: event.clientX, + clientY: event.clientY, + event: event + }); + }); + unsubscribeTouchStart = renderer.listen('document', 'touchstart', function (event) { + observer.next({ + clientX: event.touches[0].clientX, + clientY: event.touches[0].clientY, + event: event + }); + }); + }); + return function () { + unsubscribeMouseDown(); + unsubscribeTouchStart(); + }; + }).pipe(operators.share()); + this.pointerMove = new rxjs.Observable(function (observer) { + /** @type {?} */ + var unsubscribeMouseMove; + /** @type {?} */ + var unsubscribeTouchMove; + zone.runOutsideAngular(function () { + unsubscribeMouseMove = renderer.listen('document', 'mousemove', function (event) { + observer.next({ + clientX: event.clientX, + clientY: event.clientY, + event: event + }); + }); + unsubscribeTouchMove = renderer.listen('document', 'touchmove', function (event) { + observer.next({ + clientX: event.targetTouches[0].clientX, + clientY: event.targetTouches[0].clientY, + event: event + }); + }); + }); + return function () { + unsubscribeMouseMove(); + unsubscribeTouchMove(); + }; + }).pipe(operators.share()); + this.pointerUp = new rxjs.Observable(function (observer) { + /** @type {?} */ + var unsubscribeMouseUp; + /** @type {?} */ + var unsubscribeTouchEnd; + /** @type {?} */ + var unsubscribeTouchCancel; + zone.runOutsideAngular(function () { + unsubscribeMouseUp = renderer.listen('document', 'mouseup', function (event) { + observer.next({ + clientX: event.clientX, + clientY: event.clientY, + event: event + }); + }); + unsubscribeTouchEnd = renderer.listen('document', 'touchend', function (event) { + observer.next({ + clientX: event.changedTouches[0].clientX, + clientY: event.changedTouches[0].clientY, + event: event + }); + }); + unsubscribeTouchCancel = renderer.listen('document', 'touchcancel', function (event) { + observer.next({ + clientX: event.changedTouches[0].clientX, + clientY: event.changedTouches[0].clientY, + event: event + }); + }); + }); + return function () { + unsubscribeMouseUp(); + unsubscribeTouchEnd(); + unsubscribeTouchCancel(); + }; + }).pipe(operators.share()); + } + // tslint:disable-line + /** + * @param {?} renderer + * @param {?} zone + * @return {?} + */ + PointerEventListeners.getInstance = + // tslint:disable-line + /** + * @param {?} renderer + * @param {?} zone + * @return {?} + */ + function (renderer, zone) { + if (!PointerEventListeners.instance) { + PointerEventListeners.instance = new PointerEventListeners(renderer, zone); + } + return PointerEventListeners.instance; + }; + return PointerEventListeners; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + /** + * An element placed inside a `mwlResizable` directive to be used as a drag and resize handle + * + * For example + * + * ```html + *
+ *
+ *
+ * ``` + */ + var ResizeHandleDirective = /** @class */ (function () { + function ResizeHandleDirective(renderer, element, zone, resizable) { + this.renderer = renderer; + this.element = element; + this.zone = zone; + this.resizable = resizable; + /** + * The `Edges` object that contains the edges of the parent element that dragging the handle will trigger a resize on + */ + this.resizeEdges = {}; + this.eventListeners = {}; + } + /** + * @return {?} + */ + ResizeHandleDirective.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this.unsubscribeEventListeners(); + }; + /** + * @hidden + */ + /** + * @hidden + * @param {?} event + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + ResizeHandleDirective.prototype.onMousedown = /** + * @hidden + * @param {?} event + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + function (event, clientX, clientY) { + var _this = this; + event.preventDefault(); + this.zone.runOutsideAngular(function () { + if (!_this.eventListeners.touchmove) { + _this.eventListeners.touchmove = _this.renderer.listen(_this.element.nativeElement, 'touchmove', function (touchMoveEvent) { + _this.onMousemove(touchMoveEvent, touchMoveEvent.targetTouches[0].clientX, touchMoveEvent.targetTouches[0].clientY); + }); + } + if (!_this.eventListeners.mousemove) { + _this.eventListeners.mousemove = _this.renderer.listen(_this.element.nativeElement, 'mousemove', function (mouseMoveEvent) { + _this.onMousemove(mouseMoveEvent, mouseMoveEvent.clientX, mouseMoveEvent.clientY); + }); + } + _this.resizable.mousedown.next({ + clientX: clientX, + clientY: clientY, + edges: _this.resizeEdges + }); + }); + }; + /** + * @hidden + */ + /** + * @hidden + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + ResizeHandleDirective.prototype.onMouseup = /** + * @hidden + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + function (clientX, clientY) { + var _this = this; + this.zone.runOutsideAngular(function () { + _this.unsubscribeEventListeners(); + _this.resizable.mouseup.next({ + clientX: clientX, + clientY: clientY, + edges: _this.resizeEdges + }); + }); + }; + /** + * @private + * @param {?} event + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + ResizeHandleDirective.prototype.onMousemove = /** + * @private + * @param {?} event + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + function (event, clientX, clientY) { + this.resizable.mousemove.next({ + clientX: clientX, + clientY: clientY, + edges: this.resizeEdges, + event: event + }); + }; + /** + * @private + * @return {?} + */ + ResizeHandleDirective.prototype.unsubscribeEventListeners = /** + * @private + * @return {?} + */ + function () { + var _this = this; + Object.keys(this.eventListeners).forEach(function (type) { + (( /** @type {?} */(_this))).eventListeners[type](); + delete _this.eventListeners[type]; + }); + }; + ResizeHandleDirective.decorators = [ + { type: core.Directive, args: [{ + selector: '[mwlResizeHandle]' + },] } + ]; + /** @nocollapse */ + ResizeHandleDirective.ctorParameters = function () { + return [ + { type: core.Renderer2 }, + { type: core.ElementRef }, + { type: core.NgZone }, + { type: ResizableDirective } + ]; + }; + ResizeHandleDirective.propDecorators = { + resizeEdges: [{ type: core.Input }], + onMousedown: [{ type: core.HostListener, args: ['touchstart', [ + '$event', + '$event.touches[0].clientX', + '$event.touches[0].clientY' + ],] }, { type: core.HostListener, args: ['mousedown', ['$event', '$event.clientX', '$event.clientY'],] }], + onMouseup: [{ type: core.HostListener, args: ['touchend', [ + '$event.changedTouches[0].clientX', + '$event.changedTouches[0].clientY' + ],] }, { type: core.HostListener, args: ['touchcancel', [ + '$event.changedTouches[0].clientX', + '$event.changedTouches[0].clientY' + ],] }, { type: core.HostListener, args: ['mouseup', ['$event.clientX', '$event.clientY'],] }] + }; + return ResizeHandleDirective; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + var ResizableModule = /** @class */ (function () { + function ResizableModule() { + } + ResizableModule.decorators = [ + { type: core.NgModule, args: [{ + declarations: [ResizableDirective, ResizeHandleDirective], + exports: [ResizableDirective, ResizeHandleDirective] + },] } + ]; + return ResizableModule; + }()); + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + + /** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + + exports.ResizableDirective = ResizableDirective; + exports.ResizeHandleDirective = ResizeHandleDirective; + exports.ResizableModule = ResizableModule; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); + +//# sourceMappingURL=angular-resizable-element.umd.js.map \ No newline at end of file diff --git a/dist/bundles/angular-resizable-element.umd.js.map b/dist/bundles/angular-resizable-element.umd.js.map new file mode 100644 index 0000000..c363575 --- /dev/null +++ b/dist/bundles/angular-resizable-element.umd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"angular-resizable-element.umd.js.map","sources":["node_modules/tslib/tslib.es6.js","ng://angular-resizable-element/resizable.directive.ts","ng://angular-resizable-element/resize-handle.directive.ts","ng://angular-resizable-element/resizable.module.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import {\n Directive,\n Renderer2,\n ElementRef,\n OnInit,\n Output,\n Input,\n EventEmitter,\n OnDestroy,\n NgZone,\n OnChanges,\n SimpleChanges,\n Inject,\n PLATFORM_ID\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Subject, Observable, Observer, merge, EMPTY } from 'rxjs';\nimport {\n map,\n mergeMap,\n takeUntil,\n filter,\n pairwise,\n take,\n share,\n auditTime,\n switchMap,\n startWith\n} from 'rxjs/operators';\nimport { Edges } from './interfaces/edges.interface';\nimport { BoundingRectangle } from './interfaces/bounding-rectangle.interface';\nimport { ResizeEvent } from './interfaces/resize-event.interface';\n\ninterface PointerEventCoordinate {\n clientX: number;\n clientY: number;\n event: MouseEvent | TouchEvent;\n}\n\ninterface Coordinate {\n x: number;\n y: number;\n}\n\nfunction isNumberCloseTo(\n value1: number,\n value2: number,\n precision: number = 3\n): boolean {\n const diff: number = Math.abs(value1 - value2);\n return diff < precision;\n}\n\nfunction getNewBoundingRectangle(\n startingRect: BoundingRectangle,\n edges: Edges,\n clientX: number,\n clientY: number\n): BoundingRectangle {\n const newBoundingRect: BoundingRectangle = {\n top: startingRect.top,\n bottom: startingRect.bottom,\n left: startingRect.left,\n right: startingRect.right\n };\n\n if (edges.top) {\n newBoundingRect.top += clientY;\n }\n if (edges.bottom) {\n newBoundingRect.bottom += clientY;\n }\n if (edges.left) {\n newBoundingRect.left += clientX;\n }\n if (edges.right) {\n newBoundingRect.right += clientX;\n }\n newBoundingRect.height = newBoundingRect.bottom - newBoundingRect.top;\n newBoundingRect.width = newBoundingRect.right - newBoundingRect.left;\n\n return newBoundingRect;\n}\n\nfunction getElementRect(\n element: ElementRef,\n ghostElementPositioning: string\n): BoundingRectangle {\n let translateX = 0;\n let translateY = 0;\n const style = element.nativeElement.style;\n const transformProperties = [\n 'transform',\n '-ms-transform',\n '-moz-transform',\n '-o-transform'\n ];\n const transform = transformProperties\n .map(property => style[property])\n .find(value => !!value);\n if (transform && transform.includes('translate3d')) {\n translateX = transform.replace(\n /.*translate3d\\((.*)px, (.*)px, (.*)px\\).*/,\n '$1'\n );\n translateY = transform.replace(\n /.*translate3d\\((.*)px, (.*)px, (.*)px\\).*/,\n '$2'\n );\n } else if (transform && transform.includes('translate')) {\n translateX = transform.replace(/.*translate\\((.*)px, (.*)px\\).*/, '$1');\n translateY = transform.replace(/.*translate\\((.*)px, (.*)px\\).*/, '$2');\n }\n\n if (ghostElementPositioning === 'absolute') {\n return {\n height: element.nativeElement.offsetHeight,\n width: element.nativeElement.offsetWidth,\n top: element.nativeElement.offsetTop - translateY,\n bottom:\n element.nativeElement.offsetHeight +\n element.nativeElement.offsetTop -\n translateY,\n left: element.nativeElement.offsetLeft - translateX,\n right:\n element.nativeElement.offsetWidth +\n element.nativeElement.offsetLeft -\n translateX\n };\n } else {\n const boundingRect: BoundingRectangle = element.nativeElement.getBoundingClientRect();\n return {\n height: boundingRect.height,\n width: boundingRect.width,\n top: boundingRect.top - translateY,\n bottom: boundingRect.bottom - translateY,\n left: boundingRect.left - translateX,\n right: boundingRect.right - translateX,\n scrollTop: element.nativeElement.scrollTop,\n scrollLeft: element.nativeElement.scrollLeft\n };\n }\n}\n\nfunction isWithinBoundingY({\n clientY,\n rect\n}: {\n clientY: number;\n rect: ClientRect;\n}): boolean {\n return clientY >= rect.top && clientY <= rect.bottom;\n}\n\nfunction isWithinBoundingX({\n clientX,\n rect\n}: {\n clientX: number;\n rect: ClientRect;\n}): boolean {\n return clientX >= rect.left && clientX <= rect.right;\n}\n\nfunction getResizeEdges({\n clientX,\n clientY,\n elm,\n allowedEdges,\n cursorPrecision\n}: {\n clientX: number;\n clientY: number;\n elm: ElementRef;\n allowedEdges: Edges;\n cursorPrecision: number;\n}): Edges {\n const elmPosition: ClientRect = elm.nativeElement.getBoundingClientRect();\n const edges: Edges = {};\n\n if (\n allowedEdges.left &&\n isNumberCloseTo(clientX, elmPosition.left, cursorPrecision) &&\n isWithinBoundingY({ clientY, rect: elmPosition })\n ) {\n edges.left = true;\n }\n\n if (\n allowedEdges.right &&\n isNumberCloseTo(clientX, elmPosition.right, cursorPrecision) &&\n isWithinBoundingY({ clientY, rect: elmPosition })\n ) {\n edges.right = true;\n }\n\n if (\n allowedEdges.top &&\n isNumberCloseTo(clientY, elmPosition.top, cursorPrecision) &&\n isWithinBoundingX({ clientX, rect: elmPosition })\n ) {\n edges.top = true;\n }\n\n if (\n allowedEdges.bottom &&\n isNumberCloseTo(clientY, elmPosition.bottom, cursorPrecision) &&\n isWithinBoundingX({ clientX, rect: elmPosition })\n ) {\n edges.bottom = true;\n }\n\n return edges;\n}\n\nexport interface ResizeCursors {\n topLeft: string;\n topRight: string;\n bottomLeft: string;\n bottomRight: string;\n leftOrRight: string;\n topOrBottom: string;\n}\n\nconst DEFAULT_RESIZE_CURSORS: ResizeCursors = Object.freeze({\n topLeft: 'nw-resize',\n topRight: 'ne-resize',\n bottomLeft: 'sw-resize',\n bottomRight: 'se-resize',\n leftOrRight: 'col-resize',\n topOrBottom: 'row-resize'\n});\n\nfunction getResizeCursor(edges: Edges, cursors: ResizeCursors): string {\n if (edges.left && edges.top) {\n return cursors.topLeft;\n } else if (edges.right && edges.top) {\n return cursors.topRight;\n } else if (edges.left && edges.bottom) {\n return cursors.bottomLeft;\n } else if (edges.right && edges.bottom) {\n return cursors.bottomRight;\n } else if (edges.left || edges.right) {\n return cursors.leftOrRight;\n } else if (edges.top || edges.bottom) {\n return cursors.topOrBottom;\n } else {\n return '';\n }\n}\n\nfunction getEdgesDiff({\n edges,\n initialRectangle,\n newRectangle\n}: {\n edges: Edges;\n initialRectangle: BoundingRectangle;\n newRectangle: BoundingRectangle;\n}): Edges {\n const edgesDiff: Edges = {};\n Object.keys(edges).forEach(edge => {\n edgesDiff[edge] = (newRectangle[edge] || 0) - (initialRectangle[edge] || 0);\n });\n return edgesDiff;\n}\n\nconst RESIZE_ACTIVE_CLASS: string = 'resize-active';\nconst RESIZE_LEFT_HOVER_CLASS: string = 'resize-left-hover';\nconst RESIZE_RIGHT_HOVER_CLASS: string = 'resize-right-hover';\nconst RESIZE_TOP_HOVER_CLASS: string = 'resize-top-hover';\nconst RESIZE_BOTTOM_HOVER_CLASS: string = 'resize-bottom-hover';\nconst RESIZE_GHOST_ELEMENT_CLASS: string = 'resize-ghost-element';\n\nexport const MOUSE_MOVE_THROTTLE_MS: number = 50;\n\n/**\n * Place this on an element to make it resizable. For example:\n *\n * ```html\n * \n * \n * ```\n */\n@Directive({\n selector: '[mwlResizable]'\n})\nexport class ResizableDirective implements OnInit, OnChanges, OnDestroy {\n /**\n * A function that will be called before each resize event. Return `true` to allow the resize event to propagate or `false` to cancel it\n */\n @Input() validateResize: (resizeEvent: ResizeEvent) => boolean;\n\n /**\n * The edges that an element can be resized from. Pass an object like `{top: true, bottom: false}`. By default no edges can be resized.\n * @deprecated use a resize handle instead that positions itself to the side of the element you would like to resize\n */\n @Input() resizeEdges: Edges = {};\n\n /**\n * Set to `true` to enable a temporary resizing effect of the element in between the `resizeStart` and `resizeEnd` events.\n */\n @Input() enableGhostResize: boolean = false;\n\n /**\n * A snap grid that resize events will be locked to.\n *\n * e.g. to only allow the element to be resized every 10px set it to `{left: 10, right: 10}`\n */\n @Input() resizeSnapGrid: Edges = {};\n\n /**\n * The mouse cursors that will be set on the resize edges\n */\n @Input() resizeCursors: ResizeCursors = DEFAULT_RESIZE_CURSORS;\n\n /**\n * Mouse over thickness to active cursor.\n * @deprecated invalid when you migrate to use resize handles instead of setting resizeEdges on the element\n */\n @Input() resizeCursorPrecision: number = 3;\n\n /**\n * Define the positioning of the ghost element (can be fixed or absolute)\n */\n @Input() ghostElementPositioning: 'fixed' | 'absolute' = 'fixed';\n\n /**\n * Allow elements to be resized to negative dimensions\n */\n @Input() allowNegativeResizes: boolean = false;\n\n /**\n * Called when the mouse is pressed and a resize event is about to begin. `$event` is a `ResizeEvent` object.\n */\n @Output() resizeStart = new EventEmitter();\n\n /**\n * Called as the mouse is dragged after a resize event has begun. `$event` is a `ResizeEvent` object.\n */\n @Output() resizing = new EventEmitter();\n\n /**\n * Called after the mouse is released after a resize event. `$event` is a `ResizeEvent` object.\n */\n @Output() resizeEnd = new EventEmitter();\n\n /**\n * @hidden\n */\n public mouseup = new Subject<{\n clientX: number;\n clientY: number;\n edges?: Edges;\n }>();\n\n /**\n * @hidden\n */\n public mousedown = new Subject<{\n clientX: number;\n clientY: number;\n edges?: Edges;\n }>();\n\n /**\n * @hidden\n */\n public mousemove = new Subject<{\n clientX: number;\n clientY: number;\n edges?: Edges;\n event: MouseEvent | TouchEvent;\n }>();\n\n private pointerEventListeners: PointerEventListeners;\n\n private destroy$ = new Subject();\n\n private resizeEdges$ = new Subject();\n\n /**\n * @hidden\n */\n constructor(\n @Inject(PLATFORM_ID) private platformId: any,\n private renderer: Renderer2,\n public elm: ElementRef,\n private zone: NgZone\n ) {\n this.pointerEventListeners = PointerEventListeners.getInstance(\n renderer,\n zone\n );\n }\n\n /**\n * @hidden\n */\n ngOnInit(): void {\n // TODO - use some fancy Observable.merge's for this\n this.pointerEventListeners.pointerDown\n .pipe(takeUntil(this.destroy$))\n .subscribe(({ clientX, clientY }) => {\n this.mousedown.next({ clientX, clientY });\n });\n\n this.pointerEventListeners.pointerMove\n .pipe(takeUntil(this.destroy$))\n .subscribe(({ clientX, clientY, event }) => {\n this.mousemove.next({ clientX, clientY, event });\n });\n\n this.pointerEventListeners.pointerUp\n .pipe(takeUntil(this.destroy$))\n .subscribe(({ clientX, clientY }) => {\n this.mouseup.next({ clientX, clientY });\n });\n\n let currentResize: {\n edges: Edges;\n startingRect: BoundingRectangle;\n currentRect: BoundingRectangle;\n clonedNode?: HTMLElement;\n } | null;\n\n const removeGhostElement = () => {\n if (currentResize && currentResize.clonedNode) {\n this.elm.nativeElement.parentElement.removeChild(\n currentResize.clonedNode\n );\n this.renderer.setStyle(this.elm.nativeElement, 'visibility', 'inherit');\n }\n };\n\n const getResizeCursors = (): ResizeCursors => {\n return {\n ...DEFAULT_RESIZE_CURSORS,\n ...this.resizeCursors\n };\n };\n\n const mouseMove: Observable = this.mousemove.pipe(share());\n\n mouseMove.pipe(filter(() => !!currentResize)).subscribe(({ event }) => {\n event.preventDefault();\n });\n\n this.resizeEdges$\n .pipe(\n startWith(this.resizeEdges),\n map(() => {\n return (\n this.resizeEdges &&\n Object.keys(this.resizeEdges).some(edge => !!this.resizeEdges[edge])\n );\n }),\n switchMap(legacyResizeEdgesEnabled =>\n legacyResizeEdgesEnabled ? mouseMove : EMPTY\n ),\n auditTime(MOUSE_MOVE_THROTTLE_MS)\n )\n .subscribe(({ clientX, clientY }) => {\n const resizeEdges: Edges = getResizeEdges({\n clientX,\n clientY,\n elm: this.elm,\n allowedEdges: this.resizeEdges,\n cursorPrecision: this.resizeCursorPrecision\n });\n const resizeCursors = getResizeCursors();\n if (!currentResize) {\n const cursor = getResizeCursor(resizeEdges, resizeCursors);\n this.renderer.setStyle(this.elm.nativeElement, 'cursor', cursor);\n }\n this.setElementClass(\n this.elm,\n RESIZE_LEFT_HOVER_CLASS,\n resizeEdges.left === true\n );\n this.setElementClass(\n this.elm,\n RESIZE_RIGHT_HOVER_CLASS,\n resizeEdges.right === true\n );\n this.setElementClass(\n this.elm,\n RESIZE_TOP_HOVER_CLASS,\n resizeEdges.top === true\n );\n this.setElementClass(\n this.elm,\n RESIZE_BOTTOM_HOVER_CLASS,\n resizeEdges.bottom === true\n );\n });\n\n const mousedrag: Observable = this.mousedown\n .pipe(\n mergeMap(startCoords => {\n function getDiff(moveCoords: { clientX: number; clientY: number }) {\n return {\n clientX: moveCoords.clientX - startCoords.clientX,\n clientY: moveCoords.clientY - startCoords.clientY\n };\n }\n\n const getSnapGrid = () => {\n const snapGrid: Coordinate = { x: 1, y: 1 };\n\n if (currentResize) {\n if (this.resizeSnapGrid.left && currentResize.edges.left) {\n snapGrid.x = +this.resizeSnapGrid.left;\n } else if (\n this.resizeSnapGrid.right &&\n currentResize.edges.right\n ) {\n snapGrid.x = +this.resizeSnapGrid.right;\n }\n\n if (this.resizeSnapGrid.top && currentResize.edges.top) {\n snapGrid.y = +this.resizeSnapGrid.top;\n } else if (\n this.resizeSnapGrid.bottom &&\n currentResize.edges.bottom\n ) {\n snapGrid.y = +this.resizeSnapGrid.bottom;\n }\n }\n\n return snapGrid;\n };\n\n function getGrid(\n coords: { clientX: number; clientY: number },\n snapGrid: Coordinate\n ) {\n return {\n x: Math.ceil(coords.clientX / snapGrid.x),\n y: Math.ceil(coords.clientY / snapGrid.y)\n };\n }\n\n return merge(\n mouseMove.pipe(take(1)).pipe(map(coords => [coords])),\n mouseMove.pipe(pairwise())\n )\n .pipe(\n map(([previousCoords, newCoords]) => {\n return [\n previousCoords ? getDiff(previousCoords) : previousCoords,\n getDiff(newCoords)\n ];\n })\n )\n .pipe(\n filter(([previousCoords, newCoords]) => {\n if (!previousCoords) {\n return true;\n }\n\n const snapGrid: Coordinate = getSnapGrid();\n const previousGrid: Coordinate = getGrid(\n previousCoords,\n snapGrid\n );\n const newGrid: Coordinate = getGrid(newCoords, snapGrid);\n\n return (\n previousGrid.x !== newGrid.x || previousGrid.y !== newGrid.y\n );\n })\n )\n .pipe(\n map(([, newCoords]) => {\n const snapGrid: Coordinate = getSnapGrid();\n return {\n clientX:\n Math.round(newCoords.clientX / snapGrid.x) * snapGrid.x,\n clientY:\n Math.round(newCoords.clientY / snapGrid.y) * snapGrid.y\n };\n })\n )\n .pipe(takeUntil(merge(this.mouseup, this.mousedown)));\n })\n )\n .pipe(filter(() => !!currentResize));\n\n mousedrag\n .pipe(\n map(({ clientX, clientY }) => {\n return getNewBoundingRectangle(\n currentResize!.startingRect,\n currentResize!.edges,\n clientX,\n clientY\n );\n })\n )\n .pipe(\n filter((newBoundingRect: BoundingRectangle) => {\n return (\n this.allowNegativeResizes ||\n !!(\n newBoundingRect.height &&\n newBoundingRect.width &&\n newBoundingRect.height > 0 &&\n newBoundingRect.width > 0\n )\n );\n })\n )\n .pipe(\n filter((newBoundingRect: BoundingRectangle) => {\n return this.validateResize\n ? this.validateResize({\n rectangle: newBoundingRect,\n edges: getEdgesDiff({\n edges: currentResize!.edges,\n initialRectangle: currentResize!.startingRect,\n newRectangle: newBoundingRect\n })\n })\n : true;\n })\n )\n .subscribe((newBoundingRect: BoundingRectangle) => {\n if (currentResize && currentResize.clonedNode) {\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'height',\n `${newBoundingRect.height}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'width',\n `${newBoundingRect.width}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'top',\n `${newBoundingRect.top}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'left',\n `${newBoundingRect.left}px`\n );\n }\n\n this.zone.run(() => {\n this.resizing.emit({\n edges: getEdgesDiff({\n edges: currentResize!.edges,\n initialRectangle: currentResize!.startingRect,\n newRectangle: newBoundingRect\n }),\n rectangle: newBoundingRect\n });\n });\n\n currentResize!.currentRect = newBoundingRect;\n });\n\n this.mousedown\n .pipe(\n map(({ clientX, clientY, edges }) => {\n return (\n edges ||\n getResizeEdges({\n clientX,\n clientY,\n elm: this.elm,\n allowedEdges: this.resizeEdges,\n cursorPrecision: this.resizeCursorPrecision\n })\n );\n })\n )\n .pipe(\n filter((edges: Edges) => {\n return Object.keys(edges).length > 0;\n })\n )\n .subscribe((edges: Edges) => {\n if (currentResize) {\n removeGhostElement();\n }\n const startingRect: BoundingRectangle = getElementRect(\n this.elm,\n this.ghostElementPositioning\n );\n currentResize = {\n edges,\n startingRect,\n currentRect: startingRect\n };\n const resizeCursors = getResizeCursors();\n const cursor = getResizeCursor(currentResize.edges, resizeCursors);\n this.renderer.setStyle(document.body, 'cursor', cursor);\n this.setElementClass(this.elm, RESIZE_ACTIVE_CLASS, true);\n if (this.enableGhostResize) {\n currentResize.clonedNode = this.elm.nativeElement.cloneNode(true);\n this.elm.nativeElement.parentElement.appendChild(\n currentResize.clonedNode\n );\n this.renderer.setStyle(\n this.elm.nativeElement,\n 'visibility',\n 'hidden'\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'position',\n this.ghostElementPositioning\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'left',\n `${currentResize.startingRect.left}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'top',\n `${currentResize.startingRect.top}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'height',\n `${currentResize.startingRect.height}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'width',\n `${currentResize.startingRect.width}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'cursor',\n getResizeCursor(currentResize.edges, resizeCursors)\n );\n this.renderer.addClass(\n currentResize.clonedNode,\n RESIZE_GHOST_ELEMENT_CLASS\n );\n currentResize.clonedNode!.scrollTop = currentResize.startingRect\n .scrollTop as number;\n currentResize.clonedNode!.scrollLeft = currentResize.startingRect\n .scrollLeft as number;\n }\n this.zone.run(() => {\n this.resizeStart.emit({\n edges: getEdgesDiff({\n edges,\n initialRectangle: startingRect,\n newRectangle: startingRect\n }),\n rectangle: getNewBoundingRectangle(startingRect, {}, 0, 0)\n });\n });\n });\n\n this.mouseup.subscribe(() => {\n if (currentResize) {\n this.renderer.removeClass(this.elm.nativeElement, RESIZE_ACTIVE_CLASS);\n this.renderer.setStyle(document.body, 'cursor', '');\n this.renderer.setStyle(this.elm.nativeElement, 'cursor', '');\n this.zone.run(() => {\n this.resizeEnd.emit({\n edges: getEdgesDiff({\n edges: currentResize!.edges,\n initialRectangle: currentResize!.startingRect,\n newRectangle: currentResize!.currentRect\n }),\n rectangle: currentResize!.currentRect\n });\n });\n removeGhostElement();\n currentResize = null;\n }\n });\n }\n\n /**\n * @hidden\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.resizeEdges) {\n this.resizeEdges$.next(this.resizeEdges);\n }\n }\n\n /**\n * @hidden\n */\n ngOnDestroy(): void {\n // browser check for angular universal, because it doesn't know what document is\n if (isPlatformBrowser(this.platformId)) {\n this.renderer.setStyle(document.body, 'cursor', '');\n }\n this.mousedown.complete();\n this.mouseup.complete();\n this.mousemove.complete();\n this.resizeEdges$.complete();\n this.destroy$.next();\n }\n\n private setElementClass(elm: ElementRef, name: string, add: boolean): void {\n if (add) {\n this.renderer.addClass(elm.nativeElement, name);\n } else {\n this.renderer.removeClass(elm.nativeElement, name);\n }\n }\n}\n\nclass PointerEventListeners {\n public pointerDown: Observable;\n\n public pointerMove: Observable;\n\n public pointerUp: Observable;\n\n private static instance: PointerEventListeners; // tslint:disable-line\n\n public static getInstance(\n renderer: Renderer2,\n zone: NgZone\n ): PointerEventListeners {\n if (!PointerEventListeners.instance) {\n PointerEventListeners.instance = new PointerEventListeners(\n renderer,\n zone\n );\n }\n return PointerEventListeners.instance;\n }\n\n constructor(renderer: Renderer2, zone: NgZone) {\n this.pointerDown = new Observable(\n (observer: Observer) => {\n let unsubscribeMouseDown: () => void;\n let unsubscribeTouchStart: () => void;\n\n zone.runOutsideAngular(() => {\n unsubscribeMouseDown = renderer.listen(\n 'document',\n 'mousedown',\n (event: MouseEvent) => {\n observer.next({\n clientX: event.clientX,\n clientY: event.clientY,\n event\n });\n }\n );\n\n unsubscribeTouchStart = renderer.listen(\n 'document',\n 'touchstart',\n (event: TouchEvent) => {\n observer.next({\n clientX: event.touches[0].clientX,\n clientY: event.touches[0].clientY,\n event\n });\n }\n );\n });\n\n return () => {\n unsubscribeMouseDown();\n unsubscribeTouchStart();\n };\n }\n ).pipe(share());\n\n this.pointerMove = new Observable(\n (observer: Observer) => {\n let unsubscribeMouseMove: () => void;\n let unsubscribeTouchMove: () => void;\n\n zone.runOutsideAngular(() => {\n unsubscribeMouseMove = renderer.listen(\n 'document',\n 'mousemove',\n (event: MouseEvent) => {\n observer.next({\n clientX: event.clientX,\n clientY: event.clientY,\n event\n });\n }\n );\n\n unsubscribeTouchMove = renderer.listen(\n 'document',\n 'touchmove',\n (event: TouchEvent) => {\n observer.next({\n clientX: event.targetTouches[0].clientX,\n clientY: event.targetTouches[0].clientY,\n event\n });\n }\n );\n });\n\n return () => {\n unsubscribeMouseMove();\n unsubscribeTouchMove();\n };\n }\n ).pipe(share());\n\n this.pointerUp = new Observable(\n (observer: Observer) => {\n let unsubscribeMouseUp: () => void;\n let unsubscribeTouchEnd: () => void;\n let unsubscribeTouchCancel: () => void;\n\n zone.runOutsideAngular(() => {\n unsubscribeMouseUp = renderer.listen(\n 'document',\n 'mouseup',\n (event: MouseEvent) => {\n observer.next({\n clientX: event.clientX,\n clientY: event.clientY,\n event\n });\n }\n );\n\n unsubscribeTouchEnd = renderer.listen(\n 'document',\n 'touchend',\n (event: TouchEvent) => {\n observer.next({\n clientX: event.changedTouches[0].clientX,\n clientY: event.changedTouches[0].clientY,\n event\n });\n }\n );\n\n unsubscribeTouchCancel = renderer.listen(\n 'document',\n 'touchcancel',\n (event: TouchEvent) => {\n observer.next({\n clientX: event.changedTouches[0].clientX,\n clientY: event.changedTouches[0].clientY,\n event\n });\n }\n );\n });\n\n return () => {\n unsubscribeMouseUp();\n unsubscribeTouchEnd();\n unsubscribeTouchCancel();\n };\n }\n ).pipe(share());\n }\n}\n","import {\n Directive,\n Input,\n HostListener,\n Renderer2,\n ElementRef,\n OnDestroy,\n NgZone\n} from '@angular/core';\nimport { ResizableDirective } from './resizable.directive';\nimport { Edges } from './interfaces/edges.interface';\n\n/**\n * An element placed inside a `mwlResizable` directive to be used as a drag and resize handle\n *\n * For example\n *\n * ```html\n *
\n *
\n *
\n * ```\n */\n@Directive({\n selector: '[mwlResizeHandle]'\n})\nexport class ResizeHandleDirective implements OnDestroy {\n /**\n * The `Edges` object that contains the edges of the parent element that dragging the handle will trigger a resize on\n */\n @Input() resizeEdges: Edges = {};\n\n private eventListeners: {\n touchmove?: () => void;\n mousemove?: () => void;\n [key: string]: (() => void) | undefined;\n } = {};\n\n constructor(\n private renderer: Renderer2,\n private element: ElementRef,\n private zone: NgZone,\n private resizable: ResizableDirective\n ) {}\n\n ngOnDestroy(): void {\n this.unsubscribeEventListeners();\n }\n\n /**\n * @hidden\n */\n @HostListener('touchstart', [\n '$event',\n '$event.touches[0].clientX',\n '$event.touches[0].clientY'\n ])\n @HostListener('mousedown', ['$event', '$event.clientX', '$event.clientY'])\n onMousedown(\n event: MouseEvent | TouchEvent,\n clientX: number,\n clientY: number\n ): void {\n event.preventDefault();\n this.zone.runOutsideAngular(() => {\n if (!this.eventListeners.touchmove) {\n this.eventListeners.touchmove = this.renderer.listen(\n this.element.nativeElement,\n 'touchmove',\n (touchMoveEvent: TouchEvent) => {\n this.onMousemove(\n touchMoveEvent,\n touchMoveEvent.targetTouches[0].clientX,\n touchMoveEvent.targetTouches[0].clientY\n );\n }\n );\n }\n if (!this.eventListeners.mousemove) {\n this.eventListeners.mousemove = this.renderer.listen(\n this.element.nativeElement,\n 'mousemove',\n (mouseMoveEvent: MouseEvent) => {\n this.onMousemove(\n mouseMoveEvent,\n mouseMoveEvent.clientX,\n mouseMoveEvent.clientY\n );\n }\n );\n }\n this.resizable.mousedown.next({\n clientX,\n clientY,\n edges: this.resizeEdges\n });\n });\n }\n\n /**\n * @hidden\n */\n @HostListener('touchend', [\n '$event.changedTouches[0].clientX',\n '$event.changedTouches[0].clientY'\n ])\n @HostListener('touchcancel', [\n '$event.changedTouches[0].clientX',\n '$event.changedTouches[0].clientY'\n ])\n @HostListener('mouseup', ['$event.clientX', '$event.clientY'])\n onMouseup(clientX: number, clientY: number): void {\n this.zone.runOutsideAngular(() => {\n this.unsubscribeEventListeners();\n this.resizable.mouseup.next({\n clientX,\n clientY,\n edges: this.resizeEdges\n });\n });\n }\n\n private onMousemove(\n event: MouseEvent | TouchEvent,\n clientX: number,\n clientY: number\n ): void {\n this.resizable.mousemove.next({\n clientX,\n clientY,\n edges: this.resizeEdges,\n event\n });\n }\n\n private unsubscribeEventListeners(): void {\n Object.keys(this.eventListeners).forEach(type => {\n (this as any).eventListeners[type]();\n delete this.eventListeners[type];\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ResizableDirective } from './resizable.directive';\nimport { ResizeHandleDirective } from './resize-handle.directive';\n\n@NgModule({\n declarations: [ResizableDirective, ResizeHandleDirective],\n exports: [ResizableDirective, ResizeHandleDirective]\n})\nexport class ResizableModule {}\n"],"names":["EventEmitter","Subject","takeUntil","share","filter","startWith","map","switchMap","EMPTY","auditTime","mergeMap","merge","take","pairwise","isPlatformBrowser","Directive","Inject","PLATFORM_ID","Renderer2","ElementRef","NgZone","Input","Output","Observable","HostListener","NgModule"],"mappings":"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"} diff --git a/dist/bundles/angular-resizable-element.umd.min.js b/dist/bundles/angular-resizable-element.umd.min.js new file mode 100644 index 0000000..ef157d3 --- /dev/null +++ b/dist/bundles/angular-resizable-element.umd.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/common"),require("rxjs"),require("rxjs/operators"),require("@angular/core")):"function"==typeof define&&define.amd?define("angular-resizable-element",["exports","@angular/common","rxjs","rxjs/operators","@angular/core"],t):t(e["angular-resizable-element"]={},e.ng.common,e.rxjs,e.rxjs.operators,e.ng.core)}(this,function(e,t,u,i,r){"use strict";var c=function(){return(c=Object.assign||function(e){for(var t,n=1,i=arguments.length;n=n.top&&t<=n.bottom}function h(e){var t=e.clientX,n=e.rect;return t>=n.left&&t<=n.right}function m(e){var t=e.clientX,n=e.clientY,i=e.elm,r=e.allowedEdges,o=e.cursorPrecision,s=i.nativeElement.getBoundingClientRect(),c={};return r.left&&l(t,s.left,o)&&d({clientY:n,rect:s})&&(c.left=!0),r.right&&l(t,s.right,o)&&d({clientY:n,rect:s})&&(c.right=!0),r.top&&l(n,s.top,o)&&h({clientX:t,rect:s})&&(c.top=!0),r.bottom&&l(n,s.bottom,o)&&h({clientX:t,rect:s})&&(c.bottom=!0),c}var f=Object.freeze({topLeft:"nw-resize",topRight:"ne-resize",bottomLeft:"sw-resize",bottomRight:"se-resize",leftOrRight:"col-resize",topOrBottom:"row-resize"});function g(e,t){return e.left&&e.top?t.topLeft:e.right&&e.top?t.topRight:e.left&&e.bottom?t.bottomLeft:e.right&&e.bottom?t.bottomRight:e.left||e.right?t.leftOrRight:e.top||e.bottom?t.topOrBottom:""}function v(e){var t=e.edges,n=e.initialRectangle,i=e.newRectangle,r={};return Object.keys(t).forEach(function(e){r[e]=(i[e]||0)-(n[e]||0)}),r}var y="resize-active",n=function(){function e(e,t,n,i){this.platformId=e,this.renderer=t,this.elm=n,this.zone=i,this.resizeEdges={},this.enableGhostResize=!1,this.resizeSnapGrid={},this.resizeCursors=f,this.resizeCursorPrecision=3,this.ghostElementPositioning="fixed",this.allowNegativeResizes=!1,this.resizeStart=new r.EventEmitter,this.resizing=new r.EventEmitter,this.resizeEnd=new r.EventEmitter,this.mouseup=new u.Subject,this.mousedown=new u.Subject,this.mousemove=new u.Subject,this.destroy$=new u.Subject,this.resizeEdges$=new u.Subject,this.pointerEventListeners=o.getInstance(t,i)}return e.prototype.ngOnInit=function(){var o,s=this;this.pointerEventListeners.pointerDown.pipe(i.takeUntil(this.destroy$)).subscribe(function(e){var t=e.clientX,n=e.clientY;s.mousedown.next({clientX:t,clientY:n})}),this.pointerEventListeners.pointerMove.pipe(i.takeUntil(this.destroy$)).subscribe(function(e){var t=e.clientX,n=e.clientY,i=e.event;s.mousemove.next({clientX:t,clientY:n,event:i})}),this.pointerEventListeners.pointerUp.pipe(i.takeUntil(this.destroy$)).subscribe(function(e){var t=e.clientX,n=e.clientY;s.mouseup.next({clientX:t,clientY:n})});var r=function(){o&&o.clonedNode&&(s.elm.nativeElement.parentElement.removeChild(o.clonedNode),s.renderer.setStyle(s.elm.nativeElement,"visibility","inherit"))},l=function(){return c({},f,s.resizeCursors)},n=this.mousemove.pipe(i.share());n.pipe(i.filter(function(){return!!o})).subscribe(function(e){e.event.preventDefault()}),this.resizeEdges$.pipe(i.startWith(this.resizeEdges),i.map(function(){return s.resizeEdges&&Object.keys(s.resizeEdges).some(function(e){return!!s.resizeEdges[e]})}),i.switchMap(function(e){return e?n:u.EMPTY}),i.auditTime(50)).subscribe(function(e){var t=m({clientX:e.clientX,clientY:e.clientY,elm:s.elm,allowedEdges:s.resizeEdges,cursorPrecision:s.resizeCursorPrecision}),n=l();if(!o){var i=g(t,n);s.renderer.setStyle(s.elm.nativeElement,"cursor",i)}s.setElementClass(s.elm,"resize-left-hover",!0===t.left),s.setElementClass(s.elm,"resize-right-hover",!0===t.right),s.setElementClass(s.elm,"resize-top-hover",!0===t.top),s.setElementClass(s.elm,"resize-bottom-hover",!0===t.bottom)}),this.mousedown.pipe(i.mergeMap(function(t){function r(e){return{clientX:e.clientX-t.clientX,clientY:e.clientY-t.clientY}}var c=function(){var e={x:1,y:1};return o&&(s.resizeSnapGrid.left&&o.edges.left?e.x=+s.resizeSnapGrid.left:s.resizeSnapGrid.right&&o.edges.right&&(e.x=+s.resizeSnapGrid.right),s.resizeSnapGrid.top&&o.edges.top?e.y=+s.resizeSnapGrid.top:s.resizeSnapGrid.bottom&&o.edges.bottom&&(e.y=+s.resizeSnapGrid.bottom)),e};function l(e,t){return{x:Math.ceil(e.clientX/t.x),y:Math.ceil(e.clientY/t.y)}}return u.merge(n.pipe(i.take(1)).pipe(i.map(function(e){return[e]})),n.pipe(i.pairwise())).pipe(i.map(function(e){var t=a(e,2),n=t[0],i=t[1];return[n?r(n):n,r(i)]})).pipe(i.filter(function(e){var t=a(e,2),n=t[0],i=t[1];if(!n)return!0;var r=c(),o=l(n,r),s=l(i,r);return o.x!==s.x||o.y!==s.y})).pipe(i.map(function(e){var t=a(e,2)[1],n=c();return{clientX:Math.round(t.clientX/n.x)*n.x,clientY:Math.round(t.clientY/n.y)*n.y}})).pipe(i.takeUntil(u.merge(s.mouseup,s.mousedown)))})).pipe(i.filter(function(){return!!o})).pipe(i.map(function(e){var t=e.clientX,n=e.clientY;return p(o.startingRect,o.edges,t,n)})).pipe(i.filter(function(e){return s.allowNegativeResizes||!!(e.height&&e.width&&0= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import {\n Directive,\n Renderer2,\n ElementRef,\n OnInit,\n Output,\n Input,\n EventEmitter,\n OnDestroy,\n NgZone,\n OnChanges,\n SimpleChanges,\n Inject,\n PLATFORM_ID\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Subject, Observable, Observer, merge, EMPTY } from 'rxjs';\nimport {\n map,\n mergeMap,\n takeUntil,\n filter,\n pairwise,\n take,\n share,\n auditTime,\n switchMap,\n startWith\n} from 'rxjs/operators';\nimport { Edges } from './interfaces/edges.interface';\nimport { BoundingRectangle } from './interfaces/bounding-rectangle.interface';\nimport { ResizeEvent } from './interfaces/resize-event.interface';\n\ninterface PointerEventCoordinate {\n clientX: number;\n clientY: number;\n event: MouseEvent | TouchEvent;\n}\n\ninterface Coordinate {\n x: number;\n y: number;\n}\n\nfunction isNumberCloseTo(\n value1: number,\n value2: number,\n precision: number = 3\n): boolean {\n const diff: number = Math.abs(value1 - value2);\n return diff < precision;\n}\n\nfunction getNewBoundingRectangle(\n startingRect: BoundingRectangle,\n edges: Edges,\n clientX: number,\n clientY: number\n): BoundingRectangle {\n const newBoundingRect: BoundingRectangle = {\n top: startingRect.top,\n bottom: startingRect.bottom,\n left: startingRect.left,\n right: startingRect.right\n };\n\n if (edges.top) {\n newBoundingRect.top += clientY;\n }\n if (edges.bottom) {\n newBoundingRect.bottom += clientY;\n }\n if (edges.left) {\n newBoundingRect.left += clientX;\n }\n if (edges.right) {\n newBoundingRect.right += clientX;\n }\n newBoundingRect.height = newBoundingRect.bottom - newBoundingRect.top;\n newBoundingRect.width = newBoundingRect.right - newBoundingRect.left;\n\n return newBoundingRect;\n}\n\nfunction getElementRect(\n element: ElementRef,\n ghostElementPositioning: string\n): BoundingRectangle {\n let translateX = 0;\n let translateY = 0;\n const style = element.nativeElement.style;\n const transformProperties = [\n 'transform',\n '-ms-transform',\n '-moz-transform',\n '-o-transform'\n ];\n const transform = transformProperties\n .map(property => style[property])\n .find(value => !!value);\n if (transform && transform.includes('translate3d')) {\n translateX = transform.replace(\n /.*translate3d\\((.*)px, (.*)px, (.*)px\\).*/,\n '$1'\n );\n translateY = transform.replace(\n /.*translate3d\\((.*)px, (.*)px, (.*)px\\).*/,\n '$2'\n );\n } else if (transform && transform.includes('translate')) {\n translateX = transform.replace(/.*translate\\((.*)px, (.*)px\\).*/, '$1');\n translateY = transform.replace(/.*translate\\((.*)px, (.*)px\\).*/, '$2');\n }\n\n if (ghostElementPositioning === 'absolute') {\n return {\n height: element.nativeElement.offsetHeight,\n width: element.nativeElement.offsetWidth,\n top: element.nativeElement.offsetTop - translateY,\n bottom:\n element.nativeElement.offsetHeight +\n element.nativeElement.offsetTop -\n translateY,\n left: element.nativeElement.offsetLeft - translateX,\n right:\n element.nativeElement.offsetWidth +\n element.nativeElement.offsetLeft -\n translateX\n };\n } else {\n const boundingRect: BoundingRectangle = element.nativeElement.getBoundingClientRect();\n return {\n height: boundingRect.height,\n width: boundingRect.width,\n top: boundingRect.top - translateY,\n bottom: boundingRect.bottom - translateY,\n left: boundingRect.left - translateX,\n right: boundingRect.right - translateX,\n scrollTop: element.nativeElement.scrollTop,\n scrollLeft: element.nativeElement.scrollLeft\n };\n }\n}\n\nfunction isWithinBoundingY({\n clientY,\n rect\n}: {\n clientY: number;\n rect: ClientRect;\n}): boolean {\n return clientY >= rect.top && clientY <= rect.bottom;\n}\n\nfunction isWithinBoundingX({\n clientX,\n rect\n}: {\n clientX: number;\n rect: ClientRect;\n}): boolean {\n return clientX >= rect.left && clientX <= rect.right;\n}\n\nfunction getResizeEdges({\n clientX,\n clientY,\n elm,\n allowedEdges,\n cursorPrecision\n}: {\n clientX: number;\n clientY: number;\n elm: ElementRef;\n allowedEdges: Edges;\n cursorPrecision: number;\n}): Edges {\n const elmPosition: ClientRect = elm.nativeElement.getBoundingClientRect();\n const edges: Edges = {};\n\n if (\n allowedEdges.left &&\n isNumberCloseTo(clientX, elmPosition.left, cursorPrecision) &&\n isWithinBoundingY({ clientY, rect: elmPosition })\n ) {\n edges.left = true;\n }\n\n if (\n allowedEdges.right &&\n isNumberCloseTo(clientX, elmPosition.right, cursorPrecision) &&\n isWithinBoundingY({ clientY, rect: elmPosition })\n ) {\n edges.right = true;\n }\n\n if (\n allowedEdges.top &&\n isNumberCloseTo(clientY, elmPosition.top, cursorPrecision) &&\n isWithinBoundingX({ clientX, rect: elmPosition })\n ) {\n edges.top = true;\n }\n\n if (\n allowedEdges.bottom &&\n isNumberCloseTo(clientY, elmPosition.bottom, cursorPrecision) &&\n isWithinBoundingX({ clientX, rect: elmPosition })\n ) {\n edges.bottom = true;\n }\n\n return edges;\n}\n\nexport interface ResizeCursors {\n topLeft: string;\n topRight: string;\n bottomLeft: string;\n bottomRight: string;\n leftOrRight: string;\n topOrBottom: string;\n}\n\nconst DEFAULT_RESIZE_CURSORS: ResizeCursors = Object.freeze({\n topLeft: 'nw-resize',\n topRight: 'ne-resize',\n bottomLeft: 'sw-resize',\n bottomRight: 'se-resize',\n leftOrRight: 'col-resize',\n topOrBottom: 'row-resize'\n});\n\nfunction getResizeCursor(edges: Edges, cursors: ResizeCursors): string {\n if (edges.left && edges.top) {\n return cursors.topLeft;\n } else if (edges.right && edges.top) {\n return cursors.topRight;\n } else if (edges.left && edges.bottom) {\n return cursors.bottomLeft;\n } else if (edges.right && edges.bottom) {\n return cursors.bottomRight;\n } else if (edges.left || edges.right) {\n return cursors.leftOrRight;\n } else if (edges.top || edges.bottom) {\n return cursors.topOrBottom;\n } else {\n return '';\n }\n}\n\nfunction getEdgesDiff({\n edges,\n initialRectangle,\n newRectangle\n}: {\n edges: Edges;\n initialRectangle: BoundingRectangle;\n newRectangle: BoundingRectangle;\n}): Edges {\n const edgesDiff: Edges = {};\n Object.keys(edges).forEach(edge => {\n edgesDiff[edge] = (newRectangle[edge] || 0) - (initialRectangle[edge] || 0);\n });\n return edgesDiff;\n}\n\nconst RESIZE_ACTIVE_CLASS: string = 'resize-active';\nconst RESIZE_LEFT_HOVER_CLASS: string = 'resize-left-hover';\nconst RESIZE_RIGHT_HOVER_CLASS: string = 'resize-right-hover';\nconst RESIZE_TOP_HOVER_CLASS: string = 'resize-top-hover';\nconst RESIZE_BOTTOM_HOVER_CLASS: string = 'resize-bottom-hover';\nconst RESIZE_GHOST_ELEMENT_CLASS: string = 'resize-ghost-element';\n\nexport const MOUSE_MOVE_THROTTLE_MS: number = 50;\n\n/**\n * Place this on an element to make it resizable. For example:\n *\n * ```html\n * \n * \n * ```\n */\n@Directive({\n selector: '[mwlResizable]'\n})\nexport class ResizableDirective implements OnInit, OnChanges, OnDestroy {\n /**\n * A function that will be called before each resize event. Return `true` to allow the resize event to propagate or `false` to cancel it\n */\n @Input() validateResize: (resizeEvent: ResizeEvent) => boolean;\n\n /**\n * The edges that an element can be resized from. Pass an object like `{top: true, bottom: false}`. By default no edges can be resized.\n * @deprecated use a resize handle instead that positions itself to the side of the element you would like to resize\n */\n @Input() resizeEdges: Edges = {};\n\n /**\n * Set to `true` to enable a temporary resizing effect of the element in between the `resizeStart` and `resizeEnd` events.\n */\n @Input() enableGhostResize: boolean = false;\n\n /**\n * A snap grid that resize events will be locked to.\n *\n * e.g. to only allow the element to be resized every 10px set it to `{left: 10, right: 10}`\n */\n @Input() resizeSnapGrid: Edges = {};\n\n /**\n * The mouse cursors that will be set on the resize edges\n */\n @Input() resizeCursors: ResizeCursors = DEFAULT_RESIZE_CURSORS;\n\n /**\n * Mouse over thickness to active cursor.\n * @deprecated invalid when you migrate to use resize handles instead of setting resizeEdges on the element\n */\n @Input() resizeCursorPrecision: number = 3;\n\n /**\n * Define the positioning of the ghost element (can be fixed or absolute)\n */\n @Input() ghostElementPositioning: 'fixed' | 'absolute' = 'fixed';\n\n /**\n * Allow elements to be resized to negative dimensions\n */\n @Input() allowNegativeResizes: boolean = false;\n\n /**\n * Called when the mouse is pressed and a resize event is about to begin. `$event` is a `ResizeEvent` object.\n */\n @Output() resizeStart = new EventEmitter();\n\n /**\n * Called as the mouse is dragged after a resize event has begun. `$event` is a `ResizeEvent` object.\n */\n @Output() resizing = new EventEmitter();\n\n /**\n * Called after the mouse is released after a resize event. `$event` is a `ResizeEvent` object.\n */\n @Output() resizeEnd = new EventEmitter();\n\n /**\n * @hidden\n */\n public mouseup = new Subject<{\n clientX: number;\n clientY: number;\n edges?: Edges;\n }>();\n\n /**\n * @hidden\n */\n public mousedown = new Subject<{\n clientX: number;\n clientY: number;\n edges?: Edges;\n }>();\n\n /**\n * @hidden\n */\n public mousemove = new Subject<{\n clientX: number;\n clientY: number;\n edges?: Edges;\n event: MouseEvent | TouchEvent;\n }>();\n\n private pointerEventListeners: PointerEventListeners;\n\n private destroy$ = new Subject();\n\n private resizeEdges$ = new Subject();\n\n /**\n * @hidden\n */\n constructor(\n @Inject(PLATFORM_ID) private platformId: any,\n private renderer: Renderer2,\n public elm: ElementRef,\n private zone: NgZone\n ) {\n this.pointerEventListeners = PointerEventListeners.getInstance(\n renderer,\n zone\n );\n }\n\n /**\n * @hidden\n */\n ngOnInit(): void {\n // TODO - use some fancy Observable.merge's for this\n this.pointerEventListeners.pointerDown\n .pipe(takeUntil(this.destroy$))\n .subscribe(({ clientX, clientY }) => {\n this.mousedown.next({ clientX, clientY });\n });\n\n this.pointerEventListeners.pointerMove\n .pipe(takeUntil(this.destroy$))\n .subscribe(({ clientX, clientY, event }) => {\n this.mousemove.next({ clientX, clientY, event });\n });\n\n this.pointerEventListeners.pointerUp\n .pipe(takeUntil(this.destroy$))\n .subscribe(({ clientX, clientY }) => {\n this.mouseup.next({ clientX, clientY });\n });\n\n let currentResize: {\n edges: Edges;\n startingRect: BoundingRectangle;\n currentRect: BoundingRectangle;\n clonedNode?: HTMLElement;\n } | null;\n\n const removeGhostElement = () => {\n if (currentResize && currentResize.clonedNode) {\n this.elm.nativeElement.parentElement.removeChild(\n currentResize.clonedNode\n );\n this.renderer.setStyle(this.elm.nativeElement, 'visibility', 'inherit');\n }\n };\n\n const getResizeCursors = (): ResizeCursors => {\n return {\n ...DEFAULT_RESIZE_CURSORS,\n ...this.resizeCursors\n };\n };\n\n const mouseMove: Observable = this.mousemove.pipe(share());\n\n mouseMove.pipe(filter(() => !!currentResize)).subscribe(({ event }) => {\n event.preventDefault();\n });\n\n this.resizeEdges$\n .pipe(\n startWith(this.resizeEdges),\n map(() => {\n return (\n this.resizeEdges &&\n Object.keys(this.resizeEdges).some(edge => !!this.resizeEdges[edge])\n );\n }),\n switchMap(legacyResizeEdgesEnabled =>\n legacyResizeEdgesEnabled ? mouseMove : EMPTY\n ),\n auditTime(MOUSE_MOVE_THROTTLE_MS)\n )\n .subscribe(({ clientX, clientY }) => {\n const resizeEdges: Edges = getResizeEdges({\n clientX,\n clientY,\n elm: this.elm,\n allowedEdges: this.resizeEdges,\n cursorPrecision: this.resizeCursorPrecision\n });\n const resizeCursors = getResizeCursors();\n if (!currentResize) {\n const cursor = getResizeCursor(resizeEdges, resizeCursors);\n this.renderer.setStyle(this.elm.nativeElement, 'cursor', cursor);\n }\n this.setElementClass(\n this.elm,\n RESIZE_LEFT_HOVER_CLASS,\n resizeEdges.left === true\n );\n this.setElementClass(\n this.elm,\n RESIZE_RIGHT_HOVER_CLASS,\n resizeEdges.right === true\n );\n this.setElementClass(\n this.elm,\n RESIZE_TOP_HOVER_CLASS,\n resizeEdges.top === true\n );\n this.setElementClass(\n this.elm,\n RESIZE_BOTTOM_HOVER_CLASS,\n resizeEdges.bottom === true\n );\n });\n\n const mousedrag: Observable = this.mousedown\n .pipe(\n mergeMap(startCoords => {\n function getDiff(moveCoords: { clientX: number; clientY: number }) {\n return {\n clientX: moveCoords.clientX - startCoords.clientX,\n clientY: moveCoords.clientY - startCoords.clientY\n };\n }\n\n const getSnapGrid = () => {\n const snapGrid: Coordinate = { x: 1, y: 1 };\n\n if (currentResize) {\n if (this.resizeSnapGrid.left && currentResize.edges.left) {\n snapGrid.x = +this.resizeSnapGrid.left;\n } else if (\n this.resizeSnapGrid.right &&\n currentResize.edges.right\n ) {\n snapGrid.x = +this.resizeSnapGrid.right;\n }\n\n if (this.resizeSnapGrid.top && currentResize.edges.top) {\n snapGrid.y = +this.resizeSnapGrid.top;\n } else if (\n this.resizeSnapGrid.bottom &&\n currentResize.edges.bottom\n ) {\n snapGrid.y = +this.resizeSnapGrid.bottom;\n }\n }\n\n return snapGrid;\n };\n\n function getGrid(\n coords: { clientX: number; clientY: number },\n snapGrid: Coordinate\n ) {\n return {\n x: Math.ceil(coords.clientX / snapGrid.x),\n y: Math.ceil(coords.clientY / snapGrid.y)\n };\n }\n\n return merge(\n mouseMove.pipe(take(1)).pipe(map(coords => [coords])),\n mouseMove.pipe(pairwise())\n )\n .pipe(\n map(([previousCoords, newCoords]) => {\n return [\n previousCoords ? getDiff(previousCoords) : previousCoords,\n getDiff(newCoords)\n ];\n })\n )\n .pipe(\n filter(([previousCoords, newCoords]) => {\n if (!previousCoords) {\n return true;\n }\n\n const snapGrid: Coordinate = getSnapGrid();\n const previousGrid: Coordinate = getGrid(\n previousCoords,\n snapGrid\n );\n const newGrid: Coordinate = getGrid(newCoords, snapGrid);\n\n return (\n previousGrid.x !== newGrid.x || previousGrid.y !== newGrid.y\n );\n })\n )\n .pipe(\n map(([, newCoords]) => {\n const snapGrid: Coordinate = getSnapGrid();\n return {\n clientX:\n Math.round(newCoords.clientX / snapGrid.x) * snapGrid.x,\n clientY:\n Math.round(newCoords.clientY / snapGrid.y) * snapGrid.y\n };\n })\n )\n .pipe(takeUntil(merge(this.mouseup, this.mousedown)));\n })\n )\n .pipe(filter(() => !!currentResize));\n\n mousedrag\n .pipe(\n map(({ clientX, clientY }) => {\n return getNewBoundingRectangle(\n currentResize!.startingRect,\n currentResize!.edges,\n clientX,\n clientY\n );\n })\n )\n .pipe(\n filter((newBoundingRect: BoundingRectangle) => {\n return (\n this.allowNegativeResizes ||\n !!(\n newBoundingRect.height &&\n newBoundingRect.width &&\n newBoundingRect.height > 0 &&\n newBoundingRect.width > 0\n )\n );\n })\n )\n .pipe(\n filter((newBoundingRect: BoundingRectangle) => {\n return this.validateResize\n ? this.validateResize({\n rectangle: newBoundingRect,\n edges: getEdgesDiff({\n edges: currentResize!.edges,\n initialRectangle: currentResize!.startingRect,\n newRectangle: newBoundingRect\n })\n })\n : true;\n })\n )\n .subscribe((newBoundingRect: BoundingRectangle) => {\n if (currentResize && currentResize.clonedNode) {\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'height',\n `${newBoundingRect.height}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'width',\n `${newBoundingRect.width}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'top',\n `${newBoundingRect.top}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'left',\n `${newBoundingRect.left}px`\n );\n }\n\n this.zone.run(() => {\n this.resizing.emit({\n edges: getEdgesDiff({\n edges: currentResize!.edges,\n initialRectangle: currentResize!.startingRect,\n newRectangle: newBoundingRect\n }),\n rectangle: newBoundingRect\n });\n });\n\n currentResize!.currentRect = newBoundingRect;\n });\n\n this.mousedown\n .pipe(\n map(({ clientX, clientY, edges }) => {\n return (\n edges ||\n getResizeEdges({\n clientX,\n clientY,\n elm: this.elm,\n allowedEdges: this.resizeEdges,\n cursorPrecision: this.resizeCursorPrecision\n })\n );\n })\n )\n .pipe(\n filter((edges: Edges) => {\n return Object.keys(edges).length > 0;\n })\n )\n .subscribe((edges: Edges) => {\n if (currentResize) {\n removeGhostElement();\n }\n const startingRect: BoundingRectangle = getElementRect(\n this.elm,\n this.ghostElementPositioning\n );\n currentResize = {\n edges,\n startingRect,\n currentRect: startingRect\n };\n const resizeCursors = getResizeCursors();\n const cursor = getResizeCursor(currentResize.edges, resizeCursors);\n this.renderer.setStyle(document.body, 'cursor', cursor);\n this.setElementClass(this.elm, RESIZE_ACTIVE_CLASS, true);\n if (this.enableGhostResize) {\n currentResize.clonedNode = this.elm.nativeElement.cloneNode(true);\n this.elm.nativeElement.parentElement.appendChild(\n currentResize.clonedNode\n );\n this.renderer.setStyle(\n this.elm.nativeElement,\n 'visibility',\n 'hidden'\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'position',\n this.ghostElementPositioning\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'left',\n `${currentResize.startingRect.left}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'top',\n `${currentResize.startingRect.top}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'height',\n `${currentResize.startingRect.height}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'width',\n `${currentResize.startingRect.width}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'cursor',\n getResizeCursor(currentResize.edges, resizeCursors)\n );\n this.renderer.addClass(\n currentResize.clonedNode,\n RESIZE_GHOST_ELEMENT_CLASS\n );\n currentResize.clonedNode!.scrollTop = currentResize.startingRect\n .scrollTop as number;\n currentResize.clonedNode!.scrollLeft = currentResize.startingRect\n .scrollLeft as number;\n }\n this.zone.run(() => {\n this.resizeStart.emit({\n edges: getEdgesDiff({\n edges,\n initialRectangle: startingRect,\n newRectangle: startingRect\n }),\n rectangle: getNewBoundingRectangle(startingRect, {}, 0, 0)\n });\n });\n });\n\n this.mouseup.subscribe(() => {\n if (currentResize) {\n this.renderer.removeClass(this.elm.nativeElement, RESIZE_ACTIVE_CLASS);\n this.renderer.setStyle(document.body, 'cursor', '');\n this.renderer.setStyle(this.elm.nativeElement, 'cursor', '');\n this.zone.run(() => {\n this.resizeEnd.emit({\n edges: getEdgesDiff({\n edges: currentResize!.edges,\n initialRectangle: currentResize!.startingRect,\n newRectangle: currentResize!.currentRect\n }),\n rectangle: currentResize!.currentRect\n });\n });\n removeGhostElement();\n currentResize = null;\n }\n });\n }\n\n /**\n * @hidden\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.resizeEdges) {\n this.resizeEdges$.next(this.resizeEdges);\n }\n }\n\n /**\n * @hidden\n */\n ngOnDestroy(): void {\n // browser check for angular universal, because it doesn't know what document is\n if (isPlatformBrowser(this.platformId)) {\n this.renderer.setStyle(document.body, 'cursor', '');\n }\n this.mousedown.complete();\n this.mouseup.complete();\n this.mousemove.complete();\n this.resizeEdges$.complete();\n this.destroy$.next();\n }\n\n private setElementClass(elm: ElementRef, name: string, add: boolean): void {\n if (add) {\n this.renderer.addClass(elm.nativeElement, name);\n } else {\n this.renderer.removeClass(elm.nativeElement, name);\n }\n }\n}\n\nclass PointerEventListeners {\n public pointerDown: Observable;\n\n public pointerMove: Observable;\n\n public pointerUp: Observable;\n\n private static instance: PointerEventListeners; // tslint:disable-line\n\n public static getInstance(\n renderer: Renderer2,\n zone: NgZone\n ): PointerEventListeners {\n if (!PointerEventListeners.instance) {\n PointerEventListeners.instance = new PointerEventListeners(\n renderer,\n zone\n );\n }\n return PointerEventListeners.instance;\n }\n\n constructor(renderer: Renderer2, zone: NgZone) {\n this.pointerDown = new Observable(\n (observer: Observer) => {\n let unsubscribeMouseDown: () => void;\n let unsubscribeTouchStart: () => void;\n\n zone.runOutsideAngular(() => {\n unsubscribeMouseDown = renderer.listen(\n 'document',\n 'mousedown',\n (event: MouseEvent) => {\n observer.next({\n clientX: event.clientX,\n clientY: event.clientY,\n event\n });\n }\n );\n\n unsubscribeTouchStart = renderer.listen(\n 'document',\n 'touchstart',\n (event: TouchEvent) => {\n observer.next({\n clientX: event.touches[0].clientX,\n clientY: event.touches[0].clientY,\n event\n });\n }\n );\n });\n\n return () => {\n unsubscribeMouseDown();\n unsubscribeTouchStart();\n };\n }\n ).pipe(share());\n\n this.pointerMove = new Observable(\n (observer: Observer) => {\n let unsubscribeMouseMove: () => void;\n let unsubscribeTouchMove: () => void;\n\n zone.runOutsideAngular(() => {\n unsubscribeMouseMove = renderer.listen(\n 'document',\n 'mousemove',\n (event: MouseEvent) => {\n observer.next({\n clientX: event.clientX,\n clientY: event.clientY,\n event\n });\n }\n );\n\n unsubscribeTouchMove = renderer.listen(\n 'document',\n 'touchmove',\n (event: TouchEvent) => {\n observer.next({\n clientX: event.targetTouches[0].clientX,\n clientY: event.targetTouches[0].clientY,\n event\n });\n }\n );\n });\n\n return () => {\n unsubscribeMouseMove();\n unsubscribeTouchMove();\n };\n }\n ).pipe(share());\n\n this.pointerUp = new Observable(\n (observer: Observer) => {\n let unsubscribeMouseUp: () => void;\n let unsubscribeTouchEnd: () => void;\n let unsubscribeTouchCancel: () => void;\n\n zone.runOutsideAngular(() => {\n unsubscribeMouseUp = renderer.listen(\n 'document',\n 'mouseup',\n (event: MouseEvent) => {\n observer.next({\n clientX: event.clientX,\n clientY: event.clientY,\n event\n });\n }\n );\n\n unsubscribeTouchEnd = renderer.listen(\n 'document',\n 'touchend',\n (event: TouchEvent) => {\n observer.next({\n clientX: event.changedTouches[0].clientX,\n clientY: event.changedTouches[0].clientY,\n event\n });\n }\n );\n\n unsubscribeTouchCancel = renderer.listen(\n 'document',\n 'touchcancel',\n (event: TouchEvent) => {\n observer.next({\n clientX: event.changedTouches[0].clientX,\n clientY: event.changedTouches[0].clientY,\n event\n });\n }\n );\n });\n\n return () => {\n unsubscribeMouseUp();\n unsubscribeTouchEnd();\n unsubscribeTouchCancel();\n };\n }\n ).pipe(share());\n }\n}\n","import {\n Directive,\n Input,\n HostListener,\n Renderer2,\n ElementRef,\n OnDestroy,\n NgZone\n} from '@angular/core';\nimport { ResizableDirective } from './resizable.directive';\nimport { Edges } from './interfaces/edges.interface';\n\n/**\n * An element placed inside a `mwlResizable` directive to be used as a drag and resize handle\n *\n * For example\n *\n * ```html\n *
\n *
\n *
\n * ```\n */\n@Directive({\n selector: '[mwlResizeHandle]'\n})\nexport class ResizeHandleDirective implements OnDestroy {\n /**\n * The `Edges` object that contains the edges of the parent element that dragging the handle will trigger a resize on\n */\n @Input() resizeEdges: Edges = {};\n\n private eventListeners: {\n touchmove?: () => void;\n mousemove?: () => void;\n [key: string]: (() => void) | undefined;\n } = {};\n\n constructor(\n private renderer: Renderer2,\n private element: ElementRef,\n private zone: NgZone,\n private resizable: ResizableDirective\n ) {}\n\n ngOnDestroy(): void {\n this.unsubscribeEventListeners();\n }\n\n /**\n * @hidden\n */\n @HostListener('touchstart', [\n '$event',\n '$event.touches[0].clientX',\n '$event.touches[0].clientY'\n ])\n @HostListener('mousedown', ['$event', '$event.clientX', '$event.clientY'])\n onMousedown(\n event: MouseEvent | TouchEvent,\n clientX: number,\n clientY: number\n ): void {\n event.preventDefault();\n this.zone.runOutsideAngular(() => {\n if (!this.eventListeners.touchmove) {\n this.eventListeners.touchmove = this.renderer.listen(\n this.element.nativeElement,\n 'touchmove',\n (touchMoveEvent: TouchEvent) => {\n this.onMousemove(\n touchMoveEvent,\n touchMoveEvent.targetTouches[0].clientX,\n touchMoveEvent.targetTouches[0].clientY\n );\n }\n );\n }\n if (!this.eventListeners.mousemove) {\n this.eventListeners.mousemove = this.renderer.listen(\n this.element.nativeElement,\n 'mousemove',\n (mouseMoveEvent: MouseEvent) => {\n this.onMousemove(\n mouseMoveEvent,\n mouseMoveEvent.clientX,\n mouseMoveEvent.clientY\n );\n }\n );\n }\n this.resizable.mousedown.next({\n clientX,\n clientY,\n edges: this.resizeEdges\n });\n });\n }\n\n /**\n * @hidden\n */\n @HostListener('touchend', [\n '$event.changedTouches[0].clientX',\n '$event.changedTouches[0].clientY'\n ])\n @HostListener('touchcancel', [\n '$event.changedTouches[0].clientX',\n '$event.changedTouches[0].clientY'\n ])\n @HostListener('mouseup', ['$event.clientX', '$event.clientY'])\n onMouseup(clientX: number, clientY: number): void {\n this.zone.runOutsideAngular(() => {\n this.unsubscribeEventListeners();\n this.resizable.mouseup.next({\n clientX,\n clientY,\n edges: this.resizeEdges\n });\n });\n }\n\n private onMousemove(\n event: MouseEvent | TouchEvent,\n clientX: number,\n clientY: number\n ): void {\n this.resizable.mousemove.next({\n clientX,\n clientY,\n edges: this.resizeEdges,\n event\n });\n }\n\n private unsubscribeEventListeners(): void {\n Object.keys(this.eventListeners).forEach(type => {\n (this as any).eventListeners[type]();\n delete this.eventListeners[type];\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ResizableDirective } from './resizable.directive';\nimport { ResizeHandleDirective } from './resize-handle.directive';\n\n@NgModule({\n declarations: [ResizableDirective, ResizeHandleDirective],\n exports: [ResizableDirective, ResizeHandleDirective]\n})\nexport class ResizableModule {}\n"]} \ No newline at end of file diff --git a/dist/esm2015/angular-resizable-element.js b/dist/esm2015/angular-resizable-element.js new file mode 100644 index 0000000..ba28abe --- /dev/null +++ b/dist/esm2015/angular-resizable-element.js @@ -0,0 +1,9 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Generated bundle index. Do not edit. + */ +export { ResizableDirective, ResizeHandleDirective, ResizableModule } from './index'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1yZXNpemFibGUtZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItcmVzaXphYmxlLWVsZW1lbnQvIiwic291cmNlcyI6WyJhbmd1bGFyLXJlc2l6YWJsZS1lbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQSwyRUFBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19 \ No newline at end of file diff --git a/dist/esm2015/index.js b/dist/esm2015/index.js new file mode 100644 index 0000000..f8d796e --- /dev/null +++ b/dist/esm2015/index.js @@ -0,0 +1,8 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +export { ResizableModule } from './resizable.module'; +export { ResizableDirective } from './resizable.directive'; +export { ResizeHandleDirective } from './resize-handle.directive'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLXJlc2l6YWJsZS1lbGVtZW50LyIsInNvdXJjZXMiOlsiaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGdDQUFjLG9CQUFvQixDQUFDO0FBSW5DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9yZXNpemFibGUubW9kdWxlJztcbmV4cG9ydCB7IEJvdW5kaW5nUmVjdGFuZ2xlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2JvdW5kaW5nLXJlY3RhbmdsZS5pbnRlcmZhY2UnO1xuZXhwb3J0IHsgRWRnZXMgfSBmcm9tICcuL2ludGVyZmFjZXMvZWRnZXMuaW50ZXJmYWNlJztcbmV4cG9ydCB7IFJlc2l6ZUV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3Jlc2l6ZS1ldmVudC5pbnRlcmZhY2UnO1xuZXhwb3J0IHsgUmVzaXphYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9yZXNpemFibGUuZGlyZWN0aXZlJztcbmV4cG9ydCB7IFJlc2l6ZUhhbmRsZURpcmVjdGl2ZSB9IGZyb20gJy4vcmVzaXplLWhhbmRsZS5kaXJlY3RpdmUnO1xuIl19 \ No newline at end of file diff --git a/dist/esm2015/interfaces/bounding-rectangle.interface.js b/dist/esm2015/interfaces/bounding-rectangle.interface.js new file mode 100644 index 0000000..8ca4a46 --- /dev/null +++ b/dist/esm2015/interfaces/bounding-rectangle.interface.js @@ -0,0 +1,29 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * The bounding rectangle of the resized element + * @record + */ +export function BoundingRectangle() { } +if (false) { + /** @type {?} */ + BoundingRectangle.prototype.top; + /** @type {?} */ + BoundingRectangle.prototype.bottom; + /** @type {?} */ + BoundingRectangle.prototype.left; + /** @type {?} */ + BoundingRectangle.prototype.right; + /** @type {?|undefined} */ + BoundingRectangle.prototype.height; + /** @type {?|undefined} */ + BoundingRectangle.prototype.width; + /** @type {?|undefined} */ + BoundingRectangle.prototype.scrollTop; + /** @type {?|undefined} */ + BoundingRectangle.prototype.scrollLeft; + /* Skipping unhandled member: [key: string]: number | undefined;*/ +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm91bmRpbmctcmVjdGFuZ2xlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItcmVzaXphYmxlLWVsZW1lbnQvIiwic291cmNlcyI6WyJpbnRlcmZhY2VzL2JvdW5kaW5nLXJlY3RhbmdsZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFHQSx1Q0FVQzs7O0lBVEMsZ0NBQVk7O0lBQ1osbUNBQWU7O0lBQ2YsaUNBQWE7O0lBQ2Isa0NBQWM7O0lBQ2QsbUNBQWdCOztJQUNoQixrQ0FBZTs7SUFDZixzQ0FBbUI7O0lBQ25CLHVDQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiB0aGUgcmVzaXplZCBlbGVtZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm91bmRpbmdSZWN0YW5nbGUge1xuICB0b3A6IG51bWJlcjtcbiAgYm90dG9tOiBudW1iZXI7XG4gIGxlZnQ6IG51bWJlcjtcbiAgcmlnaHQ6IG51bWJlcjtcbiAgaGVpZ2h0PzogbnVtYmVyO1xuICB3aWR0aD86IG51bWJlcjtcbiAgc2Nyb2xsVG9wPzogbnVtYmVyO1xuICBzY3JvbGxMZWZ0PzogbnVtYmVyO1xuICBba2V5OiBzdHJpbmddOiBudW1iZXIgfCB1bmRlZmluZWQ7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/esm2015/interfaces/edges.interface.js b/dist/esm2015/interfaces/edges.interface.js new file mode 100644 index 0000000..62c88e1 --- /dev/null +++ b/dist/esm2015/interfaces/edges.interface.js @@ -0,0 +1,21 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * The edges that the resize event were triggered on + * @record + */ +export function Edges() { } +if (false) { + /** @type {?|undefined} */ + Edges.prototype.top; + /** @type {?|undefined} */ + Edges.prototype.bottom; + /** @type {?|undefined} */ + Edges.prototype.left; + /** @type {?|undefined} */ + Edges.prototype.right; + /* Skipping unhandled member: [key: string]: boolean | number | undefined;*/ +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZXMuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1yZXNpemFibGUtZWxlbWVudC8iLCJzb3VyY2VzIjpbImludGVyZmFjZXMvZWRnZXMuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBR0EsMkJBTUM7OztJQUxDLG9CQUF1Qjs7SUFDdkIsdUJBQTBCOztJQUMxQixxQkFBd0I7O0lBQ3hCLHNCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGVkZ2VzIHRoYXQgdGhlIHJlc2l6ZSBldmVudCB3ZXJlIHRyaWdnZXJlZCBvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkZ2VzIHtcbiAgdG9wPzogYm9vbGVhbiB8IG51bWJlcjtcbiAgYm90dG9tPzogYm9vbGVhbiB8IG51bWJlcjtcbiAgbGVmdD86IGJvb2xlYW4gfCBudW1iZXI7XG4gIHJpZ2h0PzogYm9vbGVhbiB8IG51bWJlcjtcbiAgW2tleTogc3RyaW5nXTogYm9vbGVhbiB8IG51bWJlciB8IHVuZGVmaW5lZDtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/esm2015/interfaces/resize-event.interface.js b/dist/esm2015/interfaces/resize-event.interface.js new file mode 100644 index 0000000..5497cef --- /dev/null +++ b/dist/esm2015/interfaces/resize-event.interface.js @@ -0,0 +1,16 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * The `$event` object that is passed to the resize events + * @record + */ +export function ResizeEvent() { } +if (false) { + /** @type {?} */ + ResizeEvent.prototype.rectangle; + /** @type {?} */ + ResizeEvent.prototype.edges; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLWV2ZW50LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItcmVzaXphYmxlLWVsZW1lbnQvIiwic291cmNlcyI6WyJpbnRlcmZhY2VzL3Jlc2l6ZS1ldmVudC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFNQSxpQ0FHQzs7O0lBRkMsZ0NBQTZCOztJQUM3Qiw0QkFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvdW5kaW5nUmVjdGFuZ2xlIH0gZnJvbSAnLi9ib3VuZGluZy1yZWN0YW5nbGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVkZ2VzIH0gZnJvbSAnLi9lZGdlcy5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIFRoZSBgJGV2ZW50YCBvYmplY3QgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHJlc2l6ZSBldmVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNpemVFdmVudCB7XG4gIHJlY3RhbmdsZTogQm91bmRpbmdSZWN0YW5nbGU7XG4gIGVkZ2VzOiBFZGdlcztcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/esm2015/resizable.directive.js b/dist/esm2015/resizable.directive.js new file mode 100644 index 0000000..1056668 --- /dev/null +++ b/dist/esm2015/resizable.directive.js @@ -0,0 +1,899 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Directive, Renderer2, ElementRef, Output, Input, EventEmitter, NgZone, Inject, PLATFORM_ID } from '@angular/core'; +import { isPlatformBrowser } from '@angular/common'; +import { Subject, Observable, merge, EMPTY } from 'rxjs'; +import { map, mergeMap, takeUntil, filter, pairwise, take, share, auditTime, switchMap, startWith } from 'rxjs/operators'; +/** + * @record + */ +function PointerEventCoordinate() { } +if (false) { + /** @type {?} */ + PointerEventCoordinate.prototype.clientX; + /** @type {?} */ + PointerEventCoordinate.prototype.clientY; + /** @type {?} */ + PointerEventCoordinate.prototype.event; +} +/** + * @record + */ +function Coordinate() { } +if (false) { + /** @type {?} */ + Coordinate.prototype.x; + /** @type {?} */ + Coordinate.prototype.y; +} +/** + * @param {?} value1 + * @param {?} value2 + * @param {?=} precision + * @return {?} + */ +function isNumberCloseTo(value1, value2, precision = 3) { + /** @type {?} */ + const diff = Math.abs(value1 - value2); + return diff < precision; +} +/** + * @param {?} startingRect + * @param {?} edges + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ +function getNewBoundingRectangle(startingRect, edges, clientX, clientY) { + /** @type {?} */ + const newBoundingRect = { + top: startingRect.top, + bottom: startingRect.bottom, + left: startingRect.left, + right: startingRect.right + }; + if (edges.top) { + newBoundingRect.top += clientY; + } + if (edges.bottom) { + newBoundingRect.bottom += clientY; + } + if (edges.left) { + newBoundingRect.left += clientX; + } + if (edges.right) { + newBoundingRect.right += clientX; + } + newBoundingRect.height = newBoundingRect.bottom - newBoundingRect.top; + newBoundingRect.width = newBoundingRect.right - newBoundingRect.left; + return newBoundingRect; +} +/** + * @param {?} element + * @param {?} ghostElementPositioning + * @return {?} + */ +function getElementRect(element, ghostElementPositioning) { + /** @type {?} */ + let translateX = 0; + /** @type {?} */ + let translateY = 0; + /** @type {?} */ + const style = element.nativeElement.style; + /** @type {?} */ + const transformProperties = [ + 'transform', + '-ms-transform', + '-moz-transform', + '-o-transform' + ]; + /** @type {?} */ + const transform = transformProperties + .map(property => style[property]) + .find(value => !!value); + if (transform && transform.includes('translate3d')) { + translateX = transform.replace(/.*translate3d\((.*)px, (.*)px, (.*)px\).*/, '$1'); + translateY = transform.replace(/.*translate3d\((.*)px, (.*)px, (.*)px\).*/, '$2'); + } + else if (transform && transform.includes('translate')) { + translateX = transform.replace(/.*translate\((.*)px, (.*)px\).*/, '$1'); + translateY = transform.replace(/.*translate\((.*)px, (.*)px\).*/, '$2'); + } + if (ghostElementPositioning === 'absolute') { + return { + height: element.nativeElement.offsetHeight, + width: element.nativeElement.offsetWidth, + top: element.nativeElement.offsetTop - translateY, + bottom: element.nativeElement.offsetHeight + + element.nativeElement.offsetTop - + translateY, + left: element.nativeElement.offsetLeft - translateX, + right: element.nativeElement.offsetWidth + + element.nativeElement.offsetLeft - + translateX + }; + } + else { + /** @type {?} */ + const boundingRect = element.nativeElement.getBoundingClientRect(); + return { + height: boundingRect.height, + width: boundingRect.width, + top: boundingRect.top - translateY, + bottom: boundingRect.bottom - translateY, + left: boundingRect.left - translateX, + right: boundingRect.right - translateX, + scrollTop: element.nativeElement.scrollTop, + scrollLeft: element.nativeElement.scrollLeft + }; + } +} +/** + * @param {?} __0 + * @return {?} + */ +function isWithinBoundingY({ clientY, rect }) { + return clientY >= rect.top && clientY <= rect.bottom; +} +/** + * @param {?} __0 + * @return {?} + */ +function isWithinBoundingX({ clientX, rect }) { + return clientX >= rect.left && clientX <= rect.right; +} +/** + * @param {?} __0 + * @return {?} + */ +function getResizeEdges({ clientX, clientY, elm, allowedEdges, cursorPrecision }) { + /** @type {?} */ + const elmPosition = elm.nativeElement.getBoundingClientRect(); + /** @type {?} */ + const edges = {}; + if (allowedEdges.left && + isNumberCloseTo(clientX, elmPosition.left, cursorPrecision) && + isWithinBoundingY({ clientY, rect: elmPosition })) { + edges.left = true; + } + if (allowedEdges.right && + isNumberCloseTo(clientX, elmPosition.right, cursorPrecision) && + isWithinBoundingY({ clientY, rect: elmPosition })) { + edges.right = true; + } + if (allowedEdges.top && + isNumberCloseTo(clientY, elmPosition.top, cursorPrecision) && + isWithinBoundingX({ clientX, rect: elmPosition })) { + edges.top = true; + } + if (allowedEdges.bottom && + isNumberCloseTo(clientY, elmPosition.bottom, cursorPrecision) && + isWithinBoundingX({ clientX, rect: elmPosition })) { + edges.bottom = true; + } + return edges; +} +/** + * @record + */ +export function ResizeCursors() { } +if (false) { + /** @type {?} */ + ResizeCursors.prototype.topLeft; + /** @type {?} */ + ResizeCursors.prototype.topRight; + /** @type {?} */ + ResizeCursors.prototype.bottomLeft; + /** @type {?} */ + ResizeCursors.prototype.bottomRight; + /** @type {?} */ + ResizeCursors.prototype.leftOrRight; + /** @type {?} */ + ResizeCursors.prototype.topOrBottom; +} +/** @type {?} */ +const DEFAULT_RESIZE_CURSORS = Object.freeze({ + topLeft: 'nw-resize', + topRight: 'ne-resize', + bottomLeft: 'sw-resize', + bottomRight: 'se-resize', + leftOrRight: 'col-resize', + topOrBottom: 'row-resize' +}); +/** + * @param {?} edges + * @param {?} cursors + * @return {?} + */ +function getResizeCursor(edges, cursors) { + if (edges.left && edges.top) { + return cursors.topLeft; + } + else if (edges.right && edges.top) { + return cursors.topRight; + } + else if (edges.left && edges.bottom) { + return cursors.bottomLeft; + } + else if (edges.right && edges.bottom) { + return cursors.bottomRight; + } + else if (edges.left || edges.right) { + return cursors.leftOrRight; + } + else if (edges.top || edges.bottom) { + return cursors.topOrBottom; + } + else { + return ''; + } +} +/** + * @param {?} __0 + * @return {?} + */ +function getEdgesDiff({ edges, initialRectangle, newRectangle }) { + /** @type {?} */ + const edgesDiff = {}; + Object.keys(edges).forEach(edge => { + edgesDiff[edge] = (newRectangle[edge] || 0) - (initialRectangle[edge] || 0); + }); + return edgesDiff; +} +/** @type {?} */ +const RESIZE_ACTIVE_CLASS = 'resize-active'; +/** @type {?} */ +const RESIZE_LEFT_HOVER_CLASS = 'resize-left-hover'; +/** @type {?} */ +const RESIZE_RIGHT_HOVER_CLASS = 'resize-right-hover'; +/** @type {?} */ +const RESIZE_TOP_HOVER_CLASS = 'resize-top-hover'; +/** @type {?} */ +const RESIZE_BOTTOM_HOVER_CLASS = 'resize-bottom-hover'; +/** @type {?} */ +const RESIZE_GHOST_ELEMENT_CLASS = 'resize-ghost-element'; +/** @type {?} */ +export const MOUSE_MOVE_THROTTLE_MS = 50; +/** + * Place this on an element to make it resizable. For example: + * + * ```html + *
+ *
+ * ``` + */ +export class ResizableDirective { + /** + * @hidden + * @param {?} platformId + * @param {?} renderer + * @param {?} elm + * @param {?} zone + */ + constructor(platformId, renderer, elm, zone) { + this.platformId = platformId; + this.renderer = renderer; + this.elm = elm; + this.zone = zone; + /** + * The edges that an element can be resized from. Pass an object like `{top: true, bottom: false}`. By default no edges can be resized. + * @deprecated use a resize handle instead that positions itself to the side of the element you would like to resize + */ + this.resizeEdges = {}; + /** + * Set to `true` to enable a temporary resizing effect of the element in between the `resizeStart` and `resizeEnd` events. + */ + this.enableGhostResize = false; + /** + * A snap grid that resize events will be locked to. + * + * e.g. to only allow the element to be resized every 10px set it to `{left: 10, right: 10}` + */ + this.resizeSnapGrid = {}; + /** + * The mouse cursors that will be set on the resize edges + */ + this.resizeCursors = DEFAULT_RESIZE_CURSORS; + /** + * Mouse over thickness to active cursor. + * @deprecated invalid when you migrate to use resize handles instead of setting resizeEdges on the element + */ + this.resizeCursorPrecision = 3; + /** + * Define the positioning of the ghost element (can be fixed or absolute) + */ + this.ghostElementPositioning = 'fixed'; + /** + * Allow elements to be resized to negative dimensions + */ + this.allowNegativeResizes = false; + /** + * Called when the mouse is pressed and a resize event is about to begin. `$event` is a `ResizeEvent` object. + */ + this.resizeStart = new EventEmitter(); + /** + * Called as the mouse is dragged after a resize event has begun. `$event` is a `ResizeEvent` object. + */ + this.resizing = new EventEmitter(); + /** + * Called after the mouse is released after a resize event. `$event` is a `ResizeEvent` object. + */ + this.resizeEnd = new EventEmitter(); + /** + * @hidden + */ + this.mouseup = new Subject(); + /** + * @hidden + */ + this.mousedown = new Subject(); + /** + * @hidden + */ + this.mousemove = new Subject(); + this.destroy$ = new Subject(); + this.resizeEdges$ = new Subject(); + this.pointerEventListeners = PointerEventListeners.getInstance(renderer, zone); + } + /** + * @hidden + * @return {?} + */ + ngOnInit() { + // TODO - use some fancy Observable.merge's for this + this.pointerEventListeners.pointerDown + .pipe(takeUntil(this.destroy$)) + .subscribe(({ clientX, clientY }) => { + this.mousedown.next({ clientX, clientY }); + }); + this.pointerEventListeners.pointerMove + .pipe(takeUntil(this.destroy$)) + .subscribe(({ clientX, clientY, event }) => { + this.mousemove.next({ clientX, clientY, event }); + }); + this.pointerEventListeners.pointerUp + .pipe(takeUntil(this.destroy$)) + .subscribe(({ clientX, clientY }) => { + this.mouseup.next({ clientX, clientY }); + }); + /** @type {?} */ + let currentResize; + /** @type {?} */ + const removeGhostElement = () => { + if (currentResize && currentResize.clonedNode) { + this.elm.nativeElement.parentElement.removeChild(currentResize.clonedNode); + this.renderer.setStyle(this.elm.nativeElement, 'visibility', 'inherit'); + } + }; + /** @type {?} */ + const getResizeCursors = () => { + return Object.assign({}, DEFAULT_RESIZE_CURSORS, this.resizeCursors); + }; + /** @type {?} */ + const mouseMove = this.mousemove.pipe(share()); + mouseMove.pipe(filter(() => !!currentResize)).subscribe(({ event }) => { + event.preventDefault(); + }); + this.resizeEdges$ + .pipe(startWith(this.resizeEdges), map(() => { + return (this.resizeEdges && + Object.keys(this.resizeEdges).some(edge => !!this.resizeEdges[edge])); + }), switchMap(legacyResizeEdgesEnabled => legacyResizeEdgesEnabled ? mouseMove : EMPTY), auditTime(MOUSE_MOVE_THROTTLE_MS)) + .subscribe(({ clientX, clientY }) => { + /** @type {?} */ + const resizeEdges = getResizeEdges({ + clientX, + clientY, + elm: this.elm, + allowedEdges: this.resizeEdges, + cursorPrecision: this.resizeCursorPrecision + }); + /** @type {?} */ + const resizeCursors = getResizeCursors(); + if (!currentResize) { + /** @type {?} */ + const cursor = getResizeCursor(resizeEdges, resizeCursors); + this.renderer.setStyle(this.elm.nativeElement, 'cursor', cursor); + } + this.setElementClass(this.elm, RESIZE_LEFT_HOVER_CLASS, resizeEdges.left === true); + this.setElementClass(this.elm, RESIZE_RIGHT_HOVER_CLASS, resizeEdges.right === true); + this.setElementClass(this.elm, RESIZE_TOP_HOVER_CLASS, resizeEdges.top === true); + this.setElementClass(this.elm, RESIZE_BOTTOM_HOVER_CLASS, resizeEdges.bottom === true); + }); + /** @type {?} */ + const mousedrag = this.mousedown + .pipe(mergeMap(startCoords => { + /** + * @param {?} moveCoords + * @return {?} + */ + function getDiff(moveCoords) { + return { + clientX: moveCoords.clientX - startCoords.clientX, + clientY: moveCoords.clientY - startCoords.clientY + }; + } + /** @type {?} */ + const getSnapGrid = () => { + /** @type {?} */ + const snapGrid = { x: 1, y: 1 }; + if (currentResize) { + if (this.resizeSnapGrid.left && currentResize.edges.left) { + snapGrid.x = +this.resizeSnapGrid.left; + } + else if (this.resizeSnapGrid.right && + currentResize.edges.right) { + snapGrid.x = +this.resizeSnapGrid.right; + } + if (this.resizeSnapGrid.top && currentResize.edges.top) { + snapGrid.y = +this.resizeSnapGrid.top; + } + else if (this.resizeSnapGrid.bottom && + currentResize.edges.bottom) { + snapGrid.y = +this.resizeSnapGrid.bottom; + } + } + return snapGrid; + }; + /** + * @param {?} coords + * @param {?} snapGrid + * @return {?} + */ + function getGrid(coords, snapGrid) { + return { + x: Math.ceil(coords.clientX / snapGrid.x), + y: Math.ceil(coords.clientY / snapGrid.y) + }; + } + return merge(mouseMove.pipe(take(1)).pipe(map(coords => [coords])), mouseMove.pipe(pairwise())) + .pipe(map(([previousCoords, newCoords]) => { + return [ + previousCoords ? getDiff(previousCoords) : previousCoords, + getDiff(newCoords) + ]; + })) + .pipe(filter(([previousCoords, newCoords]) => { + if (!previousCoords) { + return true; + } + /** @type {?} */ + const snapGrid = getSnapGrid(); + /** @type {?} */ + const previousGrid = getGrid(previousCoords, snapGrid); + /** @type {?} */ + const newGrid = getGrid(newCoords, snapGrid); + return (previousGrid.x !== newGrid.x || previousGrid.y !== newGrid.y); + })) + .pipe(map(([, newCoords]) => { + /** @type {?} */ + const snapGrid = getSnapGrid(); + return { + clientX: Math.round(newCoords.clientX / snapGrid.x) * snapGrid.x, + clientY: Math.round(newCoords.clientY / snapGrid.y) * snapGrid.y + }; + })) + .pipe(takeUntil(merge(this.mouseup, this.mousedown))); + })) + .pipe(filter(() => !!currentResize)); + mousedrag + .pipe(map(({ clientX, clientY }) => { + return getNewBoundingRectangle((/** @type {?} */ (currentResize)).startingRect, (/** @type {?} */ (currentResize)).edges, clientX, clientY); + })) + .pipe(filter((newBoundingRect) => { + return (this.allowNegativeResizes || + !!(newBoundingRect.height && + newBoundingRect.width && + newBoundingRect.height > 0 && + newBoundingRect.width > 0)); + })) + .pipe(filter((newBoundingRect) => { + return this.validateResize + ? this.validateResize({ + rectangle: newBoundingRect, + edges: getEdgesDiff({ + edges: (/** @type {?} */ (currentResize)).edges, + initialRectangle: (/** @type {?} */ (currentResize)).startingRect, + newRectangle: newBoundingRect + }) + }) + : true; + })) + .subscribe((newBoundingRect) => { + if (currentResize && currentResize.clonedNode) { + this.renderer.setStyle(currentResize.clonedNode, 'height', `${newBoundingRect.height}px`); + this.renderer.setStyle(currentResize.clonedNode, 'width', `${newBoundingRect.width}px`); + this.renderer.setStyle(currentResize.clonedNode, 'top', `${newBoundingRect.top}px`); + this.renderer.setStyle(currentResize.clonedNode, 'left', `${newBoundingRect.left}px`); + } + this.zone.run(() => { + this.resizing.emit({ + edges: getEdgesDiff({ + edges: (/** @type {?} */ (currentResize)).edges, + initialRectangle: (/** @type {?} */ (currentResize)).startingRect, + newRectangle: newBoundingRect + }), + rectangle: newBoundingRect + }); + }); + (/** @type {?} */ (currentResize)).currentRect = newBoundingRect; + }); + this.mousedown + .pipe(map(({ clientX, clientY, edges }) => { + return (edges || + getResizeEdges({ + clientX, + clientY, + elm: this.elm, + allowedEdges: this.resizeEdges, + cursorPrecision: this.resizeCursorPrecision + })); + })) + .pipe(filter((edges) => { + return Object.keys(edges).length > 0; + })) + .subscribe((edges) => { + if (currentResize) { + removeGhostElement(); + } + /** @type {?} */ + const startingRect = getElementRect(this.elm, this.ghostElementPositioning); + currentResize = { + edges, + startingRect, + currentRect: startingRect + }; + /** @type {?} */ + const resizeCursors = getResizeCursors(); + /** @type {?} */ + const cursor = getResizeCursor(currentResize.edges, resizeCursors); + this.renderer.setStyle(document.body, 'cursor', cursor); + this.setElementClass(this.elm, RESIZE_ACTIVE_CLASS, true); + if (this.enableGhostResize) { + currentResize.clonedNode = this.elm.nativeElement.cloneNode(true); + this.elm.nativeElement.parentElement.appendChild(currentResize.clonedNode); + this.renderer.setStyle(this.elm.nativeElement, 'visibility', 'hidden'); + this.renderer.setStyle(currentResize.clonedNode, 'position', this.ghostElementPositioning); + this.renderer.setStyle(currentResize.clonedNode, 'left', `${currentResize.startingRect.left}px`); + this.renderer.setStyle(currentResize.clonedNode, 'top', `${currentResize.startingRect.top}px`); + this.renderer.setStyle(currentResize.clonedNode, 'height', `${currentResize.startingRect.height}px`); + this.renderer.setStyle(currentResize.clonedNode, 'width', `${currentResize.startingRect.width}px`); + this.renderer.setStyle(currentResize.clonedNode, 'cursor', getResizeCursor(currentResize.edges, resizeCursors)); + this.renderer.addClass(currentResize.clonedNode, RESIZE_GHOST_ELEMENT_CLASS); + (/** @type {?} */ (currentResize.clonedNode)).scrollTop = (/** @type {?} */ (currentResize.startingRect + .scrollTop)); + (/** @type {?} */ (currentResize.clonedNode)).scrollLeft = (/** @type {?} */ (currentResize.startingRect + .scrollLeft)); + } + this.zone.run(() => { + this.resizeStart.emit({ + edges: getEdgesDiff({ + edges, + initialRectangle: startingRect, + newRectangle: startingRect + }), + rectangle: getNewBoundingRectangle(startingRect, {}, 0, 0) + }); + }); + }); + this.mouseup.subscribe(() => { + if (currentResize) { + this.renderer.removeClass(this.elm.nativeElement, RESIZE_ACTIVE_CLASS); + this.renderer.setStyle(document.body, 'cursor', ''); + this.renderer.setStyle(this.elm.nativeElement, 'cursor', ''); + this.zone.run(() => { + this.resizeEnd.emit({ + edges: getEdgesDiff({ + edges: (/** @type {?} */ (currentResize)).edges, + initialRectangle: (/** @type {?} */ (currentResize)).startingRect, + newRectangle: (/** @type {?} */ (currentResize)).currentRect + }), + rectangle: (/** @type {?} */ (currentResize)).currentRect + }); + }); + removeGhostElement(); + currentResize = null; + } + }); + } + /** + * @hidden + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + if (changes.resizeEdges) { + this.resizeEdges$.next(this.resizeEdges); + } + } + /** + * @hidden + * @return {?} + */ + ngOnDestroy() { + // browser check for angular universal, because it doesn't know what document is + if (isPlatformBrowser(this.platformId)) { + this.renderer.setStyle(document.body, 'cursor', ''); + } + this.mousedown.complete(); + this.mouseup.complete(); + this.mousemove.complete(); + this.resizeEdges$.complete(); + this.destroy$.next(); + } + /** + * @private + * @param {?} elm + * @param {?} name + * @param {?} add + * @return {?} + */ + setElementClass(elm, name, add) { + if (add) { + this.renderer.addClass(elm.nativeElement, name); + } + else { + this.renderer.removeClass(elm.nativeElement, name); + } + } +} +ResizableDirective.decorators = [ + { type: Directive, args: [{ + selector: '[mwlResizable]' + },] } +]; +/** @nocollapse */ +ResizableDirective.ctorParameters = () => [ + { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }, + { type: Renderer2 }, + { type: ElementRef }, + { type: NgZone } +]; +ResizableDirective.propDecorators = { + validateResize: [{ type: Input }], + resizeEdges: [{ type: Input }], + enableGhostResize: [{ type: Input }], + resizeSnapGrid: [{ type: Input }], + resizeCursors: [{ type: Input }], + resizeCursorPrecision: [{ type: Input }], + ghostElementPositioning: [{ type: Input }], + allowNegativeResizes: [{ type: Input }], + resizeStart: [{ type: Output }], + resizing: [{ type: Output }], + resizeEnd: [{ type: Output }] +}; +if (false) { + /** + * A function that will be called before each resize event. Return `true` to allow the resize event to propagate or `false` to cancel it + * @type {?} + */ + ResizableDirective.prototype.validateResize; + /** + * The edges that an element can be resized from. Pass an object like `{top: true, bottom: false}`. By default no edges can be resized. + * @deprecated use a resize handle instead that positions itself to the side of the element you would like to resize + * @type {?} + */ + ResizableDirective.prototype.resizeEdges; + /** + * Set to `true` to enable a temporary resizing effect of the element in between the `resizeStart` and `resizeEnd` events. + * @type {?} + */ + ResizableDirective.prototype.enableGhostResize; + /** + * A snap grid that resize events will be locked to. + * + * e.g. to only allow the element to be resized every 10px set it to `{left: 10, right: 10}` + * @type {?} + */ + ResizableDirective.prototype.resizeSnapGrid; + /** + * The mouse cursors that will be set on the resize edges + * @type {?} + */ + ResizableDirective.prototype.resizeCursors; + /** + * Mouse over thickness to active cursor. + * @deprecated invalid when you migrate to use resize handles instead of setting resizeEdges on the element + * @type {?} + */ + ResizableDirective.prototype.resizeCursorPrecision; + /** + * Define the positioning of the ghost element (can be fixed or absolute) + * @type {?} + */ + ResizableDirective.prototype.ghostElementPositioning; + /** + * Allow elements to be resized to negative dimensions + * @type {?} + */ + ResizableDirective.prototype.allowNegativeResizes; + /** + * Called when the mouse is pressed and a resize event is about to begin. `$event` is a `ResizeEvent` object. + * @type {?} + */ + ResizableDirective.prototype.resizeStart; + /** + * Called as the mouse is dragged after a resize event has begun. `$event` is a `ResizeEvent` object. + * @type {?} + */ + ResizableDirective.prototype.resizing; + /** + * Called after the mouse is released after a resize event. `$event` is a `ResizeEvent` object. + * @type {?} + */ + ResizableDirective.prototype.resizeEnd; + /** + * @hidden + * @type {?} + */ + ResizableDirective.prototype.mouseup; + /** + * @hidden + * @type {?} + */ + ResizableDirective.prototype.mousedown; + /** + * @hidden + * @type {?} + */ + ResizableDirective.prototype.mousemove; + /** + * @type {?} + * @private + */ + ResizableDirective.prototype.pointerEventListeners; + /** + * @type {?} + * @private + */ + ResizableDirective.prototype.destroy$; + /** + * @type {?} + * @private + */ + ResizableDirective.prototype.resizeEdges$; + /** + * @type {?} + * @private + */ + ResizableDirective.prototype.platformId; + /** + * @type {?} + * @private + */ + ResizableDirective.prototype.renderer; + /** @type {?} */ + ResizableDirective.prototype.elm; + /** + * @type {?} + * @private + */ + ResizableDirective.prototype.zone; +} +class PointerEventListeners { + // tslint:disable-line + /** + * @param {?} renderer + * @param {?} zone + * @return {?} + */ + static getInstance(renderer, zone) { + if (!PointerEventListeners.instance) { + PointerEventListeners.instance = new PointerEventListeners(renderer, zone); + } + return PointerEventListeners.instance; + } + /** + * @param {?} renderer + * @param {?} zone + */ + constructor(renderer, zone) { + this.pointerDown = new Observable((observer) => { + /** @type {?} */ + let unsubscribeMouseDown; + /** @type {?} */ + let unsubscribeTouchStart; + zone.runOutsideAngular(() => { + unsubscribeMouseDown = renderer.listen('document', 'mousedown', (event) => { + observer.next({ + clientX: event.clientX, + clientY: event.clientY, + event + }); + }); + unsubscribeTouchStart = renderer.listen('document', 'touchstart', (event) => { + observer.next({ + clientX: event.touches[0].clientX, + clientY: event.touches[0].clientY, + event + }); + }); + }); + return () => { + unsubscribeMouseDown(); + unsubscribeTouchStart(); + }; + }).pipe(share()); + this.pointerMove = new Observable((observer) => { + /** @type {?} */ + let unsubscribeMouseMove; + /** @type {?} */ + let unsubscribeTouchMove; + zone.runOutsideAngular(() => { + unsubscribeMouseMove = renderer.listen('document', 'mousemove', (event) => { + observer.next({ + clientX: event.clientX, + clientY: event.clientY, + event + }); + }); + unsubscribeTouchMove = renderer.listen('document', 'touchmove', (event) => { + observer.next({ + clientX: event.targetTouches[0].clientX, + clientY: event.targetTouches[0].clientY, + event + }); + }); + }); + return () => { + unsubscribeMouseMove(); + unsubscribeTouchMove(); + }; + }).pipe(share()); + this.pointerUp = new Observable((observer) => { + /** @type {?} */ + let unsubscribeMouseUp; + /** @type {?} */ + let unsubscribeTouchEnd; + /** @type {?} */ + let unsubscribeTouchCancel; + zone.runOutsideAngular(() => { + unsubscribeMouseUp = renderer.listen('document', 'mouseup', (event) => { + observer.next({ + clientX: event.clientX, + clientY: event.clientY, + event + }); + }); + unsubscribeTouchEnd = renderer.listen('document', 'touchend', (event) => { + observer.next({ + clientX: event.changedTouches[0].clientX, + clientY: event.changedTouches[0].clientY, + event + }); + }); + unsubscribeTouchCancel = renderer.listen('document', 'touchcancel', (event) => { + observer.next({ + clientX: event.changedTouches[0].clientX, + clientY: event.changedTouches[0].clientY, + event + }); + }); + }); + return () => { + unsubscribeMouseUp(); + unsubscribeTouchEnd(); + unsubscribeTouchCancel(); + }; + }).pipe(share()); + } +} +if (false) { + /** + * @type {?} + * @private + */ + PointerEventListeners.instance; + /** @type {?} */ + PointerEventListeners.prototype.pointerDown; + /** @type {?} */ + PointerEventListeners.prototype.pointerMove; + /** @type {?} */ + PointerEventListeners.prototype.pointerUp; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItcmVzaXphYmxlLWVsZW1lbnQvIiwic291cmNlcyI6WyJyZXNpemFibGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxVQUFVLEVBRVYsTUFBTSxFQUNOLEtBQUssRUFDTCxZQUFZLEVBRVosTUFBTSxFQUdOLE1BQU0sRUFDTixXQUFXLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQVksS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDUixTQUFTLEVBQ1QsTUFBTSxFQUNOLFFBQVEsRUFDUixJQUFJLEVBQ0osS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNWLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFLeEIscUNBSUM7OztJQUhDLHlDQUFnQjs7SUFDaEIseUNBQWdCOztJQUNoQix1Q0FBK0I7Ozs7O0FBR2pDLHlCQUdDOzs7SUFGQyx1QkFBVTs7SUFDVix1QkFBVTs7Ozs7Ozs7QUFHWixTQUFTLGVBQWUsQ0FDdEIsTUFBYyxFQUNkLE1BQWMsRUFDZCxZQUFvQixDQUFDOztVQUVmLElBQUksR0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDOUMsT0FBTyxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQzFCLENBQUM7Ozs7Ozs7O0FBRUQsU0FBUyx1QkFBdUIsQ0FDOUIsWUFBK0IsRUFDL0IsS0FBWSxFQUNaLE9BQWUsRUFDZixPQUFlOztVQUVULGVBQWUsR0FBc0I7UUFDekMsR0FBRyxFQUFFLFlBQVksQ0FBQyxHQUFHO1FBQ3JC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QUFPO3dCQUN4QyxPQUFPLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO3dCQUN4QyxLQUFLO3FCQUNOLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQ0YsQ0FBQztnQkFFRixzQkFBc0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUN0QyxVQUFVLEVBQ1YsYUFBYSxFQUNiLENBQUMsS0FBaUIsRUFBRSxFQUFFO29CQUNwQixRQUFRLENBQUMsSUFBSSxDQUFDO3dCQUNaLE9BQU8sRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87d0JBQ3hDLE9BQU8sRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87d0JBQ3hDLEtBQUs7cUJBQ04sQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FDRixDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLEdBQUcsRUFBRTtnQkFDVixrQkFBa0IsRUFBRSxDQUFDO2dCQUNyQixtQkFBbUIsRUFBRSxDQUFDO2dCQUN0QixzQkFBc0IsRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FDRixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7Q0FDRjs7Ozs7O0lBaEpDLCtCQUErQzs7SUFOL0MsNENBQXVEOztJQUV2RCw0Q0FBdUQ7O0lBRXZELDBDQUFxRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgUmVuZGVyZXIyLFxuICBFbGVtZW50UmVmLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgSW5wdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25EZXN0cm95LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgSW5qZWN0LFxuICBQTEFURk9STV9JRFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN1YmplY3QsIE9ic2VydmFibGUsIE9ic2VydmVyLCBtZXJnZSwgRU1QVFkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIG1hcCxcbiAgbWVyZ2VNYXAsXG4gIHRha2VVbnRpbCxcbiAgZmlsdGVyLFxuICBwYWlyd2lzZSxcbiAgdGFrZSxcbiAgc2hhcmUsXG4gIGF1ZGl0VGltZSxcbiAgc3dpdGNoTWFwLFxuICBzdGFydFdpdGhcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRWRnZXMgfSBmcm9tICcuL2ludGVyZmFjZXMvZWRnZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJvdW5kaW5nUmVjdGFuZ2xlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2JvdW5kaW5nLXJlY3RhbmdsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVzaXplRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvcmVzaXplLWV2ZW50LmludGVyZmFjZSc7XG5cbmludGVyZmFjZSBQb2ludGVyRXZlbnRDb29yZGluYXRlIHtcbiAgY2xpZW50WDogbnVtYmVyO1xuICBjbGllbnRZOiBudW1iZXI7XG4gIGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudDtcbn1cblxuaW50ZXJmYWNlIENvb3JkaW5hdGUge1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXJDbG9zZVRvKFxuICB2YWx1ZTE6IG51bWJlcixcbiAgdmFsdWUyOiBudW1iZXIsXG4gIHByZWNpc2lvbjogbnVtYmVyID0gM1xuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRpZmY6IG51bWJlciA9IE1hdGguYWJzKHZhbHVlMSAtIHZhbHVlMik7XG4gIHJldHVybiBkaWZmIDwgcHJlY2lzaW9uO1xufVxuXG5mdW5jdGlvbiBnZXROZXdCb3VuZGluZ1JlY3RhbmdsZShcbiAgc3RhcnRpbmdSZWN0OiBCb3VuZGluZ1JlY3RhbmdsZSxcbiAgZWRnZXM6IEVkZ2VzLFxuICBjbGllbnRYOiBudW1iZXIsXG4gIGNsaWVudFk6IG51bWJlclxuKTogQm91bmRpbmdSZWN0YW5nbGUge1xuICBjb25zdCBuZXdCb3VuZGluZ1JlY3Q6IEJvdW5kaW5nUmVjdGFuZ2xlID0ge1xuICAgIHRvcDogc3RhcnRpbmdSZWN0LnRvcCxcbiAgICBib3R0b206IHN0YXJ0aW5nUmVjdC5ib3R0b20sXG4gICAgbGVmdDogc3RhcnRpbmdSZWN0LmxlZnQsXG4gICAgcmlnaHQ6IHN0YXJ0aW5nUmVjdC5yaWdodFxuICB9O1xuXG4gIGlmIChlZGdlcy50b3ApIHtcbiAgICBuZXdCb3VuZGluZ1JlY3QudG9wICs9IGNsaWVudFk7XG4gIH1cbiAgaWYgKGVkZ2VzLmJvdHRvbSkge1xuICAgIG5ld0JvdW5kaW5nUmVjdC5ib3R0b20gKz0gY2xpZW50WTtcbiAgfVxuICBpZiAoZWRnZXMubGVmdCkge1xuICAgIG5ld0JvdW5kaW5nUmVjdC5sZWZ0ICs9IGNsaWVudFg7XG4gIH1cbiAgaWYgKGVkZ2VzLnJpZ2h0KSB7XG4gICAgbmV3Qm91bmRpbmdSZWN0LnJpZ2h0ICs9IGNsaWVudFg7XG4gIH1cbiAgbmV3Qm91bmRpbmdSZWN0LmhlaWdodCA9IG5ld0JvdW5kaW5nUmVjdC5ib3R0b20gLSBuZXdCb3VuZGluZ1JlY3QudG9wO1xuICBuZXdCb3VuZGluZ1JlY3Qud2lkdGggPSBuZXdCb3VuZGluZ1JlY3QucmlnaHQgLSBuZXdCb3VuZGluZ1JlY3QubGVmdDtcblxuICByZXR1cm4gbmV3Qm91bmRpbmdSZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRFbGVtZW50UmVjdChcbiAgZWxlbWVudDogRWxlbWVudFJlZixcbiAgZ2hvc3RFbGVtZW50UG9zaXRpb25pbmc6IHN0cmluZ1xuKTogQm91bmRpbmdSZWN0YW5nbGUge1xuICBsZXQgdHJhbnNsYXRlWCA9IDA7XG4gIGxldCB0cmFuc2xhdGVZID0gMDtcbiAgY29uc3Qgc3R5bGUgPSBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGU7XG4gIGNvbnN0IHRyYW5zZm9ybVByb3BlcnRpZXMgPSBbXG4gICAgJ3RyYW5zZm9ybScsXG4gICAgJy1tcy10cmFuc2Zvcm0nLFxuICAgICctbW96LXRyYW5zZm9ybScsXG4gICAgJy1vLXRyYW5zZm9ybSdcbiAgXTtcbiAgY29uc3QgdHJhbnNmb3JtID0gdHJhbnNmb3JtUHJvcGVydGllc1xuICAgIC5tYXAocHJvcGVydHkgPT4gc3R5bGVbcHJvcGVydHldKVxuICAgIC5maW5kKHZhbHVlID0+ICEhdmFsdWUpO1xuICBpZiAodHJhbnNmb3JtICYmIHRyYW5zZm9ybS5pbmNsdWRlcygndHJhbnNsYXRlM2QnKSkge1xuICAgIHRyYW5zbGF0ZVggPSB0cmFuc2Zvcm0ucmVwbGFjZShcbiAgICAgIC8uKnRyYW5zbGF0ZTNkXFwoKC4qKXB4LCAoLiopcHgsICguKilweFxcKS4qLyxcbiAgICAgICckMSdcbiAgICApO1xuICAgIHRyYW5zbGF0ZVkgPSB0cmFuc2Zvcm0ucmVwbGFjZShcbiAgICAgIC8uKnRyYW5zbGF0ZTNkXFwoKC4qKXB4LCAoLiopcHgsICguKilweFxcKS4qLyxcbiAgICAgICckMidcbiAgICApO1xuICB9IGVsc2UgaWYgKHRyYW5zZm9ybSAmJiB0cmFuc2Zvcm0uaW5jbHVkZXMoJ3RyYW5zbGF0ZScpKSB7XG4gICAgdHJhbnNsYXRlWCA9IHRyYW5zZm9ybS5yZXBsYWNlKC8uKnRyYW5zbGF0ZVxcKCguKilweCwgKC4qKXB4XFwpLiovLCAnJDEnKTtcbiAgICB0cmFuc2xhdGVZID0gdHJhbnNmb3JtLnJlcGxhY2UoLy4qdHJhbnNsYXRlXFwoKC4qKXB4LCAoLiopcHhcXCkuKi8sICckMicpO1xuICB9XG5cbiAgaWYgKGdob3N0RWxlbWVudFBvc2l0aW9uaW5nID09PSAnYWJzb2x1dGUnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlaWdodDogZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgICAgIHdpZHRoOiBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgICB0b3A6IGVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgLSB0cmFuc2xhdGVZLFxuICAgICAgYm90dG9tOlxuICAgICAgICBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ICtcbiAgICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCAtXG4gICAgICAgIHRyYW5zbGF0ZVksXG4gICAgICBsZWZ0OiBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCAtIHRyYW5zbGF0ZVgsXG4gICAgICByaWdodDpcbiAgICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICtcbiAgICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQgLVxuICAgICAgICB0cmFuc2xhdGVYXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBib3VuZGluZ1JlY3Q6IEJvdW5kaW5nUmVjdGFuZ2xlID0gZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHQ6IGJvdW5kaW5nUmVjdC5oZWlnaHQsXG4gICAgICB3aWR0aDogYm91bmRpbmdSZWN0LndpZHRoLFxuICAgICAgdG9wOiBib3VuZGluZ1JlY3QudG9wIC0gdHJhbnNsYXRlWSxcbiAgICAgIGJvdHRvbTogYm91bmRpbmdSZWN0LmJvdHRvbSAtIHRyYW5zbGF0ZVksXG4gICAgICBsZWZ0OiBib3VuZGluZ1JlY3QubGVmdCAtIHRyYW5zbGF0ZVgsXG4gICAgICByaWdodDogYm91bmRpbmdSZWN0LnJpZ2h0IC0gdHJhbnNsYXRlWCxcbiAgICAgIHNjcm9sbFRvcDogZWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCxcbiAgICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0XG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1dpdGhpbkJvdW5kaW5nWSh7XG4gIGNsaWVudFksXG4gIHJlY3Rcbn06IHtcbiAgY2xpZW50WTogbnVtYmVyO1xuICByZWN0OiBDbGllbnRSZWN0O1xufSk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2xpZW50WSA+PSByZWN0LnRvcCAmJiBjbGllbnRZIDw9IHJlY3QuYm90dG9tO1xufVxuXG5mdW5jdGlvbiBpc1dpdGhpbkJvdW5kaW5nWCh7XG4gIGNsaWVudFgsXG4gIHJlY3Rcbn06IHtcbiAgY2xpZW50WDogbnVtYmVyO1xuICByZWN0OiBDbGllbnRSZWN0O1xufSk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2xpZW50WCA+PSByZWN0LmxlZnQgJiYgY2xpZW50WCA8PSByZWN0LnJpZ2h0O1xufVxuXG5mdW5jdGlvbiBnZXRSZXNpemVFZGdlcyh7XG4gIGNsaWVudFgsXG4gIGNsaWVudFksXG4gIGVsbSxcbiAgYWxsb3dlZEVkZ2VzLFxuICBjdXJzb3JQcmVjaXNpb25cbn06IHtcbiAgY2xpZW50WDogbnVtYmVyO1xuICBjbGllbnRZOiBudW1iZXI7XG4gIGVsbTogRWxlbWVudFJlZjtcbiAgYWxsb3dlZEVkZ2VzOiBFZGdlcztcbiAgY3Vyc29yUHJlY2lzaW9uOiBudW1iZXI7XG59KTogRWRnZXMge1xuICBjb25zdCBlbG1Qb3NpdGlvbjogQ2xpZW50UmVjdCA9IGVsbS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBlZGdlczogRWRnZXMgPSB7fTtcblxuICBpZiAoXG4gICAgYWxsb3dlZEVkZ2VzLmxlZnQgJiZcbiAgICBpc051bWJlckNsb3NlVG8oY2xpZW50WCwgZWxtUG9zaXRpb24ubGVmdCwgY3Vyc29yUHJlY2lzaW9uKSAmJlxuICAgIGlzV2l0aGluQm91bmRpbmdZKHsgY2xpZW50WSwgcmVjdDogZWxtUG9zaXRpb24gfSlcbiAgKSB7XG4gICAgZWRnZXMubGVmdCA9IHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgYWxsb3dlZEVkZ2VzLnJpZ2h0ICYmXG4gICAgaXNOdW1iZXJDbG9zZVRvKGNsaWVudFgsIGVsbVBvc2l0aW9uLnJpZ2h0LCBjdXJzb3JQcmVjaXNpb24pICYmXG4gICAgaXNXaXRoaW5Cb3VuZGluZ1koeyBjbGllbnRZLCByZWN0OiBlbG1Qb3NpdGlvbiB9KVxuICApIHtcbiAgICBlZGdlcy5yaWdodCA9IHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgYWxsb3dlZEVkZ2VzLnRvcCAmJlxuICAgIGlzTnVtYmVyQ2xvc2VUbyhjbGllbnRZLCBlbG1Qb3NpdGlvbi50b3AsIGN1cnNvclByZWNpc2lvbikgJiZcbiAgICBpc1dpdGhpbkJvdW5kaW5nWCh7IGNsaWVudFgsIHJlY3Q6IGVsbVBvc2l0aW9uIH0pXG4gICkge1xuICAgIGVkZ2VzLnRvcCA9IHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgYWxsb3dlZEVkZ2VzLmJvdHRvbSAmJlxuICAgIGlzTnVtYmVyQ2xvc2VUbyhjbGllbnRZLCBlbG1Qb3NpdGlvbi5ib3R0b20sIGN1cnNvclByZWNpc2lvbikgJiZcbiAgICBpc1dpdGhpbkJvdW5kaW5nWCh7IGNsaWVudFgsIHJlY3Q6IGVsbVBvc2l0aW9uIH0pXG4gICkge1xuICAgIGVkZ2VzLmJvdHRvbSA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gZWRnZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzaXplQ3Vyc29ycyB7XG4gIHRvcExlZnQ6IHN0cmluZztcbiAgdG9wUmlnaHQ6IHN0cmluZztcbiAgYm90dG9tTGVmdDogc3RyaW5nO1xuICBib3R0b21SaWdodDogc3RyaW5nO1xuICBsZWZ0T3JSaWdodDogc3RyaW5nO1xuICB0b3BPckJvdHRvbTogc3RyaW5nO1xufVxuXG5jb25zdCBERUZBVUxUX1JFU0laRV9DVVJTT1JTOiBSZXNpemVDdXJzb3JzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHRvcExlZnQ6ICdudy1yZXNpemUnLFxuICB0b3BSaWdodDogJ25lLXJlc2l6ZScsXG4gIGJvdHRvbUxlZnQ6ICdzdy1yZXNpemUnLFxuICBib3R0b21SaWdodDogJ3NlLXJlc2l6ZScsXG4gIGxlZnRPclJpZ2h0OiAnY29sLXJlc2l6ZScsXG4gIHRvcE9yQm90dG9tOiAncm93LXJlc2l6ZSdcbn0pO1xuXG5mdW5jdGlvbiBnZXRSZXNpemVDdXJzb3IoZWRnZXM6IEVkZ2VzLCBjdXJzb3JzOiBSZXNpemVDdXJzb3JzKTogc3RyaW5nIHtcbiAgaWYgKGVkZ2VzLmxlZnQgJiYgZWRnZXMudG9wKSB7XG4gICAgcmV0dXJuIGN1cnNvcnMudG9wTGVmdDtcbiAgfSBlbHNlIGlmIChlZGdlcy5yaWdodCAmJiBlZGdlcy50b3ApIHtcbiAgICByZXR1cm4gY3Vyc29ycy50b3BSaWdodDtcbiAgfSBlbHNlIGlmIChlZGdlcy5sZWZ0ICYmIGVkZ2VzLmJvdHRvbSkge1xuICAgIHJldHVybiBjdXJzb3JzLmJvdHRvbUxlZnQ7XG4gIH0gZWxzZSBpZiAoZWRnZXMucmlnaHQgJiYgZWRnZXMuYm90dG9tKSB7XG4gICAgcmV0dXJuIGN1cnNvcnMuYm90dG9tUmlnaHQ7XG4gIH0gZWxzZSBpZiAoZWRnZXMubGVmdCB8fCBlZGdlcy5yaWdodCkge1xuICAgIHJldHVybiBjdXJzb3JzLmxlZnRPclJpZ2h0O1xuICB9IGVsc2UgaWYgKGVkZ2VzLnRvcCB8fCBlZGdlcy5ib3R0b20pIHtcbiAgICByZXR1cm4gY3Vyc29ycy50b3BPckJvdHRvbTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RWRnZXNEaWZmKHtcbiAgZWRnZXMsXG4gIGluaXRpYWxSZWN0YW5nbGUsXG4gIG5ld1JlY3RhbmdsZVxufToge1xuICBlZGdlczogRWRnZXM7XG4gIGluaXRpYWxSZWN0YW5nbGU6IEJvdW5kaW5nUmVjdGFuZ2xlO1xuICBuZXdSZWN0YW5nbGU6IEJvdW5kaW5nUmVjdGFuZ2xlO1xufSk6IEVkZ2VzIHtcbiAgY29uc3QgZWRnZXNEaWZmOiBFZGdlcyA9IHt9O1xuICBPYmplY3Qua2V5cyhlZGdlcykuZm9yRWFjaChlZGdlID0+IHtcbiAgICBlZGdlc0RpZmZbZWRnZV0gPSAobmV3UmVjdGFuZ2xlW2VkZ2VdIHx8IDApIC0gKGluaXRpYWxSZWN0YW5nbGVbZWRnZV0gfHwgMCk7XG4gIH0pO1xuICByZXR1cm4gZWRnZXNEaWZmO1xufVxuXG5jb25zdCBSRVNJWkVfQUNUSVZFX0NMQVNTOiBzdHJpbmcgPSAncmVzaXplLWFjdGl2ZSc7XG5jb25zdCBSRVNJWkVfTEVGVF9IT1ZFUl9DTEFTUzogc3RyaW5nID0gJ3Jlc2l6ZS1sZWZ0LWhvdmVyJztcbmNvbnN0IFJFU0laRV9SSUdIVF9IT1ZFUl9DTEFTUzogc3RyaW5nID0gJ3Jlc2l6ZS1yaWdodC1ob3Zlcic7XG5jb25zdCBSRVNJWkVfVE9QX0hPVkVSX0NMQVNTOiBzdHJpbmcgPSAncmVzaXplLXRvcC1ob3Zlcic7XG5jb25zdCBSRVNJWkVfQk9UVE9NX0hPVkVSX0NMQVNTOiBzdHJpbmcgPSAncmVzaXplLWJvdHRvbS1ob3Zlcic7XG5jb25zdCBSRVNJWkVfR0hPU1RfRUxFTUVOVF9DTEFTUzogc3RyaW5nID0gJ3Jlc2l6ZS1naG9zdC1lbGVtZW50JztcblxuZXhwb3J0IGNvbnN0IE1PVVNFX01PVkVfVEhST1RUTEVfTVM6IG51bWJlciA9IDUwO1xuXG4vKipcbiAqIFBsYWNlIHRoaXMgb24gYW4gZWxlbWVudCB0byBtYWtlIGl0IHJlc2l6YWJsZS4gRm9yIGV4YW1wbGU6XG4gKlxuICogYGBgaHRtbFxuICogPGRpdlxuICogICBtd2xSZXNpemFibGVcbiAqICAgW3Jlc2l6ZUVkZ2VzXT1cIntib3R0b206IHRydWUsIHJpZ2h0OiB0cnVlLCB0b3A6IHRydWUsIGxlZnQ6IHRydWV9XCJcbiAqICAgW2VuYWJsZUdob3N0UmVzaXplXT1cInRydWVcIj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1ttd2xSZXNpemFibGVdJ1xufSlcbmV4cG9ydCBjbGFzcyBSZXNpemFibGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgZWFjaCByZXNpemUgZXZlbnQuIFJldHVybiBgdHJ1ZWAgdG8gYWxsb3cgdGhlIHJlc2l6ZSBldmVudCB0byBwcm9wYWdhdGUgb3IgYGZhbHNlYCB0byBjYW5jZWwgaXRcbiAgICovXG4gIEBJbnB1dCgpIHZhbGlkYXRlUmVzaXplOiAocmVzaXplRXZlbnQ6IFJlc2l6ZUV2ZW50KSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZWRnZXMgdGhhdCBhbiBlbGVtZW50IGNhbiBiZSByZXNpemVkIGZyb20uIFBhc3MgYW4gb2JqZWN0IGxpa2UgYHt0b3A6IHRydWUsIGJvdHRvbTogZmFsc2V9YC4gQnkgZGVmYXVsdCBubyBlZGdlcyBjYW4gYmUgcmVzaXplZC5cbiAgICogQGRlcHJlY2F0ZWQgdXNlIGEgcmVzaXplIGhhbmRsZSBpbnN0ZWFkIHRoYXQgcG9zaXRpb25zIGl0c2VsZiB0byB0aGUgc2lkZSBvZiB0aGUgZWxlbWVudCB5b3Ugd291bGQgbGlrZSB0byByZXNpemVcbiAgICovXG4gIEBJbnB1dCgpIHJlc2l6ZUVkZ2VzOiBFZGdlcyA9IHt9O1xuXG4gIC8qKlxuICAgKiBTZXQgdG8gYHRydWVgIHRvIGVuYWJsZSBhIHRlbXBvcmFyeSByZXNpemluZyBlZmZlY3Qgb2YgdGhlIGVsZW1lbnQgaW4gYmV0d2VlbiB0aGUgYHJlc2l6ZVN0YXJ0YCBhbmQgYHJlc2l6ZUVuZGAgZXZlbnRzLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlR2hvc3RSZXNpemU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBzbmFwIGdyaWQgdGhhdCByZXNpemUgZXZlbnRzIHdpbGwgYmUgbG9ja2VkIHRvLlxuICAgKlxuICAgKiBlLmcuIHRvIG9ubHkgYWxsb3cgdGhlIGVsZW1lbnQgdG8gYmUgcmVzaXplZCBldmVyeSAxMHB4IHNldCBpdCB0byBge2xlZnQ6IDEwLCByaWdodDogMTB9YFxuICAgKi9cbiAgQElucHV0KCkgcmVzaXplU25hcEdyaWQ6IEVkZ2VzID0ge307XG5cbiAgLyoqXG4gICAqIFRoZSBtb3VzZSBjdXJzb3JzIHRoYXQgd2lsbCBiZSBzZXQgb24gdGhlIHJlc2l6ZSBlZGdlc1xuICAgKi9cbiAgQElucHV0KCkgcmVzaXplQ3Vyc29yczogUmVzaXplQ3Vyc29ycyA9IERFRkFVTFRfUkVTSVpFX0NVUlNPUlM7XG5cbiAgLyoqXG4gICAqIE1vdXNlIG92ZXIgdGhpY2tuZXNzIHRvIGFjdGl2ZSBjdXJzb3IuXG4gICAqIEBkZXByZWNhdGVkIGludmFsaWQgd2hlbiB5b3UgbWlncmF0ZSB0byB1c2UgcmVzaXplIGhhbmRsZXMgaW5zdGVhZCBvZiBzZXR0aW5nIHJlc2l6ZUVkZ2VzIG9uIHRoZSBlbGVtZW50XG4gICAqL1xuICBASW5wdXQoKSByZXNpemVDdXJzb3JQcmVjaXNpb246IG51bWJlciA9IDM7XG5cbiAgLyoqXG4gICAqIERlZmluZSB0aGUgcG9zaXRpb25pbmcgb2YgdGhlIGdob3N0IGVsZW1lbnQgKGNhbiBiZSBmaXhlZCBvciBhYnNvbHV0ZSlcbiAgICovXG4gIEBJbnB1dCgpIGdob3N0RWxlbWVudFBvc2l0aW9uaW5nOiAnZml4ZWQnIHwgJ2Fic29sdXRlJyA9ICdmaXhlZCc7XG5cbiAgLyoqXG4gICAqIEFsbG93IGVsZW1lbnRzIHRvIGJlIHJlc2l6ZWQgdG8gbmVnYXRpdmUgZGltZW5zaW9uc1xuICAgKi9cbiAgQElucHV0KCkgYWxsb3dOZWdhdGl2ZVJlc2l6ZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIG1vdXNlIGlzIHByZXNzZWQgYW5kIGEgcmVzaXplIGV2ZW50IGlzIGFib3V0IHRvIGJlZ2luLiBgJGV2ZW50YCBpcyBhIGBSZXNpemVFdmVudGAgb2JqZWN0LlxuICAgKi9cbiAgQE91dHB1dCgpIHJlc2l6ZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVFdmVudD4oKTtcblxuICAvKipcbiAgICogQ2FsbGVkIGFzIHRoZSBtb3VzZSBpcyBkcmFnZ2VkIGFmdGVyIGEgcmVzaXplIGV2ZW50IGhhcyBiZWd1bi4gYCRldmVudGAgaXMgYSBgUmVzaXplRXZlbnRgIG9iamVjdC5cbiAgICovXG4gIEBPdXRwdXQoKSByZXNpemluZyA9IG5ldyBFdmVudEVtaXR0ZXI8UmVzaXplRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciB0aGUgbW91c2UgaXMgcmVsZWFzZWQgYWZ0ZXIgYSByZXNpemUgZXZlbnQuIGAkZXZlbnRgIGlzIGEgYFJlc2l6ZUV2ZW50YCBvYmplY3QuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVzaXplRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVFdmVudD4oKTtcblxuICAvKipcbiAgICogQGhpZGRlblxuICAgKi9cbiAgcHVibGljIG1vdXNldXAgPSBuZXcgU3ViamVjdDx7XG4gICAgY2xpZW50WDogbnVtYmVyO1xuICAgIGNsaWVudFk6IG51bWJlcjtcbiAgICBlZGdlcz86IEVkZ2VzO1xuICB9PigpO1xuXG4gIC8qKlxuICAgKiBAaGlkZGVuXG4gICAqL1xuICBwdWJsaWMgbW91c2Vkb3duID0gbmV3IFN1YmplY3Q8e1xuICAgIGNsaWVudFg6IG51bWJlcjtcbiAgICBjbGllbnRZOiBudW1iZXI7XG4gICAgZWRnZXM/OiBFZGdlcztcbiAgfT4oKTtcblxuICAvKipcbiAgICogQGhpZGRlblxuICAgKi9cbiAgcHVibGljIG1vdXNlbW92ZSA9IG5ldyBTdWJqZWN0PHtcbiAgICBjbGllbnRYOiBudW1iZXI7XG4gICAgY2xpZW50WTogbnVtYmVyO1xuICAgIGVkZ2VzPzogRWRnZXM7XG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50O1xuICB9PigpO1xuXG4gIHByaXZhdGUgcG9pbnRlckV2ZW50TGlzdGVuZXJzOiBQb2ludGVyRXZlbnRMaXN0ZW5lcnM7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSByZXNpemVFZGdlcyQgPSBuZXcgU3ViamVjdDxFZGdlcz4oKTtcblxuICAvKipcbiAgICogQGhpZGRlblxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnksXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHB1YmxpYyBlbG06IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgdGhpcy5wb2ludGVyRXZlbnRMaXN0ZW5lcnMgPSBQb2ludGVyRXZlbnRMaXN0ZW5lcnMuZ2V0SW5zdGFuY2UoXG4gICAgICByZW5kZXJlcixcbiAgICAgIHpvbmVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBoaWRkZW5cbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFRPRE8gLSB1c2Ugc29tZSBmYW5jeSBPYnNlcnZhYmxlLm1lcmdlJ3MgZm9yIHRoaXNcbiAgICB0aGlzLnBvaW50ZXJFdmVudExpc3RlbmVycy5wb2ludGVyRG93blxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoeyBjbGllbnRYLCBjbGllbnRZIH0pID0+IHtcbiAgICAgICAgdGhpcy5tb3VzZWRvd24ubmV4dCh7IGNsaWVudFgsIGNsaWVudFkgfSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMucG9pbnRlckV2ZW50TGlzdGVuZXJzLnBvaW50ZXJNb3ZlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGNsaWVudFgsIGNsaWVudFksIGV2ZW50IH0pID0+IHtcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUubmV4dCh7IGNsaWVudFgsIGNsaWVudFksIGV2ZW50IH0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnBvaW50ZXJFdmVudExpc3RlbmVycy5wb2ludGVyVXBcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgY2xpZW50WCwgY2xpZW50WSB9KSA9PiB7XG4gICAgICAgIHRoaXMubW91c2V1cC5uZXh0KHsgY2xpZW50WCwgY2xpZW50WSB9KTtcbiAgICAgIH0pO1xuXG4gICAgbGV0IGN1cnJlbnRSZXNpemU6IHtcbiAgICAgIGVkZ2VzOiBFZGdlcztcbiAgICAgIHN0YXJ0aW5nUmVjdDogQm91bmRpbmdSZWN0YW5nbGU7XG4gICAgICBjdXJyZW50UmVjdDogQm91bmRpbmdSZWN0YW5nbGU7XG4gICAgICBjbG9uZWROb2RlPzogSFRNTEVsZW1lbnQ7XG4gICAgfSB8IG51bGw7XG5cbiAgICBjb25zdCByZW1vdmVHaG9zdEVsZW1lbnQgPSAoKSA9PiB7XG4gICAgICBpZiAoY3VycmVudFJlc2l6ZSAmJiBjdXJyZW50UmVzaXplLmNsb25lZE5vZGUpIHtcbiAgICAgICAgdGhpcy5lbG0ubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKFxuICAgICAgICAgIGN1cnJlbnRSZXNpemUuY2xvbmVkTm9kZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxtLm5hdGl2ZUVsZW1lbnQsICd2aXNpYmlsaXR5JywgJ2luaGVyaXQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0UmVzaXplQ3Vyc29ycyA9ICgpOiBSZXNpemVDdXJzb3JzID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLkRFRkFVTFRfUkVTSVpFX0NVUlNPUlMsXG4gICAgICAgIC4uLnRoaXMucmVzaXplQ3Vyc29yc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgbW91c2VNb3ZlOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLm1vdXNlbW92ZS5waXBlKHNoYXJlKCkpO1xuXG4gICAgbW91c2VNb3ZlLnBpcGUoZmlsdGVyKCgpID0+ICEhY3VycmVudFJlc2l6ZSkpLnN1YnNjcmliZSgoeyBldmVudCB9KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNpemVFZGdlcyRcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgodGhpcy5yZXNpemVFZGdlcyksXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMucmVzaXplRWRnZXMgJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMucmVzaXplRWRnZXMpLnNvbWUoZWRnZSA9PiAhIXRoaXMucmVzaXplRWRnZXNbZWRnZV0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcChsZWdhY3lSZXNpemVFZGdlc0VuYWJsZWQgPT5cbiAgICAgICAgICBsZWdhY3lSZXNpemVFZGdlc0VuYWJsZWQgPyBtb3VzZU1vdmUgOiBFTVBUWVxuICAgICAgICApLFxuICAgICAgICBhdWRpdFRpbWUoTU9VU0VfTU9WRV9USFJPVFRMRV9NUylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHsgY2xpZW50WCwgY2xpZW50WSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc2l6ZUVkZ2VzOiBFZGdlcyA9IGdldFJlc2l6ZUVkZ2VzKHtcbiAgICAgICAgICBjbGllbnRYLFxuICAgICAgICAgIGNsaWVudFksXG4gICAgICAgICAgZWxtOiB0aGlzLmVsbSxcbiAgICAgICAgICBhbGxvd2VkRWRnZXM6IHRoaXMucmVzaXplRWRnZXMsXG4gICAgICAgICAgY3Vyc29yUHJlY2lzaW9uOiB0aGlzLnJlc2l6ZUN1cnNvclByZWNpc2lvblxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzaXplQ3Vyc29ycyA9IGdldFJlc2l6ZUN1cnNvcnMoKTtcbiAgICAgICAgaWYgKCFjdXJyZW50UmVzaXplKSB7XG4gICAgICAgICAgY29uc3QgY3Vyc29yID0gZ2V0UmVzaXplQ3Vyc29yKHJlc2l6ZUVkZ2VzLCByZXNpemVDdXJzb3JzKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxtLm5hdGl2ZUVsZW1lbnQsICdjdXJzb3InLCBjdXJzb3IpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0RWxlbWVudENsYXNzKFxuICAgICAgICAgIHRoaXMuZWxtLFxuICAgICAgICAgIFJFU0laRV9MRUZUX0hPVkVSX0NMQVNTLFxuICAgICAgICAgIHJlc2l6ZUVkZ2VzLmxlZnQgPT09IHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50Q2xhc3MoXG4gICAgICAgICAgdGhpcy5lbG0sXG4gICAgICAgICAgUkVTSVpFX1JJR0hUX0hPVkVSX0NMQVNTLFxuICAgICAgICAgIHJlc2l6ZUVkZ2VzLnJpZ2h0ID09PSB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0RWxlbWVudENsYXNzKFxuICAgICAgICAgIHRoaXMuZWxtLFxuICAgICAgICAgIFJFU0laRV9UT1BfSE9WRVJfQ0xBU1MsXG4gICAgICAgICAgcmVzaXplRWRnZXMudG9wID09PSB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0RWxlbWVudENsYXNzKFxuICAgICAgICAgIHRoaXMuZWxtLFxuICAgICAgICAgIFJFU0laRV9CT1RUT01fSE9WRVJfQ0xBU1MsXG4gICAgICAgICAgcmVzaXplRWRnZXMuYm90dG9tID09PSB0cnVlXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IG1vdXNlZHJhZzogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5tb3VzZWRvd25cbiAgICAgIC5waXBlKFxuICAgICAgICBtZXJnZU1hcChzdGFydENvb3JkcyA9PiB7XG4gICAgICAgICAgZnVuY3Rpb24gZ2V0RGlmZihtb3ZlQ29vcmRzOiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNsaWVudFg6IG1vdmVDb29yZHMuY2xpZW50WCAtIHN0YXJ0Q29vcmRzLmNsaWVudFgsXG4gICAgICAgICAgICAgIGNsaWVudFk6IG1vdmVDb29yZHMuY2xpZW50WSAtIHN0YXJ0Q29vcmRzLmNsaWVudFlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZ2V0U25hcEdyaWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzbmFwR3JpZDogQ29vcmRpbmF0ZSA9IHsgeDogMSwgeTogMSB9O1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudFJlc2l6ZSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5yZXNpemVTbmFwR3JpZC5sZWZ0ICYmIGN1cnJlbnRSZXNpemUuZWRnZXMubGVmdCkge1xuICAgICAgICAgICAgICAgIHNuYXBHcmlkLnggPSArdGhpcy5yZXNpemVTbmFwR3JpZC5sZWZ0O1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplU25hcEdyaWQucmlnaHQgJiZcbiAgICAgICAgICAgICAgICBjdXJyZW50UmVzaXplLmVkZ2VzLnJpZ2h0XG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHNuYXBHcmlkLnggPSArdGhpcy5yZXNpemVTbmFwR3JpZC5yaWdodDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6ZVNuYXBHcmlkLnRvcCAmJiBjdXJyZW50UmVzaXplLmVkZ2VzLnRvcCkge1xuICAgICAgICAgICAgICAgIHNuYXBHcmlkLnkgPSArdGhpcy5yZXNpemVTbmFwR3JpZC50b3A7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemVTbmFwR3JpZC5ib3R0b20gJiZcbiAgICAgICAgICAgICAgICBjdXJyZW50UmVzaXplLmVkZ2VzLmJvdHRvbVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzbmFwR3JpZC55ID0gK3RoaXMucmVzaXplU25hcEdyaWQuYm90dG9tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzbmFwR3JpZDtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgZnVuY3Rpb24gZ2V0R3JpZChcbiAgICAgICAgICAgIGNvb3JkczogeyBjbGllbnRYOiBudW1iZXI7IGNsaWVudFk6IG51bWJlciB9LFxuICAgICAgICAgICAgc25hcEdyaWQ6IENvb3JkaW5hdGVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHg6IE1hdGguY2VpbChjb29yZHMuY2xpZW50WCAvIHNuYXBHcmlkLngpLFxuICAgICAgICAgICAgICB5OiBNYXRoLmNlaWwoY29vcmRzLmNsaWVudFkgLyBzbmFwR3JpZC55KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbWVyZ2UoXG4gICAgICAgICAgICBtb3VzZU1vdmUucGlwZSh0YWtlKDEpKS5waXBlKG1hcChjb29yZHMgPT4gW2Nvb3Jkc10pKSxcbiAgICAgICAgICAgIG1vdXNlTW92ZS5waXBlKHBhaXJ3aXNlKCkpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIG1hcCgoW3ByZXZpb3VzQ29vcmRzLCBuZXdDb29yZHNdKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ29vcmRzID8gZ2V0RGlmZihwcmV2aW91c0Nvb3JkcykgOiBwcmV2aW91c0Nvb3JkcyxcbiAgICAgICAgICAgICAgICAgIGdldERpZmYobmV3Q29vcmRzKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgZmlsdGVyKChbcHJldmlvdXNDb29yZHMsIG5ld0Nvb3Jkc10pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzQ29vcmRzKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzbmFwR3JpZDogQ29vcmRpbmF0ZSA9IGdldFNuYXBHcmlkKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNHcmlkOiBDb29yZGluYXRlID0gZ2V0R3JpZChcbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ29vcmRzLFxuICAgICAgICAgICAgICAgICAgc25hcEdyaWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0dyaWQ6IENvb3JkaW5hdGUgPSBnZXRHcmlkKG5ld0Nvb3Jkcywgc25hcEdyaWQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzR3JpZC54ICE9PSBuZXdHcmlkLnggfHwgcHJldmlvdXNHcmlkLnkgIT09IG5ld0dyaWQueVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgbWFwKChbLCBuZXdDb29yZHNdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc25hcEdyaWQ6IENvb3JkaW5hdGUgPSBnZXRTbmFwR3JpZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBjbGllbnRYOlxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKG5ld0Nvb3Jkcy5jbGllbnRYIC8gc25hcEdyaWQueCkgKiBzbmFwR3JpZC54LFxuICAgICAgICAgICAgICAgICAgY2xpZW50WTpcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChuZXdDb29yZHMuY2xpZW50WSAvIHNuYXBHcmlkLnkpICogc25hcEdyaWQueVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwobWVyZ2UodGhpcy5tb3VzZXVwLCB0aGlzLm1vdXNlZG93bikpKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5waXBlKGZpbHRlcigoKSA9PiAhIWN1cnJlbnRSZXNpemUpKTtcblxuICAgIG1vdXNlZHJhZ1xuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoeyBjbGllbnRYLCBjbGllbnRZIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gZ2V0TmV3Qm91bmRpbmdSZWN0YW5nbGUoXG4gICAgICAgICAgICBjdXJyZW50UmVzaXplIS5zdGFydGluZ1JlY3QsXG4gICAgICAgICAgICBjdXJyZW50UmVzaXplIS5lZGdlcyxcbiAgICAgICAgICAgIGNsaWVudFgsXG4gICAgICAgICAgICBjbGllbnRZXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKG5ld0JvdW5kaW5nUmVjdDogQm91bmRpbmdSZWN0YW5nbGUpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5hbGxvd05lZ2F0aXZlUmVzaXplcyB8fFxuICAgICAgICAgICAgISEoXG4gICAgICAgICAgICAgIG5ld0JvdW5kaW5nUmVjdC5oZWlnaHQgJiZcbiAgICAgICAgICAgICAgbmV3Qm91bmRpbmdSZWN0LndpZHRoICYmXG4gICAgICAgICAgICAgIG5ld0JvdW5kaW5nUmVjdC5oZWlnaHQgPiAwICYmXG4gICAgICAgICAgICAgIG5ld0JvdW5kaW5nUmVjdC53aWR0aCA+IDBcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigobmV3Qm91bmRpbmdSZWN0OiBCb3VuZGluZ1JlY3RhbmdsZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVzaXplXG4gICAgICAgICAgICA/IHRoaXMudmFsaWRhdGVSZXNpemUoe1xuICAgICAgICAgICAgICAgIHJlY3RhbmdsZTogbmV3Qm91bmRpbmdSZWN0LFxuICAgICAgICAgICAgICAgIGVkZ2VzOiBnZXRFZGdlc0RpZmYoe1xuICAgICAgICAgICAgICAgICAgZWRnZXM6IGN1cnJlbnRSZXNpemUhLmVkZ2VzLFxuICAgICAgICAgICAgICAgICAgaW5pdGlhbFJlY3RhbmdsZTogY3VycmVudFJlc2l6ZSEuc3RhcnRpbmdSZWN0LFxuICAgICAgICAgICAgICAgICAgbmV3UmVjdGFuZ2xlOiBuZXdCb3VuZGluZ1JlY3RcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobmV3Qm91bmRpbmdSZWN0OiBCb3VuZGluZ1JlY3RhbmdsZSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFJlc2l6ZSAmJiBjdXJyZW50UmVzaXplLmNsb25lZE5vZGUpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgY3VycmVudFJlc2l6ZS5jbG9uZWROb2RlLFxuICAgICAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICAgICBgJHtuZXdCb3VuZGluZ1JlY3QuaGVpZ2h0fXB4YFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIGN1cnJlbnRSZXNpemUuY2xvbmVkTm9kZSxcbiAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICBgJHtuZXdCb3VuZGluZ1JlY3Qud2lkdGh9cHhgXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgY3VycmVudFJlc2l6ZS5jbG9uZWROb2RlLFxuICAgICAgICAgICAgJ3RvcCcsXG4gICAgICAgICAgICBgJHtuZXdCb3VuZGluZ1JlY3QudG9wfXB4YFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIGN1cnJlbnRSZXNpemUuY2xvbmVkTm9kZSxcbiAgICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAgIGAke25ld0JvdW5kaW5nUmVjdC5sZWZ0fXB4YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJlc2l6aW5nLmVtaXQoe1xuICAgICAgICAgICAgZWRnZXM6IGdldEVkZ2VzRGlmZih7XG4gICAgICAgICAgICAgIGVkZ2VzOiBjdXJyZW50UmVzaXplIS5lZGdlcyxcbiAgICAgICAgICAgICAgaW5pdGlhbFJlY3RhbmdsZTogY3VycmVudFJlc2l6ZSEuc3RhcnRpbmdSZWN0LFxuICAgICAgICAgICAgICBuZXdSZWN0YW5nbGU6IG5ld0JvdW5kaW5nUmVjdFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICByZWN0YW5nbGU6IG5ld0JvdW5kaW5nUmVjdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjdXJyZW50UmVzaXplIS5jdXJyZW50UmVjdCA9IG5ld0JvdW5kaW5nUmVjdDtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5tb3VzZWRvd25cbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHsgY2xpZW50WCwgY2xpZW50WSwgZWRnZXMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBlZGdlcyB8fFxuICAgICAgICAgICAgZ2V0UmVzaXplRWRnZXMoe1xuICAgICAgICAgICAgICBjbGllbnRYLFxuICAgICAgICAgICAgICBjbGllbnRZLFxuICAgICAgICAgICAgICBlbG06IHRoaXMuZWxtLFxuICAgICAgICAgICAgICBhbGxvd2VkRWRnZXM6IHRoaXMucmVzaXplRWRnZXMsXG4gICAgICAgICAgICAgIGN1cnNvclByZWNpc2lvbjogdGhpcy5yZXNpemVDdXJzb3JQcmVjaXNpb25cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGVkZ2VzOiBFZGdlcykgPT4ge1xuICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlZGdlcykubGVuZ3RoID4gMDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGVkZ2VzOiBFZGdlcykgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFJlc2l6ZSkge1xuICAgICAgICAgIHJlbW92ZUdob3N0RWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0aW5nUmVjdDogQm91bmRpbmdSZWN0YW5nbGUgPSBnZXRFbGVtZW50UmVjdChcbiAgICAgICAgICB0aGlzLmVsbSxcbiAgICAgICAgICB0aGlzLmdob3N0RWxlbWVudFBvc2l0aW9uaW5nXG4gICAgICAgICk7XG4gICAgICAgIGN1cnJlbnRSZXNpemUgPSB7XG4gICAgICAgICAgZWRnZXMsXG4gICAgICAgICAgc3RhcnRpbmdSZWN0LFxuICAgICAgICAgIGN1cnJlbnRSZWN0OiBzdGFydGluZ1JlY3RcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzaXplQ3Vyc29ycyA9IGdldFJlc2l6ZUN1cnNvcnMoKTtcbiAgICAgICAgY29uc3QgY3Vyc29yID0gZ2V0UmVzaXplQ3Vyc29yKGN1cnJlbnRSZXNpemUuZWRnZXMsIHJlc2l6ZUN1cnNvcnMpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGRvY3VtZW50LmJvZHksICdjdXJzb3InLCBjdXJzb3IpO1xuICAgICAgICB0aGlzLnNldEVsZW1lbnRDbGFzcyh0aGlzLmVsbSwgUkVTSVpFX0FDVElWRV9DTEFTUywgdHJ1ZSk7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZUdob3N0UmVzaXplKSB7XG4gICAgICAgICAgY3VycmVudFJlc2l6ZS5jbG9uZWROb2RlID0gdGhpcy5lbG0ubmF0aXZlRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5lbG0ubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKFxuICAgICAgICAgICAgY3VycmVudFJlc2l6ZS5jbG9uZWROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgdGhpcy5lbG0ubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICd2aXNpYmlsaXR5JyxcbiAgICAgICAgICAgICdoaWRkZW4nXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgY3VycmVudFJlc2l6ZS5jbG9uZWROb2RlLFxuICAgICAgICAgICAgJ3Bvc2l0aW9uJyxcbiAgICAgICAgICAgIHRoaXMuZ2hvc3RFbGVtZW50UG9zaXRpb25pbmdcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICBjdXJyZW50UmVzaXplLmNsb25lZE5vZGUsXG4gICAgICAgICAgICAnbGVmdCcsXG4gICAgICAgICAgICBgJHtjdXJyZW50UmVzaXplLnN0YXJ0aW5nUmVjdC5sZWZ0fXB4YFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIGN1cnJlbnRSZXNpemUuY2xvbmVkTm9kZSxcbiAgICAgICAgICAgICd0b3AnLFxuICAgICAgICAgICAgYCR7Y3VycmVudFJlc2l6ZS5zdGFydGluZ1JlY3QudG9wfXB4YFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIGN1cnJlbnRSZXNpemUuY2xvbmVkTm9kZSxcbiAgICAgICAgICAgICdoZWlnaHQnLFxuICAgICAgICAgICAgYCR7Y3VycmVudFJlc2l6ZS5zdGFydGluZ1JlY3QuaGVpZ2h0fXB4YFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIGN1cnJlbnRSZXNpemUuY2xvbmVkTm9kZSxcbiAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICBgJHtjdXJyZW50UmVzaXplLnN0YXJ0aW5nUmVjdC53aWR0aH1weGBcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICBjdXJyZW50UmVzaXplLmNsb25lZE5vZGUsXG4gICAgICAgICAgICAnY3Vyc29yJyxcbiAgICAgICAgICAgIGdldFJlc2l6ZUN1cnNvcihjdXJyZW50UmVzaXplLmVkZ2VzLCByZXNpemVDdXJzb3JzKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgICAgIGN1cnJlbnRSZXNpemUuY2xvbmVkTm9kZSxcbiAgICAgICAgICAgIFJFU0laRV9HSE9TVF9FTEVNRU5UX0NMQVNTXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjdXJyZW50UmVzaXplLmNsb25lZE5vZGUhLnNjcm9sbFRvcCA9IGN1cnJlbnRSZXNpemUuc3RhcnRpbmdSZWN0XG4gICAgICAgICAgICAuc2Nyb2xsVG9wIGFzIG51bWJlcjtcbiAgICAgICAgICBjdXJyZW50UmVzaXplLmNsb25lZE5vZGUhLnNjcm9sbExlZnQgPSBjdXJyZW50UmVzaXplLnN0YXJ0aW5nUmVjdFxuICAgICAgICAgICAgLnNjcm9sbExlZnQgYXMgbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVzaXplU3RhcnQuZW1pdCh7XG4gICAgICAgICAgICBlZGdlczogZ2V0RWRnZXNEaWZmKHtcbiAgICAgICAgICAgICAgZWRnZXMsXG4gICAgICAgICAgICAgIGluaXRpYWxSZWN0YW5nbGU6IHN0YXJ0aW5nUmVjdCxcbiAgICAgICAgICAgICAgbmV3UmVjdGFuZ2xlOiBzdGFydGluZ1JlY3RcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcmVjdGFuZ2xlOiBnZXROZXdCb3VuZGluZ1JlY3RhbmdsZShzdGFydGluZ1JlY3QsIHt9LCAwLCAwKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5tb3VzZXVwLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAoY3VycmVudFJlc2l6ZSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxtLm5hdGl2ZUVsZW1lbnQsIFJFU0laRV9BQ1RJVkVfQ0xBU1MpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGRvY3VtZW50LmJvZHksICdjdXJzb3InLCAnJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbG0ubmF0aXZlRWxlbWVudCwgJ2N1cnNvcicsICcnKTtcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZXNpemVFbmQuZW1pdCh7XG4gICAgICAgICAgICBlZGdlczogZ2V0RWRnZXNEaWZmKHtcbiAgICAgICAgICAgICAgZWRnZXM6IGN1cnJlbnRSZXNpemUhLmVkZ2VzLFxuICAgICAgICAgICAgICBpbml0aWFsUmVjdGFuZ2xlOiBjdXJyZW50UmVzaXplIS5zdGFydGluZ1JlY3QsXG4gICAgICAgICAgICAgIG5ld1JlY3RhbmdsZTogY3VycmVudFJlc2l6ZSEuY3VycmVudFJlY3RcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcmVjdGFuZ2xlOiBjdXJyZW50UmVzaXplIS5jdXJyZW50UmVjdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVtb3ZlR2hvc3RFbGVtZW50KCk7XG4gICAgICAgIGN1cnJlbnRSZXNpemUgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBoaWRkZW5cbiAgICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5yZXNpemVFZGdlcykge1xuICAgICAgdGhpcy5yZXNpemVFZGdlcyQubmV4dCh0aGlzLnJlc2l6ZUVkZ2VzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGhpZGRlblxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gYnJvd3NlciBjaGVjayBmb3IgYW5ndWxhciB1bml2ZXJzYWwsIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IHdoYXQgZG9jdW1lbnQgaXNcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkb2N1bWVudC5ib2R5LCAnY3Vyc29yJywgJycpO1xuICAgIH1cbiAgICB0aGlzLm1vdXNlZG93bi5jb21wbGV0ZSgpO1xuICAgIHRoaXMubW91c2V1cC5jb21wbGV0ZSgpO1xuICAgIHRoaXMubW91c2Vtb3ZlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5yZXNpemVFZGdlcyQuY29tcGxldGUoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RWxlbWVudENsYXNzKGVsbTogRWxlbWVudFJlZiwgbmFtZTogc3RyaW5nLCBhZGQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoYWRkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsbS5uYXRpdmVFbGVtZW50LCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbG0ubmF0aXZlRWxlbWVudCwgbmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFBvaW50ZXJFdmVudExpc3RlbmVycyB7XG4gIHB1YmxpYyBwb2ludGVyRG93bjogT2JzZXJ2YWJsZTxQb2ludGVyRXZlbnRDb29yZGluYXRlPjtcblxuICBwdWJsaWMgcG9pbnRlck1vdmU6IE9ic2VydmFibGU8UG9pbnRlckV2ZW50Q29vcmRpbmF0ZT47XG5cbiAgcHVibGljIHBvaW50ZXJVcDogT2JzZXJ2YWJsZTxQb2ludGVyRXZlbnRDb29yZGluYXRlPjtcblxuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogUG9pbnRlckV2ZW50TGlzdGVuZXJzOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lXG5cbiAgcHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZShcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHpvbmU6IE5nWm9uZVxuICApOiBQb2ludGVyRXZlbnRMaXN0ZW5lcnMge1xuICAgIGlmICghUG9pbnRlckV2ZW50TGlzdGVuZXJzLmluc3RhbmNlKSB7XG4gICAgICBQb2ludGVyRXZlbnRMaXN0ZW5lcnMuaW5zdGFuY2UgPSBuZXcgUG9pbnRlckV2ZW50TGlzdGVuZXJzKFxuICAgICAgICByZW5kZXJlcixcbiAgICAgICAgem9uZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIFBvaW50ZXJFdmVudExpc3RlbmVycy5pbnN0YW5jZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHJlbmRlcmVyOiBSZW5kZXJlcjIsIHpvbmU6IE5nWm9uZSkge1xuICAgIHRoaXMucG9pbnRlckRvd24gPSBuZXcgT2JzZXJ2YWJsZShcbiAgICAgIChvYnNlcnZlcjogT2JzZXJ2ZXI8UG9pbnRlckV2ZW50Q29vcmRpbmF0ZT4pID0+IHtcbiAgICAgICAgbGV0IHVuc3Vic2NyaWJlTW91c2VEb3duOiAoKSA9PiB2b2lkO1xuICAgICAgICBsZXQgdW5zdWJzY3JpYmVUb3VjaFN0YXJ0OiAoKSA9PiB2b2lkO1xuXG4gICAgICAgIHpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgIHVuc3Vic2NyaWJlTW91c2VEb3duID0gcmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgICAgICdtb3VzZWRvd24nLFxuICAgICAgICAgICAgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xuICAgICAgICAgICAgICAgIGNsaWVudFg6IGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICAgICAgY2xpZW50WTogZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICAgICAgICBldmVudFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdW5zdWJzY3JpYmVUb3VjaFN0YXJ0ID0gcmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgICAgICd0b3VjaHN0YXJ0JyxcbiAgICAgICAgICAgIChldmVudDogVG91Y2hFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHtcbiAgICAgICAgICAgICAgICBjbGllbnRYOiBldmVudC50b3VjaGVzWzBdLmNsaWVudFgsXG4gICAgICAgICAgICAgICAgY2xpZW50WTogZXZlbnQudG91Y2hlc1swXS5jbGllbnRZLFxuICAgICAgICAgICAgICAgIGV2ZW50XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgdW5zdWJzY3JpYmVNb3VzZURvd24oKTtcbiAgICAgICAgICB1bnN1YnNjcmliZVRvdWNoU3RhcnQoKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICApLnBpcGUoc2hhcmUoKSk7XG5cbiAgICB0aGlzLnBvaW50ZXJNb3ZlID0gbmV3IE9ic2VydmFibGUoXG4gICAgICAob2JzZXJ2ZXI6IE9ic2VydmVyPFBvaW50ZXJFdmVudENvb3JkaW5hdGU+KSA9PiB7XG4gICAgICAgIGxldCB1bnN1YnNjcmliZU1vdXNlTW92ZTogKCkgPT4gdm9pZDtcbiAgICAgICAgbGV0IHVuc3Vic2NyaWJlVG91Y2hNb3ZlOiAoKSA9PiB2b2lkO1xuXG4gICAgICAgIHpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgIHVuc3Vic2NyaWJlTW91c2VNb3ZlID0gcmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgICAgICdtb3VzZW1vdmUnLFxuICAgICAgICAgICAgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xuICAgICAgICAgICAgICAgIGNsaWVudFg6IGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICAgICAgY2xpZW50WTogZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICAgICAgICBldmVudFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdW5zdWJzY3JpYmVUb3VjaE1vdmUgPSByZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAgICAgJ3RvdWNobW92ZScsXG4gICAgICAgICAgICAoZXZlbnQ6IFRvdWNoRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh7XG4gICAgICAgICAgICAgICAgY2xpZW50WDogZXZlbnQudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRYLFxuICAgICAgICAgICAgICAgIGNsaWVudFk6IGV2ZW50LnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WSxcbiAgICAgICAgICAgICAgICBldmVudFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIHVuc3Vic2NyaWJlTW91c2VNb3ZlKCk7XG4gICAgICAgICAgdW5zdWJzY3JpYmVUb3VjaE1vdmUoKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICApLnBpcGUoc2hhcmUoKSk7XG5cbiAgICB0aGlzLnBvaW50ZXJVcCA9IG5ldyBPYnNlcnZhYmxlKFxuICAgICAgKG9ic2VydmVyOiBPYnNlcnZlcjxQb2ludGVyRXZlbnRDb29yZGluYXRlPikgPT4ge1xuICAgICAgICBsZXQgdW5zdWJzY3JpYmVNb3VzZVVwOiAoKSA9PiB2b2lkO1xuICAgICAgICBsZXQgdW5zdWJzY3JpYmVUb3VjaEVuZDogKCkgPT4gdm9pZDtcbiAgICAgICAgbGV0IHVuc3Vic2NyaWJlVG91Y2hDYW5jZWw6ICgpID0+IHZvaWQ7XG5cbiAgICAgICAgem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgdW5zdWJzY3JpYmVNb3VzZVVwID0gcmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgICAgICdtb3VzZXVwJyxcbiAgICAgICAgICAgIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHtcbiAgICAgICAgICAgICAgICBjbGllbnRYOiBldmVudC5jbGllbnRYLFxuICAgICAgICAgICAgICAgIGNsaWVudFk6IGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHVuc3Vic2NyaWJlVG91Y2hFbmQgPSByZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAgICAgJ3RvdWNoZW5kJyxcbiAgICAgICAgICAgIChldmVudDogVG91Y2hFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHtcbiAgICAgICAgICAgICAgICBjbGllbnRYOiBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYLFxuICAgICAgICAgICAgICAgIGNsaWVudFk6IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFksXG4gICAgICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHVuc3Vic2NyaWJlVG91Y2hDYW5jZWwgPSByZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAgICAgJ3RvdWNoY2FuY2VsJyxcbiAgICAgICAgICAgIChldmVudDogVG91Y2hFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHtcbiAgICAgICAgICAgICAgICBjbGllbnRYOiBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYLFxuICAgICAgICAgICAgICAgIGNsaWVudFk6IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFksXG4gICAgICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICB1bnN1YnNjcmliZU1vdXNlVXAoKTtcbiAgICAgICAgICB1bnN1YnNjcmliZVRvdWNoRW5kKCk7XG4gICAgICAgICAgdW5zdWJzY3JpYmVUb3VjaENhbmNlbCgpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICkucGlwZShzaGFyZSgpKTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/esm2015/resizable.module.js b/dist/esm2015/resizable.module.js new file mode 100644 index 0000000..c6adceb --- /dev/null +++ b/dist/esm2015/resizable.module.js @@ -0,0 +1,16 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { ResizableDirective } from './resizable.directive'; +import { ResizeHandleDirective } from './resize-handle.directive'; +export class ResizableModule { +} +ResizableModule.decorators = [ + { type: NgModule, args: [{ + declarations: [ResizableDirective, ResizeHandleDirective], + exports: [ResizableDirective, ResizeHandleDirective] + },] } +]; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItcmVzaXphYmxlLWVsZW1lbnQvIiwic291cmNlcyI6WyJyZXNpemFibGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBTWxFLE1BQU0sT0FBTyxlQUFlOzs7WUFKM0IsUUFBUSxTQUFDO2dCQUNSLFlBQVksRUFBRSxDQUFDLGtCQUFrQixFQUFFLHFCQUFxQixDQUFDO2dCQUN6RCxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQzthQUNyRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXNpemFibGVEaXJlY3RpdmUgfSBmcm9tICcuL3Jlc2l6YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUmVzaXplSGFuZGxlRGlyZWN0aXZlIH0gZnJvbSAnLi9yZXNpemUtaGFuZGxlLmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1Jlc2l6YWJsZURpcmVjdGl2ZSwgUmVzaXplSGFuZGxlRGlyZWN0aXZlXSxcbiAgZXhwb3J0czogW1Jlc2l6YWJsZURpcmVjdGl2ZSwgUmVzaXplSGFuZGxlRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBSZXNpemFibGVNb2R1bGUge31cbiJdfQ== \ No newline at end of file diff --git a/dist/esm2015/resize-handle.directive.js b/dist/esm2015/resize-handle.directive.js new file mode 100644 index 0000000..87710d6 --- /dev/null +++ b/dist/esm2015/resize-handle.directive.js @@ -0,0 +1,170 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Directive, Input, HostListener, Renderer2, ElementRef, NgZone } from '@angular/core'; +import { ResizableDirective } from './resizable.directive'; +/** + * An element placed inside a `mwlResizable` directive to be used as a drag and resize handle + * + * For example + * + * ```html + *
+ *
+ *
+ * ``` + */ +export class ResizeHandleDirective { + /** + * @param {?} renderer + * @param {?} element + * @param {?} zone + * @param {?} resizable + */ + constructor(renderer, element, zone, resizable) { + this.renderer = renderer; + this.element = element; + this.zone = zone; + this.resizable = resizable; + /** + * The `Edges` object that contains the edges of the parent element that dragging the handle will trigger a resize on + */ + this.resizeEdges = {}; + this.eventListeners = {}; + } + /** + * @return {?} + */ + ngOnDestroy() { + this.unsubscribeEventListeners(); + } + /** + * @hidden + * @param {?} event + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + onMousedown(event, clientX, clientY) { + event.preventDefault(); + this.zone.runOutsideAngular(() => { + if (!this.eventListeners.touchmove) { + this.eventListeners.touchmove = this.renderer.listen(this.element.nativeElement, 'touchmove', (touchMoveEvent) => { + this.onMousemove(touchMoveEvent, touchMoveEvent.targetTouches[0].clientX, touchMoveEvent.targetTouches[0].clientY); + }); + } + if (!this.eventListeners.mousemove) { + this.eventListeners.mousemove = this.renderer.listen(this.element.nativeElement, 'mousemove', (mouseMoveEvent) => { + this.onMousemove(mouseMoveEvent, mouseMoveEvent.clientX, mouseMoveEvent.clientY); + }); + } + this.resizable.mousedown.next({ + clientX, + clientY, + edges: this.resizeEdges + }); + }); + } + /** + * @hidden + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + onMouseup(clientX, clientY) { + this.zone.runOutsideAngular(() => { + this.unsubscribeEventListeners(); + this.resizable.mouseup.next({ + clientX, + clientY, + edges: this.resizeEdges + }); + }); + } + /** + * @private + * @param {?} event + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + onMousemove(event, clientX, clientY) { + this.resizable.mousemove.next({ + clientX, + clientY, + edges: this.resizeEdges, + event + }); + } + /** + * @private + * @return {?} + */ + unsubscribeEventListeners() { + Object.keys(this.eventListeners).forEach(type => { + ((/** @type {?} */ (this))).eventListeners[type](); + delete this.eventListeners[type]; + }); + } +} +ResizeHandleDirective.decorators = [ + { type: Directive, args: [{ + selector: '[mwlResizeHandle]' + },] } +]; +/** @nocollapse */ +ResizeHandleDirective.ctorParameters = () => [ + { type: Renderer2 }, + { type: ElementRef }, + { type: NgZone }, + { type: ResizableDirective } +]; +ResizeHandleDirective.propDecorators = { + resizeEdges: [{ type: Input }], + onMousedown: [{ type: HostListener, args: ['touchstart', [ + '$event', + '$event.touches[0].clientX', + '$event.touches[0].clientY' + ],] }, { type: HostListener, args: ['mousedown', ['$event', '$event.clientX', '$event.clientY'],] }], + onMouseup: [{ type: HostListener, args: ['touchend', [ + '$event.changedTouches[0].clientX', + '$event.changedTouches[0].clientY' + ],] }, { type: HostListener, args: ['touchcancel', [ + '$event.changedTouches[0].clientX', + '$event.changedTouches[0].clientY' + ],] }, { type: HostListener, args: ['mouseup', ['$event.clientX', '$event.clientY'],] }] +}; +if (false) { + /** + * The `Edges` object that contains the edges of the parent element that dragging the handle will trigger a resize on + * @type {?} + */ + ResizeHandleDirective.prototype.resizeEdges; + /** + * @type {?} + * @private + */ + ResizeHandleDirective.prototype.eventListeners; + /** + * @type {?} + * @private + */ + ResizeHandleDirective.prototype.renderer; + /** + * @type {?} + * @private + */ + ResizeHandleDirective.prototype.element; + /** + * @type {?} + * @private + */ + ResizeHandleDirective.prototype.zone; + /** + * @type {?} + * @private + */ + ResizeHandleDirective.prototype.resizable; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLWhhbmRsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLXJlc2l6YWJsZS1lbGVtZW50LyIsInNvdXJjZXMiOlsicmVzaXplLWhhbmRsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFlBQVksRUFDWixTQUFTLEVBQ1QsVUFBVSxFQUVWLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBaUIzRCxNQUFNLE9BQU8scUJBQXFCOzs7Ozs7O0lBWWhDLFlBQ1UsUUFBbUIsRUFDbkIsT0FBbUIsRUFDbkIsSUFBWSxFQUNaLFNBQTZCO1FBSDdCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNuQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osY0FBUyxHQUFULFNBQVMsQ0FBb0I7Ozs7UUFaOUIsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFFekIsbUJBQWMsR0FJbEIsRUFBRSxDQUFDO0lBT0osQ0FBQzs7OztJQUVKLFdBQVc7UUFDVCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUNuQyxDQUFDOzs7Ozs7OztJQVdELFdBQVcsQ0FDVCxLQUE4QixFQUM5QixPQUFlLEVBQ2YsT0FBZTtRQUVmLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFDMUIsV0FBVyxFQUNYLENBQUMsY0FBMEIsRUFBRSxFQUFFO29CQUM3QixJQUFJLENBQUMsV0FBVyxDQUNkLGNBQWMsRUFDZCxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFDdkMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3hDLENBQUM7Z0JBQ0osQ0FBQyxDQUNGLENBQUM7YUFDSDtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUMxQixXQUFXLEVBQ1gsQ0FBQyxjQUEwQixFQUFFLEVBQUU7b0JBQzdCLElBQUksQ0FBQyxXQUFXLENBQ2QsY0FBYyxFQUNkLGNBQWMsQ0FBQyxPQUFPLEVBQ3RCLGNBQWMsQ0FBQyxPQUFPLENBQ3ZCLENBQUM7Z0JBQ0osQ0FBQyxDQUNGLENBQUM7YUFDSDtZQUNELElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDNUIsT0FBTztnQkFDUCxPQUFPO2dCQUNQLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVzthQUN4QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Ozs7Ozs7SUFjRCxTQUFTLENBQUMsT0FBZSxFQUFFLE9BQWU7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUMxQixPQUFPO2dCQUNQLE9BQU87Z0JBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXO2FBQ3hCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7Ozs7Ozs7SUFFTyxXQUFXLENBQ2pCLEtBQThCLEVBQzlCLE9BQWUsRUFDZixPQUFlO1FBRWYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQzVCLE9BQU87WUFDUCxPQUFPO1lBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQ3ZCLEtBQUs7U0FDTixDQUFDLENBQUM7SUFDTCxDQUFDOzs7OztJQUVPLHlCQUF5QjtRQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUMsQ0FBQyxtQkFBQSxJQUFJLEVBQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OztZQXJIRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjthQUM5Qjs7OztZQXJCQyxTQUFTO1lBQ1QsVUFBVTtZQUVWLE1BQU07WUFFQyxrQkFBa0I7OzswQkFxQnhCLEtBQUs7MEJBc0JMLFlBQVksU0FBQyxZQUFZLEVBQUU7b0JBQzFCLFFBQVE7b0JBQ1IsMkJBQTJCO29CQUMzQiwyQkFBMkI7aUJBQzVCLGNBQ0EsWUFBWSxTQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQzt3QkE2Q3hFLFlBQVksU0FBQyxVQUFVLEVBQUU7b0JBQ3hCLGtDQUFrQztvQkFDbEMsa0NBQWtDO2lCQUNuQyxjQUNBLFlBQVksU0FBQyxhQUFhLEVBQUU7b0JBQzNCLGtDQUFrQztvQkFDbEMsa0NBQWtDO2lCQUNuQyxjQUNBLFlBQVksU0FBQyxTQUFTLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQzs7Ozs7OztJQWhGN0QsNENBQWlDOzs7OztJQUVqQywrQ0FJTzs7Ozs7SUFHTCx5Q0FBMkI7Ozs7O0lBQzNCLHdDQUEyQjs7Ozs7SUFDM0IscUNBQW9COzs7OztJQUNwQiwwQ0FBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBIb3N0TGlzdGVuZXIsXG4gIFJlbmRlcmVyMixcbiAgRWxlbWVudFJlZixcbiAgT25EZXN0cm95LFxuICBOZ1pvbmVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXNpemFibGVEaXJlY3RpdmUgfSBmcm9tICcuL3Jlc2l6YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRWRnZXMgfSBmcm9tICcuL2ludGVyZmFjZXMvZWRnZXMuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBBbiBlbGVtZW50IHBsYWNlZCBpbnNpZGUgYSBgbXdsUmVzaXphYmxlYCBkaXJlY3RpdmUgdG8gYmUgdXNlZCBhcyBhIGRyYWcgYW5kIHJlc2l6ZSBoYW5kbGVcbiAqXG4gKiBGb3IgZXhhbXBsZVxuICpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgbXdsUmVzaXphYmxlPlxuICogICA8ZGl2IG13bFJlc2l6ZUhhbmRsZSBbcmVzaXplRWRnZXNdPVwie2JvdHRvbTogdHJ1ZSwgcmlnaHQ6IHRydWV9XCI+PC9kaXY+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbXdsUmVzaXplSGFuZGxlXSdcbn0pXG5leHBvcnQgY2xhc3MgUmVzaXplSGFuZGxlRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFRoZSBgRWRnZXNgIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBlZGdlcyBvZiB0aGUgcGFyZW50IGVsZW1lbnQgdGhhdCBkcmFnZ2luZyB0aGUgaGFuZGxlIHdpbGwgdHJpZ2dlciBhIHJlc2l6ZSBvblxuICAgKi9cbiAgQElucHV0KCkgcmVzaXplRWRnZXM6IEVkZ2VzID0ge307XG5cbiAgcHJpdmF0ZSBldmVudExpc3RlbmVyczoge1xuICAgIHRvdWNobW92ZT86ICgpID0+IHZvaWQ7XG4gICAgbW91c2Vtb3ZlPzogKCkgPT4gdm9pZDtcbiAgICBba2V5OiBzdHJpbmddOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIH0gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgcmVzaXphYmxlOiBSZXNpemFibGVEaXJlY3RpdmVcbiAgKSB7fVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5zdWJzY3JpYmVFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBoaWRkZW5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBbXG4gICAgJyRldmVudCcsXG4gICAgJyRldmVudC50b3VjaGVzWzBdLmNsaWVudFgnLFxuICAgICckZXZlbnQudG91Y2hlc1swXS5jbGllbnRZJ1xuICBdKVxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCcsICckZXZlbnQuY2xpZW50WCcsICckZXZlbnQuY2xpZW50WSddKVxuICBvbk1vdXNlZG93bihcbiAgICBldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQsXG4gICAgY2xpZW50WDogbnVtYmVyLFxuICAgIGNsaWVudFk6IG51bWJlclxuICApOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZXZlbnRMaXN0ZW5lcnMudG91Y2htb3ZlKSB7XG4gICAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMudG91Y2htb3ZlID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgJ3RvdWNobW92ZScsXG4gICAgICAgICAgKHRvdWNoTW92ZUV2ZW50OiBUb3VjaEV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uTW91c2Vtb3ZlKFxuICAgICAgICAgICAgICB0b3VjaE1vdmVFdmVudCxcbiAgICAgICAgICAgICAgdG91Y2hNb3ZlRXZlbnQudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRYLFxuICAgICAgICAgICAgICB0b3VjaE1vdmVFdmVudC50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmV2ZW50TGlzdGVuZXJzLm1vdXNlbW92ZSkge1xuICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLm1vdXNlbW92ZSA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICdtb3VzZW1vdmUnLFxuICAgICAgICAgIChtb3VzZU1vdmVFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbk1vdXNlbW92ZShcbiAgICAgICAgICAgICAgbW91c2VNb3ZlRXZlbnQsXG4gICAgICAgICAgICAgIG1vdXNlTW92ZUV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICAgIG1vdXNlTW92ZUV2ZW50LmNsaWVudFlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5yZXNpemFibGUubW91c2Vkb3duLm5leHQoe1xuICAgICAgICBjbGllbnRYLFxuICAgICAgICBjbGllbnRZLFxuICAgICAgICBlZGdlczogdGhpcy5yZXNpemVFZGdlc1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGhpZGRlblxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcigndG91Y2hlbmQnLCBbXG4gICAgJyRldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYJyxcbiAgICAnJGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFknXG4gIF0pXG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJywgW1xuICAgICckZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WCcsXG4gICAgJyRldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZJ1xuICBdKVxuICBASG9zdExpc3RlbmVyKCdtb3VzZXVwJywgWyckZXZlbnQuY2xpZW50WCcsICckZXZlbnQuY2xpZW50WSddKVxuICBvbk1vdXNldXAoY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy51bnN1YnNjcmliZUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICB0aGlzLnJlc2l6YWJsZS5tb3VzZXVwLm5leHQoe1xuICAgICAgICBjbGllbnRYLFxuICAgICAgICBjbGllbnRZLFxuICAgICAgICBlZGdlczogdGhpcy5yZXNpemVFZGdlc1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uTW91c2Vtb3ZlKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCxcbiAgICBjbGllbnRYOiBudW1iZXIsXG4gICAgY2xpZW50WTogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIHRoaXMucmVzaXphYmxlLm1vdXNlbW92ZS5uZXh0KHtcbiAgICAgIGNsaWVudFgsXG4gICAgICBjbGllbnRZLFxuICAgICAgZWRnZXM6IHRoaXMucmVzaXplRWRnZXMsXG4gICAgICBldmVudFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuZXZlbnRMaXN0ZW5lcnMpLmZvckVhY2godHlwZSA9PiB7XG4gICAgICAodGhpcyBhcyBhbnkpLmV2ZW50TGlzdGVuZXJzW3R5cGVdKCk7XG4gICAgICBkZWxldGUgdGhpcy5ldmVudExpc3RlbmVyc1t0eXBlXTtcbiAgICB9KTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/esm5/angular-resizable-element.js b/dist/esm5/angular-resizable-element.js new file mode 100644 index 0000000..ba28abe --- /dev/null +++ b/dist/esm5/angular-resizable-element.js @@ -0,0 +1,9 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * Generated bundle index. Do not edit. + */ +export { ResizableDirective, ResizeHandleDirective, ResizableModule } from './index'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1yZXNpemFibGUtZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItcmVzaXphYmxlLWVsZW1lbnQvIiwic291cmNlcyI6WyJhbmd1bGFyLXJlc2l6YWJsZS1lbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQSwyRUFBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19 \ No newline at end of file diff --git a/dist/esm5/index.js b/dist/esm5/index.js new file mode 100644 index 0000000..f8d796e --- /dev/null +++ b/dist/esm5/index.js @@ -0,0 +1,8 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +export { ResizableModule } from './resizable.module'; +export { ResizableDirective } from './resizable.directive'; +export { ResizeHandleDirective } from './resize-handle.directive'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLXJlc2l6YWJsZS1lbGVtZW50LyIsInNvdXJjZXMiOlsiaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGdDQUFjLG9CQUFvQixDQUFDO0FBSW5DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9yZXNpemFibGUubW9kdWxlJztcbmV4cG9ydCB7IEJvdW5kaW5nUmVjdGFuZ2xlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2JvdW5kaW5nLXJlY3RhbmdsZS5pbnRlcmZhY2UnO1xuZXhwb3J0IHsgRWRnZXMgfSBmcm9tICcuL2ludGVyZmFjZXMvZWRnZXMuaW50ZXJmYWNlJztcbmV4cG9ydCB7IFJlc2l6ZUV2ZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3Jlc2l6ZS1ldmVudC5pbnRlcmZhY2UnO1xuZXhwb3J0IHsgUmVzaXphYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9yZXNpemFibGUuZGlyZWN0aXZlJztcbmV4cG9ydCB7IFJlc2l6ZUhhbmRsZURpcmVjdGl2ZSB9IGZyb20gJy4vcmVzaXplLWhhbmRsZS5kaXJlY3RpdmUnO1xuIl19 \ No newline at end of file diff --git a/dist/esm5/interfaces/bounding-rectangle.interface.js b/dist/esm5/interfaces/bounding-rectangle.interface.js new file mode 100644 index 0000000..8ca4a46 --- /dev/null +++ b/dist/esm5/interfaces/bounding-rectangle.interface.js @@ -0,0 +1,29 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * The bounding rectangle of the resized element + * @record + */ +export function BoundingRectangle() { } +if (false) { + /** @type {?} */ + BoundingRectangle.prototype.top; + /** @type {?} */ + BoundingRectangle.prototype.bottom; + /** @type {?} */ + BoundingRectangle.prototype.left; + /** @type {?} */ + BoundingRectangle.prototype.right; + /** @type {?|undefined} */ + BoundingRectangle.prototype.height; + /** @type {?|undefined} */ + BoundingRectangle.prototype.width; + /** @type {?|undefined} */ + BoundingRectangle.prototype.scrollTop; + /** @type {?|undefined} */ + BoundingRectangle.prototype.scrollLeft; + /* Skipping unhandled member: [key: string]: number | undefined;*/ +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm91bmRpbmctcmVjdGFuZ2xlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItcmVzaXphYmxlLWVsZW1lbnQvIiwic291cmNlcyI6WyJpbnRlcmZhY2VzL2JvdW5kaW5nLXJlY3RhbmdsZS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFHQSx1Q0FVQzs7O0lBVEMsZ0NBQVk7O0lBQ1osbUNBQWU7O0lBQ2YsaUNBQWE7O0lBQ2Isa0NBQWM7O0lBQ2QsbUNBQWdCOztJQUNoQixrQ0FBZTs7SUFDZixzQ0FBbUI7O0lBQ25CLHVDQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiB0aGUgcmVzaXplZCBlbGVtZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm91bmRpbmdSZWN0YW5nbGUge1xuICB0b3A6IG51bWJlcjtcbiAgYm90dG9tOiBudW1iZXI7XG4gIGxlZnQ6IG51bWJlcjtcbiAgcmlnaHQ6IG51bWJlcjtcbiAgaGVpZ2h0PzogbnVtYmVyO1xuICB3aWR0aD86IG51bWJlcjtcbiAgc2Nyb2xsVG9wPzogbnVtYmVyO1xuICBzY3JvbGxMZWZ0PzogbnVtYmVyO1xuICBba2V5OiBzdHJpbmddOiBudW1iZXIgfCB1bmRlZmluZWQ7XG59XG4iXX0= \ No newline at end of file diff --git a/dist/esm5/interfaces/edges.interface.js b/dist/esm5/interfaces/edges.interface.js new file mode 100644 index 0000000..62c88e1 --- /dev/null +++ b/dist/esm5/interfaces/edges.interface.js @@ -0,0 +1,21 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * The edges that the resize event were triggered on + * @record + */ +export function Edges() { } +if (false) { + /** @type {?|undefined} */ + Edges.prototype.top; + /** @type {?|undefined} */ + Edges.prototype.bottom; + /** @type {?|undefined} */ + Edges.prototype.left; + /** @type {?|undefined} */ + Edges.prototype.right; + /* Skipping unhandled member: [key: string]: boolean | number | undefined;*/ +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZXMuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1yZXNpemFibGUtZWxlbWVudC8iLCJzb3VyY2VzIjpbImludGVyZmFjZXMvZWRnZXMuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBR0EsMkJBTUM7OztJQUxDLG9CQUF1Qjs7SUFDdkIsdUJBQTBCOztJQUMxQixxQkFBd0I7O0lBQ3hCLHNCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGVkZ2VzIHRoYXQgdGhlIHJlc2l6ZSBldmVudCB3ZXJlIHRyaWdnZXJlZCBvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVkZ2VzIHtcbiAgdG9wPzogYm9vbGVhbiB8IG51bWJlcjtcbiAgYm90dG9tPzogYm9vbGVhbiB8IG51bWJlcjtcbiAgbGVmdD86IGJvb2xlYW4gfCBudW1iZXI7XG4gIHJpZ2h0PzogYm9vbGVhbiB8IG51bWJlcjtcbiAgW2tleTogc3RyaW5nXTogYm9vbGVhbiB8IG51bWJlciB8IHVuZGVmaW5lZDtcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/esm5/interfaces/resize-event.interface.js b/dist/esm5/interfaces/resize-event.interface.js new file mode 100644 index 0000000..5497cef --- /dev/null +++ b/dist/esm5/interfaces/resize-event.interface.js @@ -0,0 +1,16 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * The `$event` object that is passed to the resize events + * @record + */ +export function ResizeEvent() { } +if (false) { + /** @type {?} */ + ResizeEvent.prototype.rectangle; + /** @type {?} */ + ResizeEvent.prototype.edges; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLWV2ZW50LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItcmVzaXphYmxlLWVsZW1lbnQvIiwic291cmNlcyI6WyJpbnRlcmZhY2VzL3Jlc2l6ZS1ldmVudC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFNQSxpQ0FHQzs7O0lBRkMsZ0NBQTZCOztJQUM3Qiw0QkFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJvdW5kaW5nUmVjdGFuZ2xlIH0gZnJvbSAnLi9ib3VuZGluZy1yZWN0YW5nbGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVkZ2VzIH0gZnJvbSAnLi9lZGdlcy5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIFRoZSBgJGV2ZW50YCBvYmplY3QgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHJlc2l6ZSBldmVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNpemVFdmVudCB7XG4gIHJlY3RhbmdsZTogQm91bmRpbmdSZWN0YW5nbGU7XG4gIGVkZ2VzOiBFZGdlcztcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/esm5/resizable.directive.js b/dist/esm5/resizable.directive.js new file mode 100644 index 0000000..9b6518c --- /dev/null +++ b/dist/esm5/resizable.directive.js @@ -0,0 +1,949 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import * as tslib_1 from "tslib"; +import { Directive, Renderer2, ElementRef, Output, Input, EventEmitter, NgZone, Inject, PLATFORM_ID } from '@angular/core'; +import { isPlatformBrowser } from '@angular/common'; +import { Subject, Observable, merge, EMPTY } from 'rxjs'; +import { map, mergeMap, takeUntil, filter, pairwise, take, share, auditTime, switchMap, startWith } from 'rxjs/operators'; +/** + * @record + */ +function PointerEventCoordinate() { } +if (false) { + /** @type {?} */ + PointerEventCoordinate.prototype.clientX; + /** @type {?} */ + PointerEventCoordinate.prototype.clientY; + /** @type {?} */ + PointerEventCoordinate.prototype.event; +} +/** + * @record + */ +function Coordinate() { } +if (false) { + /** @type {?} */ + Coordinate.prototype.x; + /** @type {?} */ + Coordinate.prototype.y; +} +/** + * @param {?} value1 + * @param {?} value2 + * @param {?=} precision + * @return {?} + */ +function isNumberCloseTo(value1, value2, precision) { + if (precision === void 0) { precision = 3; } + /** @type {?} */ + var diff = Math.abs(value1 - value2); + return diff < precision; +} +/** + * @param {?} startingRect + * @param {?} edges + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ +function getNewBoundingRectangle(startingRect, edges, clientX, clientY) { + /** @type {?} */ + var newBoundingRect = { + top: startingRect.top, + bottom: startingRect.bottom, + left: startingRect.left, + right: startingRect.right + }; + if (edges.top) { + newBoundingRect.top += clientY; + } + if (edges.bottom) { + newBoundingRect.bottom += clientY; + } + if (edges.left) { + newBoundingRect.left += clientX; + } + if (edges.right) { + newBoundingRect.right += clientX; + } + newBoundingRect.height = newBoundingRect.bottom - newBoundingRect.top; + newBoundingRect.width = newBoundingRect.right - newBoundingRect.left; + return newBoundingRect; +} +/** + * @param {?} element + * @param {?} ghostElementPositioning + * @return {?} + */ +function getElementRect(element, ghostElementPositioning) { + /** @type {?} */ + var translateX = 0; + /** @type {?} */ + var translateY = 0; + /** @type {?} */ + var style = element.nativeElement.style; + /** @type {?} */ + var transformProperties = [ + 'transform', + '-ms-transform', + '-moz-transform', + '-o-transform' + ]; + /** @type {?} */ + var transform = transformProperties + .map(function (property) { return style[property]; }) + .find(function (value) { return !!value; }); + if (transform && transform.includes('translate3d')) { + translateX = transform.replace(/.*translate3d\((.*)px, (.*)px, (.*)px\).*/, '$1'); + translateY = transform.replace(/.*translate3d\((.*)px, (.*)px, (.*)px\).*/, '$2'); + } + else if (transform && transform.includes('translate')) { + translateX = transform.replace(/.*translate\((.*)px, (.*)px\).*/, '$1'); + translateY = transform.replace(/.*translate\((.*)px, (.*)px\).*/, '$2'); + } + if (ghostElementPositioning === 'absolute') { + return { + height: element.nativeElement.offsetHeight, + width: element.nativeElement.offsetWidth, + top: element.nativeElement.offsetTop - translateY, + bottom: element.nativeElement.offsetHeight + + element.nativeElement.offsetTop - + translateY, + left: element.nativeElement.offsetLeft - translateX, + right: element.nativeElement.offsetWidth + + element.nativeElement.offsetLeft - + translateX + }; + } + else { + /** @type {?} */ + var boundingRect = element.nativeElement.getBoundingClientRect(); + return { + height: boundingRect.height, + width: boundingRect.width, + top: boundingRect.top - translateY, + bottom: boundingRect.bottom - translateY, + left: boundingRect.left - translateX, + right: boundingRect.right - translateX, + scrollTop: element.nativeElement.scrollTop, + scrollLeft: element.nativeElement.scrollLeft + }; + } +} +/** + * @param {?} __0 + * @return {?} + */ +function isWithinBoundingY(_a) { + var clientY = _a.clientY, rect = _a.rect; + return clientY >= rect.top && clientY <= rect.bottom; +} +/** + * @param {?} __0 + * @return {?} + */ +function isWithinBoundingX(_a) { + var clientX = _a.clientX, rect = _a.rect; + return clientX >= rect.left && clientX <= rect.right; +} +/** + * @param {?} __0 + * @return {?} + */ +function getResizeEdges(_a) { + var clientX = _a.clientX, clientY = _a.clientY, elm = _a.elm, allowedEdges = _a.allowedEdges, cursorPrecision = _a.cursorPrecision; + /** @type {?} */ + var elmPosition = elm.nativeElement.getBoundingClientRect(); + /** @type {?} */ + var edges = {}; + if (allowedEdges.left && + isNumberCloseTo(clientX, elmPosition.left, cursorPrecision) && + isWithinBoundingY({ clientY: clientY, rect: elmPosition })) { + edges.left = true; + } + if (allowedEdges.right && + isNumberCloseTo(clientX, elmPosition.right, cursorPrecision) && + isWithinBoundingY({ clientY: clientY, rect: elmPosition })) { + edges.right = true; + } + if (allowedEdges.top && + isNumberCloseTo(clientY, elmPosition.top, cursorPrecision) && + isWithinBoundingX({ clientX: clientX, rect: elmPosition })) { + edges.top = true; + } + if (allowedEdges.bottom && + isNumberCloseTo(clientY, elmPosition.bottom, cursorPrecision) && + isWithinBoundingX({ clientX: clientX, rect: elmPosition })) { + edges.bottom = true; + } + return edges; +} +/** + * @record + */ +export function ResizeCursors() { } +if (false) { + /** @type {?} */ + ResizeCursors.prototype.topLeft; + /** @type {?} */ + ResizeCursors.prototype.topRight; + /** @type {?} */ + ResizeCursors.prototype.bottomLeft; + /** @type {?} */ + ResizeCursors.prototype.bottomRight; + /** @type {?} */ + ResizeCursors.prototype.leftOrRight; + /** @type {?} */ + ResizeCursors.prototype.topOrBottom; +} +/** @type {?} */ +var DEFAULT_RESIZE_CURSORS = Object.freeze({ + topLeft: 'nw-resize', + topRight: 'ne-resize', + bottomLeft: 'sw-resize', + bottomRight: 'se-resize', + leftOrRight: 'col-resize', + topOrBottom: 'row-resize' +}); +/** + * @param {?} edges + * @param {?} cursors + * @return {?} + */ +function getResizeCursor(edges, cursors) { + if (edges.left && edges.top) { + return cursors.topLeft; + } + else if (edges.right && edges.top) { + return cursors.topRight; + } + else if (edges.left && edges.bottom) { + return cursors.bottomLeft; + } + else if (edges.right && edges.bottom) { + return cursors.bottomRight; + } + else if (edges.left || edges.right) { + return cursors.leftOrRight; + } + else if (edges.top || edges.bottom) { + return cursors.topOrBottom; + } + else { + return ''; + } +} +/** + * @param {?} __0 + * @return {?} + */ +function getEdgesDiff(_a) { + var edges = _a.edges, initialRectangle = _a.initialRectangle, newRectangle = _a.newRectangle; + /** @type {?} */ + var edgesDiff = {}; + Object.keys(edges).forEach(function (edge) { + edgesDiff[edge] = (newRectangle[edge] || 0) - (initialRectangle[edge] || 0); + }); + return edgesDiff; +} +/** @type {?} */ +var RESIZE_ACTIVE_CLASS = 'resize-active'; +/** @type {?} */ +var RESIZE_LEFT_HOVER_CLASS = 'resize-left-hover'; +/** @type {?} */ +var RESIZE_RIGHT_HOVER_CLASS = 'resize-right-hover'; +/** @type {?} */ +var RESIZE_TOP_HOVER_CLASS = 'resize-top-hover'; +/** @type {?} */ +var RESIZE_BOTTOM_HOVER_CLASS = 'resize-bottom-hover'; +/** @type {?} */ +var RESIZE_GHOST_ELEMENT_CLASS = 'resize-ghost-element'; +/** @type {?} */ +export var MOUSE_MOVE_THROTTLE_MS = 50; +/** + * Place this on an element to make it resizable. For example: + * + * ```html + *
+ *
+ * ``` + */ +var ResizableDirective = /** @class */ (function () { + /** + * @hidden + */ + function ResizableDirective(platformId, renderer, elm, zone) { + this.platformId = platformId; + this.renderer = renderer; + this.elm = elm; + this.zone = zone; + /** + * The edges that an element can be resized from. Pass an object like `{top: true, bottom: false}`. By default no edges can be resized. + * @deprecated use a resize handle instead that positions itself to the side of the element you would like to resize + */ + this.resizeEdges = {}; + /** + * Set to `true` to enable a temporary resizing effect of the element in between the `resizeStart` and `resizeEnd` events. + */ + this.enableGhostResize = false; + /** + * A snap grid that resize events will be locked to. + * + * e.g. to only allow the element to be resized every 10px set it to `{left: 10, right: 10}` + */ + this.resizeSnapGrid = {}; + /** + * The mouse cursors that will be set on the resize edges + */ + this.resizeCursors = DEFAULT_RESIZE_CURSORS; + /** + * Mouse over thickness to active cursor. + * @deprecated invalid when you migrate to use resize handles instead of setting resizeEdges on the element + */ + this.resizeCursorPrecision = 3; + /** + * Define the positioning of the ghost element (can be fixed or absolute) + */ + this.ghostElementPositioning = 'fixed'; + /** + * Allow elements to be resized to negative dimensions + */ + this.allowNegativeResizes = false; + /** + * Called when the mouse is pressed and a resize event is about to begin. `$event` is a `ResizeEvent` object. + */ + this.resizeStart = new EventEmitter(); + /** + * Called as the mouse is dragged after a resize event has begun. `$event` is a `ResizeEvent` object. + */ + this.resizing = new EventEmitter(); + /** + * Called after the mouse is released after a resize event. `$event` is a `ResizeEvent` object. + */ + this.resizeEnd = new EventEmitter(); + /** + * @hidden + */ + this.mouseup = new Subject(); + /** + * @hidden + */ + this.mousedown = new Subject(); + /** + * @hidden + */ + this.mousemove = new Subject(); + this.destroy$ = new Subject(); + this.resizeEdges$ = new Subject(); + this.pointerEventListeners = PointerEventListeners.getInstance(renderer, zone); + } + /** + * @hidden + */ + /** + * @hidden + * @return {?} + */ + ResizableDirective.prototype.ngOnInit = /** + * @hidden + * @return {?} + */ + function () { + var _this = this; + // TODO - use some fancy Observable.merge's for this + this.pointerEventListeners.pointerDown + .pipe(takeUntil(this.destroy$)) + .subscribe(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY; + _this.mousedown.next({ clientX: clientX, clientY: clientY }); + }); + this.pointerEventListeners.pointerMove + .pipe(takeUntil(this.destroy$)) + .subscribe(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY, event = _a.event; + _this.mousemove.next({ clientX: clientX, clientY: clientY, event: event }); + }); + this.pointerEventListeners.pointerUp + .pipe(takeUntil(this.destroy$)) + .subscribe(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY; + _this.mouseup.next({ clientX: clientX, clientY: clientY }); + }); + /** @type {?} */ + var currentResize; + /** @type {?} */ + var removeGhostElement = function () { + if (currentResize && currentResize.clonedNode) { + _this.elm.nativeElement.parentElement.removeChild(currentResize.clonedNode); + _this.renderer.setStyle(_this.elm.nativeElement, 'visibility', 'inherit'); + } + }; + /** @type {?} */ + var getResizeCursors = function () { + return tslib_1.__assign({}, DEFAULT_RESIZE_CURSORS, _this.resizeCursors); + }; + /** @type {?} */ + var mouseMove = this.mousemove.pipe(share()); + mouseMove.pipe(filter(function () { return !!currentResize; })).subscribe(function (_a) { + var event = _a.event; + event.preventDefault(); + }); + this.resizeEdges$ + .pipe(startWith(this.resizeEdges), map(function () { + return (_this.resizeEdges && + Object.keys(_this.resizeEdges).some(function (edge) { return !!_this.resizeEdges[edge]; })); + }), switchMap(function (legacyResizeEdgesEnabled) { + return legacyResizeEdgesEnabled ? mouseMove : EMPTY; + }), auditTime(MOUSE_MOVE_THROTTLE_MS)) + .subscribe(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY; + /** @type {?} */ + var resizeEdges = getResizeEdges({ + clientX: clientX, + clientY: clientY, + elm: _this.elm, + allowedEdges: _this.resizeEdges, + cursorPrecision: _this.resizeCursorPrecision + }); + /** @type {?} */ + var resizeCursors = getResizeCursors(); + if (!currentResize) { + /** @type {?} */ + var cursor = getResizeCursor(resizeEdges, resizeCursors); + _this.renderer.setStyle(_this.elm.nativeElement, 'cursor', cursor); + } + _this.setElementClass(_this.elm, RESIZE_LEFT_HOVER_CLASS, resizeEdges.left === true); + _this.setElementClass(_this.elm, RESIZE_RIGHT_HOVER_CLASS, resizeEdges.right === true); + _this.setElementClass(_this.elm, RESIZE_TOP_HOVER_CLASS, resizeEdges.top === true); + _this.setElementClass(_this.elm, RESIZE_BOTTOM_HOVER_CLASS, resizeEdges.bottom === true); + }); + /** @type {?} */ + var mousedrag = this.mousedown + .pipe(mergeMap(function (startCoords) { + /** + * @param {?} moveCoords + * @return {?} + */ + function getDiff(moveCoords) { + return { + clientX: moveCoords.clientX - startCoords.clientX, + clientY: moveCoords.clientY - startCoords.clientY + }; + } + /** @type {?} */ + var getSnapGrid = function () { + /** @type {?} */ + var snapGrid = { x: 1, y: 1 }; + if (currentResize) { + if (_this.resizeSnapGrid.left && currentResize.edges.left) { + snapGrid.x = +_this.resizeSnapGrid.left; + } + else if (_this.resizeSnapGrid.right && + currentResize.edges.right) { + snapGrid.x = +_this.resizeSnapGrid.right; + } + if (_this.resizeSnapGrid.top && currentResize.edges.top) { + snapGrid.y = +_this.resizeSnapGrid.top; + } + else if (_this.resizeSnapGrid.bottom && + currentResize.edges.bottom) { + snapGrid.y = +_this.resizeSnapGrid.bottom; + } + } + return snapGrid; + }; + /** + * @param {?} coords + * @param {?} snapGrid + * @return {?} + */ + function getGrid(coords, snapGrid) { + return { + x: Math.ceil(coords.clientX / snapGrid.x), + y: Math.ceil(coords.clientY / snapGrid.y) + }; + } + return merge(mouseMove.pipe(take(1)).pipe(map(function (coords) { return [coords]; })), mouseMove.pipe(pairwise())) + .pipe(map(function (_a) { + var _b = tslib_1.__read(_a, 2), previousCoords = _b[0], newCoords = _b[1]; + return [ + previousCoords ? getDiff(previousCoords) : previousCoords, + getDiff(newCoords) + ]; + })) + .pipe(filter(function (_a) { + var _b = tslib_1.__read(_a, 2), previousCoords = _b[0], newCoords = _b[1]; + if (!previousCoords) { + return true; + } + /** @type {?} */ + var snapGrid = getSnapGrid(); + /** @type {?} */ + var previousGrid = getGrid(previousCoords, snapGrid); + /** @type {?} */ + var newGrid = getGrid(newCoords, snapGrid); + return (previousGrid.x !== newGrid.x || previousGrid.y !== newGrid.y); + })) + .pipe(map(function (_a) { + var _b = tslib_1.__read(_a, 2), newCoords = _b[1]; + /** @type {?} */ + var snapGrid = getSnapGrid(); + return { + clientX: Math.round(newCoords.clientX / snapGrid.x) * snapGrid.x, + clientY: Math.round(newCoords.clientY / snapGrid.y) * snapGrid.y + }; + })) + .pipe(takeUntil(merge(_this.mouseup, _this.mousedown))); + })) + .pipe(filter(function () { return !!currentResize; })); + mousedrag + .pipe(map(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY; + return getNewBoundingRectangle((/** @type {?} */ (currentResize)).startingRect, (/** @type {?} */ (currentResize)).edges, clientX, clientY); + })) + .pipe(filter(function (newBoundingRect) { + return (_this.allowNegativeResizes || + !!(newBoundingRect.height && + newBoundingRect.width && + newBoundingRect.height > 0 && + newBoundingRect.width > 0)); + })) + .pipe(filter(function (newBoundingRect) { + return _this.validateResize + ? _this.validateResize({ + rectangle: newBoundingRect, + edges: getEdgesDiff({ + edges: (/** @type {?} */ (currentResize)).edges, + initialRectangle: (/** @type {?} */ (currentResize)).startingRect, + newRectangle: newBoundingRect + }) + }) + : true; + })) + .subscribe(function (newBoundingRect) { + if (currentResize && currentResize.clonedNode) { + _this.renderer.setStyle(currentResize.clonedNode, 'height', newBoundingRect.height + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'width', newBoundingRect.width + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'top', newBoundingRect.top + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'left', newBoundingRect.left + "px"); + } + _this.zone.run(function () { + _this.resizing.emit({ + edges: getEdgesDiff({ + edges: (/** @type {?} */ (currentResize)).edges, + initialRectangle: (/** @type {?} */ (currentResize)).startingRect, + newRectangle: newBoundingRect + }), + rectangle: newBoundingRect + }); + }); + (/** @type {?} */ (currentResize)).currentRect = newBoundingRect; + }); + this.mousedown + .pipe(map(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY, edges = _a.edges; + return (edges || + getResizeEdges({ + clientX: clientX, + clientY: clientY, + elm: _this.elm, + allowedEdges: _this.resizeEdges, + cursorPrecision: _this.resizeCursorPrecision + })); + })) + .pipe(filter(function (edges) { + return Object.keys(edges).length > 0; + })) + .subscribe(function (edges) { + if (currentResize) { + removeGhostElement(); + } + /** @type {?} */ + var startingRect = getElementRect(_this.elm, _this.ghostElementPositioning); + currentResize = { + edges: edges, + startingRect: startingRect, + currentRect: startingRect + }; + /** @type {?} */ + var resizeCursors = getResizeCursors(); + /** @type {?} */ + var cursor = getResizeCursor(currentResize.edges, resizeCursors); + _this.renderer.setStyle(document.body, 'cursor', cursor); + _this.setElementClass(_this.elm, RESIZE_ACTIVE_CLASS, true); + if (_this.enableGhostResize) { + currentResize.clonedNode = _this.elm.nativeElement.cloneNode(true); + _this.elm.nativeElement.parentElement.appendChild(currentResize.clonedNode); + _this.renderer.setStyle(_this.elm.nativeElement, 'visibility', 'hidden'); + _this.renderer.setStyle(currentResize.clonedNode, 'position', _this.ghostElementPositioning); + _this.renderer.setStyle(currentResize.clonedNode, 'left', currentResize.startingRect.left + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'top', currentResize.startingRect.top + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'height', currentResize.startingRect.height + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'width', currentResize.startingRect.width + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'cursor', getResizeCursor(currentResize.edges, resizeCursors)); + _this.renderer.addClass(currentResize.clonedNode, RESIZE_GHOST_ELEMENT_CLASS); + (/** @type {?} */ (currentResize.clonedNode)).scrollTop = (/** @type {?} */ (currentResize.startingRect + .scrollTop)); + (/** @type {?} */ (currentResize.clonedNode)).scrollLeft = (/** @type {?} */ (currentResize.startingRect + .scrollLeft)); + } + _this.zone.run(function () { + _this.resizeStart.emit({ + edges: getEdgesDiff({ + edges: edges, + initialRectangle: startingRect, + newRectangle: startingRect + }), + rectangle: getNewBoundingRectangle(startingRect, {}, 0, 0) + }); + }); + }); + this.mouseup.subscribe(function () { + if (currentResize) { + _this.renderer.removeClass(_this.elm.nativeElement, RESIZE_ACTIVE_CLASS); + _this.renderer.setStyle(document.body, 'cursor', ''); + _this.renderer.setStyle(_this.elm.nativeElement, 'cursor', ''); + _this.zone.run(function () { + _this.resizeEnd.emit({ + edges: getEdgesDiff({ + edges: (/** @type {?} */ (currentResize)).edges, + initialRectangle: (/** @type {?} */ (currentResize)).startingRect, + newRectangle: (/** @type {?} */ (currentResize)).currentRect + }), + rectangle: (/** @type {?} */ (currentResize)).currentRect + }); + }); + removeGhostElement(); + currentResize = null; + } + }); + }; + /** + * @hidden + */ + /** + * @hidden + * @param {?} changes + * @return {?} + */ + ResizableDirective.prototype.ngOnChanges = /** + * @hidden + * @param {?} changes + * @return {?} + */ + function (changes) { + if (changes.resizeEdges) { + this.resizeEdges$.next(this.resizeEdges); + } + }; + /** + * @hidden + */ + /** + * @hidden + * @return {?} + */ + ResizableDirective.prototype.ngOnDestroy = /** + * @hidden + * @return {?} + */ + function () { + // browser check for angular universal, because it doesn't know what document is + if (isPlatformBrowser(this.platformId)) { + this.renderer.setStyle(document.body, 'cursor', ''); + } + this.mousedown.complete(); + this.mouseup.complete(); + this.mousemove.complete(); + this.resizeEdges$.complete(); + this.destroy$.next(); + }; + /** + * @private + * @param {?} elm + * @param {?} name + * @param {?} add + * @return {?} + */ + ResizableDirective.prototype.setElementClass = /** + * @private + * @param {?} elm + * @param {?} name + * @param {?} add + * @return {?} + */ + function (elm, name, add) { + if (add) { + this.renderer.addClass(elm.nativeElement, name); + } + else { + this.renderer.removeClass(elm.nativeElement, name); + } + }; + ResizableDirective.decorators = [ + { type: Directive, args: [{ + selector: '[mwlResizable]' + },] } + ]; + /** @nocollapse */ + ResizableDirective.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }, + { type: Renderer2 }, + { type: ElementRef }, + { type: NgZone } + ]; }; + ResizableDirective.propDecorators = { + validateResize: [{ type: Input }], + resizeEdges: [{ type: Input }], + enableGhostResize: [{ type: Input }], + resizeSnapGrid: [{ type: Input }], + resizeCursors: [{ type: Input }], + resizeCursorPrecision: [{ type: Input }], + ghostElementPositioning: [{ type: Input }], + allowNegativeResizes: [{ type: Input }], + resizeStart: [{ type: Output }], + resizing: [{ type: Output }], + resizeEnd: [{ type: Output }] + }; + return ResizableDirective; +}()); +export { ResizableDirective }; +if (false) { + /** + * A function that will be called before each resize event. Return `true` to allow the resize event to propagate or `false` to cancel it + * @type {?} + */ + ResizableDirective.prototype.validateResize; + /** + * The edges that an element can be resized from. Pass an object like `{top: true, bottom: false}`. By default no edges can be resized. + * @deprecated use a resize handle instead that positions itself to the side of the element you would like to resize + * @type {?} + */ + ResizableDirective.prototype.resizeEdges; + /** + * Set to `true` to enable a temporary resizing effect of the element in between the `resizeStart` and `resizeEnd` events. + * @type {?} + */ + ResizableDirective.prototype.enableGhostResize; + /** + * A snap grid that resize events will be locked to. + * + * e.g. to only allow the element to be resized every 10px set it to `{left: 10, right: 10}` + * @type {?} + */ + ResizableDirective.prototype.resizeSnapGrid; + /** + * The mouse cursors that will be set on the resize edges + * @type {?} + */ + ResizableDirective.prototype.resizeCursors; + /** + * Mouse over thickness to active cursor. + * @deprecated invalid when you migrate to use resize handles instead of setting resizeEdges on the element + * @type {?} + */ + ResizableDirective.prototype.resizeCursorPrecision; + /** + * Define the positioning of the ghost element (can be fixed or absolute) + * @type {?} + */ + ResizableDirective.prototype.ghostElementPositioning; + /** + * Allow elements to be resized to negative dimensions + * @type {?} + */ + ResizableDirective.prototype.allowNegativeResizes; + /** + * Called when the mouse is pressed and a resize event is about to begin. `$event` is a `ResizeEvent` object. + * @type {?} + */ + ResizableDirective.prototype.resizeStart; + /** + * Called as the mouse is dragged after a resize event has begun. `$event` is a `ResizeEvent` object. + * @type {?} + */ + ResizableDirective.prototype.resizing; + /** + * Called after the mouse is released after a resize event. `$event` is a `ResizeEvent` object. + * @type {?} + */ + ResizableDirective.prototype.resizeEnd; + /** + * @hidden + * @type {?} + */ + ResizableDirective.prototype.mouseup; + /** + * @hidden + * @type {?} + */ + ResizableDirective.prototype.mousedown; + /** + * @hidden + * @type {?} + */ + ResizableDirective.prototype.mousemove; + /** + * @type {?} + * @private + */ + ResizableDirective.prototype.pointerEventListeners; + /** + * @type {?} + * @private + */ + ResizableDirective.prototype.destroy$; + /** + * @type {?} + * @private + */ + ResizableDirective.prototype.resizeEdges$; + /** + * @type {?} + * @private + */ + ResizableDirective.prototype.platformId; + /** + * @type {?} + * @private + */ + ResizableDirective.prototype.renderer; + /** @type {?} */ + ResizableDirective.prototype.elm; + /** + * @type {?} + * @private + */ + ResizableDirective.prototype.zone; +} +var PointerEventListeners = /** @class */ (function () { + function PointerEventListeners(renderer, zone) { + this.pointerDown = new Observable(function (observer) { + /** @type {?} */ + var unsubscribeMouseDown; + /** @type {?} */ + var unsubscribeTouchStart; + zone.runOutsideAngular(function () { + unsubscribeMouseDown = renderer.listen('document', 'mousedown', function (event) { + observer.next({ + clientX: event.clientX, + clientY: event.clientY, + event: event + }); + }); + unsubscribeTouchStart = renderer.listen('document', 'touchstart', function (event) { + observer.next({ + clientX: event.touches[0].clientX, + clientY: event.touches[0].clientY, + event: event + }); + }); + }); + return function () { + unsubscribeMouseDown(); + unsubscribeTouchStart(); + }; + }).pipe(share()); + this.pointerMove = new Observable(function (observer) { + /** @type {?} */ + var unsubscribeMouseMove; + /** @type {?} */ + var unsubscribeTouchMove; + zone.runOutsideAngular(function () { + unsubscribeMouseMove = renderer.listen('document', 'mousemove', function (event) { + observer.next({ + clientX: event.clientX, + clientY: event.clientY, + event: event + }); + }); + unsubscribeTouchMove = renderer.listen('document', 'touchmove', function (event) { + observer.next({ + clientX: event.targetTouches[0].clientX, + clientY: event.targetTouches[0].clientY, + event: event + }); + }); + }); + return function () { + unsubscribeMouseMove(); + unsubscribeTouchMove(); + }; + }).pipe(share()); + this.pointerUp = new Observable(function (observer) { + /** @type {?} */ + var unsubscribeMouseUp; + /** @type {?} */ + var unsubscribeTouchEnd; + /** @type {?} */ + var unsubscribeTouchCancel; + zone.runOutsideAngular(function () { + unsubscribeMouseUp = renderer.listen('document', 'mouseup', function (event) { + observer.next({ + clientX: event.clientX, + clientY: event.clientY, + event: event + }); + }); + unsubscribeTouchEnd = renderer.listen('document', 'touchend', function (event) { + observer.next({ + clientX: event.changedTouches[0].clientX, + clientY: event.changedTouches[0].clientY, + event: event + }); + }); + unsubscribeTouchCancel = renderer.listen('document', 'touchcancel', function (event) { + observer.next({ + clientX: event.changedTouches[0].clientX, + clientY: event.changedTouches[0].clientY, + event: event + }); + }); + }); + return function () { + unsubscribeMouseUp(); + unsubscribeTouchEnd(); + unsubscribeTouchCancel(); + }; + }).pipe(share()); + } + // tslint:disable-line + /** + * @param {?} renderer + * @param {?} zone + * @return {?} + */ + PointerEventListeners.getInstance = + // tslint:disable-line + /** + * @param {?} renderer + * @param {?} zone + * @return {?} + */ + function (renderer, zone) { + if (!PointerEventListeners.instance) { + PointerEventListeners.instance = new PointerEventListeners(renderer, zone); + } + return PointerEventListeners.instance; + }; + return PointerEventListeners; +}()); +if (false) { + /** + * @type {?} + * @private + */ + PointerEventListeners.instance; + /** @type {?} */ + PointerEventListeners.prototype.pointerDown; + /** @type {?} */ + PointerEventListeners.prototype.pointerMove; + /** @type {?} */ + PointerEventListeners.prototype.pointerUp; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItcmVzaXphYmxlLWVsZW1lbnQvIiwic291cmNlcyI6WyJyZXNpemFibGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUVWLE1BQU0sRUFDTixLQUFLLEVBQ0wsWUFBWSxFQUVaLE1BQU0sRUFHTixNQUFNLEVBQ04sV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFZLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUNMLEdBQUcsRUFDSCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsSUFBSSxFQUNKLEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVixNQUFNLGdCQUFnQixDQUFDOzs7O0FBS3hCLHFDQUlDOzs7SUFIQyx5Q0FBZ0I7O0lBQ2hCLHlDQUFnQjs7SUFDaEIsdUNBQStCOzs7OztBQUdqQyx5QkFHQzs7O0lBRkMsdUJBQVU7O0lBQ1YsdUJBQVU7Ozs7Ozs7O0FBR1osU0FBUyxlQUFlLENBQ3RCLE1BQWMsRUFDZCxNQUFjLEVBQ2QsU0FBcUI7SUFBckIsMEJBQUEsRUFBQSxhQUFxQjs7UUFFZixJQUFJLEdBQVcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQzlDLE9BQU8sSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUMxQixDQUFDOzs7Ozs7OztBQUVELFNBQVMsdUJBQXVCLENBQzlCLFlBQStCLEVBQy9CLEtBQVksRUFDWixPQUFlLEVBQ2YsT0FBZTs7UUFFVCxlQUFlLEdBQXNCO1FBQ3pDLEdBQUcsRUFBRSxZ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QUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTzt3QkFDeEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTzt3QkFDeEMsS0FBSyxPQUFBO3FCQUNOLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQ0YsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTztnQkFDTCxrQkFBa0IsRUFBRSxDQUFDO2dCQUNyQixtQkFBbUIsRUFBRSxDQUFDO2dCQUN0QixzQkFBc0IsRUFBRSxDQUFDO1lBQzNCLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FDRixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7Ozs7Ozs7SUE3SWEsaUNBQVc7Ozs7Ozs7SUFBekIsVUFDRSxRQUFtQixFQUNuQixJQUFZO1FBRVosSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRTtZQUNuQyxxQkFBcUIsQ0FBQyxRQUFRLEdBQUcsSUFBSSxxQkFBcUIsQ0FDeEQsUUFBUSxFQUNSLElBQUksQ0FDTCxDQUFDO1NBQ0g7UUFDRCxPQUFPLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBbUlILDRCQUFDO0FBQUQsQ0FBQyxBQXZKRCxJQXVKQzs7Ozs7O0lBaEpDLCtCQUErQzs7SUFOL0MsNENBQXVEOztJQUV2RCw0Q0FBdUQ7O0lBRXZELDBDQUFxRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgUmVuZGVyZXIyLFxuICBFbGVtZW50UmVmLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgSW5wdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25EZXN0cm95LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgSW5qZWN0LFxuICBQTEFURk9STV9JRFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN1YmplY3QsIE9ic2VydmFibGUsIE9ic2VydmVyLCBtZXJnZSwgRU1QVFkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIG1hcCxcbiAgbWVyZ2VNYXAsXG4gIHRha2VVbnRpbCxcbiAgZmlsdGVyLFxuICBwYWlyd2lzZSxcbiAgdGFrZSxcbiAgc2hhcmUsXG4gIGF1ZGl0VGltZSxcbiAgc3dpdGNoTWFwLFxuICBzdGFydFdpdGhcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRWRnZXMgfSBmcm9tICcuL2ludGVyZmFjZXMvZWRnZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJvdW5kaW5nUmVjdGFuZ2xlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2JvdW5kaW5nLXJlY3RhbmdsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVzaXplRXZlbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvcmVzaXplLWV2ZW50LmludGVyZmFjZSc7XG5cbmludGVyZmFjZSBQb2ludGVyRXZlbnRDb29yZGluYXRlIHtcbiAgY2xpZW50WDogbnVtYmVyO1xuICBjbGllbnRZOiBudW1iZXI7XG4gIGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudDtcbn1cblxuaW50ZXJmYWNlIENvb3JkaW5hdGUge1xuICB4OiBudW1iZXI7XG4gIHk6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXJDbG9zZVRvKFxuICB2YWx1ZTE6IG51bWJlcixcbiAgdmFsdWUyOiBudW1iZXIsXG4gIHByZWNpc2lvbjogbnVtYmVyID0gM1xuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRpZmY6IG51bWJlciA9IE1hdGguYWJzKHZhbHVlMSAtIHZhbHVlMik7XG4gIHJldHVybiBkaWZmIDwgcHJlY2lzaW9uO1xufVxuXG5mdW5jdGlvbiBnZXROZXdCb3VuZGluZ1JlY3RhbmdsZShcbiAgc3RhcnRpbmdSZWN0OiBCb3VuZGluZ1JlY3RhbmdsZSxcbiAgZWRnZXM6IEVkZ2VzLFxuICBjbGllbnRYOiBudW1iZXIsXG4gIGNsaWVudFk6IG51bWJlclxuKTogQm91bmRpbmdSZWN0YW5nbGUge1xuICBjb25zdCBuZXdCb3VuZGluZ1JlY3Q6IEJvdW5kaW5nUmVjdGFuZ2xlID0ge1xuICAgIHRvcDogc3RhcnRpbmdSZWN0LnRvcCxcbiAgICBib3R0b206IHN0YXJ0aW5nUmVjdC5ib3R0b20sXG4gICAgbGVmdDogc3RhcnRpbmdSZWN0LmxlZnQsXG4gICAgcmlnaHQ6IHN0YXJ0aW5nUmVjdC5yaWdodFxuICB9O1xuXG4gIGlmIChlZGdlcy50b3ApIHtcbiAgICBuZXdCb3VuZGluZ1JlY3QudG9wICs9IGNsaWVudFk7XG4gIH1cbiAgaWYgKGVkZ2VzLmJvdHRvbSkge1xuICAgIG5ld0JvdW5kaW5nUmVjdC5ib3R0b20gKz0gY2xpZW50WTtcbiAgfVxuICBpZiAoZWRnZXMubGVmdCkge1xuICAgIG5ld0JvdW5kaW5nUmVjdC5sZWZ0ICs9IGNsaWVudFg7XG4gIH1cbiAgaWYgKGVkZ2VzLnJpZ2h0KSB7XG4gICAgbmV3Qm91bmRpbmdSZWN0LnJpZ2h0ICs9IGNsaWVudFg7XG4gIH1cbiAgbmV3Qm91bmRpbmdSZWN0LmhlaWdodCA9IG5ld0JvdW5kaW5nUmVjdC5ib3R0b20gLSBuZXdCb3VuZGluZ1JlY3QudG9wO1xuICBuZXdCb3VuZGluZ1JlY3Qud2lkdGggPSBuZXdCb3VuZGluZ1JlY3QucmlnaHQgLSBuZXdCb3VuZGluZ1JlY3QubGVmdDtcblxuICByZXR1cm4gbmV3Qm91bmRpbmdSZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRFbGVtZW50UmVjdChcbiAgZWxlbWVudDogRWxlbWVudFJlZixcbiAgZ2hvc3RFbGVtZW50UG9zaXRpb25pbmc6IHN0cmluZ1xuKTogQm91bmRpbmdSZWN0YW5nbGUge1xuICBsZXQgdHJhbnNsYXRlWCA9IDA7XG4gIGxldCB0cmFuc2xhdGVZID0gMDtcbiAgY29uc3Qgc3R5bGUgPSBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGU7XG4gIGNvbnN0IHRyYW5zZm9ybVByb3BlcnRpZXMgPSBbXG4gICAgJ3RyYW5zZm9ybScsXG4gICAgJy1tcy10cmFuc2Zvcm0nLFxuICAgICctbW96LXRyYW5zZm9ybScsXG4gICAgJy1vLXRyYW5zZm9ybSdcbiAgXTtcbiAgY29uc3QgdHJhbnNmb3JtID0gdHJhbnNmb3JtUHJvcGVydGllc1xuICAgIC5tYXAocHJvcGVydHkgPT4gc3R5bGVbcHJvcGVydHldKVxuICAgIC5maW5kKHZhbHVlID0+ICEhdmFsdWUpO1xuICBpZiAodHJhbnNmb3JtICYmIHRyYW5zZm9ybS5pbmNsdWRlcygndHJhbnNsYXRlM2QnKSkge1xuICAgIHRyYW5zbGF0ZVggPSB0cmFuc2Zvcm0ucmVwbGFjZShcbiAgICAgIC8uKnRyYW5zbGF0ZTNkXFwoKC4qKXB4LCAoLiopcHgsICguKilweFxcKS4qLyxcbiAgICAgICckMSdcbiAgICApO1xuICAgIHRyYW5zbGF0ZVkgPSB0cmFuc2Zvcm0ucmVwbGFjZShcbiAgICAgIC8uKnRyYW5zbGF0ZTNkXFwoKC4qKXB4LCAoLiopcHgsICguKilweFxcKS4qLyxcbiAgICAgICckMidcbiAgICApO1xuICB9IGVsc2UgaWYgKHRyYW5zZm9ybSAmJiB0cmFuc2Zvcm0uaW5jbHVkZXMoJ3RyYW5zbGF0ZScpKSB7XG4gICAgdHJhbnNsYXRlWCA9IHRyYW5zZm9ybS5yZXBsYWNlKC8uKnRyYW5zbGF0ZVxcKCguKilweCwgKC4qKXB4XFwpLiovLCAnJDEnKTtcbiAgICB0cmFuc2xhdGVZID0gdHJhbnNmb3JtLnJlcGxhY2UoLy4qdHJhbnNsYXRlXFwoKC4qKXB4LCAoLiopcHhcXCkuKi8sICckMicpO1xuICB9XG5cbiAgaWYgKGdob3N0RWxlbWVudFBvc2l0aW9uaW5nID09PSAnYWJzb2x1dGUnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlaWdodDogZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgICAgIHdpZHRoOiBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgICB0b3A6IGVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AgLSB0cmFuc2xhdGVZLFxuICAgICAgYm90dG9tOlxuICAgICAgICBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0ICtcbiAgICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcCAtXG4gICAgICAgIHRyYW5zbGF0ZVksXG4gICAgICBsZWZ0OiBlbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCAtIHRyYW5zbGF0ZVgsXG4gICAgICByaWdodDpcbiAgICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICtcbiAgICAgICAgZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQgLVxuICAgICAgICB0cmFuc2xhdGVYXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBib3VuZGluZ1JlY3Q6IEJvdW5kaW5nUmVjdGFuZ2xlID0gZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHQ6IGJvdW5kaW5nUmVjdC5oZWlnaHQsXG4gICAgICB3aWR0aDogYm91bmRpbmdSZWN0LndpZHRoLFxuICAgICAgdG9wOiBib3VuZGluZ1JlY3QudG9wIC0gdHJhbnNsYXRlWSxcbiAgICAgIGJvdHRvbTogYm91bmRpbmdSZWN0LmJvdHRvbSAtIHRyYW5zbGF0ZVksXG4gICAgICBsZWZ0OiBib3VuZGluZ1JlY3QubGVmdCAtIHRyYW5zbGF0ZVgsXG4gICAgICByaWdodDogYm91bmRpbmdSZWN0LnJpZ2h0IC0gdHJhbnNsYXRlWCxcbiAgICAgIHNjcm9sbFRvcDogZWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCxcbiAgICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0XG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1dpdGhpbkJvdW5kaW5nWSh7XG4gIGNsaWVudFksXG4gIHJlY3Rcbn06IHtcbiAgY2xpZW50WTogbnVtYmVyO1xuICByZWN0OiBDbGllbnRSZWN0O1xufSk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2xpZW50WSA+PSByZWN0LnRvcCAmJiBjbGllbnRZIDw9IHJlY3QuYm90dG9tO1xufVxuXG5mdW5jdGlvbiBpc1dpdGhpbkJvdW5kaW5nWCh7XG4gIGNsaWVudFgsXG4gIHJlY3Rcbn06IHtcbiAgY2xpZW50WDogbnVtYmVyO1xuICByZWN0OiBDbGllbnRSZWN0O1xufSk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2xpZW50WCA+PSByZWN0LmxlZnQgJiYgY2xpZW50WCA8PSByZWN0LnJpZ2h0O1xufVxuXG5mdW5jdGlvbiBnZXRSZXNpemVFZGdlcyh7XG4gIGNsaWVudFgsXG4gIGNsaWVudFksXG4gIGVsbSxcbiAgYWxsb3dlZEVkZ2VzLFxuICBjdXJzb3JQcmVjaXNpb25cbn06IHtcbiAgY2xpZW50WDogbnVtYmVyO1xuICBjbGllbnRZOiBudW1iZXI7XG4gIGVsbTogRWxlbWVudFJlZjtcbiAgYWxsb3dlZEVkZ2VzOiBFZGdlcztcbiAgY3Vyc29yUHJlY2lzaW9uOiBudW1iZXI7XG59KTogRWRnZXMge1xuICBjb25zdCBlbG1Qb3NpdGlvbjogQ2xpZW50UmVjdCA9IGVsbS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBlZGdlczogRWRnZXMgPSB7fTtcblxuICBpZiAoXG4gICAgYWxsb3dlZEVkZ2VzLmxlZnQgJiZcbiAgICBpc051bWJlckNsb3NlVG8oY2xpZW50WCwgZWxtUG9zaXRpb24ubGVmdCwgY3Vyc29yUHJlY2lzaW9uKSAmJlxuICAgIGlzV2l0aGluQm91bmRpbmdZKHsgY2xpZW50WSwgcmVjdDogZWxtUG9zaXRpb24gfSlcbiAgKSB7XG4gICAgZWRnZXMubGVmdCA9IHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgYWxsb3dlZEVkZ2VzLnJpZ2h0ICYmXG4gICAgaXNOdW1iZXJDbG9zZVRvKGNsaWVudFgsIGVsbVBvc2l0aW9uLnJpZ2h0LCBjdXJzb3JQcmVjaXNpb24pICYmXG4gICAgaXNXaXRoaW5Cb3VuZGluZ1koeyBjbGllbnRZLCByZWN0OiBlbG1Qb3NpdGlvbiB9KVxuICApIHtcbiAgICBlZGdlcy5yaWdodCA9IHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgYWxsb3dlZEVkZ2VzLnRvcCAmJlxuICAgIGlzTnVtYmVyQ2xvc2VUbyhjbGllbnRZLCBlbG1Qb3NpdGlvbi50b3AsIGN1cnNvclByZWNpc2lvbikgJiZcbiAgICBpc1dpdGhpbkJvdW5kaW5nWCh7IGNsaWVudFgsIHJlY3Q6IGVsbVBvc2l0aW9uIH0pXG4gICkge1xuICAgIGVkZ2VzLnRvcCA9IHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgYWxsb3dlZEVkZ2VzLmJvdHRvbSAmJlxuICAgIGlzTnVtYmVyQ2xvc2VUbyhjbGllbnRZLCBlbG1Qb3NpdGlvbi5ib3R0b20sIGN1cnNvclByZWNpc2lvbikgJiZcbiAgICBpc1dpdGhpbkJvdW5kaW5nWCh7IGNsaWVudFgsIHJlY3Q6IGVsbVBvc2l0aW9uIH0pXG4gICkge1xuICAgIGVkZ2VzLmJvdHRvbSA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gZWRnZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzaXplQ3Vyc29ycyB7XG4gIHRvcExlZnQ6IHN0cmluZztcbiAgdG9wUmlnaHQ6IHN0cmluZztcbiAgYm90dG9tTGVmdDogc3RyaW5nO1xuICBib3R0b21SaWdodDogc3RyaW5nO1xuICBsZWZ0T3JSaWdodDogc3RyaW5nO1xuICB0b3BPckJvdHRvbTogc3RyaW5nO1xufVxuXG5jb25zdCBERUZBVUxUX1JFU0laRV9DVVJTT1JTOiBSZXNpemVDdXJzb3JzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHRvcExlZnQ6ICdudy1yZXNpemUnLFxuICB0b3BSaWdodDogJ25lLXJlc2l6ZScsXG4gIGJvdHRvbUxlZnQ6ICdzdy1yZXNpemUnLFxuICBib3R0b21SaWdodDogJ3NlLXJlc2l6ZScsXG4gIGxlZnRPclJpZ2h0OiAnY29sLXJlc2l6ZScsXG4gIHRvcE9yQm90dG9tOiAncm93LXJlc2l6ZSdcbn0pO1xuXG5mdW5jdGlvbiBnZXRSZXNpemVDdXJzb3IoZWRnZXM6IEVkZ2VzLCBjdXJzb3JzOiBSZXNpemVDdXJzb3JzKTogc3RyaW5nIHtcbiAgaWYgKGVkZ2VzLmxlZnQgJiYgZWRnZXMudG9wKSB7XG4gICAgcmV0dXJuIGN1cnNvcnMudG9wTGVmdDtcbiAgfSBlbHNlIGlmIChlZGdlcy5yaWdodCAmJiBlZGdlcy50b3ApIHtcbiAgICByZXR1cm4gY3Vyc29ycy50b3BSaWdodDtcbiAgfSBlbHNlIGlmIChlZGdlcy5sZWZ0ICYmIGVkZ2VzLmJvdHRvbSkge1xuICAgIHJldHVybiBjdXJzb3JzLmJvdHRvbUxlZnQ7XG4gIH0gZWxzZSBpZiAoZWRnZXMucmlnaHQgJiYgZWRnZXMuYm90dG9tKSB7XG4gICAgcmV0dXJuIGN1cnNvcnMuYm90dG9tUmlnaHQ7XG4gIH0gZWxzZSBpZiAoZWRnZXMubGVmdCB8fCBlZGdlcy5yaWdodCkge1xuICAgIHJldHVybiBjdXJzb3JzLmxlZnRPclJpZ2h0O1xuICB9IGVsc2UgaWYgKGVkZ2VzLnRvcCB8fCBlZGdlcy5ib3R0b20pIHtcbiAgICByZXR1cm4gY3Vyc29ycy50b3BPckJvdHRvbTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RWRnZXNEaWZmKHtcbiAgZWRnZXMsXG4gIGluaXRpYWxSZWN0YW5nbGUsXG4gIG5ld1JlY3RhbmdsZVxufToge1xuICBlZGdlczogRWRnZXM7XG4gIGluaXRpYWxSZWN0YW5nbGU6IEJvdW5kaW5nUmVjdGFuZ2xlO1xuICBuZXdSZWN0YW5nbGU6IEJvdW5kaW5nUmVjdGFuZ2xlO1xufSk6IEVkZ2VzIHtcbiAgY29uc3QgZWRnZXNEaWZmOiBFZGdlcyA9IHt9O1xuICBPYmplY3Qua2V5cyhlZGdlcykuZm9yRWFjaChlZGdlID0+IHtcbiAgICBlZGdlc0RpZmZbZWRnZV0gPSAobmV3UmVjdGFuZ2xlW2VkZ2VdIHx8IDApIC0gKGluaXRpYWxSZWN0YW5nbGVbZWRnZV0gfHwgMCk7XG4gIH0pO1xuICByZXR1cm4gZWRnZXNEaWZmO1xufVxuXG5jb25zdCBSRVNJWkVfQUNUSVZFX0NMQVNTOiBzdHJpbmcgPSAncmVzaXplLWFjdGl2ZSc7XG5jb25zdCBSRVNJWkVfTEVGVF9IT1ZFUl9DTEFTUzogc3RyaW5nID0gJ3Jlc2l6ZS1sZWZ0LWhvdmVyJztcbmNvbnN0IFJFU0laRV9SSUdIVF9IT1ZFUl9DTEFTUzogc3RyaW5nID0gJ3Jlc2l6ZS1yaWdodC1ob3Zlcic7XG5jb25zdCBSRVNJWkVfVE9QX0hPVkVSX0NMQVNTOiBzdHJpbmcgPSAncmVzaXplLXRvcC1ob3Zlcic7XG5jb25zdCBSRVNJWkVfQk9UVE9NX0hPVkVSX0NMQVNTOiBzdHJpbmcgPSAncmVzaXplLWJvdHRvbS1ob3Zlcic7XG5jb25zdCBSRVNJWkVfR0hPU1RfRUxFTUVOVF9DTEFTUzogc3RyaW5nID0gJ3Jlc2l6ZS1naG9zdC1lbGVtZW50JztcblxuZXhwb3J0IGNvbnN0IE1PVVNFX01PVkVfVEhST1RUTEVfTVM6IG51bWJlciA9IDUwO1xuXG4vKipcbiAqIFBsYWNlIHRoaXMgb24gYW4gZWxlbWVudCB0byBtYWtlIGl0IHJlc2l6YWJsZS4gRm9yIGV4YW1wbGU6XG4gKlxuICogYGBgaHRtbFxuICogPGRpdlxuICogICBtd2xSZXNpemFibGVcbiAqICAgW3Jlc2l6ZUVkZ2VzXT1cIntib3R0b206IHRydWUsIHJpZ2h0OiB0cnVlLCB0b3A6IHRydWUsIGxlZnQ6IHRydWV9XCJcbiAqICAgW2VuYWJsZUdob3N0UmVzaXplXT1cInRydWVcIj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1ttd2xSZXNpemFibGVdJ1xufSlcbmV4cG9ydCBjbGFzcyBSZXNpemFibGVEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgZWFjaCByZXNpemUgZXZlbnQuIFJldHVybiBgdHJ1ZWAgdG8gYWxsb3cgdGhlIHJlc2l6ZSBldmVudCB0byBwcm9wYWdhdGUgb3IgYGZhbHNlYCB0byBjYW5jZWwgaXRcbiAgICovXG4gIEBJbnB1dCgpIHZhbGlkYXRlUmVzaXplOiAocmVzaXplRXZlbnQ6IFJlc2l6ZUV2ZW50KSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZWRnZXMgdGhhdCBhbiBlbGVtZW50IGNhbiBiZSByZXNpemVkIGZyb20uIFBhc3MgYW4gb2JqZWN0IGxpa2UgYHt0b3A6IHRydWUsIGJvdHRvbTogZmFsc2V9YC4gQnkgZGVmYXVsdCBubyBlZGdlcyBjYW4gYmUgcmVzaXplZC5cbiAgICogQGRlcHJlY2F0ZWQgdXNlIGEgcmVzaXplIGhhbmRsZSBpbnN0ZWFkIHRoYXQgcG9zaXRpb25zIGl0c2VsZiB0byB0aGUgc2lkZSBvZiB0aGUgZWxlbWVudCB5b3Ugd291bGQgbGlrZSB0byByZXNpemVcbiAgICovXG4gIEBJbnB1dCgpIHJlc2l6ZUVkZ2VzOiBFZGdlcyA9IHt9O1xuXG4gIC8qKlxuICAgKiBTZXQgdG8gYHRydWVgIHRvIGVuYWJsZSBhIHRlbXBvcmFyeSByZXNpemluZyBlZmZlY3Qgb2YgdGhlIGVsZW1lbnQgaW4gYmV0d2VlbiB0aGUgYHJlc2l6ZVN0YXJ0YCBhbmQgYHJlc2l6ZUVuZGAgZXZlbnRzLlxuICAgKi9cbiAgQElucHV0KCkgZW5hYmxlR2hvc3RSZXNpemU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBzbmFwIGdyaWQgdGhhdCByZXNpemUgZXZlbnRzIHdpbGwgYmUgbG9ja2VkIHRvLlxuICAgKlxuICAgKiBlLmcuIHRvIG9ubHkgYWxsb3cgdGhlIGVsZW1lbnQgdG8gYmUgcmVzaXplZCBldmVyeSAxMHB4IHNldCBpdCB0byBge2xlZnQ6IDEwLCByaWdodDogMTB9YFxuICAgKi9cbiAgQElucHV0KCkgcmVzaXplU25hcEdyaWQ6IEVkZ2VzID0ge307XG5cbiAgLyoqXG4gICAqIFRoZSBtb3VzZSBjdXJzb3JzIHRoYXQgd2lsbCBiZSBzZXQgb24gdGhlIHJlc2l6ZSBlZGdlc1xuICAgKi9cbiAgQElucHV0KCkgcmVzaXplQ3Vyc29yczogUmVzaXplQ3Vyc29ycyA9IERFRkFVTFRfUkVTSVpFX0NVUlNPUlM7XG5cbiAgLyoqXG4gICAqIE1vdXNlIG92ZXIgdGhpY2tuZXNzIHRvIGFjdGl2ZSBjdXJzb3IuXG4gICAqIEBkZXByZWNhdGVkIGludmFsaWQgd2hlbiB5b3UgbWlncmF0ZSB0byB1c2UgcmVzaXplIGhhbmRsZXMgaW5zdGVhZCBvZiBzZXR0aW5nIHJlc2l6ZUVkZ2VzIG9uIHRoZSBlbGVtZW50XG4gICAqL1xuICBASW5wdXQoKSByZXNpemVDdXJzb3JQcmVjaXNpb246IG51bWJlciA9IDM7XG5cbiAgLyoqXG4gICAqIERlZmluZSB0aGUgcG9zaXRpb25pbmcgb2YgdGhlIGdob3N0IGVsZW1lbnQgKGNhbiBiZSBmaXhlZCBvciBhYnNvbHV0ZSlcbiAgICovXG4gIEBJbnB1dCgpIGdob3N0RWxlbWVudFBvc2l0aW9uaW5nOiAnZml4ZWQnIHwgJ2Fic29sdXRlJyA9ICdmaXhlZCc7XG5cbiAgLyoqXG4gICAqIEFsbG93IGVsZW1lbnRzIHRvIGJlIHJlc2l6ZWQgdG8gbmVnYXRpdmUgZGltZW5zaW9uc1xuICAgKi9cbiAgQElucHV0KCkgYWxsb3dOZWdhdGl2ZVJlc2l6ZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIG1vdXNlIGlzIHByZXNzZWQgYW5kIGEgcmVzaXplIGV2ZW50IGlzIGFib3V0IHRvIGJlZ2luLiBgJGV2ZW50YCBpcyBhIGBSZXNpemVFdmVudGAgb2JqZWN0LlxuICAgKi9cbiAgQE91dHB1dCgpIHJlc2l6ZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVFdmVudD4oKTtcblxuICAvKipcbiAgICogQ2FsbGVkIGFzIHRoZSBtb3VzZSBpcyBkcmFnZ2VkIGFmdGVyIGEgcmVzaXplIGV2ZW50IGhhcyBiZWd1bi4gYCRldmVudGAgaXMgYSBgUmVzaXplRXZlbnRgIG9iamVjdC5cbiAgICovXG4gIEBPdXRwdXQoKSByZXNpemluZyA9IG5ldyBFdmVudEVtaXR0ZXI8UmVzaXplRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciB0aGUgbW91c2UgaXMgcmVsZWFzZWQgYWZ0ZXIgYSByZXNpemUgZXZlbnQuIGAkZXZlbnRgIGlzIGEgYFJlc2l6ZUV2ZW50YCBvYmplY3QuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVzaXplRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxSZXNpemVFdmVudD4oKTtcblxuICAvKipcbiAgICogQGhpZGRlblxuICAgKi9cbiAgcHVibGljIG1vdXNldXAgPSBuZXcgU3ViamVjdDx7XG4gICAgY2xpZW50WDogbnVtYmVyO1xuICAgIGNsaWVudFk6IG51bWJlcjtcbiAgICBlZGdlcz86IEVkZ2VzO1xuICB9PigpO1xuXG4gIC8qKlxuICAgKiBAaGlkZGVuXG4gICAqL1xuICBwdWJsaWMgbW91c2Vkb3duID0gbmV3IFN1YmplY3Q8e1xuICAgIGNsaWVudFg6IG51bWJlcjtcbiAgICBjbGllbnRZOiBudW1iZXI7XG4gICAgZWRnZXM/OiBFZGdlcztcbiAgfT4oKTtcblxuICAvKipcbiAgICogQGhpZGRlblxuICAgKi9cbiAgcHVibGljIG1vdXNlbW92ZSA9IG5ldyBTdWJqZWN0PHtcbiAgICBjbGllbnRYOiBudW1iZXI7XG4gICAgY2xpZW50WTogbnVtYmVyO1xuICAgIGVkZ2VzPzogRWRnZXM7XG4gICAgZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50O1xuICB9PigpO1xuXG4gIHByaXZhdGUgcG9pbnRlckV2ZW50TGlzdGVuZXJzOiBQb2ludGVyRXZlbnRMaXN0ZW5lcnM7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSByZXNpemVFZGdlcyQgPSBuZXcgU3ViamVjdDxFZGdlcz4oKTtcblxuICAvKipcbiAgICogQGhpZGRlblxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBhbnksXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHB1YmxpYyBlbG06IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgdGhpcy5wb2ludGVyRXZlbnRMaXN0ZW5lcnMgPSBQb2ludGVyRXZlbnRMaXN0ZW5lcnMuZ2V0SW5zdGFuY2UoXG4gICAgICByZW5kZXJlcixcbiAgICAgIHpvbmVcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBoaWRkZW5cbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFRPRE8gLSB1c2Ugc29tZSBmYW5jeSBPYnNlcnZhYmxlLm1lcmdlJ3MgZm9yIHRoaXNcbiAgICB0aGlzLnBvaW50ZXJFdmVudExpc3RlbmVycy5wb2ludGVyRG93blxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSgoeyBjbGllbnRYLCBjbGllbnRZIH0pID0+IHtcbiAgICAgICAgdGhpcy5tb3VzZWRvd24ubmV4dCh7IGNsaWVudFgsIGNsaWVudFkgfSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMucG9pbnRlckV2ZW50TGlzdGVuZXJzLnBvaW50ZXJNb3ZlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGNsaWVudFgsIGNsaWVudFksIGV2ZW50IH0pID0+IHtcbiAgICAgICAgdGhpcy5tb3VzZW1vdmUubmV4dCh7IGNsaWVudFgsIGNsaWVudFksIGV2ZW50IH0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnBvaW50ZXJFdmVudExpc3RlbmVycy5wb2ludGVyVXBcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKHsgY2xpZW50WCwgY2xpZW50WSB9KSA9PiB7XG4gICAgICAgIHRoaXMubW91c2V1cC5uZXh0KHsgY2xpZW50WCwgY2xpZW50WSB9KTtcbiAgICAgIH0pO1xuXG4gICAgbGV0IGN1cnJlbnRSZXNpemU6IHtcbiAgICAgIGVkZ2VzOiBFZGdlcztcbiAgICAgIHN0YXJ0aW5nUmVjdDogQm91bmRpbmdSZWN0YW5nbGU7XG4gICAgICBjdXJyZW50UmVjdDogQm91bmRpbmdSZWN0YW5nbGU7XG4gICAgICBjbG9uZWROb2RlPzogSFRNTEVsZW1lbnQ7XG4gICAgfSB8IG51bGw7XG5cbiAgICBjb25zdCByZW1vdmVHaG9zdEVsZW1lbnQgPSAoKSA9PiB7XG4gICAgICBpZiAoY3VycmVudFJlc2l6ZSAmJiBjdXJyZW50UmVzaXplLmNsb25lZE5vZGUpIHtcbiAgICAgICAgdGhpcy5lbG0ubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKFxuICAgICAgICAgIGN1cnJlbnRSZXNpemUuY2xvbmVkTm9kZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxtLm5hdGl2ZUVsZW1lbnQsICd2aXNpYmlsaXR5JywgJ2luaGVyaXQnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0UmVzaXplQ3Vyc29ycyA9ICgpOiBSZXNpemVDdXJzb3JzID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLkRFRkFVTFRfUkVTSVpFX0NVUlNPUlMsXG4gICAgICAgIC4uLnRoaXMucmVzaXplQ3Vyc29yc1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgbW91c2VNb3ZlOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLm1vdXNlbW92ZS5waXBlKHNoYXJlKCkpO1xuXG4gICAgbW91c2VNb3ZlLnBpcGUoZmlsdGVyKCgpID0+ICEhY3VycmVudFJlc2l6ZSkpLnN1YnNjcmliZSgoeyBldmVudCB9KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNpemVFZGdlcyRcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgodGhpcy5yZXNpemVFZGdlcyksXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMucmVzaXplRWRnZXMgJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMucmVzaXplRWRnZXMpLnNvbWUoZWRnZSA9PiAhIXRoaXMucmVzaXplRWRnZXNbZWRnZV0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcChsZWdhY3lSZXNpemVFZGdlc0VuYWJsZWQgPT5cbiAgICAgICAgICBsZWdhY3lSZXNpemVFZGdlc0VuYWJsZWQgPyBtb3VzZU1vdmUgOiBFTVBUWVxuICAgICAgICApLFxuICAgICAgICBhdWRpdFRpbWUoTU9VU0VfTU9WRV9USFJPVFRMRV9NUylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHsgY2xpZW50WCwgY2xpZW50WSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc2l6ZUVkZ2VzOiBFZGdlcyA9IGdldFJlc2l6ZUVkZ2VzKHtcbiAgICAgICAgICBjbGllbnRYLFxuICAgICAgICAgIGNsaWVudFksXG4gICAgICAgICAgZWxtOiB0aGlzLmVsbSxcbiAgICAgICAgICBhbGxvd2VkRWRnZXM6IHRoaXMucmVzaXplRWRnZXMsXG4gICAgICAgICAgY3Vyc29yUHJlY2lzaW9uOiB0aGlzLnJlc2l6ZUN1cnNvclByZWNpc2lvblxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzaXplQ3Vyc29ycyA9IGdldFJlc2l6ZUN1cnNvcnMoKTtcbiAgICAgICAgaWYgKCFjdXJyZW50UmVzaXplKSB7XG4gICAgICAgICAgY29uc3QgY3Vyc29yID0gZ2V0UmVzaXplQ3Vyc29yKHJlc2l6ZUVkZ2VzLCByZXNpemVDdXJzb3JzKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxtLm5hdGl2ZUVsZW1lbnQsICdjdXJzb3InLCBjdXJzb3IpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0RWxlbWVudENsYXNzKFxuICAgICAgICAgIHRoaXMuZWxtLFxuICAgICAgICAgIFJFU0laRV9MRUZUX0hPVkVSX0NMQVNTLFxuICAgICAgICAgIHJlc2l6ZUVkZ2VzLmxlZnQgPT09IHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRFbGVtZW50Q2xhc3MoXG4gICAgICAgICAgdGhpcy5lbG0sXG4gICAgICAgICAgUkVTSVpFX1JJR0hUX0hPVkVSX0NMQVNTLFxuICAgICAgICAgIHJlc2l6ZUVkZ2VzLnJpZ2h0ID09PSB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0RWxlbWVudENsYXNzKFxuICAgICAgICAgIHRoaXMuZWxtLFxuICAgICAgICAgIFJFU0laRV9UT1BfSE9WRVJfQ0xBU1MsXG4gICAgICAgICAgcmVzaXplRWRnZXMudG9wID09PSB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2V0RWxlbWVudENsYXNzKFxuICAgICAgICAgIHRoaXMuZWxtLFxuICAgICAgICAgIFJFU0laRV9CT1RUT01fSE9WRVJfQ0xBU1MsXG4gICAgICAgICAgcmVzaXplRWRnZXMuYm90dG9tID09PSB0cnVlXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IG1vdXNlZHJhZzogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5tb3VzZWRvd25cbiAgICAgIC5waXBlKFxuICAgICAgICBtZXJnZU1hcChzdGFydENvb3JkcyA9PiB7XG4gICAgICAgICAgZnVuY3Rpb24gZ2V0RGlmZihtb3ZlQ29vcmRzOiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNsaWVudFg6IG1vdmVDb29yZHMuY2xpZW50WCAtIHN0YXJ0Q29vcmRzLmNsaWVudFgsXG4gICAgICAgICAgICAgIGNsaWVudFk6IG1vdmVDb29yZHMuY2xpZW50WSAtIHN0YXJ0Q29vcmRzLmNsaWVudFlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZ2V0U25hcEdyaWQgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzbmFwR3JpZDogQ29vcmRpbmF0ZSA9IHsgeDogMSwgeTogMSB9O1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudFJlc2l6ZSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5yZXNpemVTbmFwR3JpZC5sZWZ0ICYmIGN1cnJlbnRSZXNpemUuZWRnZXMubGVmdCkge1xuICAgICAgICAgICAgICAgIHNuYXBHcmlkLnggPSArdGhpcy5yZXNpemVTbmFwR3JpZC5sZWZ0O1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplU25hcEdyaWQucmlnaHQgJiZcbiAgICAgICAgICAgICAgICBjdXJyZW50UmVzaXplLmVkZ2VzLnJpZ2h0XG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHNuYXBHcmlkLnggPSArdGhpcy5yZXNpemVTbmFwR3JpZC5yaWdodDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6ZVNuYXBHcmlkLnRvcCAmJiBjdXJyZW50UmVzaXplLmVkZ2VzLnRvcCkge1xuICAgICAgICAgICAgICAgIHNuYXBHcmlkLnkgPSArdGhpcy5yZXNpemVTbmFwR3JpZC50b3A7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemVTbmFwR3JpZC5ib3R0b20gJiZcbiAgICAgICAgICAgICAgICBjdXJyZW50UmVzaXplLmVkZ2VzLmJvdHRvbVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzbmFwR3JpZC55ID0gK3RoaXMucmVzaXplU25hcEdyaWQuYm90dG9tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzbmFwR3JpZDtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgZnVuY3Rpb24gZ2V0R3JpZChcbiAgICAgICAgICAgIGNvb3JkczogeyBjbGllbnRYOiBudW1iZXI7IGNsaWVudFk6IG51bWJlciB9LFxuICAgICAgICAgICAgc25hcEdyaWQ6IENvb3JkaW5hdGVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHg6IE1hdGguY2VpbChjb29yZHMuY2xpZW50WCAvIHNuYXBHcmlkLngpLFxuICAgICAgICAgICAgICB5OiBNYXRoLmNlaWwoY29vcmRzLmNsaWVudFkgLyBzbmFwR3JpZC55KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbWVyZ2UoXG4gICAgICAgICAgICBtb3VzZU1vdmUucGlwZSh0YWtlKDEpKS5waXBlKG1hcChjb29yZHMgPT4gW2Nvb3Jkc10pKSxcbiAgICAgICAgICAgIG1vdXNlTW92ZS5waXBlKHBhaXJ3aXNlKCkpXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIG1hcCgoW3ByZXZpb3VzQ29vcmRzLCBuZXdDb29yZHNdKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ29vcmRzID8gZ2V0RGlmZihwcmV2aW91c0Nvb3JkcykgOiBwcmV2aW91c0Nvb3JkcyxcbiAgICAgICAgICAgICAgICAgIGdldERpZmYobmV3Q29vcmRzKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgZmlsdGVyKChbcHJldmlvdXNDb29yZHMsIG5ld0Nvb3Jkc10pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzQ29vcmRzKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzbmFwR3JpZDogQ29vcmRpbmF0ZSA9IGdldFNuYXBHcmlkKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNHcmlkOiBDb29yZGluYXRlID0gZ2V0R3JpZChcbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzQ29vcmRzLFxuICAgICAgICAgICAgICAgICAgc25hcEdyaWRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0dyaWQ6IENvb3JkaW5hdGUgPSBnZXRHcmlkKG5ld0Nvb3Jkcywgc25hcEdyaWQpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzR3JpZC54ICE9PSBuZXdHcmlkLnggfHwgcHJldmlvdXNHcmlkLnkgIT09IG5ld0dyaWQueVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgbWFwKChbLCBuZXdDb29yZHNdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc25hcEdyaWQ6IENvb3JkaW5hdGUgPSBnZXRTbmFwR3JpZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBjbGllbnRYOlxuICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKG5ld0Nvb3Jkcy5jbGllbnRYIC8gc25hcEdyaWQueCkgKiBzbmFwR3JpZC54LFxuICAgICAgICAgICAgICAgICAgY2xpZW50WTpcbiAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChuZXdDb29yZHMuY2xpZW50WSAvIHNuYXBHcmlkLnkpICogc25hcEdyaWQueVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwobWVyZ2UodGhpcy5tb3VzZXVwLCB0aGlzLm1vdXNlZG93bikpKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5waXBlKGZpbHRlcigoKSA9PiAhIWN1cnJlbnRSZXNpemUpKTtcblxuICAgIG1vdXNlZHJhZ1xuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoeyBjbGllbnRYLCBjbGllbnRZIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gZ2V0TmV3Qm91bmRpbmdSZWN0YW5nbGUoXG4gICAgICAgICAgICBjdXJyZW50UmVzaXplIS5zdGFydGluZ1JlY3QsXG4gICAgICAgICAgICBjdXJyZW50UmVzaXplIS5lZGdlcyxcbiAgICAgICAgICAgIGNsaWVudFgsXG4gICAgICAgICAgICBjbGllbnRZXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKG5ld0JvdW5kaW5nUmVjdDogQm91bmRpbmdSZWN0YW5nbGUpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5hbGxvd05lZ2F0aXZlUmVzaXplcyB8fFxuICAgICAgICAgICAgISEoXG4gICAgICAgICAgICAgIG5ld0JvdW5kaW5nUmVjdC5oZWlnaHQgJiZcbiAgICAgICAgICAgICAgbmV3Qm91bmRpbmdSZWN0LndpZHRoICYmXG4gICAgICAgICAgICAgIG5ld0JvdW5kaW5nUmVjdC5oZWlnaHQgPiAwICYmXG4gICAgICAgICAgICAgIG5ld0JvdW5kaW5nUmVjdC53aWR0aCA+IDBcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigobmV3Qm91bmRpbmdSZWN0OiBCb3VuZGluZ1JlY3RhbmdsZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVzaXplXG4gICAgICAgICAgICA/IHRoaXMudmFsaWRhdGVSZXNpemUoe1xuICAgICAgICAgICAgICAgIHJlY3RhbmdsZTogbmV3Qm91bmRpbmdSZWN0LFxuICAgICAgICAgICAgICAgIGVkZ2VzOiBnZXRFZGdlc0RpZmYoe1xuICAgICAgICAgICAgICAgICAgZWRnZXM6IGN1cnJlbnRSZXNpemUhLmVkZ2VzLFxuICAgICAgICAgICAgICAgICAgaW5pdGlhbFJlY3RhbmdsZTogY3VycmVudFJlc2l6ZSEuc3RhcnRpbmdSZWN0LFxuICAgICAgICAgICAgICAgICAgbmV3UmVjdGFuZ2xlOiBuZXdCb3VuZGluZ1JlY3RcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgobmV3Qm91bmRpbmdSZWN0OiBCb3VuZGluZ1JlY3RhbmdsZSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFJlc2l6ZSAmJiBjdXJyZW50UmVzaXplLmNsb25lZE5vZGUpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgY3VycmVudFJlc2l6ZS5jbG9uZWROb2RlLFxuICAgICAgICAgICAgJ2hlaWdodCcsXG4gICAgICAgICAgICBgJHtuZXdCb3VuZGluZ1JlY3QuaGVpZ2h0fXB4YFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIGN1cnJlbnRSZXNpemUuY2xvbmVkTm9kZSxcbiAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICBgJHtuZXdCb3VuZGluZ1JlY3Qud2lkdGh9cHhgXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgY3VycmVudFJlc2l6ZS5jbG9uZWROb2RlLFxuICAgICAgICAgICAgJ3RvcCcsXG4gICAgICAgICAgICBgJHtuZXdCb3VuZGluZ1JlY3QudG9wfXB4YFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIGN1cnJlbnRSZXNpemUuY2xvbmVkTm9kZSxcbiAgICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAgIGAke25ld0JvdW5kaW5nUmVjdC5sZWZ0fXB4YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJlc2l6aW5nLmVtaXQoe1xuICAgICAgICAgICAgZWRnZXM6IGdldEVkZ2VzRGlmZih7XG4gICAgICAgICAgICAgIGVkZ2VzOiBjdXJyZW50UmVzaXplIS5lZGdlcyxcbiAgICAgICAgICAgICAgaW5pdGlhbFJlY3RhbmdsZTogY3VycmVudFJlc2l6ZSEuc3RhcnRpbmdSZWN0LFxuICAgICAgICAgICAgICBuZXdSZWN0YW5nbGU6IG5ld0JvdW5kaW5nUmVjdFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICByZWN0YW5nbGU6IG5ld0JvdW5kaW5nUmVjdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjdXJyZW50UmVzaXplIS5jdXJyZW50UmVjdCA9IG5ld0JvdW5kaW5nUmVjdDtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5tb3VzZWRvd25cbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHsgY2xpZW50WCwgY2xpZW50WSwgZWRnZXMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBlZGdlcyB8fFxuICAgICAgICAgICAgZ2V0UmVzaXplRWRnZXMoe1xuICAgICAgICAgICAgICBjbGllbnRYLFxuICAgICAgICAgICAgICBjbGllbnRZLFxuICAgICAgICAgICAgICBlbG06IHRoaXMuZWxtLFxuICAgICAgICAgICAgICBhbGxvd2VkRWRnZXM6IHRoaXMucmVzaXplRWRnZXMsXG4gICAgICAgICAgICAgIGN1cnNvclByZWNpc2lvbjogdGhpcy5yZXNpemVDdXJzb3JQcmVjaXNpb25cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGVkZ2VzOiBFZGdlcykgPT4ge1xuICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlZGdlcykubGVuZ3RoID4gMDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGVkZ2VzOiBFZGdlcykgPT4ge1xuICAgICAgICBpZiAoY3VycmVudFJlc2l6ZSkge1xuICAgICAgICAgIHJlbW92ZUdob3N0RWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0aW5nUmVjdDogQm91bmRpbmdSZWN0YW5nbGUgPSBnZXRFbGVtZW50UmVjdChcbiAgICAgICAgICB0aGlzLmVsbSxcbiAgICAgICAgICB0aGlzLmdob3N0RWxlbWVudFBvc2l0aW9uaW5nXG4gICAgICAgICk7XG4gICAgICAgIGN1cnJlbnRSZXNpemUgPSB7XG4gICAgICAgICAgZWRnZXMsXG4gICAgICAgICAgc3RhcnRpbmdSZWN0LFxuICAgICAgICAgIGN1cnJlbnRSZWN0OiBzdGFydGluZ1JlY3RcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzaXplQ3Vyc29ycyA9IGdldFJlc2l6ZUN1cnNvcnMoKTtcbiAgICAgICAgY29uc3QgY3Vyc29yID0gZ2V0UmVzaXplQ3Vyc29yKGN1cnJlbnRSZXNpemUuZWRnZXMsIHJlc2l6ZUN1cnNvcnMpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGRvY3VtZW50LmJvZHksICdjdXJzb3InLCBjdXJzb3IpO1xuICAgICAgICB0aGlzLnNldEVsZW1lbnRDbGFzcyh0aGlzLmVsbSwgUkVTSVpFX0FDVElWRV9DTEFTUywgdHJ1ZSk7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZUdob3N0UmVzaXplKSB7XG4gICAgICAgICAgY3VycmVudFJlc2l6ZS5jbG9uZWROb2RlID0gdGhpcy5lbG0ubmF0aXZlRWxlbWVudC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5lbG0ubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKFxuICAgICAgICAgICAgY3VycmVudFJlc2l6ZS5jbG9uZWROb2RlXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgdGhpcy5lbG0ubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICd2aXNpYmlsaXR5JyxcbiAgICAgICAgICAgICdoaWRkZW4nXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgICAgY3VycmVudFJlc2l6ZS5jbG9uZWROb2RlLFxuICAgICAgICAgICAgJ3Bvc2l0aW9uJyxcbiAgICAgICAgICAgIHRoaXMuZ2hvc3RFbGVtZW50UG9zaXRpb25pbmdcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICBjdXJyZW50UmVzaXplLmNsb25lZE5vZGUsXG4gICAgICAgICAgICAnbGVmdCcsXG4gICAgICAgICAgICBgJHtjdXJyZW50UmVzaXplLnN0YXJ0aW5nUmVjdC5sZWZ0fXB4YFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIGN1cnJlbnRSZXNpemUuY2xvbmVkTm9kZSxcbiAgICAgICAgICAgICd0b3AnLFxuICAgICAgICAgICAgYCR7Y3VycmVudFJlc2l6ZS5zdGFydGluZ1JlY3QudG9wfXB4YFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIGN1cnJlbnRSZXNpemUuY2xvbmVkTm9kZSxcbiAgICAgICAgICAgICdoZWlnaHQnLFxuICAgICAgICAgICAgYCR7Y3VycmVudFJlc2l6ZS5zdGFydGluZ1JlY3QuaGVpZ2h0fXB4YFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIGN1cnJlbnRSZXNpemUuY2xvbmVkTm9kZSxcbiAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICBgJHtjdXJyZW50UmVzaXplLnN0YXJ0aW5nUmVjdC53aWR0aH1weGBcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICBjdXJyZW50UmVzaXplLmNsb25lZE5vZGUsXG4gICAgICAgICAgICAnY3Vyc29yJyxcbiAgICAgICAgICAgIGdldFJlc2l6ZUN1cnNvcihjdXJyZW50UmVzaXplLmVkZ2VzLCByZXNpemVDdXJzb3JzKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhcbiAgICAgICAgICAgIGN1cnJlbnRSZXNpemUuY2xvbmVkTm9kZSxcbiAgICAgICAgICAgIFJFU0laRV9HSE9TVF9FTEVNRU5UX0NMQVNTXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjdXJyZW50UmVzaXplLmNsb25lZE5vZGUhLnNjcm9sbFRvcCA9IGN1cnJlbnRSZXNpemUuc3RhcnRpbmdSZWN0XG4gICAgICAgICAgICAuc2Nyb2xsVG9wIGFzIG51bWJlcjtcbiAgICAgICAgICBjdXJyZW50UmVzaXplLmNsb25lZE5vZGUhLnNjcm9sbExlZnQgPSBjdXJyZW50UmVzaXplLnN0YXJ0aW5nUmVjdFxuICAgICAgICAgICAgLnNjcm9sbExlZnQgYXMgbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVzaXplU3RhcnQuZW1pdCh7XG4gICAgICAgICAgICBlZGdlczogZ2V0RWRnZXNEaWZmKHtcbiAgICAgICAgICAgICAgZWRnZXMsXG4gICAgICAgICAgICAgIGluaXRpYWxSZWN0YW5nbGU6IHN0YXJ0aW5nUmVjdCxcbiAgICAgICAgICAgICAgbmV3UmVjdGFuZ2xlOiBzdGFydGluZ1JlY3RcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcmVjdGFuZ2xlOiBnZXROZXdCb3VuZGluZ1JlY3RhbmdsZShzdGFydGluZ1JlY3QsIHt9LCAwLCAwKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5tb3VzZXVwLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAoY3VycmVudFJlc2l6ZSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxtLm5hdGl2ZUVsZW1lbnQsIFJFU0laRV9BQ1RJVkVfQ0xBU1MpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGRvY3VtZW50LmJvZHksICdjdXJzb3InLCAnJyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbG0ubmF0aXZlRWxlbWVudCwgJ2N1cnNvcicsICcnKTtcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZXNpemVFbmQuZW1pdCh7XG4gICAgICAgICAgICBlZGdlczogZ2V0RWRnZXNEaWZmKHtcbiAgICAgICAgICAgICAgZWRnZXM6IGN1cnJlbnRSZXNpemUhLmVkZ2VzLFxuICAgICAgICAgICAgICBpbml0aWFsUmVjdGFuZ2xlOiBjdXJyZW50UmVzaXplIS5zdGFydGluZ1JlY3QsXG4gICAgICAgICAgICAgIG5ld1JlY3RhbmdsZTogY3VycmVudFJlc2l6ZSEuY3VycmVudFJlY3RcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcmVjdGFuZ2xlOiBjdXJyZW50UmVzaXplIS5jdXJyZW50UmVjdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVtb3ZlR2hvc3RFbGVtZW50KCk7XG4gICAgICAgIGN1cnJlbnRSZXNpemUgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBoaWRkZW5cbiAgICovXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5yZXNpemVFZGdlcykge1xuICAgICAgdGhpcy5yZXNpemVFZGdlcyQubmV4dCh0aGlzLnJlc2l6ZUVkZ2VzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGhpZGRlblxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gYnJvd3NlciBjaGVjayBmb3IgYW5ndWxhciB1bml2ZXJzYWwsIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IHdoYXQgZG9jdW1lbnQgaXNcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkb2N1bWVudC5ib2R5LCAnY3Vyc29yJywgJycpO1xuICAgIH1cbiAgICB0aGlzLm1vdXNlZG93bi5jb21wbGV0ZSgpO1xuICAgIHRoaXMubW91c2V1cC5jb21wbGV0ZSgpO1xuICAgIHRoaXMubW91c2Vtb3ZlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5yZXNpemVFZGdlcyQuY29tcGxldGUoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RWxlbWVudENsYXNzKGVsbTogRWxlbWVudFJlZiwgbmFtZTogc3RyaW5nLCBhZGQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoYWRkKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsbS5uYXRpdmVFbGVtZW50LCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbG0ubmF0aXZlRWxlbWVudCwgbmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFBvaW50ZXJFdmVudExpc3RlbmVycyB7XG4gIHB1YmxpYyBwb2ludGVyRG93bjogT2JzZXJ2YWJsZTxQb2ludGVyRXZlbnRDb29yZGluYXRlPjtcblxuICBwdWJsaWMgcG9pbnRlck1vdmU6IE9ic2VydmFibGU8UG9pbnRlckV2ZW50Q29vcmRpbmF0ZT47XG5cbiAgcHVibGljIHBvaW50ZXJVcDogT2JzZXJ2YWJsZTxQb2ludGVyRXZlbnRDb29yZGluYXRlPjtcblxuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogUG9pbnRlckV2ZW50TGlzdGVuZXJzOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lXG5cbiAgcHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZShcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHpvbmU6IE5nWm9uZVxuICApOiBQb2ludGVyRXZlbnRMaXN0ZW5lcnMge1xuICAgIGlmICghUG9pbnRlckV2ZW50TGlzdGVuZXJzLmluc3RhbmNlKSB7XG4gICAgICBQb2ludGVyRXZlbnRMaXN0ZW5lcnMuaW5zdGFuY2UgPSBuZXcgUG9pbnRlckV2ZW50TGlzdGVuZXJzKFxuICAgICAgICByZW5kZXJlcixcbiAgICAgICAgem9uZVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIFBvaW50ZXJFdmVudExpc3RlbmVycy5pbnN0YW5jZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHJlbmRlcmVyOiBSZW5kZXJlcjIsIHpvbmU6IE5nWm9uZSkge1xuICAgIHRoaXMucG9pbnRlckRvd24gPSBuZXcgT2JzZXJ2YWJsZShcbiAgICAgIChvYnNlcnZlcjogT2JzZXJ2ZXI8UG9pbnRlckV2ZW50Q29vcmRpbmF0ZT4pID0+IHtcbiAgICAgICAgbGV0IHVuc3Vic2NyaWJlTW91c2VEb3duOiAoKSA9PiB2b2lkO1xuICAgICAgICBsZXQgdW5zdWJzY3JpYmVUb3VjaFN0YXJ0OiAoKSA9PiB2b2lkO1xuXG4gICAgICAgIHpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgIHVuc3Vic2NyaWJlTW91c2VEb3duID0gcmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgICAgICdtb3VzZWRvd24nLFxuICAgICAgICAgICAgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xuICAgICAgICAgICAgICAgIGNsaWVudFg6IGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICAgICAgY2xpZW50WTogZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICAgICAgICBldmVudFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdW5zdWJzY3JpYmVUb3VjaFN0YXJ0ID0gcmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgICAgICd0b3VjaHN0YXJ0JyxcbiAgICAgICAgICAgIChldmVudDogVG91Y2hFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHtcbiAgICAgICAgICAgICAgICBjbGllbnRYOiBldmVudC50b3VjaGVzWzBdLmNsaWVudFgsXG4gICAgICAgICAgICAgICAgY2xpZW50WTogZXZlbnQudG91Y2hlc1swXS5jbGllbnRZLFxuICAgICAgICAgICAgICAgIGV2ZW50XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgdW5zdWJzY3JpYmVNb3VzZURvd24oKTtcbiAgICAgICAgICB1bnN1YnNjcmliZVRvdWNoU3RhcnQoKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICApLnBpcGUoc2hhcmUoKSk7XG5cbiAgICB0aGlzLnBvaW50ZXJNb3ZlID0gbmV3IE9ic2VydmFibGUoXG4gICAgICAob2JzZXJ2ZXI6IE9ic2VydmVyPFBvaW50ZXJFdmVudENvb3JkaW5hdGU+KSA9PiB7XG4gICAgICAgIGxldCB1bnN1YnNjcmliZU1vdXNlTW92ZTogKCkgPT4gdm9pZDtcbiAgICAgICAgbGV0IHVuc3Vic2NyaWJlVG91Y2hNb3ZlOiAoKSA9PiB2b2lkO1xuXG4gICAgICAgIHpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgIHVuc3Vic2NyaWJlTW91c2VNb3ZlID0gcmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgICAgICdtb3VzZW1vdmUnLFxuICAgICAgICAgICAgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoe1xuICAgICAgICAgICAgICAgIGNsaWVudFg6IGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICAgICAgY2xpZW50WTogZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICAgICAgICBldmVudFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdW5zdWJzY3JpYmVUb3VjaE1vdmUgPSByZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAgICAgJ3RvdWNobW92ZScsXG4gICAgICAgICAgICAoZXZlbnQ6IFRvdWNoRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCh7XG4gICAgICAgICAgICAgICAgY2xpZW50WDogZXZlbnQudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRYLFxuICAgICAgICAgICAgICAgIGNsaWVudFk6IGV2ZW50LnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WSxcbiAgICAgICAgICAgICAgICBldmVudFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgIHVuc3Vic2NyaWJlTW91c2VNb3ZlKCk7XG4gICAgICAgICAgdW5zdWJzY3JpYmVUb3VjaE1vdmUoKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICApLnBpcGUoc2hhcmUoKSk7XG5cbiAgICB0aGlzLnBvaW50ZXJVcCA9IG5ldyBPYnNlcnZhYmxlKFxuICAgICAgKG9ic2VydmVyOiBPYnNlcnZlcjxQb2ludGVyRXZlbnRDb29yZGluYXRlPikgPT4ge1xuICAgICAgICBsZXQgdW5zdWJzY3JpYmVNb3VzZVVwOiAoKSA9PiB2b2lkO1xuICAgICAgICBsZXQgdW5zdWJzY3JpYmVUb3VjaEVuZDogKCkgPT4gdm9pZDtcbiAgICAgICAgbGV0IHVuc3Vic2NyaWJlVG91Y2hDYW5jZWw6ICgpID0+IHZvaWQ7XG5cbiAgICAgICAgem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgdW5zdWJzY3JpYmVNb3VzZVVwID0gcmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgICAgICdtb3VzZXVwJyxcbiAgICAgICAgICAgIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHtcbiAgICAgICAgICAgICAgICBjbGllbnRYOiBldmVudC5jbGllbnRYLFxuICAgICAgICAgICAgICAgIGNsaWVudFk6IGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHVuc3Vic2NyaWJlVG91Y2hFbmQgPSByZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAgICAgJ3RvdWNoZW5kJyxcbiAgICAgICAgICAgIChldmVudDogVG91Y2hFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHtcbiAgICAgICAgICAgICAgICBjbGllbnRYOiBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYLFxuICAgICAgICAgICAgICAgIGNsaWVudFk6IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFksXG4gICAgICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHVuc3Vic2NyaWJlVG91Y2hDYW5jZWwgPSByZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAgICAgJ3RvdWNoY2FuY2VsJyxcbiAgICAgICAgICAgIChldmVudDogVG91Y2hFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHtcbiAgICAgICAgICAgICAgICBjbGllbnRYOiBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYLFxuICAgICAgICAgICAgICAgIGNsaWVudFk6IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFksXG4gICAgICAgICAgICAgICAgZXZlbnRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICB1bnN1YnNjcmliZU1vdXNlVXAoKTtcbiAgICAgICAgICB1bnN1YnNjcmliZVRvdWNoRW5kKCk7XG4gICAgICAgICAgdW5zdWJzY3JpYmVUb3VjaENhbmNlbCgpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICkucGlwZShzaGFyZSgpKTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/esm5/resizable.module.js b/dist/esm5/resizable.module.js new file mode 100644 index 0000000..216aa31 --- /dev/null +++ b/dist/esm5/resizable.module.js @@ -0,0 +1,20 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { NgModule } from '@angular/core'; +import { ResizableDirective } from './resizable.directive'; +import { ResizeHandleDirective } from './resize-handle.directive'; +var ResizableModule = /** @class */ (function () { + function ResizableModule() { + } + ResizableModule.decorators = [ + { type: NgModule, args: [{ + declarations: [ResizableDirective, ResizeHandleDirective], + exports: [ResizableDirective, ResizeHandleDirective] + },] } + ]; + return ResizableModule; +}()); +export { ResizableModule }; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXphYmxlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItcmVzaXphYmxlLWVsZW1lbnQvIiwic291cmNlcyI6WyJyZXNpemFibGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRWxFO0lBQUE7SUFJOEIsQ0FBQzs7Z0JBSjlCLFFBQVEsU0FBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQztvQkFDekQsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUUscUJBQXFCLENBQUM7aUJBQ3JEOztJQUM2QixzQkFBQztDQUFBLEFBSi9CLElBSStCO1NBQWxCLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVzaXphYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9yZXNpemFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFJlc2l6ZUhhbmRsZURpcmVjdGl2ZSB9IGZyb20gJy4vcmVzaXplLWhhbmRsZS5kaXJlY3RpdmUnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtSZXNpemFibGVEaXJlY3RpdmUsIFJlc2l6ZUhhbmRsZURpcmVjdGl2ZV0sXG4gIGV4cG9ydHM6IFtSZXNpemFibGVEaXJlY3RpdmUsIFJlc2l6ZUhhbmRsZURpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgUmVzaXphYmxlTW9kdWxlIHt9XG4iXX0= \ No newline at end of file diff --git a/dist/esm5/resize-handle.directive.js b/dist/esm5/resize-handle.directive.js new file mode 100644 index 0000000..15d8efb --- /dev/null +++ b/dist/esm5/resize-handle.directive.js @@ -0,0 +1,202 @@ +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +import { Directive, Input, HostListener, Renderer2, ElementRef, NgZone } from '@angular/core'; +import { ResizableDirective } from './resizable.directive'; +/** + * An element placed inside a `mwlResizable` directive to be used as a drag and resize handle + * + * For example + * + * ```html + *
+ *
+ *
+ * ``` + */ +var ResizeHandleDirective = /** @class */ (function () { + function ResizeHandleDirective(renderer, element, zone, resizable) { + this.renderer = renderer; + this.element = element; + this.zone = zone; + this.resizable = resizable; + /** + * The `Edges` object that contains the edges of the parent element that dragging the handle will trigger a resize on + */ + this.resizeEdges = {}; + this.eventListeners = {}; + } + /** + * @return {?} + */ + ResizeHandleDirective.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this.unsubscribeEventListeners(); + }; + /** + * @hidden + */ + /** + * @hidden + * @param {?} event + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + ResizeHandleDirective.prototype.onMousedown = /** + * @hidden + * @param {?} event + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + function (event, clientX, clientY) { + var _this = this; + event.preventDefault(); + this.zone.runOutsideAngular(function () { + if (!_this.eventListeners.touchmove) { + _this.eventListeners.touchmove = _this.renderer.listen(_this.element.nativeElement, 'touchmove', function (touchMoveEvent) { + _this.onMousemove(touchMoveEvent, touchMoveEvent.targetTouches[0].clientX, touchMoveEvent.targetTouches[0].clientY); + }); + } + if (!_this.eventListeners.mousemove) { + _this.eventListeners.mousemove = _this.renderer.listen(_this.element.nativeElement, 'mousemove', function (mouseMoveEvent) { + _this.onMousemove(mouseMoveEvent, mouseMoveEvent.clientX, mouseMoveEvent.clientY); + }); + } + _this.resizable.mousedown.next({ + clientX: clientX, + clientY: clientY, + edges: _this.resizeEdges + }); + }); + }; + /** + * @hidden + */ + /** + * @hidden + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + ResizeHandleDirective.prototype.onMouseup = /** + * @hidden + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + function (clientX, clientY) { + var _this = this; + this.zone.runOutsideAngular(function () { + _this.unsubscribeEventListeners(); + _this.resizable.mouseup.next({ + clientX: clientX, + clientY: clientY, + edges: _this.resizeEdges + }); + }); + }; + /** + * @private + * @param {?} event + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + ResizeHandleDirective.prototype.onMousemove = /** + * @private + * @param {?} event + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + function (event, clientX, clientY) { + this.resizable.mousemove.next({ + clientX: clientX, + clientY: clientY, + edges: this.resizeEdges, + event: event + }); + }; + /** + * @private + * @return {?} + */ + ResizeHandleDirective.prototype.unsubscribeEventListeners = /** + * @private + * @return {?} + */ + function () { + var _this = this; + Object.keys(this.eventListeners).forEach(function (type) { + ((/** @type {?} */ (_this))).eventListeners[type](); + delete _this.eventListeners[type]; + }); + }; + ResizeHandleDirective.decorators = [ + { type: Directive, args: [{ + selector: '[mwlResizeHandle]' + },] } + ]; + /** @nocollapse */ + ResizeHandleDirective.ctorParameters = function () { return [ + { type: Renderer2 }, + { type: ElementRef }, + { type: NgZone }, + { type: ResizableDirective } + ]; }; + ResizeHandleDirective.propDecorators = { + resizeEdges: [{ type: Input }], + onMousedown: [{ type: HostListener, args: ['touchstart', [ + '$event', + '$event.touches[0].clientX', + '$event.touches[0].clientY' + ],] }, { type: HostListener, args: ['mousedown', ['$event', '$event.clientX', '$event.clientY'],] }], + onMouseup: [{ type: HostListener, args: ['touchend', [ + '$event.changedTouches[0].clientX', + '$event.changedTouches[0].clientY' + ],] }, { type: HostListener, args: ['touchcancel', [ + '$event.changedTouches[0].clientX', + '$event.changedTouches[0].clientY' + ],] }, { type: HostListener, args: ['mouseup', ['$event.clientX', '$event.clientY'],] }] + }; + return ResizeHandleDirective; +}()); +export { ResizeHandleDirective }; +if (false) { + /** + * The `Edges` object that contains the edges of the parent element that dragging the handle will trigger a resize on + * @type {?} + */ + ResizeHandleDirective.prototype.resizeEdges; + /** + * @type {?} + * @private + */ + ResizeHandleDirective.prototype.eventListeners; + /** + * @type {?} + * @private + */ + ResizeHandleDirective.prototype.renderer; + /** + * @type {?} + * @private + */ + ResizeHandleDirective.prototype.element; + /** + * @type {?} + * @private + */ + ResizeHandleDirective.prototype.zone; + /** + * @type {?} + * @private + */ + ResizeHandleDirective.prototype.resizable; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLWhhbmRsZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLXJlc2l6YWJsZS1lbGVtZW50LyIsInNvdXJjZXMiOlsicmVzaXplLWhhbmRsZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFlBQVksRUFDWixTQUFTLEVBQ1QsVUFBVSxFQUVWLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBYzNEO0lBZUUsK0JBQ1UsUUFBbUIsRUFDbkIsT0FBbUIsRUFDbkIsSUFBWSxFQUNaLFNBQTZCO1FBSDdCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUNuQixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osY0FBUyxHQUFULFNBQVMsQ0FBb0I7Ozs7UUFaOUIsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFFekIsbUJBQWMsR0FJbEIsRUFBRSxDQUFDO0lBT0osQ0FBQzs7OztJQUVKLDJDQUFXOzs7SUFBWDtRQUNFLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRzs7Ozs7Ozs7SUFPSCwyQ0FBVzs7Ozs7OztJQU5YLFVBT0UsS0FBOEIsRUFDOUIsT0FBZSxFQUNmLE9BQWU7UUFUakIsaUJBNkNDO1FBbENDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQzFCLElBQUksQ0FBQyxLQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRTtnQkFDbEMsS0FBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsS0FBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ2xELEtBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUMx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Qi9ELDRCQUFDO0NBQUEsQUF0SEQsSUFzSEM7U0FuSFkscUJBQXFCOzs7Ozs7SUFJaEMsNENBQWlDOzs7OztJQUVqQywrQ0FJTzs7Ozs7SUFHTCx5Q0FBMkI7Ozs7O0lBQzNCLHdDQUEyQjs7Ozs7SUFDM0IscUNBQW9COzs7OztJQUNwQiwwQ0FBcUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBIb3N0TGlzdGVuZXIsXG4gIFJlbmRlcmVyMixcbiAgRWxlbWVudFJlZixcbiAgT25EZXN0cm95LFxuICBOZ1pvbmVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXNpemFibGVEaXJlY3RpdmUgfSBmcm9tICcuL3Jlc2l6YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRWRnZXMgfSBmcm9tICcuL2ludGVyZmFjZXMvZWRnZXMuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBBbiBlbGVtZW50IHBsYWNlZCBpbnNpZGUgYSBgbXdsUmVzaXphYmxlYCBkaXJlY3RpdmUgdG8gYmUgdXNlZCBhcyBhIGRyYWcgYW5kIHJlc2l6ZSBoYW5kbGVcbiAqXG4gKiBGb3IgZXhhbXBsZVxuICpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgbXdsUmVzaXphYmxlPlxuICogICA8ZGl2IG13bFJlc2l6ZUhhbmRsZSBbcmVzaXplRWRnZXNdPVwie2JvdHRvbTogdHJ1ZSwgcmlnaHQ6IHRydWV9XCI+PC9kaXY+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbXdsUmVzaXplSGFuZGxlXSdcbn0pXG5leHBvcnQgY2xhc3MgUmVzaXplSGFuZGxlRGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFRoZSBgRWRnZXNgIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBlZGdlcyBvZiB0aGUgcGFyZW50IGVsZW1lbnQgdGhhdCBkcmFnZ2luZyB0aGUgaGFuZGxlIHdpbGwgdHJpZ2dlciBhIHJlc2l6ZSBvblxuICAgKi9cbiAgQElucHV0KCkgcmVzaXplRWRnZXM6IEVkZ2VzID0ge307XG5cbiAgcHJpdmF0ZSBldmVudExpc3RlbmVyczoge1xuICAgIHRvdWNobW92ZT86ICgpID0+IHZvaWQ7XG4gICAgbW91c2Vtb3ZlPzogKCkgPT4gdm9pZDtcbiAgICBba2V5OiBzdHJpbmddOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gIH0gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgcmVzaXphYmxlOiBSZXNpemFibGVEaXJlY3RpdmVcbiAgKSB7fVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5zdWJzY3JpYmVFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBoaWRkZW5cbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBbXG4gICAgJyRldmVudCcsXG4gICAgJyRldmVudC50b3VjaGVzWzBdLmNsaWVudFgnLFxuICAgICckZXZlbnQudG91Y2hlc1swXS5jbGllbnRZJ1xuICBdKVxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCcsICckZXZlbnQuY2xpZW50WCcsICckZXZlbnQuY2xpZW50WSddKVxuICBvbk1vdXNlZG93bihcbiAgICBldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQsXG4gICAgY2xpZW50WDogbnVtYmVyLFxuICAgIGNsaWVudFk6IG51bWJlclxuICApOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZXZlbnRMaXN0ZW5lcnMudG91Y2htb3ZlKSB7XG4gICAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMudG91Y2htb3ZlID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgJ3RvdWNobW92ZScsXG4gICAgICAgICAgKHRvdWNoTW92ZUV2ZW50OiBUb3VjaEV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uTW91c2Vtb3ZlKFxuICAgICAgICAgICAgICB0b3VjaE1vdmVFdmVudCxcbiAgICAgICAgICAgICAgdG91Y2hNb3ZlRXZlbnQudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRYLFxuICAgICAgICAgICAgICB0b3VjaE1vdmVFdmVudC50YXJnZXRUb3VjaGVzWzBdLmNsaWVudFlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLmV2ZW50TGlzdGVuZXJzLm1vdXNlbW92ZSkge1xuICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLm1vdXNlbW92ZSA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICdtb3VzZW1vdmUnLFxuICAgICAgICAgIChtb3VzZU1vdmVFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbk1vdXNlbW92ZShcbiAgICAgICAgICAgICAgbW91c2VNb3ZlRXZlbnQsXG4gICAgICAgICAgICAgIG1vdXNlTW92ZUV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICAgIG1vdXNlTW92ZUV2ZW50LmNsaWVudFlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5yZXNpemFibGUubW91c2Vkb3duLm5leHQoe1xuICAgICAgICBjbGllbnRYLFxuICAgICAgICBjbGllbnRZLFxuICAgICAgICBlZGdlczogdGhpcy5yZXNpemVFZGdlc1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGhpZGRlblxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcigndG91Y2hlbmQnLCBbXG4gICAgJyRldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYJyxcbiAgICAnJGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFknXG4gIF0pXG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoY2FuY2VsJywgW1xuICAgICckZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WCcsXG4gICAgJyRldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZJ1xuICBdKVxuICBASG9zdExpc3RlbmVyKCdtb3VzZXVwJywgWyckZXZlbnQuY2xpZW50WCcsICckZXZlbnQuY2xpZW50WSddKVxuICBvbk1vdXNldXAoY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy51bnN1YnNjcmliZUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICB0aGlzLnJlc2l6YWJsZS5tb3VzZXVwLm5leHQoe1xuICAgICAgICBjbGllbnRYLFxuICAgICAgICBjbGllbnRZLFxuICAgICAgICBlZGdlczogdGhpcy5yZXNpemVFZGdlc1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9uTW91c2Vtb3ZlKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCxcbiAgICBjbGllbnRYOiBudW1iZXIsXG4gICAgY2xpZW50WTogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIHRoaXMucmVzaXphYmxlLm1vdXNlbW92ZS5uZXh0KHtcbiAgICAgIGNsaWVudFgsXG4gICAgICBjbGllbnRZLFxuICAgICAgZWRnZXM6IHRoaXMucmVzaXplRWRnZXMsXG4gICAgICBldmVudFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIE9iamVjdC5rZXlzKHRoaXMuZXZlbnRMaXN0ZW5lcnMpLmZvckVhY2godHlwZSA9PiB7XG4gICAgICAodGhpcyBhcyBhbnkpLmV2ZW50TGlzdGVuZXJzW3R5cGVdKCk7XG4gICAgICBkZWxldGUgdGhpcy5ldmVudExpc3RlbmVyc1t0eXBlXTtcbiAgICB9KTtcbiAgfVxufVxuIl19 \ No newline at end of file diff --git a/dist/fesm2015/angular-resizable-element.js b/dist/fesm2015/angular-resizable-element.js new file mode 100644 index 0000000..dd8e74d --- /dev/null +++ b/dist/fesm2015/angular-resizable-element.js @@ -0,0 +1,901 @@ +import { isPlatformBrowser } from '@angular/common'; +import { Subject, Observable, merge, EMPTY } from 'rxjs'; +import { map, mergeMap, takeUntil, filter, pairwise, take, share, auditTime, switchMap, startWith } from 'rxjs/operators'; +import { Directive, Renderer2, ElementRef, Output, Input, EventEmitter, NgZone, Inject, PLATFORM_ID, HostListener, NgModule } from '@angular/core'; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @param {?} value1 + * @param {?} value2 + * @param {?=} precision + * @return {?} + */ +function isNumberCloseTo(value1, value2, precision = 3) { + /** @type {?} */ + const diff = Math.abs(value1 - value2); + return diff < precision; +} +/** + * @param {?} startingRect + * @param {?} edges + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ +function getNewBoundingRectangle(startingRect, edges, clientX, clientY) { + /** @type {?} */ + const newBoundingRect = { + top: startingRect.top, + bottom: startingRect.bottom, + left: startingRect.left, + right: startingRect.right + }; + if (edges.top) { + newBoundingRect.top += clientY; + } + if (edges.bottom) { + newBoundingRect.bottom += clientY; + } + if (edges.left) { + newBoundingRect.left += clientX; + } + if (edges.right) { + newBoundingRect.right += clientX; + } + newBoundingRect.height = newBoundingRect.bottom - newBoundingRect.top; + newBoundingRect.width = newBoundingRect.right - newBoundingRect.left; + return newBoundingRect; +} +/** + * @param {?} element + * @param {?} ghostElementPositioning + * @return {?} + */ +function getElementRect(element, ghostElementPositioning) { + /** @type {?} */ + let translateX = 0; + /** @type {?} */ + let translateY = 0; + /** @type {?} */ + const style = element.nativeElement.style; + /** @type {?} */ + const transformProperties = [ + 'transform', + '-ms-transform', + '-moz-transform', + '-o-transform' + ]; + /** @type {?} */ + const transform = transformProperties + .map(property => style[property]) + .find(value => !!value); + if (transform && transform.includes('translate3d')) { + translateX = transform.replace(/.*translate3d\((.*)px, (.*)px, (.*)px\).*/, '$1'); + translateY = transform.replace(/.*translate3d\((.*)px, (.*)px, (.*)px\).*/, '$2'); + } + else if (transform && transform.includes('translate')) { + translateX = transform.replace(/.*translate\((.*)px, (.*)px\).*/, '$1'); + translateY = transform.replace(/.*translate\((.*)px, (.*)px\).*/, '$2'); + } + if (ghostElementPositioning === 'absolute') { + return { + height: element.nativeElement.offsetHeight, + width: element.nativeElement.offsetWidth, + top: element.nativeElement.offsetTop - translateY, + bottom: element.nativeElement.offsetHeight + + element.nativeElement.offsetTop - + translateY, + left: element.nativeElement.offsetLeft - translateX, + right: element.nativeElement.offsetWidth + + element.nativeElement.offsetLeft - + translateX + }; + } + else { + /** @type {?} */ + const boundingRect = element.nativeElement.getBoundingClientRect(); + return { + height: boundingRect.height, + width: boundingRect.width, + top: boundingRect.top - translateY, + bottom: boundingRect.bottom - translateY, + left: boundingRect.left - translateX, + right: boundingRect.right - translateX, + scrollTop: element.nativeElement.scrollTop, + scrollLeft: element.nativeElement.scrollLeft + }; + } +} +/** + * @param {?} __0 + * @return {?} + */ +function isWithinBoundingY({ clientY, rect }) { + return clientY >= rect.top && clientY <= rect.bottom; +} +/** + * @param {?} __0 + * @return {?} + */ +function isWithinBoundingX({ clientX, rect }) { + return clientX >= rect.left && clientX <= rect.right; +} +/** + * @param {?} __0 + * @return {?} + */ +function getResizeEdges({ clientX, clientY, elm, allowedEdges, cursorPrecision }) { + /** @type {?} */ + const elmPosition = elm.nativeElement.getBoundingClientRect(); + /** @type {?} */ + const edges = {}; + if (allowedEdges.left && + isNumberCloseTo(clientX, elmPosition.left, cursorPrecision) && + isWithinBoundingY({ clientY, rect: elmPosition })) { + edges.left = true; + } + if (allowedEdges.right && + isNumberCloseTo(clientX, elmPosition.right, cursorPrecision) && + isWithinBoundingY({ clientY, rect: elmPosition })) { + edges.right = true; + } + if (allowedEdges.top && + isNumberCloseTo(clientY, elmPosition.top, cursorPrecision) && + isWithinBoundingX({ clientX, rect: elmPosition })) { + edges.top = true; + } + if (allowedEdges.bottom && + isNumberCloseTo(clientY, elmPosition.bottom, cursorPrecision) && + isWithinBoundingX({ clientX, rect: elmPosition })) { + edges.bottom = true; + } + return edges; +} +/** @type {?} */ +const DEFAULT_RESIZE_CURSORS = Object.freeze({ + topLeft: 'nw-resize', + topRight: 'ne-resize', + bottomLeft: 'sw-resize', + bottomRight: 'se-resize', + leftOrRight: 'col-resize', + topOrBottom: 'row-resize' +}); +/** + * @param {?} edges + * @param {?} cursors + * @return {?} + */ +function getResizeCursor(edges, cursors) { + if (edges.left && edges.top) { + return cursors.topLeft; + } + else if (edges.right && edges.top) { + return cursors.topRight; + } + else if (edges.left && edges.bottom) { + return cursors.bottomLeft; + } + else if (edges.right && edges.bottom) { + return cursors.bottomRight; + } + else if (edges.left || edges.right) { + return cursors.leftOrRight; + } + else if (edges.top || edges.bottom) { + return cursors.topOrBottom; + } + else { + return ''; + } +} +/** + * @param {?} __0 + * @return {?} + */ +function getEdgesDiff({ edges, initialRectangle, newRectangle }) { + /** @type {?} */ + const edgesDiff = {}; + Object.keys(edges).forEach(edge => { + edgesDiff[edge] = (newRectangle[edge] || 0) - (initialRectangle[edge] || 0); + }); + return edgesDiff; +} +/** @type {?} */ +const RESIZE_ACTIVE_CLASS = 'resize-active'; +/** @type {?} */ +const RESIZE_LEFT_HOVER_CLASS = 'resize-left-hover'; +/** @type {?} */ +const RESIZE_RIGHT_HOVER_CLASS = 'resize-right-hover'; +/** @type {?} */ +const RESIZE_TOP_HOVER_CLASS = 'resize-top-hover'; +/** @type {?} */ +const RESIZE_BOTTOM_HOVER_CLASS = 'resize-bottom-hover'; +/** @type {?} */ +const RESIZE_GHOST_ELEMENT_CLASS = 'resize-ghost-element'; +/** @type {?} */ +const MOUSE_MOVE_THROTTLE_MS = 50; +/** + * Place this on an element to make it resizable. For example: + * + * ```html + *
+ *
+ * ``` + */ +class ResizableDirective { + /** + * @hidden + * @param {?} platformId + * @param {?} renderer + * @param {?} elm + * @param {?} zone + */ + constructor(platformId, renderer, elm, zone) { + this.platformId = platformId; + this.renderer = renderer; + this.elm = elm; + this.zone = zone; + /** + * The edges that an element can be resized from. Pass an object like `{top: true, bottom: false}`. By default no edges can be resized. + * @deprecated use a resize handle instead that positions itself to the side of the element you would like to resize + */ + this.resizeEdges = {}; + /** + * Set to `true` to enable a temporary resizing effect of the element in between the `resizeStart` and `resizeEnd` events. + */ + this.enableGhostResize = false; + /** + * A snap grid that resize events will be locked to. + * + * e.g. to only allow the element to be resized every 10px set it to `{left: 10, right: 10}` + */ + this.resizeSnapGrid = {}; + /** + * The mouse cursors that will be set on the resize edges + */ + this.resizeCursors = DEFAULT_RESIZE_CURSORS; + /** + * Mouse over thickness to active cursor. + * @deprecated invalid when you migrate to use resize handles instead of setting resizeEdges on the element + */ + this.resizeCursorPrecision = 3; + /** + * Define the positioning of the ghost element (can be fixed or absolute) + */ + this.ghostElementPositioning = 'fixed'; + /** + * Allow elements to be resized to negative dimensions + */ + this.allowNegativeResizes = false; + /** + * Called when the mouse is pressed and a resize event is about to begin. `$event` is a `ResizeEvent` object. + */ + this.resizeStart = new EventEmitter(); + /** + * Called as the mouse is dragged after a resize event has begun. `$event` is a `ResizeEvent` object. + */ + this.resizing = new EventEmitter(); + /** + * Called after the mouse is released after a resize event. `$event` is a `ResizeEvent` object. + */ + this.resizeEnd = new EventEmitter(); + /** + * @hidden + */ + this.mouseup = new Subject(); + /** + * @hidden + */ + this.mousedown = new Subject(); + /** + * @hidden + */ + this.mousemove = new Subject(); + this.destroy$ = new Subject(); + this.resizeEdges$ = new Subject(); + this.pointerEventListeners = PointerEventListeners.getInstance(renderer, zone); + } + /** + * @hidden + * @return {?} + */ + ngOnInit() { + // TODO - use some fancy Observable.merge's for this + this.pointerEventListeners.pointerDown + .pipe(takeUntil(this.destroy$)) + .subscribe(({ clientX, clientY }) => { + this.mousedown.next({ clientX, clientY }); + }); + this.pointerEventListeners.pointerMove + .pipe(takeUntil(this.destroy$)) + .subscribe(({ clientX, clientY, event }) => { + this.mousemove.next({ clientX, clientY, event }); + }); + this.pointerEventListeners.pointerUp + .pipe(takeUntil(this.destroy$)) + .subscribe(({ clientX, clientY }) => { + this.mouseup.next({ clientX, clientY }); + }); + /** @type {?} */ + let currentResize; + /** @type {?} */ + const removeGhostElement = () => { + if (currentResize && currentResize.clonedNode) { + this.elm.nativeElement.parentElement.removeChild(currentResize.clonedNode); + this.renderer.setStyle(this.elm.nativeElement, 'visibility', 'inherit'); + } + }; + /** @type {?} */ + const getResizeCursors = () => { + return Object.assign({}, DEFAULT_RESIZE_CURSORS, this.resizeCursors); + }; + /** @type {?} */ + const mouseMove = this.mousemove.pipe(share()); + mouseMove.pipe(filter(() => !!currentResize)).subscribe(({ event }) => { + event.preventDefault(); + }); + this.resizeEdges$ + .pipe(startWith(this.resizeEdges), map(() => { + return (this.resizeEdges && + Object.keys(this.resizeEdges).some(edge => !!this.resizeEdges[edge])); + }), switchMap(legacyResizeEdgesEnabled => legacyResizeEdgesEnabled ? mouseMove : EMPTY), auditTime(MOUSE_MOVE_THROTTLE_MS)) + .subscribe(({ clientX, clientY }) => { + /** @type {?} */ + const resizeEdges = getResizeEdges({ + clientX, + clientY, + elm: this.elm, + allowedEdges: this.resizeEdges, + cursorPrecision: this.resizeCursorPrecision + }); + /** @type {?} */ + const resizeCursors = getResizeCursors(); + if (!currentResize) { + /** @type {?} */ + const cursor = getResizeCursor(resizeEdges, resizeCursors); + this.renderer.setStyle(this.elm.nativeElement, 'cursor', cursor); + } + this.setElementClass(this.elm, RESIZE_LEFT_HOVER_CLASS, resizeEdges.left === true); + this.setElementClass(this.elm, RESIZE_RIGHT_HOVER_CLASS, resizeEdges.right === true); + this.setElementClass(this.elm, RESIZE_TOP_HOVER_CLASS, resizeEdges.top === true); + this.setElementClass(this.elm, RESIZE_BOTTOM_HOVER_CLASS, resizeEdges.bottom === true); + }); + /** @type {?} */ + const mousedrag = this.mousedown + .pipe(mergeMap(startCoords => { + /** + * @param {?} moveCoords + * @return {?} + */ + function getDiff(moveCoords) { + return { + clientX: moveCoords.clientX - startCoords.clientX, + clientY: moveCoords.clientY - startCoords.clientY + }; + } + /** @type {?} */ + const getSnapGrid = () => { + /** @type {?} */ + const snapGrid = { x: 1, y: 1 }; + if (currentResize) { + if (this.resizeSnapGrid.left && currentResize.edges.left) { + snapGrid.x = +this.resizeSnapGrid.left; + } + else if (this.resizeSnapGrid.right && + currentResize.edges.right) { + snapGrid.x = +this.resizeSnapGrid.right; + } + if (this.resizeSnapGrid.top && currentResize.edges.top) { + snapGrid.y = +this.resizeSnapGrid.top; + } + else if (this.resizeSnapGrid.bottom && + currentResize.edges.bottom) { + snapGrid.y = +this.resizeSnapGrid.bottom; + } + } + return snapGrid; + }; + /** + * @param {?} coords + * @param {?} snapGrid + * @return {?} + */ + function getGrid(coords, snapGrid) { + return { + x: Math.ceil(coords.clientX / snapGrid.x), + y: Math.ceil(coords.clientY / snapGrid.y) + }; + } + return merge(mouseMove.pipe(take(1)).pipe(map(coords => [coords])), mouseMove.pipe(pairwise())) + .pipe(map(([previousCoords, newCoords]) => { + return [ + previousCoords ? getDiff(previousCoords) : previousCoords, + getDiff(newCoords) + ]; + })) + .pipe(filter(([previousCoords, newCoords]) => { + if (!previousCoords) { + return true; + } + /** @type {?} */ + const snapGrid = getSnapGrid(); + /** @type {?} */ + const previousGrid = getGrid(previousCoords, snapGrid); + /** @type {?} */ + const newGrid = getGrid(newCoords, snapGrid); + return (previousGrid.x !== newGrid.x || previousGrid.y !== newGrid.y); + })) + .pipe(map(([, newCoords]) => { + /** @type {?} */ + const snapGrid = getSnapGrid(); + return { + clientX: Math.round(newCoords.clientX / snapGrid.x) * snapGrid.x, + clientY: Math.round(newCoords.clientY / snapGrid.y) * snapGrid.y + }; + })) + .pipe(takeUntil(merge(this.mouseup, this.mousedown))); + })) + .pipe(filter(() => !!currentResize)); + mousedrag + .pipe(map(({ clientX, clientY }) => { + return getNewBoundingRectangle((/** @type {?} */ (currentResize)).startingRect, (/** @type {?} */ (currentResize)).edges, clientX, clientY); + })) + .pipe(filter((newBoundingRect) => { + return (this.allowNegativeResizes || + !!(newBoundingRect.height && + newBoundingRect.width && + newBoundingRect.height > 0 && + newBoundingRect.width > 0)); + })) + .pipe(filter((newBoundingRect) => { + return this.validateResize + ? this.validateResize({ + rectangle: newBoundingRect, + edges: getEdgesDiff({ + edges: (/** @type {?} */ (currentResize)).edges, + initialRectangle: (/** @type {?} */ (currentResize)).startingRect, + newRectangle: newBoundingRect + }) + }) + : true; + })) + .subscribe((newBoundingRect) => { + if (currentResize && currentResize.clonedNode) { + this.renderer.setStyle(currentResize.clonedNode, 'height', `${newBoundingRect.height}px`); + this.renderer.setStyle(currentResize.clonedNode, 'width', `${newBoundingRect.width}px`); + this.renderer.setStyle(currentResize.clonedNode, 'top', `${newBoundingRect.top}px`); + this.renderer.setStyle(currentResize.clonedNode, 'left', `${newBoundingRect.left}px`); + } + this.zone.run(() => { + this.resizing.emit({ + edges: getEdgesDiff({ + edges: (/** @type {?} */ (currentResize)).edges, + initialRectangle: (/** @type {?} */ (currentResize)).startingRect, + newRectangle: newBoundingRect + }), + rectangle: newBoundingRect + }); + }); + (/** @type {?} */ (currentResize)).currentRect = newBoundingRect; + }); + this.mousedown + .pipe(map(({ clientX, clientY, edges }) => { + return (edges || + getResizeEdges({ + clientX, + clientY, + elm: this.elm, + allowedEdges: this.resizeEdges, + cursorPrecision: this.resizeCursorPrecision + })); + })) + .pipe(filter((edges) => { + return Object.keys(edges).length > 0; + })) + .subscribe((edges) => { + if (currentResize) { + removeGhostElement(); + } + /** @type {?} */ + const startingRect = getElementRect(this.elm, this.ghostElementPositioning); + currentResize = { + edges, + startingRect, + currentRect: startingRect + }; + /** @type {?} */ + const resizeCursors = getResizeCursors(); + /** @type {?} */ + const cursor = getResizeCursor(currentResize.edges, resizeCursors); + this.renderer.setStyle(document.body, 'cursor', cursor); + this.setElementClass(this.elm, RESIZE_ACTIVE_CLASS, true); + if (this.enableGhostResize) { + currentResize.clonedNode = this.elm.nativeElement.cloneNode(true); + this.elm.nativeElement.parentElement.appendChild(currentResize.clonedNode); + this.renderer.setStyle(this.elm.nativeElement, 'visibility', 'hidden'); + this.renderer.setStyle(currentResize.clonedNode, 'position', this.ghostElementPositioning); + this.renderer.setStyle(currentResize.clonedNode, 'left', `${currentResize.startingRect.left}px`); + this.renderer.setStyle(currentResize.clonedNode, 'top', `${currentResize.startingRect.top}px`); + this.renderer.setStyle(currentResize.clonedNode, 'height', `${currentResize.startingRect.height}px`); + this.renderer.setStyle(currentResize.clonedNode, 'width', `${currentResize.startingRect.width}px`); + this.renderer.setStyle(currentResize.clonedNode, 'cursor', getResizeCursor(currentResize.edges, resizeCursors)); + this.renderer.addClass(currentResize.clonedNode, RESIZE_GHOST_ELEMENT_CLASS); + (/** @type {?} */ (currentResize.clonedNode)).scrollTop = (/** @type {?} */ (currentResize.startingRect + .scrollTop)); + (/** @type {?} */ (currentResize.clonedNode)).scrollLeft = (/** @type {?} */ (currentResize.startingRect + .scrollLeft)); + } + this.zone.run(() => { + this.resizeStart.emit({ + edges: getEdgesDiff({ + edges, + initialRectangle: startingRect, + newRectangle: startingRect + }), + rectangle: getNewBoundingRectangle(startingRect, {}, 0, 0) + }); + }); + }); + this.mouseup.subscribe(() => { + if (currentResize) { + this.renderer.removeClass(this.elm.nativeElement, RESIZE_ACTIVE_CLASS); + this.renderer.setStyle(document.body, 'cursor', ''); + this.renderer.setStyle(this.elm.nativeElement, 'cursor', ''); + this.zone.run(() => { + this.resizeEnd.emit({ + edges: getEdgesDiff({ + edges: (/** @type {?} */ (currentResize)).edges, + initialRectangle: (/** @type {?} */ (currentResize)).startingRect, + newRectangle: (/** @type {?} */ (currentResize)).currentRect + }), + rectangle: (/** @type {?} */ (currentResize)).currentRect + }); + }); + removeGhostElement(); + currentResize = null; + } + }); + } + /** + * @hidden + * @param {?} changes + * @return {?} + */ + ngOnChanges(changes) { + if (changes.resizeEdges) { + this.resizeEdges$.next(this.resizeEdges); + } + } + /** + * @hidden + * @return {?} + */ + ngOnDestroy() { + // browser check for angular universal, because it doesn't know what document is + if (isPlatformBrowser(this.platformId)) { + this.renderer.setStyle(document.body, 'cursor', ''); + } + this.mousedown.complete(); + this.mouseup.complete(); + this.mousemove.complete(); + this.resizeEdges$.complete(); + this.destroy$.next(); + } + /** + * @private + * @param {?} elm + * @param {?} name + * @param {?} add + * @return {?} + */ + setElementClass(elm, name, add) { + if (add) { + this.renderer.addClass(elm.nativeElement, name); + } + else { + this.renderer.removeClass(elm.nativeElement, name); + } + } +} +ResizableDirective.decorators = [ + { type: Directive, args: [{ + selector: '[mwlResizable]' + },] } +]; +/** @nocollapse */ +ResizableDirective.ctorParameters = () => [ + { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }, + { type: Renderer2 }, + { type: ElementRef }, + { type: NgZone } +]; +ResizableDirective.propDecorators = { + validateResize: [{ type: Input }], + resizeEdges: [{ type: Input }], + enableGhostResize: [{ type: Input }], + resizeSnapGrid: [{ type: Input }], + resizeCursors: [{ type: Input }], + resizeCursorPrecision: [{ type: Input }], + ghostElementPositioning: [{ type: Input }], + allowNegativeResizes: [{ type: Input }], + resizeStart: [{ type: Output }], + resizing: [{ type: Output }], + resizeEnd: [{ type: Output }] +}; +class PointerEventListeners { + // tslint:disable-line + /** + * @param {?} renderer + * @param {?} zone + * @return {?} + */ + static getInstance(renderer, zone) { + if (!PointerEventListeners.instance) { + PointerEventListeners.instance = new PointerEventListeners(renderer, zone); + } + return PointerEventListeners.instance; + } + /** + * @param {?} renderer + * @param {?} zone + */ + constructor(renderer, zone) { + this.pointerDown = new Observable((observer) => { + /** @type {?} */ + let unsubscribeMouseDown; + /** @type {?} */ + let unsubscribeTouchStart; + zone.runOutsideAngular(() => { + unsubscribeMouseDown = renderer.listen('document', 'mousedown', (event) => { + observer.next({ + clientX: event.clientX, + clientY: event.clientY, + event + }); + }); + unsubscribeTouchStart = renderer.listen('document', 'touchstart', (event) => { + observer.next({ + clientX: event.touches[0].clientX, + clientY: event.touches[0].clientY, + event + }); + }); + }); + return () => { + unsubscribeMouseDown(); + unsubscribeTouchStart(); + }; + }).pipe(share()); + this.pointerMove = new Observable((observer) => { + /** @type {?} */ + let unsubscribeMouseMove; + /** @type {?} */ + let unsubscribeTouchMove; + zone.runOutsideAngular(() => { + unsubscribeMouseMove = renderer.listen('document', 'mousemove', (event) => { + observer.next({ + clientX: event.clientX, + clientY: event.clientY, + event + }); + }); + unsubscribeTouchMove = renderer.listen('document', 'touchmove', (event) => { + observer.next({ + clientX: event.targetTouches[0].clientX, + clientY: event.targetTouches[0].clientY, + event + }); + }); + }); + return () => { + unsubscribeMouseMove(); + unsubscribeTouchMove(); + }; + }).pipe(share()); + this.pointerUp = new Observable((observer) => { + /** @type {?} */ + let unsubscribeMouseUp; + /** @type {?} */ + let unsubscribeTouchEnd; + /** @type {?} */ + let unsubscribeTouchCancel; + zone.runOutsideAngular(() => { + unsubscribeMouseUp = renderer.listen('document', 'mouseup', (event) => { + observer.next({ + clientX: event.clientX, + clientY: event.clientY, + event + }); + }); + unsubscribeTouchEnd = renderer.listen('document', 'touchend', (event) => { + observer.next({ + clientX: event.changedTouches[0].clientX, + clientY: event.changedTouches[0].clientY, + event + }); + }); + unsubscribeTouchCancel = renderer.listen('document', 'touchcancel', (event) => { + observer.next({ + clientX: event.changedTouches[0].clientX, + clientY: event.changedTouches[0].clientY, + event + }); + }); + }); + return () => { + unsubscribeMouseUp(); + unsubscribeTouchEnd(); + unsubscribeTouchCancel(); + }; + }).pipe(share()); + } +} + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * An element placed inside a `mwlResizable` directive to be used as a drag and resize handle + * + * For example + * + * ```html + *
+ *
+ *
+ * ``` + */ +class ResizeHandleDirective { + /** + * @param {?} renderer + * @param {?} element + * @param {?} zone + * @param {?} resizable + */ + constructor(renderer, element, zone, resizable) { + this.renderer = renderer; + this.element = element; + this.zone = zone; + this.resizable = resizable; + /** + * The `Edges` object that contains the edges of the parent element that dragging the handle will trigger a resize on + */ + this.resizeEdges = {}; + this.eventListeners = {}; + } + /** + * @return {?} + */ + ngOnDestroy() { + this.unsubscribeEventListeners(); + } + /** + * @hidden + * @param {?} event + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + onMousedown(event, clientX, clientY) { + event.preventDefault(); + this.zone.runOutsideAngular(() => { + if (!this.eventListeners.touchmove) { + this.eventListeners.touchmove = this.renderer.listen(this.element.nativeElement, 'touchmove', (touchMoveEvent) => { + this.onMousemove(touchMoveEvent, touchMoveEvent.targetTouches[0].clientX, touchMoveEvent.targetTouches[0].clientY); + }); + } + if (!this.eventListeners.mousemove) { + this.eventListeners.mousemove = this.renderer.listen(this.element.nativeElement, 'mousemove', (mouseMoveEvent) => { + this.onMousemove(mouseMoveEvent, mouseMoveEvent.clientX, mouseMoveEvent.clientY); + }); + } + this.resizable.mousedown.next({ + clientX, + clientY, + edges: this.resizeEdges + }); + }); + } + /** + * @hidden + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + onMouseup(clientX, clientY) { + this.zone.runOutsideAngular(() => { + this.unsubscribeEventListeners(); + this.resizable.mouseup.next({ + clientX, + clientY, + edges: this.resizeEdges + }); + }); + } + /** + * @private + * @param {?} event + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + onMousemove(event, clientX, clientY) { + this.resizable.mousemove.next({ + clientX, + clientY, + edges: this.resizeEdges, + event + }); + } + /** + * @private + * @return {?} + */ + unsubscribeEventListeners() { + Object.keys(this.eventListeners).forEach(type => { + ((/** @type {?} */ (this))).eventListeners[type](); + delete this.eventListeners[type]; + }); + } +} +ResizeHandleDirective.decorators = [ + { type: Directive, args: [{ + selector: '[mwlResizeHandle]' + },] } +]; +/** @nocollapse */ +ResizeHandleDirective.ctorParameters = () => [ + { type: Renderer2 }, + { type: ElementRef }, + { type: NgZone }, + { type: ResizableDirective } +]; +ResizeHandleDirective.propDecorators = { + resizeEdges: [{ type: Input }], + onMousedown: [{ type: HostListener, args: ['touchstart', [ + '$event', + '$event.touches[0].clientX', + '$event.touches[0].clientY' + ],] }, { type: HostListener, args: ['mousedown', ['$event', '$event.clientX', '$event.clientY'],] }], + onMouseup: [{ type: HostListener, args: ['touchend', [ + '$event.changedTouches[0].clientX', + '$event.changedTouches[0].clientY' + ],] }, { type: HostListener, args: ['touchcancel', [ + '$event.changedTouches[0].clientX', + '$event.changedTouches[0].clientY' + ],] }, { type: HostListener, args: ['mouseup', ['$event.clientX', '$event.clientY'],] }] +}; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +class ResizableModule { +} +ResizableModule.decorators = [ + { type: NgModule, args: [{ + declarations: [ResizableDirective, ResizeHandleDirective], + exports: [ResizableDirective, ResizeHandleDirective] + },] } +]; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + +export { ResizableDirective, ResizeHandleDirective, ResizableModule }; + +//# sourceMappingURL=angular-resizable-element.js.map \ No newline at end of file diff --git a/dist/fesm2015/angular-resizable-element.js.map b/dist/fesm2015/angular-resizable-element.js.map new file mode 100644 index 0000000..30eb9e9 --- /dev/null +++ b/dist/fesm2015/angular-resizable-element.js.map @@ -0,0 +1 @@ +{"version":3,"file":"angular-resizable-element.js.map","sources":["ng://angular-resizable-element/resizable.directive.ts","ng://angular-resizable-element/resize-handle.directive.ts","ng://angular-resizable-element/resizable.module.ts"],"sourcesContent":["import {\n Directive,\n Renderer2,\n ElementRef,\n OnInit,\n Output,\n Input,\n EventEmitter,\n OnDestroy,\n NgZone,\n OnChanges,\n SimpleChanges,\n Inject,\n PLATFORM_ID\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Subject, Observable, Observer, merge, EMPTY } from 'rxjs';\nimport {\n map,\n mergeMap,\n takeUntil,\n filter,\n pairwise,\n take,\n share,\n auditTime,\n switchMap,\n startWith\n} from 'rxjs/operators';\nimport { Edges } from './interfaces/edges.interface';\nimport { BoundingRectangle } from './interfaces/bounding-rectangle.interface';\nimport { ResizeEvent } from './interfaces/resize-event.interface';\n\ninterface PointerEventCoordinate {\n clientX: number;\n clientY: number;\n event: MouseEvent | TouchEvent;\n}\n\ninterface Coordinate {\n x: number;\n y: number;\n}\n\nfunction isNumberCloseTo(\n value1: number,\n value2: number,\n precision: number = 3\n): boolean {\n const diff: number = Math.abs(value1 - value2);\n return diff < precision;\n}\n\nfunction getNewBoundingRectangle(\n startingRect: BoundingRectangle,\n edges: Edges,\n clientX: number,\n clientY: number\n): BoundingRectangle {\n const newBoundingRect: BoundingRectangle = {\n top: startingRect.top,\n bottom: startingRect.bottom,\n left: startingRect.left,\n right: startingRect.right\n };\n\n if (edges.top) {\n newBoundingRect.top += clientY;\n }\n if (edges.bottom) {\n newBoundingRect.bottom += clientY;\n }\n if (edges.left) {\n newBoundingRect.left += clientX;\n }\n if (edges.right) {\n newBoundingRect.right += clientX;\n }\n newBoundingRect.height = newBoundingRect.bottom - newBoundingRect.top;\n newBoundingRect.width = newBoundingRect.right - newBoundingRect.left;\n\n return newBoundingRect;\n}\n\nfunction getElementRect(\n element: ElementRef,\n ghostElementPositioning: string\n): BoundingRectangle {\n let translateX = 0;\n let translateY = 0;\n const style = element.nativeElement.style;\n const transformProperties = [\n 'transform',\n '-ms-transform',\n '-moz-transform',\n '-o-transform'\n ];\n const transform = transformProperties\n .map(property => style[property])\n .find(value => !!value);\n if (transform && transform.includes('translate3d')) {\n translateX = transform.replace(\n /.*translate3d\\((.*)px, (.*)px, (.*)px\\).*/,\n '$1'\n );\n translateY = transform.replace(\n /.*translate3d\\((.*)px, (.*)px, (.*)px\\).*/,\n '$2'\n );\n } else if (transform && transform.includes('translate')) {\n translateX = transform.replace(/.*translate\\((.*)px, (.*)px\\).*/, '$1');\n translateY = transform.replace(/.*translate\\((.*)px, (.*)px\\).*/, '$2');\n }\n\n if (ghostElementPositioning === 'absolute') {\n return {\n height: element.nativeElement.offsetHeight,\n width: element.nativeElement.offsetWidth,\n top: element.nativeElement.offsetTop - translateY,\n bottom:\n element.nativeElement.offsetHeight +\n element.nativeElement.offsetTop -\n translateY,\n left: element.nativeElement.offsetLeft - translateX,\n right:\n element.nativeElement.offsetWidth +\n element.nativeElement.offsetLeft -\n translateX\n };\n } else {\n const boundingRect: BoundingRectangle = element.nativeElement.getBoundingClientRect();\n return {\n height: boundingRect.height,\n width: boundingRect.width,\n top: boundingRect.top - translateY,\n bottom: boundingRect.bottom - translateY,\n left: boundingRect.left - translateX,\n right: boundingRect.right - translateX,\n scrollTop: element.nativeElement.scrollTop,\n scrollLeft: element.nativeElement.scrollLeft\n };\n }\n}\n\nfunction isWithinBoundingY({\n clientY,\n rect\n}: {\n clientY: number;\n rect: ClientRect;\n}): boolean {\n return clientY >= rect.top && clientY <= rect.bottom;\n}\n\nfunction isWithinBoundingX({\n clientX,\n rect\n}: {\n clientX: number;\n rect: ClientRect;\n}): boolean {\n return clientX >= rect.left && clientX <= rect.right;\n}\n\nfunction getResizeEdges({\n clientX,\n clientY,\n elm,\n allowedEdges,\n cursorPrecision\n}: {\n clientX: number;\n clientY: number;\n elm: ElementRef;\n allowedEdges: Edges;\n cursorPrecision: number;\n}): Edges {\n const elmPosition: ClientRect = elm.nativeElement.getBoundingClientRect();\n const edges: Edges = {};\n\n if (\n allowedEdges.left &&\n isNumberCloseTo(clientX, elmPosition.left, cursorPrecision) &&\n isWithinBoundingY({ clientY, rect: elmPosition })\n ) {\n edges.left = true;\n }\n\n if (\n allowedEdges.right &&\n isNumberCloseTo(clientX, elmPosition.right, cursorPrecision) &&\n isWithinBoundingY({ clientY, rect: elmPosition })\n ) {\n edges.right = true;\n }\n\n if (\n allowedEdges.top &&\n isNumberCloseTo(clientY, elmPosition.top, cursorPrecision) &&\n isWithinBoundingX({ clientX, rect: elmPosition })\n ) {\n edges.top = true;\n }\n\n if (\n allowedEdges.bottom &&\n isNumberCloseTo(clientY, elmPosition.bottom, cursorPrecision) &&\n isWithinBoundingX({ clientX, rect: elmPosition })\n ) {\n edges.bottom = true;\n }\n\n return edges;\n}\n\nexport interface ResizeCursors {\n topLeft: string;\n topRight: string;\n bottomLeft: string;\n bottomRight: string;\n leftOrRight: string;\n topOrBottom: string;\n}\n\nconst DEFAULT_RESIZE_CURSORS: ResizeCursors = Object.freeze({\n topLeft: 'nw-resize',\n topRight: 'ne-resize',\n bottomLeft: 'sw-resize',\n bottomRight: 'se-resize',\n leftOrRight: 'col-resize',\n topOrBottom: 'row-resize'\n});\n\nfunction getResizeCursor(edges: Edges, cursors: ResizeCursors): string {\n if (edges.left && edges.top) {\n return cursors.topLeft;\n } else if (edges.right && edges.top) {\n return cursors.topRight;\n } else if (edges.left && edges.bottom) {\n return cursors.bottomLeft;\n } else if (edges.right && edges.bottom) {\n return cursors.bottomRight;\n } else if (edges.left || edges.right) {\n return cursors.leftOrRight;\n } else if (edges.top || edges.bottom) {\n return cursors.topOrBottom;\n } else {\n return '';\n }\n}\n\nfunction getEdgesDiff({\n edges,\n initialRectangle,\n newRectangle\n}: {\n edges: Edges;\n initialRectangle: BoundingRectangle;\n newRectangle: BoundingRectangle;\n}): Edges {\n const edgesDiff: Edges = {};\n Object.keys(edges).forEach(edge => {\n edgesDiff[edge] = (newRectangle[edge] || 0) - (initialRectangle[edge] || 0);\n });\n return edgesDiff;\n}\n\nconst RESIZE_ACTIVE_CLASS: string = 'resize-active';\nconst RESIZE_LEFT_HOVER_CLASS: string = 'resize-left-hover';\nconst RESIZE_RIGHT_HOVER_CLASS: string = 'resize-right-hover';\nconst RESIZE_TOP_HOVER_CLASS: string = 'resize-top-hover';\nconst RESIZE_BOTTOM_HOVER_CLASS: string = 'resize-bottom-hover';\nconst RESIZE_GHOST_ELEMENT_CLASS: string = 'resize-ghost-element';\n\nexport const MOUSE_MOVE_THROTTLE_MS: number = 50;\n\n/**\n * Place this on an element to make it resizable. For example:\n *\n * ```html\n * \n * \n * ```\n */\n@Directive({\n selector: '[mwlResizable]'\n})\nexport class ResizableDirective implements OnInit, OnChanges, OnDestroy {\n /**\n * A function that will be called before each resize event. Return `true` to allow the resize event to propagate or `false` to cancel it\n */\n @Input() validateResize: (resizeEvent: ResizeEvent) => boolean;\n\n /**\n * The edges that an element can be resized from. Pass an object like `{top: true, bottom: false}`. By default no edges can be resized.\n * @deprecated use a resize handle instead that positions itself to the side of the element you would like to resize\n */\n @Input() resizeEdges: Edges = {};\n\n /**\n * Set to `true` to enable a temporary resizing effect of the element in between the `resizeStart` and `resizeEnd` events.\n */\n @Input() enableGhostResize: boolean = false;\n\n /**\n * A snap grid that resize events will be locked to.\n *\n * e.g. to only allow the element to be resized every 10px set it to `{left: 10, right: 10}`\n */\n @Input() resizeSnapGrid: Edges = {};\n\n /**\n * The mouse cursors that will be set on the resize edges\n */\n @Input() resizeCursors: ResizeCursors = DEFAULT_RESIZE_CURSORS;\n\n /**\n * Mouse over thickness to active cursor.\n * @deprecated invalid when you migrate to use resize handles instead of setting resizeEdges on the element\n */\n @Input() resizeCursorPrecision: number = 3;\n\n /**\n * Define the positioning of the ghost element (can be fixed or absolute)\n */\n @Input() ghostElementPositioning: 'fixed' | 'absolute' = 'fixed';\n\n /**\n * Allow elements to be resized to negative dimensions\n */\n @Input() allowNegativeResizes: boolean = false;\n\n /**\n * Called when the mouse is pressed and a resize event is about to begin. `$event` is a `ResizeEvent` object.\n */\n @Output() resizeStart = new EventEmitter();\n\n /**\n * Called as the mouse is dragged after a resize event has begun. `$event` is a `ResizeEvent` object.\n */\n @Output() resizing = new EventEmitter();\n\n /**\n * Called after the mouse is released after a resize event. `$event` is a `ResizeEvent` object.\n */\n @Output() resizeEnd = new EventEmitter();\n\n /**\n * @hidden\n */\n public mouseup = new Subject<{\n clientX: number;\n clientY: number;\n edges?: Edges;\n }>();\n\n /**\n * @hidden\n */\n public mousedown = new Subject<{\n clientX: number;\n clientY: number;\n edges?: Edges;\n }>();\n\n /**\n * @hidden\n */\n public mousemove = new Subject<{\n clientX: number;\n clientY: number;\n edges?: Edges;\n event: MouseEvent | TouchEvent;\n }>();\n\n private pointerEventListeners: PointerEventListeners;\n\n private destroy$ = new Subject();\n\n private resizeEdges$ = new Subject();\n\n /**\n * @hidden\n */\n constructor(\n @Inject(PLATFORM_ID) private platformId: any,\n private renderer: Renderer2,\n public elm: ElementRef,\n private zone: NgZone\n ) {\n this.pointerEventListeners = PointerEventListeners.getInstance(\n renderer,\n zone\n );\n }\n\n /**\n * @hidden\n */\n ngOnInit(): void {\n // TODO - use some fancy Observable.merge's for this\n this.pointerEventListeners.pointerDown\n .pipe(takeUntil(this.destroy$))\n .subscribe(({ clientX, clientY }) => {\n this.mousedown.next({ clientX, clientY });\n });\n\n this.pointerEventListeners.pointerMove\n .pipe(takeUntil(this.destroy$))\n .subscribe(({ clientX, clientY, event }) => {\n this.mousemove.next({ clientX, clientY, event });\n });\n\n this.pointerEventListeners.pointerUp\n .pipe(takeUntil(this.destroy$))\n .subscribe(({ clientX, clientY }) => {\n this.mouseup.next({ clientX, clientY });\n });\n\n let currentResize: {\n edges: Edges;\n startingRect: BoundingRectangle;\n currentRect: BoundingRectangle;\n clonedNode?: HTMLElement;\n } | null;\n\n const removeGhostElement = () => {\n if (currentResize && currentResize.clonedNode) {\n this.elm.nativeElement.parentElement.removeChild(\n currentResize.clonedNode\n );\n this.renderer.setStyle(this.elm.nativeElement, 'visibility', 'inherit');\n }\n };\n\n const getResizeCursors = (): ResizeCursors => {\n return {\n ...DEFAULT_RESIZE_CURSORS,\n ...this.resizeCursors\n };\n };\n\n const mouseMove: Observable = this.mousemove.pipe(share());\n\n mouseMove.pipe(filter(() => !!currentResize)).subscribe(({ event }) => {\n event.preventDefault();\n });\n\n this.resizeEdges$\n .pipe(\n startWith(this.resizeEdges),\n map(() => {\n return (\n this.resizeEdges &&\n Object.keys(this.resizeEdges).some(edge => !!this.resizeEdges[edge])\n );\n }),\n switchMap(legacyResizeEdgesEnabled =>\n legacyResizeEdgesEnabled ? mouseMove : EMPTY\n ),\n auditTime(MOUSE_MOVE_THROTTLE_MS)\n )\n .subscribe(({ clientX, clientY }) => {\n const resizeEdges: Edges = getResizeEdges({\n clientX,\n clientY,\n elm: this.elm,\n allowedEdges: this.resizeEdges,\n cursorPrecision: this.resizeCursorPrecision\n });\n const resizeCursors = getResizeCursors();\n if (!currentResize) {\n const cursor = getResizeCursor(resizeEdges, resizeCursors);\n this.renderer.setStyle(this.elm.nativeElement, 'cursor', cursor);\n }\n this.setElementClass(\n this.elm,\n RESIZE_LEFT_HOVER_CLASS,\n resizeEdges.left === true\n );\n this.setElementClass(\n this.elm,\n RESIZE_RIGHT_HOVER_CLASS,\n resizeEdges.right === true\n );\n this.setElementClass(\n this.elm,\n RESIZE_TOP_HOVER_CLASS,\n resizeEdges.top === true\n );\n this.setElementClass(\n this.elm,\n RESIZE_BOTTOM_HOVER_CLASS,\n resizeEdges.bottom === true\n );\n });\n\n const mousedrag: Observable = this.mousedown\n .pipe(\n mergeMap(startCoords => {\n function getDiff(moveCoords: { clientX: number; clientY: number }) {\n return {\n clientX: moveCoords.clientX - startCoords.clientX,\n clientY: moveCoords.clientY - startCoords.clientY\n };\n }\n\n const getSnapGrid = () => {\n const snapGrid: Coordinate = { x: 1, y: 1 };\n\n if (currentResize) {\n if (this.resizeSnapGrid.left && currentResize.edges.left) {\n snapGrid.x = +this.resizeSnapGrid.left;\n } else if (\n this.resizeSnapGrid.right &&\n currentResize.edges.right\n ) {\n snapGrid.x = +this.resizeSnapGrid.right;\n }\n\n if (this.resizeSnapGrid.top && currentResize.edges.top) {\n snapGrid.y = +this.resizeSnapGrid.top;\n } else if (\n this.resizeSnapGrid.bottom &&\n currentResize.edges.bottom\n ) {\n snapGrid.y = +this.resizeSnapGrid.bottom;\n }\n }\n\n return snapGrid;\n };\n\n function getGrid(\n coords: { clientX: number; clientY: number },\n snapGrid: Coordinate\n ) {\n return {\n x: Math.ceil(coords.clientX / snapGrid.x),\n y: Math.ceil(coords.clientY / snapGrid.y)\n };\n }\n\n return merge(\n mouseMove.pipe(take(1)).pipe(map(coords => [coords])),\n mouseMove.pipe(pairwise())\n )\n .pipe(\n map(([previousCoords, newCoords]) => {\n return [\n previousCoords ? getDiff(previousCoords) : previousCoords,\n getDiff(newCoords)\n ];\n })\n )\n .pipe(\n filter(([previousCoords, newCoords]) => {\n if (!previousCoords) {\n return true;\n }\n\n const snapGrid: Coordinate = getSnapGrid();\n const previousGrid: Coordinate = getGrid(\n previousCoords,\n snapGrid\n );\n const newGrid: Coordinate = getGrid(newCoords, snapGrid);\n\n return (\n previousGrid.x !== newGrid.x || previousGrid.y !== newGrid.y\n );\n })\n )\n .pipe(\n map(([, newCoords]) => {\n const snapGrid: Coordinate = getSnapGrid();\n return {\n clientX:\n Math.round(newCoords.clientX / snapGrid.x) * snapGrid.x,\n clientY:\n Math.round(newCoords.clientY / snapGrid.y) * snapGrid.y\n };\n })\n )\n .pipe(takeUntil(merge(this.mouseup, this.mousedown)));\n })\n )\n .pipe(filter(() => !!currentResize));\n\n mousedrag\n .pipe(\n map(({ clientX, clientY }) => {\n return getNewBoundingRectangle(\n currentResize!.startingRect,\n currentResize!.edges,\n clientX,\n clientY\n );\n })\n )\n .pipe(\n filter((newBoundingRect: BoundingRectangle) => {\n return (\n this.allowNegativeResizes ||\n !!(\n newBoundingRect.height &&\n newBoundingRect.width &&\n newBoundingRect.height > 0 &&\n newBoundingRect.width > 0\n )\n );\n })\n )\n .pipe(\n filter((newBoundingRect: BoundingRectangle) => {\n return this.validateResize\n ? this.validateResize({\n rectangle: newBoundingRect,\n edges: getEdgesDiff({\n edges: currentResize!.edges,\n initialRectangle: currentResize!.startingRect,\n newRectangle: newBoundingRect\n })\n })\n : true;\n })\n )\n .subscribe((newBoundingRect: BoundingRectangle) => {\n if (currentResize && currentResize.clonedNode) {\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'height',\n `${newBoundingRect.height}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'width',\n `${newBoundingRect.width}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'top',\n `${newBoundingRect.top}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'left',\n `${newBoundingRect.left}px`\n );\n }\n\n this.zone.run(() => {\n this.resizing.emit({\n edges: getEdgesDiff({\n edges: currentResize!.edges,\n initialRectangle: currentResize!.startingRect,\n newRectangle: newBoundingRect\n }),\n rectangle: newBoundingRect\n });\n });\n\n currentResize!.currentRect = newBoundingRect;\n });\n\n this.mousedown\n .pipe(\n map(({ clientX, clientY, edges }) => {\n return (\n edges ||\n getResizeEdges({\n clientX,\n clientY,\n elm: this.elm,\n allowedEdges: this.resizeEdges,\n cursorPrecision: this.resizeCursorPrecision\n })\n );\n })\n )\n .pipe(\n filter((edges: Edges) => {\n return Object.keys(edges).length > 0;\n })\n )\n .subscribe((edges: Edges) => {\n if (currentResize) {\n removeGhostElement();\n }\n const startingRect: BoundingRectangle = getElementRect(\n this.elm,\n this.ghostElementPositioning\n );\n currentResize = {\n edges,\n startingRect,\n currentRect: startingRect\n };\n const resizeCursors = getResizeCursors();\n const cursor = getResizeCursor(currentResize.edges, resizeCursors);\n this.renderer.setStyle(document.body, 'cursor', cursor);\n this.setElementClass(this.elm, RESIZE_ACTIVE_CLASS, true);\n if (this.enableGhostResize) {\n currentResize.clonedNode = this.elm.nativeElement.cloneNode(true);\n this.elm.nativeElement.parentElement.appendChild(\n currentResize.clonedNode\n );\n this.renderer.setStyle(\n this.elm.nativeElement,\n 'visibility',\n 'hidden'\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'position',\n this.ghostElementPositioning\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'left',\n `${currentResize.startingRect.left}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'top',\n `${currentResize.startingRect.top}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'height',\n `${currentResize.startingRect.height}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'width',\n `${currentResize.startingRect.width}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'cursor',\n getResizeCursor(currentResize.edges, resizeCursors)\n );\n this.renderer.addClass(\n currentResize.clonedNode,\n RESIZE_GHOST_ELEMENT_CLASS\n );\n currentResize.clonedNode!.scrollTop = currentResize.startingRect\n .scrollTop as number;\n currentResize.clonedNode!.scrollLeft = currentResize.startingRect\n .scrollLeft as number;\n }\n this.zone.run(() => {\n this.resizeStart.emit({\n edges: getEdgesDiff({\n edges,\n initialRectangle: startingRect,\n newRectangle: startingRect\n }),\n rectangle: getNewBoundingRectangle(startingRect, {}, 0, 0)\n });\n });\n });\n\n this.mouseup.subscribe(() => {\n if (currentResize) {\n this.renderer.removeClass(this.elm.nativeElement, RESIZE_ACTIVE_CLASS);\n this.renderer.setStyle(document.body, 'cursor', '');\n this.renderer.setStyle(this.elm.nativeElement, 'cursor', '');\n this.zone.run(() => {\n this.resizeEnd.emit({\n edges: getEdgesDiff({\n edges: currentResize!.edges,\n initialRectangle: currentResize!.startingRect,\n newRectangle: currentResize!.currentRect\n }),\n rectangle: currentResize!.currentRect\n });\n });\n removeGhostElement();\n currentResize = null;\n }\n });\n }\n\n /**\n * @hidden\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.resizeEdges) {\n this.resizeEdges$.next(this.resizeEdges);\n }\n }\n\n /**\n * @hidden\n */\n ngOnDestroy(): void {\n // browser check for angular universal, because it doesn't know what document is\n if (isPlatformBrowser(this.platformId)) {\n this.renderer.setStyle(document.body, 'cursor', '');\n }\n this.mousedown.complete();\n this.mouseup.complete();\n this.mousemove.complete();\n this.resizeEdges$.complete();\n this.destroy$.next();\n }\n\n private setElementClass(elm: ElementRef, name: string, add: boolean): void {\n if (add) {\n this.renderer.addClass(elm.nativeElement, name);\n } else {\n this.renderer.removeClass(elm.nativeElement, name);\n }\n }\n}\n\nclass PointerEventListeners {\n public pointerDown: Observable;\n\n public pointerMove: Observable;\n\n public pointerUp: Observable;\n\n private static instance: PointerEventListeners; // tslint:disable-line\n\n public static getInstance(\n renderer: Renderer2,\n zone: NgZone\n ): PointerEventListeners {\n if (!PointerEventListeners.instance) {\n PointerEventListeners.instance = new PointerEventListeners(\n renderer,\n zone\n );\n }\n return PointerEventListeners.instance;\n }\n\n constructor(renderer: Renderer2, zone: NgZone) {\n this.pointerDown = new Observable(\n (observer: Observer) => {\n let unsubscribeMouseDown: () => void;\n let unsubscribeTouchStart: () => void;\n\n zone.runOutsideAngular(() => {\n unsubscribeMouseDown = renderer.listen(\n 'document',\n 'mousedown',\n (event: MouseEvent) => {\n observer.next({\n clientX: event.clientX,\n clientY: event.clientY,\n event\n });\n }\n );\n\n unsubscribeTouchStart = renderer.listen(\n 'document',\n 'touchstart',\n (event: TouchEvent) => {\n observer.next({\n clientX: event.touches[0].clientX,\n clientY: event.touches[0].clientY,\n event\n });\n }\n );\n });\n\n return () => {\n unsubscribeMouseDown();\n unsubscribeTouchStart();\n };\n }\n ).pipe(share());\n\n this.pointerMove = new Observable(\n (observer: Observer) => {\n let unsubscribeMouseMove: () => void;\n let unsubscribeTouchMove: () => void;\n\n zone.runOutsideAngular(() => {\n unsubscribeMouseMove = renderer.listen(\n 'document',\n 'mousemove',\n (event: MouseEvent) => {\n observer.next({\n clientX: event.clientX,\n clientY: event.clientY,\n event\n });\n }\n );\n\n unsubscribeTouchMove = renderer.listen(\n 'document',\n 'touchmove',\n (event: TouchEvent) => {\n observer.next({\n clientX: event.targetTouches[0].clientX,\n clientY: event.targetTouches[0].clientY,\n event\n });\n }\n );\n });\n\n return () => {\n unsubscribeMouseMove();\n unsubscribeTouchMove();\n };\n }\n ).pipe(share());\n\n this.pointerUp = new Observable(\n (observer: Observer) => {\n let unsubscribeMouseUp: () => void;\n let unsubscribeTouchEnd: () => void;\n let unsubscribeTouchCancel: () => void;\n\n zone.runOutsideAngular(() => {\n unsubscribeMouseUp = renderer.listen(\n 'document',\n 'mouseup',\n (event: MouseEvent) => {\n observer.next({\n clientX: event.clientX,\n clientY: event.clientY,\n event\n });\n }\n );\n\n unsubscribeTouchEnd = renderer.listen(\n 'document',\n 'touchend',\n (event: TouchEvent) => {\n observer.next({\n clientX: event.changedTouches[0].clientX,\n clientY: event.changedTouches[0].clientY,\n event\n });\n }\n );\n\n unsubscribeTouchCancel = renderer.listen(\n 'document',\n 'touchcancel',\n (event: TouchEvent) => {\n observer.next({\n clientX: event.changedTouches[0].clientX,\n clientY: event.changedTouches[0].clientY,\n event\n });\n }\n );\n });\n\n return () => {\n unsubscribeMouseUp();\n unsubscribeTouchEnd();\n unsubscribeTouchCancel();\n };\n }\n ).pipe(share());\n }\n}\n","import {\n Directive,\n Input,\n HostListener,\n Renderer2,\n ElementRef,\n OnDestroy,\n NgZone\n} from '@angular/core';\nimport { ResizableDirective } from './resizable.directive';\nimport { Edges } from './interfaces/edges.interface';\n\n/**\n * An element placed inside a `mwlResizable` directive to be used as a drag and resize handle\n *\n * For example\n *\n * ```html\n *
\n *
\n *
\n * ```\n */\n@Directive({\n selector: '[mwlResizeHandle]'\n})\nexport class ResizeHandleDirective implements OnDestroy {\n /**\n * The `Edges` object that contains the edges of the parent element that dragging the handle will trigger a resize on\n */\n @Input() resizeEdges: Edges = {};\n\n private eventListeners: {\n touchmove?: () => void;\n mousemove?: () => void;\n [key: string]: (() => void) | undefined;\n } = {};\n\n constructor(\n private renderer: Renderer2,\n private element: ElementRef,\n private zone: NgZone,\n private resizable: ResizableDirective\n ) {}\n\n ngOnDestroy(): void {\n this.unsubscribeEventListeners();\n }\n\n /**\n * @hidden\n */\n @HostListener('touchstart', [\n '$event',\n '$event.touches[0].clientX',\n '$event.touches[0].clientY'\n ])\n @HostListener('mousedown', ['$event', '$event.clientX', '$event.clientY'])\n onMousedown(\n event: MouseEvent | TouchEvent,\n clientX: number,\n clientY: number\n ): void {\n event.preventDefault();\n this.zone.runOutsideAngular(() => {\n if (!this.eventListeners.touchmove) {\n this.eventListeners.touchmove = this.renderer.listen(\n this.element.nativeElement,\n 'touchmove',\n (touchMoveEvent: TouchEvent) => {\n this.onMousemove(\n touchMoveEvent,\n touchMoveEvent.targetTouches[0].clientX,\n touchMoveEvent.targetTouches[0].clientY\n );\n }\n );\n }\n if (!this.eventListeners.mousemove) {\n this.eventListeners.mousemove = this.renderer.listen(\n this.element.nativeElement,\n 'mousemove',\n (mouseMoveEvent: MouseEvent) => {\n this.onMousemove(\n mouseMoveEvent,\n mouseMoveEvent.clientX,\n mouseMoveEvent.clientY\n );\n }\n );\n }\n this.resizable.mousedown.next({\n clientX,\n clientY,\n edges: this.resizeEdges\n });\n });\n }\n\n /**\n * @hidden\n */\n @HostListener('touchend', [\n '$event.changedTouches[0].clientX',\n '$event.changedTouches[0].clientY'\n ])\n @HostListener('touchcancel', [\n '$event.changedTouches[0].clientX',\n '$event.changedTouches[0].clientY'\n ])\n @HostListener('mouseup', ['$event.clientX', '$event.clientY'])\n onMouseup(clientX: number, clientY: number): void {\n this.zone.runOutsideAngular(() => {\n this.unsubscribeEventListeners();\n this.resizable.mouseup.next({\n clientX,\n clientY,\n edges: this.resizeEdges\n });\n });\n }\n\n private onMousemove(\n event: MouseEvent | TouchEvent,\n clientX: number,\n clientY: number\n ): void {\n this.resizable.mousemove.next({\n clientX,\n clientY,\n edges: this.resizeEdges,\n event\n });\n }\n\n private unsubscribeEventListeners(): void {\n Object.keys(this.eventListeners).forEach(type => {\n (this as any).eventListeners[type]();\n delete this.eventListeners[type];\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ResizableDirective } from './resizable.directive';\nimport { ResizeHandleDirective } from './resize-handle.directive';\n\n@NgModule({\n declarations: [ResizableDirective, ResizeHandleDirective],\n exports: [ResizableDirective, ResizeHandleDirective]\n})\nexport class ResizableModule {}\n"],"names":[],"mappings":"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"} diff --git a/dist/fesm5/angular-resizable-element.js b/dist/fesm5/angular-resizable-element.js new file mode 100644 index 0000000..4851a6c --- /dev/null +++ b/dist/fesm5/angular-resizable-element.js @@ -0,0 +1,984 @@ +import { __assign, __read } from 'tslib'; +import { isPlatformBrowser } from '@angular/common'; +import { Subject, Observable, merge, EMPTY } from 'rxjs'; +import { map, mergeMap, takeUntil, filter, pairwise, take, share, auditTime, switchMap, startWith } from 'rxjs/operators'; +import { Directive, Renderer2, ElementRef, Output, Input, EventEmitter, NgZone, Inject, PLATFORM_ID, HostListener, NgModule } from '@angular/core'; + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * @param {?} value1 + * @param {?} value2 + * @param {?=} precision + * @return {?} + */ +function isNumberCloseTo(value1, value2, precision) { + if (precision === void 0) { precision = 3; } + /** @type {?} */ + var diff = Math.abs(value1 - value2); + return diff < precision; +} +/** + * @param {?} startingRect + * @param {?} edges + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ +function getNewBoundingRectangle(startingRect, edges, clientX, clientY) { + /** @type {?} */ + var newBoundingRect = { + top: startingRect.top, + bottom: startingRect.bottom, + left: startingRect.left, + right: startingRect.right + }; + if (edges.top) { + newBoundingRect.top += clientY; + } + if (edges.bottom) { + newBoundingRect.bottom += clientY; + } + if (edges.left) { + newBoundingRect.left += clientX; + } + if (edges.right) { + newBoundingRect.right += clientX; + } + newBoundingRect.height = newBoundingRect.bottom - newBoundingRect.top; + newBoundingRect.width = newBoundingRect.right - newBoundingRect.left; + return newBoundingRect; +} +/** + * @param {?} element + * @param {?} ghostElementPositioning + * @return {?} + */ +function getElementRect(element, ghostElementPositioning) { + /** @type {?} */ + var translateX = 0; + /** @type {?} */ + var translateY = 0; + /** @type {?} */ + var style = element.nativeElement.style; + /** @type {?} */ + var transformProperties = [ + 'transform', + '-ms-transform', + '-moz-transform', + '-o-transform' + ]; + /** @type {?} */ + var transform = transformProperties + .map(function (property) { return style[property]; }) + .find(function (value) { return !!value; }); + if (transform && transform.includes('translate3d')) { + translateX = transform.replace(/.*translate3d\((.*)px, (.*)px, (.*)px\).*/, '$1'); + translateY = transform.replace(/.*translate3d\((.*)px, (.*)px, (.*)px\).*/, '$2'); + } + else if (transform && transform.includes('translate')) { + translateX = transform.replace(/.*translate\((.*)px, (.*)px\).*/, '$1'); + translateY = transform.replace(/.*translate\((.*)px, (.*)px\).*/, '$2'); + } + if (ghostElementPositioning === 'absolute') { + return { + height: element.nativeElement.offsetHeight, + width: element.nativeElement.offsetWidth, + top: element.nativeElement.offsetTop - translateY, + bottom: element.nativeElement.offsetHeight + + element.nativeElement.offsetTop - + translateY, + left: element.nativeElement.offsetLeft - translateX, + right: element.nativeElement.offsetWidth + + element.nativeElement.offsetLeft - + translateX + }; + } + else { + /** @type {?} */ + var boundingRect = element.nativeElement.getBoundingClientRect(); + return { + height: boundingRect.height, + width: boundingRect.width, + top: boundingRect.top - translateY, + bottom: boundingRect.bottom - translateY, + left: boundingRect.left - translateX, + right: boundingRect.right - translateX, + scrollTop: element.nativeElement.scrollTop, + scrollLeft: element.nativeElement.scrollLeft + }; + } +} +/** + * @param {?} __0 + * @return {?} + */ +function isWithinBoundingY(_a) { + var clientY = _a.clientY, rect = _a.rect; + return clientY >= rect.top && clientY <= rect.bottom; +} +/** + * @param {?} __0 + * @return {?} + */ +function isWithinBoundingX(_a) { + var clientX = _a.clientX, rect = _a.rect; + return clientX >= rect.left && clientX <= rect.right; +} +/** + * @param {?} __0 + * @return {?} + */ +function getResizeEdges(_a) { + var clientX = _a.clientX, clientY = _a.clientY, elm = _a.elm, allowedEdges = _a.allowedEdges, cursorPrecision = _a.cursorPrecision; + /** @type {?} */ + var elmPosition = elm.nativeElement.getBoundingClientRect(); + /** @type {?} */ + var edges = {}; + if (allowedEdges.left && + isNumberCloseTo(clientX, elmPosition.left, cursorPrecision) && + isWithinBoundingY({ clientY: clientY, rect: elmPosition })) { + edges.left = true; + } + if (allowedEdges.right && + isNumberCloseTo(clientX, elmPosition.right, cursorPrecision) && + isWithinBoundingY({ clientY: clientY, rect: elmPosition })) { + edges.right = true; + } + if (allowedEdges.top && + isNumberCloseTo(clientY, elmPosition.top, cursorPrecision) && + isWithinBoundingX({ clientX: clientX, rect: elmPosition })) { + edges.top = true; + } + if (allowedEdges.bottom && + isNumberCloseTo(clientY, elmPosition.bottom, cursorPrecision) && + isWithinBoundingX({ clientX: clientX, rect: elmPosition })) { + edges.bottom = true; + } + return edges; +} +/** @type {?} */ +var DEFAULT_RESIZE_CURSORS = Object.freeze({ + topLeft: 'nw-resize', + topRight: 'ne-resize', + bottomLeft: 'sw-resize', + bottomRight: 'se-resize', + leftOrRight: 'col-resize', + topOrBottom: 'row-resize' +}); +/** + * @param {?} edges + * @param {?} cursors + * @return {?} + */ +function getResizeCursor(edges, cursors) { + if (edges.left && edges.top) { + return cursors.topLeft; + } + else if (edges.right && edges.top) { + return cursors.topRight; + } + else if (edges.left && edges.bottom) { + return cursors.bottomLeft; + } + else if (edges.right && edges.bottom) { + return cursors.bottomRight; + } + else if (edges.left || edges.right) { + return cursors.leftOrRight; + } + else if (edges.top || edges.bottom) { + return cursors.topOrBottom; + } + else { + return ''; + } +} +/** + * @param {?} __0 + * @return {?} + */ +function getEdgesDiff(_a) { + var edges = _a.edges, initialRectangle = _a.initialRectangle, newRectangle = _a.newRectangle; + /** @type {?} */ + var edgesDiff = {}; + Object.keys(edges).forEach(function (edge) { + edgesDiff[edge] = (newRectangle[edge] || 0) - (initialRectangle[edge] || 0); + }); + return edgesDiff; +} +/** @type {?} */ +var RESIZE_ACTIVE_CLASS = 'resize-active'; +/** @type {?} */ +var RESIZE_LEFT_HOVER_CLASS = 'resize-left-hover'; +/** @type {?} */ +var RESIZE_RIGHT_HOVER_CLASS = 'resize-right-hover'; +/** @type {?} */ +var RESIZE_TOP_HOVER_CLASS = 'resize-top-hover'; +/** @type {?} */ +var RESIZE_BOTTOM_HOVER_CLASS = 'resize-bottom-hover'; +/** @type {?} */ +var RESIZE_GHOST_ELEMENT_CLASS = 'resize-ghost-element'; +/** @type {?} */ +var MOUSE_MOVE_THROTTLE_MS = 50; +/** + * Place this on an element to make it resizable. For example: + * + * ```html + *
+ *
+ * ``` + */ +var ResizableDirective = /** @class */ (function () { + /** + * @hidden + */ + function ResizableDirective(platformId, renderer, elm, zone) { + this.platformId = platformId; + this.renderer = renderer; + this.elm = elm; + this.zone = zone; + /** + * The edges that an element can be resized from. Pass an object like `{top: true, bottom: false}`. By default no edges can be resized. + * @deprecated use a resize handle instead that positions itself to the side of the element you would like to resize + */ + this.resizeEdges = {}; + /** + * Set to `true` to enable a temporary resizing effect of the element in between the `resizeStart` and `resizeEnd` events. + */ + this.enableGhostResize = false; + /** + * A snap grid that resize events will be locked to. + * + * e.g. to only allow the element to be resized every 10px set it to `{left: 10, right: 10}` + */ + this.resizeSnapGrid = {}; + /** + * The mouse cursors that will be set on the resize edges + */ + this.resizeCursors = DEFAULT_RESIZE_CURSORS; + /** + * Mouse over thickness to active cursor. + * @deprecated invalid when you migrate to use resize handles instead of setting resizeEdges on the element + */ + this.resizeCursorPrecision = 3; + /** + * Define the positioning of the ghost element (can be fixed or absolute) + */ + this.ghostElementPositioning = 'fixed'; + /** + * Allow elements to be resized to negative dimensions + */ + this.allowNegativeResizes = false; + /** + * Called when the mouse is pressed and a resize event is about to begin. `$event` is a `ResizeEvent` object. + */ + this.resizeStart = new EventEmitter(); + /** + * Called as the mouse is dragged after a resize event has begun. `$event` is a `ResizeEvent` object. + */ + this.resizing = new EventEmitter(); + /** + * Called after the mouse is released after a resize event. `$event` is a `ResizeEvent` object. + */ + this.resizeEnd = new EventEmitter(); + /** + * @hidden + */ + this.mouseup = new Subject(); + /** + * @hidden + */ + this.mousedown = new Subject(); + /** + * @hidden + */ + this.mousemove = new Subject(); + this.destroy$ = new Subject(); + this.resizeEdges$ = new Subject(); + this.pointerEventListeners = PointerEventListeners.getInstance(renderer, zone); + } + /** + * @hidden + */ + /** + * @hidden + * @return {?} + */ + ResizableDirective.prototype.ngOnInit = /** + * @hidden + * @return {?} + */ + function () { + var _this = this; + // TODO - use some fancy Observable.merge's for this + this.pointerEventListeners.pointerDown + .pipe(takeUntil(this.destroy$)) + .subscribe(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY; + _this.mousedown.next({ clientX: clientX, clientY: clientY }); + }); + this.pointerEventListeners.pointerMove + .pipe(takeUntil(this.destroy$)) + .subscribe(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY, event = _a.event; + _this.mousemove.next({ clientX: clientX, clientY: clientY, event: event }); + }); + this.pointerEventListeners.pointerUp + .pipe(takeUntil(this.destroy$)) + .subscribe(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY; + _this.mouseup.next({ clientX: clientX, clientY: clientY }); + }); + /** @type {?} */ + var currentResize; + /** @type {?} */ + var removeGhostElement = function () { + if (currentResize && currentResize.clonedNode) { + _this.elm.nativeElement.parentElement.removeChild(currentResize.clonedNode); + _this.renderer.setStyle(_this.elm.nativeElement, 'visibility', 'inherit'); + } + }; + /** @type {?} */ + var getResizeCursors = function () { + return __assign({}, DEFAULT_RESIZE_CURSORS, _this.resizeCursors); + }; + /** @type {?} */ + var mouseMove = this.mousemove.pipe(share()); + mouseMove.pipe(filter(function () { return !!currentResize; })).subscribe(function (_a) { + var event = _a.event; + event.preventDefault(); + }); + this.resizeEdges$ + .pipe(startWith(this.resizeEdges), map(function () { + return (_this.resizeEdges && + Object.keys(_this.resizeEdges).some(function (edge) { return !!_this.resizeEdges[edge]; })); + }), switchMap(function (legacyResizeEdgesEnabled) { + return legacyResizeEdgesEnabled ? mouseMove : EMPTY; + }), auditTime(MOUSE_MOVE_THROTTLE_MS)) + .subscribe(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY; + /** @type {?} */ + var resizeEdges = getResizeEdges({ + clientX: clientX, + clientY: clientY, + elm: _this.elm, + allowedEdges: _this.resizeEdges, + cursorPrecision: _this.resizeCursorPrecision + }); + /** @type {?} */ + var resizeCursors = getResizeCursors(); + if (!currentResize) { + /** @type {?} */ + var cursor = getResizeCursor(resizeEdges, resizeCursors); + _this.renderer.setStyle(_this.elm.nativeElement, 'cursor', cursor); + } + _this.setElementClass(_this.elm, RESIZE_LEFT_HOVER_CLASS, resizeEdges.left === true); + _this.setElementClass(_this.elm, RESIZE_RIGHT_HOVER_CLASS, resizeEdges.right === true); + _this.setElementClass(_this.elm, RESIZE_TOP_HOVER_CLASS, resizeEdges.top === true); + _this.setElementClass(_this.elm, RESIZE_BOTTOM_HOVER_CLASS, resizeEdges.bottom === true); + }); + /** @type {?} */ + var mousedrag = this.mousedown + .pipe(mergeMap(function (startCoords) { + /** + * @param {?} moveCoords + * @return {?} + */ + function getDiff(moveCoords) { + return { + clientX: moveCoords.clientX - startCoords.clientX, + clientY: moveCoords.clientY - startCoords.clientY + }; + } + /** @type {?} */ + var getSnapGrid = function () { + /** @type {?} */ + var snapGrid = { x: 1, y: 1 }; + if (currentResize) { + if (_this.resizeSnapGrid.left && currentResize.edges.left) { + snapGrid.x = +_this.resizeSnapGrid.left; + } + else if (_this.resizeSnapGrid.right && + currentResize.edges.right) { + snapGrid.x = +_this.resizeSnapGrid.right; + } + if (_this.resizeSnapGrid.top && currentResize.edges.top) { + snapGrid.y = +_this.resizeSnapGrid.top; + } + else if (_this.resizeSnapGrid.bottom && + currentResize.edges.bottom) { + snapGrid.y = +_this.resizeSnapGrid.bottom; + } + } + return snapGrid; + }; + /** + * @param {?} coords + * @param {?} snapGrid + * @return {?} + */ + function getGrid(coords, snapGrid) { + return { + x: Math.ceil(coords.clientX / snapGrid.x), + y: Math.ceil(coords.clientY / snapGrid.y) + }; + } + return merge(mouseMove.pipe(take(1)).pipe(map(function (coords) { return [coords]; })), mouseMove.pipe(pairwise())) + .pipe(map(function (_a) { + var _b = __read(_a, 2), previousCoords = _b[0], newCoords = _b[1]; + return [ + previousCoords ? getDiff(previousCoords) : previousCoords, + getDiff(newCoords) + ]; + })) + .pipe(filter(function (_a) { + var _b = __read(_a, 2), previousCoords = _b[0], newCoords = _b[1]; + if (!previousCoords) { + return true; + } + /** @type {?} */ + var snapGrid = getSnapGrid(); + /** @type {?} */ + var previousGrid = getGrid(previousCoords, snapGrid); + /** @type {?} */ + var newGrid = getGrid(newCoords, snapGrid); + return (previousGrid.x !== newGrid.x || previousGrid.y !== newGrid.y); + })) + .pipe(map(function (_a) { + var _b = __read(_a, 2), newCoords = _b[1]; + /** @type {?} */ + var snapGrid = getSnapGrid(); + return { + clientX: Math.round(newCoords.clientX / snapGrid.x) * snapGrid.x, + clientY: Math.round(newCoords.clientY / snapGrid.y) * snapGrid.y + }; + })) + .pipe(takeUntil(merge(_this.mouseup, _this.mousedown))); + })) + .pipe(filter(function () { return !!currentResize; })); + mousedrag + .pipe(map(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY; + return getNewBoundingRectangle((/** @type {?} */ (currentResize)).startingRect, (/** @type {?} */ (currentResize)).edges, clientX, clientY); + })) + .pipe(filter(function (newBoundingRect) { + return (_this.allowNegativeResizes || + !!(newBoundingRect.height && + newBoundingRect.width && + newBoundingRect.height > 0 && + newBoundingRect.width > 0)); + })) + .pipe(filter(function (newBoundingRect) { + return _this.validateResize + ? _this.validateResize({ + rectangle: newBoundingRect, + edges: getEdgesDiff({ + edges: (/** @type {?} */ (currentResize)).edges, + initialRectangle: (/** @type {?} */ (currentResize)).startingRect, + newRectangle: newBoundingRect + }) + }) + : true; + })) + .subscribe(function (newBoundingRect) { + if (currentResize && currentResize.clonedNode) { + _this.renderer.setStyle(currentResize.clonedNode, 'height', newBoundingRect.height + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'width', newBoundingRect.width + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'top', newBoundingRect.top + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'left', newBoundingRect.left + "px"); + } + _this.zone.run(function () { + _this.resizing.emit({ + edges: getEdgesDiff({ + edges: (/** @type {?} */ (currentResize)).edges, + initialRectangle: (/** @type {?} */ (currentResize)).startingRect, + newRectangle: newBoundingRect + }), + rectangle: newBoundingRect + }); + }); + (/** @type {?} */ (currentResize)).currentRect = newBoundingRect; + }); + this.mousedown + .pipe(map(function (_a) { + var clientX = _a.clientX, clientY = _a.clientY, edges = _a.edges; + return (edges || + getResizeEdges({ + clientX: clientX, + clientY: clientY, + elm: _this.elm, + allowedEdges: _this.resizeEdges, + cursorPrecision: _this.resizeCursorPrecision + })); + })) + .pipe(filter(function (edges) { + return Object.keys(edges).length > 0; + })) + .subscribe(function (edges) { + if (currentResize) { + removeGhostElement(); + } + /** @type {?} */ + var startingRect = getElementRect(_this.elm, _this.ghostElementPositioning); + currentResize = { + edges: edges, + startingRect: startingRect, + currentRect: startingRect + }; + /** @type {?} */ + var resizeCursors = getResizeCursors(); + /** @type {?} */ + var cursor = getResizeCursor(currentResize.edges, resizeCursors); + _this.renderer.setStyle(document.body, 'cursor', cursor); + _this.setElementClass(_this.elm, RESIZE_ACTIVE_CLASS, true); + if (_this.enableGhostResize) { + currentResize.clonedNode = _this.elm.nativeElement.cloneNode(true); + _this.elm.nativeElement.parentElement.appendChild(currentResize.clonedNode); + _this.renderer.setStyle(_this.elm.nativeElement, 'visibility', 'hidden'); + _this.renderer.setStyle(currentResize.clonedNode, 'position', _this.ghostElementPositioning); + _this.renderer.setStyle(currentResize.clonedNode, 'left', currentResize.startingRect.left + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'top', currentResize.startingRect.top + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'height', currentResize.startingRect.height + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'width', currentResize.startingRect.width + "px"); + _this.renderer.setStyle(currentResize.clonedNode, 'cursor', getResizeCursor(currentResize.edges, resizeCursors)); + _this.renderer.addClass(currentResize.clonedNode, RESIZE_GHOST_ELEMENT_CLASS); + (/** @type {?} */ (currentResize.clonedNode)).scrollTop = (/** @type {?} */ (currentResize.startingRect + .scrollTop)); + (/** @type {?} */ (currentResize.clonedNode)).scrollLeft = (/** @type {?} */ (currentResize.startingRect + .scrollLeft)); + } + _this.zone.run(function () { + _this.resizeStart.emit({ + edges: getEdgesDiff({ + edges: edges, + initialRectangle: startingRect, + newRectangle: startingRect + }), + rectangle: getNewBoundingRectangle(startingRect, {}, 0, 0) + }); + }); + }); + this.mouseup.subscribe(function () { + if (currentResize) { + _this.renderer.removeClass(_this.elm.nativeElement, RESIZE_ACTIVE_CLASS); + _this.renderer.setStyle(document.body, 'cursor', ''); + _this.renderer.setStyle(_this.elm.nativeElement, 'cursor', ''); + _this.zone.run(function () { + _this.resizeEnd.emit({ + edges: getEdgesDiff({ + edges: (/** @type {?} */ (currentResize)).edges, + initialRectangle: (/** @type {?} */ (currentResize)).startingRect, + newRectangle: (/** @type {?} */ (currentResize)).currentRect + }), + rectangle: (/** @type {?} */ (currentResize)).currentRect + }); + }); + removeGhostElement(); + currentResize = null; + } + }); + }; + /** + * @hidden + */ + /** + * @hidden + * @param {?} changes + * @return {?} + */ + ResizableDirective.prototype.ngOnChanges = /** + * @hidden + * @param {?} changes + * @return {?} + */ + function (changes) { + if (changes.resizeEdges) { + this.resizeEdges$.next(this.resizeEdges); + } + }; + /** + * @hidden + */ + /** + * @hidden + * @return {?} + */ + ResizableDirective.prototype.ngOnDestroy = /** + * @hidden + * @return {?} + */ + function () { + // browser check for angular universal, because it doesn't know what document is + if (isPlatformBrowser(this.platformId)) { + this.renderer.setStyle(document.body, 'cursor', ''); + } + this.mousedown.complete(); + this.mouseup.complete(); + this.mousemove.complete(); + this.resizeEdges$.complete(); + this.destroy$.next(); + }; + /** + * @private + * @param {?} elm + * @param {?} name + * @param {?} add + * @return {?} + */ + ResizableDirective.prototype.setElementClass = /** + * @private + * @param {?} elm + * @param {?} name + * @param {?} add + * @return {?} + */ + function (elm, name, add) { + if (add) { + this.renderer.addClass(elm.nativeElement, name); + } + else { + this.renderer.removeClass(elm.nativeElement, name); + } + }; + ResizableDirective.decorators = [ + { type: Directive, args: [{ + selector: '[mwlResizable]' + },] } + ]; + /** @nocollapse */ + ResizableDirective.ctorParameters = function () { return [ + { type: undefined, decorators: [{ type: Inject, args: [PLATFORM_ID,] }] }, + { type: Renderer2 }, + { type: ElementRef }, + { type: NgZone } + ]; }; + ResizableDirective.propDecorators = { + validateResize: [{ type: Input }], + resizeEdges: [{ type: Input }], + enableGhostResize: [{ type: Input }], + resizeSnapGrid: [{ type: Input }], + resizeCursors: [{ type: Input }], + resizeCursorPrecision: [{ type: Input }], + ghostElementPositioning: [{ type: Input }], + allowNegativeResizes: [{ type: Input }], + resizeStart: [{ type: Output }], + resizing: [{ type: Output }], + resizeEnd: [{ type: Output }] + }; + return ResizableDirective; +}()); +var PointerEventListeners = /** @class */ (function () { + function PointerEventListeners(renderer, zone) { + this.pointerDown = new Observable(function (observer) { + /** @type {?} */ + var unsubscribeMouseDown; + /** @type {?} */ + var unsubscribeTouchStart; + zone.runOutsideAngular(function () { + unsubscribeMouseDown = renderer.listen('document', 'mousedown', function (event) { + observer.next({ + clientX: event.clientX, + clientY: event.clientY, + event: event + }); + }); + unsubscribeTouchStart = renderer.listen('document', 'touchstart', function (event) { + observer.next({ + clientX: event.touches[0].clientX, + clientY: event.touches[0].clientY, + event: event + }); + }); + }); + return function () { + unsubscribeMouseDown(); + unsubscribeTouchStart(); + }; + }).pipe(share()); + this.pointerMove = new Observable(function (observer) { + /** @type {?} */ + var unsubscribeMouseMove; + /** @type {?} */ + var unsubscribeTouchMove; + zone.runOutsideAngular(function () { + unsubscribeMouseMove = renderer.listen('document', 'mousemove', function (event) { + observer.next({ + clientX: event.clientX, + clientY: event.clientY, + event: event + }); + }); + unsubscribeTouchMove = renderer.listen('document', 'touchmove', function (event) { + observer.next({ + clientX: event.targetTouches[0].clientX, + clientY: event.targetTouches[0].clientY, + event: event + }); + }); + }); + return function () { + unsubscribeMouseMove(); + unsubscribeTouchMove(); + }; + }).pipe(share()); + this.pointerUp = new Observable(function (observer) { + /** @type {?} */ + var unsubscribeMouseUp; + /** @type {?} */ + var unsubscribeTouchEnd; + /** @type {?} */ + var unsubscribeTouchCancel; + zone.runOutsideAngular(function () { + unsubscribeMouseUp = renderer.listen('document', 'mouseup', function (event) { + observer.next({ + clientX: event.clientX, + clientY: event.clientY, + event: event + }); + }); + unsubscribeTouchEnd = renderer.listen('document', 'touchend', function (event) { + observer.next({ + clientX: event.changedTouches[0].clientX, + clientY: event.changedTouches[0].clientY, + event: event + }); + }); + unsubscribeTouchCancel = renderer.listen('document', 'touchcancel', function (event) { + observer.next({ + clientX: event.changedTouches[0].clientX, + clientY: event.changedTouches[0].clientY, + event: event + }); + }); + }); + return function () { + unsubscribeMouseUp(); + unsubscribeTouchEnd(); + unsubscribeTouchCancel(); + }; + }).pipe(share()); + } + // tslint:disable-line + /** + * @param {?} renderer + * @param {?} zone + * @return {?} + */ + PointerEventListeners.getInstance = + // tslint:disable-line + /** + * @param {?} renderer + * @param {?} zone + * @return {?} + */ + function (renderer, zone) { + if (!PointerEventListeners.instance) { + PointerEventListeners.instance = new PointerEventListeners(renderer, zone); + } + return PointerEventListeners.instance; + }; + return PointerEventListeners; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +/** + * An element placed inside a `mwlResizable` directive to be used as a drag and resize handle + * + * For example + * + * ```html + *
+ *
+ *
+ * ``` + */ +var ResizeHandleDirective = /** @class */ (function () { + function ResizeHandleDirective(renderer, element, zone, resizable) { + this.renderer = renderer; + this.element = element; + this.zone = zone; + this.resizable = resizable; + /** + * The `Edges` object that contains the edges of the parent element that dragging the handle will trigger a resize on + */ + this.resizeEdges = {}; + this.eventListeners = {}; + } + /** + * @return {?} + */ + ResizeHandleDirective.prototype.ngOnDestroy = /** + * @return {?} + */ + function () { + this.unsubscribeEventListeners(); + }; + /** + * @hidden + */ + /** + * @hidden + * @param {?} event + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + ResizeHandleDirective.prototype.onMousedown = /** + * @hidden + * @param {?} event + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + function (event, clientX, clientY) { + var _this = this; + event.preventDefault(); + this.zone.runOutsideAngular(function () { + if (!_this.eventListeners.touchmove) { + _this.eventListeners.touchmove = _this.renderer.listen(_this.element.nativeElement, 'touchmove', function (touchMoveEvent) { + _this.onMousemove(touchMoveEvent, touchMoveEvent.targetTouches[0].clientX, touchMoveEvent.targetTouches[0].clientY); + }); + } + if (!_this.eventListeners.mousemove) { + _this.eventListeners.mousemove = _this.renderer.listen(_this.element.nativeElement, 'mousemove', function (mouseMoveEvent) { + _this.onMousemove(mouseMoveEvent, mouseMoveEvent.clientX, mouseMoveEvent.clientY); + }); + } + _this.resizable.mousedown.next({ + clientX: clientX, + clientY: clientY, + edges: _this.resizeEdges + }); + }); + }; + /** + * @hidden + */ + /** + * @hidden + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + ResizeHandleDirective.prototype.onMouseup = /** + * @hidden + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + function (clientX, clientY) { + var _this = this; + this.zone.runOutsideAngular(function () { + _this.unsubscribeEventListeners(); + _this.resizable.mouseup.next({ + clientX: clientX, + clientY: clientY, + edges: _this.resizeEdges + }); + }); + }; + /** + * @private + * @param {?} event + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + ResizeHandleDirective.prototype.onMousemove = /** + * @private + * @param {?} event + * @param {?} clientX + * @param {?} clientY + * @return {?} + */ + function (event, clientX, clientY) { + this.resizable.mousemove.next({ + clientX: clientX, + clientY: clientY, + edges: this.resizeEdges, + event: event + }); + }; + /** + * @private + * @return {?} + */ + ResizeHandleDirective.prototype.unsubscribeEventListeners = /** + * @private + * @return {?} + */ + function () { + var _this = this; + Object.keys(this.eventListeners).forEach(function (type) { + ((/** @type {?} */ (_this))).eventListeners[type](); + delete _this.eventListeners[type]; + }); + }; + ResizeHandleDirective.decorators = [ + { type: Directive, args: [{ + selector: '[mwlResizeHandle]' + },] } + ]; + /** @nocollapse */ + ResizeHandleDirective.ctorParameters = function () { return [ + { type: Renderer2 }, + { type: ElementRef }, + { type: NgZone }, + { type: ResizableDirective } + ]; }; + ResizeHandleDirective.propDecorators = { + resizeEdges: [{ type: Input }], + onMousedown: [{ type: HostListener, args: ['touchstart', [ + '$event', + '$event.touches[0].clientX', + '$event.touches[0].clientY' + ],] }, { type: HostListener, args: ['mousedown', ['$event', '$event.clientX', '$event.clientY'],] }], + onMouseup: [{ type: HostListener, args: ['touchend', [ + '$event.changedTouches[0].clientX', + '$event.changedTouches[0].clientY' + ],] }, { type: HostListener, args: ['touchcancel', [ + '$event.changedTouches[0].clientX', + '$event.changedTouches[0].clientY' + ],] }, { type: HostListener, args: ['mouseup', ['$event.clientX', '$event.clientY'],] }] + }; + return ResizeHandleDirective; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ +var ResizableModule = /** @class */ (function () { + function ResizableModule() { + } + ResizableModule.decorators = [ + { type: NgModule, args: [{ + declarations: [ResizableDirective, ResizeHandleDirective], + exports: [ResizableDirective, ResizeHandleDirective] + },] } + ]; + return ResizableModule; +}()); + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + +/** + * @fileoverview added by tsickle + * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc + */ + +export { ResizableDirective, ResizeHandleDirective, ResizableModule }; + +//# sourceMappingURL=angular-resizable-element.js.map \ No newline at end of file diff --git a/dist/fesm5/angular-resizable-element.js.map b/dist/fesm5/angular-resizable-element.js.map new file mode 100644 index 0000000..310559b --- /dev/null +++ b/dist/fesm5/angular-resizable-element.js.map @@ -0,0 +1 @@ +{"version":3,"file":"angular-resizable-element.js.map","sources":["ng://angular-resizable-element/resizable.directive.ts","ng://angular-resizable-element/resize-handle.directive.ts","ng://angular-resizable-element/resizable.module.ts"],"sourcesContent":["import {\n Directive,\n Renderer2,\n ElementRef,\n OnInit,\n Output,\n Input,\n EventEmitter,\n OnDestroy,\n NgZone,\n OnChanges,\n SimpleChanges,\n Inject,\n PLATFORM_ID\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Subject, Observable, Observer, merge, EMPTY } from 'rxjs';\nimport {\n map,\n mergeMap,\n takeUntil,\n filter,\n pairwise,\n take,\n share,\n auditTime,\n switchMap,\n startWith\n} from 'rxjs/operators';\nimport { Edges } from './interfaces/edges.interface';\nimport { BoundingRectangle } from './interfaces/bounding-rectangle.interface';\nimport { ResizeEvent } from './interfaces/resize-event.interface';\n\ninterface PointerEventCoordinate {\n clientX: number;\n clientY: number;\n event: MouseEvent | TouchEvent;\n}\n\ninterface Coordinate {\n x: number;\n y: number;\n}\n\nfunction isNumberCloseTo(\n value1: number,\n value2: number,\n precision: number = 3\n): boolean {\n const diff: number = Math.abs(value1 - value2);\n return diff < precision;\n}\n\nfunction getNewBoundingRectangle(\n startingRect: BoundingRectangle,\n edges: Edges,\n clientX: number,\n clientY: number\n): BoundingRectangle {\n const newBoundingRect: BoundingRectangle = {\n top: startingRect.top,\n bottom: startingRect.bottom,\n left: startingRect.left,\n right: startingRect.right\n };\n\n if (edges.top) {\n newBoundingRect.top += clientY;\n }\n if (edges.bottom) {\n newBoundingRect.bottom += clientY;\n }\n if (edges.left) {\n newBoundingRect.left += clientX;\n }\n if (edges.right) {\n newBoundingRect.right += clientX;\n }\n newBoundingRect.height = newBoundingRect.bottom - newBoundingRect.top;\n newBoundingRect.width = newBoundingRect.right - newBoundingRect.left;\n\n return newBoundingRect;\n}\n\nfunction getElementRect(\n element: ElementRef,\n ghostElementPositioning: string\n): BoundingRectangle {\n let translateX = 0;\n let translateY = 0;\n const style = element.nativeElement.style;\n const transformProperties = [\n 'transform',\n '-ms-transform',\n '-moz-transform',\n '-o-transform'\n ];\n const transform = transformProperties\n .map(property => style[property])\n .find(value => !!value);\n if (transform && transform.includes('translate3d')) {\n translateX = transform.replace(\n /.*translate3d\\((.*)px, (.*)px, (.*)px\\).*/,\n '$1'\n );\n translateY = transform.replace(\n /.*translate3d\\((.*)px, (.*)px, (.*)px\\).*/,\n '$2'\n );\n } else if (transform && transform.includes('translate')) {\n translateX = transform.replace(/.*translate\\((.*)px, (.*)px\\).*/, '$1');\n translateY = transform.replace(/.*translate\\((.*)px, (.*)px\\).*/, '$2');\n }\n\n if (ghostElementPositioning === 'absolute') {\n return {\n height: element.nativeElement.offsetHeight,\n width: element.nativeElement.offsetWidth,\n top: element.nativeElement.offsetTop - translateY,\n bottom:\n element.nativeElement.offsetHeight +\n element.nativeElement.offsetTop -\n translateY,\n left: element.nativeElement.offsetLeft - translateX,\n right:\n element.nativeElement.offsetWidth +\n element.nativeElement.offsetLeft -\n translateX\n };\n } else {\n const boundingRect: BoundingRectangle = element.nativeElement.getBoundingClientRect();\n return {\n height: boundingRect.height,\n width: boundingRect.width,\n top: boundingRect.top - translateY,\n bottom: boundingRect.bottom - translateY,\n left: boundingRect.left - translateX,\n right: boundingRect.right - translateX,\n scrollTop: element.nativeElement.scrollTop,\n scrollLeft: element.nativeElement.scrollLeft\n };\n }\n}\n\nfunction isWithinBoundingY({\n clientY,\n rect\n}: {\n clientY: number;\n rect: ClientRect;\n}): boolean {\n return clientY >= rect.top && clientY <= rect.bottom;\n}\n\nfunction isWithinBoundingX({\n clientX,\n rect\n}: {\n clientX: number;\n rect: ClientRect;\n}): boolean {\n return clientX >= rect.left && clientX <= rect.right;\n}\n\nfunction getResizeEdges({\n clientX,\n clientY,\n elm,\n allowedEdges,\n cursorPrecision\n}: {\n clientX: number;\n clientY: number;\n elm: ElementRef;\n allowedEdges: Edges;\n cursorPrecision: number;\n}): Edges {\n const elmPosition: ClientRect = elm.nativeElement.getBoundingClientRect();\n const edges: Edges = {};\n\n if (\n allowedEdges.left &&\n isNumberCloseTo(clientX, elmPosition.left, cursorPrecision) &&\n isWithinBoundingY({ clientY, rect: elmPosition })\n ) {\n edges.left = true;\n }\n\n if (\n allowedEdges.right &&\n isNumberCloseTo(clientX, elmPosition.right, cursorPrecision) &&\n isWithinBoundingY({ clientY, rect: elmPosition })\n ) {\n edges.right = true;\n }\n\n if (\n allowedEdges.top &&\n isNumberCloseTo(clientY, elmPosition.top, cursorPrecision) &&\n isWithinBoundingX({ clientX, rect: elmPosition })\n ) {\n edges.top = true;\n }\n\n if (\n allowedEdges.bottom &&\n isNumberCloseTo(clientY, elmPosition.bottom, cursorPrecision) &&\n isWithinBoundingX({ clientX, rect: elmPosition })\n ) {\n edges.bottom = true;\n }\n\n return edges;\n}\n\nexport interface ResizeCursors {\n topLeft: string;\n topRight: string;\n bottomLeft: string;\n bottomRight: string;\n leftOrRight: string;\n topOrBottom: string;\n}\n\nconst DEFAULT_RESIZE_CURSORS: ResizeCursors = Object.freeze({\n topLeft: 'nw-resize',\n topRight: 'ne-resize',\n bottomLeft: 'sw-resize',\n bottomRight: 'se-resize',\n leftOrRight: 'col-resize',\n topOrBottom: 'row-resize'\n});\n\nfunction getResizeCursor(edges: Edges, cursors: ResizeCursors): string {\n if (edges.left && edges.top) {\n return cursors.topLeft;\n } else if (edges.right && edges.top) {\n return cursors.topRight;\n } else if (edges.left && edges.bottom) {\n return cursors.bottomLeft;\n } else if (edges.right && edges.bottom) {\n return cursors.bottomRight;\n } else if (edges.left || edges.right) {\n return cursors.leftOrRight;\n } else if (edges.top || edges.bottom) {\n return cursors.topOrBottom;\n } else {\n return '';\n }\n}\n\nfunction getEdgesDiff({\n edges,\n initialRectangle,\n newRectangle\n}: {\n edges: Edges;\n initialRectangle: BoundingRectangle;\n newRectangle: BoundingRectangle;\n}): Edges {\n const edgesDiff: Edges = {};\n Object.keys(edges).forEach(edge => {\n edgesDiff[edge] = (newRectangle[edge] || 0) - (initialRectangle[edge] || 0);\n });\n return edgesDiff;\n}\n\nconst RESIZE_ACTIVE_CLASS: string = 'resize-active';\nconst RESIZE_LEFT_HOVER_CLASS: string = 'resize-left-hover';\nconst RESIZE_RIGHT_HOVER_CLASS: string = 'resize-right-hover';\nconst RESIZE_TOP_HOVER_CLASS: string = 'resize-top-hover';\nconst RESIZE_BOTTOM_HOVER_CLASS: string = 'resize-bottom-hover';\nconst RESIZE_GHOST_ELEMENT_CLASS: string = 'resize-ghost-element';\n\nexport const MOUSE_MOVE_THROTTLE_MS: number = 50;\n\n/**\n * Place this on an element to make it resizable. For example:\n *\n * ```html\n * \n * \n * ```\n */\n@Directive({\n selector: '[mwlResizable]'\n})\nexport class ResizableDirective implements OnInit, OnChanges, OnDestroy {\n /**\n * A function that will be called before each resize event. Return `true` to allow the resize event to propagate or `false` to cancel it\n */\n @Input() validateResize: (resizeEvent: ResizeEvent) => boolean;\n\n /**\n * The edges that an element can be resized from. Pass an object like `{top: true, bottom: false}`. By default no edges can be resized.\n * @deprecated use a resize handle instead that positions itself to the side of the element you would like to resize\n */\n @Input() resizeEdges: Edges = {};\n\n /**\n * Set to `true` to enable a temporary resizing effect of the element in between the `resizeStart` and `resizeEnd` events.\n */\n @Input() enableGhostResize: boolean = false;\n\n /**\n * A snap grid that resize events will be locked to.\n *\n * e.g. to only allow the element to be resized every 10px set it to `{left: 10, right: 10}`\n */\n @Input() resizeSnapGrid: Edges = {};\n\n /**\n * The mouse cursors that will be set on the resize edges\n */\n @Input() resizeCursors: ResizeCursors = DEFAULT_RESIZE_CURSORS;\n\n /**\n * Mouse over thickness to active cursor.\n * @deprecated invalid when you migrate to use resize handles instead of setting resizeEdges on the element\n */\n @Input() resizeCursorPrecision: number = 3;\n\n /**\n * Define the positioning of the ghost element (can be fixed or absolute)\n */\n @Input() ghostElementPositioning: 'fixed' | 'absolute' = 'fixed';\n\n /**\n * Allow elements to be resized to negative dimensions\n */\n @Input() allowNegativeResizes: boolean = false;\n\n /**\n * Called when the mouse is pressed and a resize event is about to begin. `$event` is a `ResizeEvent` object.\n */\n @Output() resizeStart = new EventEmitter();\n\n /**\n * Called as the mouse is dragged after a resize event has begun. `$event` is a `ResizeEvent` object.\n */\n @Output() resizing = new EventEmitter();\n\n /**\n * Called after the mouse is released after a resize event. `$event` is a `ResizeEvent` object.\n */\n @Output() resizeEnd = new EventEmitter();\n\n /**\n * @hidden\n */\n public mouseup = new Subject<{\n clientX: number;\n clientY: number;\n edges?: Edges;\n }>();\n\n /**\n * @hidden\n */\n public mousedown = new Subject<{\n clientX: number;\n clientY: number;\n edges?: Edges;\n }>();\n\n /**\n * @hidden\n */\n public mousemove = new Subject<{\n clientX: number;\n clientY: number;\n edges?: Edges;\n event: MouseEvent | TouchEvent;\n }>();\n\n private pointerEventListeners: PointerEventListeners;\n\n private destroy$ = new Subject();\n\n private resizeEdges$ = new Subject();\n\n /**\n * @hidden\n */\n constructor(\n @Inject(PLATFORM_ID) private platformId: any,\n private renderer: Renderer2,\n public elm: ElementRef,\n private zone: NgZone\n ) {\n this.pointerEventListeners = PointerEventListeners.getInstance(\n renderer,\n zone\n );\n }\n\n /**\n * @hidden\n */\n ngOnInit(): void {\n // TODO - use some fancy Observable.merge's for this\n this.pointerEventListeners.pointerDown\n .pipe(takeUntil(this.destroy$))\n .subscribe(({ clientX, clientY }) => {\n this.mousedown.next({ clientX, clientY });\n });\n\n this.pointerEventListeners.pointerMove\n .pipe(takeUntil(this.destroy$))\n .subscribe(({ clientX, clientY, event }) => {\n this.mousemove.next({ clientX, clientY, event });\n });\n\n this.pointerEventListeners.pointerUp\n .pipe(takeUntil(this.destroy$))\n .subscribe(({ clientX, clientY }) => {\n this.mouseup.next({ clientX, clientY });\n });\n\n let currentResize: {\n edges: Edges;\n startingRect: BoundingRectangle;\n currentRect: BoundingRectangle;\n clonedNode?: HTMLElement;\n } | null;\n\n const removeGhostElement = () => {\n if (currentResize && currentResize.clonedNode) {\n this.elm.nativeElement.parentElement.removeChild(\n currentResize.clonedNode\n );\n this.renderer.setStyle(this.elm.nativeElement, 'visibility', 'inherit');\n }\n };\n\n const getResizeCursors = (): ResizeCursors => {\n return {\n ...DEFAULT_RESIZE_CURSORS,\n ...this.resizeCursors\n };\n };\n\n const mouseMove: Observable = this.mousemove.pipe(share());\n\n mouseMove.pipe(filter(() => !!currentResize)).subscribe(({ event }) => {\n event.preventDefault();\n });\n\n this.resizeEdges$\n .pipe(\n startWith(this.resizeEdges),\n map(() => {\n return (\n this.resizeEdges &&\n Object.keys(this.resizeEdges).some(edge => !!this.resizeEdges[edge])\n );\n }),\n switchMap(legacyResizeEdgesEnabled =>\n legacyResizeEdgesEnabled ? mouseMove : EMPTY\n ),\n auditTime(MOUSE_MOVE_THROTTLE_MS)\n )\n .subscribe(({ clientX, clientY }) => {\n const resizeEdges: Edges = getResizeEdges({\n clientX,\n clientY,\n elm: this.elm,\n allowedEdges: this.resizeEdges,\n cursorPrecision: this.resizeCursorPrecision\n });\n const resizeCursors = getResizeCursors();\n if (!currentResize) {\n const cursor = getResizeCursor(resizeEdges, resizeCursors);\n this.renderer.setStyle(this.elm.nativeElement, 'cursor', cursor);\n }\n this.setElementClass(\n this.elm,\n RESIZE_LEFT_HOVER_CLASS,\n resizeEdges.left === true\n );\n this.setElementClass(\n this.elm,\n RESIZE_RIGHT_HOVER_CLASS,\n resizeEdges.right === true\n );\n this.setElementClass(\n this.elm,\n RESIZE_TOP_HOVER_CLASS,\n resizeEdges.top === true\n );\n this.setElementClass(\n this.elm,\n RESIZE_BOTTOM_HOVER_CLASS,\n resizeEdges.bottom === true\n );\n });\n\n const mousedrag: Observable = this.mousedown\n .pipe(\n mergeMap(startCoords => {\n function getDiff(moveCoords: { clientX: number; clientY: number }) {\n return {\n clientX: moveCoords.clientX - startCoords.clientX,\n clientY: moveCoords.clientY - startCoords.clientY\n };\n }\n\n const getSnapGrid = () => {\n const snapGrid: Coordinate = { x: 1, y: 1 };\n\n if (currentResize) {\n if (this.resizeSnapGrid.left && currentResize.edges.left) {\n snapGrid.x = +this.resizeSnapGrid.left;\n } else if (\n this.resizeSnapGrid.right &&\n currentResize.edges.right\n ) {\n snapGrid.x = +this.resizeSnapGrid.right;\n }\n\n if (this.resizeSnapGrid.top && currentResize.edges.top) {\n snapGrid.y = +this.resizeSnapGrid.top;\n } else if (\n this.resizeSnapGrid.bottom &&\n currentResize.edges.bottom\n ) {\n snapGrid.y = +this.resizeSnapGrid.bottom;\n }\n }\n\n return snapGrid;\n };\n\n function getGrid(\n coords: { clientX: number; clientY: number },\n snapGrid: Coordinate\n ) {\n return {\n x: Math.ceil(coords.clientX / snapGrid.x),\n y: Math.ceil(coords.clientY / snapGrid.y)\n };\n }\n\n return merge(\n mouseMove.pipe(take(1)).pipe(map(coords => [coords])),\n mouseMove.pipe(pairwise())\n )\n .pipe(\n map(([previousCoords, newCoords]) => {\n return [\n previousCoords ? getDiff(previousCoords) : previousCoords,\n getDiff(newCoords)\n ];\n })\n )\n .pipe(\n filter(([previousCoords, newCoords]) => {\n if (!previousCoords) {\n return true;\n }\n\n const snapGrid: Coordinate = getSnapGrid();\n const previousGrid: Coordinate = getGrid(\n previousCoords,\n snapGrid\n );\n const newGrid: Coordinate = getGrid(newCoords, snapGrid);\n\n return (\n previousGrid.x !== newGrid.x || previousGrid.y !== newGrid.y\n );\n })\n )\n .pipe(\n map(([, newCoords]) => {\n const snapGrid: Coordinate = getSnapGrid();\n return {\n clientX:\n Math.round(newCoords.clientX / snapGrid.x) * snapGrid.x,\n clientY:\n Math.round(newCoords.clientY / snapGrid.y) * snapGrid.y\n };\n })\n )\n .pipe(takeUntil(merge(this.mouseup, this.mousedown)));\n })\n )\n .pipe(filter(() => !!currentResize));\n\n mousedrag\n .pipe(\n map(({ clientX, clientY }) => {\n return getNewBoundingRectangle(\n currentResize!.startingRect,\n currentResize!.edges,\n clientX,\n clientY\n );\n })\n )\n .pipe(\n filter((newBoundingRect: BoundingRectangle) => {\n return (\n this.allowNegativeResizes ||\n !!(\n newBoundingRect.height &&\n newBoundingRect.width &&\n newBoundingRect.height > 0 &&\n newBoundingRect.width > 0\n )\n );\n })\n )\n .pipe(\n filter((newBoundingRect: BoundingRectangle) => {\n return this.validateResize\n ? this.validateResize({\n rectangle: newBoundingRect,\n edges: getEdgesDiff({\n edges: currentResize!.edges,\n initialRectangle: currentResize!.startingRect,\n newRectangle: newBoundingRect\n })\n })\n : true;\n })\n )\n .subscribe((newBoundingRect: BoundingRectangle) => {\n if (currentResize && currentResize.clonedNode) {\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'height',\n `${newBoundingRect.height}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'width',\n `${newBoundingRect.width}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'top',\n `${newBoundingRect.top}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'left',\n `${newBoundingRect.left}px`\n );\n }\n\n this.zone.run(() => {\n this.resizing.emit({\n edges: getEdgesDiff({\n edges: currentResize!.edges,\n initialRectangle: currentResize!.startingRect,\n newRectangle: newBoundingRect\n }),\n rectangle: newBoundingRect\n });\n });\n\n currentResize!.currentRect = newBoundingRect;\n });\n\n this.mousedown\n .pipe(\n map(({ clientX, clientY, edges }) => {\n return (\n edges ||\n getResizeEdges({\n clientX,\n clientY,\n elm: this.elm,\n allowedEdges: this.resizeEdges,\n cursorPrecision: this.resizeCursorPrecision\n })\n );\n })\n )\n .pipe(\n filter((edges: Edges) => {\n return Object.keys(edges).length > 0;\n })\n )\n .subscribe((edges: Edges) => {\n if (currentResize) {\n removeGhostElement();\n }\n const startingRect: BoundingRectangle = getElementRect(\n this.elm,\n this.ghostElementPositioning\n );\n currentResize = {\n edges,\n startingRect,\n currentRect: startingRect\n };\n const resizeCursors = getResizeCursors();\n const cursor = getResizeCursor(currentResize.edges, resizeCursors);\n this.renderer.setStyle(document.body, 'cursor', cursor);\n this.setElementClass(this.elm, RESIZE_ACTIVE_CLASS, true);\n if (this.enableGhostResize) {\n currentResize.clonedNode = this.elm.nativeElement.cloneNode(true);\n this.elm.nativeElement.parentElement.appendChild(\n currentResize.clonedNode\n );\n this.renderer.setStyle(\n this.elm.nativeElement,\n 'visibility',\n 'hidden'\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'position',\n this.ghostElementPositioning\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'left',\n `${currentResize.startingRect.left}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'top',\n `${currentResize.startingRect.top}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'height',\n `${currentResize.startingRect.height}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'width',\n `${currentResize.startingRect.width}px`\n );\n this.renderer.setStyle(\n currentResize.clonedNode,\n 'cursor',\n getResizeCursor(currentResize.edges, resizeCursors)\n );\n this.renderer.addClass(\n currentResize.clonedNode,\n RESIZE_GHOST_ELEMENT_CLASS\n );\n currentResize.clonedNode!.scrollTop = currentResize.startingRect\n .scrollTop as number;\n currentResize.clonedNode!.scrollLeft = currentResize.startingRect\n .scrollLeft as number;\n }\n this.zone.run(() => {\n this.resizeStart.emit({\n edges: getEdgesDiff({\n edges,\n initialRectangle: startingRect,\n newRectangle: startingRect\n }),\n rectangle: getNewBoundingRectangle(startingRect, {}, 0, 0)\n });\n });\n });\n\n this.mouseup.subscribe(() => {\n if (currentResize) {\n this.renderer.removeClass(this.elm.nativeElement, RESIZE_ACTIVE_CLASS);\n this.renderer.setStyle(document.body, 'cursor', '');\n this.renderer.setStyle(this.elm.nativeElement, 'cursor', '');\n this.zone.run(() => {\n this.resizeEnd.emit({\n edges: getEdgesDiff({\n edges: currentResize!.edges,\n initialRectangle: currentResize!.startingRect,\n newRectangle: currentResize!.currentRect\n }),\n rectangle: currentResize!.currentRect\n });\n });\n removeGhostElement();\n currentResize = null;\n }\n });\n }\n\n /**\n * @hidden\n */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.resizeEdges) {\n this.resizeEdges$.next(this.resizeEdges);\n }\n }\n\n /**\n * @hidden\n */\n ngOnDestroy(): void {\n // browser check for angular universal, because it doesn't know what document is\n if (isPlatformBrowser(this.platformId)) {\n this.renderer.setStyle(document.body, 'cursor', '');\n }\n this.mousedown.complete();\n this.mouseup.complete();\n this.mousemove.complete();\n this.resizeEdges$.complete();\n this.destroy$.next();\n }\n\n private setElementClass(elm: ElementRef, name: string, add: boolean): void {\n if (add) {\n this.renderer.addClass(elm.nativeElement, name);\n } else {\n this.renderer.removeClass(elm.nativeElement, name);\n }\n }\n}\n\nclass PointerEventListeners {\n public pointerDown: Observable;\n\n public pointerMove: Observable;\n\n public pointerUp: Observable;\n\n private static instance: PointerEventListeners; // tslint:disable-line\n\n public static getInstance(\n renderer: Renderer2,\n zone: NgZone\n ): PointerEventListeners {\n if (!PointerEventListeners.instance) {\n PointerEventListeners.instance = new PointerEventListeners(\n renderer,\n zone\n );\n }\n return PointerEventListeners.instance;\n }\n\n constructor(renderer: Renderer2, zone: NgZone) {\n this.pointerDown = new Observable(\n (observer: Observer) => {\n let unsubscribeMouseDown: () => void;\n let unsubscribeTouchStart: () => void;\n\n zone.runOutsideAngular(() => {\n unsubscribeMouseDown = renderer.listen(\n 'document',\n 'mousedown',\n (event: MouseEvent) => {\n observer.next({\n clientX: event.clientX,\n clientY: event.clientY,\n event\n });\n }\n );\n\n unsubscribeTouchStart = renderer.listen(\n 'document',\n 'touchstart',\n (event: TouchEvent) => {\n observer.next({\n clientX: event.touches[0].clientX,\n clientY: event.touches[0].clientY,\n event\n });\n }\n );\n });\n\n return () => {\n unsubscribeMouseDown();\n unsubscribeTouchStart();\n };\n }\n ).pipe(share());\n\n this.pointerMove = new Observable(\n (observer: Observer) => {\n let unsubscribeMouseMove: () => void;\n let unsubscribeTouchMove: () => void;\n\n zone.runOutsideAngular(() => {\n unsubscribeMouseMove = renderer.listen(\n 'document',\n 'mousemove',\n (event: MouseEvent) => {\n observer.next({\n clientX: event.clientX,\n clientY: event.clientY,\n event\n });\n }\n );\n\n unsubscribeTouchMove = renderer.listen(\n 'document',\n 'touchmove',\n (event: TouchEvent) => {\n observer.next({\n clientX: event.targetTouches[0].clientX,\n clientY: event.targetTouches[0].clientY,\n event\n });\n }\n );\n });\n\n return () => {\n unsubscribeMouseMove();\n unsubscribeTouchMove();\n };\n }\n ).pipe(share());\n\n this.pointerUp = new Observable(\n (observer: Observer) => {\n let unsubscribeMouseUp: () => void;\n let unsubscribeTouchEnd: () => void;\n let unsubscribeTouchCancel: () => void;\n\n zone.runOutsideAngular(() => {\n unsubscribeMouseUp = renderer.listen(\n 'document',\n 'mouseup',\n (event: MouseEvent) => {\n observer.next({\n clientX: event.clientX,\n clientY: event.clientY,\n event\n });\n }\n );\n\n unsubscribeTouchEnd = renderer.listen(\n 'document',\n 'touchend',\n (event: TouchEvent) => {\n observer.next({\n clientX: event.changedTouches[0].clientX,\n clientY: event.changedTouches[0].clientY,\n event\n });\n }\n );\n\n unsubscribeTouchCancel = renderer.listen(\n 'document',\n 'touchcancel',\n (event: TouchEvent) => {\n observer.next({\n clientX: event.changedTouches[0].clientX,\n clientY: event.changedTouches[0].clientY,\n event\n });\n }\n );\n });\n\n return () => {\n unsubscribeMouseUp();\n unsubscribeTouchEnd();\n unsubscribeTouchCancel();\n };\n }\n ).pipe(share());\n }\n}\n","import {\n Directive,\n Input,\n HostListener,\n Renderer2,\n ElementRef,\n OnDestroy,\n NgZone\n} from '@angular/core';\nimport { ResizableDirective } from './resizable.directive';\nimport { Edges } from './interfaces/edges.interface';\n\n/**\n * An element placed inside a `mwlResizable` directive to be used as a drag and resize handle\n *\n * For example\n *\n * ```html\n *
\n *
\n *
\n * ```\n */\n@Directive({\n selector: '[mwlResizeHandle]'\n})\nexport class ResizeHandleDirective implements OnDestroy {\n /**\n * The `Edges` object that contains the edges of the parent element that dragging the handle will trigger a resize on\n */\n @Input() resizeEdges: Edges = {};\n\n private eventListeners: {\n touchmove?: () => void;\n mousemove?: () => void;\n [key: string]: (() => void) | undefined;\n } = {};\n\n constructor(\n private renderer: Renderer2,\n private element: ElementRef,\n private zone: NgZone,\n private resizable: ResizableDirective\n ) {}\n\n ngOnDestroy(): void {\n this.unsubscribeEventListeners();\n }\n\n /**\n * @hidden\n */\n @HostListener('touchstart', [\n '$event',\n '$event.touches[0].clientX',\n '$event.touches[0].clientY'\n ])\n @HostListener('mousedown', ['$event', '$event.clientX', '$event.clientY'])\n onMousedown(\n event: MouseEvent | TouchEvent,\n clientX: number,\n clientY: number\n ): void {\n event.preventDefault();\n this.zone.runOutsideAngular(() => {\n if (!this.eventListeners.touchmove) {\n this.eventListeners.touchmove = this.renderer.listen(\n this.element.nativeElement,\n 'touchmove',\n (touchMoveEvent: TouchEvent) => {\n this.onMousemove(\n touchMoveEvent,\n touchMoveEvent.targetTouches[0].clientX,\n touchMoveEvent.targetTouches[0].clientY\n );\n }\n );\n }\n if (!this.eventListeners.mousemove) {\n this.eventListeners.mousemove = this.renderer.listen(\n this.element.nativeElement,\n 'mousemove',\n (mouseMoveEvent: MouseEvent) => {\n this.onMousemove(\n mouseMoveEvent,\n mouseMoveEvent.clientX,\n mouseMoveEvent.clientY\n );\n }\n );\n }\n this.resizable.mousedown.next({\n clientX,\n clientY,\n edges: this.resizeEdges\n });\n });\n }\n\n /**\n * @hidden\n */\n @HostListener('touchend', [\n '$event.changedTouches[0].clientX',\n '$event.changedTouches[0].clientY'\n ])\n @HostListener('touchcancel', [\n '$event.changedTouches[0].clientX',\n '$event.changedTouches[0].clientY'\n ])\n @HostListener('mouseup', ['$event.clientX', '$event.clientY'])\n onMouseup(clientX: number, clientY: number): void {\n this.zone.runOutsideAngular(() => {\n this.unsubscribeEventListeners();\n this.resizable.mouseup.next({\n clientX,\n clientY,\n edges: this.resizeEdges\n });\n });\n }\n\n private onMousemove(\n event: MouseEvent | TouchEvent,\n clientX: number,\n clientY: number\n ): void {\n this.resizable.mousemove.next({\n clientX,\n clientY,\n edges: this.resizeEdges,\n event\n });\n }\n\n private unsubscribeEventListeners(): void {\n Object.keys(this.eventListeners).forEach(type => {\n (this as any).eventListeners[type]();\n delete this.eventListeners[type];\n });\n }\n}\n","import { NgModule } from '@angular/core';\nimport { ResizableDirective } from './resizable.directive';\nimport { ResizeHandleDirective } from './resize-handle.directive';\n\n@NgModule({\n declarations: [ResizableDirective, ResizeHandleDirective],\n exports: [ResizableDirective, ResizeHandleDirective]\n})\nexport class ResizableModule {}\n"],"names":[],"mappings":"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"} diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 0000000..3c43718 --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,6 @@ +export * from './resizable.module'; +export { BoundingRectangle } from './interfaces/bounding-rectangle.interface'; +export { Edges } from './interfaces/edges.interface'; +export { ResizeEvent } from './interfaces/resize-event.interface'; +export { ResizableDirective } from './resizable.directive'; +export { ResizeHandleDirective } from './resize-handle.directive'; diff --git a/dist/interfaces/bounding-rectangle.interface.d.ts b/dist/interfaces/bounding-rectangle.interface.d.ts new file mode 100644 index 0000000..56f5bf7 --- /dev/null +++ b/dist/interfaces/bounding-rectangle.interface.d.ts @@ -0,0 +1,14 @@ +/** + * The bounding rectangle of the resized element + */ +export interface BoundingRectangle { + top: number; + bottom: number; + left: number; + right: number; + height?: number; + width?: number; + scrollTop?: number; + scrollLeft?: number; + [key: string]: number | undefined; +} diff --git a/dist/interfaces/edges.interface.d.ts b/dist/interfaces/edges.interface.d.ts new file mode 100644 index 0000000..aa6fdc7 --- /dev/null +++ b/dist/interfaces/edges.interface.d.ts @@ -0,0 +1,10 @@ +/** + * The edges that the resize event were triggered on + */ +export interface Edges { + top?: boolean | number; + bottom?: boolean | number; + left?: boolean | number; + right?: boolean | number; + [key: string]: boolean | number | undefined; +} diff --git a/dist/interfaces/resize-event.interface.d.ts b/dist/interfaces/resize-event.interface.d.ts new file mode 100644 index 0000000..21f6367 --- /dev/null +++ b/dist/interfaces/resize-event.interface.d.ts @@ -0,0 +1,9 @@ +import { BoundingRectangle } from './bounding-rectangle.interface'; +import { Edges } from './edges.interface'; +/** + * The `$event` object that is passed to the resize events + */ +export interface ResizeEvent { + rectangle: BoundingRectangle; + edges: Edges; +} diff --git a/dist/package.json b/dist/package.json new file mode 100644 index 0000000..1915d21 --- /dev/null +++ b/dist/package.json @@ -0,0 +1,99 @@ +{ + "name": "angular-resizable-element", + "version": "3.2.4", + "description": "An angular 6.0+ directive that allows an element to be dragged and resized", + "repository": { + "type": "git", + "url": "git+https://github.com/mattlewis92/angular-resizable-element.git" + }, + "keywords": [ + "angular", + "angular2", + "angular6", + "resizable" + ], + "author": "Matt Lewis", + "license": "MIT", + "bugs": { + "url": "https://github.com/mattlewis92/angular-resizable-element/issues" + }, + "homepage": "https://github.com/mattlewis92/angular-resizable-element#readme", + "devDependencies": { + "@angular/common": "^7.2.3", + "@angular/compiler": "^7.2.3", + "@angular/compiler-cli": "^7.2.3", + "@angular/core": "^7.2.3", + "@angular/platform-browser": "^7.2.3", + "@angular/platform-browser-dynamic": "^7.2.3", + "@compodoc/compodoc": "^1.1.7", + "@types/chai": "^4.1.7", + "@types/mocha": "^5.2.5", + "@types/sinon": "^7.0.5", + "@types/sinon-chai": "^3.2.2", + "@types/webpack": "^4.4.24", + "chai": "^4.2.0", + "codecov-lite": "^0.1.3", + "codelyzer": "^4.5.0", + "commitizen": "^3.0.5", + "concurrently": "^4.1.0", + "copyfiles": "^2.1.0", + "core-js": "^2.6.3", + "cz-conventional-changelog": "^2.1.0", + "fork-ts-checker-webpack-plugin": "^0.5.2", + "husky": "^1.3.1", + "istanbul-instrumenter-loader": "^3.0.1", + "karma": "^4.0.0", + "karma-chrome-launcher": "^2.1.1", + "karma-coverage-istanbul-reporter": "^2.0.4", + "karma-mocha": "^1.3.0", + "karma-sourcemap-loader": "^0.3.7", + "karma-webpack": "^4.0.0-rc.6", + "mocha": "^5.2.0", + "ng-packagr": "^4.7.0", + "prettier": "^1.16.4", + "pretty-quick": "^1.10.0", + "rxjs": "^6.4.0", + "sinon": "^7.2.3", + "sinon-chai": "^3.3.0", + "standard-version": "^4.4.0", + "ts-loader": "^5.3.3", + "ts-node": "^8.0.2", + "tsickle": "0.34.0", + "tslint": "^5.12.1", + "tslint-config-mwl": "^0.5.2", + "tslint-loader": "^3.6.0", + "typescript": "~3.2.4", + "validate-commit-msg": "^2.8.0", + "webpack": "^4.29.1", + "webpack-cli": "^3.2.3", + "webpack-dev-server": "^3.1.14", + "zone.js": "^0.8.29" + }, + "peerDependencies": { + "@angular/core": ">=6.0.0 <9.0.0" + }, + "config": { + "commitizen": { + "path": "node_modules/cz-conventional-changelog" + } + }, + "husky": { + "hooks": { + "commit-msg": "validate-commit-msg", + "pre-commit": "pretty-quick --staged" + } + }, + "main": "bundles/angular-resizable-element.umd.js", + "module": "fesm5/angular-resizable-element.js", + "es2015": "fesm2015/angular-resizable-element.js", + "esm5": "esm5/angular-resizable-element.js", + "esm2015": "esm2015/angular-resizable-element.js", + "fesm5": "fesm5/angular-resizable-element.js", + "fesm2015": "fesm2015/angular-resizable-element.js", + "typings": "angular-resizable-element.d.ts", + "metadata": "angular-resizable-element.metadata.json", + "sideEffects": false, + "dependencies": { + "tslib": "^1.9.0" + } +} diff --git a/dist/resizable.directive.d.ts b/dist/resizable.directive.d.ts new file mode 100644 index 0000000..3a403a4 --- /dev/null +++ b/dist/resizable.directive.d.ts @@ -0,0 +1,138 @@ +import { + Renderer2, + ElementRef, + OnInit, + EventEmitter, + OnDestroy, + NgZone, + OnChanges, + SimpleChanges +} from '@angular/core'; +import { Subject } from 'rxjs'; +import { Edges } from './interfaces/edges.interface'; +import { ResizeEvent } from './interfaces/resize-event.interface'; +export interface ResizeCursors { + topLeft: string; + topRight: string; + bottomLeft: string; + bottomRight: string; + leftOrRight: string; + topOrBottom: string; +} +export declare const MOUSE_MOVE_THROTTLE_MS: number; +/** + * Place this on an element to make it resizable. For example: + * + * ```html + *
+ *
+ * ``` + */ +export declare class ResizableDirective + implements OnInit, OnChanges, OnDestroy { + private platformId; + private renderer; + elm: ElementRef; + private zone; + /** + * A function that will be called before each resize event. Return `true` to allow the resize event to propagate or `false` to cancel it + */ + validateResize: (resizeEvent: ResizeEvent) => boolean; + /** + * The edges that an element can be resized from. Pass an object like `{top: true, bottom: false}`. By default no edges can be resized. + * @deprecated use a resize handle instead that positions itself to the side of the element you would like to resize + */ + resizeEdges: Edges; + /** + * Set to `true` to enable a temporary resizing effect of the element in between the `resizeStart` and `resizeEnd` events. + */ + enableGhostResize: boolean; + /** + * A snap grid that resize events will be locked to. + * + * e.g. to only allow the element to be resized every 10px set it to `{left: 10, right: 10}` + */ + resizeSnapGrid: Edges; + /** + * The mouse cursors that will be set on the resize edges + */ + resizeCursors: ResizeCursors; + /** + * Mouse over thickness to active cursor. + * @deprecated invalid when you migrate to use resize handles instead of setting resizeEdges on the element + */ + resizeCursorPrecision: number; + /** + * Define the positioning of the ghost element (can be fixed or absolute) + */ + ghostElementPositioning: 'fixed' | 'absolute'; + /** + * Allow elements to be resized to negative dimensions + */ + allowNegativeResizes: boolean; + /** + * Called when the mouse is pressed and a resize event is about to begin. `$event` is a `ResizeEvent` object. + */ + resizeStart: EventEmitter; + /** + * Called as the mouse is dragged after a resize event has begun. `$event` is a `ResizeEvent` object. + */ + resizing: EventEmitter; + /** + * Called after the mouse is released after a resize event. `$event` is a `ResizeEvent` object. + */ + resizeEnd: EventEmitter; + /** + * @hidden + */ + mouseup: Subject<{ + clientX: number; + clientY: number; + edges?: Edges; + }>; + /** + * @hidden + */ + mousedown: Subject<{ + clientX: number; + clientY: number; + edges?: Edges; + }>; + /** + * @hidden + */ + mousemove: Subject<{ + clientX: number; + clientY: number; + edges?: Edges; + event: MouseEvent | TouchEvent; + }>; + private pointerEventListeners; + private destroy$; + private resizeEdges$; + /** + * @hidden + */ + constructor( + platformId: any, + renderer: Renderer2, + elm: ElementRef, + zone: NgZone + ); + /** + * @hidden + */ + ngOnInit(): void; + /** + * @hidden + */ + ngOnChanges(changes: SimpleChanges): void; + /** + * @hidden + */ + ngOnDestroy(): void; + private setElementClass; +} diff --git a/dist/resizable.module.d.ts b/dist/resizable.module.d.ts new file mode 100644 index 0000000..ab86c8b --- /dev/null +++ b/dist/resizable.module.d.ts @@ -0,0 +1 @@ +export declare class ResizableModule {} diff --git a/dist/resize-handle.directive.d.ts b/dist/resize-handle.directive.d.ts new file mode 100644 index 0000000..0a19d64 --- /dev/null +++ b/dist/resize-handle.directive.d.ts @@ -0,0 +1,46 @@ +import { Renderer2, ElementRef, OnDestroy, NgZone } from '@angular/core'; +import { ResizableDirective } from './resizable.directive'; +import { Edges } from './interfaces/edges.interface'; +/** + * An element placed inside a `mwlResizable` directive to be used as a drag and resize handle + * + * For example + * + * ```html + *
+ *
+ *
+ * ``` + */ +export declare class ResizeHandleDirective implements OnDestroy { + private renderer; + private element; + private zone; + private resizable; + /** + * The `Edges` object that contains the edges of the parent element that dragging the handle will trigger a resize on + */ + resizeEdges: Edges; + private eventListeners; + constructor( + renderer: Renderer2, + element: ElementRef, + zone: NgZone, + resizable: ResizableDirective + ); + ngOnDestroy(): void; + /** + * @hidden + */ + onMousedown( + event: MouseEvent | TouchEvent, + clientX: number, + clientY: number + ): void; + /** + * @hidden + */ + onMouseup(clientX: number, clientY: number): void; + private onMousemove; + private unsubscribeEventListeners; +} From 8d1360ef60798011a813e26640e078943380e965 Mon Sep 17 00:00:00 2001 From: Anton Shumikhin Date: Tue, 28 May 2019 12:51:08 +0300 Subject: [PATCH 3/3] use fork fo lib --- .editorconfig | 13 - .github/ISSUE_TEMPLATE.md | 13 - .github/issue-template-enforcer.yml | 1 - .gitignore | 4 - .npmrc | 1 - .prettierignore | 5 - .prettierrc | 3 - .travis.yml | 23 - README.md | 28 +- ...ent.d.ts => angular-resizable-element.d.ts | 0 ...=> angular-resizable-element.metadata.json | 0 .../angular-resizable-element.umd.js | 0 .../angular-resizable-element.umd.js.map | 0 .../angular-resizable-element.umd.min.js | 0 .../angular-resizable-element.umd.min.js.map | 0 demo/demo.component.ts | 117 - demo/demo.module.ts | 11 - demo/entry.ts | 11 - demo/index.html | 45 - dist/CHANGELOG.md | 589 - dist/LICENSE | 21 - dist/README.md | 108 - dist/package.json | 99 - .../angular-resizable-element.js | 0 {dist/esm2015 => esm2015}/index.js | 0 .../bounding-rectangle.interface.js | 0 .../interfaces/edges.interface.js | 0 .../interfaces/resize-event.interface.js | 0 .../resizable.directive.js | 0 {dist/esm2015 => esm2015}/resizable.module.js | 0 .../resize-handle.directive.js | 0 .../angular-resizable-element.js | 0 {dist/esm5 => esm5}/index.js | 0 .../bounding-rectangle.interface.js | 0 .../interfaces/edges.interface.js | 0 .../interfaces/resize-event.interface.js | 0 {dist/esm5 => esm5}/resizable.directive.js | 0 {dist/esm5 => esm5}/resizable.module.js | 0 .../esm5 => esm5}/resize-handle.directive.js | 0 .../angular-resizable-element.js | 0 .../angular-resizable-element.js.map | 0 .../angular-resizable-element.js | 0 .../angular-resizable-element.js.map | 0 dist/index.d.ts => index.d.ts | 0 .../bounding-rectangle.interface.d.ts | 0 .../edges.interface.d.ts | 0 .../resize-event.interface.d.ts | 0 karma.conf.ts | 105 - package-lock.json | 17453 ---------------- package.json | 36 +- ...directive.d.ts => resizable.directive.d.ts | 0 ...zable.module.d.ts => resizable.module.d.ts | 0 ...ctive.d.ts => resize-handle.directive.d.ts | 0 src/index.ts | 6 - .../bounding-rectangle.interface.ts | 14 - src/interfaces/edges.interface.ts | 10 - src/interfaces/resize-event.interface.ts | 10 - src/resizable.directive.ts | 972 - src/resizable.module.ts | 9 - src/resize-handle.directive.ts | 142 - test/entry.ts | 28 - test/resizable.spec.ts | 1516 -- tsconfig-compodoc.json | 11 - tsconfig.json | 18 - tslint.json | 7 - webpack.config.ts | 61 - 66 files changed, 27 insertions(+), 21463 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .github/ISSUE_TEMPLATE.md delete mode 100644 .github/issue-template-enforcer.yml delete mode 100644 .gitignore delete mode 100644 .npmrc delete mode 100644 .prettierignore delete mode 100644 .prettierrc delete mode 100644 .travis.yml rename dist/angular-resizable-element.d.ts => angular-resizable-element.d.ts (100%) rename dist/angular-resizable-element.metadata.json => angular-resizable-element.metadata.json (100%) rename {dist/bundles => bundles}/angular-resizable-element.umd.js (100%) rename {dist/bundles => bundles}/angular-resizable-element.umd.js.map (100%) rename {dist/bundles => bundles}/angular-resizable-element.umd.min.js (100%) rename {dist/bundles => bundles}/angular-resizable-element.umd.min.js.map (100%) delete mode 100644 demo/demo.component.ts delete mode 100644 demo/demo.module.ts delete mode 100644 demo/entry.ts delete mode 100644 demo/index.html delete mode 100644 dist/CHANGELOG.md delete mode 100644 dist/LICENSE delete mode 100644 dist/README.md delete mode 100644 dist/package.json rename {dist/esm2015 => esm2015}/angular-resizable-element.js (100%) rename {dist/esm2015 => esm2015}/index.js (100%) rename {dist/esm2015 => esm2015}/interfaces/bounding-rectangle.interface.js (100%) rename {dist/esm2015 => esm2015}/interfaces/edges.interface.js (100%) rename {dist/esm2015 => esm2015}/interfaces/resize-event.interface.js (100%) rename {dist/esm2015 => esm2015}/resizable.directive.js (100%) rename {dist/esm2015 => esm2015}/resizable.module.js (100%) rename {dist/esm2015 => esm2015}/resize-handle.directive.js (100%) rename {dist/esm5 => esm5}/angular-resizable-element.js (100%) rename {dist/esm5 => esm5}/index.js (100%) rename {dist/esm5 => esm5}/interfaces/bounding-rectangle.interface.js (100%) rename {dist/esm5 => esm5}/interfaces/edges.interface.js (100%) rename {dist/esm5 => esm5}/interfaces/resize-event.interface.js (100%) rename {dist/esm5 => esm5}/resizable.directive.js (100%) rename {dist/esm5 => esm5}/resizable.module.js (100%) rename {dist/esm5 => esm5}/resize-handle.directive.js (100%) rename {dist/fesm2015 => fesm2015}/angular-resizable-element.js (100%) rename {dist/fesm2015 => fesm2015}/angular-resizable-element.js.map (100%) rename {dist/fesm5 => fesm5}/angular-resizable-element.js (100%) rename {dist/fesm5 => fesm5}/angular-resizable-element.js.map (100%) rename dist/index.d.ts => index.d.ts (100%) rename {dist/interfaces => interfaces}/bounding-rectangle.interface.d.ts (100%) rename {dist/interfaces => interfaces}/edges.interface.d.ts (100%) rename {dist/interfaces => interfaces}/resize-event.interface.d.ts (100%) delete mode 100644 karma.conf.ts delete mode 100644 package-lock.json rename dist/resizable.directive.d.ts => resizable.directive.d.ts (100%) rename dist/resizable.module.d.ts => resizable.module.d.ts (100%) rename dist/resize-handle.directive.d.ts => resize-handle.directive.d.ts (100%) delete mode 100644 src/index.ts delete mode 100644 src/interfaces/bounding-rectangle.interface.ts delete mode 100644 src/interfaces/edges.interface.ts delete mode 100644 src/interfaces/resize-event.interface.ts delete mode 100644 src/resizable.directive.ts delete mode 100644 src/resizable.module.ts delete mode 100644 src/resize-handle.directive.ts delete mode 100644 test/entry.ts delete mode 100644 test/resizable.spec.ts delete mode 100644 tsconfig-compodoc.json delete mode 100644 tsconfig.json delete mode 100644 tslint.json delete mode 100644 webpack.config.ts diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 5d12634..0000000 --- a/.editorconfig +++ /dev/null @@ -1,13 +0,0 @@ -# editorconfig.org -root = true - -[*] -indent_style = space -indent_size = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 7c7ed91..0000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: Bug, feature or support question -about: Become a bronze sponsor on Patreon to file issues -title: Become a bronze sponsor on Patreon to file issues -labels: '' -assignees: '' ---- - -Hi there! 👋 - -While the project is free to use under the MIT licence, if you'd like to file an issue to receive support about a bug you found, a feature you'd like or if you just have a question, you'll need to be a Bronze sponsor or higher on Patreon to do this: https://www.patreon.com/mattlewis92 - -Any issues opened here will be automatically closed and locked. Thanks for using this project! ✌ diff --git a/.github/issue-template-enforcer.yml b/.github/issue-template-enforcer.yml deleted file mode 100644 index 4d28394..0000000 --- a/.github/issue-template-enforcer.yml +++ /dev/null @@ -1 +0,0 @@ -_extends: probot-settings diff --git a/.gitignore b/.gitignore deleted file mode 100644 index d2bf7b2..0000000 --- a/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.idea -.DS_Store -node_modules -coverage \ No newline at end of file diff --git a/.npmrc b/.npmrc deleted file mode 100644 index 4f46544..0000000 --- a/.npmrc +++ /dev/null @@ -1 +0,0 @@ -save-prefix=^ \ No newline at end of file diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 0c44245..0000000 --- a/.prettierignore +++ /dev/null @@ -1,5 +0,0 @@ -*.json -*.js -*.css -CHANGELOG.md -docs diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 544138b..0000000 --- a/.prettierrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "singleQuote": true -} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 4268590..0000000 --- a/.travis.yml +++ /dev/null @@ -1,23 +0,0 @@ -language: node_js - -node_js: - - '10' - -script: npm test - -notifications: - email: false - -cache: - directories: - - node_modules - -after_success: -- npm run codecov - -addons: - chrome: stable - -dist: trusty - -sudo: required diff --git a/README.md b/README.md index 5547877..7099a59 100644 --- a/README.md +++ b/README.md @@ -14,11 +14,11 @@ https://mattlewis92.github.io/angular-resizable-element/demo/ ## Table of contents -* [About](#about) -* [Installation](#installation) -* [Documentation](#documentation) -* [Development](#development) -* [License](#license) +- [About](#about) +- [Installation](#installation) +- [Documentation](#documentation) +- [Development](#development) +- [License](#license) ## About @@ -43,18 +43,18 @@ import { ResizeEvent } from 'angular-resizable-element'; // you should add some more styles to the element. See the demo folder for a more fleshed out example styles: [ ` - mwlResizable { - box-sizing: border-box; // required for the enableGhostResize option to work - } - ` + mwlResizable { + box-sizing: border-box; // required for the enableGhostResize option to work + } + ` ], template: `
-
+ [resizeEdges]="{ bottom: true, right: true, top: true, left: true }" + (resizeEnd)="onResizeEnd($event)" + > ` }) export class MyComponent { @@ -86,8 +86,8 @@ https://mattlewis92.github.io/angular-resizable-element/docs/ ### Prepare your environment -* Install [Node.js](http://nodejs.org/) and NPM (should come with) -* Install local dev dependencies: `npm install` while current directory is this repo +- Install [Node.js](http://nodejs.org/) and NPM (should come with) +- Install local dev dependencies: `npm install` while current directory is this repo ### Development server diff --git a/dist/angular-resizable-element.d.ts b/angular-resizable-element.d.ts similarity index 100% rename from dist/angular-resizable-element.d.ts rename to angular-resizable-element.d.ts diff --git a/dist/angular-resizable-element.metadata.json b/angular-resizable-element.metadata.json similarity index 100% rename from dist/angular-resizable-element.metadata.json rename to angular-resizable-element.metadata.json diff --git a/dist/bundles/angular-resizable-element.umd.js b/bundles/angular-resizable-element.umd.js similarity index 100% rename from dist/bundles/angular-resizable-element.umd.js rename to bundles/angular-resizable-element.umd.js diff --git a/dist/bundles/angular-resizable-element.umd.js.map b/bundles/angular-resizable-element.umd.js.map similarity index 100% rename from dist/bundles/angular-resizable-element.umd.js.map rename to bundles/angular-resizable-element.umd.js.map diff --git a/dist/bundles/angular-resizable-element.umd.min.js b/bundles/angular-resizable-element.umd.min.js similarity index 100% rename from dist/bundles/angular-resizable-element.umd.min.js rename to bundles/angular-resizable-element.umd.min.js diff --git a/dist/bundles/angular-resizable-element.umd.min.js.map b/bundles/angular-resizable-element.umd.min.js.map similarity index 100% rename from dist/bundles/angular-resizable-element.umd.min.js.map rename to bundles/angular-resizable-element.umd.min.js.map diff --git a/demo/demo.component.ts b/demo/demo.component.ts deleted file mode 100644 index 620506e..0000000 --- a/demo/demo.component.ts +++ /dev/null @@ -1,117 +0,0 @@ -/* tslint:disable:max-inline-declarations */ -import { Component } from '@angular/core'; -import { ResizeEvent } from '../src'; - -@Component({ - selector: 'mwl-demo', - styles: [ - ` - .rectangle { - position: relative; - top: 200px; - display: flex; - align-items: center; - justify-content: center; - width: 300px; - height: 150px; - background-color: #fd4140; - border: solid 1px #121621; - color: #121621; - margin: auto; - } - - .resize-handle-top, - .resize-handle-bottom { - position: absolute; - height: 5px; - cursor: row-resize; - width: 100%; - } - - .resize-handle-top { - top: 0; - } - - .resize-handle-bottom { - bottom: 0; - } - - .resize-handle-left, - .resize-handle-right { - position: absolute; - height: 100%; - cursor: col-resize; - width: 5px; - } - - .resize-handle-left { - left: 0; - } - - .resize-handle-right { - right: 0; - } - ` - ], - template: ` -
-

Drag and pull the edges of the rectangle

-
-
-
-
-
-
-
- ` -}) -export class DemoComponent { - public style: object = {}; - - validate(event: ResizeEvent): boolean { - const MIN_DIMENSIONS_PX: number = 50; - if ( - event.rectangle.width && - event.rectangle.height && - (event.rectangle.width < MIN_DIMENSIONS_PX || - event.rectangle.height < MIN_DIMENSIONS_PX) - ) { - return false; - } - return true; - } - - onResizeEnd(event: ResizeEvent): void { - this.style = { - position: 'fixed', - left: `${event.rectangle.left}px`, - top: `${event.rectangle.top}px`, - width: `${event.rectangle.width}px`, - height: `${event.rectangle.height}px` - }; - } -} diff --git a/demo/demo.module.ts b/demo/demo.module.ts deleted file mode 100644 index 3c26d83..0000000 --- a/demo/demo.module.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; -import { ResizableModule } from '../src'; -import { DemoComponent } from './demo.component'; - -@NgModule({ - declarations: [DemoComponent], - imports: [BrowserModule, ResizableModule], - bootstrap: [DemoComponent] -}) -export class DemoModule {} diff --git a/demo/entry.ts b/demo/entry.ts deleted file mode 100644 index fa42ac9..0000000 --- a/demo/entry.ts +++ /dev/null @@ -1,11 +0,0 @@ -import 'core-js'; -import 'zone.js/dist/zone'; -import { enableProdMode } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; -import { DemoModule } from './demo.module'; - -if (process.env.NODE_ENV === 'production') { - enableProdMode(); -} - -platformBrowserDynamic().bootstrapModule(DemoModule); diff --git a/demo/index.html b/demo/index.html deleted file mode 100644 index 7a2002b..0000000 --- a/demo/index.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - angular 6.0+ resizable element - - - - - - - -
- Loading demo... -
- - - - - diff --git a/dist/CHANGELOG.md b/dist/CHANGELOG.md deleted file mode 100644 index 92a04c7..0000000 --- a/dist/CHANGELOG.md +++ /dev/null @@ -1,589 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - - -## [3.2.4](https://github.com/mattlewis92/angular-resizable-element/compare/v3.2.3...v3.2.4) (2019-02-28) - - -### Bug Fixes - -* restore compatibility with universal ([210decc](https://github.com/mattlewis92/angular-resizable-element/commit/210decc)), closes [#83](https://github.com/mattlewis92/angular-resizable-element/issues/83) - - - - -## [3.2.3](https://github.com/mattlewis92/angular-resizable-element/compare/v3.2.2...v3.2.3) (2019-02-05) - - -### Bug Fixes - -* allow angular 8 peer dependency ([94dc48d](https://github.com/mattlewis92/angular-resizable-element/commit/94dc48d)) -* deprecate the top level resizeEdges option in favour of resize handles ([2f6ac2d](https://github.com/mattlewis92/angular-resizable-element/commit/2f6ac2d)) - - -### Performance Improvements - -* remove mouse move listeners when only using resize handles ([1185f3a](https://github.com/mattlewis92/angular-resizable-element/commit/1185f3a)) - - - - -## [3.2.2](https://github.com/mattlewis92/angular-resizable-element/compare/v3.2.1...v3.2.2) (2018-08-10) - - -### Bug Fixes - -* don't throw errors when immediately destroying the host component ([56e463b](https://github.com/mattlewis92/angular-resizable-element/commit/56e463b)) - - - - -## [3.2.1](https://github.com/mattlewis92/angular-resizable-element/compare/v3.2.0...v3.2.1) (2018-08-03) - - -### Bug Fixes - -* ensure all resizing events are always emitted ([25d6fa3](https://github.com/mattlewis92/angular-resizable-element/commit/25d6fa3)) - - - - -# [3.2.0](https://github.com/mattlewis92/angular-resizable-element/compare/v3.1.0...v3.2.0) (2018-07-23) - - -### Features - -* allow negative resizing of elements ([560bcb1](https://github.com/mattlewis92/angular-resizable-element/commit/560bcb1)) - - - - -# [3.1.0](https://github.com/mattlewis92/angular-resizable-element/compare/v3.0.0...v3.1.0) (2018-06-19) - - -### Features - -* improve default resize cursors ([37fc88e](https://github.com/mattlewis92/angular-resizable-element/commit/37fc88e)) - - - - -# [3.0.0](https://github.com/mattlewis92/angular-resizable-element/compare/v2.0.0...v3.0.0) (2018-05-09) - - -### Features - -* upgrade to angular 6 ([c7e3de6](https://github.com/mattlewis92/angular-resizable-element/commit/c7e3de6)) - - -### BREAKING CHANGES - -* angular 6 and rxjs 6 or higher are now required to use this package - - - - -# [2.0.0](https://github.com/mattlewis92/angular-resizable-element/compare/v1.2.5...v2.0.0) (2017-12-26) - - -### Features - -* export directives with Directive suffix ([0440bbd](https://github.com/mattlewis92/angular-resizable-element/commit/0440bbd)) -* upgrade to angular 5 ([5d6a576](https://github.com/mattlewis92/angular-resizable-element/commit/5d6a576)) -* use lettable rxjs operators ([af7abf7](https://github.com/mattlewis92/angular-resizable-element/commit/af7abf7)) -* use ng-packagr for bundling the package ([c4519a1](https://github.com/mattlewis92/angular-resizable-element/commit/c4519a1)), closes [#79](https://github.com/mattlewis92/angular-resizable-element/issues/79) [#80](https://github.com/mattlewis92/angular-resizable-element/issues/80) - - -### BREAKING CHANGES - -* the global observable prototype is now no longer modified by this package, you must -import rxjs operators yourself. Also rxjs 5.5 or higher is now required to use this library -* The UMD entry point has changed from `angular-resizable-element/dist/umd/angular-resizable-element.js` to `angular-resizable-element/bundles/angular-resizable-element.umd.js` - -System.js users will need to update their configs -* angular 5 or higher is now required to use this package -* The Resizable import is now ResizableDirective and ResizeHandle is now -ResizeHandleDirective - - - - -## [1.2.5](https://github.com/mattlewis92/angular-resizable-element/compare/v1.2.4...v1.2.5) (2017-12-26) - - -### Bug Fixes - -* **resizeHandle:** allow handles to be dynamically shown ([34342aa](https://github.com/mattlewis92/angular-resizable-element/commit/34342aa)), closes [#68](https://github.com/mattlewis92/angular-resizable-element/issues/68) -* resize elements that have css transforms ([f24a746](https://github.com/mattlewis92/angular-resizable-element/commit/f24a746)), closes [#72](https://github.com/mattlewis92/angular-resizable-element/issues/72) -* set the resize cursor globally when resizing ([71d5a05](https://github.com/mattlewis92/angular-resizable-element/commit/71d5a05)), closes [#70](https://github.com/mattlewis92/angular-resizable-element/issues/70) - - - - -## [1.2.4](https://github.com/mattlewis92/angular-resizable-element/compare/v1.2.3...v1.2.4) (2017-10-21) - - -### Bug Fixes - -* allow angular 5 peer dependency ([25cfe50](https://github.com/mattlewis92/angular-resizable-element/commit/25cfe50)) - - - - -## [1.2.3](https://github.com/mattlewis92/angular-resizable-element/compare/v1.2.2...v1.2.3) (2017-09-28) - - -### Bug Fixes - -* Add startingRect scroll position to cloned node. ([#66](https://github.com/mattlewis92/angular-resizable-element/issues/66)) ([a056154](https://github.com/mattlewis92/angular-resizable-element/commit/a056154)) - - - - -## [1.2.2](https://github.com/mattlewis92/angular-resizable-element/compare/v1.2.1...v1.2.2) (2017-08-28) - - -### Bug Fixes - -* ensure mouse event handlers are triggers outside of the angular zone ([23fc6e5](https://github.com/mattlewis92/angular-resizable-element/commit/23fc6e5)), closes [#65](https://github.com/mattlewis92/angular-resizable-element/issues/65) - - - - -## [1.2.1](https://github.com/mattlewis92/angular-resizable-element/compare/v1.2.0...v1.2.1) (2017-08-06) - - -### Bug Fixes - -* **cursor:** change the cursor back to default on IE11 ([a0323e9](https://github.com/mattlewis92/angular-resizable-element/commit/a0323e9)), closes [#62](https://github.com/mattlewis92/angular-resizable-element/issues/62) - - - - -# [1.2.0](https://github.com/mattlewis92/angular-resizable-element/compare/v1.1.2...v1.2.0) (2017-06-12) - - -### Features - -* export Edges and BoundingRectangle interfaces for use within applications ([10051cd](https://github.com/mattlewis92/angular-resizable-element/commit/10051cd)) - - - - -## [1.1.2](https://github.com/mattlewis92/angular-resizable-element/compare/v1.1.1...v1.1.2) (2017-06-10) - - -### Bug Fixes - -* **dragHandle:** fix drag handles on firefox ([1d15bb4](https://github.com/mattlewis92/angular-resizable-element/commit/1d15bb4)), closes [#54](https://github.com/mattlewis92/angular-resizable-element/issues/54) - - - - -## [1.1.1](https://github.com/mattlewis92/angular-resizable-element/compare/v1.1.0...v1.1.1) (2017-05-21) - - -### Bug Fixes - -* set ghost element width and height on resize start ([be5d727](https://github.com/mattlewis92/angular-resizable-element/commit/be5d727)), closes [#53](https://github.com/mattlewis92/angular-resizable-element/issues/53) - - - - -# [1.1.0](https://github.com/mattlewis92/angular-resizable-element/compare/v1.0.0...v1.1.0) (2017-05-12) - - -### Features - -* add a class to the ghost element ([54be6b7](https://github.com/mattlewis92/angular-resizable-element/commit/54be6b7)) - - - - -# [1.0.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.8.1...v1.0.0) (2017-03-24) - - -### Features - -* **ng4:** upgrade to angular 4 ([4c665d2](https://github.com/mattlewis92/angular-resizable-element/commit/4c665d2)) - - -### BREAKING CHANGES - -* **ng4:** angular 4.0 or higher is now required to use this library. The -[upgrade](http://angularjs.blogspot.co.uk/2017/03/angular-400-now-available.html) should be seamless -for most users. - - - - -## [0.8.1](https://github.com/mattlewis92/angular-resizable-element/compare/v0.8.0...v0.8.1) (2017-03-23) - - -### Performance Improvements - -* throttle mousemove listener events ([05f7f7e](https://github.com/mattlewis92/angular-resizable-element/commit/05f7f7e)) -* use shared mouse event listeners across all resizable instances ([2a4b102](https://github.com/mattlewis92/angular-resizable-element/commit/2a4b102)) - - - - -# [0.8.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.7.2...v0.8.0) (2017-03-16) - - -### Features - -* **ghostElementPositioning:** allow ghost element positioning to be configured ([b77c9fc](https://github.com/mattlewis92/angular-resizable-element/commit/b77c9fc)) -* expose Resizable and ResizeHandle directives ([3633040](https://github.com/mattlewis92/angular-resizable-element/commit/3633040)) - - - - -## [0.7.2](https://github.com/mattlewis92/angular-resizable-element/compare/v0.7.0...v0.7.2) (2017-03-04) - - -### Bug Fixes - -* relax peer dependency warning to allow angular 4 ([8232e66](https://github.com/mattlewis92/angular-resizable-element/commit/8232e66)) - - -### Performance Improvements - -* run all rezize events outside the angular zone ([820612e](https://github.com/mattlewis92/angular-resizable-element/commit/820612e)) -* **resizable:** only register mouse move events when a rezize is active ([a74f9e2](https://github.com/mattlewis92/angular-resizable-element/commit/a74f9e2)) -* **resizeHandle:** dynamically register mouse move event listener ([4b20cde](https://github.com/mattlewis92/angular-resizable-element/commit/4b20cde)) - - - - -# [0.7.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.6.1...v0.7.0) (2017-02-28) - - -### Features - -* **cssClasses:** Gives classes to main element depend on state ([8e3f108](https://github.com/mattlewis92/angular-resizable-element/commit/8e3f108)) -* **cursorPrecision:** allow cursor precision value to be edited ([3ce508d](https://github.com/mattlewis92/angular-resizable-element/commit/3ce508d)) - - - - -## [0.6.1](https://github.com/mattlewis92/angular-resizable-element/compare/v0.6.0...v0.6.1) (2017-02-11) - - -### Bug Fixes - -* **universal:** remove MouseEvent reference ([520abce](https://github.com/mattlewis92/angular-resizable-element/commit/520abce)), closes [#41](https://github.com/mattlewis92/angular-resizable-element/issues/41) - - - - -# [0.6.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.5.7...v0.6.0) (2017-02-04) - - -### Features - -* **resizeCursors:** allow resize cursors to be customised ([99d2f66](https://github.com/mattlewis92/angular-resizable-element/commit/99d2f66)), closes [#40](https://github.com/mattlewis92/angular-resizable-element/issues/40) - - - - -## [0.5.7](https://github.com/mattlewis92/angular-resizable-element/compare/v0.5.6...v0.5.7) (2017-01-30) - - -### Bug Fixes - -* use correct touch event properties ([0ab7d40](https://github.com/mattlewis92/angular-resizable-element/commit/0ab7d40)), closes [#39](https://github.com/mattlewis92/angular-resizable-element/issues/39) - - - - -## [0.5.6](https://github.com/mattlewis92/angular-resizable-element/compare/v0.5.5...v0.5.6) (2017-01-25) - - -### Bug Fixes - -* element should resize on touch events ([aa169c7](https://github.com/mattlewis92/angular-resizable-element/commit/aa169c7)), closes [#36](https://github.com/mattlewis92/angular-resizable-element/issues/36) - - - - -## [0.5.5](https://github.com/mattlewis92/angular-resizable-element/compare/v0.5.4...v0.5.5) (2017-01-11) - - -### Bug Fixes - -* add width and height to cloned node ([75ce122](https://github.com/mattlewis92/angular-resizable-element/commit/75ce122)), closes [#31](https://github.com/mattlewis92/angular-resizable-element/issues/31) -* keep cursor while resizing ([93a5c4e](https://github.com/mattlewis92/angular-resizable-element/commit/93a5c4e)), closes [#33](https://github.com/mattlewis92/angular-resizable-element/issues/33) - - - - -## [0.5.4](https://github.com/mattlewis92/angular-resizable-element/compare/v0.5.3...v0.5.4) (2016-12-11) - - -### Bug Fixes - -* **cursor:** reset the cursor instead of changing it to auto ([514851f](https://github.com/mattlewis92/angular-resizable-element/commit/514851f)) - - - - -## [0.5.3](https://github.com/mattlewis92/angular-resizable-element/compare/v0.5.2...v0.5.3) (2016-11-19) - - -### Bug Fixes - -* unsubscribe all observables when the component is destroyed ([d5ea756](https://github.com/mattlewis92/angular-resizable-element/commit/d5ea756)), closes [#27](https://github.com/mattlewis92/angular-resizable-element/issues/27) - - - - -## [0.5.2](https://github.com/mattlewis92/angular-resizable-element/compare/v0.5.1...v0.5.2) (2016-11-05) - - -### Bug Fixes - -* **aot:** aot compatibility ([9236e02](https://github.com/mattlewis92/angular-resizable-element/commit/9236e02)) - - - - -## [0.5.1](https://github.com/mattlewis92/angular-resizable-element/compare/v0.5.0...v0.5.1) (2016-11-03) - - -### Bug Fixes - -* dont change the cursor when resizing an element ([697c52c](https://github.com/mattlewis92/angular-resizable-element/commit/697c52c)), closes [#24](https://github.com/mattlewis92/angular-resizable-element/issues/24) - - - - -# [0.5.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.4.1...v0.5.0) (2016-10-29) - - -### Bug Fixes - -* fix resizing via a drag handle ([5f7f468](https://github.com/mattlewis92/angular-resizable-element/commit/5f7f468)) -* prevent text from being selected when resizing an element ([5571069](https://github.com/mattlewis92/angular-resizable-element/commit/5571069)), closes [#22](https://github.com/mattlewis92/angular-resizable-element/issues/22) - - -### Features - -* rename the library from angular2-resizable to angular-resizable-element ([927235e](https://github.com/mattlewis92/angular-resizable-element/commit/927235e)), closes [#21](https://github.com/mattlewis92/angular-resizable-element/issues/21) -* rename the resize output to resizing ([9597986](https://github.com/mattlewis92/angular-resizable-element/commit/9597986)), closes [#20](https://github.com/mattlewis92/angular-resizable-element/issues/20) - - -### BREAKING CHANGES - -* The library has been renamed to `angular-resizable-element`. - -The UMD entry point has changed to -``` -node_modules/angular-resizable-element/dist/umd/angular-resizable-element.js -``` -* Before -``` -(resize)="onResize($event)" -``` - -After: -``` -(resizing)="onResizing($event)" -``` - - - - -## [0.4.1](https://github.com/mattlewis92/angular-resizable-element/compare/v0.4.0...v0.4.1) (2016-09-28) - - -### Bug Fixes - -* **typings:** dont include reference to core-js ([68dc84f](https://github.com/mattlewis92/angular-resizable-element/commit/68dc84f)) - - - - -# [0.4.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.3.3...v0.4.0) (2016-09-25) - - -### Features - -* **build:** support offline template compilation ([f3fe12a](https://github.com/mattlewis92/angular-resizable-element/commit/f3fe12a)) - - -### BREAKING CHANGES - -* build: For System.js users the path to the UMD files has changed: - -Before: -``` -node_modules/angular2-resizable/angular2-resizable.js -``` - -After: -``` -node_modules/angular2-resizable/dist/umd/angular2-resizable.js -``` - - - - -## [0.3.3](https://github.com/mattlewis92/angular-resizable-element/compare/v0.3.2...v0.3.3) (2016-09-13) - - -### Bug Fixes - -* **peerDependencies:** allow any versions of angular post RC5 ([cbe088f](https://github.com/mattlewis92/angular-resizable-element/commit/cbe088f)) - - - - -## [0.3.2](https://github.com/mattlewis92/angular-resizable-element/compare/v0.3.1...v0.3.2) (2016-09-03) - - -### Features - -* **angular:** support RC6 ([d5b18cc](https://github.com/mattlewis92/angular-resizable-element/commit/d5b18cc)) - - - - -## [0.3.1](https://github.com/mattlewis92/angular-resizable-element/compare/v0.3.0...v0.3.1) (2016-08-25) - - -### Bug Fixes - -* **rxjs:** use correct rxjs operator imports in dist ([858b3f8](https://github.com/mattlewis92/angular-resizable-element/commit/858b3f8)), closes [#16](https://github.com/mattlewis92/angular-resizable-element/issues/16) - - - - -# [0.3.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.2.1...v0.3.0) (2016-08-12) - - -### Features - -* **events:** rename all outputs to drop the on prefix ([9c76aac](https://github.com/mattlewis92/angular-resizable-element/commit/9c76aac)) -* directive selectors are now camel case instead of dash case ([ffad2ca](https://github.com/mattlewis92/angular-resizable-element/commit/ffad2ca)) -* upgrade to angular RC5 ([9557c0a](https://github.com/mattlewis92/angular-resizable-element/commit/9557c0a)) - - -### BREAKING CHANGES - -* `mwl-resizable` is now `mwlResizable` and `mwl-resize-handle` is now `mwlResizeHandle` -* Angular RC5 is now required - -The Resizable and ResizeHandle directives are now no longer exported. Instead you must use the ResizableModule. See the readme or the demo app for an example of how to do this. -* events: The `onResizeStart` output has been renamed to `resizeStart` - -The `onResize` output has been renamed to `resize` - -The `onResizeEnd` output has been renamed to `resizeEnd` - - - - -## [0.2.1](https://github.com/mattlewis92/angular-resizable-element/compare/v0.2.0...v0.2.1) (2016-07-15) - - -### Bug Fixes - -* **demo:** fix broken demo ([0a5bf11](https://github.com/mattlewis92/angular-resizable-element/commit/0a5bf11)) - - - - -# [0.2.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.1.0...v0.2.0) (2016-07-15) - - -### Bug Fixes - -* create a clone of the ghost element instead of applying styling to the host ([fa73345](https://github.com/mattlewis92/angular-resizable-element/commit/fa73345)), closes [#15](https://github.com/mattlewis92/angular-resizable-element/issues/15) -* only resize when the cursor is within the bounding rectangle ([dedc3bb](https://github.com/mattlewis92/angular-resizable-element/commit/dedc3bb)) - - -### BREAKING CHANGES - -* `enableResizeStyling` has been renamed to `enableGhostResize` - - - - -# [0.1.0](https://github.com/mattlewis92/angular-resizable-element/compare/v0.0.3...v0.1.0) (2016-06-26) - - -### Bug Fixes - -* **mousedrag:** cancel the previous mousedrag observable when starting a new drag ([149c1a4](https://github.com/mattlewis92/angular-resizable-element/commit/149c1a4)), closes [#9](https://github.com/mattlewis92/angular-resizable-element/issues/9) -* **onResizeEnd:** call with co-ordinates of last valid resize rather than where the mouse up event w ([eb314fd](https://github.com/mattlewis92/angular-resizable-element/commit/eb314fd)) -* **onResizeStart:** ensure the starting rectangle is a POJO rather than a bounding rectangle ([81fe0b4](https://github.com/mattlewis92/angular-resizable-element/commit/81fe0b4)) -* cancel mousedrag event when either a mouseup or mousedown event fires ([c76be59](https://github.com/mattlewis92/angular-resizable-element/commit/c76be59)) -* disable dragging effects on resizable elements on webkit browsers ([59078e2](https://github.com/mattlewis92/angular-resizable-element/commit/59078e2)) -* renamed directive selector from mwl-resizeable to mwl-resizable ([c60b3f5](https://github.com/mattlewis92/angular-resizable-element/commit/c60b3f5)) - - -### Features - -* **disableResize:** support completely disabling resizing an element ([9f9c54a](https://github.com/mattlewis92/angular-resizable-element/commit/9f9c54a)), closes [#13](https://github.com/mattlewis92/angular-resizable-element/issues/13) -* expose the amount each edge was resized on resize events ([d664038](https://github.com/mattlewis92/angular-resizable-element/commit/d664038)), closes [#11](https://github.com/mattlewis92/angular-resizable-element/issues/11) -* **enableResizeStyling:** make temporary resizing of the element opt-in by default so users can con ([4c59b05](https://github.com/mattlewis92/angular-resizable-element/commit/4c59b05)), closes [#5](https://github.com/mattlewis92/angular-resizable-element/issues/5) -* **resizeEdges:** allow the resize edges to be customised ([60c2e08](https://github.com/mattlewis92/angular-resizable-element/commit/60c2e08)), closes [#8](https://github.com/mattlewis92/angular-resizable-element/issues/8) -* **resizeHandles:** add support for nesting resize handles inside the element ([1af705a](https://github.com/mattlewis92/angular-resizable-element/commit/1af705a)), closes [#10](https://github.com/mattlewis92/angular-resizable-element/issues/10) -* **resizeSnapGrid:** allow resizing to fit to a snap grid ([74424ba](https://github.com/mattlewis92/angular-resizable-element/commit/74424ba)), closes [#3](https://github.com/mattlewis92/angular-resizable-element/issues/3) -* **validate:** provide a way for resize events to be validated ([4da938d](https://github.com/mattlewis92/angular-resizable-element/commit/4da938d)), closes [#12](https://github.com/mattlewis92/angular-resizable-element/issues/12) - - -### BREAKING CHANGES - -* enableResizeStyling: the element will no longer have its styles changed by default when dragging and -resizing. You can now re-enable it by setting `[enableResizeStyling]="true"` on the element. -* the `$event.edges` object values now contain numbers instead of booleans -* - rename the directive from mwl-resizeable to mwl-resizable -* resizeEdges: by default the element is no longer resizable. - -You must specify `[resizeEdges]={top: true, bottom: true, left: true, right: true}` to get the old behaviour back - - - - -## [0.0.3](https://github.com/mattlewis92/angular-resizable-element/compare/v0.0.2...v0.0.3) (2016-06-13) - - -### Bug Fixes - -* import missing rxjs operators ([300ac10](https://github.com/mattlewis92/angular-resizable-element/commit/300ac10)) - - - - -## [0.0.2](https://github.com/mattlewis92/angular-resizable-element/compare/v0.0.1...v0.0.2) (2016-06-13) - - -### Bug Fixes - -* **types:** export Edges and BoundingRectangle types ([fe49114](https://github.com/mattlewis92/angular-resizable-element/commit/fe49114)) -* dont bundle rxjs with the library ([7b1280e](https://github.com/mattlewis92/angular-resizable-element/commit/7b1280e)) - - - - -## 0.0.1 (2016-06-13) - - -### Bug Fixes - -* allow the element to be resized multiple times ([bf497d2](https://github.com/mattlewis92/angular-resizable-element/commit/bf497d2)) -* **drag:** disable user dragging ([053fb0e](https://github.com/mattlewis92/angular-resizable-element/commit/053fb0e)) -* reset element styles on mousedown if there was a previous uncancelled resize ([a8e5cd3](https://github.com/mattlewis92/angular-resizable-element/commit/a8e5cd3)) -* **outputs:** make outputs sync to prevent ui flicker ([032ea5a](https://github.com/mattlewis92/angular-resizable-element/commit/032ea5a)) -* **typescript:** add missing types ([e722a86](https://github.com/mattlewis92/angular-resizable-element/commit/e722a86)) - - -### Features - -* improve transforms, add resize events ([0959a12](https://github.com/mattlewis92/angular-resizable-element/commit/0959a12)) -* initial WIP resizable implementation ([22af52f](https://github.com/mattlewis92/angular-resizable-element/commit/22af52f)) -* show the cursor when mousing over the edge of the element ([f440c87](https://github.com/mattlewis92/angular-resizable-element/commit/f440c87)) -* support resizing from corners ([bac87e3](https://github.com/mattlewis92/angular-resizable-element/commit/bac87e3)), closes [#4](https://github.com/mattlewis92/angular-resizable-element/issues/4) diff --git a/dist/LICENSE b/dist/LICENSE deleted file mode 100644 index cf7d026..0000000 --- a/dist/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Matt Lewis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/dist/README.md b/dist/README.md deleted file mode 100644 index 7099a59..0000000 --- a/dist/README.md +++ /dev/null @@ -1,108 +0,0 @@ -# angular resizable element - -[![Build Status](https://travis-ci.org/mattlewis92/angular-resizable-element.svg?branch=master)](https://travis-ci.org/mattlewis92/angular-resizable-element) -[![codecov](https://codecov.io/gh/mattlewis92/angular-resizable-element/branch/master/graph/badge.svg)](https://codecov.io/gh/mattlewis92/angular-resizable-element) -[![npm version](https://badge.fury.io/js/angular-resizable-element.svg)](http://badge.fury.io/js/angular-resizable-element) -[![devDependency Status](https://david-dm.org/mattlewis92/angular-resizable-element/dev-status.svg)](https://david-dm.org/mattlewis92/angular-resizable-element?type=dev) -[![GitHub issues](https://img.shields.io/github/issues/mattlewis92/angular-resizable-element.svg)](https://github.com/mattlewis92/angular-resizable-element/issues) -[![GitHub stars](https://img.shields.io/github/stars/mattlewis92/angular-resizable-element.svg)](https://github.com/mattlewis92/angular-resizable-element/stargazers) -[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/mattlewis92/angular-resizable-element/master/LICENSE) - -## Demo - -https://mattlewis92.github.io/angular-resizable-element/demo/ - -## Table of contents - -- [About](#about) -- [Installation](#installation) -- [Documentation](#documentation) -- [Development](#development) -- [License](#license) - -## About - -An angular 6.0+ directive that allows an element to be dragged and resized - -## Installation - -Install through npm: - -``` -npm install --save angular-resizable-element -``` - -Then use it in your app like so: - -```typescript -import { Component } from '@angular/core'; -import { ResizeEvent } from 'angular-resizable-element'; - -@Component({ - selector: 'demo-app', - // you should add some more styles to the element. See the demo folder for a more fleshed out example - styles: [ - ` - mwlResizable { - box-sizing: border-box; // required for the enableGhostResize option to work - } - ` - ], - template: ` -
- ` -}) -export class MyComponent { - onResizeEnd(event: ResizeEvent): void { - console.log('Element was resized', event); - } -} - -// now use within your apps module -import { NgModule } from '@angular/core'; -import { ResizableModule } from 'angular-resizable-element'; - -@NgModule({ - declarations: [MyComponent], - imports: [ResizableModule], - bootstrap: [MyComponent] -}) -class MyModule {} -``` - -You may also find it useful to view the [demo source](https://github.com/mattlewis92/angular-resizable-element/blob/master/demo/demo.component.ts). - -## Documentation - -All documentation is auto-generated from the source and can be viewed here: -https://mattlewis92.github.io/angular-resizable-element/docs/ - -## Development - -### Prepare your environment - -- Install [Node.js](http://nodejs.org/) and NPM (should come with) -- Install local dev dependencies: `npm install` while current directory is this repo - -### Development server - -Run `npm start` to start a development server on port 8000 with auto reload + tests. - -### Testing - -Run `npm test` to run tests once or `npm run test:watch` to continually run tests. - -### Release - -```bash -npm run release -``` - -## License - -MIT diff --git a/dist/package.json b/dist/package.json deleted file mode 100644 index 1915d21..0000000 --- a/dist/package.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "name": "angular-resizable-element", - "version": "3.2.4", - "description": "An angular 6.0+ directive that allows an element to be dragged and resized", - "repository": { - "type": "git", - "url": "git+https://github.com/mattlewis92/angular-resizable-element.git" - }, - "keywords": [ - "angular", - "angular2", - "angular6", - "resizable" - ], - "author": "Matt Lewis", - "license": "MIT", - "bugs": { - "url": "https://github.com/mattlewis92/angular-resizable-element/issues" - }, - "homepage": "https://github.com/mattlewis92/angular-resizable-element#readme", - "devDependencies": { - "@angular/common": "^7.2.3", - "@angular/compiler": "^7.2.3", - "@angular/compiler-cli": "^7.2.3", - "@angular/core": "^7.2.3", - "@angular/platform-browser": "^7.2.3", - "@angular/platform-browser-dynamic": "^7.2.3", - "@compodoc/compodoc": "^1.1.7", - "@types/chai": "^4.1.7", - "@types/mocha": "^5.2.5", - "@types/sinon": "^7.0.5", - "@types/sinon-chai": "^3.2.2", - "@types/webpack": "^4.4.24", - "chai": "^4.2.0", - "codecov-lite": "^0.1.3", - "codelyzer": "^4.5.0", - "commitizen": "^3.0.5", - "concurrently": "^4.1.0", - "copyfiles": "^2.1.0", - "core-js": "^2.6.3", - "cz-conventional-changelog": "^2.1.0", - "fork-ts-checker-webpack-plugin": "^0.5.2", - "husky": "^1.3.1", - "istanbul-instrumenter-loader": "^3.0.1", - "karma": "^4.0.0", - "karma-chrome-launcher": "^2.1.1", - "karma-coverage-istanbul-reporter": "^2.0.4", - "karma-mocha": "^1.3.0", - "karma-sourcemap-loader": "^0.3.7", - "karma-webpack": "^4.0.0-rc.6", - "mocha": "^5.2.0", - "ng-packagr": "^4.7.0", - "prettier": "^1.16.4", - "pretty-quick": "^1.10.0", - "rxjs": "^6.4.0", - "sinon": "^7.2.3", - "sinon-chai": "^3.3.0", - "standard-version": "^4.4.0", - "ts-loader": "^5.3.3", - "ts-node": "^8.0.2", - "tsickle": "0.34.0", - "tslint": "^5.12.1", - "tslint-config-mwl": "^0.5.2", - "tslint-loader": "^3.6.0", - "typescript": "~3.2.4", - "validate-commit-msg": "^2.8.0", - "webpack": "^4.29.1", - "webpack-cli": "^3.2.3", - "webpack-dev-server": "^3.1.14", - "zone.js": "^0.8.29" - }, - "peerDependencies": { - "@angular/core": ">=6.0.0 <9.0.0" - }, - "config": { - "commitizen": { - "path": "node_modules/cz-conventional-changelog" - } - }, - "husky": { - "hooks": { - "commit-msg": "validate-commit-msg", - "pre-commit": "pretty-quick --staged" - } - }, - "main": "bundles/angular-resizable-element.umd.js", - "module": "fesm5/angular-resizable-element.js", - "es2015": "fesm2015/angular-resizable-element.js", - "esm5": "esm5/angular-resizable-element.js", - "esm2015": "esm2015/angular-resizable-element.js", - "fesm5": "fesm5/angular-resizable-element.js", - "fesm2015": "fesm2015/angular-resizable-element.js", - "typings": "angular-resizable-element.d.ts", - "metadata": "angular-resizable-element.metadata.json", - "sideEffects": false, - "dependencies": { - "tslib": "^1.9.0" - } -} diff --git a/dist/esm2015/angular-resizable-element.js b/esm2015/angular-resizable-element.js similarity index 100% rename from dist/esm2015/angular-resizable-element.js rename to esm2015/angular-resizable-element.js diff --git a/dist/esm2015/index.js b/esm2015/index.js similarity index 100% rename from dist/esm2015/index.js rename to esm2015/index.js diff --git a/dist/esm2015/interfaces/bounding-rectangle.interface.js b/esm2015/interfaces/bounding-rectangle.interface.js similarity index 100% rename from dist/esm2015/interfaces/bounding-rectangle.interface.js rename to esm2015/interfaces/bounding-rectangle.interface.js diff --git a/dist/esm2015/interfaces/edges.interface.js b/esm2015/interfaces/edges.interface.js similarity index 100% rename from dist/esm2015/interfaces/edges.interface.js rename to esm2015/interfaces/edges.interface.js diff --git a/dist/esm2015/interfaces/resize-event.interface.js b/esm2015/interfaces/resize-event.interface.js similarity index 100% rename from dist/esm2015/interfaces/resize-event.interface.js rename to esm2015/interfaces/resize-event.interface.js diff --git a/dist/esm2015/resizable.directive.js b/esm2015/resizable.directive.js similarity index 100% rename from dist/esm2015/resizable.directive.js rename to esm2015/resizable.directive.js diff --git a/dist/esm2015/resizable.module.js b/esm2015/resizable.module.js similarity index 100% rename from dist/esm2015/resizable.module.js rename to esm2015/resizable.module.js diff --git a/dist/esm2015/resize-handle.directive.js b/esm2015/resize-handle.directive.js similarity index 100% rename from dist/esm2015/resize-handle.directive.js rename to esm2015/resize-handle.directive.js diff --git a/dist/esm5/angular-resizable-element.js b/esm5/angular-resizable-element.js similarity index 100% rename from dist/esm5/angular-resizable-element.js rename to esm5/angular-resizable-element.js diff --git a/dist/esm5/index.js b/esm5/index.js similarity index 100% rename from dist/esm5/index.js rename to esm5/index.js diff --git a/dist/esm5/interfaces/bounding-rectangle.interface.js b/esm5/interfaces/bounding-rectangle.interface.js similarity index 100% rename from dist/esm5/interfaces/bounding-rectangle.interface.js rename to esm5/interfaces/bounding-rectangle.interface.js diff --git a/dist/esm5/interfaces/edges.interface.js b/esm5/interfaces/edges.interface.js similarity index 100% rename from dist/esm5/interfaces/edges.interface.js rename to esm5/interfaces/edges.interface.js diff --git a/dist/esm5/interfaces/resize-event.interface.js b/esm5/interfaces/resize-event.interface.js similarity index 100% rename from dist/esm5/interfaces/resize-event.interface.js rename to esm5/interfaces/resize-event.interface.js diff --git a/dist/esm5/resizable.directive.js b/esm5/resizable.directive.js similarity index 100% rename from dist/esm5/resizable.directive.js rename to esm5/resizable.directive.js diff --git a/dist/esm5/resizable.module.js b/esm5/resizable.module.js similarity index 100% rename from dist/esm5/resizable.module.js rename to esm5/resizable.module.js diff --git a/dist/esm5/resize-handle.directive.js b/esm5/resize-handle.directive.js similarity index 100% rename from dist/esm5/resize-handle.directive.js rename to esm5/resize-handle.directive.js diff --git a/dist/fesm2015/angular-resizable-element.js b/fesm2015/angular-resizable-element.js similarity index 100% rename from dist/fesm2015/angular-resizable-element.js rename to fesm2015/angular-resizable-element.js diff --git a/dist/fesm2015/angular-resizable-element.js.map b/fesm2015/angular-resizable-element.js.map similarity index 100% rename from dist/fesm2015/angular-resizable-element.js.map rename to fesm2015/angular-resizable-element.js.map diff --git a/dist/fesm5/angular-resizable-element.js b/fesm5/angular-resizable-element.js similarity index 100% rename from dist/fesm5/angular-resizable-element.js rename to fesm5/angular-resizable-element.js diff --git a/dist/fesm5/angular-resizable-element.js.map b/fesm5/angular-resizable-element.js.map similarity index 100% rename from dist/fesm5/angular-resizable-element.js.map rename to fesm5/angular-resizable-element.js.map diff --git a/dist/index.d.ts b/index.d.ts similarity index 100% rename from dist/index.d.ts rename to index.d.ts diff --git a/dist/interfaces/bounding-rectangle.interface.d.ts b/interfaces/bounding-rectangle.interface.d.ts similarity index 100% rename from dist/interfaces/bounding-rectangle.interface.d.ts rename to interfaces/bounding-rectangle.interface.d.ts diff --git a/dist/interfaces/edges.interface.d.ts b/interfaces/edges.interface.d.ts similarity index 100% rename from dist/interfaces/edges.interface.d.ts rename to interfaces/edges.interface.d.ts diff --git a/dist/interfaces/resize-event.interface.d.ts b/interfaces/resize-event.interface.d.ts similarity index 100% rename from dist/interfaces/resize-event.interface.d.ts rename to interfaces/resize-event.interface.d.ts diff --git a/karma.conf.ts b/karma.conf.ts deleted file mode 100644 index 02a027d..0000000 --- a/karma.conf.ts +++ /dev/null @@ -1,105 +0,0 @@ -import * as webpack from 'webpack'; -const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); - -export default function(config: any) { - config.set({ - // base path that will be used to resolve all patterns (eg. files, exclude) - basePath: './', - - // frameworks to use - // available frameworks: https://npmjs.org/browse/keyword/karma-adapter - frameworks: ['mocha'], - - // list of files / patterns to load in the browser - files: ['test/entry.ts'], - - // preprocess matching files before serving them to the browser - // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor - preprocessors: { - 'test/entry.ts': ['webpack', 'sourcemap'] - }, - - webpack: { - mode: 'development', - resolve: { - extensions: ['.ts', '.js'] - }, - module: { - rules: [ - { - test: /\.ts$/, - loader: 'tslint-loader', - exclude: /node_modules/, - enforce: 'pre', - options: { - emitErrors: config.singleRun, - failOnHint: config.singleRun - } - }, - { - test: /\.ts$/, - loader: 'ts-loader', - exclude: /node_modules/, - options: { - transpileOnly: !config.singleRun - } - }, - { - test: /src\/.+\.ts$/, - exclude: /(node_modules|\.spec\.ts$)/, - loader: 'istanbul-instrumenter-loader', - enforce: 'post' - }, - { - test: /node_modules\/@angular\/core\/.+\/core\.js$/, - parser: { - system: true // disable `System.import() is deprecated and will be removed soon. Use import() instead.` warning - } - } - ] - }, - plugins: [ - new webpack.SourceMapDevToolPlugin({ - filename: null, - test: /\.(ts|js)($|\?)/i - }), - new webpack.ContextReplacementPlugin( - /angular(\\|\/)core(\\|\/)fesm5/, - __dirname + '/src' - ), - ...(!config.singleRun - ? [ - new ForkTsCheckerWebpackPlugin({ - watch: ['./src', './test'] - }) - ] - : []) - ], - optimization: { - noEmitOnErrors: config.singleRun - } - }, - - coverageIstanbulReporter: { - reports: ['text-summary', 'html', 'lcovonly'], - fixWebpackSourcePaths: true - }, - - // test results reporter to use - // possible values: 'dots', 'progress' - // available reporters: https://npmjs.org/browse/keyword/karma-reporter - reporters: ['progress', 'coverage-istanbul'], - - // level of logging - // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG - logLevel: config.LOG_INFO, - - mime: { - 'text/x-typescript': ['ts'] - }, - - // start these browsers - // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - browsers: ['ChromeHeadless'] - }); -} diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 4aba313..0000000 --- a/package-lock.json +++ /dev/null @@ -1,17453 +0,0 @@ -{ - "name": "angular-resizable-element", - "version": "3.2.4", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@angular/common": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.2.3.tgz", - "integrity": "sha512-VZOTZdvkitaKEhkxL6daHxPcKqAFwNJm0U4NFB4LRP9KspsFTE60QFVB63o129PTIH9iOQ2D3HRKSRl4o78ZKg==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "@angular/compiler": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.2.3.tgz", - "integrity": "sha512-UM6n4MyZkR5+VVjlwhLH8IfqdWBkdFcF5at4ckJXOJ/gkIUq97irbis9pGj1b0TO7MAl8uhF4b68xe5lk8b49g==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "@angular/compiler-cli": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.2.3.tgz", - "integrity": "sha512-31hcfTrU2GW66cvvaS629dNVPfiUrUWPncI28optvmKHBaH0mFqkdYNgabuslsXZV5AeidKMUJvR7GITjtvkQA==", - "dev": true, - "requires": { - "canonical-path": "1.0.0", - "chokidar": "^1.4.2", - "convert-source-map": "^1.5.1", - "dependency-graph": "^0.7.2", - "magic-string": "^0.25.0", - "minimist": "^1.2.0", - "reflect-metadata": "^0.1.2", - "shelljs": "^0.8.1", - "source-map": "^0.6.1", - "tslib": "^1.9.0", - "yargs": "9.0.1" - } - }, - "@angular/core": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.2.3.tgz", - "integrity": "sha512-6Ql+sJJnrsxh8O0/IgIP1GgT4eLOHk+dlBs7zBbjstmLuhaQdY+awO9WKoQow+TiD1Go7FW1J3vZ2PTWXKxqjQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "@angular/platform-browser": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.2.3.tgz", - "integrity": "sha512-DH0Y2lgEgcrP1I/DUQB/krL7Ob7yL685fu4sRapW17SndTQa2pqSFMBVf+mN3FupTXp7nJHSvlIktzedIk04+g==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "@angular/platform-browser-dynamic": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.2.3.tgz", - "integrity": "sha512-M8Kiz5FUhnFybJuk/mgOhBjVbRgKDC4bGWKWH9Z9SXBR2dS/FL3QOJsLIthQcWlHOzSoJdEoPBRhn0R4pyLBSw==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/generator": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.2.tgz", - "integrity": "sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ==", - "dev": true, - "requires": { - "@babel/types": "^7.3.2", - "jsesc": "^2.5.1", - "lodash": "^4.17.10", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", - "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - } - } - }, - "@babel/parser": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.2.tgz", - "integrity": "sha512-QzNUC2RO1gadg+fs21fi0Uu0OuGNzRKEmgCxoLNzbCdoprLwjfmZwzUrpUNfJPaVRwBpDY47A17yYEGWyRelnQ==", - "dev": true - }, - "@babel/template": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", - "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.2.2", - "@babel/types": "^7.2.2" - } - }, - "@babel/traverse": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", - "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.2.2", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.2.3", - "@babel/types": "^7.2.2", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.10" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "globals": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.10.0.tgz", - "integrity": "sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.2.tgz", - "integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.10", - "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - } - } - }, - "@compodoc/compodoc": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.1.7.tgz", - "integrity": "sha512-bTqkv75T9b+3OxG517YL+5B0npAG0Q5nOMAk562Idr/fICTTHQ/xzSBsTptZ4QqYmtzRMV1OqOlk74FXfGPZWw==", - "dev": true, - "requires": { - "@compodoc/ngd-transformer": "^2.0.0", - "chalk": "^2.4.1", - "cheerio": "^1.0.0-rc.2", - "chokidar": "^2.0.4", - "colors": "^1.3.2", - "commander": "2.19.0", - "cosmiconfig": "^5.0.7", - "fancy-log": "^1.3.2", - "findit2": "^2.2.3", - "fs-extra": "^7.0.1", - "glob": "^7.1.3", - "handlebars": "4.0.10", - "html-entities": "^1.2.1", - "i18next": "^12.1.0", - "inside": "^1.0.0", - "json5": "^2.1.0", - "live-server": "1.2.1", - "lodash": "^4.17.11", - "lunr": "2.3.5", - "marked": "^0.4.0", - "opencollective": "^1.0.3", - "os-name": "^3.0.0", - "traverse": "^0.6.6", - "ts-simple-ast": "12.4.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "@compodoc/ngd-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.0.0.tgz", - "integrity": "sha512-6HpYvXRZBdIYFojWxW5EVNkhYPmblytCve62CNoYBSWfy++vTGH7Ypg2Bhjg2CsqeV8JOVxrPO7JM9M3MgWKEA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "fancy-log": "^1.3.2", - "typescript": "^2.4.2" - }, - "dependencies": { - "typescript": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", - "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", - "dev": true - } - } - }, - "@compodoc/ngd-transformer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.0.0.tgz", - "integrity": "sha512-9J0KkmuuuvDHxH0oREgrgbqdEFqcltQXIBofeYdIyMKzI3A+pN1Ji4zfi7x1ql0Ax7qQKemp8XWP+cCpP0qY+w==", - "dev": true, - "requires": { - "@compodoc/ngd-core": "~2.0.0", - "dot": "^1.1.1", - "fs-extra": "^4.0.1", - "viz.js": "^1.8.0" - }, - "dependencies": { - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } - } - }, - "@dsherret/to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@dsherret/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-H2R13IvZdM6gei2vOGSzF7HdMyw=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - } - }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@ngtools/json-schema": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.1.0.tgz", - "integrity": "sha1-w6DFRNYjkqzCgTpCyKDcb1j4aSI=", - "dev": true - }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", - "dev": true - }, - "@phenomnomnominal/tsquery": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-3.0.0.tgz", - "integrity": "sha512-SW8lKitBHWJ9fAYkJ9kJivuctwNYCh3BUxLdH0+XiR1GPBiu+7qiZzh8p8jqlj1LgVC1TbvfNFroaEsmYlL8Iw==", - "dev": true, - "requires": { - "esquery": "^1.0.1" - } - }, - "@sinonjs/commons": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.0.tgz", - "integrity": "sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/formatio": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.1.0.tgz", - "integrity": "sha512-ZAR2bPHOl4Xg6eklUGpsdiIJ4+J1SNag1DHHrG/73Uz/nVwXqjgUtRPLoS+aVyieN9cSbc0E4LsU984tWcDyNg==", - "dev": true, - "requires": { - "@sinonjs/samsam": "^2 || ^3" - } - }, - "@sinonjs/samsam": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.1.0.tgz", - "integrity": "sha512-IXio+GWY+Q8XUjHUOgK7wx8fpvr7IFffgyXb1bnJFfX3001KmHt35Zq4tp7MXZyjJPCLPuadesDYNk41LYtVjw==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.0.2", - "array-from": "^2.1.1", - "lodash.get": "^4.4.2" - } - }, - "@types/anymatch": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.0.tgz", - "integrity": "sha512-7WcbyctkE8GTzogDb0ulRAEw7v8oIS54ft9mQTU7PfM0hp5e+8kpa+HeQ7IQrFbKtJXBKcZ4bh+Em9dTw5L6AQ==", - "dev": true - }, - "@types/chai": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.7.tgz", - "integrity": "sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA==", - "dev": true - }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "@types/mocha": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz", - "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==", - "dev": true - }, - "@types/node": { - "version": "10.12.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.21.tgz", - "integrity": "sha512-CBgLNk4o3XMnqMc0rhb6lc77IwShMEglz05deDcn2lQxyXEZivfwgYJu7SMha9V5XcrP6qZuevTHV/QrN2vjKQ==", - "dev": true - }, - "@types/sinon": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-7.0.5.tgz", - "integrity": "sha512-4DShbH857bZVOY4tPi1RQJNrLcf89hEtU0klZ9aYTMbtt95Ok4XdPqqcbtGOHIbAHMLSzQP8Uw/6qtBBqyloww==", - "dev": true - }, - "@types/sinon-chai": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.2.tgz", - "integrity": "sha512-5zSs2AslzyPZdOsbm2NRtuSNAI2aTWzNKOHa/GRecKo7a5efYD7qGcPxMZXQDayVXT2Vnd5waXxBvV31eCZqiA==", - "dev": true, - "requires": { - "@types/chai": "*", - "@types/sinon": "*" - } - }, - "@types/tapable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.4.tgz", - "integrity": "sha512-78AdXtlhpCHT0K3EytMpn4JNxaf5tbqbLcbIRoQIHzpTIyjpxLQKRoxU55ujBXAtg3Nl2h/XWvfDa9dsMOd0pQ==", - "dev": true - }, - "@types/uglify-js": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.0.4.tgz", - "integrity": "sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - } - }, - "@types/webpack": { - "version": "4.4.24", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.4.24.tgz", - "integrity": "sha512-yg99CjvB7xZ/iuHrsZ7dkGKoq/FRDzqLzAxKh2EmTem6FWjzrty4FqCqBYuX5z+MFwSaaQGDAX4Q9HQkLjGLnQ==", - "dev": true, - "requires": { - "@types/anymatch": "*", - "@types/node": "*", - "@types/tapable": "*", - "@types/uglify-js": "*", - "source-map": "^0.6.0" - } - }, - "@webassemblyjs/ast": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", - "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", - "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", - "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", - "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", - "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.7.11" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", - "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", - "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", - "dev": true - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", - "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", - "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", - "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", - "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.1" - } - }, - "@webassemblyjs/utf8": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", - "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", - "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/helper-wasm-section": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-opt": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "@webassemblyjs/wast-printer": "1.7.11" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", - "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", - "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", - "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", - "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/floating-point-hex-parser": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-code-frame": "1.7.11", - "@webassemblyjs/helper-fsm": "1.7.11", - "@xtuc/long": "4.2.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", - "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11", - "@xtuc/long": "4.2.1" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", - "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", - "dev": true - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "dev": true, - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.7.tgz", - "integrity": "sha512-HNJNgE60C9eOTgn974Tlp3dpLZdUr+SoxxDwPaY9J/kDNOLQTkaDgwBUXAF4SSsrAwD9RpdxuHK/EbuF+W9Ahw==", - "dev": true - }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", - "dev": true - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "ajv": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.8.1.tgz", - "integrity": "sha512-eqxCp82P+JfqL683wwsL73XmFs1eG6qjw+RD3YHx+Jll1r0jNd4dh8QG9NYAeNGA/hnZjeEDgtTskgJULbxpWQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.3.0.tgz", - "integrity": "sha512-CMzN9S62ZOO4sA/mJZIO4S++ZM7KFWzH3PPWkveLhy4OZ9i1/VatgwWMD46w/XbGCBy7Ye0gCk+Za6mmyfKK7g==", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" - } - }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "apache-crypt": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.1.tgz", - "integrity": "sha1-1vxyqm0n2ZyVqU/RiNcx7v/6Zjw=", - "dev": true, - "requires": { - "unix-crypt-td-js": "^1.0.0" - } - }, - "apache-md5": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.2.tgz", - "integrity": "sha1-7klza2ObTxCLbp5ibG2pkwa0FpI=", - "dev": true - }, - "app-root-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.1.0.tgz", - "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=", - "dev": true - }, - "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", - "dev": true, - "requires": { - "default-require-extensions": "^2.0.0" - } - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "arg": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", - "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-find": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", - "integrity": "sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", - "dev": true - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", - "dev": true - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true - }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", - "dev": true - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "autoprefixer": { - "version": "9.4.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.7.tgz", - "integrity": "sha512-qS5wW6aXHkm53Y4z73tFGsUhmZu4aMPV9iHXYlF0c/wxjknXNHuj/1cIQb+6YH692DbJGGWcckAXX+VxKvahMA==", - "dev": true, - "requires": { - "browserslist": "^4.4.1", - "caniuse-lite": "^1.0.30000932", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.14", - "postcss-value-parser": "^3.3.1" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, - "dependencies": { - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-polyfill": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz", - "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "core-js": "^2.4.0", - "regenerator-runtime": "^0.10.0" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - } - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true - }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", - "dev": true - }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=", - "dev": true - }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", - "dev": true, - "requires": { - "callsite": "1.0.0" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", - "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", - "dev": true - }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", - "dev": true - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, - "requires": { - "inherits": "~2.0.0" - } - }, - "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "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": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "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": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz", - "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000929", - "electron-to-chromium": "^1.3.103", - "node-releases": "^1.1.3" - } - }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cacache": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", - "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", - "dev": true, - "requires": { - "bluebird": "^3.5.3", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.3", - "graceful-fs": "^4.1.15", - "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.2", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "cachedir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.1.0.tgz", - "integrity": "sha512-xGBpPqoBvn3unBW7oxgb8aJn42K0m9m1/wyjmazah10Fq7bROGG3kRAE6OIyr3U3PIJUqGuebhCEdMk9OKJG0A==", - "dev": true - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } - } - }, - "caniuse-lite": { - "version": "1.0.30000934", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000934.tgz", - "integrity": "sha512-o7yfZn0R9N+mWAuksDsdLsb1gu9o//XK0QSU0zSSReKNRsXsFc/n/psxi0YSPNiqlKxImp5h4DHnAPdwYJ8nNA==", - "dev": true - }, - "canonical-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", - "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - } - }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "cheerio": { - "version": "1.0.0-rc.2", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", - "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", - "dev": true, - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" - } - }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "dev": true, - "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" - } - }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", - "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "circular-json": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz", - "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-block-writer": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-7.2.2.tgz", - "integrity": "sha512-8SyXM1bWsMDCzvCoTdnDBhnnUbHntxcba4ApBIO3S3QX0M2Iq0xZCzs6SYdBOGaSUi4drysvrAK15JoXhlpsvQ==", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "codecov-lite": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/codecov-lite/-/codecov-lite-0.1.3.tgz", - "integrity": "sha1-3cOeKL4lcYopb90ZRXhZwz7H6Is=", - "dev": true, - "requires": { - "array-find": "^1.0.0", - "makethen": "^0.1.0", - "request": "^2.79.0", - "request-promise-native": "^1.0.3" - } - }, - "codelyzer": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.5.0.tgz", - "integrity": "sha512-oO6vCkjqsVrEsmh58oNlnJkRXuA30hF8cdNAQV9DytEalDwyOFRvHMnlKFzmOStNerOmPGZU9GAHnBo4tGvtiQ==", - "dev": true, - "requires": { - "app-root-path": "^2.1.0", - "css-selector-tokenizer": "^0.7.0", - "cssauron": "^1.4.0", - "semver-dsl": "^1.0.1", - "source-map": "^0.5.7", - "sprintf-js": "^1.1.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - } - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", - "dev": true - }, - "combine-lists": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true, - "requires": { - "lodash": "^4.5.0" - } - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "commitizen": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/commitizen/-/commitizen-3.0.5.tgz", - "integrity": "sha512-WB9sz7qudArOsW1ninU8YGLNoXLQ5lJBZf538iQ7i96SXAkqVMZdmPtSyN4WFPM5PjQR7rWxDa+hzfGIJfrXUg==", - "dev": true, - "requires": { - "cachedir": "2.1.0", - "cz-conventional-changelog": "2.1.0", - "dedent": "0.7.0", - "detect-indent": "^5.0.0", - "find-node-modules": "1.0.4", - "find-root": "1.1.0", - "fs-extra": "^7.0.0", - "glob": "7.1.3", - "inquirer": "6.2.0", - "lodash": "4.17.11", - "minimist": "1.2.0", - "shelljs": "0.7.6", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "inquirer": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", - "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.0", - "figures": "^2.0.0", - "lodash": "^4.17.10", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.1.0", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "shelljs": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.6.tgz", - "integrity": "sha1-N5zM+1a5HIYB5HkzVutTgpJN6a0=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "compare-func": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", - "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", - "dev": true, - "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^3.0.0" - }, - "dependencies": { - "dot-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", - "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - } - } - }, - "compare-versions": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.4.0.tgz", - "integrity": "sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg==", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "compressible": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", - "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", - "dev": true, - "requires": { - "mime-db": ">= 1.36.0 < 2" - } - }, - "compression": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", - "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.14", - "debug": "2.6.9", - "on-headers": "~1.0.1", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "concurrently": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-4.1.0.tgz", - "integrity": "sha512-pwzXCE7qtOB346LyO9eFWpkFJVO3JQZ/qU/feGeaAHiX1M3Rw3zgXKc5cZ8vSH5DGygkjzLFDzA/pwoQDkRNGg==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "date-fns": "^1.23.0", - "lodash": "^4.17.10", - "read-pkg": "^4.0.1", - "rxjs": "^6.3.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^4.5.0", - "tree-kill": "^1.1.0", - "yargs": "^12.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "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" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "mem": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", - "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^2.0.0" - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", - "dev": true, - "requires": { - "normalize-package-data": "^2.3.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "^2.0.0" - } - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", - "utils-merge": "1.0.1" - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "conventional-changelog": { - "version": "1.1.24", - "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-1.1.24.tgz", - "integrity": "sha512-2WcSUst4Y3Z4hHvoMTWXMJr/DmgVdLiMOVY1Kak2LfFz+GIz2KDp5naqbFesYbfXPmaZ5p491dO0FWZIJoJw1Q==", - "dev": true, - "requires": { - "conventional-changelog-angular": "^1.6.6", - "conventional-changelog-atom": "^0.2.8", - "conventional-changelog-codemirror": "^0.3.8", - "conventional-changelog-core": "^2.0.11", - "conventional-changelog-ember": "^0.3.12", - "conventional-changelog-eslint": "^1.0.9", - "conventional-changelog-express": "^0.3.6", - "conventional-changelog-jquery": "^0.1.0", - "conventional-changelog-jscs": "^0.1.0", - "conventional-changelog-jshint": "^0.3.8", - "conventional-changelog-preset-loader": "^1.1.8" - } - }, - "conventional-changelog-angular": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz", - "integrity": "sha512-suQnFSqCxRwyBxY68pYTsFkG0taIdinHLNEAX5ivtw8bCRnIgnpvcHmlR/yjUyZIrNPYAoXlY1WiEKWgSE4BNg==", - "dev": true, - "requires": { - "compare-func": "^1.3.1", - "q": "^1.5.1" - } - }, - "conventional-changelog-atom": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz", - "integrity": "sha512-8pPZqhMbrnltNBizjoDCb/Sz85KyUXNDQxuAEYAU5V/eHn0okMBVjqc8aHWYpHrytyZWvMGbayOlDv7i8kEf6g==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-codemirror": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz", - "integrity": "sha512-3HFZKtBXTaUCHvz7ai6nk2+psRIkldDoNzCsom0egDtVmPsvvHZkzjynhdQyULfacRSsBTaiQ0ol6nBOL4dDiQ==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-core": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz", - "integrity": "sha512-HvTE6RlqeEZ/NFPtQeFLsIDOLrGP3bXYr7lFLMhCVsbduF1MXIe8OODkwMFyo1i9ku9NWBwVnVn0jDmIFXjDRg==", - "dev": true, - "requires": { - "conventional-changelog-writer": "^3.0.9", - "conventional-commits-parser": "^2.1.7", - "dateformat": "^3.0.0", - "get-pkg-repo": "^1.0.0", - "git-raw-commits": "^1.3.6", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^1.3.6", - "lodash": "^4.2.1", - "normalize-package-data": "^2.3.5", - "q": "^1.5.1", - "read-pkg": "^1.1.0", - "read-pkg-up": "^1.0.1", - "through2": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, - "conventional-changelog-ember": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz", - "integrity": "sha512-mmJzA7uzbrOqeF89dMMi6z17O07ORTXlTMArnLG9ZTX4oLaKNolUlxFUFlFm9JUoVWajVpaHQWjxH1EOQ+ARoQ==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-eslint": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz", - "integrity": "sha512-h87nfVh2fdk9fJIvz26wCBsbDC/KxqCc5wSlNMZbXcARtbgNbNDIF7Y7ctokFdnxkzVdaHsbINkh548T9eBA7Q==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-express": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz", - "integrity": "sha512-3iWVtBJZ9RnRnZveNDzOD8QRn6g6vUif0qVTWWyi5nUIAbuN1FfPVyKdAlJJfp5Im+dE8Kiy/d2SpaX/0X678Q==", - "dev": true, - "requires": { - "q": "^1.5.1" - } - }, - "conventional-changelog-jquery": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz", - "integrity": "sha1-Agg5cWLjhGmG5xJztsecW1+A9RA=", - "dev": true, - "requires": { - "q": "^1.4.1" - } - }, - "conventional-changelog-jscs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz", - "integrity": "sha1-BHnrRDzH1yxYvwvPDvHURKkvDlw=", - "dev": true, - "requires": { - "q": "^1.4.1" - } - }, - "conventional-changelog-jshint": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz", - "integrity": "sha512-hn9QU4ZI/5V50wKPJNPGT4gEWgiBFpV6adieILW4MaUFynuDYOvQ71EMSj3EznJyKi/KzuXpc9dGmX8njZMjig==", - "dev": true, - "requires": { - "compare-func": "^1.3.1", - "q": "^1.5.1" - } - }, - "conventional-changelog-preset-loader": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz", - "integrity": "sha512-MkksM4G4YdrMlT2MbTsV2F6LXu/hZR0Tc/yenRrDIKRwBl/SP7ER4ZDlglqJsCzLJi4UonBc52Bkm5hzrOVCcw==", - "dev": true - }, - "conventional-changelog-writer": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-3.0.9.tgz", - "integrity": "sha512-n9KbsxlJxRQsUnK6wIBRnARacvNnN4C/nxnxCkH+B/R1JS2Fa+DiP1dU4I59mEDEjgnFaN2+9wr1P1s7GYB5/Q==", - "dev": true, - "requires": { - "compare-func": "^1.3.1", - "conventional-commits-filter": "^1.1.6", - "dateformat": "^3.0.0", - "handlebars": "^4.0.2", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.2.1", - "meow": "^4.0.0", - "semver": "^5.5.0", - "split": "^1.0.0", - "through2": "^2.0.0" - }, - "dependencies": { - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", - "dev": true - }, - "meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", - "dev": true, - "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist": "^1.1.3", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", - "dev": true, - "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" - } - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", - "dev": true - } - } - }, - "conventional-commit-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/conventional-commit-types/-/conventional-commit-types-2.2.0.tgz", - "integrity": "sha1-XblXOdbCEqy+e29lahG5QLqmiUY=", - "dev": true - }, - "conventional-commits-filter": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz", - "integrity": "sha512-KcDgtCRKJCQhyk6VLT7zR+ZOyCnerfemE/CsR3iQpzRRFbLEs0Y6rwk3mpDvtOh04X223z+1xyJ582Stfct/0Q==", - "dev": true, - "requires": { - "is-subset": "^0.1.1", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz", - "integrity": "sha512-BoMaddIEJ6B4QVMSDu9IkVImlGOSGA1I2BQyOZHeLQ6qVOJLcLKn97+fL6dGbzWEiqDzfH4OkcveULmeq2MHFQ==", - "dev": true, - "requires": { - "JSONStream": "^1.0.4", - "is-text-path": "^1.0.0", - "lodash": "^4.2.1", - "meow": "^4.0.0", - "split2": "^2.0.0", - "through2": "^2.0.0", - "trim-off-newlines": "^1.0.0" - }, - "dependencies": { - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", - "dev": true - }, - "meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", - "dev": true, - "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist": "^1.1.3", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", - "dev": true, - "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" - } - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", - "dev": true - } - } - }, - "conventional-recommended-bump": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-1.2.1.tgz", - "integrity": "sha512-oJjG6DkRgtnr/t/VrPdzmf4XZv8c4xKVJrVT4zrSHd92KEL+EYxSbYoKq8lQ7U5yLMw7130wrcQTLRjM/T+d4w==", - "dev": true, - "requires": { - "concat-stream": "^1.4.10", - "conventional-commits-filter": "^1.1.1", - "conventional-commits-parser": "^2.1.1", - "git-raw-commits": "^1.3.0", - "git-semver-tags": "^1.3.0", - "meow": "^3.3.0", - "object-assign": "^4.0.1" - } - }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "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": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copyfiles": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.1.0.tgz", - "integrity": "sha512-cAeDE0vL/koE9WSEGxqPpSyvU638Kgfu6wfrnj7kqp9FWa1CWsU54Coo6sdYZP4GstWa39tL/wIVJWfXcujgNA==", - "dev": true, - "requires": { - "glob": "^7.0.5", - "minimatch": "^3.0.3", - "mkdirp": "^0.5.1", - "noms": "0.0.0", - "through2": "^2.0.1", - "yargs": "^11.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "yargs": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", - "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - } - }, - "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "core-js": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.3.tgz", - "integrity": "sha512-l00tmFFZOBHtYhN4Cz7k32VM7vTn3rE2ANjQDxdEN6zmXZ/xq1jQuutnmHvMG1ZJ7xd72+TA5YpUK8wz3rWsfQ==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz", - "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - } - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "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": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "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": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "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" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "css-parse": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", - "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", - "dev": true - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-selector-tokenizer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", - "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", - "dev": true, - "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" - } - }, - "css-what": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz", - "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==", - "dev": true - }, - "cssauron": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", - "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", - "dev": true, - "requires": { - "through": "X.X.X" - } - }, - "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", - "dev": true - }, - "cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true - }, - "cz-conventional-changelog": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-2.1.0.tgz", - "integrity": "sha1-L0vHOQ4yROTfKT5ro1Hkx0Cnx2Q=", - "dev": true, - "requires": { - "conventional-commit-types": "^2.0.0", - "lodash.map": "^4.5.1", - "longest": "^1.0.1", - "right-pad": "^1.0.1", - "word-wrap": "^1.0.3" - } - }, - "dargs": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", - "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "date-fns": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", - "dev": true - }, - "date-format": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", - "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", - "dev": true - }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "default-gateway": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz", - "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", - "dev": true, - "requires": { - "execa": "^0.10.0", - "ip-regex": "^2.1.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.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" - } - } - } - }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", - "dev": true, - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - }, - "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "dependency-graph": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", - "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", - "dev": true - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-file": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-0.1.0.tgz", - "integrity": "sha1-STXe39lIhkjgBrASlWbpOGcR6mM=", - "dev": true, - "requires": { - "fs-exists-sync": "^0.1.0" - } - }, - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", - "dev": true - }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", - "dev": true - }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", - "dev": true - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", - "dev": true, - "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "dot": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/dot/-/dot-1.1.2.tgz", - "integrity": "sha1-xzdwGfxOVQeYkosrmv62ar+h8vk=", - "dev": true - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotgitignore": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dotgitignore/-/dotgitignore-1.0.3.tgz", - "integrity": "sha512-eu5XjSstm0WXQsARgo6kPjkINYZlOUW+z/KtAAIBjHa5mUpMPrxJytbPIndWz6GubBuuuH5ljtVcXKnVnH5q8w==", - "dev": true, - "requires": { - "find-up": "^2.1.0", - "minimatch": "^3.0.4" - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.113", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz", - "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==", - "dev": true - }, - "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "dev": true, - "requires": { - "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" - } - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "engine.io": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", - "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~3.3.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "engine.io-client": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "engine.io-parser": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", - "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", - "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", - "dev": true - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "estree-walker": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", - "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", - "dev": true - }, - "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", - "dev": true - }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "dev": true, - "requires": { - "original": "^1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.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" - } - }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "dev": true, - "requires": { - "array-slice": "^0.2.3", - "array-unique": "^0.2.1", - "braces": "^0.1.2" - }, - "dependencies": { - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true, - "requires": { - "expand-range": "^0.1.0" - } - }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "^0.1.1", - "repeat-string": "^0.2.2" - } - }, - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true - } - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "^2.1.0" - } - }, - "expand-tilde": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-1.2.2.tgz", - "integrity": "sha1-C4HrqJflo9MdHD0QL48BRB5VlEk=", - "dev": true, - "requires": { - "os-homedir": "^1.0.1" - } - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - } - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-glob": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", - "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==", - "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true - }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true - }, - "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fileset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", - "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", - "dev": true, - "requires": { - "glob": "^7.0.3", - "minimatch": "^3.0.3" - } - }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" - } - }, - "find-cache-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", - "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-node-modules": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/find-node-modules/-/find-node-modules-1.0.4.tgz", - "integrity": "sha1-tt6zzMtpnIcDdne87eLF9YYrJVA=", - "dev": true, - "requires": { - "findup-sync": "0.4.2", - "merge": "^1.2.0" - } - }, - "find-parent-dir": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", - "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=", - "dev": true - }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "findit2": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz", - "integrity": "sha1-WKRmaX34piBc39vzlVNri9d3pfY=", - "dev": true - }, - "findup": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/findup/-/findup-0.1.5.tgz", - "integrity": "sha1-itkpozk7rGJ5V6fl3kYjsGsOLOs=", - "dev": true, - "requires": { - "colors": "~0.6.0-1", - "commander": "~2.1.0" - }, - "dependencies": { - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", - "dev": true - }, - "commander": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", - "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=", - "dev": true - } - } - }, - "findup-sync": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.4.2.tgz", - "integrity": "sha1-qBF9D3MST1pFRoOVef5S1xKfteU=", - "dev": true, - "requires": { - "detect-file": "^0.1.0", - "is-glob": "^2.0.1", - "micromatch": "^2.3.7", - "resolve-dir": "^0.1.0" - } - }, - "flatted": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", - "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", - "dev": true - }, - "flush-write-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.0.tgz", - "integrity": "sha512-6MHED/cmsyux1G4/Cek2Z776y9t7WCNd3h2h/HW91vFeU7pzMhA8XvAlDhHcanG5IWuIh/xcC7JASY4WQpG6xg==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "follow-redirects": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", - "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==", - "dev": true, - "requires": { - "debug": "=3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "fork-ts-checker-webpack-plugin": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-0.5.2.tgz", - "integrity": "sha512-a5IG+xXyKnpruI0CP/anyRLAoxWtp3lzdG6flxicANnoSzz64b12dJ7ASAVRrI2OaWwZR2JyBaMHFQqInhWhIw==", - "dev": true, - "requires": { - "babel-code-frame": "^6.22.0", - "chalk": "^2.4.1", - "chokidar": "^2.0.4", - "micromatch": "^3.1.10", - "minimatch": "^3.0.4", - "tapable": "^1.0.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", - "dev": true, - "requires": { - "null-check": "^1.0.0" - } - }, - "fs-exists-sync": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz", - "integrity": "sha1-mC1ok6+RjnLQjeyehnP/K1qNat0=", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "requires": { - "globule": "^1.0.0" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-pkg-repo": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", - "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "meow": "^3.3.0", - "normalize-package-data": "^2.3.0", - "parse-github-repo-url": "^1.3.0", - "through2": "^2.0.0" - } - }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "git-raw-commits": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-1.3.6.tgz", - "integrity": "sha512-svsK26tQ8vEKnMshTDatSIQSMDdz8CxIIqKsvPqbtV23Etmw6VNaFAitu8zwZ0VrOne7FztwPyRLxK7/DIUTQg==", - "dev": true, - "requires": { - "dargs": "^4.0.1", - "lodash.template": "^4.0.2", - "meow": "^4.0.0", - "split2": "^2.0.0", - "through2": "^2.0.0" - }, - "dependencies": { - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", - "dev": true - }, - "meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", - "dev": true, - "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist": "^1.1.3", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", - "dev": true, - "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" - } - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", - "dev": true - } - } - }, - "git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", - "dev": true, - "requires": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - } - }, - "git-semver-tags": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-1.3.6.tgz", - "integrity": "sha512-2jHlJnln4D/ECk9FxGEBh3k44wgYdWjWDtMmJPaecjoRmxKo3Y1Lh8GMYuOPu04CHw86NTAODchYjC5pnpMQig==", - "dev": true, - "requires": { - "meow": "^4.0.0", - "semver": "^5.5.0" - }, - "dependencies": { - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", - "dev": true - }, - "meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", - "dev": true, - "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist": "^1.1.3", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", - "dev": true, - "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" - } - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", - "dev": true - } - } - }, - "gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", - "dev": true, - "requires": { - "ini": "^1.3.2" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "global-modules": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-0.2.3.tgz", - "integrity": "sha1-6lo77ULG1s6ZWk+KEmm12uIjgo0=", - "dev": true, - "requires": { - "global-prefix": "^0.1.4", - "is-windows": "^0.2.0" - }, - "dependencies": { - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - } - } - }, - "global-prefix": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-0.1.5.tgz", - "integrity": "sha1-jTvGuNo8qBEqFg2NSW/wRiv+948=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.0", - "ini": "^1.3.4", - "is-windows": "^0.2.0", - "which": "^1.2.12" - }, - "dependencies": { - "is-windows": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-0.2.0.tgz", - "integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=", - "dev": true - } - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", - "dev": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" - } - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", - "dev": true - }, - "handlebars": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", - "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", - "dev": true, - "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dev": true, - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", - "dev": true - }, - "htmlparser2": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz", - "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==", - "dev": true, - "requires": { - "domelementtype": "^1.3.0", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "http-auth": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-3.1.3.tgz", - "integrity": "sha1-lFz63WZSHq+PfISRPTd9exXyTjE=", - "dev": true, - "requires": { - "apache-crypt": "^1.1.2", - "apache-md5": "^1.0.6", - "bcryptjs": "^2.3.0", - "uuid": "^3.0.0" - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "dependencies": { - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", - "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", - "dev": true - }, - "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", - "dev": true, - "requires": { - "eventemitter3": "^3.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", - "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", - "dev": true, - "requires": { - "http-proxy": "^1.16.2", - "is-glob": "^4.0.0", - "lodash": "^4.17.5", - "micromatch": "^3.1.9" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "husky": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz", - "integrity": "sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.7", - "execa": "^1.0.0", - "find-up": "^3.0.0", - "get-stdin": "^6.0.0", - "is-ci": "^2.0.0", - "pkg-dir": "^3.0.0", - "please-upgrade-node": "^3.1.1", - "read-pkg": "^4.0.1", - "run-node": "^1.0.0", - "slash": "^2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "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" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", - "dev": true, - "requires": { - "normalize-package-data": "^2.3.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "i18next": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-12.1.0.tgz", - "integrity": "sha512-AexmwGkKxwKfo5fGeXTWEY4xqzRPigQ1S/0InOUUVziGO54cd4fKyYK8ED1Thx9fd+WA3fRSZ+1iekvFQMbsFw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "dev": true, - "optional": true - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "injection-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/injection-js/-/injection-js-2.2.1.tgz", - "integrity": "sha512-zHI+E+dM0PXix5FFTO1Y4/UOyAzE7zG1l/QwAn4jchTThOoBq+UYRFK4AVG7lQgFL+go62SbrzSsjXy9DFEZUg==", - "dev": true - }, - "inquirer": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz", - "integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=", - "dev": true, - "requires": { - "ansi-escapes": "^1.1.0", - "chalk": "^1.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.1", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx": "^4.1.0", - "string-width": "^2.0.0", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/inside/-/inside-1.0.0.tgz", - "integrity": "sha1-20Xpk1c82z23C5gy6ChbrUZCR3A=", - "dev": true - }, - "internal-ip": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz", - "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", - "dev": true, - "requires": { - "default-gateway": "^2.6.0", - "ipaddr.js": "^1.5.2" - } - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", - "dev": true - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "dev": true, - "requires": { - "path-is-inside": "^1.0.1" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true - }, - "is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", - "dev": true, - "requires": { - "text-extensions": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", - "dev": true, - "requires": { - "buffer-alloc": "^1.2.0" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-api": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.0.tgz", - "integrity": "sha512-+Ygg4t1StoiNlBGc6x0f8q/Bv26FbZqP/+jegzfNpU7Q8o+4ZRoJxJPhBkgE/UonpAjtxnE4zCZIyJX+MwLRMQ==", - "dev": true, - "requires": { - "async": "^2.6.1", - "compare-versions": "^3.2.1", - "fileset": "^2.0.3", - "istanbul-lib-coverage": "^2.0.3", - "istanbul-lib-hook": "^2.0.3", - "istanbul-lib-instrument": "^3.1.0", - "istanbul-lib-report": "^2.0.4", - "istanbul-lib-source-maps": "^3.0.2", - "istanbul-reports": "^2.1.0", - "js-yaml": "^3.12.0", - "make-dir": "^1.3.0", - "minimatch": "^3.0.4", - "once": "^1.4.0" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, - "istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz", - "integrity": "sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA==", - "dev": true, - "requires": { - "@babel/generator": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "istanbul-lib-coverage": "^2.0.3", - "semver": "^5.5.0" - } - } - } - }, - "istanbul-instrumenter-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz", - "integrity": "sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w==", - "dev": true, - "requires": { - "convert-source-map": "^1.5.0", - "istanbul-lib-instrument": "^1.7.3", - "loader-utils": "^1.1.0", - "schema-utils": "^0.3.0" - } - }, - "istanbul-lib-coverage": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", - "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.3.tgz", - "integrity": "sha512-CLmEqwEhuCYtGcpNVJjLV1DQyVnIqavMLFHV/DP+np/g3qvdxu3gsPqYoJMXm15sN84xOlckFB3VNvRbf5yEgA==", - "dev": true, - "requires": { - "append-transform": "^1.0.0" - } - }, - "istanbul-lib-instrument": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", - "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", - "dev": true, - "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.1", - "semver": "^5.3.0" - } - }, - "istanbul-lib-report": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.4.tgz", - "integrity": "sha512-sOiLZLAWpA0+3b5w5/dq0cjm2rrNdAfHWaGhmn7XEFW6X++IV9Ohn+pnELAl9K3rfpaeBfbmH9JU5sejacdLeA==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.3", - "make-dir": "^1.3.0", - "supports-color": "^6.0.0" - }, - "dependencies": { - "istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.2.tgz", - "integrity": "sha512-JX4v0CiKTGp9fZPmoxpu9YEkPbEqCqBbO3403VabKjH+NRXo72HafD5UgnjTEqHL2SAjaZK1XDuDOkn6I5QVfQ==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.3", - "make-dir": "^1.3.0", - "rimraf": "^2.6.2", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.1.0.tgz", - "integrity": "sha512-azQdSX+dtTtkQEfqq20ICxWi6eOHXyHIgMFw1VOOVi8iIPWeCWRgCyFh/CsBKIhcgskMI8ExXmU7rjXTRCIJ+A==", - "dev": true, - "requires": { - "handlebars": "^4.0.11" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true, - "optional": true - }, - "handlebars": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", - "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", - "dev": true, - "requires": { - "async": "^2.5.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - } - }, - "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", - "dev": true, - "optional": true, - "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1" - } - } - } - }, - "js-base64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", - "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", - "dev": true - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz", - "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "just-extend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", - "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", - "dev": true - }, - "karma": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/karma/-/karma-4.0.0.tgz", - "integrity": "sha512-EFoFs3F6G0BcUGPNOn/YloGOb3h09hzTguyXlg6loHlKY76qbJikkcyPk43m2kfRF65TUGda/mig29QQtyhm1g==", - "dev": true, - "requires": { - "bluebird": "^3.3.0", - "body-parser": "^1.16.1", - "chokidar": "^2.0.3", - "colors": "^1.1.0", - "combine-lists": "^1.0.0", - "connect": "^3.6.0", - "core-js": "^2.2.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.0", - "expand-braces": "^0.1.1", - "flatted": "^2.0.0", - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "http-proxy": "^1.13.0", - "isbinaryfile": "^3.0.0", - "lodash": "^4.17.5", - "log4js": "^3.0.0", - "mime": "^2.3.1", - "minimatch": "^3.0.2", - "optimist": "^0.6.1", - "qjobs": "^1.1.4", - "range-parser": "^1.2.0", - "rimraf": "^2.6.0", - "safe-buffer": "^5.0.1", - "socket.io": "2.1.1", - "source-map": "^0.6.1", - "tmp": "0.0.33", - "useragent": "2.3.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", - "dev": true - } - } - }, - "karma-chrome-launcher": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", - "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", - "dev": true, - "requires": { - "fs-access": "^1.0.0", - "which": "^1.2.1" - } - }, - "karma-coverage-istanbul-reporter": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.4.tgz", - "integrity": "sha512-xJS7QSQIVU6VK9HuJ/ieE5yynxKhjCCkd96NLY/BX/HXsx0CskU9JJiMQbd4cHALiddMwI4OWh1IIzeWrsavJw==", - "dev": true, - "requires": { - "istanbul-api": "^2.0.5", - "minimatch": "^3.0.4" - } - }, - "karma-mocha": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-1.3.0.tgz", - "integrity": "sha1-7qrH/8DiAetjxGdEDStpx883eL8=", - "dev": true, - "requires": { - "minimist": "1.2.0" - } - }, - "karma-sourcemap-loader": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", - "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2" - } - }, - "karma-webpack": { - "version": "4.0.0-rc.6", - "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-4.0.0-rc.6.tgz", - "integrity": "sha512-fN3EfHc10bZxP7dqgsaIFdmkynABFsgMxqgVZJYqxzt0CDBH6j1LbHrMilnijnDYZ8fZDLtx/OKWshXiYyhIig==", - "dev": true, - "requires": { - "async": "^2.0.0", - "loader-utils": "^1.1.0", - "source-map": "^0.5.6", - "webpack-dev-middleware": "^3.2.0" - }, - "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true, - "optional": true - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "less": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz", - "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==", - "dev": true, - "requires": { - "clone": "^2.1.2", - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "mime": "^1.4.1", - "mkdirp": "^0.5.0", - "promise": "^7.1.1", - "request": "^2.83.0", - "source-map": "~0.6.0" - } - }, - "less-plugin-npm-import": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/less-plugin-npm-import/-/less-plugin-npm-import-2.1.0.tgz", - "integrity": "sha1-gj5phskzGKmBccqFiEi2vq1Vvz4=", - "dev": true, - "requires": { - "promise": "~7.0.1", - "resolve": "~1.1.6" - }, - "dependencies": { - "promise": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.0.4.tgz", - "integrity": "sha1-Nj6EpMNsg1a4kP7WLJHOhdAu1Tk=", - "dev": true, - "requires": { - "asap": "~2.0.3" - } - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "live-server": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/live-server/-/live-server-1.2.1.tgz", - "integrity": "sha512-Yn2XCVjErTkqnM3FfTmM7/kWy3zP7+cEtC7x6u+wUzlQ+1UW3zEYbbyJrc0jNDwiMDZI0m4a0i3dxlGHVyXczw==", - "dev": true, - "requires": { - "chokidar": "^2.0.4", - "colors": "^1.3.3", - "connect": "^3.6.6", - "cors": "^2.8.5", - "event-stream": "3.3.4", - "faye-websocket": "0.11.x", - "http-auth": "3.1.x", - "morgan": "^1.9.1", - "object-assign": "^4.1.1", - "opn": "^5.4.0", - "proxy-middleware": "^0.15.0", - "send": "^0.16.2", - "serve-index": "^1.9.1" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", - "dev": true - }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", - "dev": true - }, - "lodash.mergewith": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", - "dev": true - }, - "lodash.template": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", - "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", - "dev": true, - "requires": { - "lodash._reinterpolate": "~3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", - "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", - "dev": true, - "requires": { - "lodash._reinterpolate": "~3.0.0" - } - }, - "log4js": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz", - "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==", - "dev": true, - "requires": { - "circular-json": "^0.5.5", - "date-format": "^1.2.0", - "debug": "^3.1.0", - "rfdc": "^1.1.2", - "streamroller": "0.7.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "loglevel": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", - "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", - "dev": true - }, - "lolex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.0.0.tgz", - "integrity": "sha512-hcnW80h3j2lbUfFdMArd5UPA/vxZJ+G8vobd+wg3nVEQA0EigStbYcrG030FJxL6xiDDPEkoMatV9xIh5OecQQ==", - "dev": true - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "lunr": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.5.tgz", - "integrity": "sha512-EtnfmHsHJTr3u24sito9JctSxej5Ds0SgUD2Lm+qRHyLgM7BGesFlW14eNh1mil0fV5Muh8gf3dBBXzADlUlzQ==", - "dev": true - }, - "macos-release": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.0.0.tgz", - "integrity": "sha512-iCM3ZGeqIzlrH7KxYK+fphlJpCCczyHXc+HhRVbEu9uNTCrzYJjvvtefzeKTCVHd5AP/aD/fzC80JZ4ZP+dQ/A==", - "dev": true - }, - "magic-string": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz", - "integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.4" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", - "dev": true - }, - "makethen": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/makethen/-/makethen-0.1.0.tgz", - "integrity": "sha1-3Wm55ylt6vZWYTXxSWyCsyNsXQg=", - "dev": true - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "marked": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.4.0.tgz", - "integrity": "sha512-tMsdNBgOsrUophCAFQl0XPe6Zqk/uy9gnue+jIIKhykO51hxyu6uNx7zBPy0+y/WKYVZZMspV9YeXLNdKk+iYw==", - "dev": true - }, - "math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, - "merge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", - "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==", - "dev": true - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", - "dev": true - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "dev": true, - "requires": { - "mime-db": "~1.37.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "minimist-options": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "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": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "mocha": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", - "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.15.1", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.5", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "5.4.0" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true - }, - "morgan": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", - "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", - "dev": true, - "requires": { - "basic-auth": "~2.0.0", - "debug": "2.6.9", - "depd": "~1.1.2", - "on-finished": "~2.3.0", - "on-headers": "~1.0.1" - } - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "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" - } - }, - "mri": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", - "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "multimatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", - "dev": true, - "requires": { - "array-differ": "^1.0.0", - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "minimatch": "^3.0.0" - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "nan": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", - "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true - }, - "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", - "dev": true - }, - "ng-packagr": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/ng-packagr/-/ng-packagr-4.7.0.tgz", - "integrity": "sha512-FNCe4WpHwBk107pCX0KOnsv+cUaM2bCGAD/oYUl0FIwQXkI+iYjDik9KlqJ/bWDUsiCUxiAH2v5AsTaEF7G4bw==", - "dev": true, - "requires": { - "@ngtools/json-schema": "^1.1.0", - "autoprefixer": "^9.0.0", - "browserslist": "^4.0.0", - "chalk": "^2.3.1", - "chokidar": "^2.0.3", - "clean-css": "^4.1.11", - "commander": "^2.12.0", - "fs-extra": "^7.0.0", - "glob": "^7.1.2", - "injection-js": "^2.2.1", - "less": "^3.8.0", - "less-plugin-npm-import": "^2.1.0", - "node-sass": "^4.9.3", - "node-sass-tilde-importer": "^1.0.0", - "opencollective": "^1.0.3", - "postcss": "^7.0.0", - "postcss-url": "^8.0.0", - "read-pkg-up": "^4.0.0", - "rimraf": "^2.6.1", - "rollup": "^0.67.0", - "rollup-plugin-commonjs": "^9.1.3", - "rollup-plugin-json": "^3.1.0", - "rollup-plugin-node-resolve": "^4.0.0", - "rollup-plugin-sourcemaps": "^0.4.2", - "rxjs": "^6.0.0", - "stylus": "^0.54.5", - "uglify-js": "^3.0.7", - "update-notifier": "^2.3.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "uglify-js": { - "version": "3.4.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", - "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", - "dev": true, - "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - } - } - } - } - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "nise": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.8.tgz", - "integrity": "sha512-kGASVhuL4tlAV0tvA34yJYZIVihrUt/5bDwpp4tTluigxUr2bBlJeDXmivb6NuEdFkqvdv/Ybb9dm16PSKUhtw==", - "dev": true, - "requires": { - "@sinonjs/formatio": "^3.1.0", - "just-extend": "^4.0.2", - "lolex": "^2.3.2", - "path-to-regexp": "^1.7.0", - "text-encoding": "^0.6.4" - }, - "dependencies": { - "lolex": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", - "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", - "dev": true - } - } - }, - "node-fetch": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz", - "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node-forge": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", - "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", - "dev": true - }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "dev": true, - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, - "node-libs-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", - "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", - "dev": true, - "requires": { - "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.0", - "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": "0.0.4" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "node-releases": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.7.tgz", - "integrity": "sha512-bKdrwaqJUPHqlCzDD7so/R+Nk0jGv9a11ZhLrD9f6i947qGLrGAhU3OxRENa19QQmwzGy/g6zCDEuLGDO8HPvA==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "node-sass": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.11.0.tgz", - "integrity": "sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==", - "dev": true, - "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "in-publish": "^2.0.0", - "lodash.assign": "^4.2.0", - "lodash.clonedeep": "^4.3.2", - "lodash.mergewith": "^4.6.0", - "meow": "^3.7.0", - "mkdirp": "^0.5.1", - "nan": "^2.10.0", - "node-gyp": "^3.8.0", - "npmlog": "^4.0.0", - "request": "^2.88.0", - "sass-graph": "^2.2.4", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "node-sass-tilde-importer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/node-sass-tilde-importer/-/node-sass-tilde-importer-1.0.2.tgz", - "integrity": "sha512-Swcmr38Y7uB78itQeBm3mThjxBy9/Ah/ykPIaURY/L6Nec9AyRoL/jJ7ECfMR+oZeCTVQNxVMu/aHU+TLRVbdg==", - "dev": true, - "requires": { - "find-parent-dir": "^0.3.0" - } - }, - "noms": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", - "integrity": "sha1-2o69nzr51nYJGbJ9nNyAkqczKFk=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "~1.0.31" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.2.tgz", - "integrity": "sha512-YcMnjqeoUckXTPKZSAsPjUPLxH85XotbpqK3w4RyCwdFQSU5FxxBys8buehkSfg0j9fKvV1hn7O0+8reEgkAiw==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "null-check": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", - "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", - "dev": true - }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "opencollective": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/opencollective/-/opencollective-1.0.3.tgz", - "integrity": "sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=", - "dev": true, - "requires": { - "babel-polyfill": "6.23.0", - "chalk": "1.1.3", - "inquirer": "3.0.6", - "minimist": "1.2.0", - "node-fetch": "1.6.3", - "opn": "4.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "opn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", - "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "opn": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", - "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "dev": true - } - } - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "requires": { - "url-parse": "^1.4.3" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "os-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.0.0.tgz", - "integrity": "sha512-7c74tib2FsdFbQ3W+qj8Tyd1R3Z6tuVRNNxXjJcZ4NgjIEQU9N/prVMqcW29XZPXGACqaXN3jq58/6hoaoXH6g==", - "dev": true, - "requires": { - "macos-release": "^2.0.0", - "windows-release": "^3.1.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", - "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "pako": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz", - "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==", - "dev": true - }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", - "dev": true, - "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "parse-asn1": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz", - "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==", - "dev": true, - "requires": { - "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-github-repo-url": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz", - "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=", - "dev": true - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", - "dev": true, - "requires": { - "better-assert": "~1.0.0" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "dev": true, - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, - "requires": { - "through": "~2.3" - } - }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - } - } - }, - "please-upgrade-node": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", - "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, - "portfinder": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", - "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", - "dev": true, - "requires": { - "async": "^1.5.2", - "debug": "^2.2.0", - "mkdirp": "0.5.x" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", - "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-8.0.0.tgz", - "integrity": "sha512-E2cbOQ5aii2zNHh8F6fk1cxls7QVFZjLPSrqvmiza8OuXLzIpErij8BDS5Y3STPfJgpIMNCPEr8JlKQWEoozUw==", - "dev": true, - "requires": { - "mime": "^2.3.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.0", - "postcss": "^7.0.2", - "xxhashjs": "^0.2.1" - }, - "dependencies": { - "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", - "dev": true - } - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, - "prettier": { - "version": "1.16.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", - "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", - "dev": true - }, - "pretty-quick": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-1.10.0.tgz", - "integrity": "sha512-uNvm2N3UWmnZRZrClyQI45hIbV20f5BpSyZY51Spbvn4APp9+XLyX4bCjWRGT3fGyVyQ/2/iw7dbQq1UUaq7SQ==", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "execa": "^0.8.0", - "find-up": "^2.1.0", - "ignore": "^3.3.7", - "mri": "^1.1.0", - "multimatch": "^3.0.0" - }, - "dependencies": { - "array-differ": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-2.0.3.tgz", - "integrity": "sha1-AZW7AMzM8nEQbv7kpHhkiLcYBxI=", - "dev": true - }, - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.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" - } - }, - "multimatch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-3.0.0.tgz", - "integrity": "sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA==", - "dev": true, - "requires": { - "array-differ": "^2.0.3", - "array-union": "^1.0.2", - "arrify": "^1.0.1", - "minimatch": "^3.0.4" - } - } - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "optional": true, - "requires": { - "asap": "~2.0.3" - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "proxy-addr": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", - "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.8.0" - } - }, - "proxy-middleware": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", - "integrity": "sha1-o/3xvvtzD5UZZYcqwvYHTGFHelY=", - "dev": true - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "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": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, - "qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", - "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", - "dev": true - }, - "quick-lru": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", - "dev": true - }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "request-promise-core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", - "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", - "dev": true, - "requires": { - "lodash": "^4.13.1" - } - }, - "request-promise-native": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", - "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", - "dev": true, - "requires": { - "request-promise-core": "1.1.1", - "stealthy-require": "^1.1.0", - "tough-cookie": ">=2.3.3" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-dir": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-0.1.1.tgz", - "integrity": "sha1-shklmlYC+sXFxJatiUpujMQwJh4=", - "dev": true, - "requires": { - "expand-tilde": "^1.2.2", - "global-modules": "^0.2.3" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rfdc": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz", - "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==", - "dev": true - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.1" - } - }, - "right-pad": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/right-pad/-/right-pad-1.0.1.tgz", - "integrity": "sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA=", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rollup": { - "version": "0.67.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.67.4.tgz", - "integrity": "sha512-AVuP73mkb4BBMUmksQ3Jw0jTrBTU1i7rLiUYjFxLZGb3xiFmtVEg40oByphkZAsiL0bJC3hRAJUQos/e5EBd+w==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "@types/node": "*" - } - }, - "rollup-plugin-commonjs": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.2.0.tgz", - "integrity": "sha512-0RM5U4Vd6iHjL6rLvr3lKBwnPsaVml+qxOGaaNUWN1lSq6S33KhITOfHmvxV3z2vy9Mk4t0g4rNlVaJJsNQPWA==", - "dev": true, - "requires": { - "estree-walker": "^0.5.2", - "magic-string": "^0.25.1", - "resolve": "^1.8.1", - "rollup-pluginutils": "^2.3.3" - } - }, - "rollup-plugin-json": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-3.1.0.tgz", - "integrity": "sha512-BlYk5VspvGpjz7lAwArVzBXR60JK+4EKtPkCHouAWg39obk9S61hZYJDBfMK+oitPdoe11i69TlxKlMQNFC/Uw==", - "dev": true, - "requires": { - "rollup-pluginutils": "^2.3.1" - } - }, - "rollup-plugin-node-resolve": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.0.tgz", - "integrity": "sha512-7Ni+/M5RPSUBfUaP9alwYQiIKnKeXCOHiqBpKUl9kwp3jX5ZJtgXAait1cne6pGEVUUztPD6skIKH9Kq9sNtfw==", - "dev": true, - "requires": { - "builtin-modules": "^3.0.0", - "is-module": "^1.0.0", - "resolve": "^1.8.1" - }, - "dependencies": { - "builtin-modules": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.0.0.tgz", - "integrity": "sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg==", - "dev": true - } - } - }, - "rollup-plugin-sourcemaps": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.4.2.tgz", - "integrity": "sha1-YhJaqUCHqt97g+9N+vYptHMTXoc=", - "dev": true, - "requires": { - "rollup-pluginutils": "^2.0.1", - "source-map-resolve": "^0.5.0" - } - }, - "rollup-pluginutils": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz", - "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==", - "dev": true, - "requires": { - "estree-walker": "^0.5.2", - "micromatch": "^2.3.11" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } - }, - "run-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", - "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", - "dev": true - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", - "dev": true - }, - "rxjs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", - "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "rxjs-tslint-rules": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/rxjs-tslint-rules/-/rxjs-tslint-rules-4.16.2.tgz", - "integrity": "sha512-yX/rG/aqjIZNTv6Ugq9ST43IV+g2a3JY3YwWTA8Q7VY+jGRhoILLWJbvJlL5gwmeT4HZXybpVGEBsZU4NPx15g==", - "dev": true, - "requires": { - "@phenomnomnominal/tsquery": "^3.0.0", - "decamelize": "^2.0.0", - "resolve": "^1.4.0", - "tslib": "^1.8.0", - "tsutils": "^3.0.0" - }, - "dependencies": { - "decamelize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", - "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", - "dev": true, - "requires": { - "xregexp": "4.0.0" - } - }, - "tsutils": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.8.0.tgz", - "integrity": "sha512-XQdPhgcoTbCD8baXC38PQ0vpTZ8T3YrE+vR66YIj/xvDt1//8iAhafpIT/4DmvzzC1QFapEImERu48Pa01dIUA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - } - } - } - }, - "sax": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", - "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", - "dev": true - }, - "schema-utils": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", - "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", - "dev": true, - "requires": { - "ajv": "^5.0.0" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - } - } - }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, - "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "selfsigned": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", - "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", - "dev": true, - "requires": { - "node-forge": "0.7.5" - } - }, - "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - } - }, - "semver-dsl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", - "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", - "dev": true, - "requires": { - "semver": "^5.3.0" - } - }, - "semver-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", - "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", - "dev": true - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", - "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", - "dev": true - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shelljs": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", - "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "sinon": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.2.3.tgz", - "integrity": "sha512-i6j7sqcLEqTYqUcMV327waI745VASvYuSuQMCjbAwlpAeuCgKZ3LtrjDxAbu+GjNQR0FEDpywtwGCIh8GicNyg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.3.0", - "@sinonjs/formatio": "^3.1.0", - "@sinonjs/samsam": "^3.0.2", - "diff": "^3.5.0", - "lolex": "^3.0.0", - "nise": "^1.4.8", - "supports-color": "^5.5.0" - } - }, - "sinon-chai": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.3.0.tgz", - "integrity": "sha512-r2JhDY7gbbmh5z3Q62pNbrjxZdOAjpsqW/8yxAZRSqLZqowmfGZPGUZPFf3UX36NLis0cv8VEM5IJh9HgkSOAA==", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - } - }, - "socket.io": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", - "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", - "dev": true, - "requires": { - "debug": "~3.1.0", - "engine.io": "~3.2.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.1.1", - "socket.io-parser": "~3.2.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "socket.io-adapter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", - "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", - "dev": true - }, - "socket.io-client": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", - "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.2.0", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "socket.io-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, - "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", - "dev": true, - "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" - }, - "dependencies": { - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - } - } - }, - "sockjs-client": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", - "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", - "dev": true, - "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", - "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "sourcemap-codec": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz", - "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==", - "dev": true - }, - "spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", - "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", - "dev": true - }, - "spdy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", - "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "readable-stream": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", - "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "dev": true, - "requires": { - "through": "2" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "split2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", - "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", - "dev": true, - "requires": { - "through2": "^2.0.2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "standard-version": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/standard-version/-/standard-version-4.4.0.tgz", - "integrity": "sha512-jJ8FZhnmh9xJRQLnaXiGRLaAUNItIH29lOQZGpL5fd4+jUHto9Ij6SPCYN86h6ZNNXkYq2TYiIVVF7gVyC+pcQ==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "conventional-changelog": "^1.1.0", - "conventional-recommended-bump": "^1.0.0", - "dotgitignore": "^1.0.3", - "figures": "^1.5.0", - "fs-access": "^1.0.0", - "semver": "^5.1.0", - "yargs": "^8.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" - } - } - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - }, - "stdout-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", - "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "dev": true, - "requires": { - "duplexer": "~0.1.1" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "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": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "streamroller": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", - "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", - "dev": true, - "requires": { - "date-format": "^1.2.0", - "debug": "^3.1.0", - "mkdirp": "^0.5.1", - "readable-stream": "^2.3.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - }, - "dependencies": { - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - } - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "stylus": { - "version": "0.54.5", - "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", - "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", - "dev": true, - "requires": { - "css-parse": "1.7.x", - "debug": "*", - "glob": "7.0.x", - "mkdirp": "0.5.x", - "sax": "0.5.x", - "source-map": "0.1.x" - }, - "dependencies": { - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tapable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", - "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", - "dev": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - } - }, - "terser": { - "version": "3.16.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.16.1.tgz", - "integrity": "sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==", - "dev": true, - "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1", - "source-map-support": "~0.5.9" - }, - "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz", - "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==", - "dev": true, - "requires": { - "cacache": "^11.0.2", - "find-cache-dir": "^2.0.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "terser": "^3.16.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "text-encoding": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", - "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=", - "dev": true - }, - "text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "thunky": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", - "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", - "dev": true - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - } - } - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "traverse": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", - "dev": true - }, - "tree-kill": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz", - "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==", - "dev": true - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "true-case-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", - "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", - "dev": true, - "requires": { - "glob": "^7.1.2" - } - }, - "ts-loader": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.3.3.tgz", - "integrity": "sha512-KwF1SplmOJepnoZ4eRIloH/zXL195F51skt7reEsS6jvDqzgc/YSbz9b8E07GxIUwLXdcD4ssrJu6v8CwaTafA==", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^1.0.2", - "micromatch": "^3.1.4", - "semver": "^5.0.1" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "ts-node": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.0.2.tgz", - "integrity": "sha512-MosTrinKmaAcWgO8tqMjMJB22h+sp3Rd1i4fdoWY4mhBDekOwIAKI/bzmRi7IcbCmjquccYg2gcF6NBkLgr0Tw==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "source-map-support": "^0.5.6", - "yn": "^3.0.0" - } - }, - "ts-simple-ast": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/ts-simple-ast/-/ts-simple-ast-12.4.0.tgz", - "integrity": "sha512-7GJFZlyTZY7uMAEhX62ZLxdwOpGDJzc/nwpi1nRPZ7N2ICcqqrMjDtRnki15IUBv2ZjIGu6KBqk/pUqJFODFsg==", - "dev": true, - "requires": { - "@dsherret/to-absolute-glob": "^2.0.2", - "code-block-writer": "^7.2.0", - "fs-extra": "^6.0.1", - "glob-parent": "^3.1.0", - "globby": "^8.0.1", - "is-negated-glob": "^1.0.0", - "multimatch": "^2.1.0", - "object-assign": "^4.1.1", - "tslib": "^1.9.0", - "typescript": "2.9.1" - }, - "dependencies": { - "fs-extra": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", - "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - }, - "typescript": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.1.tgz", - "integrity": "sha512-h6pM2f/GDchCFlldnriOhs1QHuwbnmj6/v7499eMHqPeW4V2G0elua2eIc2nu8v2NdHV0Gm+tzX83Hr6nUFjQA==", - "dev": true - } - } - }, - "tsickle": { - "version": "0.34.0", - "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.34.0.tgz", - "integrity": "sha512-O3wCPRtL18Hc/ZBnaiKwmmjVzeCWTOTpsi0btfC7FWL3RnXpxLPxD6hoJ0QEXuSfG/0QJk+MWNjqT9N6fOyyIg==", - "dev": true, - "requires": { - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - }, - "tslint": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz", - "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==", - "dev": true, - "requires": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.27.2" - } - }, - "tslint-config-mwl": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/tslint-config-mwl/-/tslint-config-mwl-0.5.2.tgz", - "integrity": "sha512-WWcI75/86nlDCTA7UVeRZQIC1BK0qDB+hU6f9CdLdkq60TM5MsnvUHvfQpJinQE2HWvfcP1vlcNj9aTrpLuUiQ==", - "dev": true, - "requires": { - "codelyzer": "^4.4.1", - "rxjs-tslint-rules": "^4.4.2", - "tslint-config-prettier": "^1.13.0" - } - }, - "tslint-config-prettier": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz", - "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", - "dev": true - }, - "tslint-loader": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/tslint-loader/-/tslint-loader-3.6.0.tgz", - "integrity": "sha512-Me9Qf/87BOfCY8uJJw+J7VMF4U8WiMXKLhKKKugMydF0xMhMOt9wo2mjYTNhwbF9H7SHh8PAIwRG8roisTNekQ==", - "dev": true, - "requires": { - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "object-assign": "^4.1.1", - "rimraf": "^2.4.4", - "semver": "^5.3.0" - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.18" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typescript": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", - "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", - "dev": true - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true - }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", - "dev": true, - "optional": true, - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true - }, - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", - "dev": true, - "optional": true - }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } - } - } - }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", - "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unix-crypt-td-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.0.0.tgz", - "integrity": "sha1-HAgkFQSBvHoB1J6Y8exmjYJBLzs=", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, - "url-parse": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", - "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", - "dev": true, - "requires": { - "querystringify": "^2.0.0", - "requires-port": "^1.0.0" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "useragent": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", - "dev": true, - "requires": { - "lru-cache": "4.1.x", - "tmp": "0.0.x" - } - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, - "v8-compile-cache": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", - "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", - "dev": true - }, - "validate-commit-msg": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/validate-commit-msg/-/validate-commit-msg-2.14.0.tgz", - "integrity": "sha1-5Tg2kQEsuycNzAvCpO/+vhSJDqw=", - "dev": true, - "requires": { - "conventional-commit-types": "^2.0.0", - "find-parent-dir": "^0.3.0", - "findup": "0.1.5", - "semver-regex": "1.0.0" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "viz.js": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/viz.js/-/viz.js-1.8.2.tgz", - "integrity": "sha512-W+1+N/hdzLpQZEcvz79n2IgUE9pfx6JLdHh3Kh8RGvLL8P1LdJVQmi2OsDcLdY4QVID4OUy+FPelyerX0nJxIQ==", - "dev": true - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } - }, - "void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", - "dev": true - }, - "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", - "dev": true, - "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - } - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webpack": { - "version": "4.29.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.1.tgz", - "integrity": "sha512-dY3KyQIVeg6cDPj9G5Bnjy9Pt9SoCpbNWl0RDKHstbd3MWe0dG9ri4RQRpCm43iToy3zoA1IMOpFkJ8Clnc7FQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/wasm-edit": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "acorn": "^6.0.5", - "acorn-dynamic-import": "^4.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", - "schema-utils": "^0.4.4", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" - }, - "dependencies": { - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" - } - } - } - }, - "webpack-cli": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.2.3.tgz", - "integrity": "sha512-Ik3SjV6uJtWIAN5jp5ZuBMWEAaP5E4V78XJ2nI+paFPh8v4HPSwo/myN0r29Xc/6ZKnd2IdrAlpSgNOu2CDQ6Q==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.0", - "findup-sync": "^2.0.0", - "global-modules": "^1.0.0", - "import-local": "^2.0.0", - "interpret": "^1.1.0", - "loader-utils": "^1.1.0", - "supports-color": "^5.5.0", - "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.4" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "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" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "mem": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", - "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^2.0.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "webpack-dev-middleware": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.5.1.tgz", - "integrity": "sha512-4dwCh/AyMOYAybggUr8fiCkRnjVDp+Cqlr9c+aaNB3GJYgRGYQWJ1YX/WAKUNA9dPNHZ6QSN2lYDKqjKSI8Vqw==", - "dev": true, - "requires": { - "memory-fs": "~0.4.1", - "mime": "^2.3.1", - "range-parser": "^1.0.3", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", - "dev": true - } - } - }, - "webpack-dev-server": { - "version": "3.1.14", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz", - "integrity": "sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.0.0", - "compression": "^1.5.2", - "connect-history-api-fallback": "^1.3.0", - "debug": "^3.1.0", - "del": "^3.0.0", - "express": "^4.16.2", - "html-entities": "^1.2.0", - "http-proxy-middleware": "~0.18.0", - "import-local": "^2.0.0", - "internal-ip": "^3.0.1", - "ip": "^1.1.5", - "killable": "^1.0.0", - "loglevel": "^1.4.1", - "opn": "^5.1.0", - "portfinder": "^1.0.9", - "schema-utils": "^1.0.0", - "selfsigned": "^1.9.1", - "semver": "^5.6.0", - "serve-index": "^1.7.2", - "sockjs": "0.3.19", - "sockjs-client": "1.3.0", - "spdy": "^4.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^5.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "3.4.0", - "webpack-log": "^2.0.0", - "yargs": "12.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" - } - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "decamelize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", - "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", - "dev": true, - "requires": { - "xregexp": "4.0.0" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "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" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "mem": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz", - "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^2.0.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-limit": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz", - "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "webpack-dev-middleware": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", - "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", - "dev": true, - "requires": { - "memory-fs": "~0.4.1", - "mime": "^2.3.1", - "range-parser": "^1.0.3", - "webpack-log": "^2.0.0" - } - }, - "yargs": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", - "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^2.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^10.1.0" - } - }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - } - } - }, - "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", - "dev": true, - "requires": { - "http-parser-js": ">=0.4.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true, - "optional": true - }, - "windows-release": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.1.0.tgz", - "integrity": "sha512-hBb7m7acFgQPQc222uEQTmdcGLeBmQLNLFIh0rDk3CwFOBrfjefLzEfEfmpMq8Af/n/GnFf3eYf203FY1PmudA==", - "dev": true, - "requires": { - "execa": "^0.10.0" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.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" - } - } - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, - "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz", - "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "dev": true - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true - }, - "xregexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", - "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", - "dev": true - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true - }, - "xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "dev": true, - "requires": { - "cuint": "^0.2.2" - } - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", - "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, - "yn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.0.0.tgz", - "integrity": "sha512-+Wo/p5VRfxUgBUGy2j/6KX2mj9AYJWOHuhMjMcbBFc3y54o9/4buK1ksBvuiK01C3kby8DH9lSmJdSxw+4G/2Q==", - "dev": true - }, - "zone.js": { - "version": "0.8.29", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.29.tgz", - "integrity": "sha512-mla2acNCMkWXBD+c+yeUrBUrzOxYMNFdQ6FGfigGGtEVBPJx07BQeJekjt9DmH1FtZek4E9rE1eRR9qQpxACOQ==", - "dev": true - } - } -} diff --git a/package.json b/package.json index 93d2a6c..1915d21 100644 --- a/package.json +++ b/package.json @@ -2,29 +2,6 @@ "name": "angular-resizable-element", "version": "3.2.4", "description": "An angular 6.0+ directive that allows an element to be dragged and resized", - "scripts": { - "start": "concurrently --raw \"webpack-dev-server --open\" \"npm run test:watch\"", - "build:demo": "webpack", - "build:dist": "ng-packagr -p package.json", - "build:clean": "rm -rf dist", - "test": "karma start --single-run && npm run build:dist && npm run build:clean", - "test:watch": "karma start --auto-watch", - "commit": "git-cz", - "compodoc": "compodoc -p tsconfig-compodoc.json -d docs --disableGraph --disableCoverage --disablePrivate --disableInternal --disableLifeCycleHooks --disableProtected", - "gh-pages": "git checkout gh-pages && git merge master --no-edit && npm run build:demo && npm run compodoc && git add . && git commit -m 'chore: build demo and docs' && git push && git checkout master", - "copyfiles": "copyfiles CHANGELOG.md dist", - "prerelease": "npm test", - "release:git": "standard-version && git push --follow-tags origin master", - "release:npm": "npm run build:dist && npm run copyfiles && npm publish dist", - "release": "npm run release:git && npm run release:npm", - "postrelease": "npm run build:clean && npm run gh-pages", - "codecov": "cat coverage/lcov.info | codecov" - }, - "ngPackage": { - "lib": { - "entryFile": "src/index.ts" - } - }, "repository": { "type": "git", "url": "git+https://github.com/mattlewis92/angular-resizable-element.git" @@ -105,5 +82,18 @@ "commit-msg": "validate-commit-msg", "pre-commit": "pretty-quick --staged" } + }, + "main": "bundles/angular-resizable-element.umd.js", + "module": "fesm5/angular-resizable-element.js", + "es2015": "fesm2015/angular-resizable-element.js", + "esm5": "esm5/angular-resizable-element.js", + "esm2015": "esm2015/angular-resizable-element.js", + "fesm5": "fesm5/angular-resizable-element.js", + "fesm2015": "fesm2015/angular-resizable-element.js", + "typings": "angular-resizable-element.d.ts", + "metadata": "angular-resizable-element.metadata.json", + "sideEffects": false, + "dependencies": { + "tslib": "^1.9.0" } } diff --git a/dist/resizable.directive.d.ts b/resizable.directive.d.ts similarity index 100% rename from dist/resizable.directive.d.ts rename to resizable.directive.d.ts diff --git a/dist/resizable.module.d.ts b/resizable.module.d.ts similarity index 100% rename from dist/resizable.module.d.ts rename to resizable.module.d.ts diff --git a/dist/resize-handle.directive.d.ts b/resize-handle.directive.d.ts similarity index 100% rename from dist/resize-handle.directive.d.ts rename to resize-handle.directive.d.ts diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index 3c43718..0000000 --- a/src/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export * from './resizable.module'; -export { BoundingRectangle } from './interfaces/bounding-rectangle.interface'; -export { Edges } from './interfaces/edges.interface'; -export { ResizeEvent } from './interfaces/resize-event.interface'; -export { ResizableDirective } from './resizable.directive'; -export { ResizeHandleDirective } from './resize-handle.directive'; diff --git a/src/interfaces/bounding-rectangle.interface.ts b/src/interfaces/bounding-rectangle.interface.ts deleted file mode 100644 index 56f5bf7..0000000 --- a/src/interfaces/bounding-rectangle.interface.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The bounding rectangle of the resized element - */ -export interface BoundingRectangle { - top: number; - bottom: number; - left: number; - right: number; - height?: number; - width?: number; - scrollTop?: number; - scrollLeft?: number; - [key: string]: number | undefined; -} diff --git a/src/interfaces/edges.interface.ts b/src/interfaces/edges.interface.ts deleted file mode 100644 index aa6fdc7..0000000 --- a/src/interfaces/edges.interface.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * The edges that the resize event were triggered on - */ -export interface Edges { - top?: boolean | number; - bottom?: boolean | number; - left?: boolean | number; - right?: boolean | number; - [key: string]: boolean | number | undefined; -} diff --git a/src/interfaces/resize-event.interface.ts b/src/interfaces/resize-event.interface.ts deleted file mode 100644 index 00415b9..0000000 --- a/src/interfaces/resize-event.interface.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { BoundingRectangle } from './bounding-rectangle.interface'; -import { Edges } from './edges.interface'; - -/** - * The `$event` object that is passed to the resize events - */ -export interface ResizeEvent { - rectangle: BoundingRectangle; - edges: Edges; -} diff --git a/src/resizable.directive.ts b/src/resizable.directive.ts deleted file mode 100644 index 26ede4f..0000000 --- a/src/resizable.directive.ts +++ /dev/null @@ -1,972 +0,0 @@ -import { - Directive, - Renderer2, - ElementRef, - OnInit, - Output, - Input, - EventEmitter, - OnDestroy, - NgZone, - OnChanges, - SimpleChanges, - Inject, - PLATFORM_ID -} from '@angular/core'; -import { isPlatformBrowser } from '@angular/common'; -import { Subject, Observable, Observer, merge, EMPTY } from 'rxjs'; -import { - map, - mergeMap, - takeUntil, - filter, - pairwise, - take, - share, - auditTime, - switchMap, - startWith -} from 'rxjs/operators'; -import { Edges } from './interfaces/edges.interface'; -import { BoundingRectangle } from './interfaces/bounding-rectangle.interface'; -import { ResizeEvent } from './interfaces/resize-event.interface'; - -interface PointerEventCoordinate { - clientX: number; - clientY: number; - event: MouseEvent | TouchEvent; -} - -interface Coordinate { - x: number; - y: number; -} - -function isNumberCloseTo( - value1: number, - value2: number, - precision: number = 3 -): boolean { - const diff: number = Math.abs(value1 - value2); - return diff < precision; -} - -function getNewBoundingRectangle( - startingRect: BoundingRectangle, - edges: Edges, - clientX: number, - clientY: number -): BoundingRectangle { - const newBoundingRect: BoundingRectangle = { - top: startingRect.top, - bottom: startingRect.bottom, - left: startingRect.left, - right: startingRect.right - }; - - if (edges.top) { - newBoundingRect.top += clientY; - } - if (edges.bottom) { - newBoundingRect.bottom += clientY; - } - if (edges.left) { - newBoundingRect.left += clientX; - } - if (edges.right) { - newBoundingRect.right += clientX; - } - newBoundingRect.height = newBoundingRect.bottom - newBoundingRect.top; - newBoundingRect.width = newBoundingRect.right - newBoundingRect.left; - - return newBoundingRect; -} - -function getElementRect( - element: ElementRef, - ghostElementPositioning: string -): BoundingRectangle { - let translateX = 0; - let translateY = 0; - const style = element.nativeElement.style; - const transformProperties = [ - 'transform', - '-ms-transform', - '-moz-transform', - '-o-transform' - ]; - const transform = transformProperties - .map(property => style[property]) - .find(value => !!value); - if (transform && transform.includes('translate3d')) { - translateX = transform.replace( - /.*translate3d\((.*)px, (.*)px, (.*)px\).*/, - '$1' - ); - translateY = transform.replace( - /.*translate3d\((.*)px, (.*)px, (.*)px\).*/, - '$2' - ); - } else if (transform && transform.includes('translate')) { - translateX = transform.replace(/.*translate\((.*)px, (.*)px\).*/, '$1'); - translateY = transform.replace(/.*translate\((.*)px, (.*)px\).*/, '$2'); - } - - if (ghostElementPositioning === 'absolute') { - return { - height: element.nativeElement.offsetHeight, - width: element.nativeElement.offsetWidth, - top: element.nativeElement.offsetTop - translateY, - bottom: - element.nativeElement.offsetHeight + - element.nativeElement.offsetTop - - translateY, - left: element.nativeElement.offsetLeft - translateX, - right: - element.nativeElement.offsetWidth + - element.nativeElement.offsetLeft - - translateX - }; - } else { - const boundingRect: BoundingRectangle = element.nativeElement.getBoundingClientRect(); - return { - height: boundingRect.height, - width: boundingRect.width, - top: boundingRect.top - translateY, - bottom: boundingRect.bottom - translateY, - left: boundingRect.left - translateX, - right: boundingRect.right - translateX, - scrollTop: element.nativeElement.scrollTop, - scrollLeft: element.nativeElement.scrollLeft - }; - } -} - -function isWithinBoundingY({ - clientY, - rect -}: { - clientY: number; - rect: ClientRect; -}): boolean { - return clientY >= rect.top && clientY <= rect.bottom; -} - -function isWithinBoundingX({ - clientX, - rect -}: { - clientX: number; - rect: ClientRect; -}): boolean { - return clientX >= rect.left && clientX <= rect.right; -} - -function getResizeEdges({ - clientX, - clientY, - elm, - allowedEdges, - cursorPrecision -}: { - clientX: number; - clientY: number; - elm: ElementRef; - allowedEdges: Edges; - cursorPrecision: number; -}): Edges { - const elmPosition: ClientRect = elm.nativeElement.getBoundingClientRect(); - const edges: Edges = {}; - - if ( - allowedEdges.left && - isNumberCloseTo(clientX, elmPosition.left, cursorPrecision) && - isWithinBoundingY({ clientY, rect: elmPosition }) - ) { - edges.left = true; - } - - if ( - allowedEdges.right && - isNumberCloseTo(clientX, elmPosition.right, cursorPrecision) && - isWithinBoundingY({ clientY, rect: elmPosition }) - ) { - edges.right = true; - } - - if ( - allowedEdges.top && - isNumberCloseTo(clientY, elmPosition.top, cursorPrecision) && - isWithinBoundingX({ clientX, rect: elmPosition }) - ) { - edges.top = true; - } - - if ( - allowedEdges.bottom && - isNumberCloseTo(clientY, elmPosition.bottom, cursorPrecision) && - isWithinBoundingX({ clientX, rect: elmPosition }) - ) { - edges.bottom = true; - } - - return edges; -} - -export interface ResizeCursors { - topLeft: string; - topRight: string; - bottomLeft: string; - bottomRight: string; - leftOrRight: string; - topOrBottom: string; -} - -const DEFAULT_RESIZE_CURSORS: ResizeCursors = Object.freeze({ - topLeft: 'nw-resize', - topRight: 'ne-resize', - bottomLeft: 'sw-resize', - bottomRight: 'se-resize', - leftOrRight: 'col-resize', - topOrBottom: 'row-resize' -}); - -function getResizeCursor(edges: Edges, cursors: ResizeCursors): string { - if (edges.left && edges.top) { - return cursors.topLeft; - } else if (edges.right && edges.top) { - return cursors.topRight; - } else if (edges.left && edges.bottom) { - return cursors.bottomLeft; - } else if (edges.right && edges.bottom) { - return cursors.bottomRight; - } else if (edges.left || edges.right) { - return cursors.leftOrRight; - } else if (edges.top || edges.bottom) { - return cursors.topOrBottom; - } else { - return ''; - } -} - -function getEdgesDiff({ - edges, - initialRectangle, - newRectangle -}: { - edges: Edges; - initialRectangle: BoundingRectangle; - newRectangle: BoundingRectangle; -}): Edges { - const edgesDiff: Edges = {}; - Object.keys(edges).forEach(edge => { - edgesDiff[edge] = (newRectangle[edge] || 0) - (initialRectangle[edge] || 0); - }); - return edgesDiff; -} - -const RESIZE_ACTIVE_CLASS: string = 'resize-active'; -const RESIZE_LEFT_HOVER_CLASS: string = 'resize-left-hover'; -const RESIZE_RIGHT_HOVER_CLASS: string = 'resize-right-hover'; -const RESIZE_TOP_HOVER_CLASS: string = 'resize-top-hover'; -const RESIZE_BOTTOM_HOVER_CLASS: string = 'resize-bottom-hover'; -const RESIZE_GHOST_ELEMENT_CLASS: string = 'resize-ghost-element'; - -export const MOUSE_MOVE_THROTTLE_MS: number = 50; - -/** - * Place this on an element to make it resizable. For example: - * - * ```html - *
- *
- * ``` - */ -@Directive({ - selector: '[mwlResizable]' -}) -export class ResizableDirective implements OnInit, OnChanges, OnDestroy { - /** - * A function that will be called before each resize event. Return `true` to allow the resize event to propagate or `false` to cancel it - */ - @Input() validateResize: (resizeEvent: ResizeEvent) => boolean; - - /** - * The edges that an element can be resized from. Pass an object like `{top: true, bottom: false}`. By default no edges can be resized. - * @deprecated use a resize handle instead that positions itself to the side of the element you would like to resize - */ - @Input() resizeEdges: Edges = {}; - - /** - * Set to `true` to enable a temporary resizing effect of the element in between the `resizeStart` and `resizeEnd` events. - */ - @Input() enableGhostResize: boolean = false; - - /** - * A snap grid that resize events will be locked to. - * - * e.g. to only allow the element to be resized every 10px set it to `{left: 10, right: 10}` - */ - @Input() resizeSnapGrid: Edges = {}; - - /** - * The mouse cursors that will be set on the resize edges - */ - @Input() resizeCursors: ResizeCursors = DEFAULT_RESIZE_CURSORS; - - /** - * Mouse over thickness to active cursor. - * @deprecated invalid when you migrate to use resize handles instead of setting resizeEdges on the element - */ - @Input() resizeCursorPrecision: number = 3; - - /** - * Define the positioning of the ghost element (can be fixed or absolute) - */ - @Input() ghostElementPositioning: 'fixed' | 'absolute' = 'fixed'; - - /** - * Allow elements to be resized to negative dimensions - */ - @Input() allowNegativeResizes: boolean = false; - - /** - * Called when the mouse is pressed and a resize event is about to begin. `$event` is a `ResizeEvent` object. - */ - @Output() resizeStart = new EventEmitter(); - - /** - * Called as the mouse is dragged after a resize event has begun. `$event` is a `ResizeEvent` object. - */ - @Output() resizing = new EventEmitter(); - - /** - * Called after the mouse is released after a resize event. `$event` is a `ResizeEvent` object. - */ - @Output() resizeEnd = new EventEmitter(); - - /** - * @hidden - */ - public mouseup = new Subject<{ - clientX: number; - clientY: number; - edges?: Edges; - }>(); - - /** - * @hidden - */ - public mousedown = new Subject<{ - clientX: number; - clientY: number; - edges?: Edges; - }>(); - - /** - * @hidden - */ - public mousemove = new Subject<{ - clientX: number; - clientY: number; - edges?: Edges; - event: MouseEvent | TouchEvent; - }>(); - - private pointerEventListeners: PointerEventListeners; - - private destroy$ = new Subject(); - - private resizeEdges$ = new Subject(); - - /** - * @hidden - */ - constructor( - @Inject(PLATFORM_ID) private platformId: any, - private renderer: Renderer2, - public elm: ElementRef, - private zone: NgZone - ) { - this.pointerEventListeners = PointerEventListeners.getInstance( - renderer, - zone - ); - } - - /** - * @hidden - */ - ngOnInit(): void { - // TODO - use some fancy Observable.merge's for this - this.pointerEventListeners.pointerDown - .pipe(takeUntil(this.destroy$)) - .subscribe(({ clientX, clientY }) => { - this.mousedown.next({ clientX, clientY }); - }); - - this.pointerEventListeners.pointerMove - .pipe(takeUntil(this.destroy$)) - .subscribe(({ clientX, clientY, event }) => { - this.mousemove.next({ clientX, clientY, event }); - }); - - this.pointerEventListeners.pointerUp - .pipe(takeUntil(this.destroy$)) - .subscribe(({ clientX, clientY }) => { - this.mouseup.next({ clientX, clientY }); - }); - - let currentResize: { - edges: Edges; - startingRect: BoundingRectangle; - currentRect: BoundingRectangle; - clonedNode?: HTMLElement; - } | null; - - const removeGhostElement = () => { - if (currentResize && currentResize.clonedNode) { - this.elm.nativeElement.parentElement.removeChild( - currentResize.clonedNode - ); - this.renderer.setStyle(this.elm.nativeElement, 'visibility', 'inherit'); - } - }; - - const getResizeCursors = (): ResizeCursors => { - return { - ...DEFAULT_RESIZE_CURSORS, - ...this.resizeCursors - }; - }; - - const mouseMove: Observable = this.mousemove.pipe(share()); - - mouseMove.pipe(filter(() => !!currentResize)).subscribe(({ event }) => { - event.preventDefault(); - }); - - this.resizeEdges$ - .pipe( - startWith(this.resizeEdges), - map(() => { - return ( - this.resizeEdges && - Object.keys(this.resizeEdges).some(edge => !!this.resizeEdges[edge]) - ); - }), - switchMap(legacyResizeEdgesEnabled => - legacyResizeEdgesEnabled ? mouseMove : EMPTY - ), - auditTime(MOUSE_MOVE_THROTTLE_MS) - ) - .subscribe(({ clientX, clientY }) => { - const resizeEdges: Edges = getResizeEdges({ - clientX, - clientY, - elm: this.elm, - allowedEdges: this.resizeEdges, - cursorPrecision: this.resizeCursorPrecision - }); - const resizeCursors = getResizeCursors(); - if (!currentResize) { - const cursor = getResizeCursor(resizeEdges, resizeCursors); - this.renderer.setStyle(this.elm.nativeElement, 'cursor', cursor); - } - this.setElementClass( - this.elm, - RESIZE_LEFT_HOVER_CLASS, - resizeEdges.left === true - ); - this.setElementClass( - this.elm, - RESIZE_RIGHT_HOVER_CLASS, - resizeEdges.right === true - ); - this.setElementClass( - this.elm, - RESIZE_TOP_HOVER_CLASS, - resizeEdges.top === true - ); - this.setElementClass( - this.elm, - RESIZE_BOTTOM_HOVER_CLASS, - resizeEdges.bottom === true - ); - }); - - const mousedrag: Observable = this.mousedown - .pipe( - mergeMap(startCoords => { - function getDiff(moveCoords: { clientX: number; clientY: number }) { - return { - clientX: moveCoords.clientX - startCoords.clientX, - clientY: moveCoords.clientY - startCoords.clientY - }; - } - - const getSnapGrid = () => { - const snapGrid: Coordinate = { x: 1, y: 1 }; - - if (currentResize) { - if (this.resizeSnapGrid.left && currentResize.edges.left) { - snapGrid.x = +this.resizeSnapGrid.left; - } else if ( - this.resizeSnapGrid.right && - currentResize.edges.right - ) { - snapGrid.x = +this.resizeSnapGrid.right; - } - - if (this.resizeSnapGrid.top && currentResize.edges.top) { - snapGrid.y = +this.resizeSnapGrid.top; - } else if ( - this.resizeSnapGrid.bottom && - currentResize.edges.bottom - ) { - snapGrid.y = +this.resizeSnapGrid.bottom; - } - } - - return snapGrid; - }; - - function getGrid( - coords: { clientX: number; clientY: number }, - snapGrid: Coordinate - ) { - return { - x: Math.ceil(coords.clientX / snapGrid.x), - y: Math.ceil(coords.clientY / snapGrid.y) - }; - } - - return merge( - mouseMove.pipe(take(1)).pipe(map(coords => [coords])), - mouseMove.pipe(pairwise()) - ) - .pipe( - map(([previousCoords, newCoords]) => { - return [ - previousCoords ? getDiff(previousCoords) : previousCoords, - getDiff(newCoords) - ]; - }) - ) - .pipe( - filter(([previousCoords, newCoords]) => { - if (!previousCoords) { - return true; - } - - const snapGrid: Coordinate = getSnapGrid(); - const previousGrid: Coordinate = getGrid( - previousCoords, - snapGrid - ); - const newGrid: Coordinate = getGrid(newCoords, snapGrid); - - return ( - previousGrid.x !== newGrid.x || previousGrid.y !== newGrid.y - ); - }) - ) - .pipe( - map(([, newCoords]) => { - const snapGrid: Coordinate = getSnapGrid(); - return { - clientX: - Math.round(newCoords.clientX / snapGrid.x) * snapGrid.x, - clientY: - Math.round(newCoords.clientY / snapGrid.y) * snapGrid.y - }; - }) - ) - .pipe(takeUntil(merge(this.mouseup, this.mousedown))); - }) - ) - .pipe(filter(() => !!currentResize)); - - mousedrag - .pipe( - map(({ clientX, clientY }) => { - return getNewBoundingRectangle( - currentResize!.startingRect, - currentResize!.edges, - clientX, - clientY - ); - }) - ) - .pipe( - filter((newBoundingRect: BoundingRectangle) => { - return ( - this.allowNegativeResizes || - !!( - newBoundingRect.height && - newBoundingRect.width && - newBoundingRect.height > 0 && - newBoundingRect.width > 0 - ) - ); - }) - ) - .pipe( - filter((newBoundingRect: BoundingRectangle) => { - return this.validateResize - ? this.validateResize({ - rectangle: newBoundingRect, - edges: getEdgesDiff({ - edges: currentResize!.edges, - initialRectangle: currentResize!.startingRect, - newRectangle: newBoundingRect - }) - }) - : true; - }) - ) - .subscribe((newBoundingRect: BoundingRectangle) => { - if (currentResize && currentResize.clonedNode) { - this.renderer.setStyle( - currentResize.clonedNode, - 'height', - `${newBoundingRect.height}px` - ); - this.renderer.setStyle( - currentResize.clonedNode, - 'width', - `${newBoundingRect.width}px` - ); - this.renderer.setStyle( - currentResize.clonedNode, - 'top', - `${newBoundingRect.top}px` - ); - this.renderer.setStyle( - currentResize.clonedNode, - 'left', - `${newBoundingRect.left}px` - ); - } - - this.zone.run(() => { - this.resizing.emit({ - edges: getEdgesDiff({ - edges: currentResize!.edges, - initialRectangle: currentResize!.startingRect, - newRectangle: newBoundingRect - }), - rectangle: newBoundingRect - }); - }); - - currentResize!.currentRect = newBoundingRect; - }); - - this.mousedown - .pipe( - map(({ clientX, clientY, edges }) => { - return ( - edges || - getResizeEdges({ - clientX, - clientY, - elm: this.elm, - allowedEdges: this.resizeEdges, - cursorPrecision: this.resizeCursorPrecision - }) - ); - }) - ) - .pipe( - filter((edges: Edges) => { - return Object.keys(edges).length > 0; - }) - ) - .subscribe((edges: Edges) => { - if (currentResize) { - removeGhostElement(); - } - const startingRect: BoundingRectangle = getElementRect( - this.elm, - this.ghostElementPositioning - ); - currentResize = { - edges, - startingRect, - currentRect: startingRect - }; - const resizeCursors = getResizeCursors(); - const cursor = getResizeCursor(currentResize.edges, resizeCursors); - this.renderer.setStyle(document.body, 'cursor', cursor); - this.setElementClass(this.elm, RESIZE_ACTIVE_CLASS, true); - if (this.enableGhostResize) { - currentResize.clonedNode = this.elm.nativeElement.cloneNode(true); - this.elm.nativeElement.parentElement.appendChild( - currentResize.clonedNode - ); - this.renderer.setStyle( - this.elm.nativeElement, - 'visibility', - 'hidden' - ); - this.renderer.setStyle( - currentResize.clonedNode, - 'position', - this.ghostElementPositioning - ); - this.renderer.setStyle( - currentResize.clonedNode, - 'left', - `${currentResize.startingRect.left}px` - ); - this.renderer.setStyle( - currentResize.clonedNode, - 'top', - `${currentResize.startingRect.top}px` - ); - this.renderer.setStyle( - currentResize.clonedNode, - 'height', - `${currentResize.startingRect.height}px` - ); - this.renderer.setStyle( - currentResize.clonedNode, - 'width', - `${currentResize.startingRect.width}px` - ); - this.renderer.setStyle( - currentResize.clonedNode, - 'cursor', - getResizeCursor(currentResize.edges, resizeCursors) - ); - this.renderer.addClass( - currentResize.clonedNode, - RESIZE_GHOST_ELEMENT_CLASS - ); - currentResize.clonedNode!.scrollTop = currentResize.startingRect - .scrollTop as number; - currentResize.clonedNode!.scrollLeft = currentResize.startingRect - .scrollLeft as number; - } - this.zone.run(() => { - this.resizeStart.emit({ - edges: getEdgesDiff({ - edges, - initialRectangle: startingRect, - newRectangle: startingRect - }), - rectangle: getNewBoundingRectangle(startingRect, {}, 0, 0) - }); - }); - }); - - this.mouseup.subscribe(() => { - if (currentResize) { - this.renderer.removeClass(this.elm.nativeElement, RESIZE_ACTIVE_CLASS); - this.renderer.setStyle(document.body, 'cursor', ''); - this.renderer.setStyle(this.elm.nativeElement, 'cursor', ''); - this.zone.run(() => { - this.resizeEnd.emit({ - edges: getEdgesDiff({ - edges: currentResize!.edges, - initialRectangle: currentResize!.startingRect, - newRectangle: currentResize!.currentRect - }), - rectangle: currentResize!.currentRect - }); - }); - removeGhostElement(); - currentResize = null; - } - }); - } - - /** - * @hidden - */ - ngOnChanges(changes: SimpleChanges): void { - if (changes.resizeEdges) { - this.resizeEdges$.next(this.resizeEdges); - } - } - - /** - * @hidden - */ - ngOnDestroy(): void { - // browser check for angular universal, because it doesn't know what document is - if (isPlatformBrowser(this.platformId)) { - this.renderer.setStyle(document.body, 'cursor', ''); - } - this.mousedown.complete(); - this.mouseup.complete(); - this.mousemove.complete(); - this.resizeEdges$.complete(); - this.destroy$.next(); - } - - private setElementClass(elm: ElementRef, name: string, add: boolean): void { - if (add) { - this.renderer.addClass(elm.nativeElement, name); - } else { - this.renderer.removeClass(elm.nativeElement, name); - } - } -} - -class PointerEventListeners { - public pointerDown: Observable; - - public pointerMove: Observable; - - public pointerUp: Observable; - - private static instance: PointerEventListeners; // tslint:disable-line - - public static getInstance( - renderer: Renderer2, - zone: NgZone - ): PointerEventListeners { - if (!PointerEventListeners.instance) { - PointerEventListeners.instance = new PointerEventListeners( - renderer, - zone - ); - } - return PointerEventListeners.instance; - } - - constructor(renderer: Renderer2, zone: NgZone) { - this.pointerDown = new Observable( - (observer: Observer) => { - let unsubscribeMouseDown: () => void; - let unsubscribeTouchStart: () => void; - - zone.runOutsideAngular(() => { - unsubscribeMouseDown = renderer.listen( - 'document', - 'mousedown', - (event: MouseEvent) => { - observer.next({ - clientX: event.clientX, - clientY: event.clientY, - event - }); - } - ); - - unsubscribeTouchStart = renderer.listen( - 'document', - 'touchstart', - (event: TouchEvent) => { - observer.next({ - clientX: event.touches[0].clientX, - clientY: event.touches[0].clientY, - event - }); - } - ); - }); - - return () => { - unsubscribeMouseDown(); - unsubscribeTouchStart(); - }; - } - ).pipe(share()); - - this.pointerMove = new Observable( - (observer: Observer) => { - let unsubscribeMouseMove: () => void; - let unsubscribeTouchMove: () => void; - - zone.runOutsideAngular(() => { - unsubscribeMouseMove = renderer.listen( - 'document', - 'mousemove', - (event: MouseEvent) => { - observer.next({ - clientX: event.clientX, - clientY: event.clientY, - event - }); - } - ); - - unsubscribeTouchMove = renderer.listen( - 'document', - 'touchmove', - (event: TouchEvent) => { - observer.next({ - clientX: event.targetTouches[0].clientX, - clientY: event.targetTouches[0].clientY, - event - }); - } - ); - }); - - return () => { - unsubscribeMouseMove(); - unsubscribeTouchMove(); - }; - } - ).pipe(share()); - - this.pointerUp = new Observable( - (observer: Observer) => { - let unsubscribeMouseUp: () => void; - let unsubscribeTouchEnd: () => void; - let unsubscribeTouchCancel: () => void; - - zone.runOutsideAngular(() => { - unsubscribeMouseUp = renderer.listen( - 'document', - 'mouseup', - (event: MouseEvent) => { - observer.next({ - clientX: event.clientX, - clientY: event.clientY, - event - }); - } - ); - - unsubscribeTouchEnd = renderer.listen( - 'document', - 'touchend', - (event: TouchEvent) => { - observer.next({ - clientX: event.changedTouches[0].clientX, - clientY: event.changedTouches[0].clientY, - event - }); - } - ); - - unsubscribeTouchCancel = renderer.listen( - 'document', - 'touchcancel', - (event: TouchEvent) => { - observer.next({ - clientX: event.changedTouches[0].clientX, - clientY: event.changedTouches[0].clientY, - event - }); - } - ); - }); - - return () => { - unsubscribeMouseUp(); - unsubscribeTouchEnd(); - unsubscribeTouchCancel(); - }; - } - ).pipe(share()); - } -} diff --git a/src/resizable.module.ts b/src/resizable.module.ts deleted file mode 100644 index 3e2129e..0000000 --- a/src/resizable.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { NgModule } from '@angular/core'; -import { ResizableDirective } from './resizable.directive'; -import { ResizeHandleDirective } from './resize-handle.directive'; - -@NgModule({ - declarations: [ResizableDirective, ResizeHandleDirective], - exports: [ResizableDirective, ResizeHandleDirective] -}) -export class ResizableModule {} diff --git a/src/resize-handle.directive.ts b/src/resize-handle.directive.ts deleted file mode 100644 index 6ccbbd8..0000000 --- a/src/resize-handle.directive.ts +++ /dev/null @@ -1,142 +0,0 @@ -import { - Directive, - Input, - HostListener, - Renderer2, - ElementRef, - OnDestroy, - NgZone -} from '@angular/core'; -import { ResizableDirective } from './resizable.directive'; -import { Edges } from './interfaces/edges.interface'; - -/** - * An element placed inside a `mwlResizable` directive to be used as a drag and resize handle - * - * For example - * - * ```html - *
- *
- *
- * ``` - */ -@Directive({ - selector: '[mwlResizeHandle]' -}) -export class ResizeHandleDirective implements OnDestroy { - /** - * The `Edges` object that contains the edges of the parent element that dragging the handle will trigger a resize on - */ - @Input() resizeEdges: Edges = {}; - - private eventListeners: { - touchmove?: () => void; - mousemove?: () => void; - [key: string]: (() => void) | undefined; - } = {}; - - constructor( - private renderer: Renderer2, - private element: ElementRef, - private zone: NgZone, - private resizable: ResizableDirective - ) {} - - ngOnDestroy(): void { - this.unsubscribeEventListeners(); - } - - /** - * @hidden - */ - @HostListener('touchstart', [ - '$event', - '$event.touches[0].clientX', - '$event.touches[0].clientY' - ]) - @HostListener('mousedown', ['$event', '$event.clientX', '$event.clientY']) - onMousedown( - event: MouseEvent | TouchEvent, - clientX: number, - clientY: number - ): void { - event.preventDefault(); - this.zone.runOutsideAngular(() => { - if (!this.eventListeners.touchmove) { - this.eventListeners.touchmove = this.renderer.listen( - this.element.nativeElement, - 'touchmove', - (touchMoveEvent: TouchEvent) => { - this.onMousemove( - touchMoveEvent, - touchMoveEvent.targetTouches[0].clientX, - touchMoveEvent.targetTouches[0].clientY - ); - } - ); - } - if (!this.eventListeners.mousemove) { - this.eventListeners.mousemove = this.renderer.listen( - this.element.nativeElement, - 'mousemove', - (mouseMoveEvent: MouseEvent) => { - this.onMousemove( - mouseMoveEvent, - mouseMoveEvent.clientX, - mouseMoveEvent.clientY - ); - } - ); - } - this.resizable.mousedown.next({ - clientX, - clientY, - edges: this.resizeEdges - }); - }); - } - - /** - * @hidden - */ - @HostListener('touchend', [ - '$event.changedTouches[0].clientX', - '$event.changedTouches[0].clientY' - ]) - @HostListener('touchcancel', [ - '$event.changedTouches[0].clientX', - '$event.changedTouches[0].clientY' - ]) - @HostListener('mouseup', ['$event.clientX', '$event.clientY']) - onMouseup(clientX: number, clientY: number): void { - this.zone.runOutsideAngular(() => { - this.unsubscribeEventListeners(); - this.resizable.mouseup.next({ - clientX, - clientY, - edges: this.resizeEdges - }); - }); - } - - private onMousemove( - event: MouseEvent | TouchEvent, - clientX: number, - clientY: number - ): void { - this.resizable.mousemove.next({ - clientX, - clientY, - edges: this.resizeEdges, - event - }); - } - - private unsubscribeEventListeners(): void { - Object.keys(this.eventListeners).forEach(type => { - (this as any).eventListeners[type](); - delete this.eventListeners[type]; - }); - } -} diff --git a/test/entry.ts b/test/entry.ts deleted file mode 100644 index a6ac178..0000000 --- a/test/entry.ts +++ /dev/null @@ -1,28 +0,0 @@ -/// - -import 'core-js'; -import 'zone.js/dist/zone'; -import 'zone.js/dist/long-stack-trace-zone'; -import 'zone.js/dist/proxy'; -import 'zone.js/dist/sync-test'; -import 'zone.js/dist/mocha-patch'; -import 'zone.js/dist/async-test'; -import 'zone.js/dist/fake-async-test'; -import { TestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; -import { use } from 'chai'; -import * as sinonChai from 'sinon-chai'; - -use(sinonChai); - -TestBed.initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting() -); - -declare var require: any; -const testsContext: any = require.context('./', true, /\.spec/); -testsContext.keys().forEach(testsContext); diff --git a/test/resizable.spec.ts b/test/resizable.spec.ts deleted file mode 100644 index 433ac40..0000000 --- a/test/resizable.spec.ts +++ /dev/null @@ -1,1516 +0,0 @@ -/* tslint:disable:max-inline-declarations enforce-component-selector */ -import { Component, ViewChild } from '@angular/core'; -import { ResizableDirective } from '../src/resizable.directive'; -import { Edges } from '../src/interfaces/edges.interface'; -import { ResizeEvent, ResizableModule } from '../src'; -import { MOUSE_MOVE_THROTTLE_MS } from '../src/resizable.directive'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { expect } from 'chai'; -import * as sinon from 'sinon'; - -const delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); - -describe('resizable directive', () => { - @Component({ - styles: [ - ` - .rectangle { - position: relative; - top: 200px; - left: 100px; - width: 300px; - height: 150px; - } - ` - ], - template: ` -
- ` - }) - class TestComponent { - @ViewChild(ResizableDirective) resizable: ResizableDirective; - style: object = {}; - resizeStart: sinon.SinonSpy = sinon.spy(); - resizing: sinon.SinonSpy = sinon.spy(); - resizeEnd: sinon.SinonSpy = sinon.spy(); - validate: sinon.SinonStub = sinon.stub().returns(true); - resizeEdges: Edges = { - top: true, - bottom: true, - left: true, - right: true - }; - enableGhostResize: boolean = true; - resizeSnapGrid: object = {}; - resizeCursors: object = {}; - resizeCursorPrecision: number; - ghostElementPositioning: 'fixed' | 'absolute' = 'fixed'; - showResizeHandle = false; - allowNegativeResizes = false; - } - - function triggerDomEvent( - eventType: string, - target: HTMLElement | Element, - eventData: object = {} - ) { - const event: Event = document.createEvent('Event'); - Object.assign(event, eventData); - event.initEvent(eventType, true, true); - target.dispatchEvent(event); - } - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [ResizableModule], - declarations: [TestComponent] - }); - }); - - let component: ComponentFixture; - let createComponent: ( - template?: string, - styles?: string[] - ) => ComponentFixture; - beforeEach(() => { - document.body.style.margin = '0px'; - createComponent = (template?: string, styles?: string[]) => { - if (template) { - TestBed.overrideComponent(TestComponent, { set: { template } }); - } - if (styles) { - TestBed.overrideComponent(TestComponent, { set: { styles } }); - } - const fixture: ComponentFixture = TestBed.createComponent( - TestComponent - ); - fixture.detectChanges(); - document.body.appendChild(fixture.nativeElement.children[0]); - component = fixture; - return fixture; - }; - }); - - afterEach(() => { - if (component) { - component.destroy(); - document.body.innerHTML = ''; - } - }); - - describe('cursor changes', () => { - let assertions: any[]; - - it('should change the cursor to the row-resize when mousing over the top edge', () => { - assertions = [ - { - coords: { - clientX: 150, - clientY: 200 - }, - cursor: 'row-resize' - } - ]; - }); - - it('should change the cursor back to auto when moving away from the edge', () => { - assertions = [ - { - coords: { - clientX: 150, - clientY: 200 - }, - cursor: 'row-resize' - }, - { - coords: { - clientX: 150, - clientY: 197 - }, - cursor: '' - } - ]; - }); - - it('should change the cursor to the row-resize when mousing over the bottom edge', () => { - assertions = [ - { - coords: { - clientX: 150, - clientY: 350 - }, - cursor: 'row-resize' - } - ]; - }); - - it('should change the cursor to the col-resize when mousing over the left edge', () => { - assertions = [ - { - coords: { - clientX: 100, - clientY: 300 - }, - cursor: 'col-resize' - } - ]; - }); - - it('should change the cursor to the col-resize when mousing over the right edge', () => { - assertions = [ - { - coords: { - clientX: 400, - clientY: 300 - }, - cursor: 'col-resize' - } - ]; - }); - - it('should change the cursor to the nw-resize when mousing over the top left edge', () => { - assertions = [ - { - coords: { - clientX: 100, - clientY: 200 - }, - cursor: 'nw-resize' - } - ]; - }); - - it('should change the cursor to the ne-resize when mousing over the top right edge', () => { - assertions = [ - { - coords: { - clientX: 400, - clientY: 200 - }, - cursor: 'ne-resize' - } - ]; - }); - - it('should change the cursor to the sw-resize when mousing over the bottom left edge', () => { - assertions = [ - { - coords: { - clientX: 100, - clientY: 350 - }, - cursor: 'sw-resize' - } - ]; - }); - - it('should change the cursor to the se-resize when mousing over the bottom right edge', () => { - assertions = [ - { - coords: { - clientX: 400, - clientY: 350 - }, - cursor: 'se-resize' - } - ]; - }); - - afterEach(async () => { - const fixture: ComponentFixture = createComponent(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - - for (const assertion of assertions) { - const { coords, cursor } = assertion; - triggerDomEvent('mousemove', elm, coords); - await delay(MOUSE_MOVE_THROTTLE_MS); - expect(elm.style.cursor).to.equal(cursor); - } - }); - }); - - describe('resize events', () => { - let domEvents: any[]; - let spyName: string; - let expectedEvent: object; - - it('should emit a starting resize event', () => { - domEvents = [ - { - name: 'mousedown', - data: { - clientX: 150, - clientY: 200 - } - } - ]; - spyName = 'resizeStart'; - expectedEvent = { - edges: { - top: 0 - }, - rectangle: { - top: 200, - left: 100, - width: 300, - height: 150, - right: 400, - bottom: 350 - } - }; - }); - - it('should emit a resize event whenever the mouse is clicked and dragged', () => { - domEvents = [ - { - name: 'mousedown', - data: { - clientX: 150, - clientY: 200 - } - }, - { - name: 'mousemove', - data: { - clientX: 150, - clientY: 199 - } - } - ]; - spyName = 'resizing'; - expectedEvent = { - edges: { - top: -1 - }, - rectangle: { - top: 199, - left: 100, - width: 300, - height: 151, - right: 400, - bottom: 350 - } - }; - }); - - it('should resize from the top', () => { - domEvents = [ - { - name: 'mousedown', - data: { - clientX: 150, - clientY: 200 - } - }, - { - name: 'mousemove', - data: { - clientX: 150, - clientY: 199 - }, - style: { - top: '199px', - left: '100px', - width: '300px', - height: '151px' - } - }, - { - name: 'mousemove', - data: { - clientX: 150, - clientY: 198 - }, - style: { - top: '198px', - left: '100px', - width: '300px', - height: '152px' - } - }, - { - name: 'mouseup', - data: { - clientX: 150, - clientY: 198 - } - } - ]; - spyName = 'resizeEnd'; - expectedEvent = { - edges: { - top: -2 - }, - rectangle: { - top: 198, - left: 100, - width: 300, - height: 152, - right: 400, - bottom: 350 - } - }; - }); - - it('should resize from the left', () => { - domEvents = [ - { - name: 'mousedown', - data: { - clientX: 100, - clientY: 205 - } - }, - { - name: 'mousemove', - data: { - clientX: 99, - clientY: 205 - }, - style: { - top: '200px', - left: '99px', - width: '301px', - height: '150px' - } - }, - { - name: 'mousemove', - data: { - clientX: 98, - clientY: 205 - }, - style: { - top: '200px', - left: '98px', - width: '302px', - height: '150px' - } - }, - { - name: 'mouseup', - data: { - clientX: 98, - clientY: 205 - } - } - ]; - spyName = 'resizeEnd'; - expectedEvent = { - edges: { - left: -2 - }, - rectangle: { - top: 200, - left: 98, - width: 302, - height: 150, - right: 400, - bottom: 350 - } - }; - }); - - it('should resize from the bottom', () => { - domEvents = [ - { - name: 'mousedown', - data: { - clientX: 150, - clientY: 350 - } - }, - { - name: 'mousemove', - data: { - clientX: 150, - clientY: 351 - }, - style: { - top: '200px', - left: '100px', - width: '300px', - height: '151px' - } - }, - { - name: 'mousemove', - data: { - clientX: 150, - clientY: 352 - }, - style: { - top: '200px', - left: '100px', - width: '300px', - height: '152px' - } - }, - { - name: 'mouseup', - data: { - clientX: 150, - clientY: 352 - } - } - ]; - spyName = 'resizeEnd'; - expectedEvent = { - edges: { - bottom: 2 - }, - rectangle: { - top: 200, - left: 100, - width: 300, - height: 152, - right: 400, - bottom: 352 - } - }; - }); - - it('should resize from the right', () => { - domEvents = [ - { - name: 'mousedown', - data: { - clientX: 400, - clientY: 205 - } - }, - { - name: 'mousemove', - data: { - clientX: 401, - clientY: 205 - }, - style: { - top: '200px', - left: '100px', - width: '301px', - height: '150px' - } - }, - { - name: 'mousemove', - data: { - clientX: 402, - clientY: 205 - }, - style: { - top: '200px', - left: '100px', - width: '302px', - height: '150px' - } - }, - { - name: 'mouseup', - data: { - clientX: 402, - clientY: 205 - } - } - ]; - spyName = 'resizeEnd'; - expectedEvent = { - edges: { - right: 2 - }, - rectangle: { - top: 200, - left: 100, - width: 302, - height: 150, - right: 402, - bottom: 350 - } - }; - }); - - afterEach(() => { - const fixture: ComponentFixture = createComponent(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - domEvents.forEach(event => { - triggerDomEvent(event.name, elm, event.data); - if (event.name !== 'mouseup') { - expect((elm.nextSibling as HTMLElement).style.position).to.equal( - 'fixed' - ); - } - if (event.style) { - Object.keys(event.style).forEach(styleKey => { - expect((elm.nextSibling as any).style[styleKey]).to.equal( - event.style[styleKey] - ); - }); - } - }); - expect( - (fixture.componentInstance as any)[spyName] - ).to.have.been.calledWith(expectedEvent); - }); - }); - - it('should not resize when clicking and dragging outside of the element edges', () => { - const fixture: ComponentFixture = createComponent(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousedown', elm, { - clientX: 10, - clientY: 20 - }); - triggerDomEvent('mousemove', elm, { - clientX: 11, - clientY: 20 - }); - triggerDomEvent('mousemove', elm, { - clientX: 12, - clientY: 20 - }); - triggerDomEvent('mouseup', elm, { - clientX: 12, - clientY: 20 - }); - expect(fixture.componentInstance.resizeStart).not.to.have.been.called; - expect(fixture.componentInstance.resizing).not.to.have.been.called; - expect(fixture.componentInstance.resizeEnd).not.to.have.been.called; - }); - - it('should cancel an existing resize event', () => { - const fixture: ComponentFixture = createComponent(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousedown', elm, { - clientX: 100, - clientY: 205 - }); - expect(fixture.componentInstance.resizeStart).to.have.been.calledWith({ - edges: { - left: 0 - }, - rectangle: { - top: 200, - left: 100, - width: 300, - height: 150, - right: 400, - bottom: 350 - } - }); - triggerDomEvent('mousemove', elm, { - clientX: 99, - clientY: 205 - }); - triggerDomEvent('mousemove', elm, { - clientX: 98, - clientY: 205 - }); - expect((elm.nextSibling as HTMLElement).style.width).to.equal('302px'); - fixture.componentInstance.resizeEnd.resetHistory(); - triggerDomEvent('mousedown', elm, { - clientX: 100, - clientY: 205 - }); - expect(fixture.componentInstance.resizeEnd).not.to.have.been.called; - expect(fixture.componentInstance.resizeStart).to.have.been.calledWith({ - edges: { - left: 0 - }, - rectangle: { - top: 200, - left: 100, - width: 300, - height: 150, - right: 400, - bottom: 350 - } - }); - triggerDomEvent('mousemove', elm, { - clientX: 101, - clientY: 205 - }); - triggerDomEvent('mouseup', elm, { - clientX: 101, - clientY: 205 - }); - expect(fixture.componentInstance.resizeEnd).to.have.been.calledWith({ - edges: { - left: 1 - }, - rectangle: { - top: 200, - left: 101, - width: 299, - height: 150, - right: 400, - bottom: 350 - } - }); - }); - - it('should set the cloned elements width and height on the resize start', () => { - const fixture: ComponentFixture = createComponent(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousedown', elm, { - clientX: 100, - clientY: 200 - }); - expect((elm.nextSibling as HTMLElement).style.width).to.equal('300px'); - expect((elm.nextSibling as HTMLElement).style.height).to.equal('150px'); - }); - - it('should reset existing styles after a resize', () => { - const fixture: ComponentFixture = createComponent(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousedown', elm, { - clientX: 100, - clientY: 200 - }); - triggerDomEvent('mousemove', elm, { - clientX: 99, - clientY: 200 - }); - triggerDomEvent('mousemove', elm, { - clientX: 99, - clientY: 199 - }); - let elmStyle: CSSStyleDeclaration = getComputedStyle(elm); - expect(elmStyle.visibility).to.equal('hidden'); - triggerDomEvent('mouseup', elm, { - clientX: 99, - clientY: 199 - }); - elmStyle = getComputedStyle(elm); - expect(elmStyle.visibility).to.equal('visible'); - }); - - it('should cancel the mousedrag observable when the mouseup event fires', () => { - const fixture: ComponentFixture = createComponent(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousedown', elm, { - clientX: 100, - clientY: 200 - }); - triggerDomEvent('mousemove', elm, { - clientX: 99, - clientY: 200 - }); - triggerDomEvent('mouseup', elm, { - clientX: 99, - clientY: 200 - }); - fixture.componentInstance.resizing.resetHistory(); - triggerDomEvent('mousemove', elm, { - clientX: 99, - clientY: 199 - }); - expect(fixture.componentInstance.resizing).not.to.have.been.called; - }); - - it('should fire the resize end event with the last valid bounding rectangle', () => { - const fixture: ComponentFixture = createComponent(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousedown', elm, { - clientX: 100, - clientY: 210 - }); - triggerDomEvent('mousemove', elm, { - clientX: 99, - clientY: 210 - }); - triggerDomEvent('mouseup', elm, { - clientX: 500, - clientY: 210 - }); - expect(fixture.componentInstance.resizeEnd).to.have.been.calledWith({ - edges: { - left: -1 - }, - rectangle: { - top: 200, - left: 99, - width: 301, - height: 150, - right: 400, - bottom: 350 - } - }); - }); - - it('should allow invalidating of resize events', () => { - const fixture: ComponentFixture = createComponent(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousedown', elm, { - clientX: 100, - clientY: 210 - }); - fixture.componentInstance.validate.returns(true); - triggerDomEvent('mousemove', elm, { - clientX: 99, - clientY: 210 - }); - const firstResizeEvent: ResizeEvent = { - edges: { - left: -1 - }, - rectangle: { - top: 200, - left: 99, - width: 301, - height: 150, - right: 400, - bottom: 350 - } - }; - expect(fixture.componentInstance.validate).to.have.been.calledWith( - firstResizeEvent - ); - expect(fixture.componentInstance.resizing).to.have.been.calledWith( - firstResizeEvent - ); - fixture.componentInstance.validate.returns(false); - fixture.componentInstance.validate.resetHistory(); - fixture.componentInstance.resizing.resetHistory(); - triggerDomEvent('mousemove', elm, { - clientX: 98, - clientY: 210 - }); - const secondResizeEvent: ResizeEvent = { - edges: { - left: -2 - }, - rectangle: { - top: 200, - left: 98, - width: 302, - height: 150, - right: 400, - bottom: 350 - } - }; - expect(fixture.componentInstance.validate).to.have.been.calledWith( - secondResizeEvent - ); - expect(fixture.componentInstance.resizing).not.to.have.been.called; - triggerDomEvent('mouseup', elm, { - clientX: 98, - clientY: 210 - }); - expect(fixture.componentInstance.resizeEnd).to.have.been.calledWith( - firstResizeEvent - ); - }); - - it('should only allow resizing of the element along the left side', async () => { - const fixture: ComponentFixture = createComponent(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - fixture.componentInstance.resizeEdges = { left: true }; - fixture.detectChanges(); - triggerDomEvent('mousemove', elm, { - clientX: 100, - clientY: 200 - }); - await delay(MOUSE_MOVE_THROTTLE_MS); - expect(getComputedStyle(elm).cursor).to.equal('col-resize'); - triggerDomEvent('mousedown', elm, { - clientX: 100, - clientY: 200 - }); - expect(fixture.componentInstance.resizeStart).to.have.been.calledWith({ - edges: { - left: 0 - }, - rectangle: { - top: 200, - left: 100, - width: 300, - height: 150, - right: 400, - bottom: 350 - } - }); - }); - - it('should disable resizing of the element', () => { - const fixture: ComponentFixture = createComponent(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - fixture.componentInstance.resizeEdges = {}; - fixture.detectChanges(); - triggerDomEvent('mousemove', elm, { - clientX: 100, - clientY: 210 - }); - expect(getComputedStyle(elm).cursor).to.equal('auto'); - triggerDomEvent('mousedown', elm, { - clientX: 100, - clientY: 210 - }); - expect(fixture.componentInstance.resizeStart).not.to.have.been.called; - triggerDomEvent('mousemove', elm, { - clientX: 101, - clientY: 210 - }); - expect(fixture.componentInstance.resizing).not.to.have.been.called; - triggerDomEvent('mouseup', elm, { - clientX: 101, - clientY: 210 - }); - expect(fixture.componentInstance.resizeEnd).not.to.have.been.called; - }); - - it('should support resize handles to resize the element', () => { - const template: string = ` -
- - -
- `; - const fixture: ComponentFixture = createComponent(template); - - const elm: any = fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousedown', elm.querySelector('.resize-handle'), { - clientX: 395, - clientY: 345 - }); - expect(fixture.componentInstance.resizeStart).to.have.been.calledWith({ - edges: { - bottom: 0, - right: 0 - }, - rectangle: { - top: 200, - left: 100, - width: 300, - height: 150, - right: 400, - bottom: 350 - } - }); - triggerDomEvent('mousemove', elm.querySelector('.resize-handle'), { - clientX: 396, - clientY: 345 - }); - expect(fixture.componentInstance.resizing).to.have.been.calledWith({ - edges: { - bottom: 0, - right: 1 - }, - rectangle: { - top: 200, - left: 100, - width: 301, - height: 150, - right: 401, - bottom: 350 - } - }); - triggerDomEvent('mouseup', elm.querySelector('.resize-handle'), { - clientX: 396, - clientY: 345 - }); - expect(fixture.componentInstance.resizeEnd).to.have.been.calledWith({ - edges: { - bottom: 0, - right: 1 - }, - rectangle: { - top: 200, - left: 100, - width: 301, - height: 150, - right: 401, - bottom: 350 - } - }); - }); - - it('should disable the temporary resize effect applied to the element', () => { - const fixture: ComponentFixture = createComponent(); - fixture.componentInstance.enableGhostResize = false; - fixture.detectChanges(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousedown', elm, { - clientX: 100, - clientY: 200 - }); - triggerDomEvent('mousemove', elm, { - clientX: 99, - clientY: 201 - }); - const style: CSSStyleDeclaration = getComputedStyle(elm); - expect(style.position).to.equal('relative'); - expect(style.width).to.equal('300px'); - expect(style.height).to.equal('150px'); - expect(style.top).to.equal('200px'); - expect(style.left).to.equal('100px'); - }); - - it('should support resizing to a snap grid', () => { - const fixture: ComponentFixture = createComponent(); - fixture.componentInstance.resizeSnapGrid = { left: 10 }; - fixture.detectChanges(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousedown', elm, { - clientX: 100, - clientY: 205 - }); - triggerDomEvent('mousemove', elm, { - clientX: 99, - clientY: 205 - }); - expect(fixture.componentInstance.resizing).to.have.been.calledWith({ - edges: { - left: 0 - }, - rectangle: { - top: 200, - left: 100, - width: 300, - height: 150, - right: 400, - bottom: 350 - } - }); - triggerDomEvent('mousemove', elm, { - clientX: 95, - clientY: 205 - }); - expect(fixture.componentInstance.resizing).to.have.been.calledOnce; - triggerDomEvent('mousemove', elm, { - clientX: 89, - clientY: 205 - }); - expect(fixture.componentInstance.resizing).to.have.been.calledWith({ - edges: { - left: -10 - }, - rectangle: { - top: 200, - left: 90, - width: 310, - height: 150, - right: 400, - bottom: 350 - } - }); - expect(fixture.componentInstance.resizing).to.have.been.calledTwice; - triggerDomEvent('mouseup', elm, { - clientX: 89, - clientY: 205 - }); - expect(fixture.componentInstance.resizeEnd).to.have.been.calledWith({ - edges: { - left: -10 - }, - rectangle: { - top: 200, - left: 90, - width: 310, - height: 150, - right: 400, - bottom: 350 - } - }); - }); - - it('should not resize when the mouse is parallel with an edge but not inside the bounding rectangle', () => { - const fixture: ComponentFixture = createComponent(); - fixture.detectChanges(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousedown', elm, { - clientX: 100, - clientY: 100 - }); - triggerDomEvent('mousemove', elm, { - clientX: 99, - clientY: 101 - }); - const style: CSSStyleDeclaration = getComputedStyle(elm); - expect(style.position).to.equal('relative'); - expect(style.width).to.equal('300px'); - expect(style.height).to.equal('150px'); - expect(style.top).to.equal('200px'); - expect(style.left).to.equal('100px'); - }); - - it('should end the mouseup observable when the component is destroyed', () => { - const fixture: ComponentFixture = createComponent(); - fixture.detectChanges(); - const onComplete: sinon.SinonSpy = sinon.spy(); - fixture.componentInstance.resizable.mouseup.subscribe( - () => '', - () => '', - onComplete - ); - fixture.destroy(); - expect(onComplete).to.have.been.calledOnce; - }); - - it('should end the mousedown observable when the component is destroyed', () => { - const fixture: ComponentFixture = createComponent(); - fixture.detectChanges(); - const onComplete: sinon.SinonSpy = sinon.spy(); - fixture.componentInstance.resizable.mousedown.subscribe( - () => '', - () => '', - onComplete - ); - fixture.destroy(); - expect(onComplete).to.have.been.calledOnce; - }); - - it('should end the mousemove observable when the component is destroyed', () => { - const fixture: ComponentFixture = createComponent(); - fixture.detectChanges(); - const onComplete: sinon.SinonSpy = sinon.spy(); - fixture.componentInstance.resizable.mousemove.subscribe( - () => '', - () => '', - onComplete - ); - fixture.destroy(); - expect(onComplete).to.have.been.calledOnce; - }); - - it('should allow the resize cursor to be customised', async () => { - const fixture: ComponentFixture = createComponent(); - fixture.componentInstance.resizeCursors = { leftOrRight: 'col-resize' }; - fixture.detectChanges(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousemove', elm, { clientX: 100, clientY: 300 }); - await delay(MOUSE_MOVE_THROTTLE_MS); - expect(elm.style.cursor).to.equal('col-resize'); - fixture.destroy(); - }); - - it('should allow the cursor precision to be customised', async () => { - const fixture: ComponentFixture = createComponent(); - fixture.componentInstance.resizeCursorPrecision = 5; - fixture.detectChanges(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousemove', elm, { clientX: 96, clientY: 296 }); - await delay(MOUSE_MOVE_THROTTLE_MS); - expect(elm.style.cursor).to.equal('col-resize'); - fixture.destroy(); - }); - - it('should set the resize active class', async () => { - const fixture: ComponentFixture = createComponent(); - fixture.detectChanges(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousemove', elm, { - clientX: 100, - clientY: 210 - }); - expect(elm.classList.contains('resize-active')).to.be.false; - await delay(MOUSE_MOVE_THROTTLE_MS); - triggerDomEvent('mousedown', elm, { - clientX: 100, - clientY: 210 - }); - triggerDomEvent('mousemove', elm, { - clientX: 101, - clientY: 210 - }); - await delay(MOUSE_MOVE_THROTTLE_MS); - expect(elm.classList.contains('resize-active')).to.be.true; - triggerDomEvent('mouseup', elm, { - clientX: 101, - clientY: 210 - }); - expect(elm.classList.contains('resize-active')).to.be.false; - }); - - it('should set the resize edge classes', async () => { - const fixture: ComponentFixture = createComponent(); - fixture.detectChanges(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousemove', elm, { clientX: 100, clientY: 300 }); - await delay(MOUSE_MOVE_THROTTLE_MS); - expect(elm.classList.contains('resize-left-hover')).to.be.true; - expect(elm.classList.contains('resize-top-hover')).to.be.false; - expect(elm.classList.contains('resize-right-hover')).to.be.false; - expect(elm.classList.contains('resize-bottom-hover')).to.be.false; - triggerDomEvent('mousemove', elm, { clientX: 50, clientY: 300 }); - await delay(MOUSE_MOVE_THROTTLE_MS); - expect(elm.classList.contains('resize-left-hover')).to.be.false; - fixture.destroy(); - }); - - it('should add a class to the ghost element', () => { - const fixture: ComponentFixture = createComponent(); - fixture.detectChanges(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousedown', elm, { - clientX: 100, - clientY: 200 - }); - expect(elm.classList.contains('resize-ghost-element')).to.be.false; - expect( - (elm.nextSibling as HTMLElement).classList.contains( - 'resize-ghost-element' - ) - ).to.be.true; - }); - - describe('absolute positioning', () => { - let domEvents: any[]; - beforeEach(() => { - domEvents = []; - }); - - it('should have the same top/left/height when resize from the right', () => { - domEvents.push({ - name: 'mousedown', - data: { - clientX: 600, - clientY: 405 - } - }); - domEvents.push({ - name: 'mousemove', - data: { - clientX: 620, - clientY: 405 - }, - style: { - top: '200px', - left: '100px', - height: '150px' - } - }); - }); - - it('should have the same top/height when resize from the left', () => { - domEvents.push({ - name: 'mousedown', - data: { - clientX: 300, - clientY: 405 - } - }); - domEvents.push({ - name: 'mousemove', - data: { - clientX: 280, - clientY: 405 - }, - style: { - top: '200px', - height: '150px' - } - }); - }); - - it('should have the same left/width when resize from the top', () => { - domEvents.push({ - name: 'mousedown', - data: { - clientX: 400, - clientY: 400 - } - }); - domEvents.push({ - name: 'mousemove', - data: { - clientX: 400, - clientY: 280 - }, - style: { - left: '100px', - width: '300px' - } - }); - }); - - it('should have the same top/left/width when resize from the bottom', () => { - domEvents.push({ - name: 'mousedown', - data: { - clientX: 400, - clientY: 550 - } - }); - domEvents.push({ - name: 'mousemove', - data: { - clientX: 400, - clientY: 570 - }, - style: { - top: '200px', - left: '100px', - width: '300px' - } - }); - }); - - afterEach(() => { - const template: string = ` -
-
-
-
- `; - const styles: string[] = [ - ` - .container { - -webkit-transform: scale3d(1, 1, 1); - position: relative; - top: 200px; - left: 200px; - } - .rectangle { - position: absolute; - top: 200px; - left: 100px; - width: 300px; - height: 150px; - } - ` - ]; - - const fixture: ComponentFixture = createComponent( - template, - styles - ); - fixture.componentInstance.ghostElementPositioning = 'absolute'; - fixture.detectChanges(); - - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - domEvents.forEach(event => { - triggerDomEvent(event.name, elm, event.data); - - const clonedNode: HTMLElement = (elm.parentElement as HTMLElement) - .children[1] as HTMLElement; - if (event.name !== 'mouseup') { - expect(clonedNode['style'].position).to.equal('absolute'); - } - if (event.style) { - Object.keys(event.style).forEach(styleKey => { - expect((clonedNode['style'] as any)[styleKey]).to.equal( - event.style[styleKey] - ); - }); - } - }); - }); - }); - - it('should handle the drag handle being shown via an ngIf', () => { - const template: string = ` -
- - -
- `; - const fixture: ComponentFixture = createComponent(template); - - const elm: any = fixture.componentInstance.resizable.elm.nativeElement; - fixture.componentInstance.showResizeHandle = true; - fixture.detectChanges(); - triggerDomEvent('mousedown', elm.querySelector('.resize-handle'), { - clientX: 395, - clientY: 345 - }); - expect(fixture.componentInstance.resizeStart).to.have.been.calledWith({ - edges: { - bottom: 0, - right: 0 - }, - rectangle: { - top: 200, - left: 100, - width: 300, - height: 150, - right: 400, - bottom: 350 - } - }); - }); - - it('should set the resize cursor on the body when resizing', async () => { - const fixture: ComponentFixture = createComponent(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousedown', elm, { - clientX: 100, - clientY: 200 - }); - triggerDomEvent('mousemove', elm, { - clientX: 101, - clientY: 200 - }); - await delay(MOUSE_MOVE_THROTTLE_MS); - expect(document.body.style.cursor).to.equal('nw-resize'); - triggerDomEvent('mouseup', elm, { - clientX: 101, - clientY: 200 - }); - expect(document.body.style.cursor).to.equal(''); - }); - - it('should respect the css transform on the element', () => { - const fixture: ComponentFixture = createComponent(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - elm.style.transform = 'translate(10px, 20px)'; - triggerDomEvent('mousedown', elm, { - clientX: 110, - clientY: 220 - }); - expect(fixture.componentInstance.resizeStart).to.have.been.calledWith({ - edges: { - left: 0, - top: 0 - }, - rectangle: { - top: 200, - left: 100, - width: 300, - height: 150, - right: 400, - bottom: 350 - } - }); - }); - - it('should not allow negative resizes', () => { - const fixture: ComponentFixture = createComponent(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousedown', elm, { - clientX: 400, - clientY: 205 - }); - expect(fixture.componentInstance.resizeStart).to.have.been.calledWith({ - edges: { - right: 0 - }, - rectangle: { - top: 200, - left: 100, - width: 300, - height: 150, - right: 400, - bottom: 350 - } - }); - triggerDomEvent('mousemove', elm, { - clientX: 50, - clientY: 205 - }); - expect(fixture.componentInstance.resizing).not.to.have.been.called; - }); - - it('should allow negative resizes', () => { - const fixture: ComponentFixture = createComponent(); - fixture.componentInstance.allowNegativeResizes = true; - fixture.detectChanges(); - const elm: HTMLElement = - fixture.componentInstance.resizable.elm.nativeElement; - triggerDomEvent('mousedown', elm, { - clientX: 400, - clientY: 205 - }); - expect(fixture.componentInstance.resizeStart).to.have.been.calledWith({ - edges: { - right: 0 - }, - rectangle: { - top: 200, - left: 100, - width: 300, - height: 150, - right: 400, - bottom: 350 - } - }); - triggerDomEvent('mousemove', elm, { - clientX: 50, - clientY: 205 - }); - expect(fixture.componentInstance.resizing).to.have.been.calledWith({ - edges: { - right: -350 - }, - rectangle: { - top: 200, - left: 100, - width: -50, - height: 150, - right: 50, - bottom: 350 - } - }); - }); -}); diff --git a/tsconfig-compodoc.json b/tsconfig-compodoc.json deleted file mode 100644 index 9bab892..0000000 --- a/tsconfig-compodoc.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./tsconfig.json", - "files": [ - "src/resizable.directive.ts", - "src/resize-handle.directive.ts", - "src/resizable.module.ts", - "src/interfaces/bounding-rectangle.interface.ts", - "src/interfaces/edges.interface.ts", - "src/interfaces/resize-event.interface.ts" - ] -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 3d8f7af..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "compilerOptions": { - "target": "ES5", - "module": "commonjs", - "moduleResolution": "node", - "sourceMap": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "removeComments": false, - "lib": ["es2015", "dom"], - "strict": true, - "skipLibCheck": true, - "strictPropertyInitialization": false - }, - "exclude": [ - "node_modules" - ] -} diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 4617f41..0000000 --- a/tslint.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "tslint-config-mwl", - "rules": { - "no-inferrable-types": false, - "no-unused-expression": false - } -} diff --git a/webpack.config.ts b/webpack.config.ts deleted file mode 100644 index 9397768..0000000 --- a/webpack.config.ts +++ /dev/null @@ -1,61 +0,0 @@ -import * as webpack from 'webpack'; -const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); - -const isDevServer = process.argv.find(v => v.includes('webpack-dev-server')); - -export default { - mode: isDevServer ? 'development' : 'production', - entry: __dirname + '/demo/entry.ts', - output: { - filename: 'demo.js', - path: isDevServer ? __dirname : __dirname + '/demo' - }, - module: { - rules: [ - { - test: /\.ts$/, - loader: 'tslint-loader?emitErrors=false&failOnHint=false', - exclude: /node_modules/, - enforce: 'pre' - }, - { - test: /\.ts$/, - loader: 'ts-loader', - exclude: /node_modules/, - options: { - transpileOnly: isDevServer - } - }, - { - test: /node_modules\/@angular\/core\/.+\/core\.js$/, - parser: { - system: true // disable `System.import() is deprecated and will be removed soon. Use import() instead.` warning - } - } - ] - }, - resolve: { - extensions: ['.ts', '.js'] - }, - devServer: { - port: 8000, - inline: true, - hot: true, - historyApiFallback: true, - contentBase: 'demo' - }, - plugins: [ - ...(isDevServer - ? [ - new webpack.HotModuleReplacementPlugin(), - new ForkTsCheckerWebpackPlugin({ - watch: ['./src', './demo'] - }) - ] - : []), - new webpack.ContextReplacementPlugin( - /angular(\\|\/)core(\\|\/)fesm5/, - __dirname + '/src' - ) - ] -};