diff --git a/.gitignore b/.gitignore
index 9a856d7..d9b324b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
.tern-port
/node_modules/
/decks
+/dist/
+/.cache/
diff --git a/css/common.css b/css/common.css
deleted file mode 100644
index 9b0b6cc..0000000
--- a/css/common.css
+++ /dev/null
@@ -1,4 +0,0 @@
-body {
- background-color: #eee;
- color: #444;
-}
diff --git a/css/editor.css b/css/editor.css
deleted file mode 100644
index 789d5fd..0000000
--- a/css/editor.css
+++ /dev/null
@@ -1,8 +0,0 @@
-#cardEditor {
- position: fixed;
- top: 0;
- right: 0;
- background-color: gray;
- padding: 10px;
- border-radius: 3px;
-}
diff --git a/css/playfield.css b/css/playfield.css
deleted file mode 100644
index 9474e0c..0000000
--- a/css/playfield.css
+++ /dev/null
@@ -1,88 +0,0 @@
-* {
- touch-action: pan-y;
-}
-
-body {
- margin: 0 0 0 0;
-}
-
-.card {
- display: inline-block;
- border-radius: 5px;
- width: 142px;
- height: 200px;
-}
-
-#card-container {
- width: 100%;
- height: 100%;
-}
-
-#hand {
- position: absolute;
- bottom: 0px;
- width: 100%;
- height: 20%;
- background-color: #ccc;
-}
-
-.card-pile {
- width: 100px;
- height: 100px;
- color: #eee;
- display: flex;
- justify-content: center;
- align-items: center;
- text-align: center;
- -webkit-user-select: none;
- -moz-user-select: none;
- user-select: none;
-}
-
-.shake {
- animation: shake 0.8s;
-}
-
-@keyframes shake {
- 10%, 90% {transform: translate(-1px, 0);}
- 20%, 80% {transform: translate(2px, 0);}
- 30%, 50%, 70% {transform: translate(-4px, 0);}
- 40%, 60% {transform: translate(4px, 0);}
-}
-
-.deck {
- background-color: blue;
-}
-
-.discard {
- background-color: red;
-}
-
-#shade {
- position: fixed;
- z-index: 100;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- background: grey;
- opacity: 0.5;
- filter: alpha(opacity=50);
-}
-
-#modal-content {
- padding: 5px;
- border-radius: 5px;
- position: fixed;
- z-index: 101;
- top: 5%;
- left: 5%;
- width: 90%;
- background-color: white;
- overflow-y: auto;
- max-height: 90%;
-}
-
-#modal-content .card {
- margin: 2px;
-}
diff --git a/html/editor.html b/html/editor.html
deleted file mode 100644
index ac56427..0000000
--- a/html/editor.html
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
- Editor
-
-
-
- Save Deck
- Download Input JSON
- Download Tabletop Output JSON
-
-
- Upload JSON: WARNING: WILL CLEAR DECK
-
-
-
-
-
-
-
-
-
-
diff --git a/html/playfield.html b/html/playfield.html
deleted file mode 100644
index 1431398..0000000
--- a/html/playfield.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
-
- Playfield
-
-
-
-
-
diff --git a/js/editor.js b/js/editor.js
deleted file mode 100644
index 8b15bcb..0000000
--- a/js/editor.js
+++ /dev/null
@@ -1,253 +0,0 @@
-//jshint browser:true
-//jshint esversion:6
-//jshint latedef:nofunc
-
-let deckJSON, template;
-let selected;
-let deckName = window.location.pathname.split('/')[2];
-
-document.title = "Editor|" + deckName;
-
-window.addEventListener("load", () => {
- // load deck input json
- fetch("deck.input.json")
- .then(data => data.json())
- .then(json => {
- deckJSON = json;
- makeSVGs(deckJSON);
- })
- .catch(error => console.error(error));
-
- // deck JSON uploader
- document.querySelector('#jsonUpload').addEventListener('change', event => {
- let files = event.target.files;
- let reader = new FileReader();
- reader.onload = event => {
- deckJSON = JSON.parse(event.target.result);
- makeSVGs(deckJSON);
- };
- reader.readAsText(files[0]);
- });
-
- // Upload on save button
- document.querySelector('#saveButton').addEventListener('click', upload);
-
- // download input JSON
- document.querySelector('#jsonInputDownload').addEventListener(
- 'click',
- () => downloadFile('data:application/json;charset=utf-8,' +
- encodeURIComponent(JSON.stringify(deckJSON)),
- deckName + '.input.json'));
-
- // download input JSON
- document.querySelector('#outputDownload').addEventListener(
- 'click',
- () => downloadFile('deck.tts.json',
- deckName + '.json'));
-
-
- // handle changes to deck editor
- document.querySelector('#deckForm').addEventListener('input', event => {
- let prop = event.target.id.substring(4).toLowerCase();
- deckJSON[prop] = event.target.value;
- if (prop === 'type') {
- makeSVGs(deckJSON);
- }
- });
- });
-
- // handle changes to card editor
- document.querySelector('#cardForm').addEventListener('input', event => {
- let prop = event.target.id.substring(5);
- if (prop !== "count") {
- wrapSVGText(selected.svg.querySelector('#' + prop),
- String(event.target.value));
- }
- if (event.target.value) {
- selected.json[prop] = event.target.value;
- }
- else {
- delete selected.json[prop];
- }
- });
-
- // chrome doesn't seem to send input event on file select
- document.querySelector('#cardForm').addEventListener('change', event => {
- let prop = event.target.id.substring(5);
- if (prop === "image") {
- let files = event.target.files;
- let reader = new FileReader();
- reader.onload = e => {
- selected.svg.querySelector('#' + prop)
- .setAttributeNS("http://www.w3.org/1999/xlink", "href", e.target.result);
- selected.json[prop] = e.target.result;
- };
- reader.readAsDataURL(files[0]);
- }
- });
-
- window.addEventListener('beforeunload',
- e => e.returnValue = "Unsaved changes blah blah");
-});
-
-function downloadFile(file, name) {
- let dl = document.createElement('a');
- dl.setAttribute('href', file);
- dl.setAttribute('download', name);
- document.body.appendChild(dl);
- dl.click();
- document.body.removeChild(dl);
-}
-
-function getSVGTemplate(name, callback) {
- return fetch("/template/" + name + ".svg")
- .then(response => response.text())
- .then(str => (new window.DOMParser()).parseFromString(str, "text/xml").activeElement);
-}
-
-async function makeSVGs(deckJSON) {
- document.querySelector('#deckName').value = deckJSON.name || "";
- document.querySelector('#deckType').value = deckJSON.type || "";
-
- let deck = document.querySelector('#deck');
- deck.innerHTML = "";
-
- let template = await fetch(`/template/${deckJSON.type}/input.json`)
- .then(data => data.json());
-
- let cardCount = Object.entries(template.cardTypes)
- .map(ct => deckJSON[ct[0]].length * (ct[1].back ? 2 : 1))
- .reduce((sum, current) => sum + current, 0);
-
- // note: needs to be a for loop because it needs to be synchronous
- // and also have await
- // Although I suppose I could prefetch the SVGs and then do the rest...
- for (let cardType of Object.entries(template.cardTypes)) {
- let backSVG;
- if (cardType[1].back) {
- let backTemplate = cardType[1].back.template || (cardType[0] + "-back");
- backSVG = await getSVGTemplate(deckJSON.type + "/" + backTemplate);
- }
- let templateSVG = await getSVGTemplate(deckJSON.type + "/" + cardType[0]);
- console.log(templateSVG);
-
- // build card SVGs
- deckJSON[cardType[0]].forEach(card => {
- makeCardSVG(deck, cardType[1], templateSVG, card);
-
- // if there is a back, build it too
- if (cardType[1].back) {
- makeCardSVG(deck, cardType[1].back, backSVG, card, back=true);
- }
- });
-
- // set div width/height based on number of cards
- deck.style.width = Math.ceil(Math.sqrt(cardCount)) *
- parseInt(templateSVG.getAttribute("width")) + "pt";
- deck.style.height = Math.ceil(Math.sqrt(cardCount)) *
- parseInt(templateSVG.getAttribute("height")) + "pt";
- };
-}
-
-function setForm(cardTemplate, card) {
- let form = document.querySelector('#cardForm');
- form.innerHTML = "";
-
- Object.entries(cardTemplate.inputs).forEach(prop => {
- let div = form.appendChild(document.createElement('div'));
- let label = div.appendChild(document.createElement('label'));
- label.textContent = prop[0];
-
- let input = label.appendChild(
- document.createElement(prop[1] === 'textarea' ? 'textarea' : 'input'));
- input.id = "card-" + prop[0];
-
- if (prop[1] === "image") {
- input.type = "file";
- }
- else {
- input.type = prop[1];
- input.value = card[prop[0]] || "";
- }
- });
-}
-
-function makeCardSVG(deck, cardInputTemplate, templateSVG, card, back=false) {
- let propSource = (back && card.back) ? card.back : card;
- let cardSVG = deck.appendChild(templateSVG.cloneNode(true));
- cardSVG.addEventListener('click', () => {
- selected = {svg: cardSVG, json: card};
- setForm(cardInputTemplate, card);
- }, true);
- Object.keys(cardInputTemplate.inputs).forEach(prop => {
- let inputProp = propSource[prop] || card[prop] || "";
- wrapSVGText(cardSVG.querySelector('#' + prop), String(inputProp));
- });
- Object.entries(cardInputTemplate.hide || []).forEach(hidable => {
- cardSVG.querySelector('#' + hidable[0])
- .setAttribute('display', hidable[1] in propSource ? '' : 'none');
- });
-}
-
-function upload() {
- let deck = document.querySelector('#deck');
-
- // POST the generated SVGs to the server
- let data = (new XMLSerializer()).serializeToString(deck);
- fetch('upload', {
- method: 'post',
- headers: {'Content-Type': 'application/json'},
- body: JSON.stringify({body: data, json: deckJSON})
- });
-}
-
-function wrapSVGText(e, string) {
- // TODO: bold or italic text
- e.innerHTML = ""; // clear element
- let lines = string.split("\n");
- if (e.getAttribute('default-font-size'))
- e.setAttribute('font-size', e.getAttribute('default-font-size'));
- e.setAttribute('default-font-size', e.getAttribute('font-size'));
- while (lines.length > 0) {
- let words = lines.shift().split(" ");
- let tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
- tspan.setAttribute('x', e.getAttribute('x'));
- if (e.innerHTML !== "") tspan.setAttribute('dy', e.getAttribute('font-size'));
- e.appendChild(tspan);
- let line = [];
- while(words.length > 0) {
- let word = words.shift();
- if (word === "") word = " ";
- line.push(word);
- tspan.innerHTML = line.join(" ");
- // horizontal overflow
- // TODO: actually use units (also applies to vertical)
- if (parseFloat(e.getAttribute("width")) &&
- tspan.getComputedTextLength() > parseFloat(e.getAttribute("width"))) {
- // if we have height, we can line wrap
- if (parseFloat(e.getAttribute("height")) &&
- e.children.length * parseFloat(e.getAttribute('font-size')) <
- parseFloat(e.getAttribute('height'))) {
- words.unshift(line.pop());
- tspan.innerHTML = line.join(" ");
- line = [];
-
- tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
- tspan.setAttribute('x', e.getAttribute('x'));
- tspan.setAttribute('dy', e.getAttribute('font-size'));
- e.appendChild(tspan);
- }
- // vertical overflow or horizontal overflow with no height variable
- // TODO: better with recursion instead?
- else {
- e.innerHTML = ""; // remove all tspans
- // TODO: maybe binary search font size later if I really care
- e.setAttribute('font-size', parseFloat(e.getAttribute('font-size')) * 0.9);
- words = [];
- lines = string.split('\n');
- console.log("resetting, size= " + e.getAttribute('font-size'));
- }
- }
- }
- }
-}
diff --git a/js/interact.js b/js/interact.js
deleted file mode 100644
index 66d7aab..0000000
--- a/js/interact.js
+++ /dev/null
@@ -1,5978 +0,0 @@
-/**
- * interact.js v1.2.9
- *
- * Copyright (c) 2012-2015 Taye Adeyemi
- * Open source under the MIT License.
- * https://raw.github.com/taye/interact.js/master/LICENSE
- */
-(function (realWindow) {
- 'use strict';
-
- // return early if there's no window to work with (eg. Node.js)
- if (!realWindow) { return; }
-
- var // get wrapped window if using Shadow DOM polyfill
- window = (function () {
- // create a TextNode
- var el = realWindow.document.createTextNode('');
-
- // check if it's wrapped by a polyfill
- if (el.ownerDocument !== realWindow.document
- && typeof realWindow.wrap === 'function'
- && realWindow.wrap(el) === el) {
- // return wrapped window
- return realWindow.wrap(realWindow);
- }
-
- // no Shadow DOM polyfil or native implementation
- return realWindow;
- }()),
-
- document = window.document,
- DocumentFragment = window.DocumentFragment || blank,
- SVGElement = window.SVGElement || blank,
- SVGSVGElement = window.SVGSVGElement || blank,
- SVGElementInstance = window.SVGElementInstance || blank,
- HTMLElement = window.HTMLElement || window.Element,
-
- PointerEvent = (window.PointerEvent || window.MSPointerEvent),
- pEventTypes,
-
- hypot = Math.hypot || function (x, y) { return Math.sqrt(x * x + y * y); },
-
- tmpXY = {}, // reduce object creation in getXY()
-
- documents = [], // all documents being listened to
-
- interactables = [], // all set interactables
- interactions = [], // all interactions
-
- dynamicDrop = false,
-
- // {
- // type: {
- // selectors: ['selector', ...],
- // contexts : [document, ...],
- // listeners: [[listener, useCapture], ...]
- // }
- // }
- delegatedEvents = {},
-
- defaultOptions = {
- base: {
- accept : null,
- actionChecker : null,
- styleCursor : true,
- preventDefault: 'auto',
- origin : { x: 0, y: 0 },
- deltaSource : 'page',
- allowFrom : null,
- ignoreFrom : null,
- _context : document,
- dropChecker : null
- },
-
- drag: {
- enabled: false,
- manualStart: true,
- max: Infinity,
- maxPerElement: 1,
-
- snap: null,
- restrict: null,
- inertia: null,
- autoScroll: null,
-
- axis: 'xy'
- },
-
- drop: {
- enabled: false,
- accept: null,
- overlap: 'pointer'
- },
-
- resize: {
- enabled: false,
- manualStart: false,
- max: Infinity,
- maxPerElement: 1,
-
- snap: null,
- restrict: null,
- inertia: null,
- autoScroll: null,
-
- square: false,
- preserveAspectRatio: false,
- axis: 'xy',
-
- // use default margin
- margin: NaN,
-
- // object with props left, right, top, bottom which are
- // true/false values to resize when the pointer is over that edge,
- // CSS selectors to match the handles for each direction
- // or the Elements for each handle
- edges: null,
-
- // a value of 'none' will limit the resize rect to a minimum of 0x0
- // 'negate' will alow the rect to have negative width/height
- // 'reposition' will keep the width/height positive by swapping
- // the top and bottom edges and/or swapping the left and right edges
- invert: 'none'
- },
-
- gesture: {
- manualStart: false,
- enabled: false,
- max: Infinity,
- maxPerElement: 1,
-
- restrict: null
- },
-
- perAction: {
- manualStart: false,
- max: Infinity,
- maxPerElement: 1,
-
- snap: {
- enabled : false,
- endOnly : false,
- range : Infinity,
- targets : null,
- offsets : null,
-
- relativePoints: null
- },
-
- restrict: {
- enabled: false,
- endOnly: false
- },
-
- autoScroll: {
- enabled : false,
- container : null, // the item that is scrolled (Window or HTMLElement)
- margin : 60,
- speed : 300 // the scroll speed in pixels per second
- },
-
- inertia: {
- enabled : false,
- resistance : 10, // the lambda in exponential decay
- minSpeed : 100, // target speed must be above this for inertia to start
- endSpeed : 10, // the speed at which inertia is slow enough to stop
- allowResume : true, // allow resuming an action in inertia phase
- zeroResumeDelta : true, // if an action is resumed after launch, set dx/dy to 0
- smoothEndDuration: 300 // animate to snap/restrict endOnly if there's no inertia
- }
- },
-
- _holdDuration: 600
- },
-
- // Things related to autoScroll
- autoScroll = {
- interaction: null,
- i: null, // the handle returned by window.setInterval
- x: 0, y: 0, // Direction each pulse is to scroll in
-
- // scroll the window by the values in scroll.x/y
- scroll: function () {
- var options = autoScroll.interaction.target.options[autoScroll.interaction.prepared.name].autoScroll,
- container = options.container || getWindow(autoScroll.interaction.element),
- now = new Date().getTime(),
- // change in time in seconds
- dtx = (now - autoScroll.prevTimeX) / 1000,
- dty = (now - autoScroll.prevTimeY) / 1000,
- vx, vy, sx, sy;
-
- // displacement
- if (options.velocity) {
- vx = options.velocity.x;
- vy = options.velocity.y;
- }
- else {
- vx = vy = options.speed
- }
-
- sx = vx * dtx;
- sy = vy * dty;
-
- if (sx >= 1 || sy >= 1) {
- if (isWindow(container)) {
- container.scrollBy(autoScroll.x * sx, autoScroll.y * sy);
- }
- else if (container) {
- container.scrollLeft += autoScroll.x * sx;
- container.scrollTop += autoScroll.y * sy;
- }
-
- if (sx >=1) autoScroll.prevTimeX = now;
- if (sy >= 1) autoScroll.prevTimeY = now;
- }
-
- if (autoScroll.isScrolling) {
- cancelFrame(autoScroll.i);
- autoScroll.i = reqFrame(autoScroll.scroll);
- }
- },
-
- isScrolling: false,
- prevTimeX: 0,
- prevTimeY: 0,
-
- start: function (interaction) {
- autoScroll.isScrolling = true;
- cancelFrame(autoScroll.i);
-
- autoScroll.interaction = interaction;
- autoScroll.prevTimeX = new Date().getTime();
- autoScroll.prevTimeY = new Date().getTime();
- autoScroll.i = reqFrame(autoScroll.scroll);
- },
-
- stop: function () {
- autoScroll.isScrolling = false;
- cancelFrame(autoScroll.i);
- }
- },
-
- // Does the browser support touch input?
- supportsTouch = (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch),
-
- // Does the browser support PointerEvents
- // Avoid PointerEvent bugs introduced in Chrome 55
- supportsPointerEvent = PointerEvent && !/Chrome/.test(navigator.userAgent),
-
- // Less Precision with touch input
- margin = supportsTouch || supportsPointerEvent? 20: 10,
-
- pointerMoveTolerance = 1,
-
- // for ignoring browser's simulated mouse events
- prevTouchTime = 0,
-
- // Allow this many interactions to happen simultaneously
- maxInteractions = Infinity,
-
- // Check if is IE9 or older
- actionCursors = (document.all && !window.atob) ? {
- drag : 'move',
- resizex : 'e-resize',
- resizey : 's-resize',
- resizexy: 'se-resize',
-
- resizetop : 'n-resize',
- resizeleft : 'w-resize',
- resizebottom : 's-resize',
- resizeright : 'e-resize',
- resizetopleft : 'se-resize',
- resizebottomright: 'se-resize',
- resizetopright : 'ne-resize',
- resizebottomleft : 'ne-resize',
-
- gesture : ''
- } : {
- drag : 'move',
- resizex : 'ew-resize',
- resizey : 'ns-resize',
- resizexy: 'nwse-resize',
-
- resizetop : 'ns-resize',
- resizeleft : 'ew-resize',
- resizebottom : 'ns-resize',
- resizeright : 'ew-resize',
- resizetopleft : 'nwse-resize',
- resizebottomright: 'nwse-resize',
- resizetopright : 'nesw-resize',
- resizebottomleft : 'nesw-resize',
-
- gesture : ''
- },
-
- actionIsEnabled = {
- drag : true,
- resize : true,
- gesture: true
- },
-
- // because Webkit and Opera still use 'mousewheel' event type
- wheelEvent = 'onmousewheel' in document? 'mousewheel': 'wheel',
-
- eventTypes = [
- 'dragstart',
- 'dragmove',
- 'draginertiastart',
- 'dragend',
- 'dragenter',
- 'dragleave',
- 'dropactivate',
- 'dropdeactivate',
- 'dropmove',
- 'drop',
- 'resizestart',
- 'resizemove',
- 'resizeinertiastart',
- 'resizeend',
- 'gesturestart',
- 'gesturemove',
- 'gestureinertiastart',
- 'gestureend',
-
- 'down',
- 'move',
- 'up',
- 'cancel',
- 'tap',
- 'doubletap',
- 'hold'
- ],
-
- globalEvents = {},
-
- // Opera Mobile must be handled differently
- isOperaMobile = navigator.appName == 'Opera' &&
- supportsTouch &&
- navigator.userAgent.match('Presto'),
-
- // scrolling doesn't change the result of getClientRects on iOS 7
- isIOS7 = (/iP(hone|od|ad)/.test(navigator.platform)
- && /OS 7[^\d]/.test(navigator.appVersion)),
-
- // prefix matchesSelector
- prefixedMatchesSelector = 'matches' in Element.prototype?
- 'matches': 'webkitMatchesSelector' in Element.prototype?
- 'webkitMatchesSelector': 'mozMatchesSelector' in Element.prototype?
- 'mozMatchesSelector': 'oMatchesSelector' in Element.prototype?
- 'oMatchesSelector': 'msMatchesSelector',
-
- // will be polyfill function if browser is IE8
- ie8MatchesSelector,
-
- // native requestAnimationFrame or polyfill
- reqFrame = realWindow.requestAnimationFrame,
- cancelFrame = realWindow.cancelAnimationFrame,
-
- // Events wrapper
- events = (function () {
- var useAttachEvent = ('attachEvent' in window) && !('addEventListener' in window),
- addEvent = useAttachEvent? 'attachEvent': 'addEventListener',
- removeEvent = useAttachEvent? 'detachEvent': 'removeEventListener',
- on = useAttachEvent? 'on': '',
-
- elements = [],
- targets = [],
- attachedListeners = [];
-
- function add (element, type, listener, useCapture) {
- var elementIndex = indexOf(elements, element),
- target = targets[elementIndex];
-
- if (!target) {
- target = {
- events: {},
- typeCount: 0
- };
-
- elementIndex = elements.push(element) - 1;
- targets.push(target);
-
- attachedListeners.push((useAttachEvent ? {
- supplied: [],
- wrapped : [],
- useCount: []
- } : null));
- }
-
- if (!target.events[type]) {
- target.events[type] = [];
- target.typeCount++;
- }
-
- if (!contains(target.events[type], listener)) {
- var ret;
-
- if (useAttachEvent) {
- var listeners = attachedListeners[elementIndex],
- listenerIndex = indexOf(listeners.supplied, listener);
-
- var wrapped = listeners.wrapped[listenerIndex] || function (event) {
- if (!event.immediatePropagationStopped) {
- event.target = event.srcElement;
- event.currentTarget = element;
-
- event.preventDefault = event.preventDefault || preventDef;
- event.stopPropagation = event.stopPropagation || stopProp;
- event.stopImmediatePropagation = event.stopImmediatePropagation || stopImmProp;
-
- if (/mouse|click/.test(event.type)) {
- event.pageX = event.clientX + getWindow(element).document.documentElement.scrollLeft;
- event.pageY = event.clientY + getWindow(element).document.documentElement.scrollTop;
- }
-
- listener(event);
- }
- };
-
- ret = element[addEvent](on + type, wrapped, Boolean(useCapture));
-
- if (listenerIndex === -1) {
- listeners.supplied.push(listener);
- listeners.wrapped.push(wrapped);
- listeners.useCount.push(1);
- }
- else {
- listeners.useCount[listenerIndex]++;
- }
- }
- else {
- ret = element[addEvent](type, listener, useCapture || false);
- }
- target.events[type].push(listener);
-
- return ret;
- }
- }
-
- function remove (element, type, listener, useCapture) {
- var i,
- elementIndex = indexOf(elements, element),
- target = targets[elementIndex],
- listeners,
- listenerIndex,
- wrapped = listener;
-
- if (!target || !target.events) {
- return;
- }
-
- if (useAttachEvent) {
- listeners = attachedListeners[elementIndex];
- listenerIndex = indexOf(listeners.supplied, listener);
- wrapped = listeners.wrapped[listenerIndex];
- }
-
- if (type === 'all') {
- for (type in target.events) {
- if (target.events.hasOwnProperty(type)) {
- remove(element, type, 'all');
- }
- }
- return;
- }
-
- if (target.events[type]) {
- var len = target.events[type].length;
-
- if (listener === 'all') {
- for (i = 0; i < len; i++) {
- remove(element, type, target.events[type][i], Boolean(useCapture));
- }
- return;
- } else {
- for (i = 0; i < len; i++) {
- if (target.events[type][i] === listener) {
- element[removeEvent](on + type, wrapped, useCapture || false);
- target.events[type].splice(i, 1);
-
- if (useAttachEvent && listeners) {
- listeners.useCount[listenerIndex]--;
- if (listeners.useCount[listenerIndex] === 0) {
- listeners.supplied.splice(listenerIndex, 1);
- listeners.wrapped.splice(listenerIndex, 1);
- listeners.useCount.splice(listenerIndex, 1);
- }
- }
-
- break;
- }
- }
- }
-
- if (target.events[type] && target.events[type].length === 0) {
- target.events[type] = null;
- target.typeCount--;
- }
- }
-
- if (!target.typeCount) {
- targets.splice(elementIndex, 1);
- elements.splice(elementIndex, 1);
- attachedListeners.splice(elementIndex, 1);
- }
- }
-
- function preventDef () {
- this.returnValue = false;
- }
-
- function stopProp () {
- this.cancelBubble = true;
- }
-
- function stopImmProp () {
- this.cancelBubble = true;
- this.immediatePropagationStopped = true;
- }
-
- return {
- add: add,
- remove: remove,
- useAttachEvent: useAttachEvent,
-
- _elements: elements,
- _targets: targets,
- _attachedListeners: attachedListeners
- };
- }());
-
- function blank () {}
-
- function isElement (o) {
- if (!o || (typeof o !== 'object')) { return false; }
-
- var _window = getWindow(o) || window;
-
- return (/object|function/.test(typeof _window.Element)
- ? o instanceof _window.Element //DOM2
- : o.nodeType === 1 && typeof o.nodeName === "string");
- }
- function isWindow (thing) { return thing === window || !!(thing && thing.Window) && (thing instanceof thing.Window); }
- function isDocFrag (thing) { return !!thing && thing instanceof DocumentFragment; }
- function isArray (thing) {
- return isObject(thing)
- && (typeof thing.length !== undefined)
- && isFunction(thing.splice);
- }
- function isObject (thing) { return !!thing && (typeof thing === 'object'); }
- function isFunction (thing) { return typeof thing === 'function'; }
- function isNumber (thing) { return typeof thing === 'number' ; }
- function isBool (thing) { return typeof thing === 'boolean' ; }
- function isString (thing) { return typeof thing === 'string' ; }
-
- function trySelector (value) {
- if (!isString(value)) { return false; }
-
- // an exception will be raised if it is invalid
- document.querySelector(value);
- return true;
- }
-
- function extend (dest, source) {
- for (var prop in source) {
- dest[prop] = source[prop];
- }
- return dest;
- }
-
- var prefixedPropREs = {
- webkit: /(Movement[XY]|Radius[XY]|RotationAngle|Force)$/
- };
-
- function pointerExtend (dest, source) {
- for (var prop in source) {
- var deprecated = false;
-
- // skip deprecated prefixed properties
- for (var vendor in prefixedPropREs) {
- if (prop.indexOf(vendor) === 0 && prefixedPropREs[vendor].test(prop)) {
- deprecated = true;
- break;
- }
- }
-
- if (!deprecated) {
- dest[prop] = source[prop];
- }
- }
- return dest;
- }
-
- function copyCoords (dest, src) {
- dest.page = dest.page || {};
- dest.page.x = src.page.x;
- dest.page.y = src.page.y;
-
- dest.client = dest.client || {};
- dest.client.x = src.client.x;
- dest.client.y = src.client.y;
-
- dest.timeStamp = src.timeStamp;
- }
-
- function setEventXY (targetObj, pointers, interaction) {
- var pointer = (pointers.length > 1
- ? pointerAverage(pointers)
- : pointers[0]);
-
- getPageXY(pointer, tmpXY, interaction);
- targetObj.page.x = tmpXY.x;
- targetObj.page.y = tmpXY.y;
-
- getClientXY(pointer, tmpXY, interaction);
- targetObj.client.x = tmpXY.x;
- targetObj.client.y = tmpXY.y;
-
- targetObj.timeStamp = new Date().getTime();
- }
-
- function setEventDeltas (targetObj, prev, cur) {
- targetObj.page.x = cur.page.x - prev.page.x;
- targetObj.page.y = cur.page.y - prev.page.y;
- targetObj.client.x = cur.client.x - prev.client.x;
- targetObj.client.y = cur.client.y - prev.client.y;
- targetObj.timeStamp = new Date().getTime() - prev.timeStamp;
-
- // set pointer velocity
- var dt = Math.max(targetObj.timeStamp / 1000, 0.001);
- targetObj.page.speed = hypot(targetObj.page.x, targetObj.page.y) / dt;
- targetObj.page.vx = targetObj.page.x / dt;
- targetObj.page.vy = targetObj.page.y / dt;
-
- targetObj.client.speed = hypot(targetObj.client.x, targetObj.page.y) / dt;
- targetObj.client.vx = targetObj.client.x / dt;
- targetObj.client.vy = targetObj.client.y / dt;
- }
-
- function isNativePointer (pointer) {
- return (pointer instanceof window.Event
- || (supportsTouch && window.Touch && pointer instanceof window.Touch));
- }
-
- // Get specified X/Y coords for mouse or event.touches[0]
- function getXY (type, pointer, xy) {
- xy = xy || {};
- type = type || 'page';
-
- xy.x = pointer[type + 'X'];
- xy.y = pointer[type + 'Y'];
-
- return xy;
- }
-
- function getPageXY (pointer, page) {
- page = page || {};
-
- // Opera Mobile handles the viewport and scrolling oddly
- if (isOperaMobile && isNativePointer(pointer)) {
- getXY('screen', pointer, page);
-
- page.x += window.scrollX;
- page.y += window.scrollY;
- }
- else {
- getXY('page', pointer, page);
- }
-
- return page;
- }
-
- function getClientXY (pointer, client) {
- client = client || {};
-
- if (isOperaMobile && isNativePointer(pointer)) {
- // Opera Mobile handles the viewport and scrolling oddly
- getXY('screen', pointer, client);
- }
- else {
- getXY('client', pointer, client);
- }
-
- return client;
- }
-
- function getScrollXY (win) {
- win = win || window;
- return {
- x: win.scrollX || win.document.documentElement.scrollLeft,
- y: win.scrollY || win.document.documentElement.scrollTop
- };
- }
-
- function getPointerId (pointer) {
- return isNumber(pointer.pointerId)? pointer.pointerId : pointer.identifier;
- }
-
- function getActualElement (element) {
- return (element instanceof SVGElementInstance
- ? element.correspondingUseElement
- : element);
- }
-
- function getWindow (node) {
- if (isWindow(node)) {
- return node;
- }
-
- var rootNode = (node.ownerDocument || node);
-
- return rootNode.defaultView || rootNode.parentWindow || window;
- }
-
- function getElementClientRect (element) {
- var clientRect = (element instanceof SVGElement
- ? element.getBoundingClientRect()
- : element.getClientRects()[0]);
-
- return clientRect && {
- left : clientRect.left,
- right : clientRect.right,
- top : clientRect.top,
- bottom: clientRect.bottom,
- width : clientRect.width || clientRect.right - clientRect.left,
- height: clientRect.height || clientRect.bottom - clientRect.top
- };
- }
-
- function getElementRect (element) {
- var clientRect = getElementClientRect(element);
-
- if (!isIOS7 && clientRect) {
- var scroll = getScrollXY(getWindow(element));
-
- clientRect.left += scroll.x;
- clientRect.right += scroll.x;
- clientRect.top += scroll.y;
- clientRect.bottom += scroll.y;
- }
-
- return clientRect;
- }
-
- function getTouchPair (event) {
- var touches = [];
-
- // array of touches is supplied
- if (isArray(event)) {
- touches[0] = event[0];
- touches[1] = event[1];
- }
- // an event
- else {
- if (event.type === 'touchend') {
- if (event.touches.length === 1) {
- touches[0] = event.touches[0];
- touches[1] = event.changedTouches[0];
- }
- else if (event.touches.length === 0) {
- touches[0] = event.changedTouches[0];
- touches[1] = event.changedTouches[1];
- }
- }
- else {
- touches[0] = event.touches[0];
- touches[1] = event.touches[1];
- }
- }
-
- return touches;
- }
-
- function pointerAverage (pointers) {
- var average = {
- pageX : 0,
- pageY : 0,
- clientX: 0,
- clientY: 0,
- screenX: 0,
- screenY: 0
- };
- var prop;
-
- for (var i = 0; i < pointers.length; i++) {
- for (prop in average) {
- average[prop] += pointers[i][prop];
- }
- }
- for (prop in average) {
- average[prop] /= pointers.length;
- }
-
- return average;
- }
-
- function touchBBox (event) {
- if (!event.length && !(event.touches && event.touches.length > 1)) {
- return;
- }
-
- var touches = getTouchPair(event),
- minX = Math.min(touches[0].pageX, touches[1].pageX),
- minY = Math.min(touches[0].pageY, touches[1].pageY),
- maxX = Math.max(touches[0].pageX, touches[1].pageX),
- maxY = Math.max(touches[0].pageY, touches[1].pageY);
-
- return {
- x: minX,
- y: minY,
- left: minX,
- top: minY,
- width: maxX - minX,
- height: maxY - minY
- };
- }
-
- function touchDistance (event, deltaSource) {
- deltaSource = deltaSource || defaultOptions.deltaSource;
-
- var sourceX = deltaSource + 'X',
- sourceY = deltaSource + 'Y',
- touches = getTouchPair(event);
-
-
- var dx = touches[0][sourceX] - touches[1][sourceX],
- dy = touches[0][sourceY] - touches[1][sourceY];
-
- return hypot(dx, dy);
- }
-
- function touchAngle (event, prevAngle, deltaSource) {
- deltaSource = deltaSource || defaultOptions.deltaSource;
-
- var sourceX = deltaSource + 'X',
- sourceY = deltaSource + 'Y',
- touches = getTouchPair(event),
- dx = touches[0][sourceX] - touches[1][sourceX],
- dy = touches[0][sourceY] - touches[1][sourceY],
- angle = 180 * Math.atan(dy / dx) / Math.PI;
-
- if (isNumber(prevAngle)) {
- var dr = angle - prevAngle,
- drClamped = dr % 360;
-
- if (drClamped > 315) {
- angle -= 360 + (angle / 360)|0 * 360;
- }
- else if (drClamped > 135) {
- angle -= 180 + (angle / 360)|0 * 360;
- }
- else if (drClamped < -315) {
- angle += 360 + (angle / 360)|0 * 360;
- }
- else if (drClamped < -135) {
- angle += 180 + (angle / 360)|0 * 360;
- }
- }
-
- return angle;
- }
-
- function getOriginXY (interactable, element) {
- var origin = interactable
- ? interactable.options.origin
- : defaultOptions.origin;
-
- if (origin === 'parent') {
- origin = parentElement(element);
- }
- else if (origin === 'self') {
- origin = interactable.getRect(element);
- }
- else if (trySelector(origin)) {
- origin = closest(element, origin) || { x: 0, y: 0 };
- }
-
- if (isFunction(origin)) {
- origin = origin(interactable && element);
- }
-
- if (isElement(origin)) {
- origin = getElementRect(origin);
- }
-
- origin.x = ('x' in origin)? origin.x : origin.left;
- origin.y = ('y' in origin)? origin.y : origin.top;
-
- return origin;
- }
-
- // http://stackoverflow.com/a/5634528/2280888
- function _getQBezierValue(t, p1, p2, p3) {
- var iT = 1 - t;
- return iT * iT * p1 + 2 * iT * t * p2 + t * t * p3;
- }
-
- function getQuadraticCurvePoint(startX, startY, cpX, cpY, endX, endY, position) {
- return {
- x: _getQBezierValue(position, startX, cpX, endX),
- y: _getQBezierValue(position, startY, cpY, endY)
- };
- }
-
- // http://gizma.com/easing/
- function easeOutQuad (t, b, c, d) {
- t /= d;
- return -c * t*(t-2) + b;
- }
-
- function nodeContains (parent, child) {
- while (child) {
- if (child === parent) {
- return true;
- }
-
- child = child.parentNode;
- }
-
- return false;
- }
-
- function closest (child, selector) {
- var parent = parentElement(child);
-
- while (isElement(parent)) {
- if (matchesSelector(parent, selector)) { return parent; }
-
- parent = parentElement(parent);
- }
-
- return null;
- }
-
- function parentElement (node) {
- var parent = node.parentNode;
-
- if (isDocFrag(parent)) {
- // skip past #shado-root fragments
- while ((parent = parent.host) && isDocFrag(parent)) {}
-
- return parent;
- }
-
- return parent;
- }
-
- function inContext (interactable, element) {
- return interactable._context === element.ownerDocument
- || nodeContains(interactable._context, element);
- }
-
- function testIgnore (interactable, interactableElement, element) {
- var ignoreFrom = interactable.options.ignoreFrom;
-
- if (!ignoreFrom || !isElement(element)) { return false; }
-
- if (isString(ignoreFrom)) {
- return matchesUpTo(element, ignoreFrom, interactableElement);
- }
- else if (isElement(ignoreFrom)) {
- return nodeContains(ignoreFrom, element);
- }
-
- return false;
- }
-
- function testAllow (interactable, interactableElement, element) {
- var allowFrom = interactable.options.allowFrom;
-
- if (!allowFrom) { return true; }
-
- if (!isElement(element)) { return false; }
-
- if (isString(allowFrom)) {
- return matchesUpTo(element, allowFrom, interactableElement);
- }
- else if (isElement(allowFrom)) {
- return nodeContains(allowFrom, element);
- }
-
- return false;
- }
-
- function checkAxis (axis, interactable) {
- if (!interactable) { return false; }
-
- var thisAxis = interactable.options.drag.axis;
-
- return (axis === 'xy' || thisAxis === 'xy' || thisAxis === axis);
- }
-
- function checkSnap (interactable, action) {
- var options = interactable.options;
-
- if (/^resize/.test(action)) {
- action = 'resize';
- }
-
- return options[action].snap && options[action].snap.enabled;
- }
-
- function checkRestrict (interactable, action) {
- var options = interactable.options;
-
- if (/^resize/.test(action)) {
- action = 'resize';
- }
-
- return options[action].restrict && options[action].restrict.enabled;
- }
-
- function checkAutoScroll (interactable, action) {
- var options = interactable.options;
-
- if (/^resize/.test(action)) {
- action = 'resize';
- }
-
- return options[action].autoScroll && options[action].autoScroll.enabled;
- }
-
- function withinInteractionLimit (interactable, element, action) {
- var options = interactable.options,
- maxActions = options[action.name].max,
- maxPerElement = options[action.name].maxPerElement,
- activeInteractions = 0,
- targetCount = 0,
- targetElementCount = 0;
-
- for (var i = 0, len = interactions.length; i < len; i++) {
- var interaction = interactions[i],
- otherAction = interaction.prepared.name,
- active = interaction.interacting();
-
- if (!active) { continue; }
-
- activeInteractions++;
-
- if (activeInteractions >= maxInteractions) {
- return false;
- }
-
- if (interaction.target !== interactable) { continue; }
-
- targetCount += (otherAction === action.name)|0;
-
- if (targetCount >= maxActions) {
- return false;
- }
-
- if (interaction.element === element) {
- targetElementCount++;
-
- if (otherAction !== action.name || targetElementCount >= maxPerElement) {
- return false;
- }
- }
- }
-
- return maxInteractions > 0;
- }
-
- // Test for the element that's "above" all other qualifiers
- function indexOfDeepestElement (elements) {
- var dropzone,
- deepestZone = elements[0],
- index = deepestZone? 0: -1,
- parent,
- deepestZoneParents = [],
- dropzoneParents = [],
- child,
- i,
- n;
-
- for (i = 1; i < elements.length; i++) {
- dropzone = elements[i];
-
- // an element might belong to multiple selector dropzones
- if (!dropzone || dropzone === deepestZone) {
- continue;
- }
-
- if (!deepestZone) {
- deepestZone = dropzone;
- index = i;
- continue;
- }
-
- // check if the deepest or current are document.documentElement or document.rootElement
- // - if the current dropzone is, do nothing and continue
- if (dropzone.parentNode === dropzone.ownerDocument) {
- continue;
- }
- // - if deepest is, update with the current dropzone and continue to next
- else if (deepestZone.parentNode === dropzone.ownerDocument) {
- deepestZone = dropzone;
- index = i;
- continue;
- }
-
- if (!deepestZoneParents.length) {
- parent = deepestZone;
- while (parent.parentNode && parent.parentNode !== parent.ownerDocument) {
- deepestZoneParents.unshift(parent);
- parent = parent.parentNode;
- }
- }
-
- // if this element is an svg element and the current deepest is
- // an HTMLElement
- if (deepestZone instanceof HTMLElement
- && dropzone instanceof SVGElement
- && !(dropzone instanceof SVGSVGElement)) {
-
- if (dropzone === deepestZone.parentNode) {
- continue;
- }
-
- parent = dropzone.ownerSVGElement;
- }
- else {
- parent = dropzone;
- }
-
- dropzoneParents = [];
-
- while (parent.parentNode !== parent.ownerDocument) {
- dropzoneParents.unshift(parent);
- parent = parent.parentNode;
- }
-
- n = 0;
-
- // get (position of last common ancestor) + 1
- while (dropzoneParents[n] && dropzoneParents[n] === deepestZoneParents[n]) {
- n++;
- }
-
- var parents = [
- dropzoneParents[n - 1],
- dropzoneParents[n],
- deepestZoneParents[n]
- ];
-
- child = parents[0].lastChild;
-
- while (child) {
- if (child === parents[1]) {
- deepestZone = dropzone;
- index = i;
- deepestZoneParents = [];
-
- break;
- }
- else if (child === parents[2]) {
- break;
- }
-
- child = child.previousSibling;
- }
- }
-
- return index;
- }
-
- function Interaction () {
- this.target = null; // current interactable being interacted with
- this.element = null; // the target element of the interactable
- this.dropTarget = null; // the dropzone a drag target might be dropped into
- this.dropElement = null; // the element at the time of checking
- this.prevDropTarget = null; // the dropzone that was recently dragged away from
- this.prevDropElement = null; // the element at the time of checking
-
- this.prepared = { // action that's ready to be fired on next move event
- name : null,
- axis : null,
- edges: null
- };
-
- this.matches = []; // all selectors that are matched by target element
- this.matchElements = []; // corresponding elements
-
- this.inertiaStatus = {
- active : false,
- smoothEnd : false,
- ending : false,
-
- startEvent: null,
- upCoords: {},
-
- xe: 0, ye: 0,
- sx: 0, sy: 0,
-
- t0: 0,
- vx0: 0, vys: 0,
- duration: 0,
-
- resumeDx: 0,
- resumeDy: 0,
-
- lambda_v0: 0,
- one_ve_v0: 0,
- i : null
- };
-
- if (isFunction(Function.prototype.bind)) {
- this.boundInertiaFrame = this.inertiaFrame.bind(this);
- this.boundSmoothEndFrame = this.smoothEndFrame.bind(this);
- }
- else {
- var that = this;
-
- this.boundInertiaFrame = function () { return that.inertiaFrame(); };
- this.boundSmoothEndFrame = function () { return that.smoothEndFrame(); };
- }
-
- this.activeDrops = {
- dropzones: [], // the dropzones that are mentioned below
- elements : [], // elements of dropzones that accept the target draggable
- rects : [] // the rects of the elements mentioned above
- };
-
- // keep track of added pointers
- this.pointers = [];
- this.pointerIds = [];
- this.downTargets = [];
- this.downTimes = [];
- this.holdTimers = [];
-
- // Previous native pointer move event coordinates
- this.prevCoords = {
- page : { x: 0, y: 0 },
- client : { x: 0, y: 0 },
- timeStamp: 0
- };
- // current native pointer move event coordinates
- this.curCoords = {
- page : { x: 0, y: 0 },
- client : { x: 0, y: 0 },
- timeStamp: 0
- };
-
- // Starting InteractEvent pointer coordinates
- this.startCoords = {
- page : { x: 0, y: 0 },
- client : { x: 0, y: 0 },
- timeStamp: 0
- };
-
- // Change in coordinates and time of the pointer
- this.pointerDelta = {
- page : { x: 0, y: 0, vx: 0, vy: 0, speed: 0 },
- client : { x: 0, y: 0, vx: 0, vy: 0, speed: 0 },
- timeStamp: 0
- };
-
- this.downEvent = null; // pointerdown/mousedown/touchstart event
- this.downPointer = {};
-
- this._eventTarget = null;
- this._curEventTarget = null;
-
- this.prevEvent = null; // previous action event
- this.tapTime = 0; // time of the most recent tap event
- this.prevTap = null;
-
- this.startOffset = { left: 0, right: 0, top: 0, bottom: 0 };
- this.restrictOffset = { left: 0, right: 0, top: 0, bottom: 0 };
- this.snapOffsets = [];
-
- this.gesture = {
- start: { x: 0, y: 0 },
-
- startDistance: 0, // distance between two touches of touchStart
- prevDistance : 0,
- distance : 0,
-
- scale: 1, // gesture.distance / gesture.startDistance
-
- startAngle: 0, // angle of line joining two touches
- prevAngle : 0 // angle of the previous gesture event
- };
-
- this.snapStatus = {
- x : 0, y : 0,
- dx : 0, dy : 0,
- realX : 0, realY : 0,
- snappedX: 0, snappedY: 0,
- targets : [],
- locked : false,
- changed : false
- };
-
- this.restrictStatus = {
- dx : 0, dy : 0,
- restrictedX: 0, restrictedY: 0,
- snap : null,
- restricted : false,
- changed : false
- };
-
- this.restrictStatus.snap = this.snapStatus;
-
- this.pointerIsDown = false;
- this.pointerWasMoved = false;
- this.gesturing = false;
- this.dragging = false;
- this.resizing = false;
- this.resizeAxes = 'xy';
-
- this.mouse = false;
-
- interactions.push(this);
- }
-
- Interaction.prototype = {
- getPageXY : function (pointer, xy) { return getPageXY(pointer, xy, this); },
- getClientXY: function (pointer, xy) { return getClientXY(pointer, xy, this); },
- setEventXY : function (target, ptr) { return setEventXY(target, ptr, this); },
-
- pointerOver: function (pointer, event, eventTarget) {
- if (this.prepared.name || !this.mouse) { return; }
-
- var curMatches = [],
- curMatchElements = [],
- prevTargetElement = this.element;
-
- this.addPointer(pointer);
-
- if (this.target
- && (testIgnore(this.target, this.element, eventTarget)
- || !testAllow(this.target, this.element, eventTarget))) {
- // if the eventTarget should be ignored or shouldn't be allowed
- // clear the previous target
- this.target = null;
- this.element = null;
- this.matches = [];
- this.matchElements = [];
- }
-
- var elementInteractable = interactables.get(eventTarget),
- elementAction = (elementInteractable
- && !testIgnore(elementInteractable, eventTarget, eventTarget)
- && testAllow(elementInteractable, eventTarget, eventTarget)
- && validateAction(
- elementInteractable.getAction(pointer, event, this, eventTarget),
- elementInteractable));
-
- if (elementAction && !withinInteractionLimit(elementInteractable, eventTarget, elementAction)) {
- elementAction = null;
- }
-
- function pushCurMatches (interactable, selector) {
- if (interactable
- && isElement(eventTarget)
- && inContext(interactable, eventTarget)
- && !testIgnore(interactable, eventTarget, eventTarget)
- && testAllow(interactable, eventTarget, eventTarget)
- && matchesSelector(eventTarget, selector)) {
-
- curMatches.push(interactable);
- curMatchElements.push(eventTarget);
- }
- }
-
- if (elementAction) {
- this.target = elementInteractable;
- this.element = eventTarget;
- this.matches = [];
- this.matchElements = [];
- }
- else {
- interactables.forEachSelector(pushCurMatches);
-
- if (this.validateSelector(pointer, event, curMatches, curMatchElements)) {
- this.matches = curMatches;
- this.matchElements = curMatchElements;
-
- this.pointerHover(pointer, event, this.matches, this.matchElements);
- events.add(eventTarget,
- supportsPointerEvent? pEventTypes.move : 'mousemove',
- listeners.pointerHover);
- }
- else if (this.target) {
- if (nodeContains(prevTargetElement, eventTarget)) {
- this.pointerHover(pointer, event, this.matches, this.matchElements);
- events.add(this.element,
- supportsPointerEvent? pEventTypes.move : 'mousemove',
- listeners.pointerHover);
- }
- else {
- this.target = null;
- this.element = null;
- this.matches = [];
- this.matchElements = [];
- }
- }
- }
- },
-
- // Check what action would be performed on pointerMove target if a mouse
- // button were pressed and change the cursor accordingly
- pointerHover: function (pointer, event, eventTarget, curEventTarget, matches, matchElements) {
- var target = this.target;
-
- if (!this.prepared.name && this.mouse) {
-
- var action;
-
- // update pointer coords for defaultActionChecker to use
- this.setEventXY(this.curCoords, [pointer]);
-
- if (matches) {
- action = this.validateSelector(pointer, event, matches, matchElements);
- }
- else if (target) {
- action = validateAction(target.getAction(this.pointers[0], event, this, this.element), this.target);
- }
-
- if (target && target.options.styleCursor) {
- if (action) {
- target._doc.documentElement.style.cursor = getActionCursor(action);
- }
- else {
- target._doc.documentElement.style.cursor = '';
- }
- }
- }
- else if (this.prepared.name) {
- this.checkAndPreventDefault(event, target, this.element);
- }
- },
-
- pointerOut: function (pointer, event, eventTarget) {
- if (this.prepared.name) { return; }
-
- // Remove temporary event listeners for selector Interactables
- if (!interactables.get(eventTarget)) {
- events.remove(eventTarget,
- supportsPointerEvent? pEventTypes.move : 'mousemove',
- listeners.pointerHover);
- }
-
- if (this.target && this.target.options.styleCursor && !this.interacting()) {
- this.target._doc.documentElement.style.cursor = '';
- }
- },
-
- selectorDown: function (pointer, event, eventTarget, curEventTarget) {
- var that = this,
- // copy event to be used in timeout for IE8
- eventCopy = events.useAttachEvent? extend({}, event) : event,
- element = eventTarget,
- pointerIndex = this.addPointer(pointer),
- action;
-
- this.holdTimers[pointerIndex] = setTimeout(function () {
- that.pointerHold(events.useAttachEvent? eventCopy : pointer, eventCopy, eventTarget, curEventTarget);
- }, defaultOptions._holdDuration);
-
- this.pointerIsDown = true;
-
- // Check if the down event hits the current inertia target
- if (this.inertiaStatus.active && this.target.selector) {
- // climb up the DOM tree from the event target
- while (isElement(element)) {
-
- // if this element is the current inertia target element
- if (element === this.element
- // and the prospective action is the same as the ongoing one
- && validateAction(this.target.getAction(pointer, event, this, this.element), this.target).name === this.prepared.name) {
-
- // stop inertia so that the next move will be a normal one
- cancelFrame(this.inertiaStatus.i);
- this.inertiaStatus.active = false;
-
- this.collectEventTargets(pointer, event, eventTarget, 'down');
- return;
- }
- element = parentElement(element);
- }
- }
-
- // do nothing if interacting
- if (this.interacting()) {
- this.collectEventTargets(pointer, event, eventTarget, 'down');
- return;
- }
-
- function pushMatches (interactable, selector, context) {
- var elements = ie8MatchesSelector
- ? context.querySelectorAll(selector)
- : undefined;
-
- if (inContext(interactable, element)
- && !testIgnore(interactable, element, eventTarget)
- && testAllow(interactable, element, eventTarget)
- && matchesSelector(element, selector, elements)) {
-
- that.matches.push(interactable);
- that.matchElements.push(element);
- }
- }
-
- // update pointer coords for defaultActionChecker to use
- this.setEventXY(this.curCoords, [pointer]);
- this.downEvent = event;
-
- while (isElement(element) && !action) {
- this.matches = [];
- this.matchElements = [];
-
- interactables.forEachSelector(pushMatches);
-
- action = this.validateSelector(pointer, event, this.matches, this.matchElements);
- element = parentElement(element);
- }
-
- if (action) {
- this.prepared.name = action.name;
- this.prepared.axis = action.axis;
- this.prepared.edges = action.edges;
-
- this.collectEventTargets(pointer, event, eventTarget, 'down');
-
- return this.pointerDown(pointer, event, eventTarget, curEventTarget, action);
- }
- else {
- // do these now since pointerDown isn't being called from here
- this.downTimes[pointerIndex] = new Date().getTime();
- this.downTargets[pointerIndex] = eventTarget;
- pointerExtend(this.downPointer, pointer);
-
- copyCoords(this.prevCoords, this.curCoords);
- this.pointerWasMoved = false;
- }
-
- this.collectEventTargets(pointer, event, eventTarget, 'down');
- },
-
- // Determine action to be performed on next pointerMove and add appropriate
- // style and event Listeners
- pointerDown: function (pointer, event, eventTarget, curEventTarget, forceAction) {
- if (!forceAction && !this.inertiaStatus.active && this.pointerWasMoved && this.prepared.name) {
- this.checkAndPreventDefault(event, this.target, this.element);
-
- return;
- }
-
- this.pointerIsDown = true;
- this.downEvent = event;
-
- var pointerIndex = this.addPointer(pointer),
- action;
-
- // If it is the second touch of a multi-touch gesture, keep the
- // target the same and get a new action if a target was set by the
- // first touch
- if (this.pointerIds.length > 1 && this.target._element === this.element) {
- var newAction = validateAction(forceAction || this.target.getAction(pointer, event, this, this.element), this.target);
-
- if (withinInteractionLimit(this.target, this.element, newAction)) {
- action = newAction;
- }
-
- this.prepared.name = null;
- }
- // Otherwise, set the target if there is no action prepared
- else if (!this.prepared.name) {
- var interactable = interactables.get(curEventTarget);
-
- if (interactable
- && !testIgnore(interactable, curEventTarget, eventTarget)
- && testAllow(interactable, curEventTarget, eventTarget)
- && (action = validateAction(forceAction || interactable.getAction(pointer, event, this, curEventTarget), interactable, eventTarget))
- && withinInteractionLimit(interactable, curEventTarget, action)) {
- this.target = interactable;
- this.element = curEventTarget;
- }
- }
-
- var target = this.target,
- options = target && target.options;
-
- if (target && (forceAction || !this.prepared.name)) {
- action = action || validateAction(forceAction || target.getAction(pointer, event, this, curEventTarget), target, this.element);
-
- this.setEventXY(this.startCoords, this.pointers);
-
- if (!action) { return; }
-
- if (options.styleCursor) {
- target._doc.documentElement.style.cursor = getActionCursor(action);
- }
-
- this.resizeAxes = action.name === 'resize'? action.axis : null;
-
- if (action === 'gesture' && this.pointerIds.length < 2) {
- action = null;
- }
-
- this.prepared.name = action.name;
- this.prepared.axis = action.axis;
- this.prepared.edges = action.edges;
-
- this.snapStatus.snappedX = this.snapStatus.snappedY =
- this.restrictStatus.restrictedX = this.restrictStatus.restrictedY = NaN;
-
- this.downTimes[pointerIndex] = new Date().getTime();
- this.downTargets[pointerIndex] = eventTarget;
- pointerExtend(this.downPointer, pointer);
-
- copyCoords(this.prevCoords, this.startCoords);
- this.pointerWasMoved = false;
-
- this.checkAndPreventDefault(event, target, this.element);
- }
- // if inertia is active try to resume action
- else if (this.inertiaStatus.active
- && curEventTarget === this.element
- && validateAction(target.getAction(pointer, event, this, this.element), target).name === this.prepared.name) {
-
- cancelFrame(this.inertiaStatus.i);
- this.inertiaStatus.active = false;
-
- this.checkAndPreventDefault(event, target, this.element);
- }
- },
-
- setModifications: function (coords, preEnd) {
- var target = this.target,
- shouldMove = true,
- shouldSnap = checkSnap(target, this.prepared.name) && (!target.options[this.prepared.name].snap.endOnly || preEnd),
- shouldRestrict = checkRestrict(target, this.prepared.name) && (!target.options[this.prepared.name].restrict.endOnly || preEnd);
-
- if (shouldSnap ) { this.setSnapping (coords); } else { this.snapStatus .locked = false; }
- if (shouldRestrict) { this.setRestriction(coords); } else { this.restrictStatus.restricted = false; }
-
- if (shouldSnap && this.snapStatus.locked && !this.snapStatus.changed) {
- shouldMove = shouldRestrict && this.restrictStatus.restricted && this.restrictStatus.changed;
- }
- else if (shouldRestrict && this.restrictStatus.restricted && !this.restrictStatus.changed) {
- shouldMove = false;
- }
-
- return shouldMove;
- },
-
- setStartOffsets: function (action, interactable, element) {
- var rect = interactable.getRect(element),
- origin = getOriginXY(interactable, element),
- snap = interactable.options[this.prepared.name].snap,
- restrict = interactable.options[this.prepared.name].restrict,
- width, height;
-
- if (rect) {
- this.startOffset.left = this.startCoords.page.x - rect.left;
- this.startOffset.top = this.startCoords.page.y - rect.top;
-
- this.startOffset.right = rect.right - this.startCoords.page.x;
- this.startOffset.bottom = rect.bottom - this.startCoords.page.y;
-
- if ('width' in rect) { width = rect.width; }
- else { width = rect.right - rect.left; }
- if ('height' in rect) { height = rect.height; }
- else { height = rect.bottom - rect.top; }
- }
- else {
- this.startOffset.left = this.startOffset.top = this.startOffset.right = this.startOffset.bottom = 0;
- }
-
- this.snapOffsets.splice(0);
-
- var snapOffset = snap && snap.offset === 'startCoords'
- ? {
- x: this.startCoords.page.x - origin.x,
- y: this.startCoords.page.y - origin.y
- }
- : snap && snap.offset || { x: 0, y: 0 };
-
- if (rect && snap && snap.relativePoints && snap.relativePoints.length) {
- for (var i = 0; i < snap.relativePoints.length; i++) {
- this.snapOffsets.push({
- x: this.startOffset.left - (width * snap.relativePoints[i].x) + snapOffset.x,
- y: this.startOffset.top - (height * snap.relativePoints[i].y) + snapOffset.y
- });
- }
- }
- else {
- this.snapOffsets.push(snapOffset);
- }
-
- if (rect && restrict.elementRect) {
- this.restrictOffset.left = this.startOffset.left - (width * restrict.elementRect.left);
- this.restrictOffset.top = this.startOffset.top - (height * restrict.elementRect.top);
-
- this.restrictOffset.right = this.startOffset.right - (width * (1 - restrict.elementRect.right));
- this.restrictOffset.bottom = this.startOffset.bottom - (height * (1 - restrict.elementRect.bottom));
- }
- else {
- this.restrictOffset.left = this.restrictOffset.top = this.restrictOffset.right = this.restrictOffset.bottom = 0;
- }
- },
-
- /*\
- * Interaction.start
- [ method ]
- *
- * Start an action with the given Interactable and Element as tartgets. The
- * action must be enabled for the target Interactable and an appropriate number
- * of pointers must be held down – 1 for drag/resize, 2 for gesture.
- *
- * Use it with `interactable.able({ manualStart: false })` to always
- * [start actions manually](https://github.com/taye/interact.js/issues/114)
- *
- - action (object) The action to be performed - drag, resize, etc.
- - interactable (Interactable) The Interactable to target
- - element (Element) The DOM Element to target
- = (object) interact
- **
- | interact(target)
- | .draggable({
- | // disable the default drag start by down->move
- | manualStart: true
- | })
- | // start dragging after the user holds the pointer down
- | .on('hold', function (event) {
- | var interaction = event.interaction;
- |
- | if (!interaction.interacting()) {
- | interaction.start({ name: 'drag' },
- | event.interactable,
- | event.currentTarget);
- | }
- | });
- \*/
- start: function (action, interactable, element) {
- if (this.interacting()
- || !this.pointerIsDown
- || this.pointerIds.length < (action.name === 'gesture'? 2 : 1)) {
- return;
- }
-
- // if this interaction had been removed after stopping
- // add it back
- if (indexOf(interactions, this) === -1) {
- interactions.push(this);
- }
-
- // set the startCoords if there was no prepared action
- if (!this.prepared.name) {
- this.setEventXY(this.startCoords, this.pointers);
- }
-
- this.prepared.name = action.name;
- this.prepared.axis = action.axis;
- this.prepared.edges = action.edges;
- this.target = interactable;
- this.element = element;
-
- this.setStartOffsets(action.name, interactable, element);
- this.setModifications(this.startCoords.page);
-
- this.prevEvent = this[this.prepared.name + 'Start'](this.downEvent);
- },
-
- pointerMove: function (pointer, event, eventTarget, curEventTarget, preEnd) {
- if (this.inertiaStatus.active) {
- var pageUp = this.inertiaStatus.upCoords.page;
- var clientUp = this.inertiaStatus.upCoords.client;
-
- var inertiaPosition = {
- pageX : pageUp.x + this.inertiaStatus.sx,
- pageY : pageUp.y + this.inertiaStatus.sy,
- clientX: clientUp.x + this.inertiaStatus.sx,
- clientY: clientUp.y + this.inertiaStatus.sy
- };
-
- this.setEventXY(this.curCoords, [inertiaPosition]);
- }
- else {
- this.recordPointer(pointer);
- this.setEventXY(this.curCoords, this.pointers);
- }
-
- var duplicateMove = (this.curCoords.page.x === this.prevCoords.page.x
- && this.curCoords.page.y === this.prevCoords.page.y
- && this.curCoords.client.x === this.prevCoords.client.x
- && this.curCoords.client.y === this.prevCoords.client.y);
-
- var dx, dy,
- pointerIndex = this.mouse? 0 : indexOf(this.pointerIds, getPointerId(pointer));
-
- // register movement greater than pointerMoveTolerance
- if (this.pointerIsDown && !this.pointerWasMoved) {
- dx = this.curCoords.client.x - this.startCoords.client.x;
- dy = this.curCoords.client.y - this.startCoords.client.y;
-
- this.pointerWasMoved = hypot(dx, dy) > pointerMoveTolerance;
- }
-
- if (!duplicateMove && (!this.pointerIsDown || this.pointerWasMoved)) {
- if (this.pointerIsDown) {
- clearTimeout(this.holdTimers[pointerIndex]);
- }
-
- this.collectEventTargets(pointer, event, eventTarget, 'move');
- }
-
- if (!this.pointerIsDown) { return; }
-
- if (duplicateMove && this.pointerWasMoved && !preEnd) {
- this.checkAndPreventDefault(event, this.target, this.element);
- return;
- }
-
- // set pointer coordinate, time changes and speeds
- setEventDeltas(this.pointerDelta, this.prevCoords, this.curCoords);
-
- if (!this.prepared.name) { return; }
-
- if (this.pointerWasMoved
- // ignore movement while inertia is active
- && (!this.inertiaStatus.active || (pointer instanceof InteractEvent && /inertiastart/.test(pointer.type)))) {
-
- // if just starting an action, calculate the pointer speed now
- if (!this.interacting()) {
- setEventDeltas(this.pointerDelta, this.prevCoords, this.curCoords);
-
- // check if a drag is in the correct axis
- if (this.prepared.name === 'drag') {
- var absX = Math.abs(dx),
- absY = Math.abs(dy),
- targetAxis = this.target.options.drag.axis,
- axis = (absX > absY ? 'x' : absX < absY ? 'y' : 'xy');
-
- // if the movement isn't in the axis of the interactable
- if (axis !== 'xy' && targetAxis !== 'xy' && targetAxis !== axis) {
- // cancel the prepared action
- this.prepared.name = null;
-
- // then try to get a drag from another ineractable
-
- var element = eventTarget;
-
- // check element interactables
- while (isElement(element)) {
- var elementInteractable = interactables.get(element);
-
- if (elementInteractable
- && elementInteractable !== this.target
- && !elementInteractable.options.drag.manualStart
- && elementInteractable.getAction(this.downPointer, this.downEvent, this, element).name === 'drag'
- && checkAxis(axis, elementInteractable)) {
-
- this.prepared.name = 'drag';
- this.target = elementInteractable;
- this.element = element;
- break;
- }
-
- element = parentElement(element);
- }
-
- // if there's no drag from element interactables,
- // check the selector interactables
- if (!this.prepared.name) {
- var thisInteraction = this;
-
- var getDraggable = function (interactable, selector, context) {
- var elements = ie8MatchesSelector
- ? context.querySelectorAll(selector)
- : undefined;
-
- if (interactable === thisInteraction.target) { return; }
-
- if (inContext(interactable, eventTarget)
- && !interactable.options.drag.manualStart
- && !testIgnore(interactable, element, eventTarget)
- && testAllow(interactable, element, eventTarget)
- && matchesSelector(element, selector, elements)
- && interactable.getAction(thisInteraction.downPointer, thisInteraction.downEvent, thisInteraction, element).name === 'drag'
- && checkAxis(axis, interactable)
- && withinInteractionLimit(interactable, element, 'drag')) {
-
- return interactable;
- }
- };
-
- element = eventTarget;
-
- while (isElement(element)) {
- var selectorInteractable = interactables.forEachSelector(getDraggable);
-
- if (selectorInteractable) {
- this.prepared.name = 'drag';
- this.target = selectorInteractable;
- this.element = element;
- break;
- }
-
- element = parentElement(element);
- }
- }
- }
- }
- }
-
- var starting = !!this.prepared.name && !this.interacting();
-
- if (starting
- && (this.target.options[this.prepared.name].manualStart
- || !withinInteractionLimit(this.target, this.element, this.prepared))) {
- this.stop(event);
- return;
- }
-
- if (this.prepared.name && this.target) {
- if (starting) {
- this.start(this.prepared, this.target, this.element);
- }
-
- var shouldMove = this.setModifications(this.curCoords.page, preEnd);
-
- // move if snapping or restriction doesn't prevent it
- if (shouldMove || starting) {
- this.prevEvent = this[this.prepared.name + 'Move'](event);
- }
-
- this.checkAndPreventDefault(event, this.target, this.element);
- }
- }
-
- copyCoords(this.prevCoords, this.curCoords);
-
- if (this.dragging || this.resizing) {
- this.autoScrollMove(pointer);
- }
- },
-
- dragStart: function (event) {
- var dragEvent = new InteractEvent(this, event, 'drag', 'start', this.element);
-
- this.dragging = true;
- this.target.fire(dragEvent);
-
- // reset active dropzones
- this.activeDrops.dropzones = [];
- this.activeDrops.elements = [];
- this.activeDrops.rects = [];
-
- if (!this.dynamicDrop) {
- this.setActiveDrops(this.element);
- }
-
- var dropEvents = this.getDropEvents(event, dragEvent);
-
- if (dropEvents.activate) {
- this.fireActiveDrops(dropEvents.activate);
- }
-
- return dragEvent;
- },
-
- dragMove: function (event) {
- var target = this.target,
- dragEvent = new InteractEvent(this, event, 'drag', 'move', this.element),
- draggableElement = this.element,
- drop = this.getDrop(dragEvent, event, draggableElement);
-
- this.dropTarget = drop.dropzone;
- this.dropElement = drop.element;
-
- var dropEvents = this.getDropEvents(event, dragEvent);
-
- target.fire(dragEvent);
-
- if (dropEvents.leave) { this.prevDropTarget.fire(dropEvents.leave); }
- if (dropEvents.enter) { this.dropTarget.fire(dropEvents.enter); }
- if (dropEvents.move ) { this.dropTarget.fire(dropEvents.move ); }
-
- this.prevDropTarget = this.dropTarget;
- this.prevDropElement = this.dropElement;
-
- return dragEvent;
- },
-
- resizeStart: function (event) {
- var resizeEvent = new InteractEvent(this, event, 'resize', 'start', this.element);
-
- if (this.prepared.edges) {
- var startRect = this.target.getRect(this.element);
-
- /*
- * When using the `resizable.square` or `resizable.preserveAspectRatio` options, resizing from one edge
- * will affect another. E.g. with `resizable.square`, resizing to make the right edge larger will make
- * the bottom edge larger by the same amount. We call these 'linked' edges. Any linked edges will depend
- * on the active edges and the edge being interacted with.
- */
- if (this.target.options.resize.square || this.target.options.resize.preserveAspectRatio) {
- var linkedEdges = extend({}, this.prepared.edges);
-
- linkedEdges.top = linkedEdges.top || (linkedEdges.left && !linkedEdges.bottom);
- linkedEdges.left = linkedEdges.left || (linkedEdges.top && !linkedEdges.right );
- linkedEdges.bottom = linkedEdges.bottom || (linkedEdges.right && !linkedEdges.top );
- linkedEdges.right = linkedEdges.right || (linkedEdges.bottom && !linkedEdges.left );
-
- this.prepared._linkedEdges = linkedEdges;
- }
- else {
- this.prepared._linkedEdges = null;
- }
-
- // if using `resizable.preserveAspectRatio` option, record aspect ratio at the start of the resize
- if (this.target.options.resize.preserveAspectRatio) {
- this.resizeStartAspectRatio = startRect.width / startRect.height;
- }
-
- this.resizeRects = {
- start : startRect,
- current : extend({}, startRect),
- restricted: extend({}, startRect),
- previous : extend({}, startRect),
- delta : {
- left: 0, right : 0, width : 0,
- top : 0, bottom: 0, height: 0
- }
- };
-
- resizeEvent.rect = this.resizeRects.restricted;
- resizeEvent.deltaRect = this.resizeRects.delta;
- }
-
- this.target.fire(resizeEvent);
-
- this.resizing = true;
-
- return resizeEvent;
- },
-
- resizeMove: function (event) {
- var resizeEvent = new InteractEvent(this, event, 'resize', 'move', this.element);
-
- var edges = this.prepared.edges,
- invert = this.target.options.resize.invert,
- invertible = invert === 'reposition' || invert === 'negate';
-
- if (edges) {
- var dx = resizeEvent.dx,
- dy = resizeEvent.dy,
-
- start = this.resizeRects.start,
- current = this.resizeRects.current,
- restricted = this.resizeRects.restricted,
- delta = this.resizeRects.delta,
- previous = extend(this.resizeRects.previous, restricted),
-
- originalEdges = edges;
-
- // `resize.preserveAspectRatio` takes precedence over `resize.square`
- if (this.target.options.resize.preserveAspectRatio) {
- var resizeStartAspectRatio = this.resizeStartAspectRatio;
-
- edges = this.prepared._linkedEdges;
-
- if ((originalEdges.left && originalEdges.bottom)
- || (originalEdges.right && originalEdges.top)) {
- dy = -dx / resizeStartAspectRatio;
- }
- else if (originalEdges.left || originalEdges.right) { dy = dx / resizeStartAspectRatio; }
- else if (originalEdges.top || originalEdges.bottom) { dx = dy * resizeStartAspectRatio; }
- }
- else if (this.target.options.resize.square) {
- edges = this.prepared._linkedEdges;
-
- if ((originalEdges.left && originalEdges.bottom)
- || (originalEdges.right && originalEdges.top)) {
- dy = -dx;
- }
- else if (originalEdges.left || originalEdges.right) { dy = dx; }
- else if (originalEdges.top || originalEdges.bottom) { dx = dy; }
- }
-
- // update the 'current' rect without modifications
- if (edges.top ) { current.top += dy; }
- if (edges.bottom) { current.bottom += dy; }
- if (edges.left ) { current.left += dx; }
- if (edges.right ) { current.right += dx; }
-
- if (invertible) {
- // if invertible, copy the current rect
- extend(restricted, current);
-
- if (invert === 'reposition') {
- // swap edge values if necessary to keep width/height positive
- var swap;
-
- if (restricted.top > restricted.bottom) {
- swap = restricted.top;
-
- restricted.top = restricted.bottom;
- restricted.bottom = swap;
- }
- if (restricted.left > restricted.right) {
- swap = restricted.left;
-
- restricted.left = restricted.right;
- restricted.right = swap;
- }
- }
- }
- else {
- // if not invertible, restrict to minimum of 0x0 rect
- restricted.top = Math.min(current.top, start.bottom);
- restricted.bottom = Math.max(current.bottom, start.top);
- restricted.left = Math.min(current.left, start.right);
- restricted.right = Math.max(current.right, start.left);
- }
-
- restricted.width = restricted.right - restricted.left;
- restricted.height = restricted.bottom - restricted.top ;
-
- for (var edge in restricted) {
- delta[edge] = restricted[edge] - previous[edge];
- }
-
- resizeEvent.edges = this.prepared.edges;
- resizeEvent.rect = restricted;
- resizeEvent.deltaRect = delta;
- }
-
- this.target.fire(resizeEvent);
-
- return resizeEvent;
- },
-
- gestureStart: function (event) {
- var gestureEvent = new InteractEvent(this, event, 'gesture', 'start', this.element);
-
- gestureEvent.ds = 0;
-
- this.gesture.startDistance = this.gesture.prevDistance = gestureEvent.distance;
- this.gesture.startAngle = this.gesture.prevAngle = gestureEvent.angle;
- this.gesture.scale = 1;
-
- this.gesturing = true;
-
- this.target.fire(gestureEvent);
-
- return gestureEvent;
- },
-
- gestureMove: function (event) {
- if (!this.pointerIds.length) {
- return this.prevEvent;
- }
-
- var gestureEvent;
-
- gestureEvent = new InteractEvent(this, event, 'gesture', 'move', this.element);
- gestureEvent.ds = gestureEvent.scale - this.gesture.scale;
-
- this.target.fire(gestureEvent);
-
- this.gesture.prevAngle = gestureEvent.angle;
- this.gesture.prevDistance = gestureEvent.distance;
-
- if (gestureEvent.scale !== Infinity &&
- gestureEvent.scale !== null &&
- gestureEvent.scale !== undefined &&
- !isNaN(gestureEvent.scale)) {
-
- this.gesture.scale = gestureEvent.scale;
- }
-
- return gestureEvent;
- },
-
- pointerHold: function (pointer, event, eventTarget) {
- this.collectEventTargets(pointer, event, eventTarget, 'hold');
- },
-
- pointerUp: function (pointer, event, eventTarget, curEventTarget) {
- var pointerIndex = this.mouse? 0 : indexOf(this.pointerIds, getPointerId(pointer));
-
- clearTimeout(this.holdTimers[pointerIndex]);
-
- this.collectEventTargets(pointer, event, eventTarget, 'up' );
- this.collectEventTargets(pointer, event, eventTarget, 'tap');
-
- this.pointerEnd(pointer, event, eventTarget, curEventTarget);
-
- this.removePointer(pointer);
- },
-
- pointerCancel: function (pointer, event, eventTarget, curEventTarget) {
- var pointerIndex = this.mouse? 0 : indexOf(this.pointerIds, getPointerId(pointer));
-
- clearTimeout(this.holdTimers[pointerIndex]);
-
- this.collectEventTargets(pointer, event, eventTarget, 'cancel');
- this.pointerEnd(pointer, event, eventTarget, curEventTarget);
-
- this.removePointer(pointer);
- },
-
- // http://www.quirksmode.org/dom/events/click.html
- // >Events leading to dblclick
- //
- // IE8 doesn't fire down event before dblclick.
- // This workaround tries to fire a tap and doubletap after dblclick
- ie8Dblclick: function (pointer, event, eventTarget) {
- if (this.prevTap
- && event.clientX === this.prevTap.clientX
- && event.clientY === this.prevTap.clientY
- && eventTarget === this.prevTap.target) {
-
- this.downTargets[0] = eventTarget;
- this.downTimes[0] = new Date().getTime();
- this.collectEventTargets(pointer, event, eventTarget, 'tap');
- }
- },
-
- // End interact move events and stop auto-scroll unless inertia is enabled
- pointerEnd: function (pointer, event, eventTarget, curEventTarget) {
- var endEvent,
- target = this.target,
- options = target && target.options,
- inertiaOptions = options && this.prepared.name && options[this.prepared.name].inertia,
- inertiaStatus = this.inertiaStatus;
-
- if (this.interacting()) {
-
- if (inertiaStatus.active && !inertiaStatus.ending) { return; }
-
- var pointerSpeed,
- now = new Date().getTime(),
- inertiaPossible = false,
- inertia = false,
- smoothEnd = false,
- endSnap = checkSnap(target, this.prepared.name) && options[this.prepared.name].snap.endOnly,
- endRestrict = checkRestrict(target, this.prepared.name) && options[this.prepared.name].restrict.endOnly,
- dx = 0,
- dy = 0,
- startEvent;
-
- if (this.dragging) {
- if (options.drag.axis === 'x' ) { pointerSpeed = Math.abs(this.pointerDelta.client.vx); }
- else if (options.drag.axis === 'y' ) { pointerSpeed = Math.abs(this.pointerDelta.client.vy); }
- else /*options.drag.axis === 'xy'*/{ pointerSpeed = this.pointerDelta.client.speed; }
- }
- else {
- pointerSpeed = this.pointerDelta.client.speed;
- }
-
- // check if inertia should be started
- inertiaPossible = (inertiaOptions && inertiaOptions.enabled
- && this.prepared.name !== 'gesture'
- && event !== inertiaStatus.startEvent);
-
- inertia = (inertiaPossible
- && (now - this.curCoords.timeStamp) < 50
- && pointerSpeed > inertiaOptions.minSpeed
- && pointerSpeed > inertiaOptions.endSpeed);
-
- if (inertiaPossible && !inertia && (endSnap || endRestrict)) {
-
- var snapRestrict = {};
-
- snapRestrict.snap = snapRestrict.restrict = snapRestrict;
-
- if (endSnap) {
- this.setSnapping(this.curCoords.page, snapRestrict);
- if (snapRestrict.locked) {
- dx += snapRestrict.dx;
- dy += snapRestrict.dy;
- }
- }
-
- if (endRestrict) {
- this.setRestriction(this.curCoords.page, snapRestrict);
- if (snapRestrict.restricted) {
- dx += snapRestrict.dx;
- dy += snapRestrict.dy;
- }
- }
-
- if (dx || dy) {
- smoothEnd = true;
- }
- }
-
- if (inertia || smoothEnd) {
- copyCoords(inertiaStatus.upCoords, this.curCoords);
-
- this.pointers[0] = inertiaStatus.startEvent = startEvent =
- new InteractEvent(this, event, this.prepared.name, 'inertiastart', this.element);
-
- inertiaStatus.t0 = now;
-
- target.fire(inertiaStatus.startEvent);
-
- if (inertia) {
- inertiaStatus.vx0 = this.pointerDelta.client.vx;
- inertiaStatus.vy0 = this.pointerDelta.client.vy;
- inertiaStatus.v0 = pointerSpeed;
-
- this.calcInertia(inertiaStatus);
-
- var page = extend({}, this.curCoords.page),
- origin = getOriginXY(target, this.element),
- statusObject;
-
- page.x = page.x + inertiaStatus.xe - origin.x;
- page.y = page.y + inertiaStatus.ye - origin.y;
-
- statusObject = {
- useStatusXY: true,
- x: page.x,
- y: page.y,
- dx: 0,
- dy: 0,
- snap: null
- };
-
- statusObject.snap = statusObject;
-
- dx = dy = 0;
-
- if (endSnap) {
- var snap = this.setSnapping(this.curCoords.page, statusObject);
-
- if (snap.locked) {
- dx += snap.dx;
- dy += snap.dy;
- }
- }
-
- if (endRestrict) {
- var restrict = this.setRestriction(this.curCoords.page, statusObject);
-
- if (restrict.restricted) {
- dx += restrict.dx;
- dy += restrict.dy;
- }
- }
-
- inertiaStatus.modifiedXe += dx;
- inertiaStatus.modifiedYe += dy;
-
- inertiaStatus.i = reqFrame(this.boundInertiaFrame);
- }
- else {
- inertiaStatus.smoothEnd = true;
- inertiaStatus.xe = dx;
- inertiaStatus.ye = dy;
-
- inertiaStatus.sx = inertiaStatus.sy = 0;
-
- inertiaStatus.i = reqFrame(this.boundSmoothEndFrame);
- }
-
- inertiaStatus.active = true;
- return;
- }
-
- if (endSnap || endRestrict) {
- // fire a move event at the snapped coordinates
- this.pointerMove(pointer, event, eventTarget, curEventTarget, true);
- }
- }
-
- if (this.dragging) {
- endEvent = new InteractEvent(this, event, 'drag', 'end', this.element);
-
- var draggableElement = this.element,
- drop = this.getDrop(endEvent, event, draggableElement);
-
- this.dropTarget = drop.dropzone;
- this.dropElement = drop.element;
-
- var dropEvents = this.getDropEvents(event, endEvent);
-
- if (dropEvents.leave) { this.prevDropTarget.fire(dropEvents.leave); }
- if (dropEvents.enter) { this.dropTarget.fire(dropEvents.enter); }
- if (dropEvents.drop ) { this.dropTarget.fire(dropEvents.drop ); }
- if (dropEvents.deactivate) {
- this.fireActiveDrops(dropEvents.deactivate);
- }
-
- target.fire(endEvent);
- }
- else if (this.resizing) {
- endEvent = new InteractEvent(this, event, 'resize', 'end', this.element);
- target.fire(endEvent);
- }
- else if (this.gesturing) {
- endEvent = new InteractEvent(this, event, 'gesture', 'end', this.element);
- target.fire(endEvent);
- }
-
- this.stop(event);
- },
-
- collectDrops: function (element) {
- var drops = [],
- elements = [],
- i;
-
- element = element || this.element;
-
- // collect all dropzones and their elements which qualify for a drop
- for (i = 0; i < interactables.length; i++) {
- if (!interactables[i].options.drop.enabled) { continue; }
-
- var current = interactables[i],
- accept = current.options.drop.accept;
-
- // test the draggable element against the dropzone's accept setting
- if ((isElement(accept) && accept !== element)
- || (isString(accept)
- && !matchesSelector(element, accept))) {
-
- continue;
- }
-
- // query for new elements if necessary
- var dropElements = current.selector? current._context.querySelectorAll(current.selector) : [current._element];
-
- for (var j = 0, len = dropElements.length; j < len; j++) {
- var currentElement = dropElements[j];
-
- if (currentElement === element) {
- continue;
- }
-
- drops.push(current);
- elements.push(currentElement);
- }
- }
-
- return {
- dropzones: drops,
- elements: elements
- };
- },
-
- fireActiveDrops: function (event) {
- var i,
- current,
- currentElement,
- prevElement;
-
- // loop through all active dropzones and trigger event
- for (i = 0; i < this.activeDrops.dropzones.length; i++) {
- current = this.activeDrops.dropzones[i];
- currentElement = this.activeDrops.elements [i];
-
- // prevent trigger of duplicate events on same element
- if (currentElement !== prevElement) {
- // set current element as event target
- event.target = currentElement;
- current.fire(event);
- }
- prevElement = currentElement;
- }
- },
-
- // Collect a new set of possible drops and save them in activeDrops.
- // setActiveDrops should always be called when a drag has just started or a
- // drag event happens while dynamicDrop is true
- setActiveDrops: function (dragElement) {
- // get dropzones and their elements that could receive the draggable
- var possibleDrops = this.collectDrops(dragElement, true);
-
- this.activeDrops.dropzones = possibleDrops.dropzones;
- this.activeDrops.elements = possibleDrops.elements;
- this.activeDrops.rects = [];
-
- for (var i = 0; i < this.activeDrops.dropzones.length; i++) {
- this.activeDrops.rects[i] = this.activeDrops.dropzones[i].getRect(this.activeDrops.elements[i]);
- }
- },
-
- getDrop: function (dragEvent, event, dragElement) {
- var validDrops = [];
-
- if (dynamicDrop) {
- this.setActiveDrops(dragElement);
- }
-
- // collect all dropzones and their elements which qualify for a drop
- for (var j = 0; j < this.activeDrops.dropzones.length; j++) {
- var current = this.activeDrops.dropzones[j],
- currentElement = this.activeDrops.elements [j],
- rect = this.activeDrops.rects [j];
-
- validDrops.push(current.dropCheck(dragEvent, event, this.target, dragElement, currentElement, rect)
- ? currentElement
- : null);
- }
-
- // get the most appropriate dropzone based on DOM depth and order
- var dropIndex = indexOfDeepestElement(validDrops),
- dropzone = this.activeDrops.dropzones[dropIndex] || null,
- element = this.activeDrops.elements [dropIndex] || null;
-
- return {
- dropzone: dropzone,
- element: element
- };
- },
-
- getDropEvents: function (pointerEvent, dragEvent) {
- var dropEvents = {
- enter : null,
- leave : null,
- activate : null,
- deactivate: null,
- move : null,
- drop : null
- };
-
- if (this.dropElement !== this.prevDropElement) {
- // if there was a prevDropTarget, create a dragleave event
- if (this.prevDropTarget) {
- dropEvents.leave = {
- target : this.prevDropElement,
- dropzone : this.prevDropTarget,
- relatedTarget: dragEvent.target,
- draggable : dragEvent.interactable,
- dragEvent : dragEvent,
- interaction : this,
- timeStamp : dragEvent.timeStamp,
- type : 'dragleave'
- };
-
- dragEvent.dragLeave = this.prevDropElement;
- dragEvent.prevDropzone = this.prevDropTarget;
- }
- // if the dropTarget is not null, create a dragenter event
- if (this.dropTarget) {
- dropEvents.enter = {
- target : this.dropElement,
- dropzone : this.dropTarget,
- relatedTarget: dragEvent.target,
- draggable : dragEvent.interactable,
- dragEvent : dragEvent,
- interaction : this,
- timeStamp : dragEvent.timeStamp,
- type : 'dragenter'
- };
-
- dragEvent.dragEnter = this.dropElement;
- dragEvent.dropzone = this.dropTarget;
- }
- }
-
- if (dragEvent.type === 'dragend' && this.dropTarget) {
- dropEvents.drop = {
- target : this.dropElement,
- dropzone : this.dropTarget,
- relatedTarget: dragEvent.target,
- draggable : dragEvent.interactable,
- dragEvent : dragEvent,
- interaction : this,
- timeStamp : dragEvent.timeStamp,
- type : 'drop'
- };
-
- dragEvent.dropzone = this.dropTarget;
- }
- if (dragEvent.type === 'dragstart') {
- dropEvents.activate = {
- target : null,
- dropzone : null,
- relatedTarget: dragEvent.target,
- draggable : dragEvent.interactable,
- dragEvent : dragEvent,
- interaction : this,
- timeStamp : dragEvent.timeStamp,
- type : 'dropactivate'
- };
- }
- if (dragEvent.type === 'dragend') {
- dropEvents.deactivate = {
- target : null,
- dropzone : null,
- relatedTarget: dragEvent.target,
- draggable : dragEvent.interactable,
- dragEvent : dragEvent,
- interaction : this,
- timeStamp : dragEvent.timeStamp,
- type : 'dropdeactivate'
- };
- }
- if (dragEvent.type === 'dragmove' && this.dropTarget) {
- dropEvents.move = {
- target : this.dropElement,
- dropzone : this.dropTarget,
- relatedTarget: dragEvent.target,
- draggable : dragEvent.interactable,
- dragEvent : dragEvent,
- interaction : this,
- dragmove : dragEvent,
- timeStamp : dragEvent.timeStamp,
- type : 'dropmove'
- };
- dragEvent.dropzone = this.dropTarget;
- }
-
- return dropEvents;
- },
-
- currentAction: function () {
- return (this.dragging && 'drag') || (this.resizing && 'resize') || (this.gesturing && 'gesture') || null;
- },
-
- interacting: function () {
- return this.dragging || this.resizing || this.gesturing;
- },
-
- clearTargets: function () {
- this.target = this.element = null;
-
- this.dropTarget = this.dropElement = this.prevDropTarget = this.prevDropElement = null;
- },
-
- stop: function (event) {
- if (this.interacting()) {
- autoScroll.stop();
- this.matches = [];
- this.matchElements = [];
-
- var target = this.target;
-
- if (target.options.styleCursor) {
- target._doc.documentElement.style.cursor = '';
- }
-
- // prevent Default only if were previously interacting
- if (event && isFunction(event.preventDefault)) {
- this.checkAndPreventDefault(event, target, this.element);
- }
-
- if (this.dragging) {
- this.activeDrops.dropzones = this.activeDrops.elements = this.activeDrops.rects = null;
- }
- }
-
- this.clearTargets();
-
- this.pointerIsDown = this.snapStatus.locked = this.dragging = this.resizing = this.gesturing = false;
- this.prepared.name = this.prevEvent = null;
- this.inertiaStatus.resumeDx = this.inertiaStatus.resumeDy = 0;
-
- // remove pointers if their ID isn't in this.pointerIds
- for (var i = 0; i < this.pointers.length; i++) {
- if (indexOf(this.pointerIds, getPointerId(this.pointers[i])) === -1) {
- this.pointers.splice(i, 1);
- }
- }
- },
-
- inertiaFrame: function () {
- var inertiaStatus = this.inertiaStatus,
- options = this.target.options[this.prepared.name].inertia,
- lambda = options.resistance,
- t = new Date().getTime() / 1000 - inertiaStatus.t0;
-
- if (t < inertiaStatus.te) {
-
- var progress = 1 - (Math.exp(-lambda * t) - inertiaStatus.lambda_v0) / inertiaStatus.one_ve_v0;
-
- if (inertiaStatus.modifiedXe === inertiaStatus.xe && inertiaStatus.modifiedYe === inertiaStatus.ye) {
- inertiaStatus.sx = inertiaStatus.xe * progress;
- inertiaStatus.sy = inertiaStatus.ye * progress;
- }
- else {
- var quadPoint = getQuadraticCurvePoint(
- 0, 0,
- inertiaStatus.xe, inertiaStatus.ye,
- inertiaStatus.modifiedXe, inertiaStatus.modifiedYe,
- progress);
-
- inertiaStatus.sx = quadPoint.x;
- inertiaStatus.sy = quadPoint.y;
- }
-
- this.pointerMove(inertiaStatus.startEvent, inertiaStatus.startEvent);
-
- inertiaStatus.i = reqFrame(this.boundInertiaFrame);
- }
- else {
- inertiaStatus.ending = true;
-
- inertiaStatus.sx = inertiaStatus.modifiedXe;
- inertiaStatus.sy = inertiaStatus.modifiedYe;
-
- this.pointerMove(inertiaStatus.startEvent, inertiaStatus.startEvent);
- this.pointerEnd(inertiaStatus.startEvent, inertiaStatus.startEvent);
-
- inertiaStatus.active = inertiaStatus.ending = false;
- }
- },
-
- smoothEndFrame: function () {
- var inertiaStatus = this.inertiaStatus,
- t = new Date().getTime() - inertiaStatus.t0,
- duration = this.target.options[this.prepared.name].inertia.smoothEndDuration;
-
- if (t < duration) {
- inertiaStatus.sx = easeOutQuad(t, 0, inertiaStatus.xe, duration);
- inertiaStatus.sy = easeOutQuad(t, 0, inertiaStatus.ye, duration);
-
- this.pointerMove(inertiaStatus.startEvent, inertiaStatus.startEvent);
-
- inertiaStatus.i = reqFrame(this.boundSmoothEndFrame);
- }
- else {
- inertiaStatus.ending = true;
-
- inertiaStatus.sx = inertiaStatus.xe;
- inertiaStatus.sy = inertiaStatus.ye;
-
- this.pointerMove(inertiaStatus.startEvent, inertiaStatus.startEvent);
- this.pointerEnd(inertiaStatus.startEvent, inertiaStatus.startEvent);
-
- inertiaStatus.smoothEnd =
- inertiaStatus.active = inertiaStatus.ending = false;
- }
- },
-
- addPointer: function (pointer) {
- var id = getPointerId(pointer),
- index = this.mouse? 0 : indexOf(this.pointerIds, id);
-
- if (index === -1) {
- index = this.pointerIds.length;
- }
-
- this.pointerIds[index] = id;
- this.pointers[index] = pointer;
-
- return index;
- },
-
- removePointer: function (pointer) {
- var id = getPointerId(pointer),
- index = this.mouse? 0 : indexOf(this.pointerIds, id);
-
- if (index === -1) { return; }
-
- this.pointers .splice(index, 1);
- this.pointerIds .splice(index, 1);
- this.downTargets.splice(index, 1);
- this.downTimes .splice(index, 1);
- this.holdTimers .splice(index, 1);
- },
-
- recordPointer: function (pointer) {
- var index = this.mouse? 0: indexOf(this.pointerIds, getPointerId(pointer));
-
- if (index === -1) { return; }
-
- this.pointers[index] = pointer;
- },
-
- collectEventTargets: function (pointer, event, eventTarget, eventType) {
- var pointerIndex = this.mouse? 0 : indexOf(this.pointerIds, getPointerId(pointer));
-
- // do not fire a tap event if the pointer was moved before being lifted
- if (eventType === 'tap' && (this.pointerWasMoved
- // or if the pointerup target is different to the pointerdown target
- || !(this.downTargets[pointerIndex] && this.downTargets[pointerIndex] === eventTarget))) {
- return;
- }
-
- var targets = [],
- elements = [],
- element = eventTarget;
-
- function collectSelectors (interactable, selector, context) {
- var els = ie8MatchesSelector
- ? context.querySelectorAll(selector)
- : undefined;
-
- if (interactable._iEvents[eventType]
- && isElement(element)
- && inContext(interactable, element)
- && !testIgnore(interactable, element, eventTarget)
- && testAllow(interactable, element, eventTarget)
- && matchesSelector(element, selector, els)) {
-
- targets.push(interactable);
- elements.push(element);
- }
- }
-
- while (element) {
- if (interact.isSet(element) && interact(element)._iEvents[eventType]) {
- targets.push(interact(element));
- elements.push(element);
- }
-
- interactables.forEachSelector(collectSelectors);
-
- element = parentElement(element);
- }
-
- // create the tap event even if there are no listeners so that
- // doubletap can still be created and fired
- if (targets.length || eventType === 'tap') {
- this.firePointers(pointer, event, eventTarget, targets, elements, eventType);
- }
- },
-
- firePointers: function (pointer, event, eventTarget, targets, elements, eventType) {
- var pointerIndex = this.mouse? 0 : indexOf(this.pointerIds, getPointerId(pointer)),
- pointerEvent = {},
- i,
- // for tap events
- interval, createNewDoubleTap;
-
- // if it's a doubletap then the event properties would have been
- // copied from the tap event and provided as the pointer argument
- if (eventType === 'doubletap') {
- pointerEvent = pointer;
- }
- else {
- pointerExtend(pointerEvent, event);
- if (event !== pointer) {
- pointerExtend(pointerEvent, pointer);
- }
-
- pointerEvent.preventDefault = preventOriginalDefault;
- pointerEvent.stopPropagation = InteractEvent.prototype.stopPropagation;
- pointerEvent.stopImmediatePropagation = InteractEvent.prototype.stopImmediatePropagation;
- pointerEvent.interaction = this;
-
- pointerEvent.timeStamp = new Date().getTime();
- pointerEvent.originalEvent = event;
- pointerEvent.originalPointer = pointer;
- pointerEvent.type = eventType;
- pointerEvent.pointerId = getPointerId(pointer);
- pointerEvent.pointerType = this.mouse? 'mouse' : !supportsPointerEvent? 'touch'
- : isString(pointer.pointerType)
- ? pointer.pointerType
- : [,,'touch', 'pen', 'mouse'][pointer.pointerType];
- }
-
- if (eventType === 'tap') {
- pointerEvent.dt = pointerEvent.timeStamp - this.downTimes[pointerIndex];
-
- interval = pointerEvent.timeStamp - this.tapTime;
- createNewDoubleTap = !!(this.prevTap && this.prevTap.type !== 'doubletap'
- && this.prevTap.target === pointerEvent.target
- && interval < 500);
-
- pointerEvent.double = createNewDoubleTap;
-
- this.tapTime = pointerEvent.timeStamp;
- }
-
- for (i = 0; i < targets.length; i++) {
- pointerEvent.currentTarget = elements[i];
- pointerEvent.interactable = targets[i];
- targets[i].fire(pointerEvent);
-
- if (pointerEvent.immediatePropagationStopped
- ||(pointerEvent.propagationStopped && elements[i + 1] !== pointerEvent.currentTarget)) {
- break;
- }
- }
-
- if (createNewDoubleTap) {
- var doubleTap = {};
-
- extend(doubleTap, pointerEvent);
-
- doubleTap.dt = interval;
- doubleTap.type = 'doubletap';
-
- this.collectEventTargets(doubleTap, event, eventTarget, 'doubletap');
-
- this.prevTap = doubleTap;
- }
- else if (eventType === 'tap') {
- this.prevTap = pointerEvent;
- }
- },
-
- validateSelector: function (pointer, event, matches, matchElements) {
- for (var i = 0, len = matches.length; i < len; i++) {
- var match = matches[i],
- matchElement = matchElements[i],
- action = validateAction(match.getAction(pointer, event, this, matchElement), match);
-
- if (action && withinInteractionLimit(match, matchElement, action)) {
- this.target = match;
- this.element = matchElement;
-
- return action;
- }
- }
- },
-
- setSnapping: function (pageCoords, status) {
- var snap = this.target.options[this.prepared.name].snap,
- targets = [],
- target,
- page,
- i;
-
- status = status || this.snapStatus;
-
- if (status.useStatusXY) {
- page = { x: status.x, y: status.y };
- }
- else {
- var origin = getOriginXY(this.target, this.element);
-
- page = extend({}, pageCoords);
-
- page.x -= origin.x;
- page.y -= origin.y;
- }
-
- status.realX = page.x;
- status.realY = page.y;
-
- page.x = page.x - this.inertiaStatus.resumeDx;
- page.y = page.y - this.inertiaStatus.resumeDy;
-
- var len = snap.targets? snap.targets.length : 0;
-
- for (var relIndex = 0; relIndex < this.snapOffsets.length; relIndex++) {
- var relative = {
- x: page.x - this.snapOffsets[relIndex].x,
- y: page.y - this.snapOffsets[relIndex].y
- };
-
- for (i = 0; i < len; i++) {
- if (isFunction(snap.targets[i])) {
- target = snap.targets[i](relative.x, relative.y, this);
- }
- else {
- target = snap.targets[i];
- }
-
- if (!target) { continue; }
-
- targets.push({
- x: isNumber(target.x) ? (target.x + this.snapOffsets[relIndex].x) : relative.x,
- y: isNumber(target.y) ? (target.y + this.snapOffsets[relIndex].y) : relative.y,
-
- range: isNumber(target.range)? target.range: snap.range
- });
- }
- }
-
- var closest = {
- target: null,
- inRange: false,
- distance: 0,
- range: 0,
- dx: 0,
- dy: 0
- };
-
- for (i = 0, len = targets.length; i < len; i++) {
- target = targets[i];
-
- var range = target.range,
- dx = target.x - page.x,
- dy = target.y - page.y,
- distance = hypot(dx, dy),
- inRange = distance <= range;
-
- // Infinite targets count as being out of range
- // compared to non infinite ones that are in range
- if (range === Infinity && closest.inRange && closest.range !== Infinity) {
- inRange = false;
- }
-
- if (!closest.target || (inRange
- // is the closest target in range?
- ? (closest.inRange && range !== Infinity
- // the pointer is relatively deeper in this target
- ? distance / range < closest.distance / closest.range
- // this target has Infinite range and the closest doesn't
- : (range === Infinity && closest.range !== Infinity)
- // OR this target is closer that the previous closest
- || distance < closest.distance)
- // The other is not in range and the pointer is closer to this target
- : (!closest.inRange && distance < closest.distance))) {
-
- if (range === Infinity) {
- inRange = true;
- }
-
- closest.target = target;
- closest.distance = distance;
- closest.range = range;
- closest.inRange = inRange;
- closest.dx = dx;
- closest.dy = dy;
-
- status.range = range;
- }
- }
-
- var snapChanged;
-
- if (closest.target) {
- snapChanged = (status.snappedX !== closest.target.x || status.snappedY !== closest.target.y);
-
- status.snappedX = closest.target.x;
- status.snappedY = closest.target.y;
- }
- else {
- snapChanged = true;
-
- status.snappedX = NaN;
- status.snappedY = NaN;
- }
-
- status.dx = closest.dx;
- status.dy = closest.dy;
-
- status.changed = (snapChanged || (closest.inRange && !status.locked));
- status.locked = closest.inRange;
-
- return status;
- },
-
- setRestriction: function (pageCoords, status) {
- var target = this.target,
- restrict = target && target.options[this.prepared.name].restrict,
- restriction = restrict && restrict.restriction,
- page;
-
- if (!restriction) {
- return status;
- }
-
- status = status || this.restrictStatus;
-
- page = status.useStatusXY
- ? page = { x: status.x, y: status.y }
- : page = extend({}, pageCoords);
-
- if (status.snap && status.snap.locked) {
- page.x += status.snap.dx || 0;
- page.y += status.snap.dy || 0;
- }
-
- page.x -= this.inertiaStatus.resumeDx;
- page.y -= this.inertiaStatus.resumeDy;
-
- status.dx = 0;
- status.dy = 0;
- status.restricted = false;
-
- var rect, restrictedX, restrictedY;
-
- if (isString(restriction)) {
- if (restriction === 'parent') {
- restriction = parentElement(this.element);
- }
- else if (restriction === 'self') {
- restriction = target.getRect(this.element);
- }
- else {
- restriction = closest(this.element, restriction);
- }
-
- if (!restriction) { return status; }
- }
-
- if (isFunction(restriction)) {
- restriction = restriction(page.x, page.y, this.element);
- }
-
- if (isElement(restriction)) {
- restriction = getElementRect(restriction);
- }
-
- rect = restriction;
-
- if (!restriction) {
- restrictedX = page.x;
- restrictedY = page.y;
- }
- // object is assumed to have
- // x, y, width, height or
- // left, top, right, bottom
- else if ('x' in restriction && 'y' in restriction) {
- restrictedX = Math.max(Math.min(rect.x + rect.width - this.restrictOffset.right , page.x), rect.x + this.restrictOffset.left);
- restrictedY = Math.max(Math.min(rect.y + rect.height - this.restrictOffset.bottom, page.y), rect.y + this.restrictOffset.top );
- }
- else {
- restrictedX = Math.max(Math.min(rect.right - this.restrictOffset.right , page.x), rect.left + this.restrictOffset.left);
- restrictedY = Math.max(Math.min(rect.bottom - this.restrictOffset.bottom, page.y), rect.top + this.restrictOffset.top );
- }
-
- status.dx = restrictedX - page.x;
- status.dy = restrictedY - page.y;
-
- status.changed = status.restrictedX !== restrictedX || status.restrictedY !== restrictedY;
- status.restricted = !!(status.dx || status.dy);
-
- status.restrictedX = restrictedX;
- status.restrictedY = restrictedY;
-
- return status;
- },
-
- checkAndPreventDefault: function (event, interactable, element) {
- if (!(interactable = interactable || this.target)) { return; }
-
- var options = interactable.options,
- prevent = options.preventDefault;
-
- if (prevent === 'auto' && element && !/^(input|select|textarea)$/i.test(event.target.nodeName)) {
- // do not preventDefault on pointerdown if the prepared action is a drag
- // and dragging can only start from a certain direction - this allows
- // a touch to pan the viewport if a drag isn't in the right direction
- if (/down|start/i.test(event.type)
- && this.prepared.name === 'drag' && options.drag.axis !== 'xy') {
-
- return;
- }
-
- // with manualStart, only preventDefault while interacting
- if (options[this.prepared.name] && options[this.prepared.name].manualStart
- && !this.interacting()) {
- return;
- }
-
- event.preventDefault();
- return;
- }
-
- if (prevent === 'always') {
- event.preventDefault();
- return;
- }
- },
-
- calcInertia: function (status) {
- var inertiaOptions = this.target.options[this.prepared.name].inertia,
- lambda = inertiaOptions.resistance,
- inertiaDur = -Math.log(inertiaOptions.endSpeed / status.v0) / lambda;
-
- status.x0 = this.prevEvent.pageX;
- status.y0 = this.prevEvent.pageY;
- status.t0 = status.startEvent.timeStamp / 1000;
- status.sx = status.sy = 0;
-
- status.modifiedXe = status.xe = (status.vx0 - inertiaDur) / lambda;
- status.modifiedYe = status.ye = (status.vy0 - inertiaDur) / lambda;
- status.te = inertiaDur;
-
- status.lambda_v0 = lambda / status.v0;
- status.one_ve_v0 = 1 - inertiaOptions.endSpeed / status.v0;
- },
-
- autoScrollMove: function (pointer) {
- if (!(this.interacting()
- && checkAutoScroll(this.target, this.prepared.name))) {
- return;
- }
-
- if (this.inertiaStatus.active) {
- autoScroll.x = autoScroll.y = 0;
- return;
- }
-
- var top,
- right,
- bottom,
- left,
- options = this.target.options[this.prepared.name].autoScroll,
- container = options.container || getWindow(this.element);
-
- if (isWindow(container)) {
- left = pointer.clientX < autoScroll.margin;
- top = pointer.clientY < autoScroll.margin;
- right = pointer.clientX > container.innerWidth - autoScroll.margin;
- bottom = pointer.clientY > container.innerHeight - autoScroll.margin;
- }
- else {
- var rect = getElementClientRect(container);
-
- left = pointer.clientX < rect.left + autoScroll.margin;
- top = pointer.clientY < rect.top + autoScroll.margin;
- right = pointer.clientX > rect.right - autoScroll.margin;
- bottom = pointer.clientY > rect.bottom - autoScroll.margin;
- }
-
- autoScroll.x = (right ? 1: left? -1: 0);
- autoScroll.y = (bottom? 1: top? -1: 0);
-
- if (!autoScroll.isScrolling) {
- // set the autoScroll properties to those of the target
- autoScroll.margin = options.margin;
- autoScroll.speed = options.speed;
-
- autoScroll.start(this);
- }
- },
-
- _updateEventTargets: function (target, currentTarget) {
- this._eventTarget = target;
- this._curEventTarget = currentTarget;
- }
-
- };
-
- function getInteractionFromPointer (pointer, eventType, eventTarget) {
- var i = 0, len = interactions.length,
- mouseEvent = (/mouse/i.test(pointer.pointerType || eventType)
- // MSPointerEvent.MSPOINTER_TYPE_MOUSE
- || pointer.pointerType === 4),
- interaction;
-
- var id = getPointerId(pointer);
-
- // try to resume inertia with a new pointer
- if (/down|start/i.test(eventType)) {
- for (i = 0; i < len; i++) {
- interaction = interactions[i];
-
- var element = eventTarget;
-
- if (interaction.inertiaStatus.active && interaction.target.options[interaction.prepared.name].inertia.allowResume
- && (interaction.mouse === mouseEvent)) {
- while (element) {
- // if the element is the interaction element
- if (element === interaction.element) {
- return interaction;
- }
- element = parentElement(element);
- }
- }
- }
- }
-
- // if it's a mouse interaction
- if (mouseEvent || !(supportsTouch || supportsPointerEvent)) {
-
- // find a mouse interaction that's not in inertia phase
- for (i = 0; i < len; i++) {
- if (interactions[i].mouse && !interactions[i].inertiaStatus.active) {
- return interactions[i];
- }
- }
-
- // find any interaction specifically for mouse.
- // if the eventType is a mousedown, and inertia is active
- // ignore the interaction
- for (i = 0; i < len; i++) {
- if (interactions[i].mouse && !(/down/.test(eventType) && interactions[i].inertiaStatus.active)) {
- return interaction;
- }
- }
-
- // create a new interaction for mouse
- interaction = new Interaction();
- interaction.mouse = true;
-
- return interaction;
- }
-
- // get interaction that has this pointer
- for (i = 0; i < len; i++) {
- if (contains(interactions[i].pointerIds, id)) {
- return interactions[i];
- }
- }
-
- // at this stage, a pointerUp should not return an interaction
- if (/up|end|out/i.test(eventType)) {
- return null;
- }
-
- // get first idle interaction
- for (i = 0; i < len; i++) {
- interaction = interactions[i];
-
- if ((!interaction.prepared.name || (interaction.target.options.gesture.enabled))
- && !interaction.interacting()
- && !(!mouseEvent && interaction.mouse)) {
-
- return interaction;
- }
- }
-
- return new Interaction();
- }
-
- function doOnInteractions (method) {
- return (function (event) {
- var interaction,
- eventTarget = getActualElement(event.path
- ? event.path[0]
- : event.target),
- curEventTarget = getActualElement(event.currentTarget),
- i;
-
- if (supportsTouch && /touch/.test(event.type)) {
- prevTouchTime = new Date().getTime();
-
- for (i = 0; i < event.changedTouches.length; i++) {
- var pointer = event.changedTouches[i];
-
- interaction = getInteractionFromPointer(pointer, event.type, eventTarget);
-
- if (!interaction) { continue; }
-
- interaction._updateEventTargets(eventTarget, curEventTarget);
-
- interaction[method](pointer, event, eventTarget, curEventTarget);
- }
- }
- else {
- if (!supportsPointerEvent && /mouse/.test(event.type)) {
- // ignore mouse events while touch interactions are active
- for (i = 0; i < interactions.length; i++) {
- if (!interactions[i].mouse && interactions[i].pointerIsDown) {
- return;
- }
- }
-
- // try to ignore mouse events that are simulated by the browser
- // after a touch event
- if (new Date().getTime() - prevTouchTime < 500) {
- return;
- }
- }
-
- interaction = getInteractionFromPointer(event, event.type, eventTarget);
-
- if (!interaction) { return; }
-
- interaction._updateEventTargets(eventTarget, curEventTarget);
-
- interaction[method](event, event, eventTarget, curEventTarget);
- }
- });
- }
-
- function InteractEvent (interaction, event, action, phase, element, related) {
- var client,
- page,
- target = interaction.target,
- snapStatus = interaction.snapStatus,
- restrictStatus = interaction.restrictStatus,
- pointers = interaction.pointers,
- deltaSource = (target && target.options || defaultOptions).deltaSource,
- sourceX = deltaSource + 'X',
- sourceY = deltaSource + 'Y',
- options = target? target.options: defaultOptions,
- origin = getOriginXY(target, element),
- starting = phase === 'start',
- ending = phase === 'end',
- coords = starting? interaction.startCoords : interaction.curCoords;
-
- element = element || interaction.element;
-
- page = extend({}, coords.page);
- client = extend({}, coords.client);
-
- page.x -= origin.x;
- page.y -= origin.y;
-
- client.x -= origin.x;
- client.y -= origin.y;
-
- var relativePoints = options[action].snap && options[action].snap.relativePoints ;
-
- if (checkSnap(target, action) && !(starting && relativePoints && relativePoints.length)) {
- this.snap = {
- range : snapStatus.range,
- locked : snapStatus.locked,
- x : snapStatus.snappedX,
- y : snapStatus.snappedY,
- realX : snapStatus.realX,
- realY : snapStatus.realY,
- dx : snapStatus.dx,
- dy : snapStatus.dy
- };
-
- if (snapStatus.locked) {
- page.x += snapStatus.dx;
- page.y += snapStatus.dy;
- client.x += snapStatus.dx;
- client.y += snapStatus.dy;
- }
- }
-
- if (checkRestrict(target, action) && !(starting && options[action].restrict.elementRect) && restrictStatus.restricted) {
- page.x += restrictStatus.dx;
- page.y += restrictStatus.dy;
- client.x += restrictStatus.dx;
- client.y += restrictStatus.dy;
-
- this.restrict = {
- dx: restrictStatus.dx,
- dy: restrictStatus.dy
- };
- }
-
- this.pageX = page.x;
- this.pageY = page.y;
- this.clientX = client.x;
- this.clientY = client.y;
-
- this.x0 = interaction.startCoords.page.x - origin.x;
- this.y0 = interaction.startCoords.page.y - origin.y;
- this.clientX0 = interaction.startCoords.client.x - origin.x;
- this.clientY0 = interaction.startCoords.client.y - origin.y;
- this.ctrlKey = event.ctrlKey;
- this.altKey = event.altKey;
- this.shiftKey = event.shiftKey;
- this.metaKey = event.metaKey;
- this.button = event.button;
- this.buttons = event.buttons;
- this.target = element;
- this.t0 = interaction.downTimes[0];
- this.type = action + (phase || '');
-
- this.interaction = interaction;
- this.interactable = target;
-
- var inertiaStatus = interaction.inertiaStatus;
-
- if (inertiaStatus.active) {
- this.detail = 'inertia';
- }
-
- if (related) {
- this.relatedTarget = related;
- }
-
- // end event dx, dy is difference between start and end points
- if (ending) {
- if (deltaSource === 'client') {
- this.dx = client.x - interaction.startCoords.client.x;
- this.dy = client.y - interaction.startCoords.client.y;
- }
- else {
- this.dx = page.x - interaction.startCoords.page.x;
- this.dy = page.y - interaction.startCoords.page.y;
- }
- }
- else if (starting) {
- this.dx = 0;
- this.dy = 0;
- }
- // copy properties from previousmove if starting inertia
- else if (phase === 'inertiastart') {
- this.dx = interaction.prevEvent.dx;
- this.dy = interaction.prevEvent.dy;
- }
- else {
- if (deltaSource === 'client') {
- this.dx = client.x - interaction.prevEvent.clientX;
- this.dy = client.y - interaction.prevEvent.clientY;
- }
- else {
- this.dx = page.x - interaction.prevEvent.pageX;
- this.dy = page.y - interaction.prevEvent.pageY;
- }
- }
- if (interaction.prevEvent && interaction.prevEvent.detail === 'inertia'
- && !inertiaStatus.active
- && options[action].inertia && options[action].inertia.zeroResumeDelta) {
-
- inertiaStatus.resumeDx += this.dx;
- inertiaStatus.resumeDy += this.dy;
-
- this.dx = this.dy = 0;
- }
-
- if (action === 'resize' && interaction.resizeAxes) {
- if (options.resize.square) {
- if (interaction.resizeAxes === 'y') {
- this.dx = this.dy;
- }
- else {
- this.dy = this.dx;
- }
- this.axes = 'xy';
- }
- else {
- this.axes = interaction.resizeAxes;
-
- if (interaction.resizeAxes === 'x') {
- this.dy = 0;
- }
- else if (interaction.resizeAxes === 'y') {
- this.dx = 0;
- }
- }
- }
- else if (action === 'gesture') {
- this.touches = [pointers[0], pointers[1]];
-
- if (starting) {
- this.distance = touchDistance(pointers, deltaSource);
- this.box = touchBBox(pointers);
- this.scale = 1;
- this.ds = 0;
- this.angle = touchAngle(pointers, undefined, deltaSource);
- this.da = 0;
- }
- else if (ending || event instanceof InteractEvent) {
- this.distance = interaction.prevEvent.distance;
- this.box = interaction.prevEvent.box;
- this.scale = interaction.prevEvent.scale;
- this.ds = this.scale - 1;
- this.angle = interaction.prevEvent.angle;
- this.da = this.angle - interaction.gesture.startAngle;
- }
- else {
- this.distance = touchDistance(pointers, deltaSource);
- this.box = touchBBox(pointers);
- this.scale = this.distance / interaction.gesture.startDistance;
- this.angle = touchAngle(pointers, interaction.gesture.prevAngle, deltaSource);
-
- this.ds = this.scale - interaction.gesture.prevScale;
- this.da = this.angle - interaction.gesture.prevAngle;
- }
- }
-
- if (starting) {
- this.timeStamp = interaction.downTimes[0];
- this.dt = 0;
- this.duration = 0;
- this.speed = 0;
- this.velocityX = 0;
- this.velocityY = 0;
- }
- else if (phase === 'inertiastart') {
- this.timeStamp = interaction.prevEvent.timeStamp;
- this.dt = interaction.prevEvent.dt;
- this.duration = interaction.prevEvent.duration;
- this.speed = interaction.prevEvent.speed;
- this.velocityX = interaction.prevEvent.velocityX;
- this.velocityY = interaction.prevEvent.velocityY;
- }
- else {
- this.timeStamp = new Date().getTime();
- this.dt = this.timeStamp - interaction.prevEvent.timeStamp;
- this.duration = this.timeStamp - interaction.downTimes[0];
-
- if (event instanceof InteractEvent) {
- var dx = this[sourceX] - interaction.prevEvent[sourceX],
- dy = this[sourceY] - interaction.prevEvent[sourceY],
- dt = this.dt / 1000;
-
- this.speed = hypot(dx, dy) / dt;
- this.velocityX = dx / dt;
- this.velocityY = dy / dt;
- }
- // if normal move or end event, use previous user event coords
- else {
- // speed and velocity in pixels per second
- this.speed = interaction.pointerDelta[deltaSource].speed;
- this.velocityX = interaction.pointerDelta[deltaSource].vx;
- this.velocityY = interaction.pointerDelta[deltaSource].vy;
- }
- }
-
- if ((ending || phase === 'inertiastart')
- && interaction.prevEvent.speed > 600 && this.timeStamp - interaction.prevEvent.timeStamp < 150) {
-
- var angle = 180 * Math.atan2(interaction.prevEvent.velocityY, interaction.prevEvent.velocityX) / Math.PI,
- overlap = 22.5;
-
- if (angle < 0) {
- angle += 360;
- }
-
- var left = 135 - overlap <= angle && angle < 225 + overlap,
- up = 225 - overlap <= angle && angle < 315 + overlap,
-
- right = !left && (315 - overlap <= angle || angle < 45 + overlap),
- down = !up && 45 - overlap <= angle && angle < 135 + overlap;
-
- this.swipe = {
- up : up,
- down : down,
- left : left,
- right: right,
- angle: angle,
- speed: interaction.prevEvent.speed,
- velocity: {
- x: interaction.prevEvent.velocityX,
- y: interaction.prevEvent.velocityY
- }
- };
- }
- }
-
- InteractEvent.prototype = {
- preventDefault: blank,
- stopImmediatePropagation: function () {
- this.immediatePropagationStopped = this.propagationStopped = true;
- },
- stopPropagation: function () {
- this.propagationStopped = true;
- }
- };
-
- function preventOriginalDefault () {
- this.originalEvent.preventDefault();
- }
-
- function getActionCursor (action) {
- var cursor = '';
-
- if (action.name === 'drag') {
- cursor = actionCursors.drag;
- }
- if (action.name === 'resize') {
- if (action.axis) {
- cursor = actionCursors[action.name + action.axis];
- }
- else if (action.edges) {
- var cursorKey = 'resize',
- edgeNames = ['top', 'bottom', 'left', 'right'];
-
- for (var i = 0; i < 4; i++) {
- if (action.edges[edgeNames[i]]) {
- cursorKey += edgeNames[i];
- }
- }
-
- cursor = actionCursors[cursorKey];
- }
- }
-
- return cursor;
- }
-
- function checkResizeEdge (name, value, page, element, interactableElement, rect, margin) {
- // false, '', undefined, null
- if (!value) { return false; }
-
- // true value, use pointer coords and element rect
- if (value === true) {
- // if dimensions are negative, "switch" edges
- var width = isNumber(rect.width)? rect.width : rect.right - rect.left,
- height = isNumber(rect.height)? rect.height : rect.bottom - rect.top;
-
- if (width < 0) {
- if (name === 'left' ) { name = 'right'; }
- else if (name === 'right') { name = 'left' ; }
- }
- if (height < 0) {
- if (name === 'top' ) { name = 'bottom'; }
- else if (name === 'bottom') { name = 'top' ; }
- }
-
- if (name === 'left' ) { return page.x < ((width >= 0? rect.left: rect.right ) + margin); }
- if (name === 'top' ) { return page.y < ((height >= 0? rect.top : rect.bottom) + margin); }
-
- if (name === 'right' ) { return page.x > ((width >= 0? rect.right : rect.left) - margin); }
- if (name === 'bottom') { return page.y > ((height >= 0? rect.bottom: rect.top ) - margin); }
- }
-
- // the remaining checks require an element
- if (!isElement(element)) { return false; }
-
- return isElement(value)
- // the value is an element to use as a resize handle
- ? value === element
- // otherwise check if element matches value as selector
- : matchesUpTo(element, value, interactableElement);
- }
-
- function defaultActionChecker (pointer, interaction, element) {
- var rect = this.getRect(element),
- shouldResize = false,
- action = null,
- resizeAxes = null,
- resizeEdges,
- page = extend({}, interaction.curCoords.page),
- options = this.options;
-
- if (!rect) { return null; }
-
- if (actionIsEnabled.resize && options.resize.enabled) {
- var resizeOptions = options.resize;
-
- resizeEdges = {
- left: false, right: false, top: false, bottom: false
- };
-
- // if using resize.edges
- if (isObject(resizeOptions.edges)) {
- for (var edge in resizeEdges) {
- resizeEdges[edge] = checkResizeEdge(edge,
- resizeOptions.edges[edge],
- page,
- interaction._eventTarget,
- element,
- rect,
- resizeOptions.margin || margin);
- }
-
- resizeEdges.left = resizeEdges.left && !resizeEdges.right;
- resizeEdges.top = resizeEdges.top && !resizeEdges.bottom;
-
- shouldResize = resizeEdges.left || resizeEdges.right || resizeEdges.top || resizeEdges.bottom;
- }
- else {
- var right = options.resize.axis !== 'y' && page.x > (rect.right - margin),
- bottom = options.resize.axis !== 'x' && page.y > (rect.bottom - margin);
-
- shouldResize = right || bottom;
- resizeAxes = (right? 'x' : '') + (bottom? 'y' : '');
- }
- }
-
- action = shouldResize
- ? 'resize'
- : actionIsEnabled.drag && options.drag.enabled
- ? 'drag'
- : null;
-
- if (actionIsEnabled.gesture
- && interaction.pointerIds.length >=2
- && !(interaction.dragging || interaction.resizing)) {
- action = 'gesture';
- }
-
- if (action) {
- return {
- name: action,
- axis: resizeAxes,
- edges: resizeEdges
- };
- }
-
- return null;
- }
-
- // Check if action is enabled globally and the current target supports it
- // If so, return the validated action. Otherwise, return null
- function validateAction (action, interactable) {
- if (!isObject(action)) { return null; }
-
- var actionName = action.name,
- options = interactable.options;
-
- if (( (actionName === 'resize' && options.resize.enabled )
- || (actionName === 'drag' && options.drag.enabled )
- || (actionName === 'gesture' && options.gesture.enabled))
- && actionIsEnabled[actionName]) {
-
- if (actionName === 'resize' || actionName === 'resizeyx') {
- actionName = 'resizexy';
- }
-
- return action;
- }
- return null;
- }
-
- var listeners = {},
- interactionListeners = [
- 'dragStart', 'dragMove', 'resizeStart', 'resizeMove', 'gestureStart', 'gestureMove',
- 'pointerOver', 'pointerOut', 'pointerHover', 'selectorDown',
- 'pointerDown', 'pointerMove', 'pointerUp', 'pointerCancel', 'pointerEnd',
- 'addPointer', 'removePointer', 'recordPointer', 'autoScrollMove'
- ];
-
- for (var i = 0, len = interactionListeners.length; i < len; i++) {
- var name = interactionListeners[i];
-
- listeners[name] = doOnInteractions(name);
- }
-
- // bound to the interactable context when a DOM event
- // listener is added to a selector interactable
- function delegateListener (event, useCapture) {
- var fakeEvent = {},
- delegated = delegatedEvents[event.type],
- eventTarget = getActualElement(event.path
- ? event.path[0]
- : event.target),
- element = eventTarget;
-
- useCapture = useCapture? true: false;
-
- // duplicate the event so that currentTarget can be changed
- for (var prop in event) {
- fakeEvent[prop] = event[prop];
- }
-
- fakeEvent.originalEvent = event;
- fakeEvent.preventDefault = preventOriginalDefault;
-
- // climb up document tree looking for selector matches
- while (isElement(element)) {
- for (var i = 0; i < delegated.selectors.length; i++) {
- var selector = delegated.selectors[i],
- context = delegated.contexts[i];
-
- if (matchesSelector(element, selector)
- && nodeContains(context, eventTarget)
- && nodeContains(context, element)) {
-
- var listeners = delegated.listeners[i];
-
- fakeEvent.currentTarget = element;
-
- for (var j = 0; j < listeners.length; j++) {
- if (listeners[j][1] === useCapture) {
- listeners[j][0](fakeEvent);
- }
- }
- }
- }
-
- element = parentElement(element);
- }
- }
-
- function delegateUseCapture (event) {
- return delegateListener.call(this, event, true);
- }
-
- interactables.indexOfElement = function indexOfElement (element, context) {
- context = context || document;
-
- for (var i = 0; i < this.length; i++) {
- var interactable = this[i];
-
- if ((interactable.selector === element
- && (interactable._context === context))
- || (!interactable.selector && interactable._element === element)) {
-
- return i;
- }
- }
- return -1;
- };
-
- interactables.get = function interactableGet (element, options) {
- return this[this.indexOfElement(element, options && options.context)];
- };
-
- interactables.forEachSelector = function (callback) {
- for (var i = 0; i < this.length; i++) {
- var interactable = this[i];
-
- if (!interactable.selector) {
- continue;
- }
-
- var ret = callback(interactable, interactable.selector, interactable._context, i, this);
-
- if (ret !== undefined) {
- return ret;
- }
- }
- };
-
- /*\
- * interact
- [ method ]
- *
- * The methods of this variable can be used to set elements as
- * interactables and also to change various default settings.
- *
- * Calling it as a function and passing an element or a valid CSS selector
- * string returns an Interactable object which has various methods to
- * configure it.
- *
- - element (Element | string) The HTML or SVG Element to interact with or CSS selector
- = (object) An @Interactable
- *
- > Usage
- | interact(document.getElementById('draggable')).draggable(true);
- |
- | var rectables = interact('rect');
- | rectables
- | .gesturable(true)
- | .on('gesturemove', function (event) {
- | // something cool...
- | })
- | .autoScroll(true);
- \*/
- function interact (element, options) {
- return interactables.get(element, options) || new Interactable(element, options);
- }
-
- /*\
- * Interactable
- [ property ]
- **
- * Object type returned by @interact
- \*/
- function Interactable (element, options) {
- this._element = element;
- this._iEvents = this._iEvents || {};
-
- var _window;
-
- if (trySelector(element)) {
- this.selector = element;
-
- var context = options && options.context;
-
- _window = context? getWindow(context) : window;
-
- if (context && (_window.Node
- ? context instanceof _window.Node
- : (isElement(context) || context === _window.document))) {
-
- this._context = context;
- }
- }
- else {
- _window = getWindow(element);
-
- if (isElement(element, _window)) {
-
- if (supportsPointerEvent) {
- events.add(this._element, pEventTypes.down, listeners.pointerDown );
- events.add(this._element, pEventTypes.move, listeners.pointerHover);
- }
- else {
- events.add(this._element, 'mousedown' , listeners.pointerDown );
- events.add(this._element, 'mousemove' , listeners.pointerHover);
- events.add(this._element, 'touchstart', listeners.pointerDown );
- events.add(this._element, 'touchmove' , listeners.pointerHover);
- }
- }
- }
-
- this._doc = _window.document;
-
- if (!contains(documents, this._doc)) {
- listenToDocument(this._doc);
- }
-
- interactables.push(this);
-
- this.set(options);
- }
-
- Interactable.prototype = {
- setOnEvents: function (action, phases) {
- if (action === 'drop') {
- if (isFunction(phases.ondrop) ) { this.ondrop = phases.ondrop ; }
- if (isFunction(phases.ondropactivate) ) { this.ondropactivate = phases.ondropactivate ; }
- if (isFunction(phases.ondropdeactivate)) { this.ondropdeactivate = phases.ondropdeactivate; }
- if (isFunction(phases.ondragenter) ) { this.ondragenter = phases.ondragenter ; }
- if (isFunction(phases.ondragleave) ) { this.ondragleave = phases.ondragleave ; }
- if (isFunction(phases.ondropmove) ) { this.ondropmove = phases.ondropmove ; }
- }
- else {
- action = 'on' + action;
-
- if (isFunction(phases.onstart) ) { this[action + 'start' ] = phases.onstart ; }
- if (isFunction(phases.onmove) ) { this[action + 'move' ] = phases.onmove ; }
- if (isFunction(phases.onend) ) { this[action + 'end' ] = phases.onend ; }
- if (isFunction(phases.oninertiastart)) { this[action + 'inertiastart' ] = phases.oninertiastart ; }
- }
-
- return this;
- },
-
- /*\
- * Interactable.draggable
- [ method ]
- *
- * Gets or sets whether drag actions can be performed on the
- * Interactable
- *
- = (boolean) Indicates if this can be the target of drag events
- | var isDraggable = interact('ul li').draggable();
- * or
- - options (boolean | object) #optional true/false or An object with event listeners to be fired on drag events (object makes the Interactable draggable)
- = (object) This Interactable
- | interact(element).draggable({
- | onstart: function (event) {},
- | onmove : function (event) {},
- | onend : function (event) {},
- |
- | // the axis in which the first movement must be
- | // for the drag sequence to start
- | // 'xy' by default - any direction
- | axis: 'x' || 'y' || 'xy',
- |
- | // max number of drags that can happen concurrently
- | // with elements of this Interactable. Infinity by default
- | max: Infinity,
- |
- | // max number of drags that can target the same element+Interactable
- | // 1 by default
- | maxPerElement: 2
- | });
- \*/
- draggable: function (options) {
- if (isObject(options)) {
- this.options.drag.enabled = options.enabled === false? false: true;
- this.setPerAction('drag', options);
- this.setOnEvents('drag', options);
-
- if (/^x$|^y$|^xy$/.test(options.axis)) {
- this.options.drag.axis = options.axis;
- }
- else if (options.axis === null) {
- delete this.options.drag.axis;
- }
-
- return this;
- }
-
- if (isBool(options)) {
- this.options.drag.enabled = options;
-
- return this;
- }
-
- return this.options.drag;
- },
-
- setPerAction: function (action, options) {
- // for all the default per-action options
- for (var option in options) {
- // if this option exists for this action
- if (option in defaultOptions[action]) {
- // if the option in the options arg is an object value
- if (isObject(options[option])) {
- // duplicate the object
- this.options[action][option] = extend(this.options[action][option] || {}, options[option]);
-
- if (isObject(defaultOptions.perAction[option]) && 'enabled' in defaultOptions.perAction[option]) {
- this.options[action][option].enabled = options[option].enabled === false? false : true;
- }
- }
- else if (isBool(options[option]) && isObject(defaultOptions.perAction[option])) {
- this.options[action][option].enabled = options[option];
- }
- else if (options[option] !== undefined) {
- // or if it's not undefined, do a plain assignment
- this.options[action][option] = options[option];
- }
- }
- }
- },
-
- /*\
- * Interactable.dropzone
- [ method ]
- *
- * Returns or sets whether elements can be dropped onto this
- * Interactable to trigger drop events
- *
- * Dropzones can receive the following events:
- * - `dropactivate` and `dropdeactivate` when an acceptable drag starts and ends
- * - `dragenter` and `dragleave` when a draggable enters and leaves the dropzone
- * - `dragmove` when a draggable that has entered the dropzone is moved
- * - `drop` when a draggable is dropped into this dropzone
- *
- * Use the `accept` option to allow only elements that match the given CSS selector or element.
- *
- * Use the `overlap` option to set how drops are checked for. The allowed values are:
- * - `'pointer'`, the pointer must be over the dropzone (default)
- * - `'center'`, the draggable element's center must be over the dropzone
- * - a number from 0-1 which is the `(intersection area) / (draggable area)`.
- * e.g. `0.5` for drop to happen when half of the area of the
- * draggable is over the dropzone
- *
- - options (boolean | object | null) #optional The new value to be set.
- | interact('.drop').dropzone({
- | accept: '.can-drop' || document.getElementById('single-drop'),
- | overlap: 'pointer' || 'center' || zeroToOne
- | }
- = (boolean | object) The current setting or this Interactable
- \*/
- dropzone: function (options) {
- if (isObject(options)) {
- this.options.drop.enabled = options.enabled === false? false: true;
- this.setOnEvents('drop', options);
-
- if (/^(pointer|center)$/.test(options.overlap)) {
- this.options.drop.overlap = options.overlap;
- }
- else if (isNumber(options.overlap)) {
- this.options.drop.overlap = Math.max(Math.min(1, options.overlap), 0);
- }
- if ('accept' in options) {
- this.options.drop.accept = options.accept;
- }
- if ('checker' in options) {
- this.options.drop.checker = options.checker;
- }
-
- return this;
- }
-
- if (isBool(options)) {
- this.options.drop.enabled = options;
-
- return this;
- }
-
- return this.options.drop;
- },
-
- dropCheck: function (dragEvent, event, draggable, draggableElement, dropElement, rect) {
- var dropped = false;
-
- // if the dropzone has no rect (eg. display: none)
- // call the custom dropChecker or just return false
- if (!(rect = rect || this.getRect(dropElement))) {
- return (this.options.drop.checker
- ? this.options.drop.checker(dragEvent, event, dropped, this, dropElement, draggable, draggableElement)
- : false);
- }
-
- var dropOverlap = this.options.drop.overlap;
-
- if (dropOverlap === 'pointer') {
- var page = getPageXY(dragEvent),
- origin = getOriginXY(draggable, draggableElement),
- horizontal,
- vertical;
-
- page.x += origin.x;
- page.y += origin.y;
-
- horizontal = (page.x > rect.left) && (page.x < rect.right);
- vertical = (page.y > rect.top ) && (page.y < rect.bottom);
-
- dropped = horizontal && vertical;
- }
-
- var dragRect = draggable.getRect(draggableElement);
-
- if (dropOverlap === 'center') {
- var cx = dragRect.left + dragRect.width / 2,
- cy = dragRect.top + dragRect.height / 2;
-
- dropped = cx >= rect.left && cx <= rect.right && cy >= rect.top && cy <= rect.bottom;
- }
-
- if (isNumber(dropOverlap)) {
- var overlapArea = (Math.max(0, Math.min(rect.right , dragRect.right ) - Math.max(rect.left, dragRect.left))
- * Math.max(0, Math.min(rect.bottom, dragRect.bottom) - Math.max(rect.top , dragRect.top ))),
- overlapRatio = overlapArea / (dragRect.width * dragRect.height);
-
- dropped = overlapRatio >= dropOverlap;
- }
-
- if (this.options.drop.checker) {
- dropped = this.options.drop.checker(dragEvent, event, dropped, this, dropElement, draggable, draggableElement);
- }
-
- return dropped;
- },
-
- /*\
- * Interactable.dropChecker
- [ method ]
- *
- * DEPRECATED. Use interactable.dropzone({ checker: function... }) instead.
- *
- * Gets or sets the function used to check if a dragged element is
- * over this Interactable.
- *
- - checker (function) #optional The function that will be called when checking for a drop
- = (Function | Interactable) The checker function or this Interactable
- *
- * The checker function takes the following arguments:
- *
- - dragEvent (InteractEvent) The related dragmove or dragend event
- - event (TouchEvent | PointerEvent | MouseEvent) The user move/up/end Event related to the dragEvent
- - dropped (boolean) The value from the default drop checker
- - dropzone (Interactable) The dropzone interactable
- - dropElement (Element) The dropzone element
- - draggable (Interactable) The Interactable being dragged
- - draggableElement (Element) The actual element that's being dragged
- *
- > Usage:
- | interact(target)
- | .dropChecker(function(dragEvent, // related dragmove or dragend event
- | event, // TouchEvent/PointerEvent/MouseEvent
- | dropped, // bool result of the default checker
- | dropzone, // dropzone Interactable
- | dropElement, // dropzone elemnt
- | draggable, // draggable Interactable
- | draggableElement) {// draggable element
- |
- | return dropped && event.target.hasAttribute('allow-drop');
- | }
- \*/
- dropChecker: function (checker) {
- if (isFunction(checker)) {
- this.options.drop.checker = checker;
-
- return this;
- }
- if (checker === null) {
- delete this.options.getRect;
-
- return this;
- }
-
- return this.options.drop.checker;
- },
-
- /*\
- * Interactable.accept
- [ method ]
- *
- * Deprecated. add an `accept` property to the options object passed to
- * @Interactable.dropzone instead.
- *
- * Gets or sets the Element or CSS selector match that this
- * Interactable accepts if it is a dropzone.
- *
- - newValue (Element | string | null) #optional
- * If it is an Element, then only that element can be dropped into this dropzone.
- * If it is a string, the element being dragged must match it as a selector.
- * If it is null, the accept options is cleared - it accepts any element.
- *
- = (string | Element | null | Interactable) The current accept option if given `undefined` or this Interactable
- \*/
- accept: function (newValue) {
- if (isElement(newValue)) {
- this.options.drop.accept = newValue;
-
- return this;
- }
-
- // test if it is a valid CSS selector
- if (trySelector(newValue)) {
- this.options.drop.accept = newValue;
-
- return this;
- }
-
- if (newValue === null) {
- delete this.options.drop.accept;
-
- return this;
- }
-
- return this.options.drop.accept;
- },
-
- /*\
- * Interactable.resizable
- [ method ]
- *
- * Gets or sets whether resize actions can be performed on the
- * Interactable
- *
- = (boolean) Indicates if this can be the target of resize elements
- | var isResizeable = interact('input[type=text]').resizable();
- * or
- - options (boolean | object) #optional true/false or An object with event listeners to be fired on resize events (object makes the Interactable resizable)
- = (object) This Interactable
- | interact(element).resizable({
- | onstart: function (event) {},
- | onmove : function (event) {},
- | onend : function (event) {},
- |
- | edges: {
- | top : true, // Use pointer coords to check for resize.
- | left : false, // Disable resizing from left edge.
- | bottom: '.resize-s',// Resize if pointer target matches selector
- | right : handleEl // Resize if pointer target is the given Element
- | },
- |
- | // Width and height can be adjusted independently. When `true`, width and
- | // height are adjusted at a 1:1 ratio.
- | square: false,
- |
- | // Width and height can be adjusted independently. When `true`, width and
- | // height maintain the aspect ratio they had when resizing started.
- | preserveAspectRatio: false,
- |
- | // a value of 'none' will limit the resize rect to a minimum of 0x0
- | // 'negate' will allow the rect to have negative width/height
- | // 'reposition' will keep the width/height positive by swapping
- | // the top and bottom edges and/or swapping the left and right edges
- | invert: 'none' || 'negate' || 'reposition'
- |
- | // limit multiple resizes.
- | // See the explanation in the @Interactable.draggable example
- | max: Infinity,
- | maxPerElement: 1,
- | });
- \*/
- resizable: function (options) {
- if (isObject(options)) {
- this.options.resize.enabled = options.enabled === false? false: true;
- this.setPerAction('resize', options);
- this.setOnEvents('resize', options);
-
- if (/^x$|^y$|^xy$/.test(options.axis)) {
- this.options.resize.axis = options.axis;
- }
- else if (options.axis === null) {
- this.options.resize.axis = defaultOptions.resize.axis;
- }
-
- if (isBool(options.preserveAspectRatio)) {
- this.options.resize.preserveAspectRatio = options.preserveAspectRatio;
- }
- else if (isBool(options.square)) {
- this.options.resize.square = options.square;
- }
-
- return this;
- }
- if (isBool(options)) {
- this.options.resize.enabled = options;
-
- return this;
- }
- return this.options.resize;
- },
-
- /*\
- * Interactable.squareResize
- [ method ]
- *
- * Deprecated. Add a `square: true || false` property to @Interactable.resizable instead
- *
- * Gets or sets whether resizing is forced 1:1 aspect
- *
- = (boolean) Current setting
- *
- * or
- *
- - newValue (boolean) #optional
- = (object) this Interactable
- \*/
- squareResize: function (newValue) {
- if (isBool(newValue)) {
- this.options.resize.square = newValue;
-
- return this;
- }
-
- if (newValue === null) {
- delete this.options.resize.square;
-
- return this;
- }
-
- return this.options.resize.square;
- },
-
- /*\
- * Interactable.gesturable
- [ method ]
- *
- * Gets or sets whether multitouch gestures can be performed on the
- * Interactable's element
- *
- = (boolean) Indicates if this can be the target of gesture events
- | var isGestureable = interact(element).gesturable();
- * or
- - options (boolean | object) #optional true/false or An object with event listeners to be fired on gesture events (makes the Interactable gesturable)
- = (object) this Interactable
- | interact(element).gesturable({
- | onstart: function (event) {},
- | onmove : function (event) {},
- | onend : function (event) {},
- |
- | // limit multiple gestures.
- | // See the explanation in @Interactable.draggable example
- | max: Infinity,
- | maxPerElement: 1,
- | });
- \*/
- gesturable: function (options) {
- if (isObject(options)) {
- this.options.gesture.enabled = options.enabled === false? false: true;
- this.setPerAction('gesture', options);
- this.setOnEvents('gesture', options);
-
- return this;
- }
-
- if (isBool(options)) {
- this.options.gesture.enabled = options;
-
- return this;
- }
-
- return this.options.gesture;
- },
-
- /*\
- * Interactable.autoScroll
- [ method ]
- **
- * Deprecated. Add an `autoscroll` property to the options object
- * passed to @Interactable.draggable or @Interactable.resizable instead.
- *
- * Returns or sets whether dragging and resizing near the edges of the
- * window/container trigger autoScroll for this Interactable
- *
- = (object) Object with autoScroll properties
- *
- * or
- *
- - options (object | boolean) #optional
- * options can be:
- * - an object with margin, distance and interval properties,
- * - true or false to enable or disable autoScroll or
- = (Interactable) this Interactable
- \*/
- autoScroll: function (options) {
- if (isObject(options)) {
- options = extend({ actions: ['drag', 'resize']}, options);
- }
- else if (isBool(options)) {
- options = { actions: ['drag', 'resize'], enabled: options };
- }
-
- return this.setOptions('autoScroll', options);
- },
-
- /*\
- * Interactable.snap
- [ method ]
- **
- * Deprecated. Add a `snap` property to the options object passed
- * to @Interactable.draggable or @Interactable.resizable instead.
- *
- * Returns or sets if and how action coordinates are snapped. By
- * default, snapping is relative to the pointer coordinates. You can
- * change this by setting the
- * [`elementOrigin`](https://github.com/taye/interact.js/pull/72).
- **
- = (boolean | object) `false` if snap is disabled; object with snap properties if snap is enabled
- **
- * or
- **
- - options (object | boolean | null) #optional
- = (Interactable) this Interactable
- > Usage
- | interact(document.querySelector('#thing')).snap({
- | targets: [
- | // snap to this specific point
- | {
- | x: 100,
- | y: 100,
- | range: 25
- | },
- | // give this function the x and y page coords and snap to the object returned
- | function (x, y) {
- | return {
- | x: x,
- | y: (75 + 50 * Math.sin(x * 0.04)),
- | range: 40
- | };
- | },
- | // create a function that snaps to a grid
- | interact.createSnapGrid({
- | x: 50,
- | y: 50,
- | range: 10, // optional
- | offset: { x: 5, y: 10 } // optional
- | })
- | ],
- | // do not snap during normal movement.
- | // Instead, trigger only one snapped move event
- | // immediately before the end event.
- | endOnly: true,
- |
- | relativePoints: [
- | { x: 0, y: 0 }, // snap relative to the top left of the element
- | { x: 1, y: 1 }, // and also to the bottom right
- | ],
- |
- | // offset the snap target coordinates
- | // can be an object with x/y or 'startCoords'
- | offset: { x: 50, y: 50 }
- | }
- | });
- \*/
- snap: function (options) {
- var ret = this.setOptions('snap', options);
-
- if (ret === this) { return this; }
-
- return ret.drag;
- },
-
- setOptions: function (option, options) {
- var actions = options && isArray(options.actions)
- ? options.actions
- : ['drag'];
-
- var i;
-
- if (isObject(options) || isBool(options)) {
- for (i = 0; i < actions.length; i++) {
- var action = /resize/.test(actions[i])? 'resize' : actions[i];
-
- if (!isObject(this.options[action])) { continue; }
-
- var thisOption = this.options[action][option];
-
- if (isObject(options)) {
- extend(thisOption, options);
- thisOption.enabled = options.enabled === false? false: true;
-
- if (option === 'snap') {
- if (thisOption.mode === 'grid') {
- thisOption.targets = [
- interact.createSnapGrid(extend({
- offset: thisOption.gridOffset || { x: 0, y: 0 }
- }, thisOption.grid || {}))
- ];
- }
- else if (thisOption.mode === 'anchor') {
- thisOption.targets = thisOption.anchors;
- }
- else if (thisOption.mode === 'path') {
- thisOption.targets = thisOption.paths;
- }
-
- if ('elementOrigin' in options) {
- thisOption.relativePoints = [options.elementOrigin];
- }
- }
- }
- else if (isBool(options)) {
- thisOption.enabled = options;
- }
- }
-
- return this;
- }
-
- var ret = {},
- allActions = ['drag', 'resize', 'gesture'];
-
- for (i = 0; i < allActions.length; i++) {
- if (option in defaultOptions[allActions[i]]) {
- ret[allActions[i]] = this.options[allActions[i]][option];
- }
- }
-
- return ret;
- },
-
-
- /*\
- * Interactable.inertia
- [ method ]
- **
- * Deprecated. Add an `inertia` property to the options object passed
- * to @Interactable.draggable or @Interactable.resizable instead.
- *
- * Returns or sets if and how events continue to run after the pointer is released
- **
- = (boolean | object) `false` if inertia is disabled; `object` with inertia properties if inertia is enabled
- **
- * or
- **
- - options (object | boolean | null) #optional
- = (Interactable) this Interactable
- > Usage
- | // enable and use default settings
- | interact(element).inertia(true);
- |
- | // enable and use custom settings
- | interact(element).inertia({
- | // value greater than 0
- | // high values slow the object down more quickly
- | resistance : 16,
- |
- | // the minimum launch speed (pixels per second) that results in inertia start
- | minSpeed : 200,
- |
- | // inertia will stop when the object slows down to this speed
- | endSpeed : 20,
- |
- | // boolean; should actions be resumed when the pointer goes down during inertia
- | allowResume : true,
- |
- | // boolean; should the jump when resuming from inertia be ignored in event.dx/dy
- | zeroResumeDelta: false,
- |
- | // if snap/restrict are set to be endOnly and inertia is enabled, releasing
- | // the pointer without triggering inertia will animate from the release
- | // point to the snaped/restricted point in the given amount of time (ms)
- | smoothEndDuration: 300,
- |
- | // an array of action types that can have inertia (no gesture)
- | actions : ['drag', 'resize']
- | });
- |
- | // reset custom settings and use all defaults
- | interact(element).inertia(null);
- \*/
- inertia: function (options) {
- var ret = this.setOptions('inertia', options);
-
- if (ret === this) { return this; }
-
- return ret.drag;
- },
-
- getAction: function (pointer, event, interaction, element) {
- var action = this.defaultActionChecker(pointer, interaction, element);
-
- if (this.options.actionChecker) {
- return this.options.actionChecker(pointer, event, action, this, element, interaction);
- }
-
- return action;
- },
-
- defaultActionChecker: defaultActionChecker,
-
- /*\
- * Interactable.actionChecker
- [ method ]
- *
- * Gets or sets the function used to check action to be performed on
- * pointerDown
- *
- - checker (function | null) #optional A function which takes a pointer event, defaultAction string, interactable, element and interaction as parameters and returns an object with name property 'drag' 'resize' or 'gesture' and optionally an `edges` object with boolean 'top', 'left', 'bottom' and right props.
- = (Function | Interactable) The checker function or this Interactable
- *
- | interact('.resize-drag')
- | .resizable(true)
- | .draggable(true)
- | .actionChecker(function (pointer, event, action, interactable, element, interaction) {
- |
- | if (interact.matchesSelector(event.target, '.drag-handle') {
- | // force drag with handle target
- | action.name = drag;
- | }
- | else {
- | // resize from the top and right edges
- | action.name = 'resize';
- | action.edges = { top: true, right: true };
- | }
- |
- | return action;
- | });
- \*/
- actionChecker: function (checker) {
- if (isFunction(checker)) {
- this.options.actionChecker = checker;
-
- return this;
- }
-
- if (checker === null) {
- delete this.options.actionChecker;
-
- return this;
- }
-
- return this.options.actionChecker;
- },
-
- /*\
- * Interactable.getRect
- [ method ]
- *
- * The default function to get an Interactables bounding rect. Can be
- * overridden using @Interactable.rectChecker.
- *
- - element (Element) #optional The element to measure.
- = (object) The object's bounding rectangle.
- o {
- o top : 0,
- o left : 0,
- o bottom: 0,
- o right : 0,
- o width : 0,
- o height: 0
- o }
- \*/
- getRect: function rectCheck (element) {
- element = element || this._element;
-
- if (this.selector && !(isElement(element))) {
- element = this._context.querySelector(this.selector);
- }
-
- return getElementRect(element);
- },
-
- /*\
- * Interactable.rectChecker
- [ method ]
- *
- * Returns or sets the function used to calculate the interactable's
- * element's rectangle
- *
- - checker (function) #optional A function which returns this Interactable's bounding rectangle. See @Interactable.getRect
- = (function | object) The checker function or this Interactable
- \*/
- rectChecker: function (checker) {
- if (isFunction(checker)) {
- this.getRect = checker;
-
- return this;
- }
-
- if (checker === null) {
- delete this.options.getRect;
-
- return this;
- }
-
- return this.getRect;
- },
-
- /*\
- * Interactable.styleCursor
- [ method ]
- *
- * Returns or sets whether the action that would be performed when the
- * mouse on the element are checked on `mousemove` so that the cursor
- * may be styled appropriately
- *
- - newValue (boolean) #optional
- = (boolean | Interactable) The current setting or this Interactable
- \*/
- styleCursor: function (newValue) {
- if (isBool(newValue)) {
- this.options.styleCursor = newValue;
-
- return this;
- }
-
- if (newValue === null) {
- delete this.options.styleCursor;
-
- return this;
- }
-
- return this.options.styleCursor;
- },
-
- /*\
- * Interactable.preventDefault
- [ method ]
- *
- * Returns or sets whether to prevent the browser's default behaviour
- * in response to pointer events. Can be set to:
- * - `'always'` to always prevent
- * - `'never'` to never prevent
- * - `'auto'` to let interact.js try to determine what would be best
- *
- - newValue (string) #optional `true`, `false` or `'auto'`
- = (string | Interactable) The current setting or this Interactable
- \*/
- preventDefault: function (newValue) {
- if (/^(always|never|auto)$/.test(newValue)) {
- this.options.preventDefault = newValue;
- return this;
- }
-
- if (isBool(newValue)) {
- this.options.preventDefault = newValue? 'always' : 'never';
- return this;
- }
-
- return this.options.preventDefault;
- },
-
- /*\
- * Interactable.origin
- [ method ]
- *
- * Gets or sets the origin of the Interactable's element. The x and y
- * of the origin will be subtracted from action event coordinates.
- *
- - origin (object | string) #optional An object eg. { x: 0, y: 0 } or string 'parent', 'self' or any CSS selector
- * OR
- - origin (Element) #optional An HTML or SVG Element whose rect will be used
- **
- = (object) The current origin or this Interactable
- \*/
- origin: function (newValue) {
- if (trySelector(newValue)) {
- this.options.origin = newValue;
- return this;
- }
- else if (isObject(newValue)) {
- this.options.origin = newValue;
- return this;
- }
-
- return this.options.origin;
- },
-
- /*\
- * Interactable.deltaSource
- [ method ]
- *
- * Returns or sets the mouse coordinate types used to calculate the
- * movement of the pointer.
- *
- - newValue (string) #optional Use 'client' if you will be scrolling while interacting; Use 'page' if you want autoScroll to work
- = (string | object) The current deltaSource or this Interactable
- \*/
- deltaSource: function (newValue) {
- if (newValue === 'page' || newValue === 'client') {
- this.options.deltaSource = newValue;
-
- return this;
- }
-
- return this.options.deltaSource;
- },
-
- /*\
- * Interactable.restrict
- [ method ]
- **
- * Deprecated. Add a `restrict` property to the options object passed to
- * @Interactable.draggable, @Interactable.resizable or @Interactable.gesturable instead.
- *
- * Returns or sets the rectangles within which actions on this
- * interactable (after snap calculations) are restricted. By default,
- * restricting is relative to the pointer coordinates. You can change
- * this by setting the
- * [`elementRect`](https://github.com/taye/interact.js/pull/72).
- **
- - options (object) #optional an object with keys drag, resize, and/or gesture whose values are rects, Elements, CSS selectors, or 'parent' or 'self'
- = (object) The current restrictions object or this Interactable
- **
- | interact(element).restrict({
- | // the rect will be `interact.getElementRect(element.parentNode)`
- | drag: element.parentNode,
- |
- | // x and y are relative to the the interactable's origin
- | resize: { x: 100, y: 100, width: 200, height: 200 }
- | })
- |
- | interact('.draggable').restrict({
- | // the rect will be the selected element's parent
- | drag: 'parent',
- |
- | // do not restrict during normal movement.
- | // Instead, trigger only one restricted move event
- | // immediately before the end event.
- | endOnly: true,
- |
- | // https://github.com/taye/interact.js/pull/72#issue-41813493
- | elementRect: { top: 0, left: 0, bottom: 1, right: 1 }
- | });
- \*/
- restrict: function (options) {
- if (!isObject(options)) {
- return this.setOptions('restrict', options);
- }
-
- var actions = ['drag', 'resize', 'gesture'],
- ret;
-
- for (var i = 0; i < actions.length; i++) {
- var action = actions[i];
-
- if (action in options) {
- var perAction = extend({
- actions: [action],
- restriction: options[action]
- }, options);
-
- ret = this.setOptions('restrict', perAction);
- }
- }
-
- return ret;
- },
-
- /*\
- * Interactable.context
- [ method ]
- *
- * Gets the selector context Node of the Interactable. The default is `window.document`.
- *
- = (Node) The context Node of this Interactable
- **
- \*/
- context: function () {
- return this._context;
- },
-
- _context: document,
-
- /*\
- * Interactable.ignoreFrom
- [ method ]
- *
- * If the target of the `mousedown`, `pointerdown` or `touchstart`
- * event or any of it's parents match the given CSS selector or
- * Element, no drag/resize/gesture is started.
- *
- - newValue (string | Element | null) #optional a CSS selector string, an Element or `null` to not ignore any elements
- = (string | Element | object) The current ignoreFrom value or this Interactable
- **
- | interact(element, { ignoreFrom: document.getElementById('no-action') });
- | // or
- | interact(element).ignoreFrom('input, textarea, a');
- \*/
- ignoreFrom: function (newValue) {
- if (trySelector(newValue)) { // CSS selector to match event.target
- this.options.ignoreFrom = newValue;
- return this;
- }
-
- if (isElement(newValue)) { // specific element
- this.options.ignoreFrom = newValue;
- return this;
- }
-
- return this.options.ignoreFrom;
- },
-
- /*\
- * Interactable.allowFrom
- [ method ]
- *
- * A drag/resize/gesture is started only If the target of the
- * `mousedown`, `pointerdown` or `touchstart` event or any of it's
- * parents match the given CSS selector or Element.
- *
- - newValue (string | Element | null) #optional a CSS selector string, an Element or `null` to allow from any element
- = (string | Element | object) The current allowFrom value or this Interactable
- **
- | interact(element, { allowFrom: document.getElementById('drag-handle') });
- | // or
- | interact(element).allowFrom('.handle');
- \*/
- allowFrom: function (newValue) {
- if (trySelector(newValue)) { // CSS selector to match event.target
- this.options.allowFrom = newValue;
- return this;
- }
-
- if (isElement(newValue)) { // specific element
- this.options.allowFrom = newValue;
- return this;
- }
-
- return this.options.allowFrom;
- },
-
- /*\
- * Interactable.element
- [ method ]
- *
- * If this is not a selector Interactable, it returns the element this
- * interactable represents
- *
- = (Element) HTML / SVG Element
- \*/
- element: function () {
- return this._element;
- },
-
- /*\
- * Interactable.fire
- [ method ]
- *
- * Calls listeners for the given InteractEvent type bound globally
- * and directly to this Interactable
- *
- - iEvent (InteractEvent) The InteractEvent object to be fired on this Interactable
- = (Interactable) this Interactable
- \*/
- fire: function (iEvent) {
- if (!(iEvent && iEvent.type) || !contains(eventTypes, iEvent.type)) {
- return this;
- }
-
- var listeners,
- i,
- len,
- onEvent = 'on' + iEvent.type,
- funcName = '';
-
- // Interactable#on() listeners
- if (iEvent.type in this._iEvents) {
- listeners = this._iEvents[iEvent.type];
-
- for (i = 0, len = listeners.length; i < len && !iEvent.immediatePropagationStopped; i++) {
- funcName = listeners[i].name;
- listeners[i](iEvent);
- }
- }
-
- // interactable.onevent listener
- if (isFunction(this[onEvent])) {
- funcName = this[onEvent].name;
- this[onEvent](iEvent);
- }
-
- // interact.on() listeners
- if (iEvent.type in globalEvents && (listeners = globalEvents[iEvent.type])) {
-
- for (i = 0, len = listeners.length; i < len && !iEvent.immediatePropagationStopped; i++) {
- funcName = listeners[i].name;
- listeners[i](iEvent);
- }
- }
-
- return this;
- },
-
- /*\
- * Interactable.on
- [ method ]
- *
- * Binds a listener for an InteractEvent or DOM event.
- *
- - eventType (string | array | object) The types of events to listen for
- - listener (function) The function to be called on the given event(s)
- - useCapture (boolean) #optional useCapture flag for addEventListener
- = (object) This Interactable
- \*/
- on: function (eventType, listener, useCapture) {
- var i;
-
- if (isString(eventType) && eventType.search(' ') !== -1) {
- eventType = eventType.trim().split(/ +/);
- }
-
- if (isArray(eventType)) {
- for (i = 0; i < eventType.length; i++) {
- this.on(eventType[i], listener, useCapture);
- }
-
- return this;
- }
-
- if (isObject(eventType)) {
- for (var prop in eventType) {
- this.on(prop, eventType[prop], listener);
- }
-
- return this;
- }
-
- if (eventType === 'wheel') {
- eventType = wheelEvent;
- }
-
- // convert to boolean
- useCapture = useCapture? true: false;
-
- if (contains(eventTypes, eventType)) {
- // if this type of event was never bound to this Interactable
- if (!(eventType in this._iEvents)) {
- this._iEvents[eventType] = [listener];
- }
- else {
- this._iEvents[eventType].push(listener);
- }
- }
- // delegated event for selector
- else if (this.selector) {
- if (!delegatedEvents[eventType]) {
- delegatedEvents[eventType] = {
- selectors: [],
- contexts : [],
- listeners: []
- };
-
- // add delegate listener functions
- for (i = 0; i < documents.length; i++) {
- events.add(documents[i], eventType, delegateListener);
- events.add(documents[i], eventType, delegateUseCapture, true);
- }
- }
-
- var delegated = delegatedEvents[eventType],
- index;
-
- for (index = delegated.selectors.length - 1; index >= 0; index--) {
- if (delegated.selectors[index] === this.selector
- && delegated.contexts[index] === this._context) {
- break;
- }
- }
-
- if (index === -1) {
- index = delegated.selectors.length;
-
- delegated.selectors.push(this.selector);
- delegated.contexts .push(this._context);
- delegated.listeners.push([]);
- }
-
- // keep listener and useCapture flag
- delegated.listeners[index].push([listener, useCapture]);
- }
- else {
- events.add(this._element, eventType, listener, useCapture);
- }
-
- return this;
- },
-
- /*\
- * Interactable.off
- [ method ]
- *
- * Removes an InteractEvent or DOM event listener
- *
- - eventType (string | array | object) The types of events that were listened for
- - listener (function) The listener function to be removed
- - useCapture (boolean) #optional useCapture flag for removeEventListener
- = (object) This Interactable
- \*/
- off: function (eventType, listener, useCapture) {
- var i;
-
- if (isString(eventType) && eventType.search(' ') !== -1) {
- eventType = eventType.trim().split(/ +/);
- }
-
- if (isArray(eventType)) {
- for (i = 0; i < eventType.length; i++) {
- this.off(eventType[i], listener, useCapture);
- }
-
- return this;
- }
-
- if (isObject(eventType)) {
- for (var prop in eventType) {
- this.off(prop, eventType[prop], listener);
- }
-
- return this;
- }
-
- var eventList,
- index = -1;
-
- // convert to boolean
- useCapture = useCapture? true: false;
-
- if (eventType === 'wheel') {
- eventType = wheelEvent;
- }
-
- // if it is an action event type
- if (contains(eventTypes, eventType)) {
- eventList = this._iEvents[eventType];
-
- if (eventList && (index = indexOf(eventList, listener)) !== -1) {
- this._iEvents[eventType].splice(index, 1);
- }
- }
- // delegated event
- else if (this.selector) {
- var delegated = delegatedEvents[eventType],
- matchFound = false;
-
- if (!delegated) { return this; }
-
- // count from last index of delegated to 0
- for (index = delegated.selectors.length - 1; index >= 0; index--) {
- // look for matching selector and context Node
- if (delegated.selectors[index] === this.selector
- && delegated.contexts[index] === this._context) {
-
- var listeners = delegated.listeners[index];
-
- // each item of the listeners array is an array: [function, useCaptureFlag]
- for (i = listeners.length - 1; i >= 0; i--) {
- var fn = listeners[i][0],
- useCap = listeners[i][1];
-
- // check if the listener functions and useCapture flags match
- if (fn === listener && useCap === useCapture) {
- // remove the listener from the array of listeners
- listeners.splice(i, 1);
-
- // if all listeners for this interactable have been removed
- // remove the interactable from the delegated arrays
- if (!listeners.length) {
- delegated.selectors.splice(index, 1);
- delegated.contexts .splice(index, 1);
- delegated.listeners.splice(index, 1);
-
- // remove delegate function from context
- events.remove(this._context, eventType, delegateListener);
- events.remove(this._context, eventType, delegateUseCapture, true);
-
- // remove the arrays if they are empty
- if (!delegated.selectors.length) {
- delegatedEvents[eventType] = null;
- }
- }
-
- // only remove one listener
- matchFound = true;
- break;
- }
- }
-
- if (matchFound) { break; }
- }
- }
- }
- // remove listener from this Interatable's element
- else {
- events.remove(this._element, eventType, listener, useCapture);
- }
-
- return this;
- },
-
- /*\
- * Interactable.set
- [ method ]
- *
- * Reset the options of this Interactable
- - options (object) The new settings to apply
- = (object) This Interactable
- \*/
- set: function (options) {
- if (!isObject(options)) {
- options = {};
- }
-
- this.options = extend({}, defaultOptions.base);
-
- var i,
- actions = ['drag', 'drop', 'resize', 'gesture'],
- methods = ['draggable', 'dropzone', 'resizable', 'gesturable'],
- perActions = extend(extend({}, defaultOptions.perAction), options[action] || {});
-
- for (i = 0; i < actions.length; i++) {
- var action = actions[i];
-
- this.options[action] = extend({}, defaultOptions[action]);
-
- this.setPerAction(action, perActions);
-
- this[methods[i]](options[action]);
- }
-
- var settings = [
- 'accept', 'actionChecker', 'allowFrom', 'deltaSource',
- 'dropChecker', 'ignoreFrom', 'origin', 'preventDefault',
- 'rectChecker', 'styleCursor'
- ];
-
- for (i = 0, len = settings.length; i < len; i++) {
- var setting = settings[i];
-
- this.options[setting] = defaultOptions.base[setting];
-
- if (setting in options) {
- this[setting](options[setting]);
- }
- }
-
- return this;
- },
-
- /*\
- * Interactable.unset
- [ method ]
- *
- * Remove this interactable from the list of interactables and remove
- * it's drag, drop, resize and gesture capabilities
- *
- = (object) @interact
- \*/
- unset: function () {
- events.remove(this._element, 'all');
-
- if (!isString(this.selector)) {
- events.remove(this, 'all');
- if (this.options.styleCursor) {
- this._element.style.cursor = '';
- }
- }
- else {
- // remove delegated events
- for (var type in delegatedEvents) {
- var delegated = delegatedEvents[type];
-
- for (var i = 0; i < delegated.selectors.length; i++) {
- if (delegated.selectors[i] === this.selector
- && delegated.contexts[i] === this._context) {
-
- delegated.selectors.splice(i, 1);
- delegated.contexts .splice(i, 1);
- delegated.listeners.splice(i, 1);
-
- // remove the arrays if they are empty
- if (!delegated.selectors.length) {
- delegatedEvents[type] = null;
- }
- }
-
- events.remove(this._context, type, delegateListener);
- events.remove(this._context, type, delegateUseCapture, true);
-
- break;
- }
- }
- }
-
- this.dropzone(false);
-
- interactables.splice(indexOf(interactables, this), 1);
-
- return interact;
- }
- };
-
- function warnOnce (method, message) {
- var warned = false;
-
- return function () {
- if (!warned) {
- window.console.warn(message);
- warned = true;
- }
-
- return method.apply(this, arguments);
- };
- }
-
- Interactable.prototype.snap = warnOnce(Interactable.prototype.snap,
- 'Interactable#snap is deprecated. See the new documentation for snapping at http://interactjs.io/docs/snapping');
- Interactable.prototype.restrict = warnOnce(Interactable.prototype.restrict,
- 'Interactable#restrict is deprecated. See the new documentation for resticting at http://interactjs.io/docs/restriction');
- Interactable.prototype.inertia = warnOnce(Interactable.prototype.inertia,
- 'Interactable#inertia is deprecated. See the new documentation for inertia at http://interactjs.io/docs/inertia');
- Interactable.prototype.autoScroll = warnOnce(Interactable.prototype.autoScroll,
- 'Interactable#autoScroll is deprecated. See the new documentation for autoScroll at http://interactjs.io/docs/#autoscroll');
- Interactable.prototype.squareResize = warnOnce(Interactable.prototype.squareResize,
- 'Interactable#squareResize is deprecated. See http://interactjs.io/docs/#resize-square');
-
- Interactable.prototype.accept = warnOnce(Interactable.prototype.accept,
- 'Interactable#accept is deprecated. use Interactable#dropzone({ accept: target }) instead');
- Interactable.prototype.dropChecker = warnOnce(Interactable.prototype.dropChecker,
- 'Interactable#dropChecker is deprecated. use Interactable#dropzone({ dropChecker: checkerFunction }) instead');
- Interactable.prototype.context = warnOnce(Interactable.prototype.context,
- 'Interactable#context as a method is deprecated. It will soon be a DOM Node instead');
-
- /*\
- * interact.isSet
- [ method ]
- *
- * Check if an element has been set
- - element (Element) The Element being searched for
- = (boolean) Indicates if the element or CSS selector was previously passed to interact
- \*/
- interact.isSet = function(element, options) {
- return interactables.indexOfElement(element, options && options.context) !== -1;
- };
-
- /*\
- * interact.on
- [ method ]
- *
- * Adds a global listener for an InteractEvent or adds a DOM event to
- * `document`
- *
- - type (string | array | object) The types of events to listen for
- - listener (function) The function to be called on the given event(s)
- - useCapture (boolean) #optional useCapture flag for addEventListener
- = (object) interact
- \*/
- interact.on = function (type, listener, useCapture) {
- if (isString(type) && type.search(' ') !== -1) {
- type = type.trim().split(/ +/);
- }
-
- if (isArray(type)) {
- for (var i = 0; i < type.length; i++) {
- interact.on(type[i], listener, useCapture);
- }
-
- return interact;
- }
-
- if (isObject(type)) {
- for (var prop in type) {
- interact.on(prop, type[prop], listener);
- }
-
- return interact;
- }
-
- // if it is an InteractEvent type, add listener to globalEvents
- if (contains(eventTypes, type)) {
- // if this type of event was never bound
- if (!globalEvents[type]) {
- globalEvents[type] = [listener];
- }
- else {
- globalEvents[type].push(listener);
- }
- }
- // If non InteractEvent type, addEventListener to document
- else {
- events.add(document, type, listener, useCapture);
- }
-
- return interact;
- };
-
- /*\
- * interact.off
- [ method ]
- *
- * Removes a global InteractEvent listener or DOM event from `document`
- *
- - type (string | array | object) The types of events that were listened for
- - listener (function) The listener function to be removed
- - useCapture (boolean) #optional useCapture flag for removeEventListener
- = (object) interact
- \*/
- interact.off = function (type, listener, useCapture) {
- if (isString(type) && type.search(' ') !== -1) {
- type = type.trim().split(/ +/);
- }
-
- if (isArray(type)) {
- for (var i = 0; i < type.length; i++) {
- interact.off(type[i], listener, useCapture);
- }
-
- return interact;
- }
-
- if (isObject(type)) {
- for (var prop in type) {
- interact.off(prop, type[prop], listener);
- }
-
- return interact;
- }
-
- if (!contains(eventTypes, type)) {
- events.remove(document, type, listener, useCapture);
- }
- else {
- var index;
-
- if (type in globalEvents
- && (index = indexOf(globalEvents[type], listener)) !== -1) {
- globalEvents[type].splice(index, 1);
- }
- }
-
- return interact;
- };
-
- /*\
- * interact.enableDragging
- [ method ]
- *
- * Deprecated.
- *
- * Returns or sets whether dragging is enabled for any Interactables
- *
- - newValue (boolean) #optional `true` to allow the action; `false` to disable action for all Interactables
- = (boolean | object) The current setting or interact
- \*/
- interact.enableDragging = warnOnce(function (newValue) {
- if (newValue !== null && newValue !== undefined) {
- actionIsEnabled.drag = newValue;
-
- return interact;
- }
- return actionIsEnabled.drag;
- }, 'interact.enableDragging is deprecated and will soon be removed.');
-
- /*\
- * interact.enableResizing
- [ method ]
- *
- * Deprecated.
- *
- * Returns or sets whether resizing is enabled for any Interactables
- *
- - newValue (boolean) #optional `true` to allow the action; `false` to disable action for all Interactables
- = (boolean | object) The current setting or interact
- \*/
- interact.enableResizing = warnOnce(function (newValue) {
- if (newValue !== null && newValue !== undefined) {
- actionIsEnabled.resize = newValue;
-
- return interact;
- }
- return actionIsEnabled.resize;
- }, 'interact.enableResizing is deprecated and will soon be removed.');
-
- /*\
- * interact.enableGesturing
- [ method ]
- *
- * Deprecated.
- *
- * Returns or sets whether gesturing is enabled for any Interactables
- *
- - newValue (boolean) #optional `true` to allow the action; `false` to disable action for all Interactables
- = (boolean | object) The current setting or interact
- \*/
- interact.enableGesturing = warnOnce(function (newValue) {
- if (newValue !== null && newValue !== undefined) {
- actionIsEnabled.gesture = newValue;
-
- return interact;
- }
- return actionIsEnabled.gesture;
- }, 'interact.enableGesturing is deprecated and will soon be removed.');
-
- interact.eventTypes = eventTypes;
-
- /*\
- * interact.debug
- [ method ]
- *
- * Returns debugging data
- = (object) An object with properties that outline the current state and expose internal functions and variables
- \*/
- interact.debug = function () {
- var interaction = interactions[0] || new Interaction();
-
- return {
- interactions : interactions,
- target : interaction.target,
- dragging : interaction.dragging,
- resizing : interaction.resizing,
- gesturing : interaction.gesturing,
- prepared : interaction.prepared,
- matches : interaction.matches,
- matchElements : interaction.matchElements,
-
- prevCoords : interaction.prevCoords,
- startCoords : interaction.startCoords,
-
- pointerIds : interaction.pointerIds,
- pointers : interaction.pointers,
- addPointer : listeners.addPointer,
- removePointer : listeners.removePointer,
- recordPointer : listeners.recordPointer,
-
- snap : interaction.snapStatus,
- restrict : interaction.restrictStatus,
- inertia : interaction.inertiaStatus,
-
- downTime : interaction.downTimes[0],
- downEvent : interaction.downEvent,
- downPointer : interaction.downPointer,
- prevEvent : interaction.prevEvent,
-
- Interactable : Interactable,
- interactables : interactables,
- pointerIsDown : interaction.pointerIsDown,
- defaultOptions : defaultOptions,
- defaultActionChecker : defaultActionChecker,
-
- actionCursors : actionCursors,
- dragMove : listeners.dragMove,
- resizeMove : listeners.resizeMove,
- gestureMove : listeners.gestureMove,
- pointerUp : listeners.pointerUp,
- pointerDown : listeners.pointerDown,
- pointerMove : listeners.pointerMove,
- pointerHover : listeners.pointerHover,
-
- eventTypes : eventTypes,
-
- events : events,
- globalEvents : globalEvents,
- delegatedEvents : delegatedEvents,
-
- prefixedPropREs : prefixedPropREs
- };
- };
-
- // expose the functions used to calculate multi-touch properties
- interact.getPointerAverage = pointerAverage;
- interact.getTouchBBox = touchBBox;
- interact.getTouchDistance = touchDistance;
- interact.getTouchAngle = touchAngle;
-
- interact.getElementRect = getElementRect;
- interact.getElementClientRect = getElementClientRect;
- interact.matchesSelector = matchesSelector;
- interact.closest = closest;
-
- /*\
- * interact.margin
- [ method ]
- *
- * Deprecated. Use `interact(target).resizable({ margin: number });` instead.
- * Returns or sets the margin for autocheck resizing used in
- * @Interactable.getAction. That is the distance from the bottom and right
- * edges of an element clicking in which will start resizing
- *
- - newValue (number) #optional
- = (number | interact) The current margin value or interact
- \*/
- interact.margin = warnOnce(function (newvalue) {
- if (isNumber(newvalue)) {
- margin = newvalue;
-
- return interact;
- }
- return margin;
- },
- 'interact.margin is deprecated. Use interact(target).resizable({ margin: number }); instead.') ;
-
- /*\
- * interact.supportsTouch
- [ method ]
- *
- = (boolean) Whether or not the browser supports touch input
- \*/
- interact.supportsTouch = function () {
- return supportsTouch;
- };
-
- /*\
- * interact.supportsPointerEvent
- [ method ]
- *
- = (boolean) Whether or not the browser supports PointerEvents
- \*/
- interact.supportsPointerEvent = function () {
- return supportsPointerEvent;
- };
-
- /*\
- * interact.stop
- [ method ]
- *
- * Cancels all interactions (end events are not fired)
- *
- - event (Event) An event on which to call preventDefault()
- = (object) interact
- \*/
- interact.stop = function (event) {
- for (var i = interactions.length - 1; i >= 0; i--) {
- interactions[i].stop(event);
- }
-
- return interact;
- };
-
- /*\
- * interact.dynamicDrop
- [ method ]
- *
- * Returns or sets whether the dimensions of dropzone elements are
- * calculated on every dragmove or only on dragstart for the default
- * dropChecker
- *
- - newValue (boolean) #optional True to check on each move. False to check only before start
- = (boolean | interact) The current setting or interact
- \*/
- interact.dynamicDrop = function (newValue) {
- if (isBool(newValue)) {
- //if (dragging && dynamicDrop !== newValue && !newValue) {
- //calcRects(dropzones);
- //}
-
- dynamicDrop = newValue;
-
- return interact;
- }
- return dynamicDrop;
- };
-
- /*\
- * interact.pointerMoveTolerance
- [ method ]
- * Returns or sets the distance the pointer must be moved before an action
- * sequence occurs. This also affects tolerance for tap events.
- *
- - newValue (number) #optional The movement from the start position must be greater than this value
- = (number | Interactable) The current setting or interact
- \*/
- interact.pointerMoveTolerance = function (newValue) {
- if (isNumber(newValue)) {
- pointerMoveTolerance = newValue;
-
- return this;
- }
-
- return pointerMoveTolerance;
- };
-
- /*\
- * interact.maxInteractions
- [ method ]
- **
- * Returns or sets the maximum number of concurrent interactions allowed.
- * By default only 1 interaction is allowed at a time (for backwards
- * compatibility). To allow multiple interactions on the same Interactables
- * and elements, you need to enable it in the draggable, resizable and
- * gesturable `'max'` and `'maxPerElement'` options.
- **
- - newValue (number) #optional Any number. newValue <= 0 means no interactions.
- \*/
- interact.maxInteractions = function (newValue) {
- if (isNumber(newValue)) {
- maxInteractions = newValue;
-
- return this;
- }
-
- return maxInteractions;
- };
-
- interact.createSnapGrid = function (grid) {
- return function (x, y) {
- var offsetX = 0,
- offsetY = 0;
-
- if (isObject(grid.offset)) {
- offsetX = grid.offset.x;
- offsetY = grid.offset.y;
- }
-
- var gridx = Math.round((x - offsetX) / grid.x),
- gridy = Math.round((y - offsetY) / grid.y),
-
- newX = gridx * grid.x + offsetX,
- newY = gridy * grid.y + offsetY;
-
- return {
- x: newX,
- y: newY,
- range: grid.range
- };
- };
- };
-
- function endAllInteractions (event) {
- for (var i = 0; i < interactions.length; i++) {
- interactions[i].pointerEnd(event, event);
- }
- }
-
- function listenToDocument (doc) {
- if (contains(documents, doc)) { return; }
-
- var win = doc.defaultView || doc.parentWindow;
-
- // add delegate event listener
- for (var eventType in delegatedEvents) {
- events.add(doc, eventType, delegateListener);
- events.add(doc, eventType, delegateUseCapture, true);
- }
-
- if (supportsPointerEvent) {
- if (PointerEvent === win.MSPointerEvent) {
- pEventTypes = {
- up: 'MSPointerUp', down: 'MSPointerDown', over: 'mouseover',
- out: 'mouseout', move: 'MSPointerMove', cancel: 'MSPointerCancel' };
- }
- else {
- pEventTypes = {
- up: 'pointerup', down: 'pointerdown', over: 'pointerover',
- out: 'pointerout', move: 'pointermove', cancel: 'pointercancel' };
- }
-
- events.add(doc, pEventTypes.down , listeners.selectorDown );
- events.add(doc, pEventTypes.move , listeners.pointerMove );
- events.add(doc, pEventTypes.over , listeners.pointerOver );
- events.add(doc, pEventTypes.out , listeners.pointerOut );
- events.add(doc, pEventTypes.up , listeners.pointerUp );
- events.add(doc, pEventTypes.cancel, listeners.pointerCancel);
-
- // autoscroll
- events.add(doc, pEventTypes.move, listeners.autoScrollMove);
- }
- else {
- events.add(doc, 'mousedown', listeners.selectorDown);
- events.add(doc, 'mousemove', listeners.pointerMove );
- events.add(doc, 'mouseup' , listeners.pointerUp );
- events.add(doc, 'mouseover', listeners.pointerOver );
- events.add(doc, 'mouseout' , listeners.pointerOut );
-
- events.add(doc, 'touchstart' , listeners.selectorDown );
- events.add(doc, 'touchmove' , listeners.pointerMove );
- events.add(doc, 'touchend' , listeners.pointerUp );
- events.add(doc, 'touchcancel', listeners.pointerCancel);
-
- // autoscroll
- events.add(doc, 'mousemove', listeners.autoScrollMove);
- events.add(doc, 'touchmove', listeners.autoScrollMove);
- }
-
- events.add(win, 'blur', endAllInteractions);
-
- try {
- if (win.frameElement) {
- var parentDoc = win.frameElement.ownerDocument,
- parentWindow = parentDoc.defaultView;
-
- events.add(parentDoc , 'mouseup' , listeners.pointerEnd);
- events.add(parentDoc , 'touchend' , listeners.pointerEnd);
- events.add(parentDoc , 'touchcancel' , listeners.pointerEnd);
- events.add(parentDoc , 'pointerup' , listeners.pointerEnd);
- events.add(parentDoc , 'MSPointerUp' , listeners.pointerEnd);
- events.add(parentWindow, 'blur' , endAllInteractions );
- }
- }
- catch (error) {
- interact.windowParentError = error;
- }
-
- // prevent native HTML5 drag on interact.js target elements
- events.add(doc, 'dragstart', function (event) {
- for (var i = 0; i < interactions.length; i++) {
- var interaction = interactions[i];
-
- if (interaction.element
- && (interaction.element === event.target
- || nodeContains(interaction.element, event.target))) {
-
- interaction.checkAndPreventDefault(event, interaction.target, interaction.element);
- return;
- }
- }
- });
-
- if (events.useAttachEvent) {
- // For IE's lack of Event#preventDefault
- events.add(doc, 'selectstart', function (event) {
- var interaction = interactions[0];
-
- if (interaction.currentAction()) {
- interaction.checkAndPreventDefault(event);
- }
- });
-
- // For IE's bad dblclick event sequence
- events.add(doc, 'dblclick', doOnInteractions('ie8Dblclick'));
- }
-
- documents.push(doc);
- }
-
- listenToDocument(document);
-
- function indexOf (array, target) {
- for (var i = 0, len = array.length; i < len; i++) {
- if (array[i] === target) {
- return i;
- }
- }
-
- return -1;
- }
-
- function contains (array, target) {
- return indexOf(array, target) !== -1;
- }
-
- function matchesSelector (element, selector, nodeList) {
- if (ie8MatchesSelector) {
- return ie8MatchesSelector(element, selector, nodeList);
- }
-
- // remove /deep/ from selectors if shadowDOM polyfill is used
- if (window !== realWindow) {
- selector = selector.replace(/\/deep\//g, ' ');
- }
-
- return element[prefixedMatchesSelector](selector);
- }
-
- function matchesUpTo (element, selector, limit) {
- while (isElement(element)) {
- if (matchesSelector(element, selector)) {
- return true;
- }
-
- element = parentElement(element);
-
- if (element === limit) {
- return matchesSelector(element, selector);
- }
- }
-
- return false;
- }
-
- // For IE8's lack of an Element#matchesSelector
- // taken from http://tanalin.com/en/blog/2012/12/matches-selector-ie8/ and modified
- if (!(prefixedMatchesSelector in Element.prototype) || !isFunction(Element.prototype[prefixedMatchesSelector])) {
- ie8MatchesSelector = function (element, selector, elems) {
- elems = elems || element.parentNode.querySelectorAll(selector);
-
- for (var i = 0, len = elems.length; i < len; i++) {
- if (elems[i] === element) {
- return true;
- }
- }
-
- return false;
- };
- }
-
- // requestAnimationFrame polyfill
- (function() {
- var lastTime = 0,
- vendors = ['ms', 'moz', 'webkit', 'o'];
-
- for(var x = 0; x < vendors.length && !realWindow.requestAnimationFrame; ++x) {
- reqFrame = realWindow[vendors[x]+'RequestAnimationFrame'];
- cancelFrame = realWindow[vendors[x]+'CancelAnimationFrame'] || realWindow[vendors[x]+'CancelRequestAnimationFrame'];
- }
-
- if (!reqFrame) {
- reqFrame = function(callback) {
- var currTime = new Date().getTime(),
- timeToCall = Math.max(0, 16 - (currTime - lastTime)),
- id = setTimeout(function() { callback(currTime + timeToCall); },
- timeToCall);
- lastTime = currTime + timeToCall;
- return id;
- };
- }
-
- if (!cancelFrame) {
- cancelFrame = function(id) {
- clearTimeout(id);
- };
- }
- }());
-
- /* global exports: true, module, define */
-
- // http://documentcloud.github.io/underscore/docs/underscore.html#section-11
- if (typeof exports !== 'undefined') {
- if (typeof module !== 'undefined' && module.exports) {
- exports = module.exports = interact;
- }
- exports.interact = interact;
- }
- // AMD
- else if (typeof define === 'function' && define.amd) {
- define('interact', function() {
- return interact;
- });
- }
- else {
- realWindow.interact = interact;
- }
-
-} (typeof window === 'undefined'? undefined : window));
diff --git a/js/playfield.js b/js/playfield.js
deleted file mode 100644
index e6a6103..0000000
--- a/js/playfield.js
+++ /dev/null
@@ -1,319 +0,0 @@
-//jshint browser:true
-//jshint esversion:6
-//jshint latedef:nofunc
-/* globals interact:true */
-
-let deckNum, deckJSON, cardCount, deckWidth, deckHeight,
- piles = {'deck': [], discard: []};
-
-document.title = "Playfield|" + window.location.pathname.split('/')[2];
-
-interact.dynamicDrop(true);
-
-window.addEventListener('load', () => {
- fetch("deck.json")
- .then(data => data.json())
- .then(json => {
- deckJSON = json;
- deckNum = Object.keys(deckJSON.CustomDeck)[0];
- piles.deck = deckJSON.DeckIDs.map(c => c - deckNum * 100);
- cardCount = piles.deck.length;
- shuffle(piles.deck);
- deckWidth = deckJSON.CustomDeck[deckNum].NumWidth;
- deckHeight = deckJSON.CustomDeck[deckNum].NumHeight;
- });
-
- window.addEventListener("contextmenu", event => event.preventDefault());
-});
-
-let cardInteract = interact('.card', {ignoreFrom: '.in-list'})
- .draggable({
- restrict: {
- restriction: "parent",
- endOnly: true,
- elementRect: { top: 0, left: 0, bottom: 1, right: 1 }
- },
-
- snap: {
- targets: [() => {
- // TODO: maybe change to dropzone?
- let pos = document.body.getBoundingClientRect(),
- hand = document.getElementById('hand'),
- style = window.getComputedStyle(hand),
- handHeight = parseInt(style.getPropertyValue("height"));
- return {y: pos.bottom,
- range: handHeight/2};
- }],
- relativePoints: [{x: 0.5 , y: 1}]
- },
-
- onmove: event => {
- dragMoveListener(event);
- // raise to top
- event.target.parentElement.removeChild(event.target);
- document.querySelector("#card-container").appendChild(event.target);
- }
- })
- .on('doubletap', event => {
- let scale = parseFloat(event.target.getAttribute('data-scale')) === 2 ? 1 : 2;
- event.target.setAttribute('data-scale', scale);
- dragMoveListener({target: event.target, dx: 0, dy: 0});
- })
- .on('tap', event => {
- let card = event.target;
- let cardNum = parseInt(card.getAttribute('data-num'));
- if (card.dataset.flipped === "true") {
- card.dataset.flipped = false;
- let style = window.getComputedStyle(card);
- card.style.backgroundPositionX =
- -(cardNum % deckWidth) * parseInt(style.getPropertyValue("width")) + "px";
- card.style.backgroundPositionY =
- -Math.floor(cardNum/deckWidth) * parseInt(style.getPropertyValue("height")) + "px";
- return;
- }
-
- let cardData = deckJSON.ContainedObjects.find(c => c.CardID === (cardNum + deckNum * 100));
- let backNum = cardData.States && cardData.States["2"].CardID;
- if (backNum) {
- card.dataset.flipped = true;
- let style = window.getComputedStyle(card);
- card.style.backgroundPositionX =
- -(backNum % deckWidth) * parseInt(style.getPropertyValue("width")) + "px";
- card.style.backgroundPositionY =
- -Math.floor(backNum/deckWidth) * parseInt(style.getPropertyValue("height")) + "px";
- }
- });
-
-interact('.card.in-list')
- .draggable({
- restrict: {
- restriction: "parent",
- endOnly: false,
- elementRect: { top: 0, left: 0, bottom: 1, right: 1 }
- },
- autoScroll: false,
-
- onmove: dragMoveListener,
- onend: event => {
- // reset transform and data attributes
- event.target.style.webkitTransform = event.target.style.transform = '';
-
- event.target.removeAttribute('data-x');
- event.target.removeAttribute('data-y');
- }
- })
- .dropzone({
- accept: '.card',
- ondropmove: event => {
- let target = event.target;
- // TODO: there must be a better way to do this
- let relCursorPos = (event.dragEvent.pageX -
- target.getBoundingClientRect().left) /
- parseInt(window.getComputedStyle(target).width);
-
- let oldOffsetLeft = event.relatedTarget.offsetLeft;
- let oldOffsetTop = event.relatedTarget.offsetTop;
-
- // move the object in the DOM
- if (relCursorPos < 0.5 || relCursorPos === Infinity) {
- target.parentElement.insertBefore(event.relatedTarget, target);
- }
- else {
- target.parentElement.insertBefore(event.relatedTarget, target.nextSibling);
- }
-
- // update position
- dragMoveListener({target: event.relatedTarget,
- dx: oldOffsetLeft - event.relatedTarget.offsetLeft,
- dy: oldOffsetTop - event.relatedTarget.offsetTop});
-
- // rebuild source pile
- piles[target.getAttribute('data-pile')] =
- Array.from(target.parentElement.children).map(
- c => c.getAttribute('data-num'));
- }
- })
- .on('tap', event => {
- let target = event.target;
- console.log(`Drawing ${target.getAttribute('data-num')} from ${target.getAttribute('data-pile')}`);
-
- let listDiv = target.parentElement;
- // re-parent
- document.querySelector("#card-container").appendChild(target);
-
- // rebuild source pile
- piles[target.getAttribute('data-pile')] =
- Array.from(listDiv.children).map(c => c.getAttribute('data-num'));
-
- // remove list class
- target.classList.remove('in-list');
-
- // fix position
- target.style.position = "fixed";
-
- });
-
-interact('.card-pile')
- .dropzone({
- accept: '.card:not(.in-pile)',
- ondrop: event => {
- // TODO: fix possible duped zeros
- let pileName = event.target.getAttribute('data-pile');
- let cardNum = event.relatedTarget.getAttribute('data-num');
- if (event.dragEvent.shiftKey) {
- console.log(`Adding ${cardNum} bottom of to ${pileName}`);
- piles[pileName].unshift(cardNum);
- }
- else {
- console.log(`Adding ${cardNum} to ${pileName}`);
- piles[pileName].push(cardNum);
- }
-
- // remove from DOM
- event.relatedTarget.parentElement.removeChild(event.relatedTarget);
-
- // update deck text
- event.target.innerHTML = `${pileName.toUpperCase()} ${piles[pileName].length}/${cardCount}`;
- }
- })
- .draggable({manualStart: true})
- .on('move', event => {
- let interaction = event.interaction;
- let pileName = event.target.getAttribute('data-pile');
- let pile = piles[pileName];
-
- // if the pointer was moved while being held down
- // and an interaction hasn't started yet
- // and there are cards in the pile
- if (interaction.pointerIsDown &&
- !interaction.interacting() &&
- pile.length > 0) {
- // draw a new card
- let newCard = makeCard(pile.pop());
- newCard.style.position = "fixed";
- newCard.style.top = event.pageY;
- newCard.style.left = event.pageX;
- // insert the card to the page
- document.querySelector("#card-container").appendChild(newCard);
-
- // update deck text
- event.target.innerHTML = `${pileName.toUpperCase()} ${pile.length}/${cardCount}`;
-
- // start a drag interaction targeting the clone
- interaction.start({name: 'drag'}, cardInteract, newCard);
- }
- })
- .on('hold', event => {
- let pile = piles[event.target.getAttribute('data-pile')];
- let searchBox = document.createElement('input');
- let container = document.createElement('div');
- let cardList = document.createElement('div');
- searchBox.setAttribute('type', 'search');
- searchBox.setAttribute('placeholder', 'Filter');
- searchBox.addEventListener('input', event => {
- let input = event.target.value;
- Array.from(cardList.children).forEach(card => {
- let cardNum = parseInt(card.getAttribute('data-num'));
- let cardData = deckJSON.ContainedObjects.find(c => c.CardID === (cardNum + deckNum * 100));
- card.style.display =
- (cardData.Nickname.toLowerCase().includes(input.toLowerCase()) ||
- cardData.Description.toLowerCase().includes(input.toLowerCase())) ?
- "": "none";
- });
- });
- container.appendChild(searchBox);
-
- pile.forEach(cardNum => {
- let newCard = makeCard(cardNum);
- newCard.classList.add('in-list');
- newCard.setAttribute('data-pile', event.target.getAttribute('data-pile'));
- cardList.appendChild(newCard);
- });
- container.appendChild(cardList);
- showModal(container);
- })
- .on('tap', event => {
- shuffle(piles[event.target.getAttribute('data-pile')]);
- event.target.classList.add("shake");
- // reset animation so it can be played again
- event.target.onanimationend = e => {
- event.target.classList.remove("shake");
- };
- });
-
-function makeCard(cardNum) {
- // draw a new card
- let card = document.createElement('div');
- card.className = "card";
-
- // temporary add so getComputedStyle works on Chrome
- document.body.appendChild(card);
- let style = window.getComputedStyle(card);
- card.setAttribute('data-num', cardNum);
- card.style.backgroundPositionX =
- -(cardNum % deckWidth) * parseInt(style.getPropertyValue("width")) + "px";
- card.style.backgroundPositionY =
- -Math.floor(cardNum/deckWidth) * parseInt(style.getPropertyValue("height")) + "px";
- let faceURI = encodeURI(deckJSON.CustomDeck[deckNum].FaceURL);
- card.style.backgroundImage = `url("${faceURI}")`;
- card.style.backgroundSize = `${deckWidth * 100}% ${deckHeight * 100}%`;
- document.body.removeChild(card);
-
- return card;
-}
-
-function showModal(content) {
- let shade = document.createElement('div');
- shade.id = "shade";
- shade.className = "modal";
- shade.addEventListener('click', hideModal);
- document.body.appendChild(shade);
-
- let modal = document.createElement('div');
- modal.id = "modal-content";
- modal.className = "modal";
- modal.appendChild(content);
- document.body.appendChild(modal);
-}
-
-function hideModal() {
- document.querySelectorAll('.modal').forEach(
- e => e.parentElement.removeChild(e));
-}
-
-// Fisher-Yates shuffle from https://bost.ocks.org/mike/shuffle/
-function shuffle(array) {
- let m = array.length, t, i;
-
- // While there remain elements to shuffle…
- while (m) {
- // Pick a remaining element…
- i = Math.floor(Math.random() * m--);
-
- // And swap it with the current element.
- t = array[m];
- array[m] = array[i];
- array[i] = t;
- }
-
- return array;
-}
-
-function dragMoveListener (event) {
- let target = event.target;
-
- // keep the dragged position in the data-x/data-y attribute
- let x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
- let y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
- let scale = (parseFloat(target.getAttribute('data-scale')) || 1);
-
- // translate and scale the element
- target.style.webkitTransform =
- target.style.transform =
- 'translate(' + x + 'px, ' + y + 'px) scale(' + scale + ')';
-
- // update the posiion attributes
- target.setAttribute('data-x', x);
- target.setAttribute('data-y', y);
-}
-
diff --git a/package-lock.json b/package-lock.json
index c2f872e..5278a4e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4,6 +4,927 @@
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/core": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.2.tgz",
+ "integrity": "sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw==",
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.2.2",
+ "@babel/helpers": "^7.2.0",
+ "@babel/parser": "^7.2.2",
+ "@babel/template": "^7.2.2",
+ "@babel/traverse": "^7.2.2",
+ "@babel/types": "^7.2.2",
+ "convert-source-map": "^1.1.0",
+ "debug": "^4.1.0",
+ "json5": "^2.1.0",
+ "lodash": "^4.17.10",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "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==",
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "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=="
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.2.2.tgz",
+ "integrity": "sha512-I4o675J/iS8k+P38dvJ3IBGqObLXyQLTxtrR4u9cSUJOURvafeEWb/pFMOTwtNrmq73mJzyF6ueTbO1BtN0Zeg==",
+ "requires": {
+ "@babel/types": "^7.2.2",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.10",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz",
+ "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==",
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz",
+ "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==",
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-builder-react-jsx": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz",
+ "integrity": "sha512-ebJ2JM6NAKW0fQEqN8hOLxK84RbRz9OkUhGS/Xd5u56ejMfVbayJ4+LykERZCOUM6faa6Fp3SZNX3fcT16MKHw==",
+ "requires": {
+ "@babel/types": "^7.0.0",
+ "esutils": "^2.0.0"
+ }
+ },
+ "@babel/helper-call-delegate": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz",
+ "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==",
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.0.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-define-map": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz",
+ "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==",
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/types": "^7.0.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz",
+ "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==",
+ "requires": {
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@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==",
+ "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==",
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz",
+ "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==",
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz",
+ "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==",
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
+ "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.2.2.tgz",
+ "integrity": "sha512-YRD7I6Wsv+IHuTPkAmAS4HhY0dkPobgLftHp0cRGZSdrRvmZY8rFvae/GVu3bD00qscuvK3WPHB3YdNpBXUqrA==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-simple-access": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "@babel/template": "^7.2.2",
+ "@babel/types": "^7.2.2",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz",
+ "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
+ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA=="
+ },
+ "@babel/helper-regex": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz",
+ "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==",
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz",
+ "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-wrap-function": "^7.1.0",
+ "@babel/template": "^7.1.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.2.3.tgz",
+ "integrity": "sha512-GyieIznGUfPXPWu0yLS6U55Mz67AZD9cUk0BfirOWlPrXlBcan9Gz+vHGz+cPfuoweZSnPzPIm67VtQM0OWZbA==",
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.0.0",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/traverse": "^7.2.3",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz",
+ "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==",
+ "requires": {
+ "@babel/template": "^7.1.0",
+ "@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==",
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz",
+ "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==",
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/template": "^7.1.0",
+ "@babel/traverse": "^7.1.0",
+ "@babel/types": "^7.2.0"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.2.0.tgz",
+ "integrity": "sha512-Fr07N+ea0dMcMN8nFpuK6dUIT7/ivt9yKQdEEnjVS83tG2pHwPi03gYmk/tyuwONnZ+sY+GFFPlWGgCtW1hF9A==",
+ "requires": {
+ "@babel/template": "^7.1.2",
+ "@babel/traverse": "^7.1.5",
+ "@babel/types": "^7.2.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
+ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.3.tgz",
+ "integrity": "sha512-0LyEcVlfCoFmci8mXx8A5oIkpkOgyo8dRHtxBnK9RRBwxO2+JZPNsqtVEZQ7mJFPxnXF9lfmU24mHOPI0qnlkA=="
+ },
+ "@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz",
+ "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.1.0",
+ "@babel/plugin-syntax-async-generators": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-json-strings": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz",
+ "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-json-strings": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz",
+ "integrity": "sha512-1L5mWLSvR76XYUQJXkd/EEQgjq8HHRP6lQuZTTg0VA4tTGPpGemmCdAfQIz1rzEuWAm+ecP8PyyEm30jC1eQCg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz",
+ "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz",
+ "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.2.0"
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz",
+ "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-flow": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz",
+ "integrity": "sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz",
+ "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz",
+ "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz",
+ "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz",
+ "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz",
+ "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz",
+ "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz",
+ "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz",
+ "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "lodash": "^4.17.10"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz",
+ "integrity": "sha512-gEZvgTy1VtcDOaQty1l10T3jQmJKlNVxLDCs+3rCVPr6nMkODLELxViq5X9l+rfxbie3XrfrMCYYY6eX3aOcOQ==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-define-map": "^7.1.0",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz",
+ "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz",
+ "integrity": "sha512-coVO2Ayv7g0qdDbrNiadE4bU7lvCd9H539m2gMknyVjjMdwF/iCOM7R+E8PkntoqLkltO0rk+3axhpp/0v68VQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz",
+ "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.1.3"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz",
+ "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz",
+ "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==",
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-flow-strip-types": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.2.3.tgz",
+ "integrity": "sha512-xnt7UIk9GYZRitqCnsVMjQK1O2eKZwFB3CvvHjf5SGx6K6vr/MScCKQDnf1DxRaj501e3pXjti+inbSXX2ZUoQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-flow": "^7.2.0"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz",
+ "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz",
+ "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==",
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz",
+ "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz",
+ "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==",
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz",
+ "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==",
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-simple-access": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz",
+ "integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==",
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz",
+ "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==",
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz",
+ "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz",
+ "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.1.0"
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz",
+ "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==",
+ "requires": {
+ "@babel/helper-call-delegate": "^7.1.0",
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-react-jsx": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.2.0.tgz",
+ "integrity": "sha512-h/fZRel5wAfCqcKgq3OhbmYaReo7KkoJBpt8XnvpS7wqaNMqtw5xhxutzcm35iMUWucfAdT/nvGTsWln0JTg2Q==",
+ "requires": {
+ "@babel/helper-builder-react-jsx": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-jsx": "^7.2.0"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz",
+ "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==",
+ "requires": {
+ "regenerator-transform": "^0.13.3"
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz",
+ "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz",
+ "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz",
+ "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz",
+ "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==",
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz",
+ "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz",
+ "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0",
+ "regexpu-core": "^4.1.3"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.2.3.tgz",
+ "integrity": "sha512-AuHzW7a9rbv5WXmvGaPX7wADxFkZIqKlbBh1dmZUQp4iwiPpkE/Qnrji6SC4UQCQzvWY/cpHET29eUhXS9cLPw==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
+ "@babel/plugin-proposal-json-strings": "^7.2.0",
+ "@babel/plugin-proposal-object-rest-spread": "^7.2.0",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.2.0",
+ "@babel/plugin-syntax-async-generators": "^7.2.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
+ "@babel/plugin-transform-arrow-functions": "^7.2.0",
+ "@babel/plugin-transform-async-to-generator": "^7.2.0",
+ "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
+ "@babel/plugin-transform-block-scoping": "^7.2.0",
+ "@babel/plugin-transform-classes": "^7.2.0",
+ "@babel/plugin-transform-computed-properties": "^7.2.0",
+ "@babel/plugin-transform-destructuring": "^7.2.0",
+ "@babel/plugin-transform-dotall-regex": "^7.2.0",
+ "@babel/plugin-transform-duplicate-keys": "^7.2.0",
+ "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
+ "@babel/plugin-transform-for-of": "^7.2.0",
+ "@babel/plugin-transform-function-name": "^7.2.0",
+ "@babel/plugin-transform-literals": "^7.2.0",
+ "@babel/plugin-transform-modules-amd": "^7.2.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.2.0",
+ "@babel/plugin-transform-modules-systemjs": "^7.2.0",
+ "@babel/plugin-transform-modules-umd": "^7.2.0",
+ "@babel/plugin-transform-new-target": "^7.0.0",
+ "@babel/plugin-transform-object-super": "^7.2.0",
+ "@babel/plugin-transform-parameters": "^7.2.0",
+ "@babel/plugin-transform-regenerator": "^7.0.0",
+ "@babel/plugin-transform-shorthand-properties": "^7.2.0",
+ "@babel/plugin-transform-spread": "^7.2.0",
+ "@babel/plugin-transform-sticky-regex": "^7.2.0",
+ "@babel/plugin-transform-template-literals": "^7.2.0",
+ "@babel/plugin-transform-typeof-symbol": "^7.2.0",
+ "@babel/plugin-transform-unicode-regex": "^7.2.0",
+ "browserslist": "^4.3.4",
+ "invariant": "^2.2.2",
+ "js-levenshtein": "^1.1.3",
+ "semver": "^5.3.0"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.2.0.tgz",
+ "integrity": "sha512-oouEibCbHMVdZSDlJBO6bZmID/zA/G/Qx3H1d3rSNPTD+L8UNKvCat7aKWSJ74zYbm5zWGh0GQN0hKj8zYFTCg==",
+ "requires": {
+ "regenerator-runtime": "^0.12.0"
+ }
+ },
+ "@babel/template": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz",
+ "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
+ "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==",
+ "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==",
+ "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=="
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.2.2.tgz",
+ "integrity": "sha512-fKCuD6UFUMkR541eDWL+2ih/xFZBXPOg/7EQFeTluMDebfqR4jrpaCjLhkWlQS4hT6nRa2PMEgXKbRB5/H2fpg==",
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.10",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@iarna/toml": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.1.tgz",
+ "integrity": "sha512-I2EjI9TbEFJNLziNPFfpo64PNanOaK17iL2kTW/jGlGOa4bvHw4VEied83kOEB7NJjXf1KfvmsQ2aEjy3xjiGg=="
+ },
+ "@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==",
+ "requires": {
+ "call-me-maybe": "^1.0.1",
+ "glob-to-regexp": "^0.3.0"
+ }
+ },
+ "@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=="
+ },
+ "@parcel/fs": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-1.11.0.tgz",
+ "integrity": "sha512-86RyEqULbbVoeo8OLcv+LQ1Vq2PKBAvWTU9fCgALxuCTbbs5Ppcvll4Vr+Ko1AnmMzja/k++SzNAwJfeQXVlpA==",
+ "requires": {
+ "@parcel/utils": "^1.11.0",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.6.2"
+ }
+ },
+ "@parcel/logger": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-1.11.0.tgz",
+ "integrity": "sha512-lIRfDg+junbFUUeU0QtHX00gKCgEsYHZydFKwrJ8dc0D+WE2SYT1FcVCgpPAfKYgtg0QQMns8E9vzT9UjH92PQ==",
+ "requires": {
+ "@parcel/workers": "^1.11.0",
+ "chalk": "^2.1.0",
+ "grapheme-breaker": "^0.3.2",
+ "ora": "^2.1.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "@parcel/utils": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-1.11.0.tgz",
+ "integrity": "sha512-cA3p4jTlaMeOtAKR/6AadanOPvKeg8VwgnHhOyfi0yClD0TZS/hi9xu12w4EzA/8NtHu0g6o4RDfcNjqN8l1AQ=="
+ },
+ "@parcel/watcher": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-1.11.0.tgz",
+ "integrity": "sha512-1ySF0sH06jyhpaErW1UWC7BNgkAl6PJyBjuu2cLTW1o71J2iQqgGt95cbuqmfmjI3l0xYN+nauDFqHERaj7Z8A==",
+ "requires": {
+ "@parcel/utils": "^1.11.0",
+ "chokidar": "^2.0.3"
+ }
+ },
+ "@parcel/workers": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-1.11.0.tgz",
+ "integrity": "sha512-USSjRAAQYsZFlv43FUPdD+jEGML5/8oLF0rUzPQTtK4q9kvaXr49F5ZplyLz5lox78cLZ0TxN2bIDQ1xhOkulQ==",
+ "requires": {
+ "@parcel/utils": "^1.11.0",
+ "physical-cpu-count": "^2.0.0"
+ }
+ },
+ "@types/node": {
+ "version": "10.12.18",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz",
+ "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ=="
+ },
+ "@types/q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA=="
+ },
+ "@types/semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ=="
+ },
+ "@vue/component-compiler-utils": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.3.1.tgz",
+ "integrity": "sha512-8VuzMhHTf5UU7+HvBeEbBmYiNLvRxIXtDpvxUl5x26WBPgKmQuuJVFY3dN3GFgnWK9Rveh/u/8NF4quhdUUQ1Q==",
+ "dev": true,
+ "requires": {
+ "consolidate": "^0.15.1",
+ "hash-sum": "^1.0.2",
+ "lru-cache": "^4.1.2",
+ "merge-source-map": "^1.1.0",
+ "postcss": "^6.0.20",
+ "postcss-selector-parser": "^3.1.1",
+ "prettier": "1.13.7",
+ "source-map": "^0.5.6",
+ "vue-template-es2015-compiler": "^1.6.0"
+ },
+ "dependencies": {
+ "merge-source-map": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
+ "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
+ "dev": true,
+ "requires": {
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "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
+ }
+ }
+ },
+ "postcss": {
+ "version": "6.0.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
+ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ },
+ "dependencies": {
+ "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
+ }
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^4.1.1",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ }
+ }
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+ },
+ "accepts": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+ "requires": {
+ "mime-types": "~2.1.18",
+ "negotiator": "0.6.1"
+ }
+ },
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw=="
+ },
"ajv": {
"version": "6.6.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz",
@@ -15,6 +936,74 @@
"uri-js": "^4.2.2"
}
},
+ "alphanum-sort": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+ "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM="
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ },
+ "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==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "ansi-to-html": {
+ "version": "0.6.9",
+ "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.9.tgz",
+ "integrity": "sha512-hwNdg2DNgCzsrvaNc+LDqSxJkpxf9oEt4R7KE0IeURXhEOlontEqNpXNiGeFBpSes8TZF+ZZ9sjB85QzjPsI6A==",
+ "requires": {
+ "entities": "^1.1.1"
+ }
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+ },
+ "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=="
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+ },
+ "array-flatten": {
+ "version": "1.1.1",
+ "resolved": "http://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+ },
"asn1": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
@@ -23,21 +1012,164 @@
"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==",
+ "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=",
+ "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="
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "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="
},
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+ },
"async": {
"version": "1.0.0",
- "resolved": "http://registry.npmjs.org/async/-/async-1.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz",
"integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k="
},
+ "async-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0="
+ },
+ "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=="
+ },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+ },
+ "autoprefixer": {
+ "version": "6.7.7",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
+ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
+ "requires": {
+ "browserslist": "^1.7.6",
+ "caniuse-db": "^1.0.30000634",
+ "normalize-range": "^0.1.2",
+ "num2fraction": "^1.2.2",
+ "postcss": "^5.2.16",
+ "postcss-value-parser": "^3.2.3"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "requires": {
+ "caniuse-db": "^1.0.30000639",
+ "electron-to-chromium": "^1.2.7"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "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"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -48,6 +1180,110 @@
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
},
+ "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=",
+ "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=="
+ }
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ },
+ "dependencies": {
+ "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="
+ }
+ }
+ },
+ "babylon-walk": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/babylon-walk/-/babylon-walk-1.0.2.tgz",
+ "integrity": "sha1-OxWl3btIKni0zpwByLoYFwLZ1s4=",
+ "requires": {
+ "babel-runtime": "^6.11.6",
+ "babel-types": "^6.15.0",
+ "lodash.clone": "^4.5.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "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=",
+ "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==",
+ "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==",
+ "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==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "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=="
+ },
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
@@ -56,19 +1292,502 @@
"tweetnacl": "^0.14.3"
}
},
+ "binary-extensions": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
+ "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg=="
+ },
+ "bindings": {
+ "version": "1.2.1",
+ "resolved": "http://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz",
+ "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE="
+ },
+ "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=="
+ },
+ "body-parser": {
+ "version": "1.18.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
+ "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
+ "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"
+ }
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "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=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "brfs": {
+ "version": "1.6.1",
+ "resolved": "http://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz",
+ "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==",
+ "requires": {
+ "quote-stream": "^1.0.1",
+ "resolve": "^1.1.5",
+ "static-module": "^2.2.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "brorand": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+ },
+ "browserify-aes": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+ "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==",
+ "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==",
+ "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": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+ "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=",
+ "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==",
+ "requires": {
+ "pako": "~1.0.5"
+ },
+ "dependencies": {
+ "pako": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.7.tgz",
+ "integrity": "sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ=="
+ }
+ }
+ },
+ "browserslist": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.6.tgz",
+ "integrity": "sha512-kMGKs4BTzRWviZ8yru18xBpx+CyHG9eqgRbj9XbE3IMgtczf4aiA0Y1YCpVdvUieKGZ03kolSPXqTcscBCb9qw==",
+ "requires": {
+ "caniuse-lite": "^1.0.30000921",
+ "electron-to-chromium": "^1.3.92",
+ "node-releases": "^1.1.1"
+ }
+ },
+ "buffer": {
+ "version": "4.9.1",
+ "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+ "requires": {
+ "base64-js": "^1.0.2",
+ "ieee754": "^1.1.4",
+ "isarray": "^1.0.0"
+ }
+ },
+ "buffer-equal": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz",
+ "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs="
+ },
"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=="
},
+ "buffer-xor": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+ "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
+ },
+ "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="
+ },
+ "bytes": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "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"
+ }
+ },
+ "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="
+ },
+ "caller-callsite": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+ "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=",
+ "requires": {
+ "caller-callsite": "^2.0.0"
+ }
+ },
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "http://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
+ },
+ "caniuse-api": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-lite": "^1.0.0",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "caniuse-db": {
+ "version": "1.0.30000923",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000923.tgz",
+ "integrity": "sha512-PlFnZSgXcf/Z1kuNhTRq9vV4FnzizSDHpcgs5b/EY9sN60F3aBpkJwvEsHNeACHZi56/L8Cm3VsONdY1bOus/g=="
+ },
+ "caniuse-lite": {
+ "version": "1.0.30000923",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000923.tgz",
+ "integrity": "sha512-j5ur7eeluOFjjPUkydtXP4KFAsmH3XaQNch5tvWSO+dLHYt5PE+VgJZLWtbVOodfWij6m6zas28T4gB/cLYq1w=="
+ },
"caseless": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chokidar": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
+ "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+ "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"
+ }
+ },
+ "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==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "clap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz",
+ "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==",
+ "requires": {
+ "chalk": "^1.1.3"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "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"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^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="
+ }
+ }
+ },
+ "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==",
+ "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=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "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=",
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-spinners": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz",
+ "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg=="
+ },
+ "clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
+ },
+ "clones": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/clones/-/clones-1.1.0.tgz",
+ "integrity": "sha1-h+kEEy1hQMXAtyAGwIwNBb17Y7M="
+ },
+ "coa": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
+ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
+ "requires": {
+ "@types/q": "^1.5.1",
+ "chalk": "^2.4.1",
+ "q": "^1.1.2"
+ }
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/color/-/color-3.1.0.tgz",
+ "integrity": "sha512-CwyopLkuRYO5ei2EpzpIh6LqJMt6Mt+jZhO5VI5f/wJLZriXQE32/SSqzmrh+QB+AZT81Cj8yv+7zwToW8ahZg==",
+ "requires": {
+ "color-convert": "^1.9.1",
+ "color-string": "^1.5.2"
+ }
+ },
+ "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==",
+ "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="
+ },
+ "color-string": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
+ "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
+ "requires": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
+ "colormin": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz",
+ "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=",
+ "requires": {
+ "color": "^0.11.0",
+ "css-color-names": "0.0.4",
+ "has": "^1.0.1"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
+ },
+ "color": {
+ "version": "0.11.4",
+ "resolved": "http://registry.npmjs.org/color/-/color-0.11.4.tgz",
+ "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
+ "requires": {
+ "clone": "^1.0.2",
+ "color-convert": "^1.3.0",
+ "color-string": "^0.3.0"
+ }
+ },
+ "color-string": {
+ "version": "0.3.0",
+ "resolved": "http://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
+ "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
+ "requires": {
+ "color-name": "^1.0.0"
+ }
+ }
+ }
+ },
"colors": {
"version": "1.0.3",
- "resolved": "http://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz",
"integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs="
},
"combined-stream": {
@@ -79,6 +1798,26 @@
"delayed-stream": "~1.0.0"
}
},
+ "command-exists": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.8.tgz",
+ "integrity": "sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw=="
+ },
+ "commander": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg=="
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
"concat-stream": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
@@ -90,11 +1829,316 @@
"typedarray": "^0.0.6"
}
},
+ "config-chain": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
+ "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "console-browserify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+ "requires": {
+ "date-now": "^0.1.4"
+ }
+ },
+ "consolidate": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz",
+ "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.1.1"
+ }
+ },
+ "constants-browserify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+ "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
+ },
+ "content-disposition": {
+ "version": "0.5.2",
+ "resolved": "http://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
+ },
+ "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=="
+ },
+ "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==",
+ "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="
+ },
+ "cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
+ },
+ "core-js": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz",
+ "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg=="
+ },
"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="
},
+ "cosmiconfig": {
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz",
+ "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==",
+ "requires": {
+ "import-fresh": "^2.0.0",
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.9.0",
+ "parse-json": "^4.0.0"
+ }
+ },
+ "create-ecdh": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "elliptic": "^6.0.0"
+ }
+ },
+ "create-hash": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+ "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": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+ "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": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "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==",
+ "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"
+ }
+ },
+ "css-color-names": {
+ "version": "0.0.4",
+ "resolved": "http://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+ "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA="
+ },
+ "css-declaration-sorter": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
+ "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
+ "requires": {
+ "postcss": "^7.0.1",
+ "timsort": "^0.3.0"
+ }
+ },
+ "css-select": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz",
+ "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==",
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^2.1.2",
+ "domutils": "^1.7.0",
+ "nth-check": "^1.0.2"
+ }
+ },
+ "css-select-base-adapter": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
+ "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w=="
+ },
+ "css-tree": {
+ "version": "1.0.0-alpha.28",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz",
+ "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==",
+ "requires": {
+ "mdn-data": "~1.1.0",
+ "source-map": "^0.5.3"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "css-unit-converter": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz",
+ "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY="
+ },
+ "css-url-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz",
+ "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w="
+ },
+ "css-what": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.2.tgz",
+ "integrity": "sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ=="
+ },
+ "cssesc": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+ },
+ "cssnano": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.8.tgz",
+ "integrity": "sha512-5GIY0VzAHORpbKiL3rMXp4w4M1Ki+XlXgEXyuWXVd3h6hlASb+9Vo76dNP56/elLMVBBsUfusCo1q56uW0UWig==",
+ "requires": {
+ "cosmiconfig": "^5.0.0",
+ "cssnano-preset-default": "^4.0.6",
+ "is-resolvable": "^1.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "cssnano-preset-default": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.6.tgz",
+ "integrity": "sha512-UPboYbFaJFtDUhJ4fqctThWbbyF4q01/7UhsZbLzp35l+nUxtzh1SifoVlEfyLM3n3Z0htd8B1YlCxy9i+bQvg==",
+ "requires": {
+ "css-declaration-sorter": "^4.0.1",
+ "cssnano-util-raw-cache": "^4.0.1",
+ "postcss": "^7.0.0",
+ "postcss-calc": "^7.0.0",
+ "postcss-colormin": "^4.0.2",
+ "postcss-convert-values": "^4.0.1",
+ "postcss-discard-comments": "^4.0.1",
+ "postcss-discard-duplicates": "^4.0.2",
+ "postcss-discard-empty": "^4.0.1",
+ "postcss-discard-overridden": "^4.0.1",
+ "postcss-merge-longhand": "^4.0.10",
+ "postcss-merge-rules": "^4.0.2",
+ "postcss-minify-font-values": "^4.0.2",
+ "postcss-minify-gradients": "^4.0.1",
+ "postcss-minify-params": "^4.0.1",
+ "postcss-minify-selectors": "^4.0.1",
+ "postcss-normalize-charset": "^4.0.1",
+ "postcss-normalize-display-values": "^4.0.1",
+ "postcss-normalize-positions": "^4.0.1",
+ "postcss-normalize-repeat-style": "^4.0.1",
+ "postcss-normalize-string": "^4.0.1",
+ "postcss-normalize-timing-functions": "^4.0.1",
+ "postcss-normalize-unicode": "^4.0.1",
+ "postcss-normalize-url": "^4.0.1",
+ "postcss-normalize-whitespace": "^4.0.1",
+ "postcss-ordered-values": "^4.1.1",
+ "postcss-reduce-initial": "^4.0.2",
+ "postcss-reduce-transforms": "^4.0.1",
+ "postcss-svgo": "^4.0.1",
+ "postcss-unique-selectors": "^4.0.1"
+ }
+ },
+ "cssnano-util-get-arguments": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
+ "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8="
+ },
+ "cssnano-util-get-match": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz",
+ "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0="
+ },
+ "cssnano-util-raw-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
+ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "cssnano-util-same-parent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
+ "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q=="
+ },
+ "csso": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz",
+ "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==",
+ "requires": {
+ "css-tree": "1.0.0-alpha.29"
+ },
+ "dependencies": {
+ "css-tree": {
+ "version": "1.0.0-alpha.29",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz",
+ "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==",
+ "requires": {
+ "mdn-data": "~1.1.0",
+ "source-map": "^0.5.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
"cycle": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz",
@@ -108,6 +2152,26 @@
"assert-plus": "^1.0.0"
}
},
+ "date-now": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs="
+ },
+ "de-indent": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
+ "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
+ "dev": true
+ },
+ "deasync": {
+ "version": "0.1.14",
+ "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.14.tgz",
+ "integrity": "sha512-wN8sIuEqIwyQh72AG7oY6YQODCxIp1eXzEZlZznBuwDF8Q03Tdy9QNp1BNZXeadXoklNrw+Ip1fch+KXo/+ASw==",
+ "requires": {
+ "bindings": "~1.2.1",
+ "node-addon-api": "^1.6.0"
+ }
+ },
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -116,11 +2180,189 @@
"ms": "2.0.0"
}
},
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "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="
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "requires": {
+ "clone": "^1.0.2"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
+ }
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "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==",
+ "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==",
+ "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==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "defined": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
+ },
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+ },
+ "des.js": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+ "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="
+ },
+ "diffie-hellman": {
+ "version": "5.0.3",
+ "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+ "requires": {
+ "bn.js": "^4.1.0",
+ "miller-rabin": "^4.0.0",
+ "randombytes": "^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=",
+ "requires": {
+ "domelementtype": "~1.1.1",
+ "entities": "~1.1.1"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.1.3",
+ "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs="
+ }
+ }
+ },
+ "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=="
+ },
+ "domelementtype": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
+ },
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "requires": {
+ "domelementtype": "1"
+ }
+ },
+ "domutils": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+ "requires": {
+ "dom-serializer": "0",
+ "domelementtype": "1"
+ }
+ },
+ "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==",
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ },
+ "dotenv": {
+ "version": "5.0.1",
+ "resolved": "http://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz",
+ "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow=="
+ },
+ "dotenv-expand": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz",
+ "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU="
+ },
+ "duplexer2": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
+ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
+ "requires": {
+ "readable-stream": "^2.0.2"
+ }
+ },
"ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
@@ -130,16 +2372,296 @@
"safer-buffer": "^2.1.0"
}
},
+ "editorconfig": {
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.2.tgz",
+ "integrity": "sha512-GWjSI19PVJAM9IZRGOS+YKI8LN+/sjkSjNyvxL5ucqP9/IqtYNXBaQ/6c/hkPNYQHyOHra2KoXZI/JVpuqwmcQ==",
+ "requires": {
+ "@types/node": "^10.11.7",
+ "@types/semver": "^5.5.0",
+ "commander": "^2.19.0",
+ "lru-cache": "^4.1.3",
+ "semver": "^5.6.0",
+ "sigmund": "^1.0.1"
+ }
+ },
+ "ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
+ },
+ "electron-to-chromium": {
+ "version": "1.3.96",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.96.tgz",
+ "integrity": "sha512-ZUXBUyGLeoJxp4Nt6G/GjBRLnyz8IKQGexZ2ndWaoegThgMGFO1tdDYID5gBV32/1S83osjJHyfzvanE/8HY4Q=="
+ },
+ "elliptic": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
+ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
+ "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"
+ }
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
+ },
+ "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==",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
+ "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
+ "requires": {
+ "es-to-primitive": "^1.1.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.1",
+ "is-callable": "^1.1.3",
+ "is-regex": "^1.0.4"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+ "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
"es6-promise": {
"version": "4.2.5",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz",
"integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg=="
},
+ "escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ },
+ "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="
+ },
+ "escodegen": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz",
+ "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+ "requires": {
+ "esprima": "^3.1.3",
+ "estraverse": "^4.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ }
+ },
+ "esprima": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+ "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+ },
+ "etag": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+ },
+ "events": {
+ "version": "1.1.1",
+ "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz",
+ "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
+ },
+ "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==",
+ "requires": {
+ "md5.js": "^1.3.4",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "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=",
+ "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=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "express": {
+ "version": "4.16.4",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
+ "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
+ "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"
+ }
+ },
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "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==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "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=",
+ "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=",
+ "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==",
+ "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==",
+ "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==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
"extract-zip": {
"version": "1.6.7",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
@@ -161,16 +2683,52 @@
"resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz",
"integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A="
},
+ "falafel": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.1.0.tgz",
+ "integrity": "sha1-lrsXdh2rqU9G0AFzizzt86Z/4Gw=",
+ "requires": {
+ "acorn": "^5.0.0",
+ "foreach": "^2.0.5",
+ "isarray": "0.0.1",
+ "object-keys": "^1.0.6"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ }
+ }
+ },
"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="
},
+ "fast-glob": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.4.tgz",
+ "integrity": "sha512-FjK2nCGI/McyzgNtTESqaWP3trPvHyRyoyY70hxjc3oKPNmDe8taohLZpoVKoUjW85tbU5txaYUZCNtVzygl1g==",
+ "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"
+ }
+ },
"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="
},
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+ },
"fd-slicer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
@@ -179,6 +2737,61 @@
"pend": "~1.2.0"
}
},
+ "filesize": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+ "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg=="
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "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=",
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "finalhandler": {
+ "version": "1.1.1",
+ "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
+ "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
+ "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"
+ }
+ },
+ "flatten": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
+ "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I="
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+ },
+ "foreach": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
+ "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
+ },
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
@@ -194,9 +2807,27 @@
"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="
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "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="
+ },
"fs-extra": {
"version": "1.0.0",
- "resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
"integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=",
"requires": {
"graceful-fs": "^4.1.2",
@@ -204,6 +2835,488 @@
"klaw": "^1.0.0"
}
},
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz",
+ "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==",
+ "optional": true,
+ "requires": {
+ "nan": "^2.9.2",
+ "node-pre-gyp": "^0.10.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "deep-extend": {
+ "version": "0.5.1",
+ "bundled": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": 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.2",
+ "bundled": 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,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.21",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true
+ },
+ "minipass": {
+ "version": "2.2.4",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.1.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.2.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "debug": "^2.1.2",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.10.0",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.0",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.1.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.3",
+ "bundled": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.1.10",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": 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
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.7",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.5.1",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": 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.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "bundled": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.5.0",
+ "bundled": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": 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,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.1",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.0.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.2.4",
+ "minizlib": "^1.1.0",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.1",
+ "yallist": "^3.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "yallist": {
+ "version": "3.0.2",
+ "bundled": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw="
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+ },
"getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
@@ -212,11 +3325,62 @@
"assert-plus": "^1.0.0"
}
},
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "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-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "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=",
+ "requires": {
+ "is-extglob": "^2.1.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="
+ },
+ "globals": {
+ "version": "11.9.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz",
+ "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg=="
+ },
"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=="
},
+ "grapheme-breaker": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/grapheme-breaker/-/grapheme-breaker-0.3.2.tgz",
+ "integrity": "sha1-W55reMODJFLSuiuxy4MPlidkEKw=",
+ "requires": {
+ "brfs": "^1.2.0",
+ "unicode-trie": "^0.3.1"
+ }
+ },
"har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
@@ -231,6 +3395,92 @@
"har-schema": "^2.0.0"
}
},
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "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=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "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=",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "hash-sum": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
+ "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+ "dev": true
+ },
+ "hash.js": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "minimalistic-assert": "^1.0.1"
+ }
+ },
"hasha": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz",
@@ -240,6 +3490,488 @@
"pinkie-promise": "^2.0.0"
}
},
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true
+ },
+ "hex-color-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
+ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ=="
+ },
+ "hmac-drbg": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+ "requires": {
+ "hash.js": "^1.0.3",
+ "minimalistic-assert": "^1.0.0",
+ "minimalistic-crypto-utils": "^1.0.1"
+ }
+ },
+ "hsl-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
+ "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4="
+ },
+ "hsla-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
+ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg="
+ },
+ "html-comment-regex": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
+ "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ=="
+ },
+ "htmlnano": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-0.1.10.tgz",
+ "integrity": "sha512-eTEUzz8VdWYp+w/KUdb99kwao4reR64epUySyZkQeepcyzPQ2n2EPWzibf6QDxmkGy10Kr+CKxYqI3izSbmhJQ==",
+ "requires": {
+ "cssnano": "^3.4.0",
+ "object-assign": "^4.0.1",
+ "posthtml": "^0.11.3",
+ "posthtml-render": "^1.1.4",
+ "svgo": "^1.0.5",
+ "terser": "^3.8.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "browserslist": {
+ "version": "1.7.7",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
+ "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
+ "requires": {
+ "caniuse-db": "^1.0.30000639",
+ "electron-to-chromium": "^1.2.7"
+ }
+ },
+ "caniuse-api": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz",
+ "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=",
+ "requires": {
+ "browserslist": "^1.3.6",
+ "caniuse-db": "^1.0.30000529",
+ "lodash.memoize": "^4.1.2",
+ "lodash.uniq": "^4.5.0"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "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"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "coa": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz",
+ "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=",
+ "requires": {
+ "q": "^1.1.2"
+ }
+ },
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
+ },
+ "cssnano": {
+ "version": "3.10.0",
+ "resolved": "http://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
+ "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
+ "requires": {
+ "autoprefixer": "^6.3.1",
+ "decamelize": "^1.1.2",
+ "defined": "^1.0.0",
+ "has": "^1.0.1",
+ "object-assign": "^4.0.1",
+ "postcss": "^5.0.14",
+ "postcss-calc": "^5.2.0",
+ "postcss-colormin": "^2.1.8",
+ "postcss-convert-values": "^2.3.4",
+ "postcss-discard-comments": "^2.0.4",
+ "postcss-discard-duplicates": "^2.0.1",
+ "postcss-discard-empty": "^2.0.1",
+ "postcss-discard-overridden": "^0.1.1",
+ "postcss-discard-unused": "^2.2.1",
+ "postcss-filter-plugins": "^2.0.0",
+ "postcss-merge-idents": "^2.1.5",
+ "postcss-merge-longhand": "^2.0.1",
+ "postcss-merge-rules": "^2.0.3",
+ "postcss-minify-font-values": "^1.0.2",
+ "postcss-minify-gradients": "^1.0.1",
+ "postcss-minify-params": "^1.0.4",
+ "postcss-minify-selectors": "^2.0.4",
+ "postcss-normalize-charset": "^1.1.0",
+ "postcss-normalize-url": "^3.0.7",
+ "postcss-ordered-values": "^2.1.0",
+ "postcss-reduce-idents": "^2.2.2",
+ "postcss-reduce-initial": "^1.0.0",
+ "postcss-reduce-transforms": "^1.0.3",
+ "postcss-svgo": "^2.1.1",
+ "postcss-unique-selectors": "^2.0.2",
+ "postcss-value-parser": "^3.2.3",
+ "postcss-zindex": "^2.0.1"
+ }
+ },
+ "csso": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz",
+ "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=",
+ "requires": {
+ "clap": "^1.0.9",
+ "source-map": "^0.5.3"
+ }
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE="
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "is-svg": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz",
+ "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=",
+ "requires": {
+ "html-comment-regex": "^1.1.0"
+ }
+ },
+ "js-yaml": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
+ "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^2.6.0"
+ }
+ },
+ "normalize-url": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "requires": {
+ "object-assign": "^4.0.1",
+ "prepend-http": "^1.0.0",
+ "query-string": "^4.1.0",
+ "sort-keys": "^1.0.0"
+ }
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "postcss-calc": {
+ "version": "5.3.1",
+ "resolved": "http://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz",
+ "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=",
+ "requires": {
+ "postcss": "^5.0.2",
+ "postcss-message-helpers": "^2.0.0",
+ "reduce-css-calc": "^1.2.6"
+ }
+ },
+ "postcss-colormin": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz",
+ "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=",
+ "requires": {
+ "colormin": "^1.0.5",
+ "postcss": "^5.0.13",
+ "postcss-value-parser": "^3.2.3"
+ }
+ },
+ "postcss-convert-values": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz",
+ "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=",
+ "requires": {
+ "postcss": "^5.0.11",
+ "postcss-value-parser": "^3.1.2"
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "2.0.4",
+ "resolved": "http://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz",
+ "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=",
+ "requires": {
+ "postcss": "^5.0.14"
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz",
+ "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=",
+ "requires": {
+ "postcss": "^5.0.4"
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "2.1.0",
+ "resolved": "http://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz",
+ "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=",
+ "requires": {
+ "postcss": "^5.0.14"
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "0.1.1",
+ "resolved": "http://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz",
+ "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=",
+ "requires": {
+ "postcss": "^5.0.16"
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz",
+ "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=",
+ "requires": {
+ "postcss": "^5.0.4"
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz",
+ "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=",
+ "requires": {
+ "browserslist": "^1.5.2",
+ "caniuse-api": "^1.5.2",
+ "postcss": "^5.0.4",
+ "postcss-selector-parser": "^2.2.2",
+ "vendors": "^1.0.0"
+ }
+ },
+ "postcss-minify-font-values": {
+ "version": "1.0.5",
+ "resolved": "http://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz",
+ "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=",
+ "requires": {
+ "object-assign": "^4.0.1",
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.2"
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "1.0.5",
+ "resolved": "http://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz",
+ "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=",
+ "requires": {
+ "postcss": "^5.0.12",
+ "postcss-value-parser": "^3.3.0"
+ }
+ },
+ "postcss-minify-params": {
+ "version": "1.2.2",
+ "resolved": "http://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz",
+ "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=",
+ "requires": {
+ "alphanum-sort": "^1.0.1",
+ "postcss": "^5.0.2",
+ "postcss-value-parser": "^3.0.2",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "2.1.1",
+ "resolved": "http://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz",
+ "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=",
+ "requires": {
+ "alphanum-sort": "^1.0.2",
+ "has": "^1.0.1",
+ "postcss": "^5.0.14",
+ "postcss-selector-parser": "^2.0.0"
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "1.1.1",
+ "resolved": "http://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz",
+ "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=",
+ "requires": {
+ "postcss": "^5.0.5"
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "3.0.8",
+ "resolved": "http://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz",
+ "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=",
+ "requires": {
+ "is-absolute-url": "^2.0.0",
+ "normalize-url": "^1.4.0",
+ "postcss": "^5.0.14",
+ "postcss-value-parser": "^3.2.3"
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz",
+ "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=",
+ "requires": {
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.1"
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "1.0.1",
+ "resolved": "http://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz",
+ "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=",
+ "requires": {
+ "postcss": "^5.0.4"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "1.0.4",
+ "resolved": "http://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz",
+ "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=",
+ "requires": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.8",
+ "postcss-value-parser": "^3.0.1"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
+ "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=",
+ "requires": {
+ "flatten": "^1.0.2",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "postcss-svgo": {
+ "version": "2.1.6",
+ "resolved": "http://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz",
+ "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=",
+ "requires": {
+ "is-svg": "^2.0.0",
+ "postcss": "^5.0.14",
+ "postcss-value-parser": "^3.2.3",
+ "svgo": "^0.7.0"
+ },
+ "dependencies": {
+ "svgo": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
+ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
+ "requires": {
+ "coa": "~1.0.1",
+ "colors": "~1.1.2",
+ "csso": "~2.3.1",
+ "js-yaml": "~3.7.0",
+ "mkdirp": "~0.5.1",
+ "sax": "~1.2.1",
+ "whet.extend": "~0.9.9"
+ }
+ }
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "2.0.2",
+ "resolved": "http://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz",
+ "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=",
+ "requires": {
+ "alphanum-sort": "^1.0.1",
+ "postcss": "^5.0.4",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "htmlparser2": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz",
+ "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==",
+ "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==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "http-errors": {
+ "version": "1.6.3",
+ "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+ "requires": {
+ "depd": "~1.1.2",
+ "inherits": "2.0.3",
+ "setprototypeof": "1.1.0",
+ "statuses": ">= 1.4.0 < 2"
+ }
+ },
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
@@ -250,21 +3982,292 @@
"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="
+ },
+ "iconv-lite": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+ "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=="
+ },
+ "import-fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+ "requires": {
+ "caller-path": "^2.0.0",
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "indexes-of": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
+ },
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "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="
},
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+ },
+ "interactjs": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/interactjs/-/interactjs-1.3.4.tgz",
+ "integrity": "sha512-AQ2CdPEyHqiEEQ1FFgMBj79UEsU1+rUwSXuhOkflvB65p4iECft28SN/PvhD/Y9OtNge8aH1qTibjAi+RXQMqQ=="
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "ipaddr.js": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
+ "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4="
+ },
+ "is-absolute-url": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
+ "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY="
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "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=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+ },
+ "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=",
+ "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=="
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA=="
+ },
+ "is-color-stop": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
+ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
+ "requires": {
+ "css-color-names": "^0.0.4",
+ "hex-color-regex": "^1.1.0",
+ "hsl-regex": "^1.0.0",
+ "hsla-regex": "^1.0.0",
+ "rgb-regex": "^1.0.1",
+ "rgba-regex": "^1.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "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=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "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=="
+ }
+ }
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE="
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "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=",
+ "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=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
+ },
+ "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="
+ },
+ "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==",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg=="
+ },
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
},
+ "is-svg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
+ "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
+ "requires": {
+ "html-comment-regex": "^1.1.0"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+ "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+ "requires": {
+ "has-symbols": "^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="
},
+ "is-url": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
+ "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
+ },
+ "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=="
+ },
+ "is-wsl": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+ "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+ },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -275,16 +4278,74 @@
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
},
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+ },
"isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
+ "js-base64": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.0.tgz",
+ "integrity": "sha512-wlEBIZ5LP8usDylWbDNhKPEFVFdI5hCHpnVoT/Ysvoi/PRhJENm/Rlh9TvjYB38HFfKZN7OzEbRjmjvLkFw11g=="
+ },
+ "js-beautify": {
+ "version": "1.8.9",
+ "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.8.9.tgz",
+ "integrity": "sha512-MwPmLywK9RSX0SPsUJjN7i+RQY9w/yC17Lbrq9ViEefpLRgqAR2BgrMN2AbifkUuhDV8tRauLhLda/9+bE0YQA==",
+ "requires": {
+ "config-chain": "^1.1.12",
+ "editorconfig": "^0.15.2",
+ "glob": "^7.1.3",
+ "mkdirp": "~0.5.0",
+ "nopt": "~4.0.1"
+ }
+ },
+ "js-levenshtein": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.4.tgz",
+ "integrity": "sha512-PxfGzSs0ztShKrUYPIn5r0MtyAhYcCwmndozzpz8YObbPnD1jFxzlBGbRnX2mIu6Z13xN6+PTu05TQFnZFlzow=="
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "js-yaml": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
+ "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ }
+ }
+ },
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
},
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
+ },
+ "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=="
+ },
"json-schema": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
@@ -300,9 +4361,24 @@
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "http://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "requires": {
+ "minimist": "^1.2.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
"jsonfile": {
"version": "2.4.0",
- "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
"integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
"requires": {
"graceful-fs": "^4.1.6"
@@ -321,9 +4397,14 @@
},
"kew": {
"version": "0.7.0",
- "resolved": "http://registry.npmjs.org/kew/-/kew-0.7.0.tgz",
+ "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz",
"integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s="
},
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+ },
"klaw": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
@@ -332,6 +4413,175 @@
"graceful-fs": "^4.1.9"
}
},
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
+ },
+ "lodash.clone": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
+ "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y="
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
+ },
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4="
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+ "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
+ },
+ "log-symbols": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "requires": {
+ "chalk": "^2.0.1"
+ }
+ },
+ "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==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "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==",
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "magic-string": {
+ "version": "0.22.5",
+ "resolved": "http://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz",
+ "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==",
+ "requires": {
+ "vlq": "^0.2.2"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "math-expression-evaluator": {
+ "version": "1.2.17",
+ "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
+ "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw="
+ },
+ "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==",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "mdn-data": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz",
+ "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA=="
+ },
+ "media-typer": {
+ "version": "0.3.0",
+ "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ },
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ },
+ "merge-source-map": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz",
+ "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=",
+ "requires": {
+ "source-map": "^0.5.6"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "merge2": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz",
+ "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA=="
+ },
+ "methods": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "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"
+ }
+ },
+ "miller-rabin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+ "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=="
+ },
"mime-db": {
"version": "1.37.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
@@ -345,11 +4595,53 @@
"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=="
+ },
+ "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=="
+ },
+ "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="
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
"minimist": {
"version": "0.0.8",
- "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
},
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "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==",
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
"mkdirp": {
"version": "0.5.1",
"resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
@@ -363,11 +4655,506 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
+ "nan": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
+ "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==",
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "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"
+ }
+ },
+ "negotiator": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
+ },
+ "node-addon-api": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.6.2.tgz",
+ "integrity": "sha512-479Bjw9nTE5DdBSZZWprFryHGjUaQC31y1wHo19We/k0BZlrmhqQitWoUL0cD8+scljCbIUL+E58oRDEakdGGA=="
+ },
+ "node-forge": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz",
+ "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw=="
+ },
+ "node-libs-browser": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
+ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
+ "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": "^1.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.10.3",
+ "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="
+ }
+ }
+ },
+ "node-releases": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.2.tgz",
+ "integrity": "sha512-j1gEV/zX821yxdWp/1vBMN0pSUjuH9oGUdLCb4PfUko6ZW7KdRs3Z+QGGwDUhYtSpQvdVVyLd2V0YvLsmdg5jQ==",
+ "requires": {
+ "semver": "^5.3.0"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "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="
+ },
+ "normalize-url": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
+ "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg=="
+ },
+ "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==",
+ "requires": {
+ "boolbase": "~1.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
+ },
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
},
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "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=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-inspect": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz",
+ "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw=="
+ },
+ "object-keys": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+ "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag=="
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "object.values": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz",
+ "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=",
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.6.1",
+ "function-bind": "^1.1.0",
+ "has": "^1.0.1"
+ }
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "opn": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
+ "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==",
+ "requires": {
+ "is-wsl": "^1.1.0"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ }
+ },
+ "ora": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz",
+ "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==",
+ "requires": {
+ "chalk": "^2.3.1",
+ "cli-cursor": "^2.1.0",
+ "cli-spinners": "^1.1.0",
+ "log-symbols": "^2.2.0",
+ "strip-ansi": "^4.0.0",
+ "wcwidth": "^1.0.1"
+ }
+ },
+ "os-browserify": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "pako": {
+ "version": "0.2.9",
+ "resolved": "http://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU="
+ },
+ "parcel": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/parcel/-/parcel-1.11.0.tgz",
+ "integrity": "sha512-5blcx/pgzqlRvF2PbRzRXpzEHDYQa34U2yRx+psqZ3y5CJQgAydIsQIwa5tRabgOVgSyTMPrBXS/jUFvafaQ5Q==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/core": "^7.0.0",
+ "@babel/generator": "^7.0.0",
+ "@babel/parser": "^7.0.0",
+ "@babel/plugin-transform-flow-strip-types": "^7.0.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.0.0",
+ "@babel/plugin-transform-react-jsx": "^7.0.0",
+ "@babel/preset-env": "^7.0.0",
+ "@babel/runtime": "^7.0.0",
+ "@babel/template": "^7.0.0",
+ "@babel/traverse": "^7.0.0",
+ "@babel/types": "^7.0.0",
+ "@iarna/toml": "^2.2.0",
+ "@parcel/fs": "^1.11.0",
+ "@parcel/logger": "^1.11.0",
+ "@parcel/utils": "^1.11.0",
+ "@parcel/watcher": "^1.11.0",
+ "@parcel/workers": "^1.11.0",
+ "ansi-to-html": "^0.6.4",
+ "babylon-walk": "^1.0.2",
+ "browserslist": "^4.1.0",
+ "chalk": "^2.1.0",
+ "clone": "^2.1.1",
+ "command-exists": "^1.2.6",
+ "commander": "^2.11.0",
+ "cross-spawn": "^6.0.4",
+ "cssnano": "^4.0.0",
+ "deasync": "^0.1.14",
+ "dotenv": "^5.0.0",
+ "dotenv-expand": "^4.2.0",
+ "fast-glob": "^2.2.2",
+ "filesize": "^3.6.0",
+ "get-port": "^3.2.0",
+ "htmlnano": "^0.1.9",
+ "is-glob": "^4.0.0",
+ "is-url": "^1.2.2",
+ "js-yaml": "^3.10.0",
+ "json5": "^1.0.1",
+ "micromatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "node-forge": "^0.7.1",
+ "node-libs-browser": "^2.0.0",
+ "opn": "^5.1.0",
+ "postcss": "^7.0.5",
+ "postcss-value-parser": "^3.3.1",
+ "posthtml": "^0.11.2",
+ "posthtml-parser": "^0.4.0",
+ "posthtml-render": "^1.1.3",
+ "resolve": "^1.4.0",
+ "semver": "^5.4.1",
+ "serialize-to-js": "^1.1.1",
+ "serve-static": "^1.12.4",
+ "source-map": "0.6.1",
+ "terser": "^3.7.3",
+ "v8-compile-cache": "^2.0.0",
+ "ws": "^5.1.1"
+ }
+ },
+ "parcel-bundler": {
+ "version": "1.11.0",
+ "resolved": "https://registry.npmjs.org/parcel-bundler/-/parcel-bundler-1.11.0.tgz",
+ "integrity": "sha512-H0w/Obx76vWiG+UtofznfcHZJBmd6JA5iCn7zrGBINyVAh+Nt/JLD6QDROghHLXfJkO4XyczsB+fO+nPbXlFfA==",
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/core": "^7.0.0",
+ "@babel/generator": "^7.0.0",
+ "@babel/parser": "^7.0.0",
+ "@babel/plugin-transform-flow-strip-types": "^7.0.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.0.0",
+ "@babel/plugin-transform-react-jsx": "^7.0.0",
+ "@babel/preset-env": "^7.0.0",
+ "@babel/runtime": "^7.0.0",
+ "@babel/template": "^7.0.0",
+ "@babel/traverse": "^7.0.0",
+ "@babel/types": "^7.0.0",
+ "@iarna/toml": "^2.2.0",
+ "@parcel/fs": "^1.11.0",
+ "@parcel/logger": "^1.11.0",
+ "@parcel/utils": "^1.11.0",
+ "@parcel/watcher": "^1.11.0",
+ "@parcel/workers": "^1.11.0",
+ "ansi-to-html": "^0.6.4",
+ "babylon-walk": "^1.0.2",
+ "browserslist": "^4.1.0",
+ "chalk": "^2.1.0",
+ "clone": "^2.1.1",
+ "command-exists": "^1.2.6",
+ "commander": "^2.11.0",
+ "cross-spawn": "^6.0.4",
+ "cssnano": "^4.0.0",
+ "deasync": "^0.1.14",
+ "dotenv": "^5.0.0",
+ "dotenv-expand": "^4.2.0",
+ "fast-glob": "^2.2.2",
+ "filesize": "^3.6.0",
+ "get-port": "^3.2.0",
+ "htmlnano": "^0.1.9",
+ "is-glob": "^4.0.0",
+ "is-url": "^1.2.2",
+ "js-yaml": "^3.10.0",
+ "json5": "^1.0.1",
+ "micromatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "node-forge": "^0.7.1",
+ "node-libs-browser": "^2.0.0",
+ "opn": "^5.1.0",
+ "postcss": "^7.0.5",
+ "postcss-value-parser": "^3.3.1",
+ "posthtml": "^0.11.2",
+ "posthtml-parser": "^0.4.0",
+ "posthtml-render": "^1.1.3",
+ "resolve": "^1.4.0",
+ "semver": "^5.4.1",
+ "serialize-to-js": "^1.1.1",
+ "serve-static": "^1.12.4",
+ "source-map": "0.6.1",
+ "terser": "^3.7.3",
+ "v8-compile-cache": "^2.0.0",
+ "ws": "^5.1.1"
+ }
+ },
+ "parse-asn1": {
+ "version": "5.1.1",
+ "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz",
+ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==",
+ "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"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "parseurl": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+ "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+ },
+ "path-browserify": {
+ "version": "0.0.0",
+ "resolved": "http://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+ "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo="
+ },
+ "path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+ },
+ "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=="
+ },
+ "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="
+ },
+ "pbkdf2": {
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+ "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"
+ }
+ },
"pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
@@ -404,6 +5191,11 @@
"which": "^1.2.10"
}
},
+ "physical-cpu-count": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz",
+ "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA="
+ },
"pinkie": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
@@ -417,6 +5209,796 @@
"pinkie": "^2.0.0"
}
},
+ "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="
+ },
+ "postcss": {
+ "version": "7.0.7",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.7.tgz",
+ "integrity": "sha512-HThWSJEPkupqew2fnuQMEI2YcTj/8gMV3n80cMdJsKxfIh5tHf7nM5JigNX6LxVMqo6zkgQNAI88hyFvBk41Pg==",
+ "requires": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.5.0"
+ }
+ },
+ "postcss-calc": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz",
+ "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==",
+ "requires": {
+ "css-unit-converter": "^1.1.1",
+ "postcss": "^7.0.5",
+ "postcss-selector-parser": "^5.0.0-rc.4",
+ "postcss-value-parser": "^3.3.1"
+ }
+ },
+ "postcss-colormin": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.2.tgz",
+ "integrity": "sha512-1QJc2coIehnVFsz0otges8kQLsryi4lo19WD+U5xCWvXd0uw/Z+KKYnbiNDCnO9GP+PvErPHCG0jNvWTngk9Rw==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "color": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-convert-values": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
+ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-discard-comments": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.1.tgz",
+ "integrity": "sha512-Ay+rZu1Sz6g8IdzRjUgG2NafSNpp2MSMOQUb+9kkzzzP+kh07fP0yNbhtFejURnyVXSX3FYy2nVNW1QTnNjgBQ==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-duplicates": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
+ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-empty": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
+ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-overridden": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
+ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-discard-unused": {
+ "version": "2.2.3",
+ "resolved": "http://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz",
+ "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=",
+ "requires": {
+ "postcss": "^5.0.14",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "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"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-filter-plugins": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz",
+ "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==",
+ "requires": {
+ "postcss": "^5.0.4"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "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"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-merge-idents": {
+ "version": "2.1.7",
+ "resolved": "http://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz",
+ "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=",
+ "requires": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.10",
+ "postcss-value-parser": "^3.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "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"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-merge-longhand": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.10.tgz",
+ "integrity": "sha512-hME10s6CSjm9nlVIcO1ukR7Jr5RisTaaC1y83jWCivpuBtPohA3pZE7cGTIVSYjXvLnXozHTiVOkG4dnnl756g==",
+ "requires": {
+ "css-color-names": "0.0.4",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "stylehacks": "^4.0.0"
+ }
+ },
+ "postcss-merge-rules": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.2.tgz",
+ "integrity": "sha512-UiuXwCCJtQy9tAIxsnurfF0mrNHKc4NnNx6NxqmzNNjXpQwLSukUxELHTRF0Rg1pAmcoKLih8PwvZbiordchag==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "cssnano-util-same-parent": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0",
+ "vendors": "^1.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+ "requires": {
+ "dot-prop": "^4.1.1",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-message-helpers": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz",
+ "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4="
+ },
+ "postcss-minify-font-values": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
+ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-minify-gradients": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.1.tgz",
+ "integrity": "sha512-pySEW3E6Ly5mHm18rekbWiAjVi/Wj8KKt2vwSfVFAWdW6wOIekgqxKxLU7vJfb107o3FDNPkaYFCxGAJBFyogA==",
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "is-color-stop": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-minify-params": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.1.tgz",
+ "integrity": "sha512-h4W0FEMEzBLxpxIVelRtMheskOKKp52ND6rJv+nBS33G1twu2tCyurYj/YtgU76+UDCvWeNs0hs8HFAWE2OUFg==",
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "browserslist": "^4.0.0",
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "postcss-minify-selectors": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.1.tgz",
+ "integrity": "sha512-8+plQkomve3G+CodLCgbhAKrb5lekAnLYuL1d7Nz+/7RANpBEVdgBkPNwljfSKvZ9xkkZTZITd04KP+zeJTJqg==",
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+ "requires": {
+ "dot-prop": "^4.1.1",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "postcss-normalize-charset": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
+ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
+ "requires": {
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-normalize-display-values": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.1.tgz",
+ "integrity": "sha512-R5mC4vaDdvsrku96yXP7zak+O3Mm9Y8IslUobk7IMP+u/g+lXvcN4jngmHY5zeJnrQvE13dfAg5ViU05ZFDwdg==",
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-positions": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.1.tgz",
+ "integrity": "sha512-GNoOaLRBM0gvH+ZRb2vKCIujzz4aclli64MBwDuYGU2EY53LwiP7MxOZGE46UGtotrSnmarPPZ69l2S/uxdaWA==",
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-repeat-style": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.1.tgz",
+ "integrity": "sha512-fFHPGIjBUyUiswY2rd9rsFcC0t3oRta4wxE1h3lpwfQZwFeFjXFSiDtdJ7APCmHQOnUZnqYBADNRPKPwFAONgA==",
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-string": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.1.tgz",
+ "integrity": "sha512-IJoexFTkAvAq5UZVxWXAGE0yLoNN/012v7TQh5nDo6imZJl2Fwgbhy3J2qnIoaDBrtUP0H7JrXlX1jjn2YcvCQ==",
+ "requires": {
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-timing-functions": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.1.tgz",
+ "integrity": "sha512-1nOtk7ze36+63ONWD8RCaRDYsnzorrj+Q6fxkQV+mlY5+471Qx9kspqv0O/qQNMeApg8KNrRf496zHwJ3tBZ7w==",
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-unicode": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
+ "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-url": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
+ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
+ "requires": {
+ "is-absolute-url": "^2.0.0",
+ "normalize-url": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-normalize-whitespace": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.1.tgz",
+ "integrity": "sha512-U8MBODMB2L+nStzOk6VvWWjZgi5kQNShCyjRhMT3s+W9Jw93yIjOnrEkKYD3Ul7ChWbEcjDWmXq0qOL9MIAnAw==",
+ "requires": {
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-ordered-values": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.1.tgz",
+ "integrity": "sha512-PeJiLgJWPzkVF8JuKSBcylaU+hDJ/TX3zqAMIjlghgn1JBi6QwQaDZoDIlqWRcCAI8SxKrt3FCPSRmOgKRB97Q==",
+ "requires": {
+ "cssnano-util-get-arguments": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-reduce-idents": {
+ "version": "2.4.0",
+ "resolved": "http://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz",
+ "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=",
+ "requires": {
+ "postcss": "^5.0.4",
+ "postcss-value-parser": "^3.0.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "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"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "postcss-reduce-initial": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.2.tgz",
+ "integrity": "sha512-epUiC39NonKUKG+P3eAOKKZtm5OtAtQJL7Ye0CBN1f+UQTHzqotudp+hki7zxXm7tT0ZAKDMBj1uihpPjP25ug==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "caniuse-api": "^3.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0"
+ }
+ },
+ "postcss-reduce-transforms": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.1.tgz",
+ "integrity": "sha512-sZVr3QlGs0pjh6JAIe6DzWvBaqYw05V1t3d9Tp+VnFRT5j+rsqoWsysh/iSD7YNsULjq9IAylCznIwVd5oU/zA==",
+ "requires": {
+ "cssnano-util-get-match": "^4.0.0",
+ "has": "^1.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+ "requires": {
+ "cssesc": "^2.0.0",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ },
+ "postcss-svgo": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.1.tgz",
+ "integrity": "sha512-YD5uIk5NDRySy0hcI+ZJHwqemv2WiqqzDgtvgMzO8EGSkK5aONyX8HMVFRFJSdO8wUWTuisUFn/d7yRRbBr5Qw==",
+ "requires": {
+ "is-svg": "^3.0.0",
+ "postcss": "^7.0.0",
+ "postcss-value-parser": "^3.0.0",
+ "svgo": "^1.0.0"
+ }
+ },
+ "postcss-unique-selectors": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
+ "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
+ "requires": {
+ "alphanum-sort": "^1.0.0",
+ "postcss": "^7.0.0",
+ "uniqs": "^2.0.0"
+ }
+ },
+ "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=="
+ },
+ "postcss-zindex": {
+ "version": "2.2.0",
+ "resolved": "http://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz",
+ "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=",
+ "requires": {
+ "has": "^1.0.1",
+ "postcss": "^5.0.4",
+ "uniqs": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "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"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+ }
+ }
+ },
+ "has-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo="
+ },
+ "postcss": {
+ "version": "5.2.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
+ "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
+ "requires": {
+ "chalk": "^1.1.3",
+ "js-base64": "^2.1.9",
+ "source-map": "^0.5.6",
+ "supports-color": "^3.2.3"
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "requires": {
+ "has-flag": "^1.0.0"
+ }
+ }
+ }
+ },
+ "posthtml": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.11.3.tgz",
+ "integrity": "sha512-quMHnDckt2DQ9lRi6bYLnuyBDnVzK+McHa8+ar4kTdYbWEo/92hREOu3h70ZirudOOp/my2b3r0m5YtxY52yrA==",
+ "requires": {
+ "object-assign": "^4.1.1",
+ "posthtml-parser": "^0.3.3",
+ "posthtml-render": "^1.1.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ },
+ "posthtml-parser": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.3.3.tgz",
+ "integrity": "sha512-H/Z/yXGwl49A7hYQLV1iQ3h87NE0aZ/PMZhFwhw3lKeCAN+Ti4idrHvVvh4/GX10I7u77aQw+QB4vV5/Lzvv5A==",
+ "requires": {
+ "htmlparser2": "^3.9.2",
+ "isobject": "^2.1.0",
+ "object-assign": "^4.1.1"
+ }
+ }
+ }
+ },
+ "posthtml-parser": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.4.1.tgz",
+ "integrity": "sha512-h7vXIQ21Ikz2w5wPClPakNP6mJeJCK6BT0GpqnQrNNABdR7/TchNlFyryL1Bz6Ww53YWCKkr6tdZuHlxY1AVdQ==",
+ "requires": {
+ "htmlparser2": "^3.9.2",
+ "object-assign": "^4.1.1"
+ }
+ },
+ "posthtml-render": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.1.4.tgz",
+ "integrity": "sha512-jL6eFIzoN3xUEvbo33OAkSDE2VIKU4JQ1wENOows1DpfnrdapR/K3Q1/fB43Mq7wQlcSgRm23nFrvoioufM7eA=="
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
+ },
+ "prettier": {
+ "version": "1.13.7",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.7.tgz",
+ "integrity": "sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w==",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
+ },
+ "process": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+ },
"process-nextick-args": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
@@ -424,24 +6006,130 @@
},
"progress": {
"version": "1.1.8",
- "resolved": "http://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
"integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74="
},
+ "proto-list": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
+ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk="
+ },
+ "proxy-addr": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
+ "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
+ "requires": {
+ "forwarded": "~0.1.2",
+ "ipaddr.js": "1.8.0"
+ }
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+ },
"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=="
},
+ "public-encrypt": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+ "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"
+ }
+ },
"punycode": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
+ },
"qs": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
},
+ "query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "requires": {
+ "object-assign": "^4.1.0",
+ "strict-uri-encode": "^1.0.0"
+ }
+ },
+ "querystring": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+ "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+ },
+ "querystring-es3": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
+ },
+ "quote-stream": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz",
+ "integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=",
+ "requires": {
+ "buffer-equal": "0.0.1",
+ "minimist": "^1.1.3",
+ "through2": "^2.0.0"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ }
+ }
+ },
+ "randombytes": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
+ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+ "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==",
+ "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="
+ },
+ "raw-body": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
+ "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
+ "requires": {
+ "bytes": "3.0.0",
+ "http-errors": "1.6.3",
+ "iconv-lite": "0.4.23",
+ "unpipe": "1.0.0"
+ }
+ },
"readable-stream": {
"version": "2.3.6",
"resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
@@ -456,6 +6144,131 @@
"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==",
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "reduce-css-calc": {
+ "version": "1.3.0",
+ "resolved": "http://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
+ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
+ "requires": {
+ "balanced-match": "^0.4.2",
+ "math-expression-evaluator": "^1.2.14",
+ "reduce-function-call": "^1.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ }
+ }
+ },
+ "reduce-function-call": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz",
+ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=",
+ "requires": {
+ "balanced-match": "^0.4.2"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ }
+ }
+ },
+ "regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg=="
+ },
+ "regenerate-unicode-properties": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz",
+ "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==",
+ "requires": {
+ "regenerate": "^1.4.0"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
+ "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg=="
+ },
+ "regenerator-transform": {
+ "version": "0.13.3",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz",
+ "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==",
+ "requires": {
+ "private": "^0.1.6"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexpu-core": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz",
+ "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==",
+ "requires": {
+ "regenerate": "^1.4.0",
+ "regenerate-unicode-properties": "^7.0.0",
+ "regjsgen": "^0.5.0",
+ "regjsparser": "^0.6.0",
+ "unicode-match-property-ecmascript": "^1.0.4",
+ "unicode-match-property-value-ecmascript": "^1.0.2"
+ }
+ },
+ "regjsgen": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
+ "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA=="
+ },
+ "regjsparser": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
+ "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
+ }
+ }
+ },
+ "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="
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
"request": {
"version": "2.88.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
@@ -491,16 +6304,365 @@
"throttleit": "^1.0.0"
}
},
+ "resolve": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.9.0.tgz",
+ "integrity": "sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==",
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "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=="
+ },
+ "rgb-regex": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
+ "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE="
+ },
+ "rgba-regex": {
+ "version": "1.0.0",
+ "resolved": "http://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
+ "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM="
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "ripemd160": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.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=="
},
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "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=="
},
+ "safer-eval": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/safer-eval/-/safer-eval-1.2.3.tgz",
+ "integrity": "sha512-nDwXOhiheoaBT6op02n8wzsshjLXHhh4YAeqsDEoVmy1k2+lGv/ENLsGaWqkaKArUkUx48VO12/ZPa3sI/OEqQ==",
+ "requires": {
+ "clones": "^1.1.0"
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "semver": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg=="
+ },
+ "send": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
+ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+ "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"
+ }
+ },
+ "serialize-to-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/serialize-to-js/-/serialize-to-js-1.2.1.tgz",
+ "integrity": "sha512-TK6d30GNkOLeFDPuP6Jfy1Q1V31GxzppYTt2lzr8KWmIUKomFj+260QP5o4AhHLu0pr6urgyS8i/Z1PqurjBoA==",
+ "requires": {
+ "js-beautify": "^1.7.5",
+ "safer-eval": "^1.2.3"
+ }
+ },
+ "serve-static": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
+ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+ "requires": {
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.2",
+ "send": "0.16.2"
+ }
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "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=",
+ "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="
+ },
+ "setprototypeof": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+ "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
+ },
+ "sha.js": {
+ "version": "2.4.11",
+ "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+ "requires": {
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "shallow-copy": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz",
+ "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA="
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "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="
+ },
+ "sigmund": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz",
+ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA="
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "requires": {
+ "is-arrayish": "^0.3.1"
+ },
+ "dependencies": {
+ "is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+ }
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "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=",
+ "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=",
+ "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="
+ }
+ }
+ },
+ "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==",
+ "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=",
+ "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==",
+ "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==",
+ "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==",
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "requires": {
+ "is-plain-obj": "^1.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "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==",
+ "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.9",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz",
+ "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==",
+ "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="
+ },
"split": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
@@ -509,6 +6671,19 @@
"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==",
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
"sshpk": {
"version": "1.15.2",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
@@ -525,11 +6700,95 @@
"tweetnacl": "~0.14.0"
}
},
+ "stable": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w=="
+ },
"stack-trace": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
"integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
},
+ "static-eval": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.0.tgz",
+ "integrity": "sha512-6flshd3F1Gwm+Ksxq463LtFd1liC77N/PX1FVVc3OzL3hAmo2fwHFbuArkcfi7s9rTNsLEhcRmXGFZhlgy40uw==",
+ "requires": {
+ "escodegen": "^1.8.1"
+ }
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "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=",
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "static-module": {
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz",
+ "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==",
+ "requires": {
+ "concat-stream": "~1.6.0",
+ "convert-source-map": "^1.5.1",
+ "duplexer2": "~0.1.4",
+ "escodegen": "~1.9.0",
+ "falafel": "^2.1.0",
+ "has": "^1.0.1",
+ "magic-string": "^0.22.4",
+ "merge-source-map": "1.0.4",
+ "object-inspect": "~1.4.0",
+ "quote-stream": "~1.0.2",
+ "readable-stream": "~2.3.3",
+ "shallow-copy": "~0.0.1",
+ "static-eval": "^2.0.0",
+ "through2": "~2.0.3"
+ }
+ },
+ "statuses": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+ "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
+ },
+ "stream-browserify": {
+ "version": "2.0.1",
+ "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
+ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=",
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "^2.0.2"
+ }
+ },
+ "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==",
+ "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"
+ }
+ },
+ "strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
+ },
"string_decoder": {
"version": "1.1.1",
"resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -538,6 +6797,89 @@
"safe-buffer": "~5.1.0"
}
},
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "stylehacks": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.1.tgz",
+ "integrity": "sha512-TK5zEPeD9NyC1uPIdjikzsgWxdQQN/ry1X3d1iOz1UkYDCmcr928gWD1KHgyC27F50UnE0xCTrBOO1l6KR8M4w==",
+ "requires": {
+ "browserslist": "^4.0.0",
+ "postcss": "^7.0.0",
+ "postcss-selector-parser": "^3.0.0"
+ },
+ "dependencies": {
+ "postcss-selector-parser": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+ "requires": {
+ "dot-prop": "^4.1.1",
+ "indexes-of": "^1.0.1",
+ "uniq": "^1.0.1"
+ }
+ }
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "svgo": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.1.1.tgz",
+ "integrity": "sha512-GBkJbnTuFpM4jFbiERHDWhZc/S/kpHToqmZag3aEBjPYK44JAN2QBjvrGIxLOoCyMZjuFQIfTO2eJd8uwLY/9g==",
+ "requires": {
+ "coa": "~2.0.1",
+ "colors": "~1.1.2",
+ "css-select": "^2.0.0",
+ "css-select-base-adapter": "~0.1.0",
+ "css-tree": "1.0.0-alpha.28",
+ "css-url-regex": "^1.1.0",
+ "csso": "^3.5.0",
+ "js-yaml": "^3.12.0",
+ "mkdirp": "~0.5.1",
+ "object.values": "^1.0.4",
+ "sax": "~1.2.4",
+ "stable": "~0.1.6",
+ "unquote": "~1.1.1",
+ "util.promisify": "~1.0.0"
+ },
+ "dependencies": {
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
+ }
+ }
+ },
+ "terser": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-3.13.1.tgz",
+ "integrity": "sha512-ogyZye4DFqOtMzT92Y3Nxxw8OvXmL39HOALro4fc+EUYFFF9G/kk0znkvwMz6PPYgBtdKAodh3FPR70eugdaQA==",
+ "requires": {
+ "commander": "~2.17.1",
+ "source-map": "~0.6.1",
+ "source-map-support": "~0.5.6"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+ "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
+ }
+ }
+ },
"throttleit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
@@ -545,9 +6887,84 @@
},
"through": {
"version": "2.3.8",
- "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
},
+ "through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "requires": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "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==",
+ "requires": {
+ "setimmediate": "^1.0.4"
+ }
+ },
+ "timsort": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
+ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q="
+ },
+ "tiny-inflate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.2.tgz",
+ "integrity": "sha1-k9nez/yIBb1X6uQxDwt0Xptvs6c="
+ },
+ "to-arraybuffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
+ },
+ "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="
+ },
+ "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=",
+ "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=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "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=",
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
"tough-cookie": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
@@ -564,6 +6981,16 @@
}
}
},
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
+ },
+ "tty-browserify": {
+ "version": "0.0.0",
+ "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
+ },
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@@ -577,11 +7004,154 @@
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
},
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "type-is": {
+ "version": "1.6.16",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
+ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
+ "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="
},
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ=="
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
+ "unicode-property-aliases-ecmascript": "^1.0.4"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz",
+ "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ=="
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg=="
+ },
+ "unicode-trie": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz",
+ "integrity": "sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=",
+ "requires": {
+ "pako": "^0.2.5",
+ "tiny-inflate": "^1.0.0"
+ }
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "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=",
+ "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=",
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
+ "uniq": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
+ },
+ "uniqs": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI="
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ },
+ "unquote": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
+ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ="
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "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=",
+ "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=",
+ "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="
+ }
+ }
+ },
+ "upath": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
+ "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw=="
+ },
"uri-js": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
@@ -590,16 +7160,84 @@
"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="
+ },
+ "url": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+ "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+ "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="
+ }
+ }
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+ },
+ "util": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+ "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+ "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="
},
+ "util.promisify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+ "requires": {
+ "define-properties": "^1.1.2",
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
+ "utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ },
"uuid": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
},
+ "v-runtime-template": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/v-runtime-template/-/v-runtime-template-1.5.2.tgz",
+ "integrity": "sha512-cYXqoMx02V8ffNr6SeL3v30xN6E9gT+EK63kIZS6ikpoSxBRtsZTXSO3TbWsVGb3cKenDNw9PfYHmY3WQxxhLA=="
+ },
+ "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=="
+ },
+ "vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ },
+ "vendors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz",
+ "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ=="
+ },
"verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
@@ -610,6 +7248,63 @@
"extsprintf": "^1.2.0"
}
},
+ "vlq": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
+ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow=="
+ },
+ "vm-browserify": {
+ "version": "0.0.4",
+ "resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz",
+ "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=",
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
+ "vue": {
+ "version": "2.5.21",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.21.tgz",
+ "integrity": "sha512-Aejvyyfhn0zjVeLvXd70h4hrE4zZDx1wfZqia6ekkobLmUZ+vNFQer53B4fu0EjWBSiqApxPejzkO1Znt3joxQ=="
+ },
+ "vue-hot-reload-api": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.1.tgz",
+ "integrity": "sha512-AA86yKZ5uOKz87/q1UpngEXhbRkaYg1b7HMMVRobNV1IVKqZe8oLIzo6iMocVwZXnYitlGwf2k4ZRLOZlS8oPQ=="
+ },
+ "vue-router": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.0.2.tgz",
+ "integrity": "sha512-opKtsxjp9eOcFWdp6xLQPLmRGgfM932Tl56U9chYTnoWqKxQ8M20N7AkdEbM5beUh6wICoFGYugAX9vQjyJLFg=="
+ },
+ "vue-template-compiler": {
+ "version": "2.5.21",
+ "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.21.tgz",
+ "integrity": "sha512-Vmk5Cv7UcmI99B9nXJEkaK262IQNnHp5rJYo+EwYpe2epTAXqcVyExhV6pk8jTkxQK2vRc8v8KmZBAwdmUZvvw==",
+ "dev": true,
+ "requires": {
+ "de-indent": "^1.0.2",
+ "he": "^1.1.0"
+ }
+ },
+ "vue-template-es2015-compiler": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz",
+ "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==",
+ "dev": true
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "whet.extend": {
+ "version": "0.9.9",
+ "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
+ "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE="
+ },
"which": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
@@ -631,6 +7326,34 @@
"stack-trace": "0.0.x"
}
},
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "ws": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
+ "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+ },
"yauzl": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
diff --git a/package.json b/package.json
index ba2f5b6..7e361ca 100644
--- a/package.json
+++ b/package.json
@@ -5,11 +5,28 @@
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
- "start": "node server.js"
+ "start": "node src/server.js",
+ "start-parcel": "parcel src/index.html",
+ "build": "parcel build --public-url ./ src/index.html"
},
"author": "Adam Goldsmith",
"license": " CC-BY-SA-4.0",
"dependencies": {
- "phantom": "^4.0.12"
+ "express": "^4.16.4",
+ "interactjs": "^1.3.4",
+ "parcel-bundler": "^1.11.0",
+ "phantom": "^4.0.12",
+ "v-runtime-template": "^1.5.2",
+ "vue": "^2.5.21",
+ "vue-hot-reload-api": "^2.3.1",
+ "vue-router": "^3.0.2"
+ },
+ "devDependencies": {
+ "@vue/component-compiler-utils": "^2.3.1",
+ "parcel": "^1.11.0",
+ "vue-template-compiler": "^2.5.21"
+ },
+ "alias": {
+ "vue": "./node_modules/vue/dist/vue.common.js"
}
}
diff --git a/server.js b/server.js
deleted file mode 100644
index 0ca57e1..0000000
--- a/server.js
+++ /dev/null
@@ -1,263 +0,0 @@
-// jshint node:true
-// jshint esversion:6
-"use strict";
-
-const http = require('http'),
- fs = require('fs'),
- path = require('path'),
- url = require('url'),
- phantom = require('phantom'),
- port = 8080;
-
-const decks = ["the_Unholy_Priest_update_2", "NZoths_Invasion_1.2", "Puffer_Fish_input_1.3"];
-
-const server = http.createServer((req, res) => {
- const uri = url.parse(req.url);
-
- let pathParts = uri.pathname.split("/");
- switch (pathParts[1]) {
- case '':
- case 'index.html':
- sendIndex(res);
- break;
- case 'css':
- switch (pathParts[2]) {
- case 'playfield.css':
- case 'editor.css':
- case 'common.css':
- sendFile(res, path.join('css', pathParts[2]), 'text/css');
- break;
- default:
- send404(res, uri);
- }
- break;
- case 'js':
- switch (pathParts[2]) {
- case 'playfield.js':
- case 'editor.js':
- case 'interact.js':
- sendFile(res, path.join('js', pathParts[2]), 'application/javascript');
- break;
- default:
- send404(res, uri);
- }
- break;
- case 'template':
- pathParts.splice(0, 2); // remove first two elements
- let item = pathParts.join("/");
- console.log("template/" + item);
- switch (item) {
- case "card.json":
- case "deck.json":
- case "environment/input.json":
- case "hero/input.json":
- case "villain/input.json":
- sendFile(res, path.join("template", item), 'application/json');
- break;
- case "environment/deck.svg":
- case "hero/deck.svg":
- case "hero/character-back.svg":
- case "hero/character.svg":
- case "villain/deck.svg":
- case "villain/character.svg":
- case "villain/instructions.svg":
- sendFile(res, path.join("template", item), 'image/svg+xml');
- break;
- default:
- send404(res, uri);
- }
- break;
- case 'deck':
- if (pathParts.length < 3 || pathParts[2] === '') {
- sendIndex(res);
- break;
- }
- let deckName = decodeURI(pathParts[2]);
- switch (pathParts[3] || '') {
- case '':
- sendDeckIndex(res, deckName);
- break;
- case 'play':
- sendFile(res, 'html/playfield.html');
- break;
- case 'editor':
- sendFile(res, 'html/editor.html');
- break;
- case 'deck.png':
- sendFile(res, `decks/${deckName}.png`, 'image/png');
- break;
- case 'deck.json':
- sendFileJSON(res, deckName);
- break;
- case 'deck.tts.json':
- sendFile(res, `decks/${deckName}.json`, 'application/json');
- break;
- case 'deck.input.json':
- sendFile(res, `decks/${deckName}.input.json`, 'application/json');
- break;
- case 'upload':
- handleUpload(res, req);
- break;
- default:
- send404(res, uri);
- }
- break;
- default:
- send404(res, uri);
- }
-});
-
-server.listen(process.env.PORT || port);
-console.log('listening on 8080');
-
-function sendIndex(res) {
- const html = `
-
-
-
- Index
-
-
- Create New Deck:
-
- ${(decks.map(d => `${d} `).join(' '))}
-
-
- `;
- res.writeHead(200, {'Content-type': 'text/html; charset=utf-8'});
- res.end(html, 'utf-8');
-}
-
-function sendDeckIndex(res, deckName) {
- const html = `
-
-
-
- ${deckName}
-
-
-
-
- `;
- res.writeHead(200, {'Content-type': 'text/html; charset=utf-8'});
- res.end(html, 'utf-8');
-}
-
-function sendFileJSON(res, deckName) {
- fs.readFile(`decks/${deckName}.json`, (error, content) => {
- console.log(JSON.parse(content));
- res.writeHead(200, {'Content-type': 'application/json; charset=utf-8'});
- res.end(JSON.stringify(JSON.parse(content).ObjectStates[0]), 'utf-8');
- if (error) {
- console.error(error);
- }
- });
-}
-
-function handleUpload(res, req) {
- let body = '';
-
- req.on('data', data => {
- body += data;
- // check for file > 100MB
- if (body.length > 1e8) {
- req.connection.destroy();
- console.log('upload too big');
- }
- });
-
- req.on('end', () => {
- const json = JSON.parse(body);
- const deckJSON = json.json;
- const cardTemplate = fs.readFileSync('template/card.json');
- const template = JSON.parse(fs.readFileSync(`template/${deckJSON.type}/input.json`));
- const cardCount = Object.entries(template.cardTypes)
- .map(ct => deckJSON[ct[0]].length * (ct[1].back ? 2 : 1))
- .reduce((sum, current) => sum + current, 0);
-
- let deckOut = JSON.parse(fs.readFileSync('template/deck.json'));
- deckOut.ObjectStates[0].Nickname = deckJSON.name;
-
- Object.assign(deckOut.ObjectStates[0].CustomDeck['1'],
- {NumWidth: Math.ceil(Math.sqrt(cardCount)),
- NumHeight: Math.ceil(Math.sqrt(cardCount)),
- FaceURL: `http://${req.headers.host}/deck/${deckJSON.name}/deck.png`,
- BackURL: "http://cloud-3.steamusercontent.com/ugc/156906385556221451/CE2C3AFE1759790CB0B532FFD636D05A99EC91F4/"});
-
- let index = 100;
- deckOut.ObjectStates[0].ContainedObjects =
- Object.entries(template.cardTypes).map(
- cardType => deckJSON[cardType[0]].map(cardIn => {
- let cardOut = JSON.parse(cardTemplate);
- Object.assign(cardOut, {Nickname: cardIn.name,
- Description: cardIn.keywords,
- CardID: index});
-
- for (let ii=0; ii<(cardIn.count || 1); ii++) {
- deckOut.ObjectStates[0].DeckIDs.push(index);
- }
- index++;
-
- if(cardType[1].back) {
- let cardBack = JSON.parse(cardTemplate);
- Object.assign(cardBack, {Nickname: cardIn.back.name,
- Description: cardIn.back.keywords,
- CardID: index});
- cardOut.States = {"2": cardBack};
- index++;
- }
- return cardOut;
- }))
- .reduce((sum, cur) => sum.concat(cur), []);
-
- fs.writeFileSync(`decks/${deckJSON.name}.json`, JSON.stringify(deckOut));
- fs.writeFileSync(`decks/${deckJSON.name}.input.json`, JSON.stringify(deckJSON));
-
- console.log("making page");
- phantom.create().then(
- ph => ph.createPage().then(
- page => {
- page.on('onLoadFinished', status => {
- if (status !== 'success') {
- console.log('Failed to load page');
- ph.exit(1);
- }
- else {
- page.render(`decks/${deckJSON.name}.png`);
- page.close().then(() => ph.exit());
- }
- });
- page.property('zoomFactor', 2); // pretty arbitrary
- page.property('content', '' + json.body + '');
- }));
- decks.push(deckJSON.name);
- });
-}
-
-function send404(res, uri) {
- res.writeHead(404, {'Content-type': "text/html; charset=utf-8"});
- const html = `
-
- 404 Not Found
-
-
-
- Error 404: Path ${uri.pathname} not found
- You seem to have gone to the wrong place, would you like to go
- back to the main page ?
- `;
- res.end(html, 'utf-8');
-}
-
-function sendFile(res, filename, contentType='text/html; charset=utf-8') {
- fs.readFile(filename, (error, content) => {
- res.writeHead(200, {'Content-type': contentType});
- res.end(content, 'utf-8');
- if (error) {
- console.error(error);
- }
- });
-}
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..5bdfcf1
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/src/DeckIndex.vue b/src/DeckIndex.vue
new file mode 100644
index 0000000..4fcca8c
--- /dev/null
+++ b/src/DeckIndex.vue
@@ -0,0 +1,32 @@
+
+
+ Create New Deck:
+
+
+
+
+ {{ deck }}:
+ Play
+ Edit
+
+
+
+
+
+
diff --git a/src/Editor.vue b/src/Editor.vue
new file mode 100644
index 0000000..1c8239a
--- /dev/null
+++ b/src/Editor.vue
@@ -0,0 +1,187 @@
+
+
+
+
+ Save Deck
+
+ Download Input JSON
+
+
+
+ Download Tabletop Output JSON
+
+
+
+
+ Upload JSON: WARNING: WILL CLEAR DECK
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/index.html b/src/index.html
new file mode 100644
index 0000000..0807906
--- /dev/null
+++ b/src/index.html
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/index.js b/src/index.js
new file mode 100644
index 0000000..5258e52
--- /dev/null
+++ b/src/index.js
@@ -0,0 +1,21 @@
+import Vue from 'vue';
+import VueRouter from 'vue-router';
+
+import App from './App.vue';
+import DeckIndex from './DeckIndex.vue';
+import Editor from './Editor.vue';
+
+Vue.use(VueRouter);
+
+const router = new VueRouter({
+ routes: [
+ {path: '/', component: DeckIndex},
+ {path: '/edit/:deckName', component: Editor, props: true},
+ ],
+});
+
+new Vue({
+ el: '#charSheet',
+ render: h => h(App),
+ router,
+});
diff --git a/src/server.js b/src/server.js
new file mode 100644
index 0000000..db5388e
--- /dev/null
+++ b/src/server.js
@@ -0,0 +1,109 @@
+// jshint node:true
+// jshint esversion:6
+"use strict";
+
+const express = require('express'),
+ Bundler = require('parcel-bundler'),
+ fs = require('fs'),
+ path = require('path'),
+ phantom = require('phantom'),
+ port = process.env.PORT || 1234;
+
+const decks = ["the_Unholy_Priest_update_2",
+ "NZoths_Invasion_1.2",
+ "Puffer_Fish_input_1.3"];
+
+const app = express();
+app.use(express.json());
+
+app.use('/template', express.static('template'));
+app.use('/decks', express.static('decks'));
+app.get('/decks.json', (req, res) => res.json(decks));
+app.post('/upload', handleUpload);
+
+let bundler = new Bundler(path.join(__dirname, 'index.html'));
+app.use(bundler.middleware());
+
+app.listen(port, () => console.log(`App listening on port ${port}!`));
+
+function handleUpload(req, res) {
+ const json = request.body;
+ const deckJSON = json.json;
+ const cardTemplate = fs.readFileSync('template/card.json');
+ const template = JSON.parse(fs.readFileSync(`template/${deckJSON.type}/input.json`));
+ const cardCount = Object.entries(template.cardTypes)
+ .map(ct => deckJSON[ct[0]].length * (ct[1].back ? 2 : 1))
+ .reduce((sum, current) => sum + current, 0);
+
+ let deckOut = JSON.parse(fs.readFileSync('template/deck.json'));
+ deckOut.ObjectStates[0].Nickname = deckJSON.name;
+
+ Object.assign(deckOut.ObjectStates[0].CustomDeck['1'],
+ {NumWidth: Math.ceil(Math.sqrt(cardCount)),
+ NumHeight: Math.ceil(Math.sqrt(cardCount)),
+ FaceURL: `http://${req.headers.host}/deck/${deckJSON.name}/deck.png`,
+ BackURL: "http://cloud-3.steamusercontent.com/ugc/156906385556221451/CE2C3AFE1759790CB0B532FFD636D05A99EC91F4/"});
+
+ let index = 100;
+ deckOut.ObjectStates[0].ContainedObjects =
+ Object.entries(template.cardTypes).map(
+ cardType => deckJSON[cardType[0]].map(cardIn => {
+ let cardOut = JSON.parse(cardTemplate);
+ Object.assign(cardOut, {Nickname: cardIn.name,
+ Description: cardIn.keywords,
+ CardID: index});
+
+ for (let ii=0; ii<(cardIn.count || 1); ii++) {
+ deckOut.ObjectStates[0].DeckIDs.push(index);
+ }
+ index++;
+
+ if(cardType[1].back) {
+ let cardBack = JSON.parse(cardTemplate);
+ Object.assign(cardBack, {Nickname: cardIn.back.name,
+ Description: cardIn.back.keywords,
+ CardID: index});
+ cardOut.States = {"2": cardBack};
+ index++;
+ }
+ return cardOut;
+ }))
+ .reduce((sum, cur) => sum.concat(cur), []);
+
+ fs.writeFileSync(`decks/${deckJSON.name}.json`, JSON.stringify(deckOut));
+ fs.writeFileSync(`decks/${deckJSON.name}.input.json`, JSON.stringify(deckJSON));
+
+ console.log("making page");
+ phantom.create().then(
+ ph => ph.createPage().then(
+ page => {
+ page.on('onLoadFinished', status => {
+ if (status !== 'success') {
+ console.log('Failed to load page');
+ ph.exit(1);
+ }
+ else {
+ page.render(`decks/${deckJSON.name}.png`);
+ page.close().then(() => ph.exit());
+ }
+ });
+ page.property('zoomFactor', 2); // pretty arbitrary
+ page.property('content', '' + json.body + '');
+ }));
+ decks.push(deckJSON.name);
+}
+
+function send404(res, uri) {
+ res.writeHead(404, {'Content-type': "text/html; charset=utf-8"});
+ const html = `
+
+ 404 Not Found
+
+
+
+ Error 404: Path ${uri.pathname} not found
+ You seem to have gone to the wrong place, would you like to go
+ back to the main page ?
+ `;
+ res.end(html, 'utf-8');
+}
diff --git a/template/card.json b/src/template/card.json
similarity index 100%
rename from template/card.json
rename to src/template/card.json
diff --git a/template/deck.json b/src/template/deck.json
similarity index 100%
rename from template/deck.json
rename to src/template/deck.json
diff --git a/template/environment/deck.svg b/src/template/environment/deck.svg
similarity index 100%
rename from template/environment/deck.svg
rename to src/template/environment/deck.svg
diff --git a/template/environment/input.json b/src/template/environment/input.json
similarity index 100%
rename from template/environment/input.json
rename to src/template/environment/input.json
diff --git a/src/template/hero/Hero.vue b/src/template/hero/Hero.vue
new file mode 100644
index 0000000..b8c0f16
--- /dev/null
+++ b/src/template/hero/Hero.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
diff --git a/template/hero/character-back.svg b/src/template/hero/character-back.svg
similarity index 100%
rename from template/hero/character-back.svg
rename to src/template/hero/character-back.svg
diff --git a/template/hero/character.svg b/src/template/hero/character.svg
similarity index 100%
rename from template/hero/character.svg
rename to src/template/hero/character.svg
diff --git a/template/hero/deck.svg b/src/template/hero/deck.svg
similarity index 99%
rename from template/hero/deck.svg
rename to src/template/hero/deck.svg
index 433b6a2..ba6e82e 100644
--- a/template/hero/deck.svg
+++ b/src/template/hero/deck.svg
@@ -310,21 +310,23 @@
-
+ {{ name }}
+
- Keywords
+ {{ keywords }}
- Header
-
+
- 3
+ {{ hp }}
- Text Here
- "Type Quote Here!"
- - Name, Comic #
- Art By
+
+ {{ text }}
+
+ {{ quote }}
+ - {{ quoteCitation }}
+ Art By {{ artist }}
diff --git a/template/hero/input.json b/src/template/hero/input.json
similarity index 100%
rename from template/hero/input.json
rename to src/template/hero/input.json
diff --git a/template/villain/character.svg b/src/template/villain/character.svg
similarity index 100%
rename from template/villain/character.svg
rename to src/template/villain/character.svg
diff --git a/template/villain/deck.svg b/src/template/villain/deck.svg
similarity index 100%
rename from template/villain/deck.svg
rename to src/template/villain/deck.svg
diff --git a/template/villain/input.json b/src/template/villain/input.json
similarity index 100%
rename from template/villain/input.json
rename to src/template/villain/input.json
diff --git a/template/villain/instructions.svg b/src/template/villain/instructions.svg
similarity index 100%
rename from template/villain/instructions.svg
rename to src/template/villain/instructions.svg